Rayサンドボックスで分散RayクラスタにgVisorの隔離環境を導入

公開:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

Googleは、Anyscaleとのパートナーシップにより、Rayの試験運用版ライブラリを導入しました。Rayサンドボックスは、分散Rayクラスタへサンドボックス環境を直接提供し、gVisorがノード上の隔離を担います。日本語版は米国時間2026年8月26日の投稿の抄訳です。[1]

モデルが生成したコードを、GKEのRayクラスタ上で隔離して実行したい場合に関係する発表です。各ハイレベルサンドボックスはRayアクターとして表現され、Ray 2.58以降は使い慣れたRay APIで管理でき、GKEで試すためのユーザーガイドも用意されています。[1]


Rayサンドボックス(試験運用版)の発表の要点

Rayサンドボックスは、Anyscaleとのパートナーシップによる試験運用版ライブラリとして導入されました。隔離された実行のための新たな抽象化を導入せず、既存のRayプログラミングモデルに自然に馴染ませることを重要な設計目標としています。主な点は次のとおりです。[1]

  • Google Cloudの顧客はマルチモーダルデータパイプラインから最先端のRLまでRayを活用
  • トレーニング後のワークロードをオーケストレートするための標準的なランタイムとしてRayが定着(Google Cloud)
  • Google Cloudは安全で分離されたサンドボックスの大規模なオーケストレーションを課題と指摘
  • 試験運用版ライブラリはネイティブで高性能なサンドボックス環境を分散Rayクラスタに直接提供(Google Cloud)
  • 試験運用版ライブラリはGoogleで開発中のエージェント型AIテクノロジーを活用
  • 各ハイレベルサンドボックスをRayアクターとして表現
  • 配置、リソースの割り当て、作成と破棄、障害からの復旧は他のRayリソースと同様の管理が必要
  • 周囲のワークロードに応じたスケーリングも他のRayリソースと同様の管理が必要
  • Rayスケジューラが実行ノードを決めCPUとメモリを予約
  • サンドボックスアクターが自身のライフサイクルを管理
  • 初期サンドボックスランタイムはgVisor
  • Ray 2.58以降はフレームワークの作成者と研究者がサンドボックス環境を管理できる
  • その際は他のワークロードで使い慣れたRay APIやパターンをそのまま使える
  • Ray 2.58以降はローカルのgVisorサンドボックスをSandboxRuntimeでより詳細に制御できる[1]

Google Cloudによると、強化学習のエコシステムでは、複雑なトレーニング後のワークフローを支える統合コンピューティングランタイムとしてRayの採用が急速に進んでいます。発表の基本情報を次の表にまとめます。[1]

項目 内容
記事末尾の記名(Google) Googleのスタッフ ソフトウェア エンジニア、Andrew Sy Kim
記事末尾の記名(Anyscale) Anyscaleの最高技術責任者、Philipp Moritz氏
日本語版の扱い 米国時間2026年8月26日にGoogle Cloud blogへ投稿された記事の抄訳
対象と対象版 分散Rayクラスタ上のサンドボックス環境(Ray 2.58以降)
提供状態 Anyscaleとのパートナーシップによる試験運用版ライブラリ
課題が浮上した経緯(Google Cloudの見解) エージェントモデルと推論モデルの進化につれて浮き彫りに
背景(Google Cloudの見解) 動的なロールアウト、コード生成、マルチターンのツール操作を安全に実行するための課題
Rayをすでに使うフレームワーク例 veRL、NeMo-RL、SLIME、MILES、SkyRLが分散トレーナー、推論エンジン、ロールアウトワーカーを調整[1]

意見や要望は、GitHubのissueでのディスカッションで伝えられます。GoogleとAnyscaleは、強化学習におけるRayの未来を一緒に考えていこうと呼びかけています。[1]

Rayサンドボックスの採用検討で着目する観点

今回の発表の論点のうち、この記事ではコードの書き方と隔離の仕組み、試し方と版の条件を詳しく扱います。採用を検討しやすいと考えて、この4点を選びました。

難易度と緊急度は編集部が定めた非公式の目安です。難易度は、基礎がこの記事の説明だけで理解できる、中級がRayの基本的な使い方の知識が要る、上級がクラスタ運用や隔離技術の知識が要る水準です。緊急度は、高が試す前、中が導入の検討時、低が必要になったときに確認する目安です。

見出し こんな人におすすめ 難易度 緊急度
Rayサンドボックスを試す前の注意点 試験運用版を試す前に版や前提条件を確認したい人 基礎 高
Ray 2.58以降の試験運用版Rayサンドボックスの使い方 Rayのアクターの基本を知っていてサンドボックスを作りたい人 中級 高
Ray 2.58以降の試験運用版Rayサンドボックスの制御 詳細な制御が必要な人 中級 低
RayサンドボックスがgVisorを選ぶ理由 採用を検討する段階で隔離の仕組みを理解したい人 基礎 中
RayサンドボックスをGKEで試す手順 GKEクラスタとKubeRayを操作できる人 上級 中

Rayサンドボックスを試す前の注意点

試す前に、版と提供状態、ノードの前提、ネットワークの既定値を確認します。

発表時点の提供状態と対象版は次のとおりです。[1]

項目 内容 根拠資料・時点
提供状態 Rayの試験運用版ライブラリ 発表時点
対象版 Ray 2.58以降 発表時点
今回の発表に含まれない点 安定版への移行時期と、他ランタイムに対応するRayの版 発表時点

Ray開発版ドキュメント(2026-09-22確認)が示すAPIの提供状態、ノードとネットワークの前提は次のとおりです。[2][3]

項目 内容 根拠資料・時点
アルファ版ライブラリ ray.experimental.sandboxはアルファ版で、安定版の前にAPIが変更・削除される可能性 Ray開発版のSandboxes資料(2026-09-22確認)
ノードのOS サンドボックスを動かす各RayノードにLinux(x86_64かarm64) Ray開発版のSandboxes資料(2026-09-22確認)
runsc サンドボックスを動かす各Rayノードで$PATHから到達できること Ray開発版のSandboxes資料(2026-09-22確認)
network既定値 network="none"が既定で、信頼できないコードは外向き接続とKubernetesクラスタサービスの探索が不可 Ray開発版のKubeRayガイド(2026-09-22確認)
network="public" ノードが到達できる他のPodや内部クラスタサービスに到達可能 Ray開発版のKubeRayガイド(2026-09-22確認)[2][3]

Rayの今後のバージョンでは、Agent SubstrateやKata Containersといった他のサンドボックスランタイムにもサポートを拡大する予定です。[1]

Ray 2.58以降の試験運用版Rayサンドボックスの使い方

Ray 2.58以降では、sandbox.createでサンドボックスを作成し、返されたアクターのハンドルからexecを呼び出します。[1]

作成と実行のコード例

import ray
from ray.experimental import sandbox

ray.init()
# Create a gVisor sandbox environment and return an actor handle for a proxy actor
sb = sandbox.create(
    cpu=1.0,
    memory="512Mi",
    image="python:3.12-slim"
)
# Execute code inside the sandbox
result = ray.get(sb.exec.remote("python -c 'import sys; print(sys.version)'"))
print(result.stdout)

公式資料からの抜粋:分散 Ray クラスタに gVisor サンドボックスを導入(Ray プリミティブとしてのサンドボックス)。対象版・範囲:Ray 2.58以降。[1]

Ray 2.58以降の試験運用版ライブラリでの指定は次のとおりです。サンドボックスを動かすノードの前提は、試す前の注意点で確認してください。[1]

項目 指定例 意味
sandbox.create image="python:3.12-slim" OCI互換イメージからgVisorサンドボックスを作成
sandbox.create cpu=1.0、memory="512Mi" コード例で指定するCPUとメモリの値
戻り値sb Rayアクターのハンドル 操作をgVisorへ転送するプロキシのアクター
sb.exec.remote "python -c 'import sys; print(sys.version)'" 通常のアクター呼び出しとしてサンドボックス内で実行
配置 execは通常のアクター呼び出し サンドボックスはクラスタ内のどこにでも配置可能
result.stdout print(result.stdout) コード例で表示する実行結果の出力

ライフサイクル管理の範囲

サンドボックスAPIは、エージェント型ワークロードに必要な次のライフサイクル管理に対応しています。[1]

  • OCIコンテナイメージからの環境作成
  • CPUとメモリの上限設定
  • 環境変数、作業ディレクトリ、ネットワーキングの構成
  • コマンドの実行
  • ファイルの読み取り、書き込み、アップロード、ダウンロード
  • サンドボックスの状態の検査
  • 環境の終了または削除[1]

開発版ドキュメントの書き込み保護の確認例

書き込み保護は、Ray開発版ドキュメント(2026-09-22確認)の例です。編集部は、sandbox.createで作成した稼働中のサンドボックスを用意して試すことを勧めます。既定のreadonly=Trueでは/etcへの書き込みが失敗し、Read-only file systemが出ます。[3]

# Assuming an active sandbox `sb = sandbox.create(...)`
# Attempting to modify /etc or rootfs will fail
res = ray.get(sb.exec.remote("touch /etc/hacked.txt"))
print(res.exit_code)  # Non-zero exit code
print(res.stderr)     # "Read-only file system"

公式資料からの抜粋:Deploy Ray sandboxes with KubeRay #(Deploy Ray sandboxes with KubeRay # / (Optional) Step 4: Verify isolation and security guarantees # / Filesystem write protection #)。対象版・範囲:Ray開発版ドキュメント(docs.ray.io/en/master、確認日2026-09-22時点)。[3]

開発版ドキュメントのネットワーク既定値の例

ネットワークの既定値の例も、Ray開発版ドキュメント(2026-09-22確認)にあります。編集部は、モデルが生成したコードを実行する場合、外向き接続が要らないなら既定のnetwork="none"のまま使うことを勧めます。既定のnetwork="none"では外向き接続を確立できず、公式の確認例では終了コードが0以外になります。[3]

# Attempting network egress will immediately fail
res = ray.get(sb.exec.remote("python3 -c 'import urllib.request; urllib.request.urlopen(\"http://google.com\", timeout=2)'"))
print(res.exit_code)  # Non-zero exit code

公式資料からの抜粋:Deploy Ray sandboxes with KubeRay #(Deploy Ray sandboxes with KubeRay # / (Optional) Step 4: Verify isolation and security guarantees # / Network isolation #)。対象版・範囲:Ray開発版ドキュメント(docs.ray.io/en/master、確認日2026-09-22時点)。[3]

Ray 2.58以降の試験運用版Rayサンドボックスの制御

Ray 2.58以降では、SandboxRuntimeを使うと、ローカルのgVisorサンドボックスを直接操作し、gVisorへ渡す前のOCI仕様を編集できます。次のコードは、アクター内にローカルサンドボックスのプールを作る例です。[1]

import ray
from ray.experimental.sandbox.runtime import SandboxRuntime

@ray.remote
class SandboxPool:
    def __init__(self, size: int = 3, image: str = "python:3.10-slim"):
        self.runtime = SandboxRuntime()
        self.sandboxes = [
            self.runtime.create(image=image, memory="512Mi")
            for _ in range(size)
        ]

    def run_command(self, index: int, command: str):
        return self.runtime.exec(self.sandboxes[index], command)

    def close(self):
        for sb_id in self.sandboxes:
            self.runtime.delete(sb_id)

# Deploy an actor managing a pool of local sandboxes
pool = SandboxPool.remote(size=3)
result = ray.get(pool.run_command.remote(0, "python3 -c 'print(\"Hello from pool!\")'"))
print(result.stdout)
ray.get(pool.close.remote())

公式資料からの抜粋:分散 Ray クラスタに gVisor サンドボックスを導入(Ray プリミティブとしてのサンドボックス)。対象版・範囲:Ray 2.58以降。[1]

項目 指定例 意味
SandboxRuntime() self.runtime = SandboxRuntime() ローカルのgVisorサンドボックスを直接操作する入口
self.runtime.create image=image, memory="512Mi" range(size)の数だけサンドボックスを作成
self.runtime.exec self.sandboxes[index], command 指定した番号のサンドボックスでコマンドを実行
self.runtime.delete sb_id closeメソッドで各IDに対して呼び出す
SandboxPool.remote size=3 プールを管理するアクターをデプロイ[1]

RayサンドボックスがgVisorを選ぶ理由

Rayサンドボックスは、GoogleのオープンソースのアプリケーションカーネルであるgVisorを、初期サンドボックスランタイムとして使います。その前提にある考え方は、次の引用のとおりです。[1]

モデルが生成したコードを実行する際は、その環境内のコードを「信頼できないもの」として扱う必要があります。

出典:Google Cloud「分散 Ray クラスタに gVisor サンドボックスを導入」[1]

gVisorの特徴と、GoogleとAnyscaleによる評価を観点別に整理します。[1]

観点 内容 区分
隔離の仕組み Linuxシステムコールインターフェースの大部分をユーザー空間に実装 gVisorの特徴
分離境界 ワークロードとホストカーネルの間に分離境界を追加 gVisorの特徴
イメージ OCI互換で標準のコンテナイメージをそのまま利用 gVisorの特徴
Docker DockerデーモンやホストDockerソケットをサンドボックスに公開する必要がない gVisorの特徴
起動と資源 1秒未満の高速起動と低メモリオーバーヘッドを両立 GoogleとAnyscaleの評価
活用形態 サンドボックスを粒度の細かい分散リソースとして柔軟に活用 GoogleとAnyscaleの評価
隔離の強さ 生成されたコードを通常のコンテナで直接実行するより強力な隔離環境 GoogleとAnyscaleの評価
適性 環境を動的に作成できるほど軽量で、エージェント型ワークロードに非常に適する GoogleとAnyscaleの評価[1]

RayサンドボックスをGKEで試す手順

Rayサンドボックスの詳細はRayのドキュメントに、GKEで試す手順はユーザーガイドにあります。掲載するStep 1〜3と確認、任意のStep 5の手順と出力例は、Ray開発版ドキュメント(2026-09-22確認)の内容です。任意のStep 4にあたる書き込み保護とネットワークの例は、使い方の節で扱います。[1][3]

手順 実施内容 補足
準備(ツール) 設定済みkubectlと認証済みgcloud CLI、Helm v3 開発版
準備(Ray) ray.experimental.sandboxを含むRay 2.58.0以降 開発版
Step 1 標準のLinuxワーカーノードでGKEクラスタを作成 containerdの標準GKEノードプールを使用可能
Step 2 Helmリポジトリから最新の安定版KubeRay operatorを導入 KubeRay operatorのインストール手順に従う
Step 3 サンプルのRayJobをkubectl applyで作成 起動時にrunscを導入するRayClusterを作成
Step 3のジョブ サンドボックスを作りPythonコードを実行 ジョブ完了後にサンドボックスを終了する構成
確認 kubectl getとkubectl logsでPodとログを確認 Rayクラスタの準備完了を待つ
Step 5(任意) runscを事前導入した独自のRayイメージを作成 本番ではイメージへの事前導入が勧められている[3]

実行と確認のコマンド

Ray開発版ドキュメント(2026-09-22確認)の例です。以下はGKEクラスタの作成、RayJobの適用、PodとログのコマンドでStep 2のKubeRay operatorはインストール手順に従って導入します。[3]

gcloud container clusters create ray-sandbox-cluster \
    --region=us-central1 \
    --machine-type=e2-standard-16 \
    --num-nodes=3

公式資料からの抜粋:Deploy Ray sandboxes with KubeRay #(Deploy Ray sandboxes with KubeRay # / Step 1: Create a GKE cluster #)。対象版・範囲:Ray開発版ドキュメント(docs.ray.io/en/master、確認日2026-09-22時点)。[3]

kubectl apply -f https://raw.githubusercontent.com/ray-project/kuberay/master/ray-operator/config/samples/ray-job.sandbox.yaml

公式資料からの抜粋:Deploy Ray sandboxes with KubeRay #(Deploy Ray sandboxes with KubeRay # / Step 3: Run sandboxes with a RayJob #)。対象版・範囲:Ray開発版ドキュメント(docs.ray.io/en/master、確認日2026-09-22時点)。[3]

# List running job pods (wait for Ray cluster to be in ready state)
kubectl get pods -l job-name=rayjob-sandbox

# Stream the demo logs
kubectl logs -f -l job-name=rayjob-sandbox

公式資料からの抜粋:Deploy Ray sandboxes with KubeRay #(Deploy Ray sandboxes with KubeRay # / Step 3: Run sandboxes with a RayJob #)。対象版・範囲:Ray開発版ドキュメント(docs.ray.io/en/master、確認日2026-09-22時点)。[3]

Ray開発版ドキュメントの手順で試す場合、編集部は次の表の2か所を出力例と照合することを勧めます。出力は例と似た形になるとされ、完全一致は前提にしません。[3]

Ray開発版ドキュメント(2026-09-22確認)の出力例との照合先です。[3]

確認対象 照合の条件 確認できること
kubectl logsのPlatformの行 Platformの行にgvisorが含まれる 公式出力例と同様にgvisorを含むこと
kubectl logsのJobの行 Jobの行が succeeded で終わる ジョブが成功したこと
Sandbox output:
=== Hello from inside Ray Sandbox! ===
Python Version : 3.12.14 (main, Aug 13 2026, 19:41:13) [GCC 14.2.0]
Platform       : Linux-4.19.0-gvisor-x86_64-with-glibc2.41

RayJob completed successfully!
2026-08-15 17:38:41,535	INFO sdk.py:520 -- WebSocket closed for job rayjob-sandbox-gz8j6 with close code 1000
2026-08-15 17:38:41,546	SUCC cli.py:66 -- ------------------------------------
2026-08-15 17:38:41,546	SUCC cli.py:67 -- Job 'rayjob-sandbox-gz8j6' succeeded
2026-08-15 17:38:41,546	SUCC cli.py:68 -- ------------------------------------

公式資料からの抜粋:Deploy Ray sandboxes with KubeRay #(Deploy Ray sandboxes with KubeRay # / Step 3: Run sandboxes with a RayJob #)。対象版・範囲:Ray開発版ドキュメント(docs.ray.io/en/master、確認日2026-09-22時点)。[3]

出典

  1. ^ Google Cloud. 「分散 Ray クラスタに gVisor サンドボックスを導入」. https://cloud.google.com/blog/ja/products/containers-kubernetes/gvisor-sandboxes-for-ray-clusters-on-gke, (参照 26-09-08).
  2. ^ Ray. 「Ray Sandboxes #」. https://docs.ray.io/en/master/ray-core/sandboxes.html, (参照 26-09-22).
  3. ^ Ray. 「Deploy Ray sandboxes with KubeRay #」. https://docs.ray.io/en/master/cluster/kubernetes/examples/ray-sandboxing.html, (参照 26-09-22).
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 3.5日の研修で、年間1,600時間の削減効果が見込まれる。東京きらぼしフィナンシャルグループのDX人材育成事例 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

What's New

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する