依頼135 報告：deep1 の実機推論の安全範囲を50本から作る・次の学習から学習率の下げ方をステップ数に合わせる (2026-11-09)

実機は動かしていない。Pod・lab_train.sh pid 8808・KIOXIA の lab/Log27/train/ には触っていない。

■ 1. 安全範囲 (決め1)
lab_start.sh で --model deep1 (と新しい deep1b) のときは、run_policy_client.py --raw-dir を
/Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_deep_even10_v1/raw_episodes にした。
trim・corr・corr2・corr3 は今までどおり trim2。位置合わせ (camera_align.py) のお手本はどのモデルも trim2 のまま。
起動時に「[RANGE ] 安全範囲 (学習データ ±10°) は ... から」を出す。deep のデータがなければ API を呼ぶ前に止まる。

範囲 (run_policy_client.py の load_envelope と同じ計算。データの最小・最大 ±10° を物理可動域・J4_SAFE・J1_SAFE_MAX で切る)
            deep1 (deep_even10_v1 50本・7128行)      trim2 (19本・2717行)
  関節   データ範囲        安全範囲             データ範囲        安全範囲
  j0    -61.7〜+44.7     -71.7〜+54.7        -61.7〜+44.7     -71.7〜+54.7
  j1     +1.2〜+87.9      -8.8〜+88.0          +1.3〜+87.9      -8.7〜+88.0 (上限は J1_SAFE_MAX 88°)
  j2    -34.5〜+42.5     -44.5〜+52.5        -35.7〜+31.4     -45.7〜+41.4
  j3     -7.8〜+17.0     -17.8〜+27.0         -7.8〜+17.0     -17.8〜+27.0
  j4    -76.6〜 +0.4     -86.6〜+10.4        -88.2〜 +0.4     -90.0〜+10.4 (下限は J4_SAFE -90°)
  j5    -40.7〜-25.3     -50.7〜-15.3        -40.6〜-23.6     -50.6〜-13.6
違い：j2 の上限が +11.1° 広い (+41.4 → +52.5)。j4 の下限は 3.4° 狭い (-90.0 → -86.6)。j5 の上限は 1.7° 狭い。j0・j3 は同じ。

■ 2. 学習率の下げ方 (決め2)
- add_deep_config.py に --variant (必須) を足した。
  v1 = 設定 pi05_mecharm_deep_even10_lora・decay_steps 5_000 (依頼133 の今回の 2999。中身は変えていない)
  b  = 設定 pi05_mecharm_deep_even10_b_lora・decay_steps = --steps (warmup 300・peak 5e-5・decay_lr 5e-6 は同じ)
  decay_steps が warmup 300 以下なら止まる。v1 と b は名前が違うので同じ config.py に両方入れられる。
- pod_prep_deep.sh は <steps> <variant> を取る (v1/b 以外なら tar を見る前に止まる)。
- lab_lib.sh / lab_train.sh：新しいモデル名 deep1b を足した (上げる先 PixelstoMotors/pi05-mecharm-deep-even10-b-lora-v1、
  KIOXIA の checkpoints/pi05_mecharm_deep_even10_b_lora_v1/<ステップ>、exp deep_even10_v1_b、Pod の /workspace/ckpt/deep_b_v1_2999)。
  lab_train.sh --model deep1b --steps N で decay_steps = N。
- 今回のモデル (deep1) の扱い：設定の名前 pi05_mecharm_deep_even10_lora = decay_steps 5000 として残す。
  lab_start.sh --model deep1 は今までどおり deep_v1_2999 を立てる (3f は add_deep_config.py --steps 3000 --variant v1)。
  lab_train.sh --model deep1 で新しく学習しようとすると止まって deep1b を案内する (同じ置き場所・リポジトリに別の下げ方の
  モデルが上書きされるのを防ぐため)。--stop (記録の model=deep1) はそのまま使える。
- 由来 (train_provenance.json) の config に lr_schedule {warmup_steps 300, peak_lr 5e-5, decay_steps, decay_lr 5e-6,
  source "add_deep_config.py --variant v1|b"} を足した (deep1・deep1b だけ。corr〜corr3 には足さない)。
  ※いま動いている学習は前のコードで動いているので、その由来には lr_schedule は入らない。
    見分けは config.name = pi05_mecharm_deep_even10_lora (= decay_steps 5000) で行う。
- corr〜corr3 の続きの学習の設定は変えていない。

■ 3. テスト
- test_lab_train.sh：OK 240 / NG 0 (deep1b の成功・--steps 2000 で decay 2000・--steps 300 は止まる・deep1 の新しい学習は止まる・
  --stop の deep1 は decay 5000 で由来を書く・corr3 の由来に lr_schedule なし・正規化の値の失敗 3 種を deep1b で)
- test_lab_start.sh：OK 172 / NG 0 (deep1 の --raw-dir が deep_even10_v1・trim は trim2・deep のデータがなければ止まる・
  corr3 は deep のデータがなくても trim2 で進む・deep1 は --variant v1 で 2999 を立てる・deep1b の流れ)
- pi05/test_merge_and_config.py：34 件 OK (v1 は trim と同じ decay 5000・b は decay = ステップ数 (3000/2000)・
  --variant 必須・decay ≤ 300 は止まる・書き換えられた decay は止まる・pod_prep_deep.sh は知らない variant で先に止まる)

■ 4. codex
1 回。指摘なし (安全範囲・deep1 の残し方・deep1b の区別・いまの学習に影響しないことを確認したとの答え)。
(1 回目の最初の起動は標準入力待ちで止まったので、標準入力を閉じて流し直した。数に入れていない)

■ 5. commit
6715f5e (変えたファイルだけを指定して add)

■ 6. いまの学習に影響がなかったことの確かめ
- lab_train.sh は main の中身を始めに読み、lab_lib.sh は始めに source 済み。pi05/ は 3a で Pod へ送り済み、4b (pod_prep_deep.sh) も済み。
  終わりに Mac 側で読み直すのは provenance.py だけ (変えていない)。コードの指紋は始める時点で測れている (「測れなかった」の WARN なし)。
- pid 8808 は動いている。lab_train_20261109_153622.txt の最後の行：
  [TRAIN ] 17:55  step 1060/3000  loss 0.0069 (Step 1050 の行)  経過 2:11  上限まで 4:40
  (作業前 17:25 は step 806/3000。5 分おきに進んでいる)

■ 決めてほしいこと
1. 新しいモデルの名前：deep1b・設定 pi05_mecharm_deep_even10_b_lora・Hugging Face PixelstoMotors/pi05-mecharm-deep-even10-b-lora-v1 (非公開で上げる) にした。これでよいか。
2. deep1 の安全範囲は j2 の上限が trim2 より +11.1° 広い (+52.5°)。実機で deep1 を動かす前に、この広がりで良いか確かめてほしい。
3. run_policy_client.py は写り方の確かめの基準画像も --raw-dir の最初のエピソードから取る。deep1・deep1b では基準が deep_even10_v1 の最初の本 (pi05_20261031_175527) になる (lab_start.sh は --ignore-framing を付けているので止まらず警告だけ)。位置合わせ (camera_align.py) は trim2 のまま。これでよいか。
4. lab_start.sh --model deep1b はステップ数 3000 (2999) を前提にしている。deep1b を別のステップ数で学習するときは lab_lib.sh の LAB_DEEP1B_STEPS も合わせて変える必要がある。

判定：止めた（決めてほしいことあり）
