RAY リソースグループを使用すると、Lindorm が管理するマネージド Ray クラスター上で分散型データ処理ジョブを実行できます。本ガイドでは、Ray クライアントのセットアップ、ジョブの送信、およびその進行状況のモニタリング手順について説明します。
RAY リソースグループは 招待プレビュー です。アクセスをご希望の場合は、Lindorm テクニカルサポート(DingTalk ID: s0s3eg3)までご連絡ください。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
LindormTable 有効
Lindorm の コンピュートエンジン が有効になっていること
RAY リソースグループが有効化されていること
クライアントの IP アドレスが Lindorm ホワイトリスト に登録されていること
環境のセットアップ
Lindorm コンソール にログインします。左上隅から、インスタンスがデプロイされているリージョンを選択します。インスタンス一覧 ページで、インスタンス ID をクリックするか、操作 列の 管理 をクリックします。
インスタンス詳細 ページで、構成 セクションに移動し、コンピュートエンジン の 操作 列から リソースグループ をクリックします。

リソースグループ詳細 ページで、RAY リソースグループの 操作 列にある WebUI にカーソルを合わせると、Ray ダッシュボードの URL が表示されます。例:
http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/この URL を保存してください。ジョブ送信時に
RAY_ADDRESSとして使用します。Ray クライアントをインストールします。
pip3 install ray[default]インストールを確認します。
ray --version
ジョブの送信
ステップ 1:ジョブスクリプトの作成
以下のサンプルスクリプト ray-oss-example.py は、Object Storage Service (OSS) バケットからファイルを読み込み、処理結果を再び OSS にアップロードします。このスクリプトを ray_job_test というディレクトリに保存してください。
import ray
import sys
from ossfs import OSSFileSystem
import tempfile
import ossfs
ray.init()
@ray.remote
def process(oss_key: str, oss_secret: str, filename: str):
print("Processing %s" % filename)
fs = oss_filesystem(oss_key, oss_secret)
# ローカルにダウンロード
tmp_filename = tempfile.NamedTemporaryFile(delete=False).name
fs.get_file(filename, tmp_filename)
print("tmp file name is %s" % tmp_filename)
with open(tmp_filename, 'rb') as f:
content = f.read()
print(content)
# OSS にアップロード
result_remote_filename = f"{filename}_result"
fs.put_file(tmp_filename, result_remote_filename)
return "success"
def oss_filesystem(oss_key: str, oss_secret: str) -> OSSFileSystem:
return ossfs.OSSFileSystem(
endpoint="oss-cn-hangzhou-internal.aliyuncs.com", # OSS エンドポイント
key=oss_key,
secret=oss_secret
)
if __name__ == "__main__":
if (len(sys.argv) < 2):
raise ValueError("python %s oss_key oss_secret" % __file__)
oss_key = sys.argv[1]
oss_secret = sys.argv[2]
base = "/test-bucket/test-data/" # /<bucketname>/path
fs = oss_filesystem(oss_key, oss_secret)
files = [item['name'] for item in fs.ls(base) if item['name'] != base]
for file in files:
print("Head processing %s" % file)
result = ray.get(process.remote(oss_key, oss_secret, file))
print(f"{file} is processed, status is {result}")
ray.shutdown()スクリプトのパラメーター
| パラメーター | 例 | 説明 |
|---|---|---|
endpoint | oss-cn-hangzhou-internal.aliyuncs.com | OSS エンドポイントです。詳細については、「リージョンとエンドポイント」をご参照ください。 |
base | /test-bucket/test-data/ | 処理対象の OSS パスです。形式は /<bucketname>/path です。 |
@ray.remote() アノテーションを使用して、各タスクまたはアクターの計算リソース (例: num_cpus や num_gpus) を宣言します。詳細については、「タスクまたはアクターのリソース要件の指定」をご参照ください。また Ray は、複数のノードにまたがる異種リソース (CPU と GPU) でタスクをパイプラインとしてスケジューリングすることもサポートしており、これにより、従来のバッチ処理と比較してスループットを大幅に向上させることができます。
ステップ 2:ジョブの送信
ray_job_test ディレクトリから、以下のコマンドを実行します。
ray job submit --runtime-env-json '{"working_dir": "."}' --address <RAY_ADDRESS> -- python my_job.py oss_key oss_secret以下のプレースホルダーを置き換えてください。
| プレースホルダー | 例 | 説明 |
|---|---|---|
<RAY_ADDRESS> | http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ | 環境のセットアップ で取得した Ray ダッシュボード URL です。 |
my_job.py | ray-oss-example.py | 実行するスクリプトファイルの名前です。 |
oss_key | yourAccessKeyID | OSS へのアクセスに使用する Alibaba Cloud アカウントまたは Resource Access Management (RAM) ユーザーの AccessKey ID です。「AccessKey の取得」をご参照ください。 |
oss_secret | yourAccessKeySecret | AccessKey ID に対応する AccessKey Secret です。 |
実行例
ray job submit --runtime-env-json '{"pip": ["ossfs"], "working_dir": "."}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ -- python ray-oss-example.py yourAccessKeyID yourAccessKeySecretコマンド実行後、送信されたジョブの SUBMISSION_ID(例:raysubmit_gmSnPSFqmEXG****)が返されます。この ID を使用して、ジョブのステータス確認、ログの閲覧、またはジョブの停止を行います。
ジョブのモニタリングと管理
ブラウザで Ray ダッシュボード URL を開くと、RAY ダッシュボードを使用して、ジョブのステータス、ジョブログ、ジョブ一覧をリアルタイムでモニタリングできます。
また、Ray ではジョブの表示および管理に以下の 3 つの方法が提供されています。
| 方法 | 推奨用途 |
|---|---|
| CLI | スクリプトおよび自動化 |
| Python SDK | アプリケーションコードからのプログラムによるアクセス |
| REST API | 任意の環境からの HTTP ベースのアクセス |
CLI の使用
Ray は、ジョブを表示および管理するための ray job サブコマンドを提供します。完全なコマンドリファレンスについては、Ray ジョブ CLI API リファレンスをご参照ください。
以下の例では、次の構文を使用します。
ray job <サブコマンド> --address <RAY_ADDRESS> [SUBMISSION_ID]ジョブのステータス確認
ray job status --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****ジョブログの表示
ray job logs --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****すべてのジョブの一覧表示
ray job list --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ジョブの停止
ray job stop --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****Python SDK
Ray は、プログラムによるジョブ管理用に JobSubmissionClient を提供します。詳細については、「Python SDK API リファレンス」をご参照ください。
REST API
Ray は、HTTP ベースのジョブ管理用の REST API を提供します。エントリポイントとして Ray ダッシュボード URL を使用します。詳細については、「Ray ジョブ REST API リファレンス」をご参照ください。