분산 학습을 위한 AWS 공유 스토리지 - FSx for Lustre vs EFS vs S3(Mountpoint)
· 28 min read
해당 포스팅은 현재 재직중인 회사에 관련이 없고, 개인 역량 개발을 위한 스터디 자료로 활용할 예정입니다.
지난 두 편에서 노드 간 네트워크(EFA)를 다뤘다. 빠르게 대화하는 건 해결했는데, 분산 학습에는 또 하나의 큰 질문이 남아 있다.
"그 많은 노드가 학습 데이터와 체크포인트를 어디서 같이 읽고 쓰지?"
노드가 2대일 때는 각 노드에 데이터를 복사해도 되지만, 수십~수백 노드로 스케일하면 그건 불가능하다. 공유 스토리지가 필요하다. AWS에서 선택지는 크게 세 가지다.
- FSx for Lustre - HPC용 고성능 병렬 파일시스템
- EFS (Elastic File System) - 범용 NFS
- Mountpoint for Amazon S3 - S3를 POSIX 파일시스템처럼 마운트
이 글에서는 각각의 특성을 분산 학습 관점에서 비교하고, 언제 뭘 쓰면 되는지 정리한다.
분산 학습에서 스토리지에 요구되는 것
본격적으로 비교하기 전에, 분산 학습이 스토리지에 요구하는 조건을 짚어보자.
읽기: 학습 데이터 로딩
- 높은 읽기 처리량(throughput): 수십~수백 GPU가 동시에 데이터를 읽는다. 단일 노드 기준 수 GB/s 이상의 읽기 대역폭이 필요할 수 있다.
- 랜덤 읽기 성능: 이미지 분류처럼 작은 파일을 랜덤하게 읽는 패턴이면 IOPS가 중요하다.
- 순차 읽기 성능: LLM 학습에서 토크나이즈된 대용량 바이너리를 순차 스트리밍하는 경우 throughput이 지배적이다.
쓰기: 체크포인트 저장
- 쓰기 대역폭: 수십~수백 GB 크기의 모델 체크포인트를 주기적으로 저장한다. 쓰기가 느리면 학습 GPU가 idle 상태로 대기하게 된다.
- 일관성(consistency): 여러 노드가 동시에 쓸 때 데이터가 꼬이지 않아야 한다.
- 내구성(durability): 수일간의 학습 결과물이므로 잃어버리면 안 된다.
공통
- POSIX 호환: PyTorch/TensorFlow의 데이터 로더는 기본적으로 파일시스템 경로를 기대한다.
- 멀티노드 동시 접근: 모든 노드가 같은 경로를 마운트할 수 있어야 한다.
1. FSx for Lustre - 고성능 병렬 파일시스템
개요
FSx for Lustre는 오픈소스 병렬 파일시스템 Lustre를 AWS가 완전관리형으로 제공하는 서비스다. 온프레미스 HPC 클러스터에서 수십 년간 검증된 Lustre를 클라우드에서 그대로 쓸 수 있다.
특성
- 병렬 I/O: 데이터를 여러 스토리지 서버(OST)에 스트라이핑한다. 클라이언트(노드)가 늘어날수록 aggregate throughput이 선형으로 증가한다.
- 높은 처리량: Persistent 2 배포 유형 기준, 스토리지 용량에 비례해 최대 수백 GB/s까지 확장 가능하다. 1TB당 최대 1,000 MB/s(1000 처리량 티어).
- 낮은 지연: sub-millisecond latency. 메타데이터 연산도 빠르다.
- S3 통합: S3 버킷을 Data Repository로 연결하면, FSx가 S3 데이터를 자동으로 lazy-load(처음 접근 시 가져옴)하고, 결과를 S3로 export할 수 있다.
- POSIX 완전 호환: 심볼릭 링크, 하드 링크, 파일 잠금 등 모두 지원.