피드로 돌아가기
Hugging Face BlogBackend
원문 읽기
Hugging Face가 datasets 라이브러리의 스트리밍 백엔드를 재설계해 초기 요청을 100배 감소, 데이터 파일 해석 시간을 10배 단축, 처리 속도를 2배 향상
Streaming datasets: 100x More Efficient
AI 요약
Context
Terabyte 규모의 대규모 데이터셋 스트리밍 훈련 시 각 DataLoader 워커가 독립적으로 데이터셋을 초기화하면서 요청 폭주가 발생했다. SmolVLM 훈련 중 1분 내에 100,000개 이상의 요청이 생성되어 IP가 차단되는 사건이 발생했다. 기존 방식은 S3 같은 클라우드 스토리지에 데이터를 사전 다운로드하거나 유지해야 했고, 각 훈련 실행 전 3시간의 대기 시간이 소요됐다.
Technical Solution
- 영구 데이터 파일 캐시 도입: 첫 번째 워커가 Hub에서 파일 목록을 해석하고, 나머지 워커들은 로컬 캐시에서 직접 읽도록 변경해 초기 요청 100배 감소
- 최적화된 해석 로직: 초기 워커의 API 호출 횟수를 최소화하고 필요한 요청을 최대한 효율적으로 번들링
- Parquet 프리페칭 기능: 모델이 현재 데이터 청크를 처리 중일 때 백그라운드에서 다음 청크를 미리 가져오는 기능 활성화
- 설정 가능한 버퍼링: 고급 사용자가 ParquetFragmentScanOptions를 통해 블록 크기와 프리페치 볼륨을 직접 조정 가능 (기본값 32MiB에서 128MiB로 증량 가능)
- HfFileSystem 개선: huggingface_hub 라이브러리의 HfFileSystem이 .ls()와 .glob() 캐시 결과를 재사용해 추가 요청 제거
- Xet 기반 중복 제거: Content Defined Chunking(CDC)을 통해 Parquet 파일 업로드 시 중복 데이터는 한 번만 전송
Impact
- 데이터 파일 해석 시간: 10배 단축
- 초기 시작 요청: 최대 100배 효율화
- 스트리밍 속도: 최대 2배 향상
- 샘플 처리량(sample/sec): 2배 증가
- 256개 동시 워커 환경에서 워커 충돌: 0건 달성
- 256명의 워커로 64xH100에서 훈련할 때 스트리밍 속도가 로컬 SSD 읽기 속도와 동등한 수준 도달
Key Takeaway
대규모 분산 시스템에서 초기화 단계의 중복 요청은 exponential 문제로 발전하므로, 공유 캐시와 워커 간 협조 메커니즘으로 해결해야 한다. 또한 프리페칭과 설정 가능한 버퍼링을 통해 특정 하드웨어 환경에 최적화된 I/O 파이프라인을 구성할 수 있다.
실천 포인트
대규모 ML 훈련 파이프라인에서 Hugging Face datasets 라이브러리 사용 시 streaming=True 플래그와 ParquetFragmentScanOptions를 함께 설정하면 (기본값 유지 또는 환경에 맞게 조정), S3 같은 클라우드 스토리지 선반입 없이도 Hub에서 직접 스트리밍 훈련이 가능하며 로컬 SSD 수준의 성능을 달성할 수 있다.