본문으로 건너뛰기

© 2026 Molayo

HuggingFace헤드라인2026. 05. 07. 01:13

스트리밍 데이터셋: 100 배 효율성 향상

요약

이 기술 기사는 Hugging Face의 `datasets` 및 `huggingface_hub` 라이브러리에 도입된 스트리밍 데이터 처리 기능 개선 사항들을 소개합니다. 이 업데이트를 통해 사용자는 멀티 테라바이트(multi-TB) 규모의 대규모 데이터셋을 다운로드 없이 즉시 훈련에 사용할 수 있게 되었으며, 이는 기존 대비 월등히 향상된 효율성과 속도를 제공합니다. 주요 개선점으로는 Parquet prefetching 활성화, 사용자 정의 버퍼링 옵션 노출, 그리고 Xet 기반의 중복 제거 업로드를 통한 데이터 전송 가속화 등이 포함됩니다. 이러한 최적화를 통해 훈련 파이프라인의 병목 현상을 해소하고 로컬 SSD에서 데이터를 읽는 것과 유사한 속도를 달성할 수 있게 되었습니다.

핵심 포인트

  • 스트리밍 모드(`streaming=True`)를 사용하여 대규모 데이터셋을 다운로드 없이 즉시 훈련에 활용할 수 있습니다.
  • Parquet prefetching 및 사용자 정의 버퍼링 옵션을 통해 I/O 효율성을 극대화하고 GPU가 데이터 대기 시간 없이 작동하도록 보장합니다.
  • Xet 기반의 중복 제거(deduplication) 업로드와 Parquet CDC 지원으로 Hugging Face 데이터 전송 속도가 크게 가속화되었습니다.
  • `huggingface_hub`의 `HfFileSystem` 개선을 통해 원격 저장소에서 파일 목록 조회 및 읽기 작업이 효율적으로 스트리밍됩니다.
  • 이러한 최적화를 통해 훈련 시간이 단축되어, 이전에는 데이터 전송으로 인해 지연되던 과정이 로컬 SSD 수준의 속도를 달성했습니다.

load_dataset('dataset', streaming=True) 를 사용하여 다운로드 없이 스트리밍 데이터를 한 줄의 코드만으로 가능하게 하여 성능을 크게 향상시켰습니다! 멀티 테라바이트 (multi-TB) 데이터셋에서 즉시 훈련 시작, 복잡한 설정 없이, 다운로드 없이, 디스크 공간 부족 (

Parquet prefetching: Parquet 데이터셋을 위한 prefetching 을 활성화했습니다. 이는 모델이 현재 데이터 청크를 처리하는 동안, 데이터셋 라이브러리가 배경에서 다음 청크를 이미 가져오고 있음을 의미합니다. 이는 데이터 파이프라인을 가득 차게 유지하고 GPU 가 데이터에 대한 대기 없이 작동하도록 보장합니다.

Configurable Buffering: 고급 사용자는 이제 자신의 특정 하드웨어 및 네트워크 설정에 맞게 스트리밍 성능을 미세 조정할 수 있습니다. 우리는 버퍼의 블록 크기 및 prefetch volume 을 구성할 옵션을 노출하여 I/O 를 최적화하기 위해 최대 제어권을 제공합니다.

이것이 스트리밍에서 기본값인 32MiB 에서 128MiB 로 최소 요청 크기를 증가시키고 prefetching 을 구성하는 방법입니다:

import pyarrow
import pyarrow.dataset
fragment_scan_options = pyarrow.dataset.ParquetFragmentScanOptions(
...

이러한 개선 사항들은 데이터 전송량을 두 배로 늘릴 수 있으며, 더 빠르고 효율적으로 훈련할 수 있게 합니다.

Hugging Face 는 Xet 을 사용합니다: 이는 빠른 중복 제거 업로드 및 다운로드를 가능하게 하는 중복 기반 저장소입니다. 기존 원격 저장소와 달리, Xet 에서 데이터 전송은 중복된 데이터가 한 번만 전송되므로 더 빠릅니다. 예를 들어: 대규모 데이터셋을 Hugging Face 에 업로드하는 것은 Xet 을 활용하여 업로드 속도를 가속화합니다. 데이터셋이 업로드되면 즉시 스트리밍할 수 있습니다.

Parquet CDC 를 통해 Parquet 의 중복 제거가 활성화됩니다. Parquet CDC 와 Xet 중복 제거 덕분에 Hugging Face 에서 데이터셋을 업로드하는 것은 기존 원격 저장소보다 더 빠릅니다.

이는 pyspark_huggingface 패키지를 통해 지원되며, 이는 HF 데이터셋을 읽기/쓰기 위한 Spark 데이터 소스입니다. 이에는 Parquet CDC 와 Xet 지원이 포함되어 있어 HF 의 데이터 전송을 급격히 가속화합니다.

일부 데이터 파일 형식은 datasets 에서 지원되지 않으며, 때로는 더 많은 제어권이 필요하므로 커스텀 스트리밍 파이프라인을 구축하는 것이 쉬워졌습니다. 이는 LeRobot 라이브러리에서 비디오 프레임을 샘플링하고 WebDataset 라이브러리에서 TAR 아카이브를 스트리밍하는 데 battle-tested 되었습니다.

우리는 huggingface_hub 라이브러리의 HfFileSystem 를 효율적으로 원격 Hugging Face 데이터셋 저장소에서 파일을 읽기 위해 데이터를 스트리밍하도록 개선했습니다:

from huggingface_hub import HfFileSystem
path = f"hf://datasets/{dataset_id}/{path_in_repo}"
with HfFileSystem().open(path) as f:
...

HfFileSystem 를 torch DataLoader 에 전달하면 .ls().glob() 에서 캐시된 결과를 재사용하여 데이터 파일을 나열할 때 추가 요청이 필요 없게 됩니다.

우리는 이제 nanoVLM 에서 다음 세대의 SmolVLMs 를 훈련하기 위해 이러한 스트리밍 향상 기능을 사용합니다. 이러한 튜닝으로, 우리는 클러스터의 계층적 하드 디스크 설정에서 스트리밍보다 더 나은 성능을 달성합니다. 사실, 스트리밍은 이제 로컬 SSD 에서 데이터를 읽는 것과 같은 속도로 빨라졌습니다! 이전에는 데이터 전송이 훈련을 3 시간 지연시키는 과정이었습니다. 자세한 내용은 GitHub 를 확인하세요.

이러한 강력한 새로운 기능은 datasets 와 huggingface_hub 라이브러리에 구현되었습니다. 이들을 활용하려면 라이브러리를 업데이트하고 문서를 확인하세요:

pip install --upgrade datasets huggingface_hub

이를 기념하기 위해, 우리는 FineVision 에서 모든 데이터 소스를 preconcatenated 및 shuffled 하여 FineVisionMax 로 만들었습니다. 이를 사용하여 VLM 을 훈련할 수 있습니다 - 여러 데이터셋을 수동으로 처리할 필요가 없습니다!

from datasets import load_dataset

데이터셋을 다운로드하는 대신 스트리밍으로 전송

dataset = load_dataset("HuggingFaceM4/FineVisionMax", split="train", streaming=True)
...

nanoVLM 에서 대규모로 어떻게 수행되는지 확인해 보세요!
스트리밍을 즐기세요! 🤗

AI 자동 생성 콘텐츠

본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0