피드로 돌아가기
From Files to Chunks: Improving HF Storage Efficiency
Hugging Face BlogHugging Face Blog
Infrastructure

Hugging Face의 Xet팀이 Content-Defined Chunking으로 파일 기반 저장소를 청크 기반으로 전환해 저장소 50% 감소 및 업로드/다운로드 시간 50% 단축

From Files to Chunks: Improving HF Storage Efficiency

2024년 11월 20일8intermediate

Context

Hugging Face는 Git LFS로 30PB 이상의 모델과 데이터셋을 저장하고 있으나, 파일 단위 버전 관리로 인해 작은 수정도 전체 파일(평균 200~300MB의 CSV/Parquet, 1GB의 Safetensor, 8GB 이상의 GGUF)을 재업로드해야 한다. 사용자는 긴 전송 시간을 기다려야 하고, Git LFS는 수정된 전체 파일의 모든 버전을 저장해야 해 스토리지 비용이 지속적으로 증가한다.

Technical Solution

  • Content-Defined Chunking(CDC) 도입: 롤링 해시 알고리즘으로 파일 바이트 시퀀스를 스캔하여 변수 크기의 청크로 분할 (hash(data) % 2^12 == 0 같은 조건으로 경계 결정)
  • 청크 기반 저장: 수정된 청크만 전송 및 저장하고, 이전 청크는 content-addressed store(CAS)에 이미 존재하면 재사용
  • 자동 중복 제거: 동일한 청크는 한 번만 저장해 기본 중복 제거 구현 (예: transformers 세 번 반복 시 한 청크만 저장)
  • 삽입/삭제 처리: 데이터 변경 시 영향받는 청크만 업데이트 (예: 데이터 삽입 후 새로운 청크 하나만 업로드)
  • 압축 및 네트워크 최적화: 청크 기반 저장 외에도 압축 및 네트워크 요청 최적화 기법 적용

Impact

  • CORD-19 데이터셋(50개의 점진적 업데이트): Git LFS 대비 평균 다운로드 시간 51분 → 19분 (62.7% 단축), 평균 업로드 시간 47분 → 24분 (48.9% 단축), 저장소 크기 8.9GB → 3.52GB (60.4% 감소)
  • OpenAI GPT2 model.safetensors 파일 비교: 전체 저장소 1.2GB → 645MB (46.3% 감소), 압축 포함 시 추가 10% 절감
  • PyTorch 모델 체크포인트(약 200TB 저장소): 50% 중복 제거 적용 시 즉시 100TB 절감, 월간 7~8TB 추가 절감
  • 세 가지 반복 개발 사용 사례에서 일관된 50% 저장소 및 전송 성능 개선

Key Takeaway

파일 수준의 버전 관리에서 청크 수준의 저장소로 전환하면, 수정되지 않은 데이터의 반복 저장을 제거할 수 있어 저장 비용과 네트워크 대역폭을 동시에 절감할 수 있다. 특히 모델 체크포인트나 미세조정 모델처럼 버전 간 변화가 제한적인 워크로드에서 30~85% 중복 제거 비율을 달성할 수 있다.


대용량 파일을 버전별로 관리하는 서비스(모델 저장소, 데이터셋 플랫폼 등)에서 Content-Defined Chunking을 적용하면, 점진적 수정 사항만 전송·저장하도록 최적화해 저장 비용은 50% 이상 감소시키고 업로드/다운로드 시간을 50% 이상 단축할 수 있다.

원문 읽기