Todos os produtos
Search
Central de documentação

DataWorks:Nó Lindorm Ray

Última atualização: Jun 27, 2026

O nó Lindorm Ray no DataWorks permite desenvolver e agendar periodicamente tarefas Python com o framework de computação distribuída Ray.

Visão geral

O mecanismo de computação do Lindorm oferece um serviço baseado no framework de computação distribuída Ray. Ele é compatível com as APIs Ray open source e suporta o modelo de programação Python para computação distribuída, machine learning e processamento de dados. Com o nó Lindorm Ray no DataWorks, você escreve código Python, configure comandos de envio do Ray e desenvolve, depura e agenda jobs do Ray periodicamente.

Limitações

  • Grupos de recursos: Os nós Lindorm Ray executam apenas em grupos de recursos Serverless.

  • Linguagem: O suporte é restrito a Python.

  • Execução: Não é possível execute linhas individuais ou blocos de código isolados. Envie o script inteiro para execução.

Pré-requisitos

  • Crie uma instância do Lindorm e associe-a a um workspace do DataWorks. Para mais informações, consulte Associar um recurso de computação do Lindorm.

  • Crie um grupo de recursos Ray no console do Lindorm. Para mais informações, consulte Usar um grupo de recursos RAY.

  • (Opcional, obrigatório para contas RAM) Adicione a conta RAM de desenvolvimento ao workspace correspondente e conceda a função Developer ou Workspace Administrator. A função Workspace Administrator possui permissões amplas; atribua-a com cautela. Para instruções sobre como adicionar membros, consulte Adicionar membros ao workspace.

    Nota

    Se você usar uma conta primária, pule esta etapa.

Criar um nó Lindorm Ray

Para instruções sobre como crie um nó, consulte Criar um nó Lindorm Ray.

Desenvolver um nó Lindorm Ray

Escreva o código Python no editor de código e configure o comando de envio do job na área de comando de envio do Ray.

Exemplo 1: Execução direta de código

Este exemplo utiliza o método de Monte Carlo para estimar o valor de pi com um nó Lindorm Ray.

Etapa 1: Escrever o código Python

No editor de código do nó Lindorm Ray, insira o seguinte código Python. O código usa o decorador @ray.remote do Ray para distribuir a computação entre vários workers para execução paralela e estima pi por meio de amostragem aleatória.

import ray
import random
import time
import sys

ray.init()

@ray.remote
def compute_points_in_circle(num_points: int) -> int:
    """
    Remote function: Randomly generates points in a unit square and counts how many fall within the unit circle.
    """
    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:
    """
    Use Ray to estimate pi in parallel.
    """
    start_time = time.time()
    points_per_worker = total_points // num_workers

    print(f"Estimating pi with total points: {total_points:,}, workers: {num_workers}")

    # Submit multiple remote tasks.
    tasks = [compute_points_in_circle.remote(points_per_worker) for _ in range(num_workers)]

    # Collect the results.
    results = ray.get(tasks)
    total_inside = sum(results)

    # Calculate pi.
    pi_estimate = 4.0 * total_inside / total_points

    duration = time.time() - start_time

    print("=" * 60)
    print("Ray Sample: Calculating π using Monte Carlo Method")
    print("=" * 60)
    print(f"Total samples: {total_points:,}")
    print(f"Points inside circle: {total_inside:,}")
    print(f"Estimated π: {pi_estimate:.10f}")
    print(f"Time taken: {duration:.4f} seconds")
    print(f"Workers used: {num_workers}")
    print("=" * 60)
    print("Calculation complete!")

    return pi_estimate

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

Etapa 2: Configure o comando de envio do Ray

Na área Ray submission command do nó, configure o seguinte comando de envio.

ray job submit \ 
--working-dir "." \
-- python calculate_pi.py 1000000
Importante
  • Se o parâmetro --working-dir estiver definido como um caminho local, o nome do arquivo no parâmetro -- python deve corresponder ao nome do nó ou ao nome de um arquivo de recurso referenciado no código Python.

  • Quando --working-dir for um caminho local, a plataforma controla automaticamente os valores dos parâmetros --address, --submission-id e --working-dir durante o envio do job. Caso você configure manualmente esses parâmetros no comando de envio, a plataforma substituirá suas definições. No entanto, se o valor fornecido para --working-dir for um caminho remoto que comece com https://, como um caminho do OSS, ele não será substituído.

Configuração do conteúdo do nó

Área de configuração

Parâmetro

Descrição

Editor de código

Código Python

Código Python que utiliza o framework Ray. APIs do Ray como ray.init() e o decorador @ray.remote são suportadas.

Comando de envio do Ray

Comando de envio

Comando de envio para o job do Ray. Formato: ray job submit [options] -- python script.py [args].

runtime-env-json

Opcional. Configure o ambiente de execução. Por exemplo, use o campo pip para instale pacotes de dependência Python adicionais. Exemplo: --runtime-env-json '{"pip": ["numpy", "pandas"]}'.

Parâmetros

Parâmetros a serem passados para o seu código. Use o formato ${var} para configure parâmetros dinâmicos.

Exemplo 2: Execução de código com arquivos de recurso

Se o seu job do Ray utilizar múltiplos módulos Python, faça o upload deles como arquivos de recurso do DataWorks e referencie-os no programa principal com a sintaxe ##@resource_reference.

Etapa 1: Crie e envie arquivos de recurso

Crie os dois seguintes arquivos de recurso Python no DataWorks.

Arquivo de recurso 1: circle_utils.py

"""
Utility module for calculating points within a circle.
"""
import random

def compute_points_in_circle(num_points: int) -> int:
    """
    Randomly generates points in a unit square and counts how many fall within the unit circle.
    """
    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

Arquivo de recurso 2: pi_estimator.py

"""
Utility module for estimating pi.
"""
import time

def estimate_pi(results, total_points: int) -> float:
    """
    Estimates pi based on the number of points inside the circle.
    """
    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: {total_points:,}")
    print(f"Points inside circle: {total_inside:,}")
    print(f"Estimated pi ≈ {pi_estimate:.6f}")
    print(f"Time taken: {duration:.2f} seconds")

    return pi_estimate

Etapa 2: Escrever o código do programa principal

No editor de código do nó Lindorm Ray, referencie os arquivos de recurso enviados com ##@resource_reference e escreva o código do programa principal.

##@resource_reference{"circle_utils.py"}
##@resource_reference{"pi_estimator.py"}
"""
Main program to calculate pi in parallel by using 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:
    """
    Remote function: A wrapper for the calculation function.
    """
    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"Estimating pi with total points: {total_points:,}, workers: {num_workers}")

    # Submit multiple remote tasks.
    tasks = [compute_points_in_circle_remote.remote(points_per_worker) for _ in range(num_workers)]

    # Get the results.
    results = ray.get(tasks)

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

    # Shut down Ray.
    ray.shutdown()

Etapa 3: Configure o comando de envio do Ray

Na área Ray submission command do nó, configure o seguinte comando de envio.

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

Ao referenciar arquivos de recurso do DataWorks, a plataforma os baixa automaticamente para o diretório de trabalho. Defina --working-dir "." especifica o diretório de trabalho atual para que os módulos referenciados possam ser importados corretamente.

Depurar um nó Lindorm Ray

  1. Configure as propriedades de execução.

    No painel Run Configuration, no lado direito do nó, configure Compute Resource, Lindorm Resource Group e Resource Group. A tabela a seguir descreve esses parâmetros.

    Parâmetro

    Descrição

    Compute Resource

    Selecione o recurso de computação do Lindorm associado.

    Lindorm Resource Group

    Selecione o grupo de recursos Ray criado no console do Lindorm.

    Resource Group

    Selecione um grupo de recursos Serverless que tenha passado no teste de conectividade de rede. Nós Lindorm Ray suportam apenas grupos de recursos Serverless.

    Parâmetros de script

    Se você defina variáveis usando o formato ${Nome do Parâmetro} ao configure o nó, configure Parameter name e Parameter Value na seção Script Parameters. A tarefa substitui dinamicamente as variáveis pelos seus valores em tempo de execução. Para mais informações, consulte Fontes de parâmetros de agendamento e suas expressões.

  2. Execute e depure o nó.

    Para execute a tarefa do nó, clique em Save e, em seguida, clique em Run.

Próximas etapas

  • Configure o agendamento do nó: Para execute o nó em uma programação periódica, configure a política de agendamento no painel Scheduling à direita.

  • Implantar o nó: Para execute a tarefa no ambiente de produção, implante o nó clicando no ícone image. Os nós são executados periodicamente somente após a implantação.