フィジカルAI研究室を作る Log#27 | 浅いつかみの癖を残さず、π0.5 を50本で一から学習

この記事の素材(コード・ログ・データ 13ファイル・まとめてダウンロードあり)
AIで読む ChatGPT・Claude などで、この記事に質問できます

位置ごとに10本そろえた深いお手本50本で、Physical Intelligence の π0.5(ロボット用の AI のモデル)を一から学習し直すと、Runpod で借りた GPU(NVIDIA A40)で3,000ステップに6.2時間、費用は約579円でした。学習の誤差(loss)は 0.1015 から 0.0036 まで下がり、できたモデルは実機の小型アーム mechArm 270 で動かせる状態にしてあります。

この回でやったことで、次のことが変わりました。

  • 良くなること:前のモデルは、浅くつかんだお手本が入ったデータから4回続けて学習を重ねたものでした。今回は π0.5 の元の重み(base)から学習したので、浅いつかみの癖を持ち越していません。置き場所ごとの本数の偏り(LOG479 で直したもの)の効き目を、ほかの癖と混ぜずに見られます
  • もたらされること:base から学習する流れ(--model deep1)が、1行で回せるようになりました。Pod を借り、データを送り、正規化の値を測り直し、学習し、モデルを Hugging Face と手元の SSD に置いて Pod を消すまでを、寝ている間に任せられます。次からは学習率の下げ方もステップ数に合わせた形(deep1b)で回せます
  • 時間と費用:借りていた時間は372分(準備 約8分・学習 5時間58分・片付け 約6分)。1ステップ約7.2秒、約579円(1時間 0.59 ドル・1ドル=158円)。人がしたのは、出発点・安全範囲・学習率の下げ方など5つを選んだことだけでした

困りごとは、前のモデルの出どころでした。今までのモデルは、つかみが浅いお手本を含む19本(trim2)で学習した重み(3999)に、補正のデータで3回続けて学習を重ねたものです(corr → corr2 → corr3)。LOG479 で浅いお手本を外し、5か所を10本ずつにそろえたので、その50本で続きを学習すると、古い重みの癖と新しいデータの効き目が混ざってしまいます。

新しいデータの効き目を確かめるために、続きではなく π0.5 base から学習し、正規化の値も50本で測り直しました。 費用は続きの学習(1,500ステップ・約3時間)のほぼ倍ですが、約579円です。

やったことの全体は次のとおりです。

時刻やったこと結果
15:01〜16:00
base から学習する --model deep1 を lab_train.sh に足した(依頼133)
偽の Pod でのテスト 234件・codex のレビュー 3回で合格
15:36〜15:44
A40 を借り、50本を送って LeRobot の形に変え、正規化の値を測り直した
準備 約8分。正規化の値を手元に持ち帰り、指紋(sha256)が Pod と同じことを確かめた
15:44〜21:423,000ステップ学習した
loss 0.1015 → 0.0036。GPU のメモリは最大 41,283 MiB(46,068 MiB 中)
17:25〜17:59
実機推論の安全範囲を50本から作り、次の学習から学習率をステップ数に合わせて下げきる形にした(依頼135)
肘 j2 の上限が +41.4° から +52.5° に広がった
21:08〜21:21
写り方の確かめの基準画像を trim2 にそろえた(依頼137)
安全範囲は50本、写り方の基準は位置合わせと同じ trim2
21:42〜21:51
モデルを Hugging Face と KIOXIA に置き、Pod を消した
32ファイル・約6.3GB。約579円

次は、このモデル(deep1)を位置1〜5 で実機推論し、前のモデル(corr3)と成功の数を比べます。

GPU を買うか借りるかの判断は、Runpod で実際に借りて学習させた費用をもとに、別のページにまとめています。

導入比較ガイドロボットAIの学習用GPU、買うか借りるか実際に借りて学習させた費用と、損益分岐の計算機で決められます

この回の作業は、Claude(手順と数字の確かめを一緒に進めた AI)と進めました。何をどう学習するかの決めはこちらで行い、学習の仕組みの直しと学習の実行は Claude Code(プログラムを書く AI)に依頼箱を通して頼んでいます。ここから下は、依頼文と報告・コードの差分・端末の出力・学習のログ・測定データを全量で載せた作業ログです。数字は記録から数えたもので、見込みのものは見込みと書いています。鍵(アクセストークンなど)は、どこにも載せていません。Pod の IP とポートは、記録の時点で <POD_IP>:<SSH_PORT> に置き換えてあります。

作業ログ ― 50本で π0.5 を base から学習し、実機推論の準備をそろえるまで

この回で使う言葉

言葉意味
π0.5 base
Physical Intelligence が公開している π0.5 の元の重み。いろいろなロボットのデータで事前に学習してある。ここから自分のアームのお手本で学習し直す
続きの学習
すでに自分のデータで学習した重みを出発点に、さらに学習を重ねること。前のデータの癖も一緒に引き継ぐ
LoRA
大きなモデルの重みは固定したまま、小さな追加の重みだけを学習するやり方。少ない GPU のメモリで学習できる。このシリーズの学習はすべて LoRA
ステップ
学習の1回分。お手本から32コマ(batch 32)を取り出して、重みを1回直す
loss
お手本の動きと、モデルが出した動きのずれ。学習が進むと下がる。データが違うと値の大きさも変わるので、別のデータの loss とは大小を比べられない
正規化の値
関節の角度を、平均0・ばらつき1くらいにそろえるための平均と幅。お手本から測る。学習と推論で同じ値を使う
学習率の下げ方
重みを直す幅(学習率)を、学習の終わりに向けて小さくしていく予定。何ステップかけて下げきるかを decay_steps で決める
安全範囲
実機推論のときに、モデルが出した関節の角度をそのまま送ってよい範囲。お手本の関節の範囲の外側 10° まで。外れたら送らない
写り方の確かめ
実機推論の前に、上カメラの画が学習のときと同じ写り方かを、お手本の1枚目と比べて確かめる仕組み
依頼箱
Claude Code への依頼をファイルで置くと、Mac の見張り係が順番に渡して実行させる仕組み

Runpod は、GPU を時間単位で借りられるクラウドのサービスです。借りたマシンを Pod と呼びます。このシリーズでは、学習のたびに Pod を借り、終わったら消しています。Hugging Face は、AI のモデルとデータを置いて配るサービスです。学習したモデルは非公開のリポジトリ(PixelstoMotors/pi05-mecharm-deep-even10-lora-v1)に置き、推論の Pod はそこから取ってきます。

学習の出発点を、続きではなく π0.5 base にした

依頼を出す前に、出発点を3つから選びました。

出発点中身見込み
π0.5 base から新しく(選んだもの)
50本だけで学習。正規化の値も50本で測り直す
A40 で3,000ステップ 約5.5時間・約1,000円の見込み(実際は6.2時間・約579円)
trim の 3999 から続き
今までと同じ続きの形。1,500ステップ 約3時間
3999 は浅いお手本入りの trim2 で学習した重み
corr3 の 1499 から続きいちばん新しいモデルに重ねる補正の積み重ねの上に乗せる

base を選びました。もうひとつ、記録の番号はフィジカルAI研究室の Log27 にしました(お手本をそろえた回は Log26)。

  • ねらい:浅いお手本の癖と、置き場所の偏りを直したデータの効き目を、混ぜずに見る
  • 変わったこと:出発点が trim の 3999(浅いお手本入りの19本で学習)から、π0.5 base に。正規化の値も trim2 の19本から、今回の50本に
  • 見込める効果:位置1〜5 の成功の差が縮むか、深くつかめるかを、このデータだけの結果として実機で確かめられる。確かめるのは次の回の実機推論

見込みの費用(約1,000円)は、A40 の値段を高めに見積もっていました。実際の値段は1時間 0.59 ドルでした。

lab_train.sh に、base から学習する —model deep1 を足した(依頼133)

今までの lab_train.sh は、前のモデルからの続きの学習(corr・corr2・corr3)しかできませんでした。Claude Code に、base から学習するモデル deep1 を足してもらい、そのまま本番を始めてもらいました。

項目deep1 の中身
データ
mecharm_redblock_box_deep_even10_v1(50本・7,128コマ・tar 193,353,728 バイト)
設定
pi05_mecharm_deep_even10_lora(trim の pi05_mecharm_trim_lora を写し、名前・データ名・ステップ数だけ替えた。LoRA・batch 32)
出発点
π0.5 base(gs://openpi-assets/checkpoints/pi05_base/params)
正規化
Pod で compute_norm_stats.py を回して測り直し、学習の前に手元へ持ち帰る
ステップ
3,000(保存は1,000ごと。最後は 2999)
置き場所
KIOXIA の lab/Log27/train/ と checkpoints/pi05_mecharm_deep_even10_lora_v1/2999/。Hugging Face の非公開リポジトリ
由来の記録
train_provenance.json に、base から始めたこと・データの tar の指紋・正規化の値の指紋

Claude Code は、偽の Pod で流れを通すテストを18件足し(全234件が合格)、codex(外のレビューの AI)に3回見てもらっています。1回目の指摘のうち大事だったのは、正規化の値を持ち帰れなくても成功になってしまう点でした。2回試してだめならチェックポイントの中から取り直し、それでもなければ失敗にする形に直っています。

Runpod の A40 で3,000ステップ、6.2時間・約579円だった

学習のターミナルの記録から、かかった時間をまとめました。Pod の中の時刻は UTC(日本時間より9時間前)で記録されています。

段階時間
Pod を作り、立ち上がるまで1分
スクリプトを送り、openpi を取り、設定を入れる
2分13秒
50本の tar(193MB)を送る
2分13秒
LeRobot の形に変え、正規化の値を測り直す
2分38秒
学習(3,000ステップ)5時間58分
学習の終わりを確かめ、Hugging Face へ上げ、ログを持ち帰り、Pod を消す
約6分
KIOXIA へ Hugging Face から取る(Pod を消したあと)
2分5秒
借りていた時間の合計
372分24秒(6.21時間)・約3.66 ドル(約579円)

1ステップは約7.2秒でした(5時間58分 ÷ 3,000)。前に同じ A40 で測った値(RUNPOD_TRAIN.md の約6.6秒)より少し遅く、1,000ステップごとの保存の時間も入っています。GPU のメモリは最大 41,283 MiB(46,068 MiB 中)、使用率の平均は97%でした。

loss は次のように下がりました。

ステップ05001,0001,5002,0002,5002,950
loss0.10150.01130.00720.00580.00480.00430.0036

前に base から trim2 の19本で4,000ステップ学習したとき(LOG355)は、1,000ステップで 0.0078、2,950ステップで 0.0043 でした。データが違うので、この差でどちらのモデルが良いかは言えません。2,500ステップを過ぎても、まだゆっくり下がっていました。

実機推論の安全範囲を、学習した50本から作るようにした(依頼135)

学習の途中で、依頼133 の報告から2つ決めました。1つ目は実機推論の安全範囲です。今までは、どのモデルで推論しても、trim2 の19本の関節の範囲から作っていました。50本は肘 j2 が +42.5° まで上がるお手本を含み、trim2 から作った上限(+41.4°)を超えます。

関節
50本から作った範囲(deep1)
trim2 から作った範囲(今まで)
j0−71.7〜+54.7−71.7〜+54.7
j1−8.8〜+88.0−8.7〜+88.0
j2−44.5〜+52.5−45.7〜+41.4
j3−17.8〜+27.0−17.8〜+27.0
j4−86.6〜+10.4−90.0〜+10.4
j5−50.7〜−15.3−50.6〜−13.6
  • ねらい:お手本どおりの姿勢が、安全範囲で止められないようにする
  • 変わったこと:deep1 で推論するときだけ、安全範囲を50本から作る。j2 の上限が 11.1° 広がり、j4 の下限は 3.4°、j5 の上限は 1.7° 狭まった。ほかのモデルは今までどおり trim2
  • 見込める効果:位置によって肘を高く上げるお手本の動きを、途中で止めずに送れる。初回の実機では、j2 が高く上がる場面を目で見る

2つ目は学習率の下げ方です。今回の設定は trim の写しなので、5,000ステップかけて学習率を下げきる予定のまま、3,000ステップで止まります。学習率は下がりきる手前で終わりました。次に回す学習からは、下げきるステップ数をステップ数に合わせます。今回のモデル(deep1)と見分けがつくよう、新しい形は deep1b(設定 pi05_mecharm_deep_even10_b_lora・Hugging Face は pi05-mecharm-deep-even10-b-lora-v1)として分けてあります。

写り方の確かめの基準画像だけは、trim2 にそろえた(依頼137)

依頼135 の報告で、もう1つ見つかりました。実機推論の前の写り方の確かめは、安全範囲と同じフォルダの最初のお手本の画を基準にしていました。deep1 では、その基準が50本の最初の1本(2026-10-31 の補正入りの本)になります。上カメラの位置合わせ(camera_align.py)は trim2 を基準にしているので、写り方の確かめも trim2 にそろえました。

推論するモデル安全範囲写り方の基準画像上カメラの位置合わせ
deep1・deep1b
50本(deep_even10_v1)
trim2trim2
trim・corr〜corr3
trim2trim2trim2

run_policy_client.py に --framing-raw-dir を足して、基準画像を安全範囲とは別に指定できるようにしています。

学習の仕組みの直しは、学習が回っている間に入れました。lab_train.sh は始めに中身を読み込んでいて、Pod に送るものも送り終えていたので、回っている学習には効きません。依頼135・137 の報告で、学習の記録がその間も5分おきに進んでいたことを確かめています。

依頼133:base から学習する deep1 を足して本番を始めた

この記事のコード・ログ・データは、1ファイルずつ下に置いています。全文はリンク先にあります。

ファイルの一覧(13本)

01_sec07.txt ― 依頼133 の報告(r2r2r-scripts/claude_code_reports/20261109_133.txt)・4,631字

02_commit.txt ― 依頼133 の commit(8db7028)の差分の全量・57,904字

03_sec08.txt ― 学習のターミナルの記録(lab_train_20261109_153622.txt)・53,789字

04_sec08.json ― 由来の記録(train_provenance.json)・4,275字

05_sec08.txt ― LeRobot の形への変換と正規化の値の測り直しのログ(prep_deep.log)・30,728字

06_sec08.txt ― 学習のログ(train_deep_even10_v1.log)・239,705字

07_sec08.txt ― 学習中の GPU の記録・30秒ごと(gpu_train.csv)・57,528字

08_sec08.txt ― Pod 側のチェックポイントの一覧(pod_checkpoints.tsv)・16,154字

09_sec09.txt ― 依頼135 の報告(r2r2r-scripts/claude_code_reports/20261109_135.txt)・4,398字

10_commit.txt ― 依頼135 の commit(6715f5e)の差分の全量・65,348字

11_commit.txt ― 依頼137 の commit(3310ac0)の差分の全量・15,855字

12_sec11.py.txt ― 学習の設定を openpi に足すコード(r2r2r-scripts/pi05/openpi_addon/add_deep_config.py)・5,597字

13_sec11.sh.txt ― Pod でデータを変換し正規化の値を測り直すスクリプト(r2r2r-scripts/pi05/openpi_addon/pod_prep_deep.sh)・3,633字

依頼133 の依頼文(依頼箱/済み/20261109_133_そろえた50本でπ0.5をbaseから新しくRunpodで学習する.md)

---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 150
---
# 依頼133:位置ごとに10本そろえた50本(mecharm_redblock_box_deep_even10_v1)で、π0.5 を base から新しく Runpod で学習する

実機は動かさない。エイイチは見ていない。記録の Log 番号は **Log27**(フィジカルAI研究室 Log#27)。
**エイイチの決め(2026-11-09):続きの学習ではなく、π0.5 base から新しく LoRA で学習する。正規化の値もこの50本で測り直す。**
依頼131 は完了している(記録.log・claude_code_reports/20261109_131.txt「判定:合格」)。

## 背景
今までのモデル(trim の 3999 → corr → corr2 → corr3)は、浅くつかんだお手本が入った trim2 から積み重ねてきた。今回は浅い本を外し、位置1〜5 を各10本にそろえたデータなので、その効き目を古い重みの癖と混ぜずに見るため base から学習する。

## やること
1. lab_train.sh・lab_lib.sh に、base から学習するモデル `deep1` を足す(今の corr / corr2 / corr3 の流れは変えない)
   - データ:mecharm_redblock_box_deep_even10_v1(KIOXIA の datasets/ の tar。Pod へ送って LeRobot 形式に変換)
   - 設定名:pi05_mecharm_deep_even10_lora(中身は trim の pi05_mecharm_trim_lora と同じ LoRA・batch 32 で、データ名だけ違う。add_trim_config.py の書き方に合わせる)
   - 初期の重み:π0.5 base(RUNPOD_TRAIN.md 5. と同じ)。続きの元の Hugging Face のモデルは取らない
   - 正規化:Pod で compute_norm_stats.py をこの設定で回す(RUNPOD_TRAIN.md 4.)。値は持ち帰りに含める
   - ステップ:3,000(保存は 1,000 ごと。最後は 2999)。上限時間 --limit は 7 時間(A40 で 1 ステップ約 6.6 秒の実測から約 5.5 時間+準備)
   - 持ち帰り先:KIOXIA の lab/Log27/ と checkpoints/pi05_mecharm_deep_even10_lora_v1/。Hugging Face は非公開の PixelstoMotors/pi05-mecharm-deep-even10-lora-v1(最後の 2999 を assets ごと)
   - 由来(train_provenance.json)に、base から始めたこと・データの tar の指紋・正規化の値の指紋を残す
   - lab_start.sh の --model にも deep1 を足し、学習のあとこのモデルで実機推論のサーバーを立てられるようにする(今日は立てない)
2. test_lab_train.sh(lab_train_fakes.sh の偽物)で deep1 の流れを通す。今の corr〜corr3 のテストも通ること
3. codex で差分を見てもらう(Pod を借りて消すところ・上限の見張り・鍵の扱いが今までと同じに働くか)。指摘を直して通るまで
4. 変えたファイルだけを指定して git add・commit(git add . は使わない)
5. 本番を始める:`./lab_train.sh --log Log27 --model deep1 --steps 3000 --limit 7`(引数の名前は今の lab_train.sh に合わせる)。依頼箱の上限で切れないよう、今までの学習と同じ形で切り離して動かす。Pod が借りられて SSH が通り、学習のログに最初の loss が出るところまで見届けてから報告する。借りられなかったときは、ほかの GPU を試す今の動き(fallback)のままでよい
6. 途中経過は2時間ごと(または準備・学習・持ち帰りの区切り)に知らせる。終わったら今の lab_train.sh と同じく、モデルを持ち帰って Pod を消し、通知する

## 報告
claude_code_reports/20261109_133.txt に:足したモデルの中身(設定・ステップ・置き場所)、2 のテストの結果、codex の回数と指摘、commit の番号、本番の Pod(GPU の型番・借り始めの時刻・1時間の値段)、最初の loss とそのステップ、終わる見込みの時刻と費用(円で。ドルは補足)、決めてほしいこと。
**報告の最後の1行は必ず次のどれか**:「判定:合格」/「判定:止めた(決めてほしいことあり)」/「判定:失敗」

依頼133 の報告(r2r2r-scripts/claude_code_reports/20261109_133.txt)

01_sec07.txt4,631字・54行・text
依頼133 報告:位置ごとに10本そろえた50本(mecharm_redblock_box_deep_even10_v1)で π0.5 を base から新しく Runpod で学習する(Log27)

■ やったこと
1. lab_train.sh・lab_lib.sh・lab_start.sh に --model deep1 を足した(corr / corr2 / corr3 の流れは変えていない)
   - データ: mecharm_redblock_box_deep_even10_v1(KIOXIA datasets/ の tar 193,353,728 バイト・50本 / 7128コマ)
   - 設定: pi05_mecharm_deep_even10_lora(新しい pi05/openpi_addon/add_deep_config.py。add_trim_config.py と同じく trim の pi05_mecharm_trim_lora を写し、名前・データ名・num_train_steps だけ替える。LoRA・batch 32・学習率の予定 warmup 300 / peak 5e-5 / decay_steps 5,000 / decay_lr 5e-6・weight_loader は trim と同じ)
   - 初期の重み: π0.5 base(gs://openpi-assets/checkpoints/pi05_base/params)。3c で続きの元は取らない
   - 正規化: 新しい pi05/openpi_addon/pod_prep_deep.sh が Pod で tar を広げて 50本を確かめ、LeRobot 形式に変換し、compute_norm_stats.py --config-name pi05_mecharm_deep_even10_lora で測り直す。値は学習の前に lab/Log27/train/norm_stats.json へ持ち帰り、sha256 が Pod と同じかを確かめる(持ち帰れなければ学習のあとチェックポイントの assets から取り直す。sha256 が違えば成功にしない)
別のタブで開く保存

依頼133 の commit(8db7028)の説明と変えたファイル

commit 8db7028ab50d6b30b7bcc1395891f4668a5a1ce8
Date: Mon Nov 9 15:36:01 2026 +0900

位置ごとに 10 本そろえた mecharm_redblock_box_deep_even10_v1 (50 本) で π0.5 base から新しく学習する lab_train.sh --model deep1 を足す (設定 pi05_mecharm_deep_even10_lora は trim と同じ LoRA・batch 32・学習率の予定でデータ名とステップ数だけ違う. add_deep_config.py. 既定 3000 ステップ・3c で続きの元を取らない・4b は pod_prep_deep.sh で変換し compute_norm_stats.py で正規化の値を測り直して lab/<Log>/train/norm_stats.json に持ち帰る (持ち帰れなければチェックポイントの assets から. sha256 が違えば成功にしない)・上げる先 PixelstoMotors/pi05-mecharm-deep-even10-lora-v1・KIOXIA は checkpoints/pi05_mecharm_deep_even10_lora_v1/2999). 由来に π0.5 base から始めたこと・データの tar と正規化の値の sha256 を残す. lab_start.sh / lab_lib.sh の --model に deep1 (/workspace/ckpt/deep_v1_2999) を足す. corr〜corr3 の流れは変えない. テストを足す (lab_train 234・lab_start 161・test_merge_and_config 30) (依頼 133. codex 3 回)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>


 lab_lib.sh                           |  48 ++++++++----
 lab_start.sh                         |   3 +
 lab_train.sh                         | 139 ++++++++++++++++++++++++++++-------
 lab_train_fakes.sh                   |  31 ++++++--
 pi05/openpi_addon/add_deep_config.py |  80 ++++++++++++++++++++
 pi05/openpi_addon/pod_prep_deep.sh   |  67 +++++++++++++++++
 pi05/test_merge_and_config.py        |  43 +++++++++++
 test_lab_start.sh                    |  18 ++++-
 test_lab_train.sh                    |  44 +++++++++++
 9 files changed, 426 insertions(+), 47 deletions(-)

依頼133 の commit(8db7028)の差分の全量

02_commit.txt57,904字・809行・diff
diff --git a/lab_lib.sh b/lab_lib.sh
index e9a0db7..6e1e082 100644
--- a/lab_lib.sh
+++ b/lab_lib.sh
@@ -276,13 +276,16 @@ lab_cmd_addon() {           # 3f. 何度流しても同じ結果 (install_addon.
 # 入っている設定と --steps / --init が違うと止まる. 推論では weight_loader は使わない)
 # corr2 (依頼 57) は corr_v1_1499 から trim2_corr_v4 で続きを学習したもの (設定 pi05_mecharm_trim_corr_v4_lora)
 # corr3 (依頼 97) は corr_v2_1499 から trim2_corr_v5 で続きを学習したもの (設定 pi05_mecharm_trim_corr_v5_lora)
別のタブで開く保存

学習の記録 ― Runpod の A40 で3,000ステップ(KIOXIA の lab/Log27/train/)

ここの記録は、lab_train.sh が持ち帰ったものをそのまま載せています。Pod の中の時刻は UTC です。ターミナルの記録には、色を付ける制御の文字(ESC)が混ざっている行があります。

学習のまとめ(result_20261109_153622.txt)

lab_train.sh Log27  2026-11-09 21:50:59
結果: 成功: 学習が終わりました (step 2999, loss 0.0036). Hugging Face と KIOXIA に置き, Pod を消しました. 372 分 24 秒 (6.21 時間) × 1時間 0.59 ドル = 約 3.66 ドル (約 579 円. 1ドル=158円)
学習: pi05_mecharm_deep_even10_lora --exp-name=deep_even10_v1  最後のチェックポイント 2999  最後の loss 0.0036 (Step 2950)
Hugging Face (PixelstoMotors/pi05-mecharm-deep-even10-lora-v1): ok PixelstoMotors/pi05-mecharm-deep-even10-lora-v1 に 32 ファイル 6,335,846,833 バイトを上げ, 名前・バイト数が全部合うのを確かめた
KIOXIA: /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_deep_even10_lora_v1/2999 に置いた (32 ファイル 6335846833 バイト. Pod 側と名前・バイト数が全部合った). assets の正規化の値は測り直したものと sha256 が同じ
ログを持ち帰った → /Volumes/KIOXIA/r2r2r-data/lab/Log27/train
Pod (id arn304g7xu5wfk) は消した (API で確かめた)
借りていた時間 372 分 24 秒 (6.21 時間) × 1時間 0.59 ドル = 約 3.66 ドル (約 579 円. 1ドル=158円)
正規化の値 (Pod で測り直した. sha256 813fcb8cccd147c1d49e5c06e695587142d4535ff7c1f27b9fc94ea6aee66ce4): /Volumes/KIOXIA/r2r2r-data/lab/Log27/train/norm_stats.json
由来: /Volumes/KIOXIA/r2r2r-data/lab/Log27/train/train_provenance.json ・ /Volumes/KIOXIA/r2r2r-data/checkpoints/pi05_mecharm_deep_even10_lora_v1/2999/train_provenance.json ・ Hugging Face (PixelstoMotors/pi05-mecharm-deep-even10-lora-v1) にも置いた
ターミナルの記録: /Volumes/KIOXIA/r2r2r-data/lab/Log27/train/lab_train_20261109_153622.txt

学習のターミナルの記録(lab_train_20261109_153622.txt)

03_sec08.txt53,789字・1,176行・text
[LOG   ] ターミナルの出力を残します → /Volumes/KIOXIA/r2r2r-data/lab/Log27/train/lab_train_20261109_153622.txt
[LAB   ] 2026-11-09 15:36:22  学習  GPU=NVIDIA A40 (借りられなければ NVIDIA RTX A6000 NVIDIA L40S)
         --model deep1 (π0.5 base → PixelstoMotors/pi05-mecharm-deep-even10-lora-v1)  データ mecharm_redblock_box_deep_even10_v1
         pi05_mecharm_deep_even10_lora --exp-name=deep_even10_v1  steps=3000  init=base  上限 7 時間  記録 /Volumes/KIOXIA/r2r2r-data/lab/Log27/train

=== 0. 送るものと Mac の道具を確かめる  (15:36:22)
[DATA  ] tar の sha256 c7097302c784… (由来に残す)
[DATA  ] tar 193353728 バイト  (/Volumes/KIOXIA/r2r2r-data/datasets/mecharm_redblock_box_deep_even10_v1/mecharm_redblock_box_deep_even10_v1_raw_episodes.tar)
別のタブで開く保存

Pod の記録(lab_pod.json)

{
  "id": "arn304g7xu5wfk",
  "kind": "train",
  "model": "deep1",
  "gpu": "NVIDIA A40",
  "log": "Log27",
  "costPerHr": 0.59,
  "created_epoch": 1794206186,
  "created_at": "2026-11-09 15:36:26",
  "config": "pi05_mecharm_deep_even10_lora",
  "exp": "deep_even10_v1",
  "steps": 3000,
  "limit_sec": 25200,
  "limit_at": "2026-11-09 22:36:26",
  "init": "base",
  "limit_hours": "7",
  "prov_start": {
    "code": {
      "repo": "r2r2r-scripts",
      "commit": "8db7028ab50d6b30b7bcc1395891f4668a5a1ce8",
      "dirty": false,
      "dirty_files": [],
      "untracked_backups": [
        "pi05/build_demo_episodes.py.bak_pre_LOG352_20261019"
      ],
      "diff_sha256": null,
      "measured_at": "2026-11-09T15:36:23+09:00",
      "paths": [
        "lab_train.sh",
        "lab_lib.sh",
        "provenance.py",
        "pi05"
      ]
    },
    "inputs": [
      {
        "kind": "dataset",
        "id": "mecharm_redblock_box_deep_even10_v1",
        "path": "datasets/mecharm_redblock_box_deep_even10_v1",
        "fingerprint": "files-v2:9701f85562a810d1ac863d732b2494d4dacc224c88e0a3099a523c78825f40ad",
        "tar": {
          "path": "datasets/mecharm_redblock_box_deep_even10_v1/mecharm_redblock_box_deep_even10_v1_raw_episodes.tar",
          "sha256": "c7097302c7846be914c3ef61263bf443b0e6945f24770efd545e3813089747c8"
        },
        "measured_at": "2026-11-09T15:36:23+09:00"
      },
      {
        "kind": "checkpoint",
        "id": "pi05_base",
        "path": null,
        "fingerprint": null,
        "hf_repo": null,
        "pod_path": null,
        "url": "gs://openpi-assets/checkpoints/pi05_base/params",
        "note": "π0.5 base から新しく学習 (続きの学習ではない)",
        "measured_at": "2026-11-09T15:36:23+09:00"
      },
      {
        "kind": "config",
        "id": "add_trim_config.py",
        "path": "lab/Log11/pod/add_trim_config.py",
        "fingerprint": "files-v2:3d7a5ce690b205880da44fa4b20de1b5905b7fb96a91580413ecb5cd660db44c",
        "sha256": "94059deb462623946344a5285f7ebd69c8041b5d820ed28fd4d383f7922f38a9",
        "measured_at": "2026-11-09T15:36:23+09:00"
      }
    ]
  },
  "watchdog_epoch": 1794234986,
  "watchdog": "WATCHDOG run=1 pod=1 key=1 ctl=1",
  "openpi": [
    {
      "name": "openpi",
      "commit": "215abfb217dbac7d5f1273282331b9b1866c0479",
      "dirty": true,
      "dirty_files": [
        "src/openpi/training/config.py",
        "src/openpi/policies/mecharm_policy.py"
      ],
      "expected_commit": "215abfb"
    }
  ],
  "norm_sha256": "813fcb8cccd147c1d49e5c06e695587142d4535ff7c1f27b9fc94ea6aee66ce4",
  "norm_pod": "assets/pi05_mecharm_deep_even10_lora/local/mecharm_redblock_box_deep_even10_v1/norm_stats.json",
  "norm_local": "/Volumes/KIOXIA/r2r2r-data/lab/Log27/train/norm_stats.json",
  "train_started_epoch": 1794206673,
  "train_started_at": "2026-11-09 15:44:33",
  "terminated_epoch": 1794228530,
  "terminated_at": "2026-11-09 21:48:50",
  "rented_sec": 22344,
  "gone_confirmed": true
}

由来の記録(train_provenance.json)

04_sec08.json4,275字・132行・json
{
  "schema_version": "provenance/1",
  "created_at": "2026-11-09T21:50:56+09:00",
  "producer": {
    "script": "lab_train.sh",
    "argv": [
      "--log",
      "Log27",
別のタブで開く保存

測り直した正規化の値(norm_stats.json)

{
  "norm_stats": {
    "state": {
      "mean": [
        2.1063313484191895,
        46.03452682495117,
        4.411215782165527,
        3.1770036220550537,
        -50.12554168701172,
        -31.57465934753418,
        0.43327710032463074
      ],
      "std": [
        32.542823791503906,
        20.7677059173584,
        11.630378723144531,
        4.709203720092773,
        20.20290184020996,
        3.3034868240356445,
        0.49552804231643677
      ],
      "q01": [
        -61.328340319061276,
        1.4899800171852111,
        -33.8316815612793,
        -4.052775578594208,
        -75.5969573038578,
        -40.60079463157654,
        0.0
      ],
      "q99": [
        44.55244774932862,
        87.87266738977432,
        30.300980303955072,
        16.343755064582826,
        -0.26367661064863057,
        -26.275863413238525,
        0.9998
      ]
    },
    "actions": {
      "mean": [
        0.26515433192253113,
        0.0839180126786232,
        -0.02417420595884323,
        0.03403187915682793,
        -0.15184271335601807,
        -0.040091510862112045,
        0.4332770109176636
      ],
      "std": [
        9.135751724243164,
        9.129268646240234,
        3.5192644596099854,
        1.4412405490875244,
        9.11519718170166,
        0.7829089164733887,
        0.49552804231643677
      ],
      "q01": [
        -21.13576020050049,
        -22.60392705345154,
        -11.015750971221925,
        -4.7546747798919675,
        -25.785808544158936,
        -2.6870099975585937,
        0.0
      ],
      "q99": [
        27.837298337936403,
        23.288965936660766,
        9.811358605575563,
        3.7456359291076673,
        25.752579555511474,
        2.849487951660157,
        0.9998
      ]
    }
  }
}

LeRobot の形への変換と正規化の値の測り直しのログ(prep_deep.log)

05_sec08.txt30,728字・577行・text
== 1. tar を広げる → /workspace/data/mecharm_redblock_box_deep_even10_v1
   エピソード 50 本 (Mac で作ったときは 50 本)
== 2. 学習設定 pi05_mecharm_deep_even10_lora を足す (steps=3000. π0.5 base から)
installed: pi05_mecharm_deep_even10_lora (repo_id=local/mecharm_redblock_box_deep_even10_v1, 3000 steps, init=π0.5 base)
== 3. LeRobot 形式に変換 (local/mecharm_redblock_box_deep_even10_v1)

Map:   0%|          | 0/118 [00:00<?, ? examples/s]
Map:  95%|█████████▍| 112/118 [00:00<00:00, 1100.17 examples/s]
別のタブで開く保存

学習のログ(train_deep_even10_v1.log)

06_sec08.txt239,705字・1,920行・text
06:44:38.992 [I] Running on: 59541e1c2271                                                         (1728:train.py:196)
INFO:2026-11-09 06:44:39,482:jax._src.xla_bridge:925: Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig'
06:44:39.482 [I] Unable to initialize backend 'rocm': module 'jaxlib.xla_extension' has no attribute 'GpuAllocatorConfig' (1728:xla_bridge.py:925)
INFO:2026-11-09 06:44:39,483:jax._src.xla_bridge:925: Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory
06:44:39.483 [I] Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory (1728:xla_bridge.py:925)
06:44:40.530 [I] Created BasePyTreeCheckpointHandler: use_ocdbt=True, use_zarr3=False, pytree_metadata_options=PyTreeMetadataOptions(support_rich_types=False), array_metadata_store=<orbax.checkpoint._src.metadata.array_metadata_store.Store object at 0x7bc1755da910> (1728:base_pytree_checkpoint_handler.py:334)
06:44:40.530 [I] Created BasePyTreeCheckpointHandler: use_ocdbt=True, use_zarr3=False, pytree_metadata_options=PyTreeMetadataOptions(support_rich_types=False), array_metadata_store=<orbax.checkpoint._src.metadata.array_metadata_store.Store object at 0x7bc1755da910> (1728:base_pytree_checkpoint_handler.py:334)
06:44:40.530 [I] [thread=MainThread] Failed to get flag value for EXPERIMENTAL_ORBAX_USE_DISTRIBUTED_PROCESS_ID. (1728:multihost.py:390)
別のタブで開く保存

学習を始めた時刻と終わった時刻(train_run.log)

2026-11-09 06:44:30 始める
2026-11-09 12:44:22 終わった (終了コード 0)

学習中の GPU の記録・30秒ごと(gpu_train.csv)

07_sec08.txt57,528字・729行・text
timestamp, name, memory.used [MiB], memory.total [MiB], utilization.gpu [%], temperature.gpu, power.draw [W]
2026/11/09 06:44:30.118, NVIDIA A40, 0 MiB, 46068 MiB, 0 %, 36, 59.69 W
2026/11/09 06:45:00.142, NVIDIA A40, 41221 MiB, 46068 MiB, 0 %, 41, 111.01 W
2026/11/09 06:45:30.143, NVIDIA A40, 41221 MiB, 46068 MiB, 0 %, 42, 111.72 W
2026/11/09 06:46:00.144, NVIDIA A40, 41221 MiB, 46068 MiB, 0 %, 42, 111.99 W
2026/11/09 06:46:30.187, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 43, 112.52 W
2026/11/09 06:47:00.187, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 43, 112.15 W
2026/11/09 06:47:30.191, NVIDIA A40, 41229 MiB, 46068 MiB, 0 %, 43, 112.25 W
別のタブで開く保存

Pod 側のチェックポイントの一覧(pod_checkpoints.tsv)

08_sec08.txt16,154字・240行・text
1000/_CHECKPOINT_METADATA	426
1000/assets/local/mecharm_redblock_box_deep_even10_v1/norm_stats.json	1772
1000/params/_METADATA	33052
1000/params/_sharding	17773
1000/params/array_metadatas/process_0	12891
1000/params/d/2ec07d8052908f76fcfb80c31dc4166d	2772
1000/params/manifest.ocdbt	118
1000/params/ocdbt.process_0/d/04127d8e9dccaf5b05b64f2907947ca5	265961952
別のタブで開く保存

上げた 2999 のファイルの一覧(pod_files_2999.tsv)

_CHECKPOINT_METADATA	426
assets/local/mecharm_redblock_box_deep_even10_v1/norm_stats.json	1772
params/_METADATA	33052
params/_sharding	17773
params/array_metadatas/process_0	12891
params/d/b54e441e6ec634a075db6badcfedcef7	2713
params/manifest.ocdbt	118
params/ocdbt.process_0/d/08cf05d025b550f150365b6fa2db0096	956
params/ocdbt.process_0/d/0dd8585b444297cf7b18711d657cea57	829
params/ocdbt.process_0/d/0e43ede65a0e26b4383cbfcbae981fb5	133035633
params/ocdbt.process_0/d/14cdee8c0f3165256776b0248af09131	549639970
params/ocdbt.process_0/d/1aa4ed0ee7dff4563352e8465238b40e	945630386
params/ocdbt.process_0/d/34129ce9e67ba2bcb0834424b3e59e9b	945626101
params/ocdbt.process_0/d/35914a35cb113012759e4e198faadd5d	1144
params/ocdbt.process_0/d/3cbb3d5e859b5e03e912efbf9a507e9f	945879428
params/ocdbt.process_0/d/4540a892ee6f3e107c5e7c3ea55c1583	1347940843
params/ocdbt.process_0/d/531c232f719787fc92c3abcb20bd8815	1376
params/ocdbt.process_0/d/57f10e154993d8a61be2f0df666c115c	251101228
params/ocdbt.process_0/d/64866c1760cd1011533b76e3d7263176	1258
params/ocdbt.process_0/d/6a35534b8514667d372bc0b1dc653435	103461521
params/ocdbt.process_0/d/79e799b5d9ee70b339132b0ea3308e3e	1328
params/ocdbt.process_0/d/acd1c946899138c517f3011d6d1f49d1	120876
params/ocdbt.process_0/d/bc422d52055c3a708602add154aba084	213
params/ocdbt.process_0/d/bebe802d8dd6db2cfdbf7cb06e4b38ae	69371308
params/ocdbt.process_0/d/c0480948731f0b19ecc9dcf507fe2d35	902
params/ocdbt.process_0/d/c16b308ee95b0cb6af47cba75d762808	538
params/ocdbt.process_0/d/c2ab1a237b99cf1f7a6af1553be9455d	81988328
params/ocdbt.process_0/d/c65fa5c1c9867cd2c390a666932ee198	444
params/ocdbt.process_0/d/d1e1a76c24eeb731405871a6b4200769	828933304
params/ocdbt.process_0/d/d2a0677c9fc1009ba0e46b91ffcc13aa	133038450
params/ocdbt.process_0/d/dce57051dcd1400c417b819474a256d1	1220
params/ocdbt.process_0/manifest.ocdbt	504

依頼135:安全範囲を50本から作り、次の学習から学習率をステップ数に合わせた

依頼135 の依頼文(依頼箱/済み/20261109_135_deep1の安全範囲を50本から作り次の学習率をステップ数に合わせる.md)

---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 120
---
# 依頼135:deep1 の実機推論の安全範囲を50本から作る・次の学習から学習率の下げ方をステップ数に合わせる

実機は動かさない。エイイチは見ていない。Log27。依頼133 の報告の「決めてほしいこと」1・2 へのエイイチの答え(2026-11-09)。

## 大事:いま回っている学習を止めない・触らない
依頼133 の本番(lab_train.sh pid 8808・Pod arn304g7xu5wfk・21:40 ごろ終わる見込み)が動いている。Pod・その lab_train.sh のプロセス・KIOXIA の lab/Log27/train/ には手を出さない。lab_train.sh は main の中身を始めに読んでいるので書き換えてよいが、lab_lib.sh・pi05/openpi_addon/ の変更がいまのプロセスに効かないことを確かめてから変える(効くおそれがあれば止めて報告)。

## やること
1. **安全範囲(決め1)**:lab_start.sh で --model deep1 のときは、安全範囲(関節範囲 ±10°)を作る --raw-dir を mecharm_redblock_box_deep_even10_v1 の raw_episodes にする。trim・corr・corr2・corr3 は今までどおり trim2 のまま。deep1 で作った範囲(各関節の下限・上限)を報告に、trim2 の範囲と並べて書く
2. **学習率の下げ方(決め2)**:次に回す学習から、decay_steps を num_train_steps と同じにする(warmup 300・peak 5e-5・decay_lr 5e-6 はそのまま)。対象は base から学習する deep1 の流れ(add_deep_config.py)。corr〜corr3 の続きの学習の設定は変えない
   - いま回っている 3,000 ステップの学習は decay_steps 5,000 のまま終わる。由来(train_provenance.json)や記録で、どちらの下げ方で学習したモデルかが分かるようにする(学習の設定の名前を分けるなど、やり方は任せる。ただし lab_start.sh --model deep1 で今回の 2999 を立てられること)
3. テスト:test_lab_start.sh・test_lab_train.sh・pi05/test_merge_and_config.py を通す。足すテスト:deep1 の --raw-dir が deep_even10_v1 になる・ほかのモデルは trim2 のまま・新しい学習では decay_steps がステップ数と同じになる・今回の 2999 も立てられる
4. codex で差分を見てもらう。指摘を直して通るまで
5. 変えたファイルだけを指定して git add・commit(git add . は使わない)

## 報告
claude_code_reports/20261109_135.txt に:1 の範囲の表(deep1 と trim2)、2 の変えた所と今回のモデルの扱い、テストの結果、codex の回数と指摘、commit の番号、いまの学習に影響がなかったことの確かめ(lab_train_*.txt の最後の行の時刻とステップ)、決めてほしいこと。
**報告の最後の1行は必ず次のどれか**:「判定:合格」/「判定:止めた(決めてほしいことあり)」/「判定:失敗」

依頼135 の報告(r2r2r-scripts/claude_code_reports/20261109_135.txt)

09_sec09.txt4,398字・69行・text
依頼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 のまま。
別のタブで開く保存

依頼135 の commit(6715f5e)の説明と変えたファイル

commit 6715f5ef63b11dda8f9dd33a8692b2aba3e0960f
Date: Mon Nov 9 17:58:08 2026 +0900

deep1 の実機推論の安全範囲 (run_policy_client.py --raw-dir) を mecharm_redblock_box_deep_even10_v1 の raw_episodes から作る (trim・corr〜corr3 は trim2 のまま・位置合わせのお手本はどれも trim2). 次の学習から decay_steps を num_train_steps と同じにする lab_train.sh --model deep1b を足す (add_deep_config.py --variant b・設定 pi05_mecharm_deep_even10_b_lora・exp deep_even10_v1_b・上げる先 PixelstoMotors/pi05-mecharm-deep-even10-b-lora-v1・Pod の /workspace/ckpt/deep_b_v1_2999. warmup 300・peak 5e-5・decay_lr 5e-6 はそのまま). 依頼 133 の deep1 (decay_steps 5000) は --variant v1 として残し, lab_start.sh --model deep1 で 2999 を立てられ, --stop で片付けられるが新しくは学習しない. 由来の config に lr_schedule (decay_steps・--variant) を残す (deep だけ). pod_prep_deep.sh は <steps> <variant> を取る. corr〜corr3 の設定は変えない. テストを足す (lab_train 240・lab_start 172・test_merge_and_config 34) (依頼 135. codex 1 回)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>


 lab_lib.sh                           | 56 ++++++++++++++++-------
 lab_start.sh                         | 20 ++++++---
 lab_train.sh                         | 35 +++++++++++----
 lab_train_fakes.sh                   |  8 ++--
 pi05/openpi_addon/add_deep_config.py | 86 ++++++++++++++++++++++++++----------
 pi05/openpi_addon/pod_prep_deep.sh   | 23 ++++++----
 pi05/test_merge_and_config.py        | 82 ++++++++++++++++++++++++++++++----
 test_lab_start.sh                    | 30 +++++++++++--
 test_lab_train.sh                    | 62 +++++++++++++++++---------
 9 files changed, 299 insertions(+), 103 deletions(-)

依頼135 の commit(6715f5e)の差分の全量

10_commit.txt65,348字・795行・diff
diff --git a/lab_lib.sh b/lab_lib.sh
index 6e1e082..33ebd5c 100644
--- a/lab_lib.sh
+++ b/lab_lib.sh
@@ -277,8 +277,12 @@ lab_cmd_addon() {           # 3f. 何度流しても同じ結果 (install_addon.
 # corr2 (依頼 57) は corr_v1_1499 から trim2_corr_v4 で続きを学習したもの (設定 pi05_mecharm_trim_corr_v4_lora)
 # corr3 (依頼 97) は corr_v2_1499 から trim2_corr_v5 で続きを学習したもの (設定 pi05_mecharm_trim_corr_v5_lora)
 # deep1 (依頼 133) は π0.5 base から deep_even10_v1 (位置 1〜5 を各 10 本) で新しく学習したもの (設定 pi05_mecharm_deep_even10_lora.
別のタブで開く保存

依頼137:写り方の確かめの基準画像を trim2 にそろえた

依頼137 の依頼文(依頼箱/済み/20261109_137_deep1の写り方の確かめの基準をtrim2にそろえる.md)

---
作業フォルダ: /Users/shimazueiichi/r2r2r-scripts
上限時間: 60
---
# 依頼137:deep1・deep1b の写り方の確かめの基準画像を trim2 にそろえる

実機は動かさない。エイイチは見ていない。Log27。依頼135 の報告の「決めてほしいこと」へのエイイチの答え(2026-11-09)。

## エイイチの決め
- 3:写り方の確かめの基準画像は、位置合わせ(camera_align.py)と同じ trim2 にそろえる。安全範囲は依頼135 のとおり deep_even10_v1 のまま
- 1:新しいモデルの名前は deep1b のままでよい
- 2:j2 の上限 +52.5° はこのままでよい(初回の実機で目で見る)

## 大事:いま回っている学習を止めない・触らない
依頼133 の本番(lab_train.sh pid 8808・21:45 ごろ学習が終わり、そのあと持ち帰りと Pod の削除)が動いている。Pod・そのプロセス・KIOXIA の lab/Log27/train/ には手を出さない。lab_train.sh・lab_lib.sh・provenance.py は変えない(lab_start.sh・run_policy_client.py 側で足りるはず。足りなければ止めて報告)。

## やること
1. run_policy_client.py の写り方の確かめの基準画像を、安全範囲の --raw-dir とは別に指定できるようにする(例 --framing-raw-dir。指定がなければ今までどおり --raw-dir から)
2. lab_start.sh:deep1・deep1b では基準画像を trim2 のお手本から取る(安全範囲は deep_even10_v1 のまま)。ほかのモデルは今までどおり。起動時の [RANGE ] の行の近くに、基準画像をどこから取ったかを1行出す
3. テスト(test_lab_start.sh ほか関係するもの)を足して通す:deep1・deep1b で安全範囲は deep・基準画像は trim2・ほかのモデルは今までどおり
4. codex で差分を見てもらう。指摘を直して通るまで
5. 変えたファイルだけを指定して git add・commit(git add . は使わない)

## 報告
claude_code_reports/20261109_137.txt に:変えた所、テストの結果、codex の回数と指摘、commit の番号、いまの学習に影響がなかったことの確かめ(lab_train_*.txt の最後の行)、決めてほしいこと。
**報告の最後の1行は必ず次のどれか**:「判定:合格」/「判定:止めた(決めてほしいことあり)」/「判定:失敗」

依頼137 の報告(r2r2r-scripts/claude_code_reports/20261109_137.txt)

依頼137 報告:deep1・deep1b の写り方の確かめの基準画像を trim2 にそろえる (2026-11-09)

実機は動かしていない。Pod・lab_train.sh pid 8808・KIOXIA の lab/Log27/train/ には触っていない。
lab_train.sh・lab_lib.sh・provenance.py は変えていない (lab_start.sh と run_policy_client.py 側で足りた)。

■ 1. 変えた所
- pi05/run_policy_client.py
  --framing-raw-dir を足した。写り方の確かめの基準画像 (load_reference. 最初のエピソードの 1 枚目) はここから取る。
  指定がなければ今までどおり --raw-dir から。安全範囲 (load_envelope) は --raw-dir のまま。
  log.jsonl の頭 (type=model) に framing_raw_dir を残す (基準画像のパスは今までどおり type=framing の reference にも残る)。
- lab_start.sh
  run_policy_client.py に --framing-raw-dir "$RAW" (位置合わせと同じ trim2 の raw_episodes) を渡す (--execute・--dry-keys の両方)。
  deep1・deep1b:安全範囲 deep_even10_v1・基準画像 trim2。
  trim・corr〜corr3:安全範囲・基準画像とも trim2 (今まで --raw-dir から取っていた基準画像と同じフォルダ。動きは変わらない。
  引数の見た目に --framing-raw-dir が 1 つ増えるだけ)。
  起動時の [RANGE ] の行の次に「[FRAME ] 写り方の確かめの基準画像は <trim2 の raw_episodes> の最初のエピソードから (位置合わせと同じ trim2. 依頼 137)」を出す。
  頭の説明の文も合わせた。
- test_lab_start.sh:trim・corr3・deep1・deep1b で、--framing-raw-dir が trim2・[FRAME ] の行が出る・deep1/deep1b の --raw-dir は deep のまま
  (trim2 を --raw-dir に渡さない・deep を --framing-raw-dir に渡さない) を確かめる行を足した。
  deep1 の前からの行「! has py.log teach_v1_trim2」は、基準画像で trim2 が出るようになったので「--raw-dir に trim2 を渡さない」に直した。
- pi05/test_framing_raw_dir.py (新規):main を load_reference まで流し、指定ありなら基準画像は --framing-raw-dir・安全範囲は --raw-dir、
  指定なしなら両方 --raw-dir、log.jsonl の頭に framing_raw_dir が残ることを確かめる (アーム・カメラ・サーバーには触らない)。
- pi05/test_rewind_correct.py:git HEAD の版と比べるテストで、新しく増えた framing_raw_dir を比べる対象から外した (項目が増えるだけを許す既存の仕組みに 1 つ足した)。

■ 2. テストの結果
- test_lab_start.sh:OK 176 / NG 0 (前回 172 → 4 行増)
- pi05/test_framing_raw_dir.py:2 件 OK
- pi05/test_rewind_correct.py:69 件 OK (直す前は test_unchanged_without_b_c が framing_raw_dir の増加で 1 件落ちた → 上のとおり直して通った)
- run_policy_client を読み込むほかのテスト:test_pad_correction 4・test_pad_build 3・test_recorder_rpc 4・test_recorder_currents 15・test_teach_currents すべて OK

■ 3. codex
1 回。指摘なし (安全範囲は --raw-dir、基準画像だけ --framing-raw-dir、未指定時の互換性、deep1・deep1b とほかのモデルの設定、[FRAME ] の表示、
変更禁止の 3 ファイルが差分にないこと、テストに重大な抜けがないことを確認したとの答え)。

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

■ 5. いまの学習に影響がなかったことの確かめ
- 変えたのは lab_start.sh・run_policy_client.py とテストだけ。lab_train.sh・lab_lib.sh・provenance.py・pi05/openpi_addon は触っていない。
- pid 8808 (./lab_train.sh --log Log27 --model deep1 --steps 3000 --limit-hours 7) は動いている。
  lab_train_20261109_153622.txt の最後の行:
  [TRAIN ] 21:17  step 2780/3000  loss 0.0041 (Step 2750 の行)  経過 5:33  上限まで 1:18

■ 決めてほしいこと
なし

判定:合格

依頼137 の commit(3310ac0)の説明と変えたファイル

commit 3310ac0aed7fe95dcb6f94b67d217b97ecb04541
Date: Mon Nov 9 21:20:30 2026 +0900

実機推論の写り方の確かめの基準画像を安全範囲の --raw-dir と別に指定できる run_policy_client.py --framing-raw-dir を足す (未指定なら今までどおり --raw-dir. log.jsonl の頭に framing_raw_dir を残す). lab_start.sh はどのモデルでも位置合わせ (camera_align.py) と同じ trim2 の raw_episodes を渡し, deep1・deep1b の基準画像も trim2 にそろえる (安全範囲は deep_even10_v1 のまま. trim・corr〜corr3 は今までどおり trim2). 起動時に [FRAME ] で基準画像の取り先を出す. テストを足す (lab_start 176・test_framing_raw_dir 2・test_rewind_correct は新しい項目を比べる対象から外す) (依頼 137. codex 1 回)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>


 lab_start.sh                 |  8 ++--
 pi05/run_policy_client.py    | 11 +++++-
 pi05/test_framing_raw_dir.py | 91 ++++++++++++++++++++++++++++++++++++++++++++
 pi05/test_rewind_correct.py  |  2 +-
 test_lab_start.sh            |  6 ++-
 5 files changed, 112 insertions(+), 6 deletions(-)

依頼137 の commit(3310ac0)の差分の全量

11_commit.txt15,855字・228行・diff
diff --git a/lab_start.sh b/lab_start.sh
index 5fe03d2..8c18032 100755
--- a/lab_start.sh
+++ b/lab_start.sh
@@ -23,7 +23,8 @@
 #              取る場所・設定・assets・サーバーの起動・つなぎ直しの確かめが選んだモデルに合う. 安全範囲 (学習データ ±10°.
 #              run_policy_client.py --raw-dir) は, deep1・deep1b は deep_even10_v1 の raw_episodes (依頼 135), ほかは trim2 の
 #              raw_episodes (corr_v3・corr_v4 と合わせても範囲はほぼ同じで, trim2 の方が狭い. corr_v5 は 11-06 の 184650 の j2 が
別のタブで開く保存

依頼137 のあとの、base から学習する2つのファイルの全体

学習の設定を openpi に足すコード(r2r2r-scripts/pi05/openpi_addon/add_deep_config.py)

12_sec11.py.txt5,597字・118行・python
#!/usr/bin/env python3
"""openpi config.py に deep_even10_v1 (位置 1〜5 を各 10 本にそろえた 50 本) 用の学習設定を足す
(2026-11-09 依頼 133. lab_train.sh --model deep1. 依頼 135 で --variant b (lab_train.sh --model deep1b) を足した).

π0.5 base から新しく学習する (続きの学習ではない). 中身は trim の pi05_mecharm_trim_lora と同じ LoRA・batch 32・
学習率の予定 (warmup 300 / peak 5e-5 / decay_lr 5e-6)・weight_loader (π0.5 base) で, 次の所だけ変える
(add_trim_config.py と同じ方式):
  name             pi05_mecharm_trim_lora                     -> --variant v1: pi05_mecharm_deep_even10_lora
別のタブで開く保存

Pod でデータを変換し正規化の値を測り直すスクリプト(r2r2r-scripts/pi05/openpi_addon/pod_prep_deep.sh)

13_sec11.sh.txt3,633字・74行・bash
#!/usr/bin/env bash
# pod_prep_deep.sh — Pod で deep_even10_v1 (位置 1〜5 を各 10 本にそろえた 50 本) の学習の準備をする (2026-11-09 依頼 133).
# 学習は回さない. lab_train.sh --model deep1b (依頼 135) の 4b が呼ぶ (deep1 は依頼 133 で呼んだ形).
#
# 前提: lab_train.sh 3a〜3f で Pod を準備してある (openpi・install_addon.py・add_trim_config.py). 続きの元のモデルは取らない
#       (π0.5 base から. 重みは学習の最初に openpi が gs://openpi-assets から取る)
#       Mac から次の 2 つを送ってある:
#         /workspace/data/mecharm_redblock_box_deep_even10_v1_raw_episodes.tar
別のタブで開く保存