Skip to main content
auth を省略している例では、CWSANDBOX_API_KEY に設定された CoreWeave API アクセストークンを使用します。Forge APIキーで認証する場合は、はじめに の手順に従い、取得した AuthHeaders を操作に渡してください。HTTP API の例では、FORGE_API_KEY に設定された Forge APIキーを使用します。代わりに CoreWeave API アクセストークンを使用する場合は、CWSANDBOX_API_KEY にそのトークンを設定し、各リクエストの -H "x-wandb-api-key: $FORGE_API_KEY" を -H "Authorization: Bearer $CWSANDBOX_API_KEY" に置き換えてください。認証情報には、サンドボックスとそのスナップショットを所有するアカウントのものを使用してください。
ファイルシステムスナップショット (FSS) を使用すると、サンドボックスでローカルの作業ディレクトリに書き込み、そのディレクトリを不変のスナップショットとしてオブジェクトストレージに取得し、後で新しいサンドボックスにリストアできます。FSS を使用して、run 間でサンドボックスのファイルシステムを一時停止・再開したり、1 つのスナップショットから複数のサンドボックスにフォークし、それぞれを独立して変更したりできます。

仕組み

FSS を使用したサンドボックスは、選択したパスに書き込み可能なスクラッチファイルシステムをマウントします。ランナーはこのマウントを直接のオブジェクトストレージマウントではなく EmptyDir でバックアップします。スナップショットとリストアの操作では、そのローカルファイルシステムと組織スコープのオブジェクトストレージバケットの間で tarball をコピーします。 各スナップショットは、サーバーによって割り当てられた fileSystemSnapshotId で識別される FileSystemSnapshot リソースです。スナップショットには 3 つの特性があります。
  • 不変: スナップショットを作成すると 1 つのアーカイブが書き込まれます。スナップショットをリストアしてもソースのスナップショットは変更されないため、後でリストアしても常に元のバイトが表示されます。
  • 組織スコープ: ご自身の組織で作成されたスナップショットのみをリストアできます。他の組織のスナップショット ID は見つからないものとして扱われます。
  • 独立したライフサイクル: スナップショットはサンドボックスとは別に管理されます。サンドボックスを削除してもそのスナップショットは削除されず、スナップショットを削除してもそれから実行中のサンドボックスには影響しません。
デフォルトでは、CoreWeave がスナップショットを保持するオブジェクトストレージバケットをプロビジョニングおよび管理します。代わりにご自身で所有および管理するバケットにスナップショットを保存する場合は、CoreWeave アカウントとバケットの前提条件について Bring your own bucket を使用する を参照してください。

スナップショットマウントでサンドボックスを起動する

サンドボックスは、2 つのファイルシステムソースのいずれかから起動できます。新しく空のスクラッチファイルシステム、または既存のスナップショットのリストアです。

新規スクラッチ

新規スクラッチのファイルシステムは空の状態で開始され、後からスナップショットを作成できます。run の実行中に書き込み可能なローカル状態が必要なワークフローで使用してください。

スナップショットからリストアする

リストアでは、既存のスナップショットからファイルシステムを起動します。マウントのスナップショットソースにスナップショット ID を設定します。
スナップショットをリストアするには、ステータスが READY である必要があります。まだ CREATING のスナップショットをリストアすると失敗します。スナップショットのステータスと失敗を参照してください。

スナップショットを撮る

サンドボックスを停止したとき (on stop) と、実行中のサンドボックスから (mid-life) の2つの方法でスナップショットを取得することができます。

停止時のスナップショット

シャットダウン時にサンドボックスのファイルシステムを保持するには、停止時のスナップショットを有効にしてサンドボックスを停止します。一時停止と再開は、このパターンで実現します。スナップショットを取得してサンドボックスを停止し、後でそのスナップショットをリストアする新しいサンドボックスを起動します。

実行中のスナップショット

実行中のスナップショットは、サンドボックスを停止せずにその状態を取得します。サンドボックスはその後も実行を継続します。
snapshot() はデフォルトでスナップショットが READY になるまで待機し、スナップショット ID を返します。

スナップショットをフォークする

同じスナップショットを複数のサンドボックスにリストアできます。各スナップショットは不変であるため、リストアされたサンドボックスは同一のバイト列から開始し、書き込みに伴ってそれぞれ異なる状態になります。
  1. 停止時のスナップショット、または実行中のスナップショットを使用して、READY 状態のスナップショットを作成します。
  2. fileSystemSnapshotId にそのスナップショットを設定して、サンドボックス A を起動します。
  3. 同じ fileSystemSnapshotId を使用して、サンドボックス B を起動します。
  4. サンドボックス A とサンドボックス B への書き込みは、それぞれ独立して状態を変化させます。ソースのスナップショットは変更されないため、後から同じ ID を使用してリストアしても、どちらのフォークへの書き込みも反映されず、元のスナップショットが使用されます。

スナップショットを管理する

スナップショットは、作成元のサンドボックスとは独立して一覧表示、取得、削除できます。
list_snapshots()、get_snapshot()、delete_snapshot() では、auth 引数で AuthHeaders オブジェクトを渡すこともできます。

スナップショットのステータスと失敗

スナップショットは非同期で作成されます。スナップショットリクエストが成功して fileSystemSnapshotId が返された時点でも、アーカイブの書き込みがまだ続いていることがあり、その後にスナップショットが失敗する場合があります。これは主に、waitForReady が false の場合や、ランナーのアーカイブ処理中にクライアント側でタイムアウトが発生した場合に起こります。 進捗を確認するには、スナップショットを取得して次の 2 つのフィールドを確認します。
  • status: ライフサイクル状態。終了状態の値は READY と FAILED です。HTTP API は FILE_SYSTEM_SNAPSHOT_STATUS_READY のような完全修飾形式を返します。
  • statusReason: status が FAILED の場合に設定され、失敗の理由を示します。
スナップショットをリストアする前に、GetFileSystemSnapshot をポーリングして、スナップショットが READY になるまで待機してください。Python クライアントの snapshot() と get_snapshot() では、結果を待機する場合にこのポーリングが自動で行われます。 次の表は、主な失敗理由とそれぞれの対処法を示しています。 ランナーがアーカイブのアップロードを完了したものの結果を記録できなかった場合、バケット内にオブジェクトが存在していても、スナップショットの行が FAILED になることがあります。この場合は、スナップショットの作成を再試行してください。 非同期で失敗した場合、プラットフォームは sandbox.file_system_snapshot.async_fail イベントも発行します。これにより、下流の通知システムは、元の呼び出しが返った後に失敗したスナップショットに対応できます。

制限事項

FSS バージョン 1 は、スナップショットを基盤とするローカルのスクラッチストレージを提供します。これは共有ファイルシステムではなく、複数の書き込み元による同時ライブマウントには対応していません。実行中のサンドボックスが互いのファイルシステムを読み書きすることはありません。サンドボックス間で状態を共有するには、スナップショットの作成とリストアを行う必要があります。

SDK のサンプル

サンドボックスを起動し、実行中のスナップショットを取得してフォークし、停止時にスナップショットを取得し、スナップショットを管理する、実行可能な完全な Python サンプルについては、cwsandbox-client リポジトリの file_system_snapshots.py を参照してください。
最終更新日 2026年10月15日