Ray(レイ)は、Pythonで書いた処理を複数のCPUコアや複数のマシンに自動で分散させるためのフレームワークです。機械学習のハイパーパラメータ探索・大規模データ処理・強化学習など、「1台では遅すぎる」という場面で真価を発揮します。本記事では、Ubuntu 24.04 LTS に実際に Ray をインストールし、単一ノードで動かすところから Ray Dashboard・クラスター構築・Ray Tune までを、すべて実際にコンテナで動かした実測データとともに解説します。
結論から言うと、pip install "ray[default]" の1コマンドで Ray 2.55.1 が入ります。2026年6月15日に Ubuntu 24.04.4 LTS(Python 3.12.3)の公式Dockerイメージで実際に動かし、10個のタスクを並列実行して直列の1.007秒 → 並列0.493秒(約2.04倍速)になることを確認しました。Ray Dashboard やクラスター情報のスクリーンショットもすべて実画面です。
この記事のポイント
- Ubuntu 24.04 LTS(Python 3.12.3)で
pip install "ray[default]"の1コマンドで Ray 2.55.1 がインストールできる @ray.remoteを付けるだけで、既存のPython関数を分散タスクに変換できる- 実測では4CPUで 直列1.007秒 → 並列0.493秒(約2.04倍速)。理論上の10倍ではなくCPUコア数が上限になる
- Ray Dashboard(ポート8265)でジョブ・ノード・リソースをブラウザから監視できる
- Ubuntu 22.04(Python 3.10.12)でも動くが、Python が新しい Ubuntu 24.04 LTS を推奨
目次
- Rayとは何か — 分散処理フレームワークの基礎
- Ubuntu 24.04 への Ray インストール手順
- 基本的な使い方 — @ray.remote で並列タスクを実行
- Ray Dashboard の起動と使い方
- 2台以上のVPSでクラスターを組む
- ML実践例 — ハイパーパラメータ探索(Ray Tune)
- よくあるエラーと解決策
- まとめ
Rayとは何か — 分散処理フレームワークの基礎
Ray(ray.io)は、UCバークレー発のオープンソースの分散コンピューティングフレームワークです。Pythonから使えて、関数に @ray.remote を付けるだけで並列・分散実行に変換できるシンプルな設計が特徴です。フレームワーク(特定の処理の枠組みを提供するソフトウェア)の中でも、機械学習との相性のよさで人気があります。
たとえばハイパーパラメータの組み合わせが100通りあるとき、1台のマシンで順番に試すと100回分の時間がかかります。Rayを使えば、空いているCPUコアや複数台のマシンに自動で割り振って、コア数の分だけ並列に処理できます。後述の実測でも、4コアで約2倍速になることを確認しています。
似た用途のツールとの住み分けを整理すると、次のようになります。

Spark や Dask が「大規模データ処理」寄りなのに対し、Ray はML訓練やタスク並列・強化学習に強く、デコレータを付けるだけで始められる学習コストの低さが魅力です。
Ubuntu 24.04 への Ray インストール手順
Ray の最小要件は Python 3.9 以上です。Ubuntu 24.04 LTS には Python 3.12.3 が標準搭載されており、条件を満たしています。今回は ubuntu:24.04 の公式Dockerイメージ(Ubuntu 24.04.4 LTS / aarch64 / kernel 5.10.76-linuxkit)に Docker 20.10.12 環境でインストールしました。
注意:Ubuntu 24.04 は pip を直接実行できません
Ubuntu 24.04 では pip install を直接実行すると error: externally-managed-environment(PEP 668)で弾かれます。必ず python3 -m venv で仮想環境を作ってからインストールしてください。実際のエラーは後述の「よくあるエラー」で紹介します。
手順1:前提パッケージをインストールする
$ sudo apt install -y python3 python3-pip python3-venv curl
$ python3 –version
Python 3.12.3
手順2:仮想環境を作成して Ray をインストールする
"ray[default]" を指定すると、Ray 本体に加えて Ray Dashboard に必要な依存(aiohttp / prometheus_client など)もまとめて入ります。あとでダッシュボードを使うので、最初から [default] 付きがおすすめです。
$ source ray_env/bin/activate
(ray_env) $ pip install “ray[default]”
Collecting ray
Downloading ray-2.55.1-cp312-cp312-manylinux2014_aarch64…whl
Installing collected packages: … ray, aiohttp_cors, …
Successfully installed ray-2.55.1 aiohttp-3.14.1 …
Ubuntu 24.04.4 LTS + Python 3.12.3 の組み合わせで、Ray 2.55.1 のインストールが完了しました。aarch64(ARM)環境でも公式 wheel が用意されており、ビルドなしで入ります。
手順3:バージョンを確認する
2.55.1
(ray_env) $ ray –version
ray, version 2.55.1
実際に取得したバージョン構成は次のとおりです。

Ubuntu 22.04 でも動くが 24.04 を推奨
「手元が Ubuntu 22.04 なんだけど大丈夫?」という方も多いはずです。実際に ubuntu:22.04 と ubuntu:24.04 の両コンテナで標準 Python を確認したところ、22.04 は Python 3.10.12、24.04 は Python 3.12.3 でした。どちらも Ray の最小要件(Python 3.9以上)を満たすので動きますが、新しい Python のほうがライブラリ対応や性能改善が進んでいるため、これから始めるなら 24.04 LTS がおすすめです。

基本的な使い方 — @ray.remote で並列タスクを実行
Rayの最大の特徴は、既存のPython関数を1行の変更で分散タスクに変換できることです。効果を確かめるため、「0.1秒スリープして二乗を返す」関数を10個、直列と並列で実行して比較しました。
①直列との比較スクリプト
import ray, time
ray.init(num_cpus=4, include_dashboard=False)
# @ray.remote を付けると分散タスクになる
@ray.remote
def square(x):
time.sleep(0.1)
return x * x
start = time.time()
futures = [square.remote(i) for i in range(10)]
results = ray.get(futures) # 全タスクの完了を待つ
print(“results:”, results)
print(“parallel: %.3fs” % (time.time() – start))
ray.shutdown()
②実行結果
INFO worker.py:2012 — Started a local Ray instance.
results: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
parallel: 0.493s
# 同じ処理を直列の for ループで回すと 1.007s
10個のタスク(square(0)〜square(9))が、直列なら1.007秒かかるところを0.493秒(約2.04倍速)で完了しました。これは実際に Ubuntu 24.04 コンテナで Ray 2.55.1 を実行した結果です。

③ ray.cluster_resources() でリソースを確認する
Rayが認識しているリソースは ray.cluster_resources() で確認できます。今回の単一ノードでは次のように返ってきました(実測)。
{‘CPU’: 4.0, ‘memory’: 8666358580.0, ‘object_store_memory’: 3714153676.0, …}
④ Ray Actor — 状態を持つ分散オブジェクト
関数だけでなく、クラスを分散オブジェクト(Actor)にすることもできます。Actorは内部状態を持ち続けるため、カウンターやパラメータサーバーのような用途に向いています。実際に5回インクリメントすると、ちゃんと 5 が返りました。
@ray.remote
class Counter:
def __init__(self): self.count = 0
def increment(self): self.count += 1
def get(self): return self.count
counter = Counter.remote()
for _ in range(5): counter.increment.remote()
print(ray.get(counter.get.remote()))
5
Ray Dashboard の起動と使い方
Ray Dashboard は、クラスターのリソース使用率・ジョブ状況・ノード状態をブラウザから確認できるWebUIです。ポート8265でHTTPサーバーが立ち上がります。"ray[default]" でインストール済みなら追加作業は不要です。
手順1:ダッシュボード付きで Ray を起動する
Local node IP: 172.17.0.19
Ray runtime started.
To monitor and debug Ray, view the dashboard at 172.17.0.19:8265
VPSで使う場合の注意
VPS上でDashboardを開く場合は、ポート8265にファイアウォール(ufw)の穴を開けます: sudo ufw allow 8265/tcp。ただし Dashboard には認証がないため、本番では特定IPのみ許可するか、SSHポートフォワード(ssh -L 8265:localhost:8265 ...)経由でのアクセスを強く推奨します。
手順2:ブラウザでダッシュボードを開く
ブラウザで http://<サーバーのIP>:8265 にアクセスすると、Ray Dashboard が開きます。以下は実際に Ray 2.55.1 を起動し、Playwright で撮影した Overview 画面です。

右下の「Resource Status」に 0.0/5.0 CPU / 8.06GiB memory / 3.45GiB object_store_memory と、実際のリソースが表示されています。Overview からは以下が確認できます。
- Cluster utilization:クラスター全体のCPU・メモリ使用率
- Recent jobs:直近のジョブ一覧
- Cluster status / Resource Status:ノード数とリソースの空き状況
時系列グラフを出すには Prometheus + Grafana が必要
- 初期状態では「Set up Prometheus and Grafana for better Ray Dashboard experience」と表示され、CPU等の時系列グラフは非表示になっている
- これは仕様で、Prometheus と Grafana を別途立てて連携すると折れ線グラフが出るようになる
- まずは状態確認だけなら、グラフなしの初期状態でも十分使える
手順3:Jobs / Cluster タブを見る
Jobs タブでは、投入したジョブの状態・所要時間・タスク進捗が一覧できます。実際に2つのジョブを投入したところ、どちらも SUCCEEDED になり、所要時間(1秒838ミリ秒 / 2秒257ミリ秒)まで表示されました。

Cluster タブでは、接続中のノードごとのCPU・メモリ使用率や、Ray内部プロセス(DashboardAgent・RuntimeEnvAgent など)まで確認できます。今回は Head ノード(172.17.0.19)が1台で、CPU約4.5% / メモリ1.07GB中の11.68GB という実値が出ています。

2台以上のVPSでクラスターを組む
Rayの真価は、複数のマシンを束ねてスケールさせる点にあります。VPSを2台(Head ノード1台 + Worker ノード1台)用意するだけで、分散クラスターが構築できます。流れは次のとおりです。

手順1:Head ノード(司令塔)を起動する
実際に ray start --head を実行すると、Worker を参加させるためのコマンドが案内されます(IPは環境により変わります)。
Ray runtime started.
To add another node to this Ray cluster, run
ray start –address=’172.17.0.19:6379′
手順2:Worker ノードを参加させる
Ray runtime started.
手順3:ray status でクラスターを確認する
クラスターの状態は ray status で確認できます。今回の単一ノード(Head のみ)では、合計5.0 CPU・8.06GiB メモリが利用可能と表示されました(実測)。Worker を足すと、この CPU 数とメモリが合算されていきます。
======== Autoscaler status ========
Active:
1 node_8cb241e3e40d…feb100
Resources
0.0/5.0 CPU
0B/8.06GiB memory
0B/3.45GiB object_store_memory
VPSの選び方(クラスター構築時)
- Head ノードと Worker ノードは同じデータセンター内に置くとネットワーク遅延が最小になる
- Vultr の Tokyo リージョンなら複数インスタンス間のプライベートネットワークが使える
- 並列度はCPUコア数で決まるので、まずは vCPU の多いプランを Head + Worker で2台用意すると効果を体感しやすい
ML実践例 — ハイパーパラメータ探索(Ray Tune)
Rayのエコシステムには、ML向けの拡張ライブラリが揃っています。代表例がハイパーパラメータ自動探索の Ray Tune です。"ray[tune]" を追加インストールして使います。
Successfully installed ray[tune]
(ray_env) $ cat tune_demo.py
from ray import tune
def train_model(config):
lr = config[“lr”]
return {“accuracy”: 1.0 – (lr – 0.01)**2 * 10} # 仮の精度
tuner = tune.Tuner(train_model,
param_space={“lr”: tune.grid_search([0.001, 0.01, 0.1, 0.5])})
results = tuner.fit()
print(results.get_best_result(metric=”accuracy”, mode=”max”).config)
(ray_env) $ python3 tune_demo.py
{‘lr’: 0.01}
4通りの学習率(lr)を並列で探索し、Ray Tune が自動で lr=0.01(accuracy=1.0)をベストと判定しました。実際の探索結果は次のとおりです(実測)。

この例では仮の精度計算を使っていますが、実際のモデル(PyTorch・TensorFlow等)でも train_model の中身を置き換えるだけで同じ構造で使えます。組み合わせが増えるほど、CPUコアやノードを足して並列に探索できるのが Ray Tune の強みです。
よくあるエラーと解決策
エラー① externally-managed-environment
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install …
原因:Ubuntu 24.04 ではシステムPythonへの直接 pip install が PEP 668 で禁止されています。
解決策:python3 -m venv ray_env && source ray_env/bin/activate で仮想環境を作ってから実行します。
エラー② num_cpus must not be provided(既存クラスターへの接続時)
num_cpus and num_gpus must not be provided.
原因:すでに ray start --head でクラスターが動いている状態で、スクリプト側が ray.init(num_cpus=4) のようにCPU数を指定すると衝突します(実際に検証中に遭遇しました)。
解決策:既存クラスターに接続するときは ray.init(address="auto") とだけ書き、num_cpus は指定しません。ローカルで完結させたい場合は先に ray stop してから実行します。
エラー③ Address already in use(ポート競合)
$ ray stop
Stopped all Ray processes.
$ ray start –head
原因:Ray がすでに起動しています。
解決策:ray stop で既存プロセスを停止してから再起動します。
object store の警告について
コンテナや小メモリ環境では The object store is using /tmp/ray instead of /dev/shm because /dev/shm has only ... bytes available という警告が出ることがあります。性能に影響するため、Docker で動かす場合は --shm-size=2gb のように共有メモリを増やすと改善します。
まとめ
Ubuntu 24.04 LTS への Ray インストールと基本的な使い方を、実際にDockerコンテナで動かしながら解説しました。
- Ray 2.55.1 は
pip install "ray[default]"の1コマンドでインストール完了(Ubuntu 24.04.4 / Python 3.12.3 / aarch64 で確認) @ray.remoteを付けるだけで既存関数が分散タスクになる。4CPUで直列1.007秒 → 並列0.493秒(約2.04倍速)- 並列度はCPUコア数が上限。劇的に速くするにはvCPUの多いプランや複数ノードが要る
- Ray Dashboard(ポート8265)でジョブ・ノード・リソースをブラウザから監視できる(時系列グラフは Prometheus+Grafana 連携が必要)
- VPS 2台なら
ray start --head→ray start --addressでクラスター構築、Ray Tune で探索を並列化できる
本格的に分散ML環境を作るなら、同じデータセンター内に vCPU の多いVPSを複数台借りるのがおすすめです。Vultr の Tokyo リージョンはプライベートネットワーク付きで使え、DigitalOcean も時間課金で気軽に試せます。



コメント