Newer
Older
TIASJudgeModel / docs / 02_ENV / ENV_01_技術スタック.md

技術スタック (Tech Stack)

概要 (Overview)

舌領域セグメンテーション済み画像から舌色 5 分類を推定するモデルを,手元の Windows で実装し,研究室の GPU サーバで学習する.臨床データは手元 PC に置かないため,手元は合成データでの実装確認のみとし,実データを触るコードはすべてサーバ上で動かす.

言語・実行環境 (Language & Runtime)

項目採用備考
言語PythonTIASjudge・SmTIAS-LightSim と揃える
Python バージョン3.12(.python-version で固定)既存 2 プロジェクトと同一.サーバにも導入済み
パッケージマネージャuv(Astral 製)既存プロジェクトと同じ.uv.lock をコミットして再現性を担保する
手元 OSWindows 11実装・合成データでの動作確認のみ(GPU なし)
学習環境研究室 GPU サーバ(Ubuntu 22.04・RTX A6000)uv・Python 3.12 導入済み

機械学習フレームワーク (ML Framework)

項目採用備考
学習フレームワークPyTorch 2.x研究用途の標準.事前学習モデルの入手性が高い
モデルtimm(PyTorch Image Models)ConvNeXt・EfficientNet・ViT 等を設定 1 行で差し替えて比較できる
学習ループ自前で記述(Lightning 等の高水準ラッパは使わない)患者単位分割・クラス不均衡対策を明示的に制御したいため.規模が小さく抽象化の利得が薄い
データ拡張torchvision.transforms.v2依存を増やさない.足りなければ albumentations を後から追加する

※ 具体的なモデル(ConvNeXt-Tiny 等)・入力解像度・学習設定は仕様設計フェーズ(SPEC_01)で決める.本ファイルでは土台のみ確定する.

データ処理・評価 (Data Processing & Evaluation)

項目採用備考
画像 IOPillow学習時の読み込み.軽量
数値計算NumPy—
評価指標scikit-learn混同行列・macro F1・クラス別 recall・患者単位の層化分割
図の出力matplotlib学習曲線・混同行列を PNG で出力する(サーバ上で描画し,画像ファイルだけ回収する)
ルールベース比較TIASjudge の core/ ロジックを移植または参照ベースライン算出用.OpenCV が必要になった場合はサーバに GUI が無いため opencv-python-headless を使う

設定と実験記録 (Configuration & Experiment Tracking)

項目採用備考
設定ファイルYAML + pydantic(スキーマ検証)SmTIAS-LightSim と同じ流儀.configs/*.yaml に実験条件を置く
実験記録軽量自作(外部サービスを使わない)runs/<実験ID>/ に config.yaml・metrics.json・history.csv・confusion_matrix.png・チェックポイントを書き出す
手元への回収指標・図・ログのみ(画像・ラベルは回収しない)個人情報を含む可能性のあるものを持ち帰らないため

採用理由: 依存が増えず,外部送信がゼロで,臨床データ由来の情報の流出経路を作らない.実験の比較はファイルを並べるだけで足りる規模である.

リモート実行 (Remote Execution)

項目採用備考
リモート実行ツール自作 CLI(SmTIAS-LightSim の sm-remote を移植)コード送信・ジョブ実行・結果回収・GPU 空き確認
転送方式tar over sshWindows に rsync が無いため(LightSim と同じ判断)
実行サーバ上の tmux 内で uv run接続が切れても学習が続く
SSHWindows 標準 OpenSSH学外からは研究室 PC を ProxyJump の踏み台にする
データサーバ常設(コードのみ毎回転送)一度だけコピーし,以降は再転送しない
認証情報サーバに GitHub の認証情報を置かないコードは常に手元から送る

開発ツール (Development Tools)

項目採用備考
テストpytest合成データで動くテストのみ(臨床データに依存するテストは書かない)
lint / formatruffPython の標準的な選択.規約は規約整備フェーズで定める
CI使わないローカルで pytest・ruff を回す.必要になれば後から GitHub Actions を追加する
依存更新Dependabot(uv エコシステム)週 1 回.CI が無いので更新 PR はローカル検証で確認する

CPU / GPU の依存差 (CPU / GPU Dependencies)

torch を PyPI からそのまま依存に入れると,Linux では CUDA 付きの wheel,Windows では CPU 版の wheel が選ばれるため,同一の pyproject.toml で「手元 = CPU,サーバ = GPU」が成立する見込みである.

  • サーバでの初回 uv sync 後に torch.cuda.is_available() が True になることを確認する(環境構築手順に含める)
  • 想定どおりにならない場合は PyTorch 公式インデックスを [tool.uv.sources] で指定する方式に切り替える

採用しなかった選択肢 (Rejected Alternatives)

候補却下理由
Weights & Biases学習指標を外部サービスへ送信する.臨床データを扱う研究では審査・規約との整合確認が必要で,得られる利便性に対して手続きの負担が大きい
MLflowサーバでサービスを立ててポート転送で見る運用コストが,本プロジェクトの実験数に対して過大
torchvision のみ事前学習モデルの選択肢が狭く,「どの系統のモデルが向くか」の比較がしにくい
PyTorch Lightning・Keras 等の高水準ラッパ患者単位分割・クラス不均衡対策を明示的に制御したい.学習ループが小さいため抽象化の利得が薄い
GitHub Actions での CI現時点では 1 人開発でローカル実行で足りる.データを使うテストは CI で回せない

未確定事項 (Open Items)

  • モデルアーキテクチャ・入力解像度・学習設定(仕様設計フェーズで決定)
  • サーバ上のデータ配置パスとディレクトリ構成(環境構築フェーズで決定)
  • TIASjudge のルールベース診断を「移植」するか「別リポジトリを参照」するか(ベースライン実装時に決定)
  • 学習済みモデルの配布形式(ONNX 等.モデルの見込みが立ってから決定)