AWS Puts Multimodal RL Post-Training on HyperPod, and Shows Its Work on a Maze
AWS walks through GRPO post-training of Qwen3-VL-8B on SageMaker HyperPod with SkyRL, reporting a maze solve rate climb from 43.75% to 96.875% on a 64-maze evaluation set.

AWS has published a walkthrough for running multi-turn reinforcement learning post-training on Amazon SageMaker HyperPod, using the open-source SkyRL framework to teach a Qwen3-VL-8B vision-language model to solve visual mazes. According to the AWS team, Group Relative Policy Optimization (GRPO) training starting from a supervised fine-tuning checkpoint lifted the model's maze solve rate from 43.75% to more than 95% on a fixed 64-maze evaluation set. The task is deliberately small, but the infrastructure pattern behind it — colocated inference and training, shared-filesystem weight sync, and automatic node replacement — is the part worth reading closely.
What the walkthrough actually builds
The reference setup is modest by frontier-training standards: three GPU worker nodes and one CPU head node, orchestrated as a Ray cluster on HyperPod's Amazon EKS backend. AWS used three ml.g7e.12xlarge workers, each with two NVIDIA RTX PRO 6000 Blackwell GPUs, for six GPUs total, plus an ml.r5d.16xlarge head node with 512 GB of RAM. The policy model is Qwen3-VL-8B trained with LoRA at rank 32 and sharded across the six GPUs using PyTorch FSDP, with six colocated vLLM engines — one per GPU — generating rollouts.
The environment comes from VisGym, and the specific variant is maze_2d/easy. Each episode is one attempt at a maze; each turn is a single move, with the model observing an image of the current maze state and choosing a direction or stopping. AWS describes the reward as sparse: 1.0 only if the agent reaches the goal inside the move limit, nothing otherwise. Episodes are capped at 15 turns.
That sparsity is why GRPO is the algorithm of choice here. Rather than learning a separate critic to estimate value, GRPO samples multiple trajectories per prompt — eight in this configuration — and scores them against the group's own average, reinforcing above-average runs and suppressing below-average ones. AWS notes this removes the need for a separate value model, which in practice means one less large network to shard, checkpoint and keep in GPU memory.
Colocation is the interesting engineering choice
The configuration sets trainer.placement.colocate_all=true, which puts vLLM rollout engines and FSDP policy workers on the same GPUs. During rollout, the GPUs run inference; during the update step, they run training collectives. AWS's stated rationale is avoiding the idle time that comes from maintaining separate inference and training pools, where each sits waiting on the other between phases.
The cost of that choice shows up in gpu_memory_utilization=0.45, a deliberately conservative setting that leaves room for the FSDP shard and the vLLM KV cache to coexist. Practitioners should read that number as the real trade-off: colocation buys utilization across phases but shrinks the KV cache available for generation, which constrains batch size and context during rollouts. With max_model_len at 16,000 and max_input_length at 8,192, there is enough headroom for this task, but the ceiling would bind harder on longer-horizon agentic environments.
Weight synchronization is handled through Amazon FSx for Lustre. After each optimizer step, updated LoRA adapter weights are written to a shared /shared path and picked up by the inference engines. This is a pragmatic design — it sidesteps custom NCCL-based weight transfer plumbing — but it routes a per-step operation through a network filesystem. AWS does not disclose sync latency or its share of step time, and that overhead would scale differently with full-parameter training, where the payload is the entire model rather than a rank-32 adapter.
The resiliency pitch, and what backs it
AWS's core argument for HyperPod in this context is failure recovery. The service monitors node health and automatically replaces faulty nodes, and when paired with checkpointing, a resubmitted job resumes from its last saved step. The training script writes full training state — weights, optimizer state, learning rate schedule and dataloader position — every 20 steps to a stable path, with resume_mode=latest telling SkyRL where to pick up. Separately, hf_save_interval=20 exports inference-ready LoRA adapters.
The distinction between those two artifact types is a detail teams routinely get wrong, and the post is right to separate them. What the post does not include is any demonstration that recovery worked: there is no reported node failure during the run, no measurement of recovery time, and no accounting of how much rollout progress a mid-episode failure would cost. The resiliency claim is a product capability described, not a result shown.
Read the accuracy numbers carefully
AWS reports that the model hit roughly a 75% solve rate around step 100 and peaked at 96.875% — 62 of 64 mazes — at step 160, against a pre-GRPO baseline of 43.75%, or 28 of 64. The company adds that results will vary with hyperparameters and maze configuration.
Three caveats belong alongside those figures. First, the evaluation set has 64 items, so each maze is worth about 1.6 percentage points; differences of a few points are noise. Second, this is a single run on the "easy" maze variant, with no seeds, variance bands, or harder-difficulty results disclosed. Third, the starting point is not a raw base model but a VisGym SFT checkpoint already trained to parse maze images and emit structured move actions — AWS is explicit that GRPO is only refining which action sequences reach the goal. The headline improvement therefore measures RL on top of task-specific supervised fine-tuning, not RL from scratch.
Also absent: wall-clock training time, total GPU-hours, and cost. The post opens by framing RL post-training as consuming hundreds of GPU-hours of rollouts per run, but never says what this particular run consumed. For anyone budgeting a similar job, that is the number that matters most.
Serving is where the LoRA choice pays off
Because the trained artifact is an adapter rather than a full model, deployment uses Ray Serve's dynamic LoRA loading. AWS stages the adapter in an S3 prefix, runs a RayService built on the AWS Deep Learning Container for Ray Serve LLM, and stands up an OpenAI-compatible endpoint via the ray.serve.llm:build_openai_app builder. Callers select behavior per request through the model field: the base SFT model alone, or <base-model-id>:<adapter-name> to apply the GRPO adapter. Adapters are downloaded on first request and cached on the replica.
The configuration requires max_lora_rank to match the training rank, and the example caps the deployment at one replica and one adapter per replica — fine for a demo, less so for multi-tenant serving where adapter thrash becomes a real concern. Credentials for reading adapters from S3 are handled through Amazon EKS Pod Identity.
The reproducibility details are better than usual
One quiet strength of the post is its container image, which pins both SkyRL and VisGym to specific commit SHAs on top of an official SkyRL base image. RL training stacks are notoriously fragile across versions of vLLM, Ray, Transformers and FlashAttention, and the Dockerfile includes an import check that fails the build if the stack does not load. Teams attempting to reproduce RL results will recognize why that matters.
The operational plumbing is also more convenient than the usual Kubernetes path: the toolkit-for-ray-on-sagemaker-ai package registers a sagemaker_ray:// address scheme so the standard Ray Jobs CLI authenticates with AWS credentials, removing the need for kubectl port-forward or direct network access to the cluster. Monitoring runs through the Ray Dashboard and four pre-built Grafana dashboards provisioned by the HyperPod Observability add-on. Dashboard connection URLs are valid for up to six hours.
What to watch
- Whether AWS or the community publishes throughput, GPU-hour and cost figures for this workload; without them, the colocation argument rests on reasoning rather than measurement.
- How the FSx-based weight sync behaves at larger scale or with full-parameter RL instead of a rank-32 adapter, where the per-step payload is orders of magnitude larger.
- Results on harder VisGym maze difficulties and on non-maze multi-turn environments, which would indicate whether the recipe generalizes or is tuned to a narrow task.
- Evidence that HyperPod's automatic node replacement plus SkyRL's
resume_mode=latestactually recovers a multi-node RL run mid-flight, including how much rollout work is lost. - Whether Ray Serve's dynamic LoRA loading holds up beyond the one-adapter-per-replica demo configuration, which is the common case for teams shipping many task-specific adapters off one base model.
Keep reading
More in Machine Learning →
MIT's Case Against Building More Data Centers: Use the Ones We Have
MIT associate professor Christina Delimitrou argues that cloud infrastructure wastes enormous capacity, and that machine learning can reclaim it. The profile is light on hard numbers.
5 min read

MIT's Cathy Wu on Why Reinforcement Learning Keeps Breaking — and the Workaround That Cut Training Costs 30x
An MIT profile of associate professor Cathy Wu traces years of failed RL experiments to a 2023 result: train on the 10% of problems that generalize, and skip the rest. Up to 30x more efficient.
5 min read

Anthropic Says Robots Can Already Do a Third of US Work Hours — at 300x the Wrong Price
Anthropic's new robot exposure index finds today's machines can perform 74% of physical US job tasks, but are cost-competitive on just 0.3% of work. Economics beats capability.
5 min read