すべてのプロダクト
Search
ドキュメントセンター

DataWorks:Lindorm Ray ノード

最終更新日:Apr 04, 2026

DataWorks の Lindorm Ray ノードを使用すると、Ray 分散コンピューティングフレームワークを使用して Python ジョブを開発し、定期的にスケジュールできます。このトピックでは、Lindorm Ray ノードでジョブを開発するためのワークフローの概要を説明します。

概要

Lindorm コンピュートエンジンは、Ray 分散コンピューティングフレームワークに基づくコンピューティングサービスを提供します。オープンソースの Ray API と互換性があり、分散コンピューティング、機械学習、データ処理などのシナリオ向けの Python プログラミングモデルをサポートしています。DataWorks の Lindorm Ray ノードを使用すると、オンラインで Python コードを記述し、Ray 送信コマンドを設定して、Ray ジョブの開発、デバッグ、定期的なスケジューリングを行うことができます。

制限事項

  • リソースグループ:Lindorm Ray ノードは、Serverless リソースグループでのみ実行できます。

  • 言語:Lindorm Ray ノードは Python 言語のみをサポートします。

  • 実行:コードを 1 行またはブロック単位で実行することはできません。ジョブ全体を送信して実行する必要があります。

前提条件

  • Lindorm インスタンスを作成し、ご利用の DataWorks ワークスペースにバインド済みであること。詳細については、「Lindorm コンピュートリソースのバインド」をご参照ください。

  • Lindorm コンソールで Ray リソースグループを作成済みであること。詳細については、「RAY リソースグループの使用」をご参照ください。

  • (任意) このステップは、RAM アカウントを使用している場合にのみ必要です。ジョブ開発用の RAM アカウントを対応するワークスペースに追加し、[開発者] または [ワークスペース管理者] ロールを付与する必要があります。ワークスペース管理者ロールには広範な権限があるため、慎重に付与してください。メンバーの追加方法の詳細については、「ワークスペースへのメンバーの追加」をご参照ください。

    説明

    メインアカウントを使用している場合は、このステップをスキップできます。

Lindorm Ray ノードの作成

手順については、「Lindorm Ray ノードの作成」をご参照ください。

Lindorm Ray ノードの開発

Lindorm Ray ノードの開発は、コードエディターでの Python コードの記述と、Ray 送信コマンドセクションでのジョブ送信コマンドの設定の 2 つの部分で構成されます。

例 1:Python コードの実行

この例では、Lindorm Ray ノードを使用して、モンテカルロ法で円周率 (π) の値を推定します。

ステップ 1:Python コードの記述

Lindorm Ray ノードのコードエディターに、次の Python コードを記述します。このコードは @ray.remote デコレーターを使用して、サンプリング計算を複数のワーカーに分散させます。

import ray
import random
import time
import sys

ray.init()

@ray.remote
def compute_points_in_circle(num_points: int) -> int:
    """
    単位正方形内にランダムな点を生成し、単位円内に収まる点の数をカウントするリモート関数。
    """
    inside = 0
    for _ in range(num_points):
        x = random.uniform(0, 1)
        y = random.uniform(0, 1)
        if x * x + y * y <= 1:
            inside += 1
    return inside

def estimate_pi(total_points: int, num_workers: int = 4) -> float:
    """
    Ray を使用して円周率 (π) を並列で推定します。
    """
    start_time = time.time()
    points_per_worker = total_points // num_workers

    print(f"円周率 (π) の推定を開始します。総ポイント数:{total_points:,}、ワーカー数:{num_workers}")

    # 複数のリモートタスクを送信します。
    tasks = [compute_points_in_circle.remote(points_per_worker) for _ in range(num_workers)]

    # 結果を収集します。
    results = ray.get(tasks)
    total_inside = sum(results)

    # 円周率 (π) を計算します。
    pi_estimate = 4.0 * total_inside / total_points

    duration = time.time() - start_time

    print("=" * 60)
    print("Ray サンプル:モンテカルロ法による円周率 (π) の計算")
    print("=" * 60)
    print(f"総サンプル数:{total_points:,}")
    print(f"円内のポイント数:{total_inside:,}")
    print(f"推定された円周率 (π):{pi_estimate:.10f}")
    print(f"所要時間:{duration:.4f} 秒")
    print(f"使用されたワーカー数:{num_workers}")
    print("=" * 60)
    print("計算完了!")

    return pi_estimate

if __name__ == "__main__":
    estimated_pi = estimate_pi(total_points=int(sys.argv[1]), num_workers=4)
    ray.shutdown()

ステップ 2:送信コマンドの設定

ノードの [Ray 送信コマンド] セクションで、次の送信コマンドを設定します。

ray job submit \ 
--working-dir "." \
-- python calculate_pi.py 1000000
重要
  • --working-dir パラメーターをローカルパスに設定した場合、-- python 引数のファイル名は、ノード名または参照されるリソースファイルのいずれかと一致する必要があります。

  • --working-dir がローカルパスの場合、プラットフォームはジョブ送信中に --address--submission-id、および --working-dir パラメーターを自動的に管理し、上書きします。手動で設定した値は無視されます。ただし、--working-dirhttps:// で始まる OSS パスなどのリモートパスに設定されている場合、プラットフォームは上書きしません。

ノード設定

次のパラメーターの説明に基づいて、Lindorm Ray ノードを設定します。

設定エリア

パラメーター

説明

コードエディター

Python コード

Ray フレームワークを使用する Python コードを記述します。ray.init()@ray.remote デコレーターなどの Ray API がサポートされています。

Ray 送信コマンド

送信コマンド

Ray ジョブの送信コマンドを設定します。コマンドのフォーマットは ray job submit [options] -- python script.py [args] です。

runtime-env-json

任意。実行環境を設定します。たとえば、pip フィールドを使用して追加の Python 依存関係をインストールします:--runtime-env-json '{"pip": ["numpy", "pandas"]}'

パラメーター

コードに渡すパラメーターを指定します。パラメーターは ${var} のような動的パラメータとして設定できます。

例 2:リソースファイルの使用

Ray ジョブに複数の Python モジュールファイルが含まれている場合、共通のモジュールを DataWorks リソースファイルとしてアップロードし、##@resource_reference 構文を使用してメインプログラムで参照できます。

ステップ 1:リソースファイルの作成とアップロード

DataWorks で、次の 2 つの Python リソースファイルを作成します。

リソースファイル 1:circle_utils.py

"""
円内のポイントを計算するためのユーティリティモジュール。
"""
import random

def compute_points_in_circle(num_points: int) -> int:
    """
    単位正方形内にランダムな点を生成し、単位円内に収まる点の数をカウントします。
    """
    inside = 0
    for _ in range(num_points):
        x = random.uniform(0, 1)
        y = random.uniform(0, 1)
        if x * x + y * y <= 1:
            inside += 1
    return inside

リソースファイル 2:pi_estimator.py

"""
円周率 (π) を推定するためのユーティリティモジュール。
"""
import time

def estimate_pi(results, total_points: int) -> float:
    """
    円内のポイント数に基づいて円周率 (π) を推定します。
    """
    start_time = time.time()
    total_inside = sum(results)
    pi_estimate = 4.0 * total_inside / total_points
    duration = time.time() - start_time

    print(f"総ポイント数:{total_points:,}")
    print(f"円内のポイント数:{total_inside:,}")
    print(f"推定された円周率 (π) ≈ {pi_estimate:.6f}")
    print(f"所要時間:{duration:.2f} 秒")

    return pi_estimate

ステップ 2:メインプログラムコードの記述

Lindorm Ray ノードのコードエディターで、##@resource_reference を使用してアップロードされたリソースファイルを参照し、メインプログラムのコードを記述します。

##@resource_reference{"circle_utils.py"}
##@resource_reference{"pi_estimator.py"}
"""
Ray を使用して円周率 (π) を並列で計算するメインプログラム。
"""
import sys
import ray
from circle_utils import compute_points_in_circle
from pi_estimator import estimate_pi

@ray.remote
def compute_points_in_circle_remote(num_points: int) -> int:
    """
    計算関数をラップするリモート関数。
    """
    return compute_points_in_circle(num_points)

if __name__ == "__main__":
    ray.init()

    total_points = int(sys.argv[1])
    num_workers = 4
    points_per_worker = total_points // num_workers

    print(f"円周率 (π) の推定を開始します。総ポイント数:{total_points:,}、ワーカー数:{num_workers}")

    # 複数のリモートタスクを送信します。
    tasks = [compute_points_in_circle_remote.remote(points_per_worker) for _ in range(num_workers)]

    # 結果を取得します。
    results = ray.get(tasks)

    # 円周率 (π) を計算します。
    estimated_pi = estimate_pi(results, total_points)

    # Ray をシャットダウンします。
    ray.shutdown()

ステップ 3:送信コマンドの設定

ノードの [Ray 送信コマンド] セクションで、次の送信コマンドを設定します。

ray job submit \
--working-dir "." \
-- python main.py 1000000
説明

DataWorks リソースファイルを参照すると、プラットフォームは自動的にファイルを作業ディレクトリにダウンロードします。その後、--working-dir "." パラメーターを使用して現在の作業ディレクトリを指定し、コード内で参照モジュールをインポートできます。

Lindorm Ray ノードのデバッグ

  1. 実行設定の構成

    ノードの右側にある Run Configuration パネルで、[コンピュートリソース][Lindorm リソースグループ]、および [リソースグループ] を設定します。パラメーターについては、次の表で説明します。

    パラメーター

    説明

    コンピューティングリソース

    バインドした Lindorm コンピュートリソースを選択します。

    Lindorm リソースグループ

    Lindorm コンソールで作成した Ray リソースグループを選択します。

    リソースグループ

    ネットワーク接続テストに合格した Serverless リソースグループを選択します。Lindorm Ray ノードは Serverless リソースグループのみをサポートします。

    スクリプトパラメーター

    ${ParameterName} 形式で変数を定義した場合は、[スクリプトパラメーター] セクションで対応する [パラメーター名][パラメーター値] を設定します。これらの変数は、実行時に実際の値に置き換えられます。詳細については、「スケジューリングパラメーターのソースと式」をご参照ください。

  2. デバッグのためのノードの実行

    [保存] をクリックし、次に [実行] をクリックしてノードを実行します。

次のステップ

  • ノードのスケジューリング設定:ノードを定期的に実行する必要がある場合は、右側の [スケジューリング設定] パネルで [スケジューリングポリシー] やその他のスケジューリングプロパティを設定します。

  • ノードの公開:ジョブを本番環境で実行する必要がある場合は、image アイコンをクリックして公開プロセスを開始します。ノードをスケジュールに従って実行するには、本番環境に公開する必要があります。