Index
2026-09-01 — Progress

Flex-π clean-50 학습 준비 완료 및 본 학습 착수

flex-pi | RoboTwin 리더보드 프로토콜(demo_clean 50/task) 학습 — Wan2.2 init 직접 finetune

TL;DR

0.58
smoke loss@100step
8.1s
step time
137,507
text prompts
105354
본 학습 job

1 배경 / 목적

지난주 260831-clean50_leaderboard_feasibility.html 조사에서 Flex-π는 로봇 사전학습 베이스를 공개하지 않아 전 task config가 Wan2.2-5B init에서 직접 finetune된다는 점, 그리고 RoboTwin 변환 데이터에서 task당 idx 500-549 = clean 50 ep가 리더보드 프로토콜과 일치한다는 점을 실측으로 확인했다. 실행은 사용자 승인 대기 상태였음.

사용자 결정: 사전학습 공정성 이슈(논문 Fig.10 대비 낮은 수치가 예상됨)를 인지한 채로, Wan2.2 init에서 RoboTwin demo_clean 50/task(리더보드 프로토콜)로 학습을 실제 시도하기로 함. 결과는 "video-prior only init"으로 명시할 예정. YAM 사전학습은 후속 옵션으로 보류.

제약: text-embed 캐시가 원래 1TB(전체 27,500 prompt 기준)로 추정됐으나, clean-50 서브셋만 필요한 prompt 규모를 다시 확인해야 실제 다운로드/인코딩 범위가 정해지는 상태였음.

2 작업 내용

env·데이터·코드 3트랙을 병렬로 준비했다.

① 학습 환경 (env)

conda env: flexpi torch 2.7.1+cu128, deepspeed 0.18.5 conda cuda-nvcc 12.8 (worker에서도 nvcc 가용) torchcodec 0.5 ↔ ffmpeg 7.1.1, decord OK 검증: 통과

② ActionDiT backbone 변환

preprocess_action_dit_backbone.py를 redirect_common_files=false 사본 config로 실행해 생성(2.04 GB; copied 300 / interp 520). 최초 시도는 DiffSynth 변환본이 부재해 실패 → 로컬 Wan .pth 경로로 우회해 해결.

③ 데이터 다운로드

robotwin_3d ffv1 제외 다운로드. 익명 접속은 429(5000 resolver/5min)에 걸려 본인 HF 토큰 + 429 시 300s 재시도 루프로 재개, 마지막 구간은 16-worker로 가속. 코퍼스 dataset_stats.json은 config 경로에 스테이징.

④ clean-50 선택 + 텍스트 캐시

task_episode_map_clean50.json(start+500..549, 프레임 검증 근거 — 지난주 확인)을 로더에 task_episode_map_path 파라미터로 연결. 텍스트 캐시 인코딩 중 task_index가 프레임 단위로 회전(에피소드당 ~55-75개 paraphrase)한다는 사실을 발견 — precompute_text_embeds.py에 prompt_task_indices_file 필터를 추가하고 tmp/extract_clean50_task_indices.py로 다운로드 후 parquet에서 task_index를 추출하도록 파이프라인을 구성.

⑤ 학습 래퍼

scripts/train_flexpi_clean50_worker.sh — stock 런처를 wrap: clean50 map 오버라이드, model.redirect_common_files=false, output_dir=runs/robotwin_clean50/$RUN_TAG, SMOKE=1=100-step 모드, env 내 nvcc/CUDA_HOME 세팅. 런처가 "$@"를 EXTRA_ARGS 마지막에 붙이는 동작을 확인.

운영 이슈: API 키 이름만 출력하려던 cut -d= -f1 명령이 Key: value 포맷 특성상 값까지 세션 출력에 노출시킨 실수가 있었음(외부 전송은 없음). 이후 간접 참조(env var)만 사용하도록 전환. 실제 키 값은 본 리포트에 포함하지 않음.

3 결과 (수치)

단계Job규모/소요결과
데이터 다운로드-28/28 chunks, ~11hRGB·depth 각 27,500/27,500 검증 완료
텍스트 캐시 인코딩105127 (own 4 GPU)8m03s137,507 files (data/text_embeds_cache_3d/)
Smoke test10523521m27s, exit 0560,900 clips(전체 1/11), loss 2.91→0.58(100 steps), 8.1 s/step@eff batch 512
본 학습 (10 epoch)105354own 8 GPU, --time 1-14:00:00RUNNING (제출 05:43, elapsed ~3h48m)

Epoch 예산표 (8×B200 기준, steps/epoch ≈ 1,095)

Epoch예상 소요
6≈ 15 h
10 (선택)≈ 25 h
20≈ 49 h
smoke 통과: loss가 2.91→0.58로 100 step 안에 정상 수렴 경향을 보였고, redirect-off 로컬 가중치 경로도 정상 동작 확인 → 본 학습 파이프라인 건전성 검증 완료.
본 학습 진행 중: job 105354는 10-epoch(25h 예상, --time 25h+52% 여유)로 아직 완료되지 않음 — 본 리포트는 착수 시점 스냅샷.

4 Takeaway

의미

지난주 feasibility 조사(260831)에서 정리한 "사전학습 베이스 부재 + idx 500-549 clean-50 매핑" 판단이 실제 파이프라인 구축에서 그대로 유효했음을 확인했다. 3트랙(env/데이터/코드) 모두 별도 이슈 없이 완료되었고, 가장 까다로웠던 지점은 텍스트 캐시 규모 추정이었다 — 원래 우려했던 "1TB 캐시" 문제는 task_index가 프레임 단위로 회전한다는 사실을 발견하면서 clean-50 서브셋에 필요한 프롬프트 수(137,507개)가 명확해졌고, 인코딩도 8분 만에 끝났다.

smoke test의 loss 수렴(2.91→0.58, 100 step)은 학습 그래프/데이터 로더/체크포인트 저장 경로가 모두 정상임을 의미하며, 8.1 s/step 실측치로 epoch/step 예산이 확정되어 10-epoch(≈25h) 본 학습을 사용자 승인 하에 바로 제출할 수 있었다.

5 Next Steps

미해결 한계

본 학습(105354)은 아직 진행 중 — 10-epoch 완주 및 최종 loss/수렴 여부는 다음 카드에서 다룰 것. 사전학습 부재로 인한 성능 하한(논문 Fig.10 대비)은 실제 평가 전까지 정량화되지 않음.

다음 실험

중간 ckpt(step 6k/8k/11k) 저장 시점마다 소수 task로 evaluation → 성능 추이 확인 후 최종 ckpt 선택. 선택된 ckpt로 리더보드 프로토콜 평가(upstream step limit 교체 필요) 실행, 이후 action-only/full-joint regime 대조(P-C 데이터)와 연계해 clean-50 학습이 regime 선택에 미치는 영향 분석 예정.