Skip to content
Back to skills

Distributed Training Ray Train

ASecurity

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.

  • 11 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 8, 2026
devopspythongobashnodekubernetesawsgcpazuregitapi

Works with

  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 2 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add artubss/SKILLS-CLAUDE-CODE --skill distributed-training-ray-train --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Distributed Training Ray Train?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Distributed Training Ray Train
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/artubss-distributed-training-ray-train/badge)](https://www.skillsdirectory.com/skills/artubss-distributed-training-ray-train)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ray-train
description: 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.
version: 1.0.0
author: Orchestra Research
license: MIT
tags: [Ray Train, Distributed Training, Orchestration, Ray, Hyperparameter Tuning, Fault Tolerance, Elastic Scaling, Multi-Node, PyTorch, TensorFlow]
dependencies: [ray[train], torch, transformers]
---

# 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**:
```bash
pip install -U "ray[train]"
```

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

```python
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**:
```python
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ó):
```python
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

```python
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

```python
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

```python
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ó

```python
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**:
```bash
# 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:
```bash
ray status

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

Se não conectado:
```bash
# 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:
```python
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:
```python
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:
```python
dataloader = DataLoader(dataset, num_workers=8)
```

## Tópicos avançados

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

**Ajuste de hiperparâmetros**: Veja [references/hyperparameter-tuning.md](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](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

- Docs: https://docs.ray.io/en/latest/train/train.html
- GitHub: https://github.com/ray-project/ray ⭐ 36,000+
- Versão: 2.40.0+
- Exemplos: https://docs.ray.io/en/latest/train/examples.html
- Slack: https://forms.gle/9TSdDYUgxYs8SA9e8
- Usado por: OpenAI, Uber, Spotify, Shopify, Instacart

Files in this skill

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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…