[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7304BRPRFHG5DZFCAFNDVCM":3,"skill-same:01M7304BRPRFHG5DZFCAFNDVCM":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":6,"ownerDescription":45,"updatedAt":46,"install":47,"resources":60},"01M7304BRPRFHG5DZFCAFNDVCM","torchforge-rl-training",null,"Fornece orientação para treinamento RL agentico nativo do PyTorch usando torchforge, biblioteca da Meta que separa infraestrutura de algoritmos. Use quando você quer abstrações limpas de RL, fácil experimentação de algoritmos, ou treinamento escalável com Monarch e TorchTitan.","artubss\u002FSKILLS-CLAUDE-CODE","artubss","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F205203215?v=4","01M72YSJPDWM2V6S5PB6XP6PM9","Arthur Bezerra ","01M72YSJPZKPKRBGXNG8K6QFA8",12,"MIT","https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fai-research\u002Fpost-training-torchforge\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: torchforge-rl-training\ndescription: Fornece orientação para treinamento RL agentico nativo do PyTorch usando torchforge, biblioteca da Meta que separa infraestrutura de algoritmos. Use quando você quer abstrações limpas de RL, fácil experimentação de algoritmos, ou treinamento escalável com Monarch e TorchTitan.\nversion: 1.0.0\nauthor: Orchestra Research\nlicense: MIT\ntags: [Reinforcement Learning, PyTorch, GRPO, SFT, Monarch, TorchTitan, Meta]\ndependencies: [torch>=2.9.0, torchtitan>=0.2.0, vllm, monarch]\n---\n\n# torchforge: Biblioteca RL Agentica Nativa do PyTorch\n\ntorchforge é a biblioteca RL nativa do PyTorch da Meta que separa infraestrutura de algoritmos. Permite pesquisa rápida em RL deixando você focar em algoritmos enquanto cuida do treinamento distribuído, inference e sincronização de pesos automaticamente.\n\n## Quando Usar torchforge\n\n**Escolha torchforge quando você precisa:**\n- Separação limpa entre algoritmos RL e infraestrutura\n- Abstrações nativas do PyTorch (sem dependência Ray)\n- Fácil experimentação de algoritmos (GRPO, DAPO, SAPO em ~100 linhas)\n- Treinamento escalável com sistema de atores Monarch\n- Integração com TorchTitan para model parallelism\n\n**Considere alternativas quando:**\n- Você precisa de estabilidade pronta para produção → use **miles** ou **verl**\n- Você quer treinamento nativo do Megatron → use **slime**\n- torchforge é experimental e APIs podem mudar\n\n## Funcionalidades Principais\n\n- **Isolamento de algoritmo**: Implemente algoritmos RL sem tocar infraestrutura\n- **Escalabilidade**: De GPU única para milhares via Monarch\n- **Stack moderno**: TorchTitan (treinamento), vLLM (inference), TorchStore (sincronização)\n- **Funções de perda**: GRPO, DAPO, CISPO, GSPO, SAPO embutidas\n\n## Visão Geral da Arquitetura\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ Application Layer (Your Code)                           │\n│ - Define reward models, loss functions, sampling        │\n└─────────────────────┬───────────────────────────────────┘\n                      │\n┌─────────────────────▼───────────────────────────────────┐\n│ Forge API Layer                                         │\n│ - Episode, Group dataclasses                           │\n│ - Service interfaces (async\u002Fawait)                      │\n└─────────────────────┬───────────────────────────────────┘\n                      │\n┌─────────────────────▼───────────────────────────────────┐\n│ Distributed Services (Monarch)                          │\n│ ├── Trainer (TorchTitan FSDP)                          │\n│ ├── Generator (vLLM inference)                          │\n│ ├── Reference Model (frozen KL baseline)               │\n│ └── Reward Actors (compute rewards)                    │\n└─────────────────────────────────────────────────────────┘\n```\n\n## Instalação\n\n```bash\n# Create environment\nconda create -n forge python=3.12\nconda activate forge\n\n# Install (handles PyTorch nightly + dependencies)\n.\u002Fscripts\u002Finstall.sh\n\n# Verify\npython -c \"import torch, forge, vllm; print('OK')\"\n```\n\n### Instalação ROCm\n\n```bash\n.\u002Fscripts\u002Finstall_rocm.sh\n```\n\n## Início Rápido\n\n### Treinamento SFT (2+ GPUs)\n\n```bash\npython -m apps.sft.main --config apps\u002Fsft\u002Fllama3_8b.yaml\n```\n\n### Treinamento GRPO (3+ GPUs)\n\n```bash\npython -m apps.grpo.main --config apps\u002Fgrpo\u002Fqwen3_1_7b.yaml\n```\n\n---\n\n## Workflow 1: Treinamento GRPO para Raciocínio Matemático\n\nUse este workflow para treinar modelos de raciocínio com vantagens relativas ao grupo.\n\n### Checklist de Pré-requisitos\n- [ ] 3+ GPUs (GPU0: trainer, GPU1: ref_model, GPU2: generator)\n- [ ] Modelo do HuggingFace Hub\n- [ ] Dataset de treinamento (GSM8K, MATH, etc.)\n\n### Passo 1: Criar Configuração\n\n```yaml\n# config\u002Fgrpo_math.yaml\nmodel: \"Qwen\u002FQwen2.5-7B-Instruct\"\n\ndataset:\n  path: \"openai\u002Fgsm8k\"\n  split: \"train\"\n  streaming: true\n\ntraining:\n  batch_size: 4\n  learning_rate: 1e-6\n  seq_len: 4096\n  dtype: bfloat16\n  gradient_accumulation_steps: 4\n\ngrpo:\n  n_samples: 8           # Responses per prompt\n  clip_low: 0.2\n  clip_high: 0.28\n  beta: 0.1              # KL penalty coefficient\n  temperature: 0.7\n\nservices:\n  generator:\n    procs: 1\n    num_replicas: 1\n    with_gpus: true\n  trainer:\n    procs: 1\n    num_replicas: 1\n    with_gpus: true\n  ref_model:\n    procs: 1\n    num_replicas: 1\n    with_gpus: true\n```\n\n### Passo 2: Definir Função de Recompensa\n\n```python\n# rewards.py\n# Reward functions are in forge.data.rewards\nfrom forge.data.rewards import MathReward, ThinkingReward\nimport re\n\n# Or define your own reward function\nclass CustomMathReward:\n    def __call__(self, prompt: str, response: str, target: str) -> float:\n        # Extract answer from response\n        match = re.search(r'\\\\boxed{([^}]+)}', response)\n        if not match:\n            return 0.0\n\n        answer = match.group(1).strip()\n        return 1.0 if answer == target else 0.0\n```\n\n### Passo 3: Iniciar Treinamento\n\n```bash\npython -m apps.grpo.main --config config\u002Fgrpo_math.yaml\n```\n\n### Passo 4: Monitorar Progresso\n- [ ] Verificar dashboard W&B para curvas de perda\n- [ ] Verificar que entropia está diminuindo (política ficando mais determinística)\n- [ ] Monitorar divergência KL (deve permanecer limitada)\n\n---\n\n## Workflow 2: Função de Perda Customizada\n\nUse este workflow para implementar novos algoritmos RL.\n\n### Passo 1: Criar Classe de Perda\n\n```python\n# src\u002Fforge\u002Flosses\u002Fcustom_loss.py\nimport torch\nimport torch.nn as nn\n\nclass CustomLoss(nn.Module):\n    def __init__(self, clip_range: float = 0.2, beta: float = 0.1):\n        super().__init__()\n        self.clip_range = clip_range\n        self.beta = beta\n\n    def forward(\n        self,\n        logprobs: torch.Tensor,\n        ref_logprobs: torch.Tensor,\n        advantages: torch.Tensor,\n        padding_mask: torch.Tensor,\n    ) -> torch.Tensor:\n        # Compute importance ratio\n        ratio = torch.exp(logprobs - ref_logprobs)\n\n        # Clipped policy gradient\n        clipped_ratio = torch.clamp(\n            ratio,\n            1 - self.clip_range,\n            1 + self.clip_range\n        )\n        pg_loss = -torch.min(ratio * advantages, clipped_ratio * advantages)\n\n        # KL penalty\n        kl = ref_logprobs - logprobs\n\n        # Apply mask and aggregate\n        masked_loss = (pg_loss + self.beta * kl) * padding_mask\n        loss = masked_loss.sum() \u002F padding_mask.sum()\n\n        return loss\n```\n\n### Passo 2: Integrar na Aplicação\n\n```python\n# apps\u002Fcustom\u002Fmain.py\nfrom forge.losses.custom_loss import CustomLoss\n\nloss_fn = CustomLoss(clip_range=0.2, beta=0.1)\n\n# In training loop\nloss = loss_fn(\n    logprobs=logprobs,\n    ref_logprobs=ref_logprobs,\n    advantages=advantages,\n    padding_mask=padding_mask,\n)\n```\n\n---\n\n## Workflow 3: Treinamento Distribuído Multi-GPU\n\nUse este workflow para escalar para múltiplas GPUs ou nós.\n\n### Configuração para Distribuído\n\n```yaml\n# config\u002Fdistributed.yaml\nmodel: \"meta-llama\u002FMeta-Llama-3.1-8B-Instruct\"\n\nparallelism:\n  tensor_parallel_degree: 2    # Split model across GPUs\n  pipeline_parallel_degree: 1\n  data_parallel_shard_degree: 2\n\nservices:\n  generator:\n    procs: 2                   # 2 processes for TP=2\n    num_replicas: 1\n    with_gpus: true\n  trainer:\n    procs: 2\n    num_replicas: 1\n    with_gpus: true\n```\n\n### Lançar com SLURM\n\n```bash\n# Submit job\nsbatch --nodes=2 --gpus-per-node=8 run_grpo.sh\n```\n\n### Lançar Localmente (Multi-GPU)\n\n```bash\n# 8 GPU setup\npython -m apps.grpo.main \\\n    --config config\u002Fdistributed.yaml \\\n    --trainer.procs 4 \\\n    --generator.procs 4\n```\n\n---\n\n## Referência da API Principal\n\n### Formato de Batch de Treinamento\n\ntorchforge usa batches baseados em dicionário para treinamento:\n\n```python\n# inputs: list of dicts with torch.Tensor values\ninputs = [{\"tokens\": torch.Tensor}]\n\n# targets: list of dicts with training signals\ntargets = [{\n    \"response\": torch.Tensor,\n    \"ref_logprobs\": torch.Tensor,\n    \"advantages\": torch.Tensor,\n    \"padding_mask\": torch.Tensor\n}]\n\n# train_step returns loss as float\nloss = trainer.train_step(inputs, targets)\n```\n\n### Completion\n\nSaída gerada do vLLM:\n\n```python\n@dataclass\nclass Completion:\n    text: str              # Generated text\n    token_ids: list[int]   # Token IDs\n    logprobs: list[float]  # Log probabilities\n    metadata: dict         # Custom metadata\n```\n\n---\n\n## Funções de Perda Embutidas\n\n### Funções de Perda\n\nFunções de perda estão no módulo `forge.losses`:\n\n```python\nfrom forge.losses import SimpleGRPOLoss, ReinforceLoss\n\n# SimpleGRPOLoss for GRPO training\nloss_fn = SimpleGRPOLoss(beta=0.1)\n\n# Forward pass\nloss = loss_fn(\n    logprobs=logprobs,\n    ref_logprobs=ref_logprobs,\n    advantages=advantages,\n    padding_mask=padding_mask\n)\n```\n\n### ReinforceLoss\n\n```python\nfrom forge.losses.reinforce_loss import ReinforceLoss\n\n# With optional importance ratio clipping\nloss_fn = ReinforceLoss(clip_ratio=0.2)\n```\n\n---\n\n## Problemas Comuns e Soluções\n\n### Problema: GPUs Insuficientes\n\n**Sintomas**: Erro \"Insufficient GPU resources\"\n\n**Soluções**:\n```yaml\n# Reduce service requirements\nservices:\n  generator:\n    procs: 1\n    with_gpus: true\n  trainer:\n    procs: 1\n    with_gpus: true\n  # Remove ref_model (uses generator weights)\n```\n\nOu use CPU para modelo de referência:\n```yaml\nref_model:\n  with_gpus: false\n```\n\n### Problema: OOM Durante Geração\n\n**Sintomas**: CUDA OOM no vLLM\n\n**Soluções**:\n```yaml\n# Reduce batch size\ngrpo:\n  n_samples: 4  # Reduce from 8\n\n# Or reduce sequence length\ntraining:\n  seq_len: 2048\n```\n\n### Problema: Sincronização de Pesos Lenta\n\n**Sintomas**: Pausas longas entre treinamento e geração\n\n**Soluções**:\n```bash\n# Enable RDMA (if available)\nexport TORCHSTORE_USE_RDMA=1\n\n# Or reduce sync frequency\ntraining:\n  sync_interval: 10  # Sync every 10 steps\n```\n\n### Problema: Colapso de Política\n\n**Sintomas**: Entropia cai para zero, recompensa para de melhorar\n\n**Soluções**:\n```yaml\n# Increase KL penalty\ngrpo:\n  beta: 0.2  # Increase from 0.1\n\n# Or add entropy bonus\ntraining:\n  entropy_coef: 0.01\n```\n\n---\n\n## Recursos\n\n- **Documentation**: https:\u002F\u002Fmeta-pytorch.org\u002Ftorchforge\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Fmeta-pytorch\u002Ftorchforge\n- **Discord**: https:\u002F\u002Fdiscord.gg\u002FYsTYBh6PD9\n- **TorchTitan**: https:\u002F\u002Fgithub.com\u002Fpytorch\u002Ftorchtitan\n- **Monarch**: https:\u002F\u002Fgithub.com\u002Fmeta-pytorch\u002Fmonarch","# torchforge: Biblioteca RL Agentica Nativa do PyTorch\n\ntorchforge é a biblioteca RL nativa do PyTorch da Meta que separa infraestrutura de algoritmos. Permite pesquisa rápida em RL deixando você focar em algoritmos enquanto cuida do treinamento distribuído, inference e sincronização de pesos automaticamente.\n\n## Quando Usar torchforge\n\n**Escolha torchforge quando você precisa:**\n- Separação limpa entre algoritmos RL e infraestrutura\n- Abstrações nativas do PyTorch (sem dependência Ray)\n- Fácil experimentação de algoritmos (GRPO, DAPO, SAPO em ~100 linhas)\n- Treinamento escalável com sistema de atores Monarch\n- Integração com TorchTitan para model parallelism\n\n**Considere alternativas quando:**\n- Você precisa de estabilidade pronta para produção → use **miles** ou **verl**\n- Você quer treinamento nativo do Megatron → use **slime**\n- torchforge é experimental e APIs podem mudar\n\n## Funcionalidades Principais\n\n- **Isolamento de algoritmo**: Implemente algoritmos RL sem tocar infraestrutura\n- **Escalabilidade**: De GPU única para milhares via Monarch\n- **Stack moderno**: TorchTitan (treinamento), vLLM (inference), TorchStore (sincronização)\n- **Funções de perda**: GRPO, DAPO, CISPO, GSPO, SAPO embutidas\n\n## Visão Geral da Arquitetura\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ Application Layer (Your Code)                           │\n│ - Define reward models, loss functions, sampling        │\n└─────────────────────┬───────────────────────────────────┘\n                      │\n┌─────────────────────▼───────────────────────────────────┐\n│ Forge API Layer                                         │\n│ - Episode, Group dataclasses                           │\n│ - Service interfaces (async\u002Fawait)                      │\n└─────────────────────┬───────────────────────────────────┘\n                      │\n┌─────────────────────▼───────────────────────────────────┐\n│ Distributed Services (Monarch)                          │\n│ ├── Trainer (TorchTitan FSDP)                          │\n│ ├── Generator (vLLM inference)                          │\n│ ├── Reference Model (frozen KL baseline)               │\n│ └── Reward Actors (compute rewards)                    │\n└─────────────────────────────────────────────────────────┘\n```\n\n## Instalação\n\n```bash\n# Create environment\nconda create -n forge python=3.12\nconda activate forge\n\n# Install (handles PyTorch nightly + dependencies)\n.\u002Fscripts\u002Finstall.sh\n\n# Verify\npython -c \"import torch, forge, vllm; print('OK')\"\n```\n\n### Instalação ROCm\n\n```bash\n.\u002Fscripts\u002Finstall_rocm.sh\n```\n\n## Início Rápido\n\n### Treinamento SFT (2+ GPUs)\n\n```bash\npython -m apps.sft.main --config apps\u002Fsft\u002Fllama3_8b.yaml\n```\n\n### Treinamento GRPO (3+ GPUs)\n\n```bash\npython -m apps.grpo.main --config apps\u002Fgrpo\u002Fqwen3_1_7b.yaml\n```\n\n---\n\n## Workflow 1: Treinamento GRPO para Raciocínio Matemático\n\nUse este workflow para treinar modelos de raciocínio com vantagens relativas ao grupo.\n\n### Checklist de Pré-requisitos\n- [ ] 3+ GPUs (GPU0: trainer, GPU1: ref_model, GPU2: generator)\n- [ ] Modelo do HuggingFace Hub\n- [ ] Dataset de treinamento (GSM8K, MATH, etc.)\n\n### Passo 1: Criar Configuração\n\n```yaml\n# config\u002Fgrpo_math.yaml\nmodel: \"Qwen\u002FQwen2.5-7B-Instruct\"\n\ndataset:\n  path: \"openai\u002Fgsm8k\"\n  split: \"train\"\n  streaming: true\n\ntraining:\n  batch_size: 4\n  learning_rate: 1e-6\n  seq_len: 4096\n  dtype: bfloat16\n  gradient_accumulation_steps: 4\n\ngrpo:\n  n_samples: 8           # Responses per prompt\n  clip_low: 0.2\n  clip_high: 0.28\n  beta: 0.1              # KL penalty coefficient\n  temperature: 0.7\n\nservices:\n  generator:\n    procs: 1\n    num_replicas: 1\n    with_gpus: true\n  trainer:\n    procs: 1\n    num_replicas: 1\n    with_gpus: true\n  ref_model:\n    procs: 1\n    num_replicas: 1\n    with_gpus: true\n```\n\n### Passo 2: Definir Função de Recompensa\n\n```python\n# rewards.py\n# Reward functions are in forge.data.rewards\nfrom forge.data.rewards import MathReward, ThinkingReward\nimport re\n\n# Or define your own reward function\nclass CustomMathReward:\n    def __call__(self, prompt: str, response: str, target: str) -> float:\n        # Extract answer from response\n        match = re.search(r'\\\\boxed{([^}]+)}', response)\n        if not match:\n            return 0.0\n\n        answer = match.group(1).strip()\n        return 1.0 if answer == target else 0.0\n```\n\n### Passo 3: Iniciar Treinamento\n\n```bash\npython -m apps.grpo.main --config config\u002Fgrpo_math.yaml\n```\n\n### Passo 4: Monitorar Progresso\n- [ ] Verificar dashboard W&B para curvas de perda\n- [ ] Verificar que entropia está diminuindo (política ficando mais determinística)\n- [ ] Monitorar divergência KL (deve permanecer limitada)\n\n---\n\n## Workflow 2: Função de Perda Customizada\n\nUse este workflow para implementar novos algoritmos RL.\n\n### Passo 1: Criar Classe de Perda\n\n```python\n# src\u002Fforge\u002Flosses\u002Fcustom_loss.py\nimport torch\nimport torch.nn as nn\n\nclass CustomLoss(nn.Module):\n    def __init__(self, clip_range: float = 0.2, beta: float = 0.1):\n        super().__init__()\n        self.clip_range = clip_range\n        self.beta = beta\n\n    def forward(\n        self,\n        logprobs: torch.Tensor,\n        ref_logprobs: torch.Tensor,\n        advantages: torch.Tensor,\n        padding_mask: torch.Tensor,\n    ) -> torch.Tensor:\n        # Compute importance ratio\n        ratio = torch.exp(logprobs - ref_logprobs)\n\n        # Clipped policy gradient\n        clipped_ratio = torch.clamp(\n            ratio,\n            1 - self.clip_range,\n            1 + self.clip_range\n        )\n        pg_loss = -torch.min(ratio * advantages, clipped_ratio * advantages)\n\n        # KL penalty\n        kl = ref_logprobs - logprobs\n\n        # Apply mask and aggregate\n        masked_loss = (pg_loss + self.beta * kl) * padding_mask\n        loss = masked_loss.sum() \u002F padding_mask.sum()\n\n        return loss\n```\n\n### Passo 2: Integrar na Aplicação\n\n```python\n# apps\u002Fcustom\u002Fmain.py\nfrom forge.losses.custom_loss import CustomLoss\n\nloss_fn = CustomLoss(clip_range=0.2, beta=0.1)\n\n# In training loop\nloss = loss_fn(\n    logprobs=logprobs,\n    ref_logprobs=ref_logprobs,\n    advantages=advantages,\n    padding_mask=padding_mask,\n)\n```\n\n---\n\n## Workflow 3: Treinamento Distribuído Multi-GPU\n\nUse este workflow para escalar para múltiplas GPUs ou nós.\n\n### Configuração para Distribuído\n\n```yaml\n# config\u002Fdistributed.yaml\nmodel: \"meta-llama\u002FMeta-Llama-3.1-8B-Instruct\"\n\nparallelism:\n  tensor_parallel_degree: 2    # Split model across GPUs\n  pipeline_parallel_degree: 1\n  data_parallel_shard_degree: 2\n\nservices:\n  generator:\n    procs: 2                   # 2 processes for TP=2\n    num_replicas: 1\n    with_gpus: true\n  trainer:\n    procs: 2\n    num_replicas: 1\n    with_gpus: true\n```\n\n### Lançar com SLURM\n\n```bash\n# Submit job\nsbatch --nodes=2 --gpus-per-node=8 run_grpo.sh\n```\n\n### Lançar Localmente (Multi-GPU)\n\n```bash\n# 8 GPU setup\npython -m apps.grpo.main \\\n    --config config\u002Fdistributed.yaml \\\n    --trainer.procs 4 \\\n    --generator.procs 4\n```\n\n---\n\n## Referência da API Principal\n\n### Formato de Batch de Treinamento\n\ntorchforge usa batches baseados em dicionário para treinamento:\n\n```python\n# inputs: list of dicts with torch.Tensor values\ninputs = [{\"tokens\": torch.Tensor}]\n\n# targets: list of dicts with training signals\ntargets = [{\n    \"response\": torch.Tensor,\n    \"ref_logprobs\": torch.Tensor,\n    \"advantages\": torch.Tensor,\n    \"padding_mask\": torch.Tensor\n}]\n\n# train_step returns loss as float\nloss = trainer.train_step(inputs, targets)\n```\n\n### Completion\n\nSaída gerada do vLLM:\n\n```python\n@dataclass\nclass Completion:\n    text: str              # Generated text\n    token_ids: list[int]   # Token IDs\n    logprobs: list[float]  # Log probabilities\n    metadata: dict         # Custom metadata\n```\n\n---\n\n## Funções de Perda Embutidas\n\n### Funções de Perda\n\nFunções de perda estão no módulo `forge.losses`:\n\n```python\nfrom forge.losses import SimpleGRPOLoss, ReinforceLoss\n\n# SimpleGRPOLoss for GRPO training\nloss_fn = SimpleGRPOLoss(beta=0.1)\n\n# Forward pass\nloss = loss_fn(\n    logprobs=logprobs,\n    ref_logprobs=ref_logprobs,\n    advantages=advantages,\n    padding_mask=padding_mask\n)\n```\n\n### ReinforceLoss\n\n```python\nfrom forge.losses.reinforce_loss import ReinforceLoss\n\n# With optional importance ratio clipping\nloss_fn = ReinforceLoss(clip_ratio=0.2)\n```\n\n---\n\n## Problemas Comuns e Soluções\n\n### Problema: GPUs Insuficientes\n\n**Sintomas**: Erro \"Insufficient GPU resources\"\n\n**Soluções**:\n```yaml\n# Reduce service requirements\nservices:\n  generator:\n    procs: 1\n    with_gpus: true\n  trainer:\n    procs: 1\n    with_gpus: true\n  # Remove ref_model (uses generator weights)\n```\n\nOu use CPU para modelo de referência:\n```yaml\nref_model:\n  with_gpus: false\n```\n\n### Problema: OOM Durante Geração\n\n**Sintomas**: CUDA OOM no vLLM\n\n**Soluções**:\n```yaml\n# Reduce batch size\ngrpo:\n  n_samples: 4  # Reduce from 8\n\n# Or reduce sequence length\ntraining:\n  seq_len: 2048\n```\n\n### Problema: Sincronização de Pesos Lenta\n\n**Sintomas**: Pausas longas entre treinamento e geração\n\n**Soluções**:\n```bash\n# Enable RDMA (if available)\nexport TORCHSTORE_USE_RDMA=1\n\n# Or reduce sync frequency\ntraining:\n  sync_interval: 10  # Sync every 10 steps\n```\n\n### Problema: Colapso de Política\n\n**Sintomas**: Entropia cai para zero, recompensa para de melhorar\n\n**Soluções**:\n```yaml\n# Increase KL penalty\ngrpo:\n  beta: 0.2  # Increase from 0.1\n\n# Or add entropy bonus\ntraining:\n  entropy_coef: 0.01\n```\n\n---\n\n## Recursos\n\n- **Documentation**: https:\u002F\u002Fmeta-pytorch.org\u002Ftorchforge\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Fmeta-pytorch\u002Ftorchforge\n- **Discord**: https:\u002F\u002Fdiscord.gg\u002FYsTYBh6PD9\n- **TorchTitan**: https:\u002F\u002Fgithub.com\u002Fpytorch\u002Ftorchtitan\n- **Monarch**: https:\u002F\u002Fgithub.com\u002Fmeta-pytorch\u002Fmonarch",{"name":5,"tags":24,"author":32,"license":15,"version":33,"description":7,"dependencies":34},[25,26,27,28,29,30,31],"Reinforcement Learning","PyTorch","GRPO","SFT","Monarch","TorchTitan","Meta","Orchestra Research","1.0.0",[35,36,37,38],"torch>=2.9.0","torchtitan>=0.2.0","vllm","monarch","master","ac67ed85889b15fa9e784e2a93a83f8916870698","skills\u002Fskills\u002Fai-research\u002Fpost-training-torchforge",3,"https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE","https:\u002F\u002Fgithub.com\u002Fartubss","Especialista em Automação N8N | Desenvolvedor Full Stack | Integrações & APIs | Soluções para Clínicas e Vendas High-Ticket","2026-05-16 23:21:14",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add artubss\u002FSKILLS-CLAUDE-CODE --skill torchforge-rl-training",{"tool":53,"command":54},"bunx","bunx skills add artubss\u002FSKILLS-CLAUDE-CODE --skill torchforge-rl-training",{"tool":56,"command":57},"pnpm","pnpm dlx skills add artubss\u002FSKILLS-CLAUDE-CODE --skill torchforge-rl-training","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fai-research\u002Fpost-training-torchforge\u002FSKILL.md",true,[61,67],{"path":62,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":65,"sourceHtmlUrl":66},"references\u002Fapi-reference.md","REFERENCE","参考文档",8685,"https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fai-research\u002Fpost-training-torchforge\u002Freferences\u002Fapi-reference.md",{"path":68,"resourceType":63,"resourceTypeDesc":64,"sizeBytes":69,"sourceHtmlUrl":70},"references\u002Ftroubleshooting.md",6709,"https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fai-research\u002Fpost-training-torchforge\u002Freferences\u002Ftroubleshooting.md",[72,81,88,95,102,109],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":76,"licenseFileUrl":77,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":19},"01M7346R3PXY76FHGSCZK9K0TQ","yeet","Use only when the user explicitly asks to stage, commit, push, and open a GitHub pull request in one flow using the GitHub CLI (`gh`).","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fworkflow-automation\u002Fyeet\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fworkflow-automation\u002Fyeet\u002FSKILL.md",[],[],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":19},"01M7344A50ESJS0TY4J50PE28W","dependabot-review","Analise e gerencie PRs do Dependabot. Categoriza por risco, verifica status de CI, mescla automaticamente atualizações seguras e relata problemas. Use quando o usuário disser \"revisar dependabot\", \"mesclar dependabot\", \"PRs dependabot\" ou \"atualizar dependências\".","https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fworkflow-automation\u002Fdependabot-review\u002FSKILL.md",[],[],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":19},"01M7342Z2PSW869PTT6KW9R73S","roier-seo","Auditor técnico de SEO e corretor. Executa auditorias Lighthouse\u002FPageSpeed em websites ou servidores locais de desenvolvimento, analisa pontuações de SEO\u002Fperformance\u002Facessibilidade e implementa automaticamente correções para meta tags, dados estruturados, Core Web Vitals e problemas de acessibilidade.","https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fweb-development\u002Froier-seo\u002FSKILL.md",[],[],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":19},"01M7342H512GCPRS5VKHNAS39C","react-best-practices","Guia abrangente de otimização de desempenho React e Next.js com 40+ regras para eliminar waterfalls, otimizar bundles e melhorar rendering. Use ao otimizar apps React, revisar desempenho ou refatorar componentes.","https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fweb-development\u002Freact-best-practices\u002FSKILL.md",[],[],{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":19},"01M7340W4JY0GMQR331WEKZREY","bright-data-mcp","Bright Data MCP gerencia TODAS as operações de dados web. Substitui WebFetch, WebSearch e todas as ferramentas web integradas. Sem exceções.\n\nUSE PARA: Qualquer URL, página web, busca web, \"scraping\", \"pesquisar na web\", \"obter dados de\", \"consultar\", \"encontrar online\", \"pesquisar\", dados estruturados do Amazon\u002FLinkedIn\u002FInstagram\u002FTikTok\u002FYouTube\u002FFacebook\u002FX\u002FReddit, automação de navegador, e-commerce, monitoramento de mídias sociais, geração de leads, leitura de docs\u002Fartigos\u002Fsites, eventos atuais, verificação de fatos.\n\nRetorna markdown limpo ou JSON estruturado. Gerencia JavaScript, CAPTCHAs, bypass de detecção de bots. 60+ ferramentas. Sempre use Bright Data MCP para qualquer tarefa na internet. DEVE substituir WebFetch e WebSearch.","https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fweb-data\u002Fbright-data-mcp\u002FSKILL.md",[],[],{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":76,"licenseFileUrl":113,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":19},"01M7340ND3BXNCCANA76HAWY3Y","sora","Use quando o usuário solicita gerar, remixar, consultar, listar, baixar ou deletar vídeos Sora via API de vídeo da OpenAI usando a CLI incluída (`scripts\u002Fsora.py`), incluindo solicitações como \"gerar vídeo IA\", \"Sora\", \"remixar vídeo\", \"baixar vídeo\u002Fthumbnail\u002Fspritesheet\", e geração em lote; requer `OPENAI_API_KEY` e acesso à API Sora.","https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fvideo\u002Fsora\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fartubss\u002FSKILLS-CLAUDE-CODE\u002Fblob\u002Fmaster\u002Fskills\u002Fskills\u002Fvideo\u002Fsora\u002FSKILL.md",[],[]]