【vLLM 学习】Rlhf Colocate

💡 原文中文,约4500字,阅读约需11分钟。
📝

内容提要

本文介绍了如何在同一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方法更新推理引擎的权重。

🏷️

标签

➡️

继续阅读