AIタスク #11676
未完了[Ryzen AI] WorkOSリース付き原子的モデル起動・PID引継ぎ・全経路統合
0%
説明
親タスク: #11675
背景: 2026-10-28にRyzen AIの既存NPU E4B/GPU Ornith9B稼働PIDをAgent Work OS ResourceLockManagerへ1分周期で登録しTTL=180秒で更新済み。NPU/GPU競合起動拒否とLegacy Gateway直停止/切替のfail-closedを適用した。
未完了: 任意の新規モデル起動について、Work OS lease取得→起動→PID/モデル実体にowner bind→renew→検証→解放を単一の実行契約で完走する仕組み。現状はプロセスの事後占有同期であり、任意のraw Windowsシェル直起動は防げない。旧Gateway runtime_start/stop/switch/tuneは安全のため拒否中。
受入:
- environment:ryzen-ai:npu / environment:ryzen-ai:gpu のowner/run_id・TTLをWorkOS SSOTとして管理し、プロセス実体と署名/ハッシュ照合する。
- 起動前に排他leaseを原子的に獲得。起動中renew/timeout、成功時PIDへのowner bindをギャップなく引継ぎ。別モデルlease保持時は変更も停止も実行しない。
- 既存Windows Lifecycle、OrnithToolRouter、FLM scheduled tasks、Gateway、OpenDotsの全既知起動経路を統一したguarded runnerへ寄せ、直接ランタイムを操作するlegacyコードは残存禁止。
- NPUとGPUは独立レーン。モデルの正本は実測PID/API/File SHA256。登録設定が古くても意図を勝手に書換えない。
- 異常時復旧・manual kill再起動・レース・PID再利用・二重起動・SSH/API不達・タイマー欠落のE2E/ロールバック検証。
- 推論の既存PIDを維持しながらリリース。tool call成功率、起動遅延、モデル切替、安全停止を測定。
既存コード: VPS /root/projects/ryzen-model-leases (commit df89341) / Agent Control TowerのResourceLockManager。MN55 /home/ito/services/fleet-observer/model_lease_occupancy.py。Windows controller.py、guarded task wrapper。Gateway source commits 3bd0a0f・a101549 (blue/green hot-reload済)。
Redmine Admin さんが11日前に更新
2026-10-28 Ryzen lease cold path progress: existing Work OS ResourceLockManager facade /root/projects/ryzen-model-leases に model-lease reserve npu|gpu と model-lease handoff npu|gpu を追加。BEGIN IMMEDIATEの1 transactionでowner_run_id/task_ref/expires_atを原子的に引継ぎ、リースが空になる瞬間をなくした。予約以外からのhandoff・別owner・同一owner・失効/解放済み等は拒否。10/10単体テスト成功、Git f5693c6。現行モデルNPU E4B/GPU Ornith9Bのリースは両方稼働中、inspectでtask_ref=ryzen-ai-model-を確認済み。実モデル停止・切替は一切していない。未完: Windows controller.py /control/start、on-demand起動、タスクスケジューラ等の全起動経路に対する予約検証強制、PID/起動時刻/モデルハッシュ検証後のhandoff runner、電源断/SSH断/プロセス競合の実E2E。従来のGateway direct stop/start/switch/tuneはfail-closedを継続すべき。現行の元モデルを停止してまで試験することは禁止(別の計画・安全なアイドルレーンで検証)。
Redmine Admin さんが10日前に更新
2026-10-28 15:06 JST M1 非破壊実装・実機再照合(本番未反映)
- MN55モデル台帳の読み取り専用照合をステージングに追加。Git /home/ito/staging/ai-swarm-m1m2-20261028-1443 branch feature/m1-m2-preflight-20261028 commit ff615462148af4af07ecb92e060ff390db3a83a1。fleet_contract.py、fleet_live_probe.py、atomic_start_contract.py。既存テストを含む MN55 121/121 PASS。
- 2026-10-28 14:53 JSTスナップショット: B550 queue active、モデルlease off=正常IDLE。Registry 15件中、登録パスで存在未確認: llmjp4 / q35_9 / q36_35 / sarashina。Ryzen NPU Gemma4 E4B PID15644・GPU Ornith9B PID7084はWork OS owner占有と一致。Gateway configured35Bとobserved9Bの差分は維持(自動切替禁止)。
- VPS既存 /root/projects/ryzen-model-leases(Work OS SQLite ResourceLockManagerのreserve/handoff)を再利用し、VPS隔離worktree /root/projects/staging/ryzen-model-leases-m1-20261028、branch feature/m1-b550-multigpu-20261028、commit b054e5c3ef52658a49ff61ec525944e7ac7590ab にB550 GPU0/GPU1/dualのBEGIN IMMEDIATE原子的reserve/renew/handoff/releaseを実装。新規11件+既存Ryzen10件=21/21テスト合格(temp SQLiteのみ、本番DB書込なし)。
- Windows Scheduled Tasksとcontroller.pyの起動経路を読取確認。guarded-task-start.ps1、flm-autostart.ps1、GPTOSS guard、TurboBench、controller.py等に起動前Work OS lease reserve→PID/ハッシュ確認→atomic handoffを全経路で強制する実装は未確認。既存PIDの停止・モデル変更・サービス再起動なし。
- M1判定 HOLD(本番起動経路の統一未完了)。Gateway旧direct runtime_start/stop/switch/tuneはfail-closed継続。全ランチャー統一、ハッシュ付きprocess birth/PID照合、故障注入、承認ID・バックアップ・切戻しを経て本番適用。既存B550 dirty treeは触らず、root空き53GB。
Redmine Admin さんが10日前に更新
2026-10-28 16:03 JST 継続実装(隔離のみ、本番変更なし)。MN55 /home/ito/staging/ai-swarm-m1m2-20261028-1443 の feature/m1-m2-preflight-20261028 に commit cf842f6a1e341727da8fffc3d7055d8685f7df00 を追加。M1 atomic_start_contract.py: PID/プロセス起動日時のUTCタイムゾーン正規化、timezone mismatch・不正日時・PID再利用をfail-closed、4テスト追加。M2 model_review_gate.py: AIレビューの未許可JSONキー・非文字列issuesの拒否、2テスト追加。MN55全127件PASS(前回121→127)。稼働MN55のcommander/parallel/DAG/API/occupancy timer active、B550 queue/reaper active・リースoffは正常IDLE、Ryzen NPU/GPU Work OS占有保持。元MN55/VPS Git clean、隔離ブランチclean。M1の本番起動経路統一は依然HOLD、M2の許可済み実プロジェクト汎用E2Eは未完。承認ゲートの必要な本番操作は未実施。
Redmine Admin さんが10日前に更新
2026-10-28 M1/M2継続(本番ランチャー変更なし)。M1 VPS隔離 branch feature/m1-b550-multigpu-20261028 に stale leaseの無条件再取得禁止、GPU0/GPU1部分handoff時のrenew/release拒否、予約段階の監査task_ref維持を実装。24/24 unittest PASS、Git commit 918892df249ed1e0d6ad3c87a738279be1f9ce08。MN55隔離ではatomic_start_contractへ直接OS観測のpreflight(active=0・鮮度20秒)、PID birth_ticks、観測出所検証を追加し単体18件PASS(未コミット)。M2: 許可済み実リポジトリlocal-llm-harnessのharness.py/test_harness.pyを署名付きExecution Contractで隔離修正。独立Docker16/16、Git commit 020354cc6053c0dfebfab585b208a5c5800c1170、contract xec-31d0592373d88fb573e30c11。2実モデルRyzen Ornith/B550 Gemma4レビュー両APPROVE、HMAC署名済みレビューreceipt(production_merge_authorized=false)保存。VPS隔離ブランチfeature/m2-multifile-audit-20261028にREADME限定を壊さない別監査ブリッジgit_multifile_bridge.pyを追加しテスト75/75 PASS(未コミット)。MN55/VPSの追加コマンドが安全性チェックで拒否されたためWork OSへの実登録、残るMN55/VPS追加commitはHOLD。差分を削除せず保持。本番Git・モデル・サービスには反映していない。
Redmine Admin さんが10日前に更新
2026-10-28 17時台:P6 Blocker SupervisorをMN55隔離ブランチに実装。新規管理Redmine #11682 https://call2arm.com/issues/11682。Git branch feature/p6-blocker-supervisor-20261028、SHA 9afe5275ab66e6c5c7dd1d5d5ad00cec9abb64c0。190/190回帰合格。Work OS既存pswarm-8e048c587af84320bbe5とM2署名付きレビューレシートxec-31d0592373d88fb573e30c11を実機照合。P6 shadow p6-4aec6b77503f4be090bdは2独立確認VERIFIED、production_rollout WAIT_APPROVAL。実装内容:型付きブロッカー分類、読取限定最大3回再試行、Work OS/HMAC以外のDONE禁止、原子的fsync+0600+HMAC+イベントチェーン、ジョブ途中中断はHOLD、依存先のみブロック、独立タスク継続、service read-only周期監視。systemd unitはテンプレートのみ(未導入/未有効化)。本番Git/LLM/processは未変更。残:Work OS承認ID付きactive runner、systemd canary、運用アラート、切戻しの確認。