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

slime-rl-training

Fornece orientação para pós-treinamento de LLM com RL usando slime, um framework Megatron+SGLang. Use ao treinar modelos GLM, implementar fluxos de trabalho personalizados de geração de dados, ou precisar de integração estreita com Megatron-LM para escalabilidade em RL.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md12.2 KB
  • references/api-reference.md11.6 KB
  • references/troubleshooting.md7.1 KB

SKILL.md(原文)

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

slime: Framework de Pós-Treinamento de LLM para Escalabilidade em RL

slime é um framework de pós-treinamento de LLM do time THUDM de Tsinghua, potencializando GLM-4.5, GLM-4.6 e GLM-4.7. Conecta Megatron-LM para treinamento com SGLang para geração de rollout de alta taxa de transferência.

Quando Usar slime

Escolha slime quando você precisar:

  • Treinamento nativo com Megatron-LM e inferência com SGLang
  • Fluxos de trabalho de geração de dados personalizados com buffers flexíveis
  • Treinar modelos GLM, Qwen3, DeepSeek V3, ou Llama 3
  • Framework de pesquisa com respaldo em produção (Z.ai)

Considere alternativas quando:

  • Você precisar de recursos de estabilidade de nível empresarial → use miles
  • Você quiser troca flexível de backend → use verl
  • Você precisar de abstrações nativas do PyTorch → use torchforge

Características-Chave

  • Treinamento: Megatron-LM com suporte completo de paralelismo (TP, PP, DP, SP)
  • Rollout: Geração de alta taxa de transferência baseada em SGLang com router
  • Buffer de Dados: Gerenciamento flexível de prompts e armazenamento de amostras
  • Modelos: GLM-4.x, Qwen3, DeepSeek V3/R1, Llama 3

Visão Geral da Arquitetura

┌─────────────────────────────────────────────────────────┐
│                    Data Buffer                          │
│ - Prompt initialization and management                  │
│ - Custom data generation and filtering                  │
│ - Rollout sample storage                                │
└─────────────┬───────────────────────────┬───────────────┘
              │                           │
┌─────────────▼───────────┐ ┌─────────────▼───────────────┐
│ Training (Megatron-LM)  │ │ Rollout (SGLang + Router)   │
│ - Actor model training  │ │ - Response generation       │
│ - Critic (optional)     │ │ - Reward/verifier output    │
│ - Weight sync to rollout│ │ - Multi-turn support        │
└─────────────────────────┘ └─────────────────────────────┘

Instalação

# Recomendado: Docker
docker pull slimerl/slime:latest
docker run --rm --gpus all --ipc=host --shm-size=16g \
  -it slimerl/slime:latest /bin/bash

# Dentro do container
cd /root/slime && pip install -e . --no-deps

Do Código-Fonte

git clone https://github.com/THUDM/slime.git
cd slime
pip install -r requirements.txt
pip install -e .

Início Rápido: Treinamento GRPO

# Configuração do modelo de origem
source scripts/models/qwen3-4B.sh

# Iniciar treinamento
python train.py \
    --actor-num-nodes 1 \
    --actor-num-gpus-per-node 4 \
    --rollout-num-gpus 4 \
    --advantage-estimator grpo \
    --use-kl-loss --kl-loss-coef 0.001 \
    --rollout-batch-size 32 \
    --n-samples-per-prompt 8 \
    --global-batch-size 256 \
    --num-rollout 3000 \
    --prompt-data /path/to/data.jsonl \
    ${MODEL_ARGS[@]} ${CKPT_ARGS[@]}

Fluxo de Trabalho 1: Treinamento GRPO Padrão

Use este fluxo de trabalho para treinar modelos de raciocínio com vantagens relativas a grupos.

Checklist de Pré-Requisitos

  • Ambiente Docker ou Megatron-LM + SGLang instalados
  • Checkpoint do modelo (formato HuggingFace ou Megatron)
  • Dados de treinamento em formato JSONL

Passo 1: Preparar Dados

# Formato data.jsonl
{"prompt": "What is 2 + 2?", "label": "4"}
{"prompt": "Solve: 3x = 12", "label": "x = 4"}

Ou com formato de chat:

{
    "prompt": [
        {"role": "system", "content": "You are a math tutor."},
        {"role": "user", "content": "What is 15 + 27?"}
    ],
    "label": "42"
}

Passo 2: Configurar Modelo

Escolha um script de modelo pré-configurado:

# Listar modelos disponíveis
ls scripts/models/
# glm4-9B.sh, qwen3-4B.sh, qwen3-30B-A3B.sh, deepseek-v3.sh, llama3-8B.sh, ...

# Carregar seu modelo
source scripts/models/qwen3-4B.sh

Passo 3: Iniciar Treinamento

python train.py \
    --actor-num-nodes 1 \
    --actor-num-gpus-per-node 8 \
    --rollout-num-gpus 8 \
    --advantage-estimator grpo \
    --use-kl-loss \
    --kl-loss-coef 0.001 \
    --prompt-data /path/to/train.jsonl \
    --input-key prompt \
    --label-key label \
    --apply-chat-template \
    --rollout-batch-size 32 \
    --n-samples-per-prompt 8 \
    --global-batch-size 256 \
    --num-rollout 3000 \
    --save-interval 100 \
    --eval-interval 50 \
    ${MODEL_ARGS[@]}

Passo 4: Monitorar Treinamento

  • Verificar TensorBoard: tensorboard --logdir outputs/
  • Verificar se as curvas de recompensa estão aumentando
  • Monitorar utilização de GPU entre nós

Fluxo de Trabalho 2: Treinamento Assíncrono

Use modo assíncrono para maior taxa de transferência sobrepondo rollout e treinamento.

Quando Usar Assíncrono

  • Modelos grandes com longos tempos de geração
  • Alto tempo ocioso de GPU em modo síncrono
  • Memória suficiente para buffering

Iniciar Treinamento Assíncrono

python train_async.py \
    --actor-num-nodes 1 \
    --actor-num-gpus-per-node 8 \
    --rollout-num-gpus 8 \
    --advantage-estimator grpo \
    --async-buffer-size 4 \
    --prompt-data /path/to/train.jsonl \
    ${MODEL_ARGS[@]}

Parâmetros Específicos do Modo Assíncrono

--async-buffer-size 4        # Número de rollouts para buffer
--update-weights-interval 2  # Sincronizar pesos a cada N rollouts

Fluxo de Trabalho 3: Treinamento Agentic Multi-Turn

Use este fluxo de trabalho para treinar agentes com uso de ferramentas ou raciocínio multi-etapa.

Pré-Requisitos

  • Função de geração personalizada para lógica multi-turn
  • Interface de ferramenta/ambiente

Passo 1: Definir Função de Geração Personalizada

# custom_generate.py
async def custom_generate(args, samples, evaluation=False):
    """Geração multi-turn com chamada de ferramentas."""
    for sample in samples:
        conversation = sample.prompt

        for turn in range(args.max_turns):
            # Gerar resposta
            response = await generate_single(conversation)

            # Verificar chamada de ferramenta
            tool_call = extract_tool_call(response)
            if tool_call:
                tool_result = execute_tool(tool_call)
                conversation.append({"role": "assistant", "content": response})
                conversation.append({"role": "tool", "content": tool_result})
            else:
                break

        sample.response = response
        sample.reward = compute_reward(sample)

    return samples

Passo 2: Iniciar com Função Personalizada

python train.py \
    --custom-generate-function-path custom_generate.py \
    --max-turns 5 \
    --prompt-data /path/to/agent_data.jsonl \
    ${MODEL_ARGS[@]}

Veja examples/search-r1/ para um exemplo completo de busca multi-turn.


Referência de Configuração

Três Categorias de Argumentos

slime usa três tipos de argumentos:

1. Argumentos Megatron (passados diretamente):

--tensor-model-parallel-size 2
--pipeline-model-parallel-size 1
--num-layers 32
--hidden-size 4096

2. Argumentos SGLang (prefixados com --sglang-):

--sglang-mem-fraction-static 0.8
--sglang-context-length 8192
--sglang-log-level INFO

3. Argumentos slime:

# Alocação de recursos
--actor-num-nodes 1
--actor-num-gpus-per-node 8
--rollout-num-gpus 8
--colocate  # Compartilhar GPUs entre treinamento/inferência

# Dados
--prompt-data /path/to/data.jsonl
--input-key prompt
--label-key label

# Loop de treinamento
--num-rollout 3000
--rollout-batch-size 32
--n-samples-per-prompt 8
--global-batch-size 256

# Algoritmo
--advantage-estimator grpo  # ou: gspo, ppo, reinforce_plus_plus
--use-kl-loss
--kl-loss-coef 0.001

Restrições-Chave

rollout_batch_size × n_samples_per_prompt = global_batch_size × num_steps_per_rollout

Exemplo: 32 × 8 = 256 × 1


Sistema de Buffer de Dados

O buffer de dados do slime permite gerenciamento flexível de dados:

Fonte de Dados Básica

class RolloutDataSource:
    def get_samples(self, num_samples):
        """Buscar prompts do dataset."""
        return self.dataset.sample(num_samples)

    def add_samples(self, samples):
        """Chamado após geração (sem operação por padrão)."""
        pass

Fonte de Dados com Buffer (Off-Policy)

class RolloutDataSourceWithBuffer(RolloutDataSource):
    def __init__(self):
        self.buffer = []

    def add_samples(self, samples):
        """Armazenar amostras geradas para reuso."""
        self.buffer.extend(samples)

    def buffer_filter(self, args, buffer, num_samples):
        """Lógica de seleção personalizada (priorizada, estratificada, etc.)."""
        return select_best(buffer, num_samples)

Problemas Comuns e Soluções

Problema: Falha da Engine SGLang

Sintomas: Engine de inferência morre durante o treinamento

Soluções:

# Habilitar tolerância a falhas
--use-fault-tolerance

# Aumentar alocação de memória
--sglang-mem-fraction-static 0.85

# Reduzir tamanho do lote
--rollout-batch-size 16

Problema: Timeout de Sincronização de Pesos

Sintomas: Treinamento trava após rollout

Soluções:

# Aumentar intervalo de sincronização
--update-weights-interval 5

# Usar modo colocalizado (sem transferência de rede)
--colocate

Problema: OOM Durante Treinamento

Sintomas: OOM CUDA na etapa de backward

Soluções:

# Habilitar gradient checkpointing
--recompute-activations

# Reduzir tamanho de micro-lote
--micro-batch-size 1

# Habilitar paralelismo de sequência
--sequence-parallel

Problema: Carregamento de Dados Lento

Sintomas: GPU inativa durante busca de dados

Soluções:

# Aumentar workers de dados
--num-data-workers 4

# Usar dataset streaming
--streaming-data

Modelos Suportados

Família de ModelosConfigurações
GLMGLM-4.5, GLM-4.6, GLM-4.7, GLM-Z1-9B
QwenQwen3 (4B, 8B, 30B-A3B), Qwen3-MoE, Qwen2.5
DeepSeekV3, V3.1, R1
LlamaLlama 3 (8B, 70B)
OutrosKimi K2, Moonlight-16B

Cada modelo possui scripts pré-configurados em scripts/models/.


Tópicos Avançados

Modo Co-localizado

Compartilhe GPUs entre treinamento e inferência para reduzir memória:

python train.py \
    --colocate \
    --actor-num-gpus-per-node 8 \
    --sglang-mem-fraction-static 0.4 \
    ${MODEL_ARGS[@]}

Modelo de Recompensa Personalizado

# custom_rm.py
class CustomRewardModel:
    def __init__(self, model_path):
        self.model = load_model(model_path)

    def compute_reward(self, prompts, responses):
        inputs = self.tokenize(prompts, responses)
        scores = self.model(inputs)
        return scores.tolist()
--custom-rm-path custom_rm.py

Avaliação Multi-Tarefa

--eval-prompt-data aime /path/to/aime.jsonl \
--eval-prompt-data gsm8k /path/to/gsm8k.jsonl \
--n-samples-per-eval-prompt 16

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 のスキルをすべて見る

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