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—
舌のセグメンテーションonnxruntime・opencv-python-headlessDeepTIAS 2.7 の検出モデル(ONNX に変換)と ResUNet(ONNX)を CPU で推論し,大津の 2 値化・連結成分などの後処理を行う(SPEC_04).開発用の依存に onnx(テスト用のダミーモデルの生成).検出モデルの変換だけは TensorFlow・tf2onnx を一時的に使う(本体の依存に入れない)
評価指標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)

Linux(両サーバ)は PyTorch 公式の CUDA 12.6 版(cu126),Windows(手元)は PyPI の CPU 版を使う.pyproject.toml の [tool.uv.sources] で,torch・torchvision の取得元を sys_platform == 'linux' のときだけ cu126 インデックスに向けている.

  • 経緯: 当初は PyPI の wheel をそのまま使い,Linux では CUDA 13 版(cu130)が入っていた.Newton(ドライバ 595・CUDA 13.2 対応)では動いたが,Archimedes はドライバ 535(CUDA 12.2 まで)のため cu130 版では GPU が使えなかった(2026-09-27 に判明)
  • cu126 版は CUDA のマイナーバージョン互換により 12.2 のドライバでも動く.Archimedes で行列積・畳み込みの逆伝播まで,Newton でも CUDA の動作を確認した(torch は 2.14.0 のまま)
  • 両サーバで同じ torch ビルドになるため,どちらのサーバで学習しても条件がそろう
  • 将来 torchttps://download.pytorch.org/whl/cu126/torch/`)と,Archimedes のドライバ(535)で動くかを確認する

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

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

未確定事項 (Open Items)

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