{"id":"slime","name":"slime-rl-training","summary":"Megatron+SGLangフレームワークを用いて強化学習(RL)を用いたLLMポストトレーニングのガイダンスを提供します。","body":"# slime: LLM Post-Training Framework for RL Scaling\n\nslime is an LLM post-training framework from Tsinghua's THUDM team, powering GLM-4.5, GLM-4.6, and GLM-4.7. It connects Megatron-LM for training with SGLang for high-throughput rollout generation.\n\n## When to Use slime\n\n**Choose slime when you need:**\n- Megatron-LM native training with SGLang inference\n- Custom data generation workflows with flexible data buffers\n- Training GLM, Qwen3, DeepSeek V3, or Llama 3 models\n- Research-grade framework with production backing (Z.ai)\n\n**Consider alternatives when:**\n- You need enterprise-grade stability features → use **miles**\n- You want flexible backend swapping → use **verl**\n- You need PyTorch-native abstractions → use **torchforge**\n\n## Key Features\n\n- **Training**: Megatron-LM with full parallelism support (TP, PP, DP, SP)\n- **Rollout**: SGLang-based high-throughput generation with router\n- **Data Buffer**: Flexible prompt management and sample storage\n- **Models**: GLM-4.x, Qwen3, DeepSeek V3/R1, Llama 3\n\n## Architecture Overview\n\n```\n┌─────────────────────────────────────────────────────────┐\n│                    Data Buffer                          │\n│ - Prompt initialization and management                  │\n│ - Custom data generation and filtering                  │\n│ - Rollout sample storage                                │\n└─────────────┬───────────────────────────┬───────────────┘\n              │                           │\n┌─────────────▼───────────┐ ┌─────────────▼───────────────┐\n│ Training (Megatron-LM)  │ │ Rollout (SGLang + Router)   │\n│ - Actor model training  │ │ - Response generation       │\n│ - Critic (optional)     │ │ - Reward/verifier output    │\n│ - Weight sync to rollout│ │ - Multi-turn support        │\n└─────────────────────────┘ └─────────────────────────────┘\n```\n\n## Installation\n\n```bash\n# Recommended: Docker\ndocker pull slimerl/slime:latest\ndocker run --rm --gpus all --ipc=host --shm-size=16g \\\n  -it slimerl/slime:latest /bin/bash\n\n# Inside container\ncd /root/slime && pip install -e . --no-deps\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/THUDM/slime.git\ncd slime\npip install -r requirements.txt\npip install -e .\n```\n\n## Quick Start: GRPO Training\n\n```bash\n# Source model configuration\nsource scripts/models/qwen3-4B.sh\n\n# Launch training\npython train.py \\\n    --actor-num-nodes 1 \\\n    --actor-num-gpus-per-node 4 \\\n    --rollout-num-gpus 4 \\\n    --advantage-estimator grpo \\\n    --use-kl-loss --kl-loss-coef 0.001 \\\n    --rollout-batch-size 32 \\\n    --n-samples-per-prompt 8 \\\n    --global-batch-size 256 \\\n    --num-rollout 3000 \\\n    --prompt-data /path/to/data.jsonl \\\n    ${MODEL_ARGS[@]} ${CKPT_ARGS[@]}\n```\n\n---\n\n## Workflow 1: Standard GRPO Training\n\nUse this workflow for training reasoning models with group-relative advantages.\n\n### Prerequisites Checklist\n- [ ] Docker environment or Megatron-LM + SGLang installed\n- [ ] Model checkpoint (HuggingFace or Megatron format)\n- [ ] Training data in JSONL format\n\n### Step 1: Prepare Data\n\n```python\n# data.jsonl format\n{\"prompt\": \"What is 2 + 2?\", \"label\": \"4\"}\n{\"prompt\": \"Solve: 3x = 12\", \"label\": \"x = 4\"}\n```\n\nOr with chat format:\n```python\n{\n    \"prompt\": [\n        {\"role\": \"system\", \"content\": \"You are a math tutor.\"},\n        {\"role\": \"user\", \"content\": \"What is 15 + 27?\"}\n    ],\n    \"label\": \"42\"\n}\n```\n\n### Step 2: Configure Model\n\nChoose a pre-configured model script:\n\n```bash\n# List available models\nls scripts/models/\n# glm4-9B.sh, qwen3-4B.sh, qwen3-30B-A3B.sh, deepseek-v3.sh, llama3-8B.sh, ...\n\n# Source your model\nsource scripts/models/qwen3-4B.sh\n```\n\n### Step 3: Launch Training\n\n```bash\npython train.py \\\n    --actor-num-nodes 1 \\\n    --actor-num-gpus-per-node 8 \\\n    --rollout-num-gpus 8 \\\n    --advantage-estimator grpo \\\n    --use-kl-loss \\\n    --kl-loss-coef 0.001 \\\n    --prompt-data /path/to/train.jsonl \\\n    --input-key prompt \\\n    --label-key label \\\n    --apply-chat-template \\\n    --rollout-batch-size 32 \\\n    --n-samples-per-prompt 8 \\\n    --global-batch-size 256 \\\n    --num-rollout 3000 \\\n    --save-interval 100 \\\n    --eval-interval 50 \\\n    ${MODEL_ARGS[@]}\n```\n\n### Step 4: Monitor Training\n- [ ] Check TensorBoard: `tensorboard --logdir outputs/`\n- [ ] Verify reward curves are increasing\n- [ ] Monitor GPU utilization across nodes\n\n---\n\n## Workflow 2: Asynchronous Training\n\nUse async mode for higher throughput by overlapping rollout and training.\n\n### When to Use Async\n- Large models with long generation times\n- High GPU idle time in synchronous mode\n- Sufficient memory for buffering\n\n### Launch Async Training\n\n```bash\npython train_async.py \\\n    --actor-num-nodes 1 \\\n    --actor-num-gpus-per-node 8 \\\n    --rollout-num-gpus 8 \\\n    --advantage-estimator grpo \\\n    --async-buffer-size 4 \\\n    --prompt-data /path/to/train.jsonl \\\n    ${MODEL_ARGS[@]}\n```\n\n### Async-Specific Parameters\n\n```bash\n--async-buffer-size 4        # Number of rollouts to buffer\n--update-weights-interval 2  # Sync weights every N rollouts\n```\n\n---\n\n## Workflow 3: Multi-Turn Agentic Training\n\nUse this workflow for training agents with tool use or multi-step reasoning.\n\n### Prerequisites\n- [ ] Custom generate function for multi-turn logic\n- [ ] Tool/environment interface\n\n### Step 1: Define Custom Generate Function\n\n```python\n# custom_generate.py\nasync def custom_generate(args, samples, evaluation=False):\n    \"\"\"Multi-turn generation with tool calling.\"\"\"\n    for sample in samples:\n        conversation = sample.prompt\n\n        for turn in range(args.max_turns):\n            # Generate response\n            response = await generate_single(conversation)\n\n            # Check for tool call\n            tool_call = extract_tool_call(response)\n            if tool_call:\n                tool_result = execute_tool(tool_call)\n                conversation.append({\"role\": \"assistant\", \"content\": response})\n                conversation.append({\"role\": \"tool\", \"content\": tool_result})\n            else:\n                break\n\n        sample.response = response\n        sample.reward = compute_reward(sample)\n\n    return samples\n```\n\n### Step 2: Launch with Custom Function\n\n```bash\npython train.py \\\n    --custom-generate-function-path custom_generate.py \\\n    --max-turns 5 \\\n    --prompt-data /path/to/agent_data.jsonl \\\n    ${MODEL_ARGS[@]}\n```\n\nSee `examples/search-r1/` for a complete multi-turn search example.\n\n---\n\n## Configuration Reference\n\n### Three Argument Categories\n\nslime uses three types of arguments:\n\n**1. Megatron Arguments** (passed directly):\n```bash\n--tensor-model-parallel-size 2\n--pipeline-model-parallel-size 1\n--num-layers 32\n--hidden-size 4096\n```\n\n**2. SGLang Arguments** (prefixed with `--sglang-`):\n```bash\n--sglang-mem-fraction-static 0.8\n--sglang-context-length 8192\n--sglang-log-level INFO\n```\n\n**3. slime Arguments**:\n```bash\n# Resource allocation\n--actor-num-nodes 1\n--actor-num-gpus-per-node 8\n--rollout-num-gpus 8\n--colocate  # Share GPUs between training/inference\n\n# Data\n--prompt-data /path/to/data.jsonl\n--input-key prompt\n--label-key label\n\n# Training loop\n--num-rollout 3000\n--rollout-batch-size 32\n--n-samples-per-prompt 8\n--global-batch-size 256\n\n# Algorithm\n--advantage-estimator grpo  # or: gspo, ppo, reinforce_plus_plus\n--use-kl-loss\n--kl-loss-coef 0.001\n```\n\n### Key Constraints\n\n```\nrollout_batch_size × n_samples_per_prompt = global_batch_size × num_steps_per_rollout\n```\n\nExample: 32 × 8 = 256 × 1\n\n---\n\n## Data Buffer System\n\nslime's data buffer enables flexible data management:\n\n### Basic Data Source\n\n```python\nclass RolloutDataSource:\n    def get_samples(self, num_samples):\n        \"\"\"Fetch prompts from dataset.\"\"\"\n        return self.dataset.sample(num_samples)\n\n    def add_samples(self, samples):\n        \"\"\"Called after generation (no-op by default).\"\"\"\n        pass\n```\n\n### Buffered Data Source (Off-Policy)\n\n```python\nclass RolloutDataSourceWithBuffer(RolloutDataSource):\n    def __init__(self):\n        self.buffer = []\n\n    def add_samples(self, samples):\n        \"\"\"Store generated samples for reuse.\"\"\"\n        self.buffer.extend(samples)\n\n    def buffer_filter(self, args, buffer, num_samples):\n        \"\"\"Custom selection logic (prioritized, stratified, etc.).\"\"\"\n        return select_best(buffer, num_samples)\n```\n\n---\n\n## Common Issues and Solutions\n\n### Issue: SGLang Engine Crash\n\n**Symptoms**: Inference engine dies mid-training\n\n**Solutions**:\n```bash\n# Enable fault tolerance\n--use-fault-tolerance\n\n# Increase memory allocation\n--sglang-mem-fraction-static 0.85\n\n# Reduce batch size\n--rollout-batch-size 16\n```\n\n### Issue: Weight Sync Timeout\n\n**Symptoms**: Training hangs after rollout\n\n**Solutions**:\n```bash\n# Increase sync interval\n--update-weights-interval 5\n\n# Use colocated mode (no network transfer)\n--colocate\n```\n\n### Issue: OOM During Training\n\n**Symptoms**: CUDA OOM in backward pass\n\n**Solutions**:\n```bash\n# Enable gradient checkpointing\n--recompute-activations\n\n# Reduce micro-batch size\n--micro-batch-size 1\n\n# Enable sequence parallelism\n--sequence-parallel\n```\n\n### Issue: Slow Data Loading\n\n**Symptoms**: GPU idle during data fetch\n\n**Solutions**:\n```bash\n# Increase data workers\n--num-data-workers 4\n\n# Use streaming dataset\n--streaming-data\n```\n\n---\n\n## Supported Models\n\n| Model Family | Configurations |\n|--------------|----------------|\n| GLM | GLM-4.5, GLM-4.6, GLM-4.7, GLM-Z1-9B |\n| Qwen | Qwen3 (4B, 8B, 30B-A3B), Qwen3-MoE, Qwen2.5 |\n| DeepSeek | V3, V3.1, R1 |\n| Llama | Llama 3 (8B, 70B) |\n| Others | Kimi K2, Moonlight-16B |\n\nEach model has pre-configured scripts in `scripts/models/`.\n\n---\n\n## Advanced Topics\n\n### Co-location Mode\n\nShare GPUs between training and inference to reduce memory:\n\n```bash\npython train.py \\\n    --colocate \\\n    --actor-num-gpus-per-node 8 \\\n    --sglang-mem-fraction-static 0.4 \\\n    ${MODEL_ARGS[@]}\n```\n\n### Custom Reward Model\n\n```python\n# custom_rm.py\nclass CustomRewardModel:\n    def __init__(self, model_path):\n        self.model = load_model(model_path)\n\n    def compute_reward(self, prompts, responses):\n        inputs = self.tokenize(prompts, responses)\n        scores = self.model(inputs)\n        return scores.tolist()\n```\n\n```bash\n--custom-rm-path custom_rm.py\n```\n\n### Evaluation Multi-Task\n\n```bash\n--eval-prompt-data aime /path/to/aime.jsonl \\\n--eval-prompt-data gsm8k /path/to/gsm8k.jsonl \\\n--n-samples-per-eval-prompt 16\n```\n\n---\n\n## Resources\n\n- **Documentation**: https://thudm.github.io/slime/\n- **GitHub**: https://github.com/THUDM/slime\n- **Blog**: https://lmsys.org/blog/2025-07-09-slime/\n- **Examples**: See `examples/` directory for 14+ worked examples","author":"@Orchestra-Research","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/Orchestra-Research/AI-Research-SKILLs/tree/main/06-post-training/slime","license":"MIT","category":"research","lang":"en","tokens":2835,"stars":0,"calls30d":1,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"references/api-reference.md","size":11907,"sha256":"4f078938e1c175abeea25d8495dd866d98bb17904b61c02ad7202f58f5277a66"},{"path":"references/troubleshooting.md","size":7221,"sha256":"8ded52e21ebf3737b3366b249abf3c58c3437d485e1f285f26c37cde319ef132"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[],"scannedAt":"2026-08-22","hasScripts":false,"networkEndpoints":["lmsys.org","thudm.github.io"]}}