Plug in your parameters. Compare Tinker vs self-hosted.
Cookbook presets
?Each 'group' is one prompt that gets G rollouts — effectively the batch size. Cookbook defaults: 128 (RL), 100 (math_rl), 8 (harbor_rl).
groups_per_batch in cookbook
64
?Rollouts per prompt. Called group_size in the cookbook. More rollouts = lower variance advantage estimates but higher cost. Cookbook defaults: 16 (RL), 4 (math_rl/harbor_rl), 8 (code_rl).
16
?Total RL iterations. Cookbook recommends ≥100 steps. math_rl shows gains at 180 steps, code_rl at 100 steps.
180
?max_tokens in the cookbook — max completion length per rollout. Cookbook READMEs: 512 (math_rl MATH), 1024 (math_rl GSM8K), 8192 (harbor_rl), 24576 (code_rl). ScaleRL uses 14K-32K for reasoning. Actual average is often lower than max.
512
?Average tokens in each training prompt. Varies by task: ~100-256 for math, 512-1024 for code with test cases.
200
?Completions typically grow 1.5-5x over training as the model learns longer reasoning chains. R1-style reasoning models can see 4-5x growth. This averages the cost across the run.
1.5x
?lora_rank in the cookbook. Default 32 for RL, 64 for RLHF. Does not affect cost — LoRA params are ~0.5% of base model params so the FLOP difference is negligible. Tinker also charges a fixed per-train-token rate regardless of rank. Rank matters for quality and VRAM, not price.
?How many optimizer updates to take on the same batch of rollouts before generating new ones (num_substeps in cookbook). Each step drifts the policy further from the rollout policy. Practice: default 1 (safe), 2–4 (common), 16 (DAPO — aggressive). Tülu 3 reduces from 4 to 1 at 405B specifically for stability. Training cost scales linearly with this value.
1
for rollout?The inference engine used for rollout generation determines MBU (Model Bandwidth Utilization) — how efficiently the GPU's memory bandwidth is used during batched autoregressive decode. Higher MBU = faster rollouts = lower self-hosted cost. This only affects the self-hosted estimate. Tinker abstracts the engine away.
PagedAttention, continuous batching. ~60% MBU at BS=1 (Databricks). Most stable. Used by OpenRLHF, veRL, Unsloth.RadixAttention prefix caching. ~29% faster than vLLM (PremAI 2026). Best for RLVR shared-prefix workloads.No continuous batching, no PagedAttention. 14-24x slower than vLLM at large batch. TRL default.Manual — set the slider below.
MBU 70%
low due to LoRA overhead?Model FLOPs Utilization during the training (backward pass) phase. RL training has much lower MFU than SFT because of multi-phase overhead: the GPU alternates between rollout generation, log-prob computation, reference model inference, and gradient updates. With LoRA, only ~0.5% of parameters update but gradients still flow through the full model. Colocated setups (actor + vLLM on same GPUs) further reduce MFU due to memory contention. This only affects self-hosted cost.
Single-phase training, no rollout contention. 30-40% on H100 with FSDP. Source: Stas Bekman ml-engineering benchmarks.Proper GPU timesharing (CPU offload between phases). 8-15% end-to-end. Training kernels alone: ~14%. Source: Yotta Labs (veRL on MI300X).No offloading — actor + vLLM compete for GPU memory. 1-5% range. We measured 1.6% on 8xB200. Source: veRL issues #965, #2628.Manual — set the slider below.
MFU 10%
?Colocated: one GPU pool time-shares between inference and training. Disaggregated: separate pools running simultaneously — no idle time, but you pay for both. RollArt, PipelineRL, AReaL use disaggregated at scale.
One shared GPU pool.
?Total GPUs shared between inference and training. Min 2 to hold Qwen3-8B.
8
?In synchronous RL, GPUs sit idle while waiting for rollouts (inference) to finish before training. Async RL overlaps them: start generating the next batch while the current batch trains. This increases GPU utilization but introduces off-policyness — rollouts were generated by an older policy. k=0 is fully synchronous (on-policy). k=1 overlaps generation with training (double buffer). k≥2 runs multiple batches in flight with stale-trajectory abort. Tinker: AsyncConfig(max_steps_off_policy=k). See /quality for the full spectrum.
k = 1
1-step off-policy (double buffer)
Generate batch N+1 while training on batch N. One step of staleness — within PPO clip range. Eliminates tail waste and sandbox idle.
?code_rl and harbor_rl require a sandbox per rollout to execute generated code and verify rewards. math_rl has no sandbox. code_rl: single-turn, ~45s per rollout. harbor_rl: multi-turn (10 turns × ~30s/turn ≈ 5 min per rollout). Modal: $0.0000131/core/sec + $0.00000222/GiB/sec. Daytona: $0.0000140/vCPU/sec. SandboxFusion (local Docker) = $0.
Off — math_rl uses no sandbox. Enable for code_rl or harbor_rl (Modal, Daytona, or SandboxFusion).
?Models multi-turn agentic tasks (SWE-bench-style) where each turn adds context. Creates quadratic prefill cost growth — the #1 cost driver for agentic RL.
Off — standard flat completion model. Enable for SWE-bench-style multi-turn agentic tasks.