File 모드의 사용 편의성(POSIX 파일처럼 접근)과 Pipe 모드의 즉시 시작을 절충한 비교적 최신 모드다. 파일을 필요할 때 스트리밍으로 가져오되 로컬 파일처럼 다룬다. 전체 다운로드를 기다리지 않으면서 랜덤 접근이 가능해 대용량 데이터셋에 자주 권장된다.
# SageMaker Estimator에서 입력 모드 지정 (개념 예시)from sagemaker.estimator import Estimatorfrom sagemaker.inputs import TrainingInputestimator = Estimator( image_uri=image, role=role, instance_count=1, instance_type="ml.p3.2xlarge", input_mode="Pipe", # "File" | "Pipe" | "FastFile")train_input = TrainingInput( s3_data="s3://ml-train/clicks/", input_mode="FastFile", # 입력별로 모드를 다시 지정할 수 있다)estimator.fit({"train": train_input})
File 모드는 "다 받고 시작", Pipe 모드는 "받으면서 시작"이다. 핵심 트레이드오프는 시작 지연 vs 랜덤 접근 유연성이다. 수백 GB~TB 규모라 시작 지연과 디스크 비용이 걱정이면 Pipe가 낫고, 소규모 데이터를 유연하게 자주 읽으면 File이 낫다.
⚠️ 함정: "Pipe 모드가 항상 빠르다"는 단순화는 위험하다. Pipe는 순차 스트림이라 랜덤 접근과 셔플이 어렵고 특정 포맷을 요구한다. 소규모거나 랜덤 접근이 필요한 데이터에는 File/FastFile이 오히려 적합하다. 데이터 크기·접근 패턴·포맷을 모두 따져야 한다.
대규모·반복 학습에서 S3 직접 접근의 지연을 더 줄이고 싶을 때 Amazon FSx for Lustre를 쓴다. Lustre는 HPC(고성능 컴퓨팅)용 병렬 파일 시스템으로, 매우 높은 처리량과 낮은 지연을 제공한다.
주요 특징:
S3 연동: FSx for Lustre를 S3 버킷에 연결하면 데이터가 자동으로 로드·동기화된다. S3는 영구 저장소, FSx는 고속 캐시 겸 작업 공간 역할을 한다.
반복 학습에 강함: 여러 에폭·여러 잡에서 같은 데이터를 반복해서 읽을 때, 매번 S3에서 가져오지 않고 FSx에서 빠르게 읽는다.
분산 학습의 공유 스토리지: 여러 학습 노드가 같은 파일 시스템을 동시에 고속으로 읽는다.
FSx for Lustre가 빛나는 전형적 상황은 (1) 데이터셋이 크고, (2) 여러 학습 잡과 에폭에서 반복해서 읽으며, (3) 낮은 지연이 중요한 경우다. 단발성이거나 소규모 학습이라면 S3 직접 접근(File/FastFile)으로 충분하고, FSx의 추가 비용과 설정은 정당화되지 않는다.
데이터 병렬 학습에서는 각 노드가 자기 몫의 데이터만 읽는 것이 효율적이다. SageMaker는 S3DataDistributionType으로 이를 제어한다.
FullyReplicated (기본): 모든 인스턴스가 전체 데이터셋을 받는다.
ShardedByS3Key: S3 객체(파일)를 인스턴스별로 나눠 각자 자기 몫만 받는다. 데이터 병렬 학습에서 중복 다운로드·중복 처리를 없애 효율을 높인다.
# 분산 데이터 병렬 학습에서 샤딩 지정 (개념 예시)train_input = TrainingInput( s3_data="s3://ml-train/clicks/", distribution="ShardedByS3Key", # 각 인스턴스가 데이터의 일부만 받는다)estimator = Estimator( image_uri=image, role=role, instance_count=4, # 4개 노드로 분산 instance_type="ml.p3.16xlarge",)estimator.fit({"train": train_input})
ShardedByS3Key가 효과를 내려면 데이터가 여러 개의 S3 객체(파일)로 나뉘어 있어야 한다. 거대한 단일 파일 하나는 객체 수준에서 쪼갤 수 없어 샤딩이 아무 효과도 내지 못한다. 따라서 대규모 데이터는 적당한 크기의 여러 파일(예: 수백 개의 Parquet/RecordIO 샤드)로 미리 나눠 두는 것이 분산 학습 친화적이다.
⚠️ 함정: 검증셋까지 ShardedByS3Key로 나누면 각 노드가 서로 다른 검증 데이터를 보게 되어 지표가 어긋난다. 검증 채널은 보통 FullyReplicated가 맞다.
시작까지 오래 걸리는가 → File 모드의 전체 다운로드 대기일 가능성이 높다. Pipe/FastFile 검토.
같은 데이터를 반복해서 읽는가 → FSx for Lustre로 캐시 효과를 얻는다.
파일이 지나치게 많고 작은가 → 샤드로 통합해 요청 오버헤드를 줄인다.
노드마다 전체를 받고 있는가 → ShardedByS3Key로 분배한다.
🎯 시나리오: "수 TB 데이터를 8개 GPU 노드로 데이터 병렬 학습하는데, 각 노드가 전체 데이터를 받아 시작이 너무 느리다." → 데이터를 여러 파일로 나누고 ShardedByS3Key로 각 노드가 자기 몫만 받게 한다. 중복 다운로드와 중복 처리가 사라진다. 반복 읽기가 많다면 FSx for Lustre를 공유 스토리지로 붙여 지연을 더 줄인다.