Downloads · 30 days
0
jungwook2358/rldx1-mt-multigroup-20260918
rldx1-mt-multigroup-20260918 is a machine learning model from jungwook2358. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
2026-09-18 multi-group mid-train 체크포인트에서 finetune 을 시작하는 사람/에이전트용 진입 문서다. mid-train 이 어떻게 이루어졌는지(그룹·데이터·action 타깃·토크나이저·cog loss)와, 그 위에서 finetune 을 어떻게 해야 하는지를 적는다. 문서는 요약이다. 숫자·규약은 반드시 아래 표의 코드와 contract 파일을 직접 열어 확…
Downloads · 30 days
0
Access
Public
Updated Sep 20, 2026
Repo size
27.9 GB
Likes
0
Public
Click a slice to open those files.
.safetensors27.9 GB · 100%
From the Hugging Face model README
2026-09-18 multi-group mid-train 체크포인트에서 finetune 을 시작하는 사람/에이전트용 진입 문서다. mid-train 이 어떻게 이루어졌는지(그룹·데이터·action 타깃·토크나이저·cog loss)와, 그 위에서 finetune 을 어떻게 해야 하는지를 적는다. 문서는 요약이다. 숫자·규약은 반드시 아래 표의 코드와 contract 파일을 직접 열어 확인한다(§0).
https://github.com/jungwook235/RLDX-1-egopi
feat/multigroup-finetune ← finetune 은 이 브랜치로 한다 (이 문서, finetune 런처, 코드 패치 §6)feat/multigroup-midtrain-20260918 @ 9295a11 ← mid-train 을 실제로 돌린 코드(기록용, 손대지 않음)~/HERIT/mt_multigroup/RLDX-1-egopi-finetune (finetune 브랜치 worktree), ~/HERIT/mt_multigroup/RLDX-1-egopi (mid-train 브랜치; mid-train 잡이 이 트리의 코드를 import 중이므로 수정 금지)$ROOT = /rlwrld-unified-checkpoints/jungwook/rldx1/mt_multigroup_20260918| # | 파일 (repo 기준 경로) | 왜 읽는가 |
|---|---|---|
| 1 | docs/mt_multigroup_finetune_guide.md (이 문서) | 전체 그림, finetune 두 경우의 규칙 |
| 2 | docs/mt_multigroup_run_20260918.md | mid-train 런 기록 원본: 그룹별 데이터·전처리·토크나이저·CogAlign·검증·리허설 |
| 3 | docs/mt_multigroup.md | 기능 설명: --mt-groups-config, --extra-embodiment-slots, 안전 로드 |
| 4 | run_scripts/train/mt_multigroup/mt_multigroup_midtrain_4gpu.sbatch | mid-train 학습 스크립트(플래그·안전장치·하이퍼파라미터의 원본) |
| 5 | run_scripts/train/mt_multigroup/mt_multigroup_finetune.sbatch | finetune 런처(CASE=openarm / CASE=newgroup) |
| 6 | rldx/experiment/mt_groups.py | groups JSON 스키마, 슬롯 검사, contract verify, CogAlign env, 샘플링 |
| 7 | rldx/configs/data/mt_multigroup_config.py | 그룹별 modality config(키·순서·ABSOLUTE·horizon) = action 전처리의 코드상 정의 |
| 8 | rldx/data/embodiment_tags.py, rldx/model/core/processing_rldx.py (EMBODIMENT_TAG_TO_PROJECTOR_INDEX) | tag ↔ 슬롯(행) 매핑. 새 그룹은 여기에 추가 |
| 9 | rldx/model/core/setup.py (_expand_embodiment_rows, _verify_pretrained_load), rldx/experiment/assembly.py (extra_embodiment_slots 블록) | 행 확장과 bit-exact 로드 검증 |
| 10 | rldx/data/actlat_cache.py, rldx/data/fp24_cache.py | 토크나이저 z-cache / FP48(cog loss 타깃) 캐시 리더 |
| 11 | scripts/mt_multigroup/tokenizer_side/openarm_prq15/* | 15D 토크나이저: 학습 sbatch, embodiments config, contract 기록(action_preproc_contract.r6h5.json), min/max(egopi_prq_stats.r6h5.json), z-cache 빌더, contract verify |
| 12 | scripts/mt_multigroup/tokenizer_side/allex_eef50/* | ALLEX 50D 토크나이저(같은 구조) |
| 13 | scripts/mt_multigroup/build_prq15_fp48_cache.py, build_allex_fp48_cache.py, remap_fp48_cache.py | cog loss 타깃(FP48) 생성기 |
| 14 | scripts/mt_multigroup/make_groups_config.py, docs/mt_multigroup_groups_example.json | mid-train groups JSON 생성기와 실제 형태 |
| 15 | docs/mt_multigroup_finetune_groups_openarm_example.json, docs/mt_multigroup_finetune_groups_newgroup_example.json | finetune groups JSON 틀 |
체크포인트의 config.json 에 있는 mt_groups_record 에도 그룹별 tag·슬롯·전처리·데이터셋·토크나이저 contract 전문·cogalign 설정이 들어 있다.
레포 없이 체크포인트만 받았을 때는 이것이 1차 자료다.
에이전트 지시문 예시:
https://github.com/jungwook235/RLDX-1-egopi의feat/multigroup-finetune브랜치에서docs/mt_multigroup_finetune_guide.md를 먼저 읽고, §0 표의 파일을 순서대로 코드까지 직접 열어 확인해라. 그 다음 내 데이터가 §4(openarm, tag 재사용 + 같은 토크나이저)인지 §5(새 그룹, tag 추가)인지 판단해서 groups JSON 과 필요한 캐시를 만들고,run_scripts/train/mt_multigroup/mt_multigroup_finetune.sbatch를SMOKE_ONLY=1로 먼저 통과시켜라. action 전처리는 그룹마다 다르니 문서의 요약을 믿지 말고 contract JSON 과 modality config 로 대조해라.
RLDX-1-PT-IMG(Qwen3-VL 기반 VTC 백본, embodiment 행 36개) → 행 5개를 from scratch 로 추가(36→41, --extra-embodiment-slots 5), 기존 722개 텐서는 bit-exact 로드 검증.CategorySpecificMLP 행 + 전용 modality config + 전용 정규화 통계. 백본·DiT·cog 토큰·cog adapter 는 전 그룹 공유.[16,64](A, B) 또는 정규화된 native action(C, D, E). 한 배치 안에 섞인다(actlat_mixed, 샘플 단위 라우팅).| 그룹 | tag / 슬롯 | 데이터 (ep / frames) | action 전처리 (정책 I/O) | flow 타깃 | cog loss 타깃 (FP48) | 카메라 | share |
|---|---|---|---|---|---|---|---|
| A | mt_allex_eef50 / 36 | ALLEX robot 480 / 1,059,641 + human hmd 720 / 749,562 + umi 760 / 757,515 | 50D 절대 EEF, left-first [l_wrist9|r_wrist9|l_hand15|r_hand15|neck2], wrist9 = base 프레임 xyz + rot6d(행 2개), 30 Hz, h16 | ALLEX 토크나이저 z (토크나이저의 q99 정규화가 z 에 내장) | ALLEX 손 URDF FK 손끝 5개(wrist 프레임) + base 프레임 wrist, 양손 48D 전부, 자체 centroid/scale + wrist z-score | camera_ego_left, camera_ego_right | 0.520 |
| B | mt_openarm_prq15 / 37 | openarm robot 6소스(teleop_v3 bottle/cup/doll/snack keep-list, banana, openarm_ego PnP) + human 3소스(box/ball/towel, airfryer open/close) — 토크나이저가 본 action 프레임 154,833 | 15D 오른손 [wrist_pos3|rot6d(**열**) 6|Inspire q6], 고정 head(pitch 1.2 / yaw −0.3)의 ZED 카메라 프레임, 절대값, 20 Hz, h16. robot: FK(명령 관절 28D)+action[22:28]; human: legacy affine 또는 retargeted+head calib | openarm 15D 토크나이저 z (min/max 정규화가 z 에 내장) | 오른손 FP24(hawor proprio 정규화)를 FP48 의 오른쪽 절반에, 왼쪽 24D 는 mask 0 | camera_ego_right | 0.031 |
| C | mt_egodex_prq30 / 38 | EgoDex 10k, 10,000 / 1,714,342 | PRQ30 30D [left15|right15], 손마다 [pos3|rot6d(열)6|q6], 기준 = 에피소드 첫 유효 오른손 wrist, 20 Hz, h16, v9. 사람 데이터라 action==state | native action, 그룹 자체 meta/stats.json q01/q99, validity mask | observed FP48 (observed-state-fp48-v1) | ego_view | 0.348 |
| D | mt_anyh2r_prq30 / 39 | AnyH2R 930 / 247,231 | PRQ30 common-geometry v2(commit 62167f2): static camera, joint0 wrist origin, v9 calibration | native (q01/q99) | observed FP48 | ego_view | 0.050 |
| E | mt_openarm_prq30 / 40 | openarm 양팔 나머지 623 / 249,488 (teleop_v2 task_1..7, toilet_paper, openarm_ego open/close) | PRQ30 v9, 로봇 native command | native (q01/q99) | observed FP48 | ego_view | 0.051 |
학습 설정(job 196537, 2×H100): 글로벌 배치 128(GPU당 64, accum 1; groups JSON 의 training_overrides 로 고정), 200k step, save 10k,
lr 1e-4 constant(warmup 없음), weight decay 1e-5, LLM 상위 4층(14~17)만 tune + projector + diffusion model(tune_llm=False, tune_visual=False),
n_cog_tokens 64, action_horizon 16, video_length 1, state dropout 0.3, color jitter 0.6/0.6/0.6/0.16, physics_loss_weight 0.1,
workers 12, data seed 42, --override-pretraining-statistics, --dataset-mode standard. cog adapter hid 256 / SiLU.
(런 기록 문서의 "4 GPU" 는 계획 당시 값이다. 실제로는 같은 sbatch 를 NUM_GPUS=2 GLOBAL_BATCH_SIZE=128 로 돌렸다.)
토크나이저 그룹의 행(action encoder/decoder)은 z 공간에서 학습됐다. 그 행을 재사용하는 finetune 은 같은 토크나이저의 z 를 타깃으로 써야 하고, z 를 만들 때 쓰는 정규화 숫자(min/max)도 토크나이저 학습 때의 것 그대로여야 한다. 새 데이터로 통계를 다시 계산하면 같은 action 이 다른 z 가 된다. 배포 시에도 정책 출력 z → 이 토크나이저의 robot 디코더 → 역정규화 → 15D action 순서로 풀어야 한다.
action-only(DINO 스트림 없음), 입력 = action chunk [16, D], latent = [16, 64](token_dim 64), encoder/decoder depth 4, decoder self-attention,
VAE(KL 1e-6; z-cache 는 posterior mean, vae_sample=False), recon L1, 인코더 공유 + recon 디코더 robot / human 2개(human 은 robot 에서 copy-init),
robot↔human VICReg 정렬(weight 0.03, pool=tokens, gather, var 1.0 / std 1.75 / cov 0.004), 2 GPU × 256 = 글로벌 512, 100k step, lr 5e-5 constant, 소스 weight 없음(프레임 비례).
| 항목 | 값 |
|---|---|
| semantics id | egopi-prq15-right-zedframe-v1head-rot6dcols-v1 |
| 학습 코드 | jun-brro/action-tokenizer 브랜치 feat/egopi-prq-actiononly-r4h5 @ 29c6693, scripts/train_action_latent_tokenizer_v4_multiemb.py, 데이터셋 클래스 EgoPiPrqActionOnlyDataset |
| 학습 런처(사본) | scripts/mt_multigroup/tokenizer_side/openarm_prq15/train_actiononly_openarm_prq15_r6h5_w0p03_splitdec_2gpu_100k.sbatch (+ embodiments_actiononly_openarm_prq15_r6h5.json) |
| 데이터 | robot 312 ep / 87,736 fr, human 397 ep / 67,097 fr (keep-list egopi_filter_r6h5.json) |
| 정규화 | min/max: y = clip(2(x−min)/(max−min) − 1, −1, 1), min/max = robot·human action 버킷의 원소별 min-of-mins / max-of-maxs. 이 구성으로 재계산한 egopi_prq_stats.json (sha256 44eac480a54f…). 이전 r4h5 토크나이저·z-cache 와 호환되지 않는다 |
| val | 고정 분할 0.003, eval recon L1 0.0025 (job 194741) |
| 학습 산출물 | /rlwrld-unified-checkpoints/jungwook/action_tokenizer/openarm_prq15_r6h5/checkpoints_action_tokenizer/openarm_prq15_r6h5_actiononly_w0p03_splitdec_g2_100k/ → multiemb_full.pt(sha256 b3c4cdd5…), checkpoint-{80000,90000,100000}, action_preproc_contract.json |
| 입력 기록 | …/openarm_prq15_r6h5/input_artifacts/ → egopi_prq_stats.json, egopi_prq_stats.manifest.json, embodiments.runtime.json, fixed_val_splits/ |
| RLDX 쪽 번들 | $ROOT/openarm_prq15/tokenizer_bundle/ → model.safetensors(sha256 8914f284…), norm_stats.json, tokenizer_config.json |
| mid-train z-cache | $ROOT/openarm_prq15/actlat_cache/<source>/ep_XXXXXX.npy = [L,16,64] fp16, 원본 LeRobot episode index 로 키잉, meta.json + READY |
| contract 사본(레포 안) | scripts/mt_multigroup/tokenizer_side/openarm_prq15/action_preproc_contract.r6h5.json, egopi_prq_stats.r6h5.json |
human 매핑 상수(rldx/data/egopi/prq_mapping.py 와 contract 가 일치해야 verify 통과): EGOPI_HEAD_PITCH 1.2, EGOPI_HEAD_YAW −0.3, P_OFFSET [0.116, 0.117, −0.017], R_CONV(3×3), P_SCALE/Q_SCALE = 1, Q_DELTA = 0.
chunking: 행 t..t+15, 에피소드 끝에서는 마지막 행 반복.
semantics allex-abs-eef50-leftfirst-rot6drows-v1, 코드 jungwook235/action-tokenizer master a9fb113, 런처 tokenizer_side/allex_eef50/allex_tokenizer_robot_human_100k.sbatch,
정규화 q99 clamp(2(x−q01)/(q99−q01)−1, −1, 1)(세 소스 합친 통계, sha 65dc3f16dcec), val 0.03, job 194443.
산출물 /rlwrld-unified-checkpoints/jungwook/action_tokenizer/checkpoints_action_tokenizer/allex_eef50_robot_hmd_umi_q99_split_w0p03_actiononly_bs512_h16_100k/, 번들 $ROOT/allex_eef50/tokenizer_bundle/.
action_preproc_contract.json 을 쓴다(키·순서·레이아웃, 절대/상대, 프레임·rot6d 규약, horizon/fps, 정규화 식과 차원별 숫자, 통계 sha, 소스와 해시, 코드 커밋).tokenizer.verify 명령을 실행하고, 실패하면 학습에 들어가지 않는다.$ROOT/train_top4_2gpu_b128_200k/mt_multigroup_A50z_B15z_C30_D30v2_E30_top4_constlr_2gpu_b128_200000/checkpoint-<step>/
(10k 간격; 이 문서 작성 시점 100k 까지. finetune 은 checkpoint-100000 에서 시작한다 (HF 에는 checkpoint-100000 과 이전 checkpoint-90000). 런은 200k 목표로 진행 중. 2일 제한에 걸리면 ALLOW_RESUME=1 로 이어서 돌린다.)config.json, model-0000{1,2,3}-of-00003.safetensors(≈14 GB), model.safetensors.index.json, experiment_cfg/, processor/.
global_step*/(DeepSpeed optimizer, ≈48 GB)는 resume 전용이라 필요 없다.config.json: max_num_embodiments 41, base_num_embodiments 36, extra_embodiment_slots 5, actlat_mixed true, cog_adapter_activation silu, mt_groups_record {...}.jungwook2358/rldx1-mt-multigroup-20260918, 토크나이저 jungwook2358/action-tokenizer-openarm-prq15-r6h5 — §8.대상: mid-train 의 B 그룹과 같은 action 표현(오른손 15D {p,r,q})으로 만들 수 있는 openarm 데이터.
규칙
mt_openarm_prq15(슬롯 37) 그대로. 행을 추가하지 않는다 → --extra-embodiment-slots 를 주지 않는다(CASE=openarm, EXTRA_SLOTS=0).tokenizer 블록(contract·bundle·verify)은 mid-train 것을 그대로 복사한다.action[22:28] 의 Inspire q6, 20 Hz(원본이 30 Hz 면 nearest 로 20 Hz), h16.
사본 구현: tokenizer_side/openarm_prq15/build_egopi15_extra_robot.py(28D 정리 + PointsFK FK 캐시, v3 캐시 재현 오차 0), …_videos.py(같은 프레임만 뽑아 20 fps 재인코딩).egopi_prq_stats.json(sha 44eac480a54f…)으로 만들고,
RLDX state 정규화도 같은 파일을 쓴다(dataset entry 의 egopi_stats_path). scripts/build_egopi_prq_stats.py 를 새 데이터에 돌리지 말 것.
새 데이터가 기존 min/max 밖으로 나가면 clip(−1,1) 로 잘린다 → z-cache 를 만들 때 차원별 clip 비율을 찍어 보고, 크면 그건 "같은 토크나이저로 finetune" 이 아니라 토크나이저 재학습 사안이다.cogalign 블록, weight 0.2 / dim 48 / linear / adapter_hid 256 / detach 0).
타깃은 scripts/mt_multigroup/build_prq15_fp48_cache.py 로 만든 오른손 FP24 → FP48 오른쪽 절반, 왼쪽 mask 0. cogalign.enabled=true 면 모든 dataset 에 READY 인 latal_cache 가 있어야 한다.
cog loss 없이 하려면 블록을 빼면 된다(그래도 런처가 cog adapter 는 켠다 — §7-1).camera_ego_right 1대, 언어는 annotation.human.task_description.순서
FT=<finetune 루트>; TOK=/rlwrld-unified-checkpoints/jungwook/action_tokenizer/openarm_prq15_r6h5
# (1) 데이터를 B 그룹 형식으로: 28D + FK 캐시 + 20 Hz + keep-list(filter JSON)
python scripts/mt_multigroup/tokenizer_side/openarm_prq15/build_egopi15_extra_robot.py --out $FT ... # 코드를 읽고 소스에 맞게
python scripts/mt_multigroup/tokenizer_side/openarm_prq15/build_egopi15_extra_robot_videos.py --out $FT
# (2) 새 소스만 나열한 embodiments.runtime.json 을 만든다. prq_stats 는 $TOK/input_artifacts/egopi_prq_stats.json 을 가리키게(재계산 X).
# (3) frozen 토크나이저로 z-cache
python scripts/mt_multigroup/tokenizer_side/openarm_prq15/build_prq15_actlat_cache.py \
--tokenizer-repo ~/HERIT/action-tokenizer --builder-repo ~/HERIT/allex_eef/action-tokenizer \
--pt $TOK/checkpoints_action_tokenizer/openarm_prq15_r6h5_actiononly_w0p03_splitdec_g2_100k/multiemb_full.pt \
--runtime-config $FT/embodiments.runtime.json --bundle-out $FT/tokenizer_bundle --cache-root $FT/actlat_cache
# -> $FT/tokenizer_bundle/model.safetensors 의 sha256 이 mid-train 번들(8914f284…)과 같은지 확인
# (4) cog loss 타깃
python -m scripts.mt_multigroup.build_prq15_fp48_cache --groups-config $FT/mt_groups_finetune.json --out $FT/fp48_cache
# (5) groups JSON: docs/mt_multigroup_finetune_groups_openarm_example.json 의 <...> 를 채운다
# (6) 스모크 -> 학습
CASE=openarm BASE_MODEL_PATH=<…/checkpoint-100000> GROUPS_JSON=$FT/mt_groups_finetune.json MODEL_OUTPUT_DIR=<out> SMOKE_ONLY=1 \
bash run_scripts/train/mt_multigroup/mt_multigroup_finetune.sbatch
스모크가 확인하는 것: contract verify OK, tag=mt_openarm_prq15 slot=37 target=actlat, [ACTLAT-MIXED] ON, [COG-ADAPTER] … ON, shape mismatch 로 버려진 텐서 없음.
human 데이터도 같이 넣는 경우: egopi_source: "human", legacy affine 이면 task_filter, retargeted 면 egopi_retargeted_human: true + egopi_retarget_head_calib_path + retargeted human stats
(형태는 docs/mt_multigroup_groups_example.json 의 B 그룹 human entry 참고). robot/human 은 같은 tag·같은 슬롯을 쓴다.
대상: openarm 15D 가 아닌 모든 것(다른 로봇, 다른 action 표현, 시뮬레이터 …). 기존 그룹의 행을 빌려 쓰지 않는다. 행은 (state dim, action dim, 정규화, 의미)가 그 그룹에 맞춰 학습된 것이라 다른 embodiment 를 얹으면 그 행을 망가뜨릴 뿐 얻는 게 없다. 공유되는 것은 백본·DiT·cog adapter 다.
규칙
rldx/data/embodiment_tags.py 의 EmbodimentTag 에 항목 추가, rldx/model/core/processing_rldx.py 의 EMBODIMENT_TAG_TO_PROJECTOR_INDEX 에 "<tag>": <slot> 추가.mt_groups.py 가 거부한다.--extra-embodiment-slots 1(체크포인트가 41행이므로 슬롯 41 = 행 1개 추가). 런처에서는 CASE=newgroup(기본 EXTRA_SLOTS=1).
체크포인트의 41행 전부(사전학습 36 + mid-train 5)가 [:41] 에 복사되고 bit-exact 검증된다([EMB-EXPAND] … grown 41 -> 42 rows, VERIFIED). 새 행은 from scratch(0.02·randn, bias 0).
(mid-train 브랜치 코드는 이미 확장된 체크포인트에 이 플래그를 주면 에러로 막는다 → §6 패치가 필요한 이유.)--modality-config-path(런처의 MODALITY_CONFIG)로 넘긴다. 키·순서, ABSOLUTE/RELATIVE, EEF 여부, horizon 16, 카메라를 여기서 정의한다.
동작하는 실례: ~/HERIT/dexverse_rldx/dexverse_modality_config.py + dexverse_v0_bimanual_groups.json + train_dexverse_v0_bimanual_base.sbatch(이쪽은 PT-IMG 에서 시작하는 버전)."target": "native", 기본): 그 그룹 데이터셋의 meta/stats.json q01/q99 로 RLDX 가 정규화. RLDX_PRQ30_STRICT 는 unset(런처가 처리). action dim ≤ 64(max_action_dim)."target": "actlat"): §2.1 세팅으로 그 embodiment 의 토크나이저를 새로 학습하고(기존 15D/50D 토크나이저를 다른 action 공간에 쓰지 말 것),
action_preproc_contract.json + verify 명령 + z-cache([L,16,64], READY)를 갖춘다. tokenizer.verify 가 없으면 mt_groups.py 가 거부한다.[left24|right24], 손마다 [손끝 5개 wrist-local 15 | wrist pos 3 | rot6d 열 6], format fp48_only_v1, 없는 손은 dim mask 0)을 만들어 latal_cache 로 건다.
손이 없는/손끝이 정의되지 않는 embodiment 면 cogalign 블록을 빼고 native loss 만으로 간다.--override-pretraining-statistics 로 그룹 자신의 통계를 쓴다(런처 기본).순서: tag/슬롯 추가 → modality config → (LeRobot 변환, meta/stats.json) → groups JSON(docs/mt_multigroup_finetune_groups_newgroup_example.json) →
CASE=newgroup MODALITY_CONFIG=<py> … SMOKE_ONLY=1 bash …/mt_multigroup_finetune.sbatch → 본 학습.
스모크가 확인하는 것: [EMB-EXPAND] VERIFIED, grown 41 -> 41+N rows, [COG-ADAPTER] … ON, shape mismatch 없음.
openarm 데이터와 새 그룹을 한 런에 같이 넣는 것도 된다: groups JSON 에 두 그룹을 다 적고 CASE=newgroup 으로 돌린다(openarm 그룹은 슬롯 37 재사용, 새 그룹만 행 추가).
| 파일 | 변경 | 이유 |
|---|---|---|
rldx/experiment/mt_groups.py | 슬롯 검사의 base = 36 상수 → 시작 체크포인트 config.json 의 max_num_embodiments(_checkpoint_rows) | 41행 체크포인트에서 플래그 없이 슬롯 37 을 재사용하면 slot 37 >= 36+0 으로 거부되던 것 해소 |
rldx/experiment/assembly.py | 이미 확장된 체크포인트에 --extra-embodiment-slots 를 주면 에러 → 허용(base_num_embodiments = 체크포인트 행 수) | 새 그룹 tag 추가(41→41+N). 로더(setup.py)는 원래 base_rows 기준이라 그대로 동작 |
run_scripts/train/mt_multigroup/mt_multigroup_finetune.sbatch | 신규 | finetune 런처 |
docs/mt_multigroup_finetune_* | 신규 | 이 문서와 groups JSON 틀 |
검증한 것: _expand_embodiment_rows 41→42 CPU 단위 확인(앞 41행 bit-exact, 새 행 std≈0.02, base 를 36 으로 잘못 주면 거부), _checkpoint_rows(PT-IMG 36 / 확장 체크포인트 41).
아직 안 한 것: mid-train 체크포인트로 실제 GPU 스모크. 첫 사용 시 SMOKE_ONLY=1 을 반드시 먼저 통과시킬 것.
RLDX_COG_ADAPTER=1, _HID=256, _ACT=silu). mid-train 에서 학습된 residual 로 DiT 가 읽는 cog 를 바꾼다.
cogalign 블록 없이, env 도 없이 finetune 하면 adapter 가중치가 조용히 버려지고 DiT 는 학습 때와 다른 cog 분포를 본다. finetune 런처는 항상 켠다. 배포/추론 서버에서도 같은 env 가 필요하다.--actlat-mode(전체 latent, 단일 토크나이저)는 이 체크포인트와 같이 쓸 수 없다(config 의 actlat_mixed=true 와 배타). 토크나이저 그룹도 --mt-groups-config 경로로만.meta/relative_stats.json 읽기 권한이 없다 → $ROOT/openarm_prq15/dataset_views/<tag>(symlink view)를 데이터 경로로 쓴다.training_overrides.global_batch_size 가 CLI 를 덮어쓴다.tokenizer_config.json 의 note: loader.py 포팅 필요).hf repo create jungwook2358/action-tokenizer-openarm-prq15-r6h5 --repo-type model
hf upload jungwook2358/action-tokenizer-openarm-prq15-r6h5 $ROOT/openarm_prq15/tokenizer_bundle bundle
hf upload jungwook2358/action-tokenizer-openarm-prq15-r6h5 $TOK/checkpoints_action_tokenizer/openarm_prq15_r6h5_actiononly_w0p03_splitdec_g2_100k/action_preproc_contract.json train/action_preproc_contract.json
hf upload jungwook2358/action-tokenizer-openarm-prq15-r6h5 $TOK/checkpoints_action_tokenizer/openarm_prq15_r6h5_actiononly_w0p03_splitdec_g2_100k/multiemb_full.pt train/multiemb_full.pt
hf upload jungwook2358/action-tokenizer-openarm-prq15-r6h5 $TOK/input_artifacts train/input_artifacts
hf repo create jungwook2358/rldx1-mt-multigroup-20260918 --repo-type model
hf upload jungwook2358/rldx1-mt-multigroup-20260918 <run dir>/checkpoint-100000 checkpoint-100000 \
--include "config.json" --include "model-*.safetensors" --include "model.safetensors.index.json" --include "experiment_cfg/*" --include "processor/*"
받는 쪽: hf download <repo> --local-dir <dir> (체크포인트 레포는 --include "checkpoint-100000/*" 로 100k 만 받으면 된다) 후 BASE_MODEL_PATH=<dir>/checkpoint-100000. groups JSON 의 tokenizer.contract / bundle / --prq-stats 경로를 받은 위치로 바꾼다(sha 는 그대로여야 verify 통과).