【vLLM 学习】Rlhf Colocate
内容提要
本文介绍了如何在同一GPU上协同部署vLLM工作进程与训练执行器,适用于类RLHF应用。通过设置环境变量和使用CUDA-IPC传递张量,实现多个进程间的高效通信。
关键要点
-
介绍如何在同一GPU上协同部署vLLM工作进程与训练执行器,适用于类RLHF应用。
-
通过设置环境变量VLLM_RAY_PER_WORKER_GPUS和VLLM_RAY_BUNDLE_INDICES,使用Ray控制vLLM工作进程的部署位置。
-
使用CUDA-IPC传递张量,因为在同一GPU上存在多个进程时NCCL无法正常工作。
-
每个工作进程将使用0.4个GPU,以便在同一GPU上调度两个实例。
-
创建vLLM实例时,确保目标GPU上没有GPU活动,以避免干扰vLLM内存分析。
-
训练执行器可能只拥有部分权重,需要从所有执行器进行all-gather操作获取完整权重。
-
检查部署情况,确保训练执行器与推理引擎部署在同一GPU上。
-
收集所有训练执行器的IPC句柄,并更新推理引擎的权重。
-
验证推理引擎的权重是否已更新。
延伸解读
协同部署的优势
在同一GPU上协同部署vLLM工作进程与训练执行器,可以显著提高资源利用率。通过合理配置环境变量,用户能够在有限的硬件资源上实现更高效的模型训练和推理,尤其适用于类RLHF应用场景。
CUDA-IPC的重要性
使用CUDA-IPC进行张量传递是解决多个进程间通信问题的关键。由于NCCL在同一GPU上无法正常工作,CUDA-IPC提供了一种有效的替代方案,确保了数据传输的高效性和准确性。
注意GPU活动的影响
在创建vLLM实例时,确保目标GPU上没有其他活动是至关重要的。任何干扰都可能导致内存分析失败,从而影响模型的性能和稳定性。因此,用户在部署前应仔细检查GPU的使用情况。
延伸问答
如何在同一GPU上部署vLLM工作进程与训练执行器?
通过设置环境变量VLLM_RAY_PER_WORKER_GPUS和VLLM_RAY_BUNDLE_INDICES,使用Ray控制vLLM工作进程的部署位置。
为什么在同一GPU上使用CUDA-IPC传递张量?
因为在同一GPU上存在多个进程时,NCCL无法正常工作,因此需要使用CUDA-IPC进行高效通信。
每个工作进程使用多少GPU资源?
每个工作进程将使用0.4个GPU,以便在同一GPU上调度两个实例。
如何确保训练执行器与推理引擎部署在同一GPU上?
检查部署情况,确保前两个训练执行器与第一个推理引擎部署在同一GPU上,最后两个训练执行器与第二个推理引擎部署在同一GPU上。
在创建vLLM实例时需要注意什么?
确保目标GPU上没有GPU活动,以避免干扰vLLM内存分析。
如何更新推理引擎的权重?
收集所有训练执行器的IPC句柄,并通过collective_rpc方法更新推理引擎的权重。