Kubernetes で実行する場合は、devin-outpost-k8s
を利用できます。これは、このループを代わりに実装するオープンソースのオペレーターです。キューを監視し、
保留中のセッションを引き取り、それぞれを任意の認定クラスター (GKE、EKS、…) 上で
ワーカー Pod として実行します。独自のオーケストレーターを構築する代わりに、
付属の Helm チャートを使ってインストールしてください。
コアフロー
1. アウトポストを登録する
rhel、gpu-h200、my-outpost など) 。devin worker outpost create で作成します。
fleet API では、アウトポストは
outposts リソースとして表され、
アカウント単位でスコープされます (そのアカウント内のすべての組織で共有) 。詳しくは
outposts endpoints を参照してください。2. fleet API を監視して待機中のセッションを確認する
metadata.session_id で upsert し、重複は許容してください。クエリパラメータ、レスポンス形式、ページネーションの完全なセマンティクスについては、List queued sessions と Watch for changes を参照してください。
3. プロビジョニング前に引き取る
acceptor_id を指定します。これは、ワーカーが自身で申告する識別子です:
409 が返されます。引き取ると、サーバーが割り当てた引き取り期限 (status.claim_deadline) までにワーカーの準備が整うことが前提となります。期限切れになった引き取りは、自動的にキューに戻ります。プロビジョニングに失敗した場合は、セッションがすぐにキューへ戻るように、引き取りを解除してください。
4. マシンを起動してワーカーを実行する
--acceptor-id を渡し、--token または DEVIN_OUTPOSTS_TOKEN でトークンを指定します (フラグの一覧を参照) 。ワーカーは Devin のクラウドに接続してセッションを準備完了としてマークし、ツール呼び出しの実行を開始します。
5. ワーカーの終了時にマシンを終了する
devin worker start が終了すると、セッションは完了しているか、一時停止されています。VM またはコンテナを終了してください。アウトポストが再開可能な場合は、終了前にマシンのスナップショットを作成しておけば、セッション再開時に復元できます。
オーケストレーターは、引き取ったセッションとその状態を追跡できます:
status.session_status に pending、running、suspended、または terminated のいずれかが示されます。
中央集約なしのスケジューリング
約 16 台を超えるコーディネーター (同じアウトポストを監視してセッションを引き取るワーカーまたはオーケストレーター) を稼働させる予定がある場合は、まずアカウントチームに連絡してください。台数が増えると引き取り競合とキュー読み取り負荷が大きくなるため、それに対応できるようアウトポストが適切にプロビジョニングされていることを確認したいからです。
- 協調のための仕組みは引き取りだけです。 各ワーカーは独立してキューを監視し、保留中のセッションの引き取りを競います。引き取りはサーバー上でアトミックに行われる compare-and-swap で、勝つワーカーは必ず 1 台だけです。負けた側はすべて
409を受け取り、そのまま次の保留中セッションに進みます。引き取り競争に負けるのは正常な動作であり、エラーではありません。 - 各ワーカーは固有の ID を持ちます。
acceptor_idによって、ワーカーの引き取り、更新、再起動後の復旧はそのワーカー自身に限定されます。devin worker startはマシンごとにこれを自動生成して永続保存するため、フリートで ID を設定する必要はありません。acceptor ID (またはコピーしたワーカーデータディレクトリ) を複数のマシンで共有してはいけません。衝突したワーカー同士で互いの引き取りを奪い合ってしまいます。 - 障害は自動的に回復します。 ワーカーが引き取り後に停止しても、その引き取りは claim deadline で期限切れになり、セッションは別のワーカーが拾えるようキューに戻ります。フリート全体でのヘルス監視は不要です。
カスタムオーケストレーターの構築
devin worker start で行われる処理はすべて fleet API から直接利用できるため、CLI を完全に置き換えることができます。Devin の静的配布から devin-remote バイナリを取得し、ドキュメントに記載された環境で自分で起動してください。詳しくは、リファレンスの Remote binary distribution と spawn contract を参照してください。
