Newer
Older
TIASJudgeModel / docs / 02_ENV / ENV_03_管理者用環境構築手順.md

管理者用環境構築手順 (Administrator Setup)

プロジェクト作成時に 一度だけ 行う初期設定.

GitHub リポジトリの作成 (Repository Creation)

private リポジトリとして作成する(臨床データは含めないが,研究途中のコードを公開しないため).

gh repo create rintoHasegawa/TIASJudgeModel --private --source=. --remote=origin \
  --description "舌画像から舌色 5 分類を推定する機械学習モデル(TIASjudge 用)"

リポジトリのセキュリティ設定 (Repository Security Settings)

Dependabot alerts(脆弱性検出)と Dependabot security updates はリポジトリごとに既定で OFF なので,作成直後に有効化する(冪等なので再実行してよい).

gh api -X PUT repos/rintoHasegawa/TIASJudgeModel/vulnerability-alerts
gh api -X PUT repos/rintoHasegawa/TIASJudgeModel/automated-security-fixes

検証:

gh api repos/rintoHasegawa/TIASJudgeModel/vulnerability-alerts       # 204 なら有効(404 なら無効)
gh api repos/rintoHasegawa/TIASJudgeModel/automated-security-fixes   # {"enabled":true,...} なら有効

※ 依存バージョンの定期更新は .github/dependabot.yml で設定する(別物.リポジトリ設定とは独立に動く).

Newton 側の初期設定 (Server Setup)

mkdir -p ~/work/TIASJudgeModel        # コード置き場(push で上書きされる)
mkdir -p ~/data/TIASJudgeModel        # データ置き場(push の対象外)
chmod 700 ~/data/TIASJudgeModel       # 共用サーバなので自分だけに絞る

コードを初回送信したあと,サーバ上で以下を確認する.

cd ~/work/TIASJudgeModel
uv sync
uv run python -c "import torch; print(torch.cuda.is_available(), torch.cuda.device_count())"

uv sync は CUDA 版 PyTorch が入るため時間がかかる.True と GPU 台数が出ることを確認する.False の場合は ENV_01「CPU / GPU の依存差」に従う.

臨床データの初回コピー (Initial Data Copy)

原本は研究室 PC に置き,研究室 LAN 内で Newton へ一度だけコピーする.手元 PC を経由させない.

原本の置き場所 (Source Location)

C:\Users\Papin\clinical-data\TIASJudgeModel\

ラベルごとの 9 フォルダに PNG が直置きされている(内訳は TEST_01 データセット構成調査).

⚠ 研究室 PC では「ドキュメント」フォルダが OneDrive(OneDrive - 千葉大学)にリダイレクトされている.臨床データをドキュメント・デスクトップ配下に置くとクラウドへ同期されるため置かない.上記のプロファイル直下の独自フォルダは同期対象外である.

フォルダ名の対応 (Folder Mapping)

日本語フォルダ名をそのまま転送すると Windows(CP932)と Linux(UTF-8)の文字コード差で名前が壊れるため,ASCII のスラッグ名に対応付けてコピーする.

研究室 PC のフォルダサーバ上のディレクトリ
淡紅(正常)images/light_red_normal
暗赤紅_ありimages/dark_red_strong
暗赤紅_ややありimages/dark_red_mild
紫_ありimages/purple_strong
紫_ややありimages/purple_mild
紅_ありimages/red_strong
紅_ややありimages/red_mild
淡白_ありimages/pale_strong
淡白_ややありimages/pale_mild

研究室 PC から Newton への鍵設定 (Key Setup)

研究室 PC から Newton へ非対話で転送するため,研究室 PC 専用の鍵を作って Newton に登録する(2026-09-27 に実施済み).

  • 研究室 PC の鍵: C:\Users\Papin\.ssh\id_ed25519_newton(パスフレーズなし.コメントは papin-DESKTOP-1QLOO91-to-Newton-TIASJudgeModel)
  • Newton 側: 上記の公開鍵を ~/.ssh/authorized_keys に追記済み
  • 初回接続時は Newton のホスト鍵を受け入れる必要がある(-o StrictHostKeyChecking=accept-new)

※ Windows の OpenSSH サーバーは SSH エージェント転送に対応していないため,手元の鍵を研究室 PC 経由で使い回すことはできない(専用鍵が必要になる理由).

手順 (Procedure)

  1. 研究室 PC で作業する(hostname で研究室 PC であることを確かめてから実行する)

  2. PowerShell で以下を実行する(対応表どおりに 9 フォルダを転送する)

    $key   = "$env:USERPROFILE\.ssh\id_ed25519_newton"
    $root  = "C:\Users\Papin\clinical-data\TIASJudgeModel"
    $rhost = "hasegawa@192.168.23.14"
    $map = [ordered]@{
      "淡紅(正常)"     = "light_red_normal"
      "暗赤紅_あり"     = "dark_red_strong"
      "暗赤紅_ややあり" = "dark_red_mild"
      "紫_あり"         = "purple_strong"
      "紫_ややあり"     = "purple_mild"
      "紅_あり"         = "red_strong"
      "紅_ややあり"     = "red_mild"
      "淡白_あり"       = "pale_strong"
      "淡白_ややあり"   = "pale_mild"
    }
    foreach ($k in $map.Keys) {
      $slug = $map[$k]
      ssh -i $key $rhost "mkdir -p ~/data/TIASJudgeModel/images/$slug"
      $files = @(Get-ChildItem -LiteralPath (Join-Path $root $k) -File -Filter *.png)
      for ($i = 0; $i -lt $files.Count; $i += 100) {
        $chunk = $files[$i..([Math]::Min($i+99, $files.Count-1))] | ForEach-Object { $_.FullName }
        scp -i $key -q @chunk ($rhost + ":~/data/TIASJudgeModel/images/" + $slug + "/")
      }
    }
    

    ※ scp "...\*.png" のようにワイルドカードを渡す方式は使わない(PowerShell はネイティブコマンドの引数を展開しないため).ファイル一覧を列挙して 100 件ずつ渡す(コマンドライン長の上限を避けるため).

  3. コピー後に件数を突き合わせる

    (Get-ChildItem -LiteralPath $src -Recurse -File).Count   # 研究室 PC 側(1085 の見込み)
    ssh hasegawa@192.168.23.14 "find ~/data/TIASJudgeModel/images -type f | wc -l"
    
  4. 原本は研究室 PC に残す(Newton 側は作業用コピー)

実施記録 (Completion Record)

2026-09-27 に上記手順で転送完了.Newton 側 ~/data/TIASJudgeModel/images/ に 9 ディレクトリ・1085 ファイル(443 MB).研究室 PC 側の件数と完全一致し,非 PNG は 0 件.ディレクトリ権限は drwx------.転送は研究室 PC → Newton の直送であり,手元 PC は制御コマンドのみを送っている(画像は手元を通っていない).

以降は再転送しない.データセットの内容確認(枚数・クラス分布・破損チェック)はサーバ上のコマンドで行い,集計結果のみを手元で見る.

※ 研究室 PC から Newton への鍵が未登録の場合はパスワードを求められる.

学外アクセス用の踏み台 (Off-campus Access)

研究室 PC を ProxyJump の踏み台にする設定は SmTIAS-LightSim で構築済みのため,本プロジェクトでの追加作業は不要(未設定の場合は同プロジェクトの docs/02_ENV/ENV_02_環境構築手順.md「学外から接続する(研究室 PC 経由)」に従う).

人間が確認すべき事項 (Human Checklist)

Claude は実施できない.着手前に確認する.

  • 臨床データの倫理審査・データ利用許諾の範囲(機械学習での二次利用が含まれるか)
  • データを研究室の共用計算サーバに置くことが規程上許容されるか
  • 研究室 PC で SSH サーバを動かすことが研究室のルールに照らして問題ないか