All Products
Search
Document Center

DataWorks:Lindorm Ray node

Last Updated:Apr 23, 2026

Lindorm Ray node di DataWorks memungkinkan Anda mengembangkan dan menjadwalkan tugas Python secara berkala menggunakan framework komputasi terdistribusi Ray. Topik ini menjelaskan alur kerja utama untuk mengembangkan tugas dengan Lindorm Ray node.

Ikhtisar

Lindorm compute engine menyediakan layanan komputasi berbasis framework komputasi terdistribusi Ray. Layanan ini kompatibel dengan API open-source Ray dan mendukung model pemrograman Python, sehingga ideal untuk kasus penggunaan seperti komputasi terdistribusi, pembelajaran mesin, dan pemrosesan data. Dengan Lindorm Ray node di DataWorks, Anda dapat menulis kode Python, mengonfigurasi perintah pengiriman Ray, serta melakukan pengembangan, debugging, dan penjadwalan berkala untuk pekerjaan Ray.

Batasan

  • Resource groups: Lindorm Ray node hanya dapat dijalankan pada resource group Serverless.

  • Bahasa: Lindorm Ray node hanya mendukung Python.

  • Eksekusi: Anda tidak dapat menjalankan satu baris atau blok kode tertentu. Seluruh skrip harus dikirimkan untuk dieksekusi.

Prasyarat

  • Anda telah membuat instans Lindorm dan mengaitkannya dengan ruang kerja DataWorks. Untuk informasi lebih lanjut, lihat Associate a Lindorm computing resource.

  • Anda telah membuat resource group Ray di konsol Lindorm. Untuk informasi lebih lanjut, lihat Use a RAY resource group.

  • (Opsional, diperlukan untuk akun RAM) Akun RAM untuk pengembangan telah ditambahkan ke ruang kerja yang sesuai dan diberikan peran Developer atau Workspace Administrator. Peran Workspace Administrator memiliki izin yang luas, jadi berikan dengan hati-hati. Untuk petunjuk cara menambahkan anggota, lihat Add workspace members.

    Catatan

    Jika Anda menggunakan akun utama, langkah ini dapat dilewati.

Create a Lindorm Ray node

Untuk petunjuk cara membuat node, lihat Create a Lindorm Ray node.

Kembangkan Lindorm Ray node

Untuk mengembangkan Lindorm Ray node, tulis kode Python di editor kode dan konfigurasikan perintah pengiriman pekerjaan di area perintah pengiriman Ray.

Contoh 1: Eksekusi kode langsung

Contoh ini memperkirakan nilai pi menggunakan metode Monte Carlo dengan Lindorm Ray node.

Langkah 1: Tulis kode Python

Di editor kode untuk Lindorm Ray node, masukkan kode Python berikut. Kode ini menggunakan dekorator Ray @ray.remote untuk mendistribusikan tugas komputasi ke beberapa worker guna eksekusi paralel, serta menggunakan pengambilan sampel acak untuk memperkirakan pi.

import ray
import random
import time
import sys

ray.init()

@ray.remote
def compute_points_in_circle(num_points: int) -> int:
    """
    Fungsi remote: Menghasilkan titik secara acak dalam persegi satuan dan menghitung berapa banyak yang jatuh di dalam lingkaran satuan.
    """
    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:
    """
    Gunakan Ray untuk memperkirakan pi secara paralel.
    """
    start_time = time.time()
    points_per_worker = total_points // num_workers

    print(f"Memperkirakan pi dengan total titik: {total_points:,}, worker: {num_workers}")

    # Kirim beberapa tugas remote.
    tasks = [compute_points_in_circle.remote(points_per_worker) for _ in range(num_workers)]

    # Kumpulkan hasilnya.
    results = ray.get(tasks)
    total_inside = sum(results)

    # Hitung pi.
    pi_estimate = 4.0 * total_inside / total_points

    duration = time.time() - start_time

    print("=" * 60)
    print("Contoh Ray: Menghitung π menggunakan Metode Monte Carlo")
    print("=" * 60)
    print(f"Total sampel: {total_points:,}")
    print(f"Titik di dalam lingkaran: {total_inside:,}")
    print(f"Perkiraan π: {pi_estimate:.10f}")
    print(f"Waktu yang dibutuhkan: {duration:.4f} detik")
    print(f"Jumlah worker: {num_workers}")
    print("=" * 60)
    print("Perhitungan selesai!")

    return pi_estimate

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

Langkah 2: Konfigurasi perintah pengiriman Ray

Di area Ray submission command node, konfigurasikan perintah pengiriman berikut.

ray job submit \ 
--working-dir "." \
-- python calculate_pi.py 1000000
Penting
  • Jika parameter --working-dir diatur ke path lokal, nama file dalam parameter -- python harus sesuai dengan nama node atau nama file resource yang dirujuk dalam kode Python.

  • Jika --working-dir adalah path lokal, platform secara otomatis mengontrol nilai parameter --address, --submission-id, dan --working-dir selama pengiriman pekerjaan. Jika Anda mengonfigurasi parameter ini secara manual dalam perintah pengiriman, platform akan mengganti pengaturan Anda. Namun, jika nilai yang Anda berikan untuk --working-dir adalah path remote yang dimulai dengan https://, seperti path OSS, maka nilai tersebut tidak diganti.

Konfigurasi konten node

Area konfigurasi

Parameter

Deskripsi

Code editor

Python code

Kode Python yang menggunakan framework Ray. API Ray seperti ray.init() dan dekorator @ray.remote didukung.

Ray submission command

Submission command

Perintah pengiriman untuk pekerjaan Ray. Formatnya adalah ray job submit [options] -- python script.py [args].

runtime-env-json

Opsional. Mengonfigurasi lingkungan runtime. Misalnya, Anda dapat menggunakan bidang pip untuk menginstal paket dependensi Python tambahan. Contoh: --runtime-env-json '{"pip": ["numpy", "pandas"]}'.

Parameters

Parameter yang diteruskan ke kode Anda. Anda dapat mengonfigurasi parameter ini sebagai parameter dinamis dengan menggunakan format ${var}.

Contoh 2: Eksekusi kode dengan file resource

Jika pekerjaan Ray Anda menggunakan beberapa modul Python, Anda dapat mengunggahnya sebagai file resource DataWorks dan merujuknya di program utama menggunakan sintaksis ##@resource_reference.

Langkah 1: Buat dan unggah file resource

Buat dua file resource Python berikut di DataWorks.

File resource 1: circle_utils.py

"""
Modul utilitas untuk menghitung titik di dalam lingkaran.
"""
import random

def compute_points_in_circle(num_points: int) -> int:
    """
    Menghasilkan titik secara acak dalam persegi satuan dan menghitung berapa banyak yang jatuh di dalam lingkaran satuan.
    """
    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

File resource 2: pi_estimator.py

"""
Modul utilitas untuk memperkirakan pi.
"""
import time

def estimate_pi(results, total_points: int) -> float:
    """
    Memperkirakan pi berdasarkan jumlah titik di dalam lingkaran.
    """
    start_time = time.time()
    total_inside = sum(results)
    pi_estimate = 4.0 * total_inside / total_points
    duration = time.time() - start_time

    print(f"Total titik: {total_points:,}")
    print(f"Titik di dalam lingkaran: {total_inside:,}")
    print(f"Perkiraan pi ≈ {pi_estimate:.6f}")
    print(f"Waktu yang dibutuhkan: {duration:.2f} detik")

    return pi_estimate

Langkah 2: Tulis kode program utama

Di editor kode Lindorm Ray node, rujuk file resource yang diunggah menggunakan ##@resource_reference dan tulis kode program utama.

##@resource_reference{"circle_utils.py"}
##@resource_reference{"pi_estimator.py"}
"""
Program utama untuk menghitung pi secara paralel menggunakan 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:
    """
    Fungsi remote: Wrapper untuk fungsi perhitungan.
    """
    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"Memperkirakan pi dengan total titik: {total_points:,}, worker: {num_workers}")

    # Kirim beberapa tugas remote.
    tasks = [compute_points_in_circle_remote.remote(points_per_worker) for _ in range(num_workers)]

    # Dapatkan hasilnya.
    results = ray.get(tasks)

    # Hitung pi.
    estimated_pi = estimate_pi(results, total_points)

    # Matikan Ray.
    ray.shutdown()

Langkah 3: Konfigurasi perintah pengiriman Ray

Di area Ray submission command node, konfigurasikan perintah pengiriman berikut.

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

Saat Anda merujuk file resource DataWorks, platform secara otomatis mengunduhnya ke direktori kerja. Menyetel parameter --working-dir "." menentukan direktori kerja saat ini, yang memastikan Anda dapat mengimpor modul yang dirujuk dengan benar.

Debug Lindorm Ray node

  1. Konfigurasi properti run.

    Di panel Run Configuration di sisi kanan node, konfigurasikan Compute Resource, Lindorm Resource Group, dan Resource Group. Tabel berikut menjelaskan parameter-parameter ini.

    Parameter

    Description

    Compute Resource

    Pilih resource komputasi Lindorm yang terkait.

    Lindorm Resource Group

    Pilih kelompok sumber daya Ray yang telah Anda buat di Konsol Lindorm.

    Resource Group

    Pilih kelompok sumber daya Serverless yang telah lulus uji konektivitas jaringan. Node Lindorm Ray hanya mendukung kelompok sumber daya Serverless.

    Script parameters

    Jika Anda menentukan variabel menggunakan format ${Parameter Name} saat mengonfigurasi node, konfigurasikan Parameter name dan Parameter Value di bagian Script Parameters. Tugas tersebut kemudian akan mengganti variabel secara dinamis dengan nilai-nilainya pada waktu proses. Untuk informasi selengkapnya, lihat Sumber parameter penjadwalan dan ekspresinya.

  2. Jalankan dan debug node.

    Untuk mengeksekusi tugas node, klik Save lalu klik Run.

Langkah berikutnya

  • Configure node scheduling: Untuk menjalankan node sesuai jadwal berkala, konfigurasikan kebijakan penjadwalan di panel Scheduling di sisi kanan.

  • Deploy the node: Untuk menjalankan tugas di lingkungan produksi, deploy node dengan mengklik ikon image. Node hanya akan berjalan secara berkala setelah dideploy.