使用 Prometheus 和 Grafana 监控 Rollout
作者: https://github.com/meituan-search
最后更新:11/12/2025.
在使用 verl 时,使用 Prometheus 和 Grafana 来监控 rollout 计算过程,以增强系统的可观测性,并便于进一步的性能优化。
我们提供额外的训练监控能力,借助 Prometheus 和 Grafana 来在训练期间展示 rollout 信息,并增强系统可观测性,以便于进一步的性能优化。
系统会自动配置 Prometheus 来从 rollout 服务器抓取指标,从而消除手动配置的步骤。
注意:SGLang 集成目前正在开发和调试中。某些功能可能无法按预期工作,且实现可能会发生变化。请在生产环境中谨慎使用。
概述
下图展示了 Qwen235B 在 AIME2024 数据集上的性能,响应长度为 20k,其中长尾问题的出现非常明显。

下图展示了 Qwen235B 模型的完全异步训练。这里,资源闲置问题非常明显,表明 rollout 资源可以减少。

通过以上两个示例,我们也展示了系统可观测性的必要性。
架构概述
整体工作流程包括以下步骤:
多节点 Ray 集群设置:在多个节点上启动 Ray 集群,并在主节点的环境变量中配置 Grafana 和 Prometheus 的信息
启动 Grafana 服务:在主节点上启动 Grafana,用于监控仪表盘的可视化
启动 Prometheus 服务:在主节点上启动 Prometheus,用于指标收集和存储
verl 异步 Rollout 模式:verl 使用异步 rollout 模式来获取 rollout 服务器的端口和 IP 地址
自动 Prometheus 配置:verl 自动重写 Prometheus 配置,以添加对 rollout 服务器的监控,并通知 Prometheus 重新加载配置
指标收集:程序执行后,可以在 Prometheus 中查看指标
仪表盘可视化:在 Grafana 仪表盘中上传并查看监控指标
详细设置步骤
步骤 1:环境变量设置并启动 Ray 集群
首先,设置必要的环境变量并启动 Ray 服务。
# 主节点环境变量
export GF_SERVER_HTTP_PORT=3000 # Grafana 服务默认端口(可自定义)
export PROMETHEUS_PORT=9090 # Prometheus 服务默认端口(可自定义)
export RAY_HEAD_PORT=6379 # Ray 主节点端口(可自定义)
export RAY_DASHBOARD_PORT=8265 # Ray 仪表盘默认端口(可自定义)
export GRAFANA_PATHS_DATA=/tmp/grafana # Grafana 数据存储目录(可自定义)
export RAY_GRAFANA_HOST="http://${master_ip}:${GF_SERVER_HTTP_PORT}" # Ray 关联的 Grafana 地址
export RAY_PROMETHEUS_HOST="http://${master_ip}:${PROMETHEUS_PORT}" # Ray 关联的 Prometheus 地址
# 在主节点启动 Ray
ray start --head --port=${RAY_HEAD_PORT} --dashboard-port=${RAY_DASHBOARD_PORT}
# 在工作节点启动 Ray
ray start --address={master_addr}:${RAY_HEAD_PORT}
验证: 访问 http://master_ip:8265 以确认 Ray 已成功启动。
步骤 2:启动 Grafana(可视化仪表盘)
Grafana 用于展示 Prometheus 收集的指标(例如缓存命中率、吞吐量等):
# 主节点
nohup grafana-server \
--config /tmp/ray/session_latest/metrics/grafana/grafana.ini \
--homepath /usr/share/grafana \
web > grafana.log 2>&1 &
验证: 访问 http://master_ip:3000 以确认 Grafana 已成功启动(默认凭据:admin/admin)。
如果需要更改端口,请修改 GF_SERVER_HTTP_PORT 环境变量,grafana-server 会自动识别它。
步骤 3:启动 Prometheus(指标收集)
Prometheus 负责从 vLLM 服务抓取指标,并将其存储为时间序列数据:
# 主节点
nohup prometheus \
--config.file /tmp/ray/session_latest/metrics/prometheus/prometheus.yml \
--web.enable-lifecycle \
--web.listen-address=:${PROMETHEUS_PORT} \
> prometheus.log 2>&1 &
验证: 访问 http://master_ip:9090 以确认 Prometheus 服务已成功启动。
步骤 4 和 5:启动 verl 训练
使用以下参数配置来启动 verl 训练:
必需配置:
actor_rollout_ref.rollout.mode="async"actor_rollout_ref.rollout.disable_log_stats=Falseactor_rollout_ref.rollout.prometheus.enable=True
如果使用默认端口,此参数可以省略。
actor_rollout_ref.rollout.prometheus.port=9090
如果使用默认路径,此参数可以省略。
actor_rollout_ref.rollout.prometheus.file="/tmp/ray/session_latest/metrics/prometheus/prometheus.yml"
served_model_name 默认使用 model_path.split("/")[-1] 进行数据统计。用户也可以自定义其他别名:
actor_rollout_ref.rollout.prometheus.served_model_name="Qwen3-235B"
Shell 脚本示例:
WORKING_DIR=${WORKING_DIR:-"${PWD}"}
RUNTIME_ENV=${RUNTIME_ENV:-"${WORKING_DIR}/verl/trainer/runtime_env.yaml"}
rollout_mode="async"
rollout_name="vllm" # 选项:sglang 或 vllm
if [ "$rollout_mode" = "async" ]; then
export VLLM_USE_V1=1
return_raw_chat="True"
fi
# 同步训练
ray job submit --no-wait --runtime-env="${RUNTIME_ENV}" \
--working-dir "${WORKING_DIR}" \
-- python3 -m verl.trainer.main_ppo \
data.return_raw_chat=${return_raw_chat} \
actor_rollout_ref.rollout.name=${rollout_name} \
actor_rollout_ref.rollout.mode=${rollout_mode} \
actor_rollout_ref.rollout.disable_log_stats=False \
actor_rollout_ref.rollout.prometheus.enable=True
...
# 异步训练
ray job submit --no-wait --runtime-env="${RUNTIME_ENV}" \
--working-dir "${WORKING_DIR}" \
-- python3 recipe.fully_async_policy.fully_async_main \
data.return_raw_chat=${return_raw_chat} \
actor_rollout_ref.rollout.name=${rollout_name} \
actor_rollout_ref.rollout.mode=${rollout_mode} \
actor_rollout_ref.rollout.disable_log_stats=False \
actor_rollout_ref.rollout.prometheus.enable=True
...
步骤 6:在 Prometheus 中查看指标
任务执行后,验证 Prometheus 是否正确收集指标。
验证: 访问 Prometheus 界面 http://master_ip:9090 并搜索 vllm: 或 sglang: 以确认指标正在正确报告。
故障排除:
如果没有指标出现:
检查
AgentLoopManager的日志以查找服务器端口访问
http://master_ip:server_port/metrics以验证服务器指标是否可用确认已设置
actor_rollout_ref.rollout.disable_log_stats=False
步骤 7:在 Grafana 中查看指标
任务执行后,登录 Grafana 以查看和自定义监控仪表盘。
登录: 访问 http://master_ip:3000(默认凭据:admin/admin)
导入仪表盘:
选择 “仪表盘” → “新建” → “导入” → “上传仪表盘 JSON 文件”
上传预构建的仪表盘 JSON 文件
可用仪表盘: