Index
2026-08-11 — Analysis

HiFi-UMI-2K 부분 다운로드 타당성 분석

UMI | simple-world-lab/HiFi-UMI-2K — 16.04 TB 중 1~5 TB를 어떻게 자를 것인가

TL;DR

16.04
TB total
398
shards
251
MB/s (16-way)
5.5
h for 5 TB
0.078
task overlap

1 배경 / 목적

simple-world-lab/HiFi-UMI-2K는 로봇 없이 수집한 bimanual manipulation 데모 2,000시간을 LeRobot v3 포맷으로 배포한 데이터셋이다 (CC BY 4.0, arXiv:2607.25895). 6-view 동기 비디오 + 3 mm 정확도의 양팔 EEF 궤적 + 언어 라벨을 포함한다.

제약: 가용 디스크 예산이 1~5 TB. 전체를 받을 수 없으므로, (a) 실제 총량, (b) 어떤 축으로 잘라야 손실이 최소인지, (c) 다운로드가 현실적인 시간에 끝나는지를 먼저 확정해야 했다.

2 작업 내용

단 1 바이트의 비디오도 받지 않고 HF API만으로 repo 전체를 계측했다. 5 TB를 받아보고 나서 "생각보다 크네"를 깨닫는 비용을 피하는 것이 목적.

1. GET /api/datasets/simple-world-lab/HiFi-UMI-2K?blobs=true → 5,176개 파일 전부의 LFS byte size를 1회 요청으로 확보 (1.2 MB JSON) ※ /tree/main?recursive=true 는 expand=true 시 50개씩 페이징 → 104회 요청 필요, 부적합 2. meta/info.json 4개 shard 샘플 (0000 / 0050 / 0200 / 0397) → episode 수, frame 수, fps, 해상도, task 수 확인 3. meta/tasks.parquet 17개 shard (0~397 균등 간격, 각 ~3 KB) → shard 간 task 어휘 pairwise 중복도 측정 = "부분 샘플링이 유효한가?"의 근거 4. curl range-request 실측 throughput: 1 / 8 / 16 스트림 병렬 (login node → HF CDN ICN57)

3 결과

3.1 용량 구조 — 99.8%가 비디오

항목전체 398 shardshard당비중
총계16.04 TB (14.59 TiB)37.5 GiB100%
video head_main2.852 TB6.67 GiB17.8%
video head_main_stereo_right2.837 TB6.64 GiB17.7%
video right_hand_up2.591 TB6.06 GiB16.2%
video right_hand_down2.579 TB6.03 GiB16.1%
video left_hand_down2.578 TB6.03 GiB16.1%
video left_hand_up2.574 TB6.02 GiB16.0%
data/*.parquet + meta/ 전부0.033 TB0.081 GiB0.2%
핵심 발견: 20-dim state/action 궤적, task text, episode meta, normalization stats를 398 shard 전부 받아도 33 GB다. 즉 "무엇을 버릴까"의 답은 항상 mp4이고, 라벨·궤적은 절대 버릴 이유가 없다.

3.2 shard 구조

shard 수
398 × ~5.0 h
shard당 episode
1,125 ~ 1,247
shard당 frame
478K ~ 509K
shard당 task
23 ~ 57
비디오
640×512 h264 25fps
shard 크기 분포
36.7 ~ 38.9 GiB

마지막 shard chunk-0397만 예외적으로 작다 (140 ep / 4 task / 18.7 GiB). 나머지 397개는 균일.

3.3 shard 간 task 다양성 — 균등 샘플링이 유효한 이유

0~397에 균등 배치한 17개 shard의 tasks.parquet을 비교했다.

개별 shard task 수의 합 : 662 unique task : 382 평균 pairwise 중복도 : 0.078 (최대 0.273)
핵심 발견: shard는 scene/task 단위로 뭉쳐 있지 않다. 서로 8%밖에 안 겹치므로 균등 간격으로 N개를 뽑으면 task 커버리지 손실이 작다. 반대로 chunk-0000~0123 같은 연속 구간을 받으면 task 다양성을 크게 잃는다.

3.4 실측 throughput (login node → HF CDN)

병렬 스트림처리량1 TB5 TB16 TB (전체)
132 MB/s8.7 h43 h139 h
8133 MB/s (1.1 Gbps)2.1 h10.4 h33.5 h
16251 MB/s (2.0 Gbps)1.1 h5.5 h17.8 h
시간은 병목이 아니다. 16-way면 5 TB가 5.5시간, 전체 16 TB조차 17.8시간. 제약은 순수하게 디스크다. (/home/nas_main = 370 T GPFS, 현재 55 T free / 86% 사용)

3.5 예산별 선택지

data/ + meta/는 모든 안에서 선택한 shard 전부에 대해 항상 포함.

viewshard당1 TB3 TB5 TB398 shard 전부
A head_main16.75 GiB137398 = 전체 2,000 h2.88 TB
B head stereo pair213.39 GiB69208347 (~1,745 h)5.72 TB
C head + 양손 up318.83 GiB49148247 (~1,242 h)8.05 TB
D head + 손목 4개533.2 GiB3090150 (~750 h)13.21 TB
E 6 view 전부637.53 GiB2474124 (~624 h)16.04 TB

4 Takeaway

의미

1~5 TB 예산으로 충분히 의미 있는 규모를 받을 수 있다. 그리고 트레이드오프가 "view 수 ↔ 시간(h)" 단 한 축으로 깔끔하게 환원된다는 것이 이번 계측의 실질적 수확이다.

A안이 특이점이다. head_main 단일 view면 2.88 TB로 2,000시간 릴리스 전체를 빠짐없이 받을 수 있다. 5 TB 예산의 6-view(624 h)보다 시간 축으로 3.2배 넓다. ego-view world model / 단일 시점 pretraining 목적이라면 다른 안을 고려할 이유가 거의 없다. 반대로 wrist view가 policy 입력에 필수인 VLA post-training이면 D/E로 가되 커버리지 손실을 감수해야 한다.

또 하나: shard 간 task 중복이 8%에 불과하다는 사실은 부분 다운로드의 품질이 "얼마나 받느냐"보다 "어떻게 고르냐"에 더 민감할 수 있음을 뜻한다. 균등 샘플링은 옵션이 아니라 기본값이어야 한다.

5 Next Steps

미해결 / 미검증

worker pod의 outbound 인터넷 접근 여부 미확인. 가능하면 CPU-only sbatch로 돌리는 게 깔끔하고, 불가하면 login node tmux에서 실행한다 (네트워크 I/O 바운드라 CPU 부하는 낮음). 소형 job으로 curl -I huggingface.co 한 번 찍으면 결론.

hf_xet은 openpi env에 미설치(hf_transfer는 있음). 실측 251 MB/s는 순수 curl 기준이므로 snapshot_download(max_workers=16)의 실효 처리량은 실행 후 재측정 필요.

다음 작업

view/shard 조합 확정 → scripts/download_hifi_umi.py 실행. downloader는 view preset + shard 균등 샘플링 + resume을 지원하며 4개 시나리오에 대해 --dry-run 검증 완료.

# A안: 1-view 전체 2,000 h (2.88 TB) python scripts/download_hifi_umi.py --local-dir <NAS> --views head --chunks all # E안: 6-view 624 h (5.00 TB) python scripts/download_hifi_umi.py --local-dir <NAS> --views all --chunks every:124