Accelerate multimodal RL training with SkyRL on Amazon SageMaker HyperPod Amazon Web Services published a walkthrough for running the open-source SkyRL reinforcement learning framework on Amazon SageMaker HyperPod, training a Qwen3-VL-8B vision-language model to navigate visual mazes with Group Relative Policy Optimization (GRPO). Starting from the VisGym supervised fine-tuning checkpoint, GRPO post-training on HyperPod raised the maze solve rate from 43.75% to more than 95% on a fixed 64-maze evaluation set, using at least 3 ml.g7e.12xlarge instances and one ml.r5d.16xlarge instance. The setup relies on HyperPod's cluster resiliency features, which monitor node health and automatically replace faulty nodes, plus checkpointing so long multi-node RL runs resume from the last saved step. Artificial Intelligence https://aws.amazon.com/blogs/machine-learning/ Accelerate multimodal RL training with SkyRL on Amazon SageMaker HyperPod Reinforcement learning RL post-training is becoming a standard step in building capable language model agents. Models learn to reason and act across sequences of steps by generating trajectories, receiving rewards, and updating their policy based on outcomes. Running this at scale, across multiple nodes with hundreds of GPU-hours of rollouts per training run, requires persistent cluster infrastructure. That infrastructure needs to sustain long jobs, recover from hardware failures without losing progress, and provide visibility into training dynamics as they unfold. Amazon SageMaker HyperPod https://aws.amazon.com/sagemaker/hyperpod/ provides this infrastructure for large-scale machine learning ML workloads on Amazon Elastic Kubernetes Service Amazon EKS https://aws.amazon.com/eks/ . Through its cluster resiliency features https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-resiliency.html , it continuously monitors node health and automatically replaces faulty nodes, so a hardware failure does not take the cluster down with it. Paired with checkpointing, a training job can pick up from its last saved step instead of restarting from scratch. This matters for long multi-node RL runs, where a single hardware failure would otherwise cost hours of rollout progress. Combined with the Ray capabilities on HyperPod https://aws.amazon.com/blogs/machine-learning/introducing-new-ray-capabilities-on-sagemaker-hyperpod/ , you can create Ray clusters from SageMaker Studio, submit jobs remotely using secure connections, and monitor training through pre-built Amazon Managed Grafana dashboards https://aws.amazon.com/grafana/ that the HyperPod Observability EKS add-on provisions for you. In this post, we show how to use these capabilities to run SkyRL https://github.com/NovaSky-AI/SkyRL , an open-source RL framework, to train a Qwen3-VL-8B vision-language model to navigate visual mazes using Group Relative Policy Optimization GRPO on SageMaker HyperPod. Starting from the VisGym SFT checkpoint https://huggingface.co/VisGym/visgym model , a supervised fine-tuning SFT starting point, GRPO post-training on HyperPod improves the maze solve rate from 43.75% to more than 95% on a fixed 64-maze evaluation set. Prerequisites To follow this walkthrough, you need: - A SageMaker HyperPod cluster with Amazon EKS orchestration that has at least 3 ml.g7e.12xlarge instances and one ml.r5d.16xlarge instance. - The following Kubernetes operators installed in your cluster: KubeRay operator , HyperPod Observability EKS add-on , and HyperPod Ray Endpoint Operator for remote job submission . See the Ray on HyperPod getting started guide https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-ray-getting-started.html . - The Amazon FSx for Lustre CSI driver https://github.com/kubernetes-sigs/aws-fsx-csi-driver installed on the cluster. You also need an Amazon FSx for Lustre filesystem, a PersistentVolume backed by that filesystem, and a PersistentVolumeClaim ReadWriteMany that the pods can mount. The training job uses this at /shared for checkpoint storage, Low-Rank Adaptation LoRA adapter synchronization, and evaluation output. - A SageMaker Studio domain with permissions to connect to your HyperPod cluster. See setting up SageMaker Studio for Ray https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-ray-studio-setup.html . - The toolkit-for-ray-on-sagemaker-ai Python package installed. Background This section reviews the reinforcement learning concepts behind the training and the cluster topology the walkthrough uses. Multi-turn RL and GRPO Standard single-turn RL assigns a reward to a single model output. Multi-turn RL https://docs.aws.amazon.com/sagemaker/latest/dg/model-customize-mtrl.html instead trains an agent over a whole sequence of steps, where it observes a state, acts, gets feedback, and moves on to the next state. The policy learns from the reward accumulated over the entire episode rather than from any one step. Consider the example problem of navigating a 2D maze. One episode is a single run at a maze, and each turn is one move: the model looks at the current picture of the maze, chooses a direction or decides to stop, and the environment sends back the updated view. Rewards are sparse, so the model earns 1.0 only when it actually reaches the goal within the move limit and nothing otherwise. There is no move-by-move answer key to train against, since whether a move was good depends on the moves around it. This is where SkyRL’s Group Relative Policy Optimization GRPO comes in. For each starting position, the agent runs the maze several times under the current policy, and GRPO grades those runs against one another, reinforcing the ones that beat the group’s average and pushing down the ones that trail it. That within-group comparison is the whole training signal, which lets GRPO work without a separate critic or value model. Training topology The solution discussed here runs SkyRL on a HyperPod Ray cluster with three GPU worker nodes and a CPU head node. SkyRL colocates inference and training on the same GPUs: vLLM engines generate rollouts complete maze episodes while a policy model sharded with Fully Sharded Data Parallel FSDP handles gradient updates. After each optimizer step, updated LoRA adapter weights sync from the training ranks to the inference engines through Amazon FSx for Lustre shared storage. These are the instance types we used. Other GPU instances and cluster sizes work as well, provided the workers have enough GPU memory for the model. - Workers : 3x ml.g7e.12xlarge 2x NVIDIA RTX PRO 6000 Blackwell GPUs each, 6 GPUs total . - Head : ml.r5d.16xlarge 512 GB RAM, manages Ray GCS, dashboard, and LoRA adapter consolidation . - Policy model : Qwen3-VL-8B with LoRA rank 32 , sharded across the 6 GPUs using PyTorch FSDP. - Rollout engines : 6 colocated vLLM instances, one per GPU. - Shared storage : Amazon FSx for Lustre at /shared , used for LoRA sync and evaluation output. HyperPod provides the cluster infrastructure: the Ray cluster is created from SageMaker Studio, job submission uses the sagemaker ray:// protocol, and training metrics flow automatically into pre-built Amazon Managed Grafana dashboards through the HyperPod Observability add-on. Solution overview The following steps walk through preparing the training environment, launching the cluster, running the job, monitoring progress, and hosting the trained model. Step 1: Prepare the container image To get started quickly, use the following Dockerfile to build a container image with SkyRL, VisGym, and their dependencies pre-installed. This is the image you will specify when launching your Ray cluster on HyperPod in the next step. It builds on the official NovaSky-AI SkyRL base and pins both SkyRL and VisGym to specific commit SHAs so the build is reproducible: Build the image and push it to an Amazon Elastic Container Registry Amazon ECR repository in your account. Note the full image URI, as you will use it when creating the Ray cluster in the next step: Step 2: Launch the Ray cluster from SageMaker Studio Navigate to SageMaker Studio, choose HyperPod , select your cluster, then go to the Tasks tab. From the task type list, choose RayCluster , then choose Create Ray Cluster . In the creation form, give the cluster the name skyrl-visgym , set the head instance type to ml.r5d.16xlarge , and add three workers using ml.g7e.12xlarge . Set the container image to the IMAGE URI you pushed in Step 1. The instance types listed here are what we used for this walkthrough. Other instance types will work, but keep one constraint in mind for the head node: it needs large memory. The head consolidates LoRA adapter shards from the GPU workers at each checkpoint save, which briefly loads the full adapter weight set into CPU memory. We used ml.r5d.16xlarge for its large memory capacity 512 GB RAM to accommodate this. Mounting Amazon FSx for Lustre To attach your Amazon FSx filesystem, choose the YAML button in the top-right corner of the creation form to switch to the raw manifest editor, then add the volume and mount to both the head and worker pod specs. The relevant section for each pod looks like this: Replace