ROLL 资源配置
在 ROLL 框架中,资源设置是通过 YAML 配置文件中的 device_mapping 参数来指定每个 worker 使用哪些 GPU 设备。本文档将详细介绍如何配置资源,包括共置和分离模式、多角色资源配置以及 worker 数量的计算方式。
GPU 资源配置
在 ROLL 中,GPU 资源的设置通过在 YAML 配置文件中为每个 worker 指定 device_mapping 参数来完成。该参数是一个能被 Python eval() 函数解析为列表的字符串,列表中的值表示全局逻辑 GPU RANK。
例如:
actor_train:
device_mapping: list(range(0,16))
actor_infer:
device_mapping: list(range(16,24))
在这个例子中,系统总共需要 24 块 GPU,其中 actor_train 部署在 GPU [0,16) 上,actor_infer 部署在 GPU [16,24) 上。
CPU 资源配置
对于仅使用 CPU 资源的 worker,只需配置 world_size 参数,系统会自动在 CPU 资源上部署相应数量的 worker (ray.Actor)。
例如:
code_sandbox:
world_size: 8
共置 (Colocated) 与分离 (Disaggregated) 模式
共置模式
在共置模式下,多个角色共享相同的 GPU 资源。这种方式可以提高资源利用率,减少资源浪费。
例如,在 examples/docs_examples/example_grpo.yaml 中:
actor_infer:
device_mapping: list(range(0,8)) # 与actor_train共享[0,8) GPU, GPU时分复用
# ...
actor_train:
device_mapping: list(range(0,8))
分离模式
在分离模式下,不同角色使用不同的 GPU 资源。这种独立部署的方式是实现异步训练的关键。
ROLL里面通过为不同的worker设置不同的device_mapping直接实现分离部署。
例如,在 examples/qwen2.5-7B-agentic_megatron/agentic_val_webshop_async.yaml 中:
# actor train 使用GPU[0, 1, 2, 3], actor_infer 使用GPU[4, 5, 6, 7]
#
actor_train:
device_mapping: list(range(0,4))
actor_infer:
device_mapping: list(range(4,8))
多角色资源配置的灵活性
ROLL 框架支持为不同角色配置不同的资源策略,以满足各种应用场景的需求:
- 不同角色可以使用不同数量的 GPU
- 不同角色可以使用不同的推理引擎(如 vLLM、SGLang 等)
- 不同角色可以设置不同的
num_gpus_per_worker参数- 训练角色的num_gpus_per_worker始终为1
- 推理角色的num_gpus_per_worker根据所需资源会>=1,vllm根据并行设置自动计算,sglang直接指定