Newer
Older
TIASJudgeModel / docs / 02_ENV / ENV_04_開発コマンド.md

開発コマンド (Development Commands)

日常の開発で使うコマンドの一覧.コマンドを推測せず必ず本ファイルを参照する(新しく確定・変更された時は本ファイルに反映する).

※ Git Bash ではログの日本語が文字化けする.先頭に PYTHONIOENCODING=utf-8 を付けると正しく表示される.

環境 (Environment)

目的コマンド備考
依存の同期uv sync初回・pyproject.toml 変更後.手元には CPU 版 PyTorch が入る
依存の追加uv add <パッケージ>uv.lock が更新されるのでコミットする
開発用依存の追加uv add --dev <パッケージ>pytest・ruff 等
Python の実行uv run python <スクリプト>仮想環境を明示的に有効化しなくてよい

データ (Data)

目的コマンド備考
合成データの生成uv run python scripts/make_synthetic_dataset.py出力は data/synthetic/(images/<label>_<severity>/ と manifest.csv).既定は 1 ディレクトリ 10 枚・seed 0
合成データの作り直しuv run python scripts/make_synthetic_dataset.py --overwrite目印ファイル .synthetic_dataset がある出力先だけを削除して作り直す(実データの誤削除を防ぐため)
枚数・seed の指定uv run python scripts/make_synthetic_dataset.py --per-dir 50 --seed 1出力先は --out で変更できる
manifest の生成uv run tias-dataset build-manifest --config <設定>images/ を走査して manifest.csv を書く.既存があれば --overwrite が必要
データセットの集計uv run tias-dataset survey --config <設定>runs/<実験ID>/ に集計値だけを書く.最後に実験 ID を出力する(SPEC_01「データセット集計の出力」)

実データ(サーバ上)での実行例(GPU を使わないので --cpu):

uv run tias-remote run --name manifest --cpu --server Newton -- tias-dataset build-manifest --config configs/newton.yaml
uv run tias-remote run --name survey --cpu --server Newton -- tias-dataset survey --config configs/newton.yaml
uv run tias-remote logs survey          # 最後の行に実験 ID が出る
uv run tias-remote pull <実験ID>          # 集計値と図だけが手元の runs/ に届く

設定ファイルは configs/synthetic.yaml(手元の合成データ)と configs/newton.yaml(サーバの実データ).環境変数 TIAS_DATA_ROOT を設定すると data.root より優先される.

リモート実行 (Remote Execution)

研究室の GPU サーバ(Newton・Archimedes)で計算するときは tias-remote を使う.コマンドはすべて手元で実行する.空いている GPU を両サーバから自動で選ぶ(未使用の GPU を最優先.仕様は SPEC_03).サーバ設定は configs/remote.yaml.

目的コマンド
GPU の状況と run が選ぶ GPUuv run tias-remote gpus
実行中ジョブと GPU の状況uv run tias-remote status
コードを送る(全サーバ)uv run tias-remote push
送る一覧だけ見るuv run tias-remote push --dry-run
ジョブを起動(GPU 自動選択)uv run tias-remote run --name exp1 -- python scripts/xxx.py
GPU を指定して起動uv run tias-remote run --name exp2 --server Newton --gpu 1 -- python ...
選ばれる GPU だけ確かめるuv run tias-remote run --name exp1 --dry-run -- python ...
GPU を使わないジョブuv run tias-remote run --name job --cpu [--server Newton] -- ...(GPU の空きを待たない.CUDA_VISIBLE_DEVICES は空)
ログの末尾・追従uv run tias-remote logs exp1・uv run tias-remote logs exp1 -f
ジョブを止めるuv run tias-remote kill exp1
実験結果を持ち帰るuv run tias-remote pull <実験ID>(重みも要るときは --with-checkpoints)
  • gpus・run・status は GPU を 10 秒観測してから判定するため,1 回に 13 秒ほどかかる.急ぐときは --observe 0(瞬間値のみ.約 2 秒.gpus・run のみ)
  • run は起動前に選んだサーバへ自動でコードを送る(--no-push で省略).ジョブには CUDA_VISIBLE_DEVICES・TIAS_DATA_ROOT(そのサーバのデータの場所)が渡る
  • pull は回収ホワイトリストに名前が一致するファイルだけを runs/<実験ID>/ に持ち帰る.回収しなかったファイルは件数だけ表示される
  • ジョブログはサーバ上の runs/_remote_logs/<ジョブ名>.log.末尾に === [日時] exit <終了コード> の行が付く
  • 研究室 LAN 内にいるときは踏み台が不要なので,環境変数 TIAS_REMOTE_JUMP を空文字にすると速い(Git Bash: TIAS_REMOTE_JUMP= uv run tias-remote gpus.PowerShell: $env:TIAS_REMOTE_JUMP = "")
  • ジョブの実行中に同じサーバへ push しない(上書き展開なので,実行中のジョブが新旧のコードを混ぜて読むおそれがある.実行中なら警告が出る)
  • 各サブコマンドの詳細は uv run tias-remote <サブコマンド> --help

学習・交差検証 (Training)

目的コマンド備考
5-fold 交差検証uv run tias-train cv --config <設定>学習・評価して runs/<実験ID>/ に書き出す.最後に実験 ID を出力する(SPEC_02「交差検証の実行」)
手元での試運転uv run tias-train cv --config configs/cv_synthetic.yaml合成データ・小さなモデル・事前学習なし.CPU で十数秒

設定ファイル:

設定内容
configs/cv_with_mild.yaml・configs/cv_without_mild.yamlConvNeXt-Tiny・ややあり込み/除外(サーバの実データ)
configs/cv_<effb0 \| resnet50 \| vits>_<with_mild \| without_mild>.yamlモデル比較用(モデル名以外は上と同一)
configs/repeat/*_s43.yaml・*_s44.yaml分割 seed を変えた繰り返し(seed 以外は元の設定と同一)

サーバでの実行例:

# 1 本だけ(空いている GPU を自動で選ぶ)
uv run tias-remote run --name cv1 -- tias-train cv --config configs/cv_with_mild.yaml

# 複数本を同じ GPU で順に回す(キュー).; で区切るので 1 本が失敗しても次へ進む
uv run tias-remote run --name q1 --server Archimedes --gpu 1 -- bash -c "tias-train cv --config configs/cv_with_mild.yaml; tias-train cv --config configs/cv_effb0_with_mild.yaml;"

uv run tias-remote logs q1              # 各実験の最後の行に実験 ID が出る
uv run tias-remote pull <実験ID>         # 指標・図・ログだけが手元の runs/ に届く
  • ConvNeXt-Tiny の 5-fold 交差検証 1 本は Archimedes の RTX A6000 で約 2.5 分(2026-09-28 実測.画像の読み込み約 8 秒を含む)
  • 事前学習の重みは初回にサーバが Hugging Face からダウンロードする(~/.cache/huggingface)
  • ログに出る lr_scheduler.step() before optimizer.step() の警告は,混合精度で最初の数ステップの勾配がオーバーフローして捨てられたときに出るもので無害

テスト (Test)

目的コマンド
全テストuv run pytest
特定ファイルuv run pytest tests/data/test_split.py
詳細表示uv run pytest -v

臨床データに依存するテストは書かない(合成データで動くテストのみ).

Lint / Format

目的コマンド
Lintuv run ruff check .
Lint(自動修正)uv run ruff check --fix .
Formatuv run ruff format .

※ .claude/ はテンプレート所有のため ruff の対象外(pyproject.toml の extend-exclude).テンプレート由来のフックのテストは uv run pytest .claude/hooks/tests で実行する.

フック (Hooks)

目的コマンド備考
フックのテストbash .claude/hooks/tests/test_hooks.py 相当を uv run pytest .claude/hooks/testsテンプレート由来..claude/ の変更時に確認する