피드로 돌아가기
Streaming datasets: 100x More Efficient
Hugging Face BlogHugging Face Blog
Backend

Hugging Face가 datasets 라이브러리의 스트리밍 백엔드를 재설계해 초기 요청을 100배 감소, 데이터 파일 해석 시간을 10배 단축, 처리 속도를 2배 향상

Streaming datasets: 100x More Efficient

2025년 10월 27일8intermediate

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 수준의 성능을 달성할 수 있다.

원문 읽기