CWSANDBOX_API_KEY に設定した CoreWeave API アクセストークンを使用します。Forge APIキーによる認証については、はじめにを参照してください。CKS の要件については、配置モードを参照してください。
このガイドでは、リソース、マウントするファイル、ポート、アノテーション、タイムアウトなど、サンドボックスの設定オプションについて説明します。GPU キャパシティの確保、サービスの公開、操作のタイムアウト設定など、ワークロードの要件に合わせてサンドボックスのランタイム環境を調整する際のリファレンスとしてご活用ください。
このページは、cwsandbox Python SDK を使用してサンドボックスを起動・管理する開発者を対象としています。
概要
サンドボックスの設定は、範囲が広い順から具体的な順に、以下の3か所で設定できます。- SandboxDefaults: セッション内のすべてのサンドボックスに対する共有デフォルト。
- Sandbox.run() kwargs: サンドボックスごとのオーバーライド。
- @session.function() kwargs: 関数固有の設定。
リソース
ResourceOptions データクラスまたはプレーンな dict を使用して、CPU、メモリ、GPU のリソースを設定します。サーバーレスはデフォルトの配置モードで、リクエストと制限を等しく使用します。リクエストと制限が等しくない場合は、ポリシーが許可するランナーを使用した CKS 配置 を使用します。
以下のサンプルでは、リクエストと制限が等しいものを使用します:
ResourceOptions に自動的に変換します。
ResourceOptions はリソースリクエストと制限を分離します。リクエストは、サンドボックスが必要とするものをスケジューラーに伝えます。制限は、使用可能な最大値を設定します。Kubernetes がリクエストと制限を使用して サービス品質クラス を割り当てる方法の背景については、Kubernetes のドキュメントを参照してください。
ResourceOptions フィールド
クライアント側では、すべてのフィールドはオプションで、デフォルトは
None です。最終的に決定される割り当ては、適用されるポリシーを満たす必要があります。リソース割り当てを省略した場合は、そのポリシーで定義された CPU とメモリのデフォルト値 (すべて指定済みで、かつ正の値) が、リクエストと制限の両方に使用されます。
Guaranteed QoS
リクエストが制限と等しい場合、サンドボックスには Guaranteed サービス品質クラスが割り当てられます。スケジューラーは割り当て全体を予約し、ノードのリソースが逼迫した場合でも、Kubernetes は Guaranteed の Pod を最後に退避させます。ただし、制限を超えて CPU を使用しようとするサンドボックスは、この場合でもスロットリングされます。レイテンシーに敏感なワークロードには、この設定を使用してください。Burstable QoS
CKS ランナーのポリシーでリクエストと制限を不均等に設定できる場合、リクエストを低くするとサンドボックスに Burstable サービス品質 クラスが割り当てられます。リクエストを低くするとスケジューラーがより多くのサンドボックスをビンパックできますが、各サンドボックスはキャパシティがあれば制限までバーストできます。 独自のコンピュートを使用する の手順を完了し、CWSANDBOX_API_KEY に CoreWeave API アクセストークンを設定してください。[RUNNER-ID] は、リクエストと制限を許可するポリシーの CKS ランナーの ID に置き換えてください:
CPU の値
CPU はミリコア単位またはコア単位で指定します。詳細については、Resource units in Kubernetes を参照してください。メモリ値
メモリは標準の Kubernetes memory units を使用します:GPU
CPU とメモリに加えて GPU リソースをリクエストします。GPU のリクエストで確保されるのは GPU のみであるため、CPU とメモリは明示的に設定してください。type と memory_gb は代替となる設定です。設定するのはどちらか一方だけにしてください。
確定したリソースを確認する
サンドボックスの起動後、確定したリソース割り当てを確認します。この例では、CKS 上でリクエストと制限に異なる値を使用します。CKS のセットアップを完了し、CWSANDBOX_API_KEY に CoreWeave API アクセストークンを設定してください。[RUNNER-ID] は、GPU キャパシティがあり、これらのリソースを許可するポリシーが設定された CKS ランナーの ID に置き換えてください:
設定ライブラリの相互運用
すべての設定タイプ (NetworkOptions, Secret, ResourceOptions) は、データクラス またはプレーンな dict のいずれかを受け入れます。これにより、設定 を dict または dict-like オブジェクトに解決する ML 設定ライブラリは、手動変換なしで SDK に値を直接渡すことができます。
SandboxDefaults.from_dict() はプレーンな dict または OmegaConf の DictConfig を受け入れ、ネストしたフィールドを自動的に強制変換します。dict は必要に応じて NetworkOptions、Secret、または ResourceOptions になり、lists は tuples になります。
Sandbox.run() または session.sandbox() に直接渡す場合、dict も受け入れます。リソースのネストされた dict 形式は、ResourceOptions フィールドにマップされます。フラットな dict 形式 ({"cpu": "1", "memory": "1Gi"}) も受け入れられ、Guaranteed QoS として扱われます。
マウントされたファイル
マウントされたファイルを使用すると、設定ファイル、スクリプト、その他の読み取り専用アセットを、コンテナーイメージに組み込むことなく、起動時にサンドボックスへ提供できます。マウントオプション
マウントされたファイルは読み取り専用です。変更が必要なファイルには
write_file() を使用してください。
ポート
サンドボックス内のプロセスが外部クライアントにトラフィックを配信できるようにポートを公開します:ポート設定
ポートにプラットフォームの TLS または TLS パススルーを使用してインターネット到達可能なアドレスを付与するには、パブリックエンドポイント を参照してください。
ネットワーク
NetworkOptions データクラスまたはプレーンな dict を使用してネットワークのオプションを設定します:
NetworkOptions に自動的に変換します。
NetworkOptions のフィールド
すべてのフィールドは省略可能で、デフォルトは
None です。この場合、バックエンドのデフォルトを使用します。
SandboxDefaults でネットワークを設定する
すべてのサンドボックスにデフォルトのネットワーク設定を指定します:アノテーション
サンドボックスに Kubernetes Pod のアノテーションを追加します。アノテーションは、基盤となる Pod に関連付けられるキーと値の文字列ペアです。スケジューラー、コスト配賦ツール、外部オートメーションなど、Pod のメタデータを読み取るインテグレーションに役立ちます。セッションレベルのデフォルト
セッション内のすべてのサンドボックスにデフォルトのアノテーションを設定します:マージの動作
SandboxDefaults.annotations とサンドボックスごとの annotations の両方を指定した場合、SDK はそれらをマージします。キーが競合した場合は、サンドボックスごとに明示的に指定した値が優先されます。これは environment_variables と同じセマンティクスです。
SUNK インテグレーション
SUNK インテグレーションで Slurm コンテキストを Pod アノテーションとして渡す方法については、SUNK Pod Scheduler インテグレーションガイドを参照してください。検証
SDK はアノテーションのキーや値を検証しません。予約済みキーの接頭辞、値の形式、エントリ数の上限は、サーバー側で検証されます。シークレット
Forge チームのシークレット注入、認証要件、および Python と TypeScript のサンプルについては、Forge シークレットの使用 を参照してください。タイムアウト
サンドボックスとその操作の実行時間は、4 つの設定で制御されます。名前が似ているため、各設定の制限対象を次の表にまとめます。
サンドボックスを終了させるのは
max_lifetime_seconds のみです。他の 3 つは個々のリクエストを制限するだけで、サンドボックスは実行されたままです。
max_lifetime_seconds
max_lifetime_seconds はサンドボックスの総ウォールクロック有効期間を設定します。サンドボックスがこの有効期間に達すると、作業が進行中であっても、プラットフォームはそれを終了します。
max_lifetime_seconds を設定しない場合は、ランナーのポリシーのデフォルトが適用されます。ポリシーのデフォルトで正の値の有効期間が指定されていない場合、プラットフォームは 10 分を使用します。長時間実行する作業では、値を明示的に設定してください:
SandboxDefaults で設定します:
Sandbox.run() に明示的に指定した max_lifetime_seconds 引数は、defaults の値より優先されます。この引数のデフォルトは None なので、defaults で設定済みの有効期間をこの引数で削除することはできません。
リクエストできる有効期間の上限は、サーバーレスと CKS のどちらの配置でも 30 日 (2,592,000 秒) です。プラットフォームは、それを超えるリクエストを拒否します。
作成の例と CKS ランナーポリシーのデフォルトについては、長時間実行サンドボックスを実行するを参照してください。
有効期間が終了したときの動作
プラットフォームはサンドボックスの基盤となる Kubernetes ジョブを終了して有効期間を適用するため、猶予期間を設けずに即座に終了します。実際の運用では、次の 2 点に注意してください。- サンドボックス内のプロセスには、
stop()が提供する猶予期間がありません。書き出されていないデータは失われます。 - クライアントは、終了を示す一意のエラーや理由を受け取りません。SDK は
Sandboxの終了理由を report しないため、有効期限切れとその他の障害をプログラムで区別できません。長期間稼働するサンドボックスの経過時間は、自分でトラッキングしてください。
timeout_seconds
timeout_seconds は、実行中のサンドボックスでの単一の操作に時間制限を設定します:
SandboxTimeoutError を送出します。サンドボックスは実行を続けます。時間の計測はサンドボックスが RUNNING に達してから開始されるため、起動時間は含まれません。
timeout_seconds はサンドボックスの max_lifetime_seconds より小さい値にしてください。タイムアウトがサンドボックスの残りの有効期間を超えるコマンドは、サンドボックスの終了時に停止します。
max_timeout_seconds
max_timeout_seconds は、サンドボックスをランナーに配置する試みが失敗するまでに、サーバーが待機する時間の上限を設定します。これはサーバー側の配置の時間制限であり、クライアントの読み取りタイムアウトではありません。また、その後のサンドボックスの実行時間には影響しません:
max_timeout_seconds は Sandbox.run() と session.sandbox() で使用できますが、SandboxDefaults では使用できません。
request_timeout_seconds
request_timeout_seconds は、ほとんどの RPC に適用されるクライアント側の HTTP タイムアウトで、呼び出し時に独自の timeout_seconds が渡されない場合のフォールバックとして使用されます。SandboxDefaults で設定します。
poll_rpc_timeout_seconds を使用するため、ポーリングが停止した場合、リクエストのタイムアウト時間全体にわたってブロックするのではなく、速やかに失敗します。クライアント側の調整オプションの一覧については、SandboxDefaults リファレンスを参照してください。