docs/amd_tutorial/amd_quick_start.rst
Last updated: 07/24/2026.
Author: Mingjie Lu <https://github.com/mingjielu>, Xiaohong Kou <https://github.com/xiaohong42>, Fuwei Yang <https://github.com/amd-fuweiy>, Zhaodong Bing <https://github.com/aaab8b>
This document is a quick-start tutorial for running VeRL on AMD ROCm. It provides a production-style bring-up flow for container startup, environment verification, and training examples.
Current software and hardware scope:
Runtime modes: fully supports Fully Async and Colocate.
Inference engine: fully supports vLLM and SGLang.
Trainer backends: FSDP, FSDP2 and Megatron.
GPU targets:
gfx942)gfx950)Use the following prebuilt image for tutorial and validation:
amdagi/verl-dev:rocm7.14_torch2.12_release_0724Or build from source:
docker/rocm/Dockerfile.rocm <https://github.com/verl-project/verl/blob/main/docker/rocm/Dockerfile.rocm>_Before launching the container, ensure:
/dev/kfd and /dev/dri... code-block:: bash
NAME=verl_release
DOCKER=amdagi/verl-dev:rocm7.14_torch2.12_release_0724
docker pull $DOCKER
docker run -it --name $NAME --device /dev/kfd --device /dev/dri \
--privileged --network=host \
--group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
--shm-size=2048g \
--ulimit memlock=-1 --ulimit stack=67108864 \
-w /workspace \
$DOCKER \
/bin/bash
.. code-block:: bash
# ROCm and visible GPU targets
rocminfo | grep -E "gfx942|gfx950" || true
# PyTorch + ROCm sanity check
python - <<'PY'
import torch
print("torch:", torch.__version__)
print("rocm :", torch.version.hip)
print("cuda_available:", torch.cuda.is_available())
if torch.cuda.is_available():
print("gpu_count:", torch.cuda.device_count())
print("device_0:", torch.cuda.get_device_name(0))
PY
.. list-table:: Current support status :header-rows: 1
.. list-table:: :header-rows: 1
bash examples/grpo_trainer/run_qwen3_8b_fsdp.sh <../../examples/grpo_trainer/run_qwen3_8b_fsdp.sh>_bash examples/grpo_trainer/run_qwen3_5_35b_megatron.sh <../../examples/grpo_trainer/run_qwen3_5_35b_megatron.sh>_bash verl/experimental/fully_async_policy/shell/dapo_7b_math_fsdp2_4_4.sh <../../verl/experimental/fully_async_policy/shell/dapo_7b_math_fsdp2_4_4.sh>_bash verl/experimental/fully_async_policy/shell/geo3k_qwen25vl_7b_megatron_4_4.sh <../../verl/experimental/fully_async_policy/shell/geo3k_qwen25vl_7b_megatron_4_4.sh>_bash examples/grpo_trainer/run_qwen3_8b_fsdp.sh <../../examples/grpo_trainer/run_qwen3_8b_fsdp.sh>_ (vllm->sglang)bash examples/grpo_trainer/run_qwen3_8b_megatron.sh <../../examples/grpo_trainer/run_qwen3_8b_megatron.sh>_ (vllm->sglang)bash verl/experimental/fully_async_policy/shell/dapo_7b_math_fsdp2_4_4.sh <../../verl/experimental/fully_async_policy/shell/dapo_7b_math_fsdp2_4_4.sh>_ (vllm->sglang)bash verl/experimental/fully_async_policy/shell/geo3k_qwen25vl_7b_megatron_4_4.sh <../../verl/experimental/fully_async_policy/shell/geo3k_qwen25vl_7b_megatron_4_4.sh>_ (vllm->sglang)PYTORCH_ALLOC_CONF=expandable_segments:True is set by default in Dockerfile.rocm to prevent out-of-memory (OOM). However, this setting may conflict with vllm_custom_all_reduce, so we set vllm.disable_custom_all_reduce=True in config.yaml by default which will be removed in the future once ROCm resolves the conflict.attention_backend must be set to triton for SGLang.