本文へ移動
cccskills
無料GitHub で公開

ray-train

Orquestração de treinamento distribuído em clusters. Escala PyTorch/TensorFlow/HuggingFace do laptop para milhares de nós. Ajuste de hiperparâmetros integrado com Ray Tune, tolerância a falhas, escalabilidade elástica. Use ao treinar modelos massivos em múltiplas máquinas ou executar varreduras distribuídas de hiperparâmetros.

インストール方法を見る

含まれるファイル(2)

  • SKILL.md10.8 KB
  • references/multi-node.md13.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Ray Train - Orquestração de Treinamento Distribuído

Início rápido

Ray Train escala treinamento de aprendizado de máquina de GPU única para clusters multi-nó com alterações mínimas no código.

Instalação:

pip install -U "ray[train]"

Treinamento básico com PyTorch (nó único):

import ray
from ray import train
from ray.train import ScalingConfig
from ray.train.torch import TorchTrainer
import torch
import torch.nn as nn

# Define função de treinamento
def train_func(config):
    # Seu código PyTorch normal
    model = nn.Linear(10, 1)
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

    # Prepare para distribuído (Ray gerencia alocação de devices)
    model = train.torch.prepare_model(model)

    for epoch in range(10):
        # Seu loop de treinamento
        output = model(torch.randn(32, 10))
        loss = output.sum()
        loss.backward()
        optimizer.step()
        optimizer.zero_grad()

        # Report métricas (logged automaticamente)
        train.report({"loss": loss.item(), "epoch": epoch})

# Execute treinamento distribuído
trainer = TorchTrainer(
    train_func,
    scaling_config=ScalingConfig(
        num_workers=4,  # 4 GPUs/workers
        use_gpu=True
    )
)

result = trainer.fit()
print(f"Final loss: {result.metrics['loss']}")

Pronto! Ray gerencia:

  • Coordenação distribuída
  • Alocação de GPU
  • Tolerância a falhas
  • Checkpointing
  • Agregação de métricas

Fluxos de trabalho comuns

Fluxo 1: Escale código PyTorch existente

Código original com GPU única:

model = MyModel().cuda()
optimizer = torch.optim.Adam(model.parameters())

for epoch in range(epochs):
    for batch in dataloader:
        loss = model(batch)
        loss.backward()
        optimizer.step()

Versão Ray Train (escala para multi-GPU/multi-nó):

from ray.train.torch import TorchTrainer
from ray import train

def train_func(config):
    model = MyModel()
    optimizer = torch.optim.Adam(model.parameters())

    # Prepare para distribuído (alocação de device automática)
    model = train.torch.prepare_model(model)
    dataloader = train.torch.prepare_data_loader(dataloader)

    for epoch in range(epochs):
        for batch in dataloader:
            loss = model(batch)
            loss.backward()
            optimizer.step()

            # Report métricas
            train.report({"loss": loss.item()})

# Escale para 8 GPUs
trainer = TorchTrainer(
    train_func,
    scaling_config=ScalingConfig(num_workers=8, use_gpu=True)
)
trainer.fit()

Benefícios: Mesmo código roda em 1 GPU ou 1000 GPUs

Fluxo 2: Integração com Transformers HuggingFace

from ray.train.huggingface import TransformersTrainer
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments

def train_func(config):
    # Carregue modelo e tokenizer
    model = AutoModelForCausalLM.from_pretrained("gpt2")
    tokenizer = AutoTokenizer.from_pretrained("gpt2")

    # Argumentos de treinamento (API HuggingFace)
    training_args = TrainingArguments(
        output_dir="./output",
        num_train_epochs=3,
        per_device_train_batch_size=8,
        learning_rate=2e-5,
    )

    # Ray gerencia automaticamente o treinamento distribuído
    from transformers import Trainer
    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=train_dataset,
    )

    trainer.train()

# Escale para multi-nó (2 nós × 8 GPUs = 16 workers)
trainer = TransformersTrainer(
    train_func,
    scaling_config=ScalingConfig(
        num_workers=16,
        use_gpu=True,
        resources_per_worker={"GPU": 1}
    )
)

result = trainer.fit()

Fluxo 3: Ajuste de hiperparâmetros com Ray Tune

from ray import tune
from ray.train.torch import TorchTrainer
from ray.tune.schedulers import ASHAScheduler

def train_func(config):
    # Use hiperparâmetros do config
    lr = config["lr"]
    batch_size = config["batch_size"]

    model = MyModel()
    optimizer = torch.optim.Adam(model.parameters(), lr=lr)

    model = train.torch.prepare_model(model)

    for epoch in range(10):
        # Loop de treinamento
        loss = train_epoch(model, optimizer, batch_size)
        train.report({"loss": loss, "epoch": epoch})

# Defina espaço de busca
param_space = {
    "lr": tune.loguniform(1e-5, 1e-2),
    "batch_size": tune.choice([16, 32, 64, 128])
}

# Execute 20 trials com parada antecipada
tuner = tune.Tuner(
    TorchTrainer(
        train_func,
        scaling_config=ScalingConfig(num_workers=4, use_gpu=True)
    ),
    param_space=param_space,
    tune_config=tune.TuneConfig(
        num_samples=20,
        scheduler=ASHAScheduler(metric="loss", mode="min")
    )
)

results = tuner.fit()
best = results.get_best_result(metric="loss", mode="min")
print(f"Best hyperparameters: {best.config}")

Resultado: Busca distribuída de hiperparâmetros no cluster

Fluxo 4: Checkpointing e tolerância a falhas

from ray import train
from ray.train import Checkpoint

def train_func(config):
    model = MyModel()
    optimizer = torch.optim.Adam(model.parameters())

    # Tente retomar de checkpoint
    checkpoint = train.get_checkpoint()
    if checkpoint:
        with checkpoint.as_directory() as checkpoint_dir:
            state = torch.load(f"{checkpoint_dir}/model.pt")
            model.load_state_dict(state["model"])
            optimizer.load_state_dict(state["optimizer"])
            start_epoch = state["epoch"]
    else:
        start_epoch = 0

    model = train.torch.prepare_model(model)

    for epoch in range(start_epoch, 100):
        loss = train_epoch(model, optimizer)

        # Salve checkpoint a cada 10 epochs
        if epoch % 10 == 0:
            checkpoint = Checkpoint.from_directory(
                train.get_context().get_trial_dir()
            )
            torch.save({
                "model": model.state_dict(),
                "optimizer": optimizer.state_dict(),
                "epoch": epoch
            }, checkpoint.path / "model.pt")

            train.report({"loss": loss}, checkpoint=checkpoint)

trainer = TorchTrainer(
    train_func,
    scaling_config=ScalingConfig(num_workers=8, use_gpu=True)
)

# Retoma automaticamente de checkpoint se o treinamento falhar
result = trainer.fit()

Fluxo 5: Treinamento multi-nó

from ray.train import ScalingConfig

# Conecte ao cluster Ray
ray.init(address="auto")  # Or ray.init("ray://head-node:10001")

# Treine em 4 nós × 8 GPUs = 32 workers
trainer = TorchTrainer(
    train_func,
    scaling_config=ScalingConfig(
        num_workers=32,
        use_gpu=True,
        resources_per_worker={"GPU": 1, "CPU": 4},
        placement_strategy="SPREAD"  # Distribua entre nós
    )
)

result = trainer.fit()

Inicie cluster Ray:

# No nó head
ray start --head --port=6379

# Nos nós worker
ray start --address=<head-node-ip>:6379

Quando usar vs alternativas

Use Ray Train quando:

  • Treinar em múltiplas máquinas (multi-nó)
  • Precisar de ajuste de hiperparâmetros em escala
  • Quiser tolerância a falhas (reinicialização automática de workers)
  • Escalabilidade elástica (adicionar/remover nós durante treinamento)
  • Framework unificado (mesmo código para PyTorch/TF/HF)

Principais vantagens:

  • Orquestração multi-nó: Configuração multi-nó mais fácil
  • Integração Ray Tune: Ajuste de hiperparâmetros da melhor categoria
  • Tolerância a falhas: Recuperação automática de falhas
  • Elástico: Adicione/remova nós sem reiniciar
  • Agnóstico a framework: PyTorch, TensorFlow, HuggingFace, XGBoost

Use alternativas em vez disso:

  • Accelerate: Multi-GPU em nó único, mais simples
  • PyTorch Lightning: Abstrações de alto nível, callbacks
  • DeepSpeed: Máxima performance, setup complexo
  • DDP bruto: Máximo controle, overhead mínimo

Problemas comuns

Problema: Cluster Ray não conectando

Verifique status de ray:

ray status

# Deve mostrar:
# - Nodes: 4
# - GPUs: 32
# - Workers: Ready

Se não conectado:

# Reinicie nó head
ray stop
ray start --head --port=6379 --dashboard-host=0.0.0.0

# Reinicie nós worker
ray stop
ray start --address=<head-ip>:6379

Problema: Memória insuficiente

Reduza workers ou use gradient accumulation:

scaling_config=ScalingConfig(
    num_workers=4,  # Reduza de 8
    use_gpu=True
)

# Em train_func, acumule gradientes
for i, batch in enumerate(dataloader):
    loss = model(batch) / accumulation_steps
    loss.backward()

    if (i + 1) % accumulation_steps == 0:
        optimizer.step()
        optimizer.zero_grad()

Problema: Treinamento lento

Verifique se carregamento de dados é gargalo:

import time

def train_func(config):
    for epoch in range(epochs):
        start = time.time()
        for batch in dataloader:
            data_time = time.time() - start
            # Train...
            start = time.time()
            print(f"Data loading: {data_time:.3f}s")

Se carregamento de dados é lento, aumente workers:

dataloader = DataLoader(dataset, num_workers=8)

Tópicos avançados

Setup multi-nó: Veja references/multi-node.md para deployment de cluster Ray em AWS, GCP, Kubernetes e SLURM.

Ajuste de hiperparâmetros: Veja references/hyperparameter-tuning.md para integração Ray Tune, algoritmos de busca (Optuna, HyperOpt) e population-based training.

Loops de treinamento customizados: Veja references/custom-loops.md para uso avançado de Ray Train, backends customizados e integração com outros frameworks.

Requisitos de hardware

  • Nó único: 1+ GPUs (ou CPUs)
  • Multi-nó: 2+ máquinas com conectividade de rede
  • Cloud: AWS, GCP, Azure (autoscaling de Ray)
  • On-prem: Kubernetes, clusters SLURM

Aceleradores suportados:

  • NVIDIA GPUs (CUDA)
  • AMD GPUs (ROCm)
  • TPUs (Google Cloud)
  • CPUs

Recursos

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Especialista em construir experiências 3D para a web - Three.js, React Three Fiber, Spline, WebGL e cenas 3D interativas. Cobre configuradores de produtos, portfólios 3D, websites imersivos e adição de profundidade às experiências web. Use quando: website 3D, three.js, WebGL, react three fiber, experiência 3D.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Quando o usuário quer planejar, projetar ou implementar um teste A/B ou experimento. Também use quando o usuário menciona "teste A/B", "split test", "experimento", "testar essa mudança", "copy variante", "teste multivariado" ou "hipótese". Para implementação de rastreamento, veja analytics-tracking.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Auditar e melhorar a acessibilidade web seguindo as diretrizes WCAG 2.1. Use quando solicitado para "melhorar acessibilidade", "auditoria a11y", "conformidade WCAG", "suporte a leitor de tela", "navegação por teclado" ou "tornar acessível".

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Testes e benchmarking de agentes LLM incluindo testes comportamentais, avaliação de capacidades, métricas de confiabilidade e monitoramento em produção—onde até os melhores agentes alcançam menos de 50% em benchmarks do mundo real. Use quando: testes de agentes, avaliação de agentes, benchmark de agentes, confiabilidade de agentes, teste de agentes.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Criar, gerenciar e orquestrar agentes de IA usando o CLI AI Maestro. Use quando o usuário pedir para "criar agente", "listar agentes", "deletar agente", "hibernar agente", "despertar agente", "instalar plugin", "mostrar agente", "reiniciar agente" ou qualquer tarefa de gerenciamento do ciclo de vida do agente.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Gerencie múltiplos agentes CLI locais via sessões tmux (iniciar/parar/monitorar/atribuir) com agendamento compatível com cron.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

artubss のスキルをすべて見る

このスキルの問題を報告する