当前位置: 首页 > news >正文

用 Ray 跨节点调用 GPU 部署 DeepSeek 大模型,实现分布式高效推理

在大模型时代,单节点 GPU 资源往往难以满足大模型(如 7B/13B 参数模型)的部署需求。借助 Ray 分布式框架,我们可以轻松实现跨节点 GPU 资源调度,让大模型在多节点间高效运行。本文将以 DeepSeek-llm-7B-Chat 模型为例,详细讲解如何通过 Ray 搭建跨节点集群,结合 vLLM 实现分布式推理,并解决部署过程中的常见问题。

一、背景与目标

为什么需要跨节点 GPU 调用?

  • 模型规模限制:7B 参数的 DeepSeek 模型单卡可加载,但更大的模型(如 33B)单卡显存不足,需多卡并行。
  • 资源利用率:跨节点调用可整合多台服务器的 GPU 资源,避免单节点资源闲置。
  • 分布式推理优势:通过 Ray 的张量并行(Tensor Parallelism),模型层可拆分到不同节点的 GPU,提升推理效率。

本文目标

  • 搭建包含 1 个主节点、2 个工作节点的 Ray 集群。
  • 跨节点调用 2 张 GPU,用 vLLM 部署 DeepSeek-llm-7B-Chat 模型。
  • 实现 OpenAI 兼容的 API 服务,支持客户端调用。

二、环境准备

硬件要求

  • 节点数量:3 台服务器(1 主 2 从,支持 GPU)。
    • 主节点(master):192.168.2.221,至少 1 张 GPU(本文用 Tesla V100-32GB)。
    • 工作节点 1(worker1):192.168.2.226,至少 1 张 GPU。
    • 工作节点 2(worker2):192.168.2.227,至少 1 张 GPU。
  • 网络:节点间内网互通(推荐 10Gbps 以上带宽),支持 SSH 免密登录。

软件要求

工具 / 库版本作用
Python3.9运行环境
Ray2.9.0分布式集群管理
vLLM0.9.2高效大模型推理引擎
CUDA11.8GPU 加速
DeepSeek-llm-7B-Chat-目标部署模型

三、详细部署步骤

步骤 1:全节点初始化环境(所有节点执行)

1.1 安装系统依赖

解决后续可能出现的Python.h缺失问题(编译 C 扩展时需要):

# 基于CentOS/RHEL的系统
dnf install -y python3-devel gcc gcc-c++# 基于Ubuntu的系统
# apt-get install -y python3-dev gcc g++
1.2 创建虚拟环境

统一环境避免依赖冲突:

# 安装virtualenv
pip3 install virtualenv# 创建并激活虚拟环境
cd /opt
virtualenv vllm_env --python=python3.9
source vllm_env/bin/activate  # 激活环境(后续所有操作均在此环境中执行)
1.3 安装核心依赖
# 安装Ray(包含集群管理和客户端组件)
pip install "ray[default,client]" --upgrade# 安装vLLM(支持分布式推理)
pip install vllm==0.9.2# 安装其他工具(可选,用于测试)
pip install requests  # 用于发送API请求

步骤 2:搭建 Ray 分布式集群

2.1 启动主节点(master:192.168.2.221)
# 启动Ray主节点,指定IP、端口和Dashboard
ray start --head \--node-ip-address 192.168.2.221 \  # 主节点IP--port 6379 \                      # 端口(集群元数据存储)--dashboard-host 0.0.0.0 \         # 允许外部访问Dashboard--dashboard-port 8265 \            # Dashboard端口(用于监控集群)--include-dashboard=True \         # 启用Dashboard

启动成功后,会显示工作节点加入命令(需记录):

To add another node to this Ray cluster, run:ray start --address='192.168.2.221:6379'
2.2 加入工作节点(worker1:192.168.2.226 和 worker2:192.168.2.227)

在两个工作节点分别执行以下命令,加入主节点集群:

# 激活虚拟环境(同主节点路径)
source /opt/vllm_env/bin/activate# 加入集群(使用主节点输出的地址)
ray start \--address '192.168.2.221:6379' \  # 主节点地址--node-ip-address 192.168.2.226   # 当前工作节点IP(worker1填226,worker2填227)
2.3 验证集群状态(主节点执行)
# 查看集群节点信息
ray status

预期输出(显示 3 个节点,2 张 GPU 可用):

Node status
---------------------------------------------------------------
Healthy:1 node_abc... (192.168.2.221)1 node_def... (192.168.2.226)1 node_ghi... (192.168.2.227)
Resources
---------------------------------------------------------------
Total Usage: 0.0/192.0 CPU, 0.0/2.0 GPU  # 2张GPU可用

步骤 3:部署 DeepSeek 模型(主节点执行)

3.1 准备模型

将 DeepSeek-llm-7B-Chat 模型下载到所有节点均可访问的路径(推荐用 NFS 共享,避免多节点重复下载):

# 示例:通过Hugging Face Hub下载(需提前登录hf-cli)
huggingface-cli download deepseek-ai/deepseek-llm-7b-chat --local-dir /data/storage/data/VLLM_MODE/deepseek-llm-7b-chat
3.2 启动 vLLM 服务(支持跨节点 GPU 调用)
# 激活虚拟环境
source /opt/vllm_env/bin/activate# 设置Ray集群地址
export RAY_ADDRESS="192.168.2.221:6379"# 启动OpenAI兼容的API服务
python -m vllm.entrypoints.openai.api_server \--model /data/storage/data/VLLM_MODE/deepseek-llm-7b-chat \  # 模型路径--port 9001 \                                              # API服务端口--host 0.0.0.0 \                                           # 允许外部访问--tensor-parallel-size 2 \                                 # 张量并行数(=总GPU数)--distributed-executor-backend ray \                       # 使用Ray作为分布式后端--gpu-memory-utilization 0.9                               # GPU内存利用率(90%)

启动成功的关键日志:

步骤 4:验证跨节点 GPU 调用

4.1 检查 GPU 使用情况(工作节点执行)

在 worker1(192.168.2.226)和 worker2(192.168.2.227)分别执行nvidia-smi,可看到 GPU 被 vLLM 进程占用:

nvidia-smi

预期输出(关键信息):

+-----------------------------------------------------------------------------+
| Processes:                                                                    |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=============================================================================|
|    0   N/A  N/A    872773      C   ...vllm_env/bin/python                   28511MiB |  # vLLM进程占用
+-----------------------------------------------------------------------------+

说明两个节点的 GPU 均被成功调用(每张卡负载约 28GB,符合 7B 模型 + 90% 内存利用率的预期)。

4.2 测试模型推理(客户端执行)

通过 API 发送请求测试:

# 发送推理请求
curl http://192.168.2.221:9001/v1/chat/completions \-H "Content-Type: application/json" \-d '{"model": "deepseek-llm-7b-chat","messages": [{"role": "user", "content": "介绍一下Ray和vLLM的关系"}]}'

成功响应示例(部分):

json

{"id": "chatcmpl-xxx","object": "chat.completion","created": 1689523456,"model": "deepseek-llm-7b-chat","choices": [{"message": {"role": "assistant","content": "Ray是一个分布式计算框架,可用于管理跨节点的GPU资源...vLLM是高效的大模型推理引擎,通过Ray实现分布式部署..."},"finish_reason": "stop","index": 0}]
}

步骤 5:Ray 集群的停止与清理

当需要更新配置或重启集群时,需彻底停止 Ray 进程并清理残留数据,避免旧会话信息干扰:

# 停止当前节点的 Ray 进程
ray stop# 若 ray stop 无效,直接 kill 残留进程(谨慎使用,确保只 kill Ray 相关进程)
pkill -f ray# 清理 Ray 临时目录(包含Redis数据、会话信息等)
rm -rf /tmp/ray/*

注意:以上命令需在所有节点执行(主节点 + 工作节点),确保集群完全停止。清理完成后,可重新执行步骤 2 和步骤 3 启动新集群。

四、常见问题与解决方案

问题 1:Python.h: No such file or directory

  • 原因:缺少 Python 开发库,编译 C 扩展时失败。
  • 解决:安装python3-devel
    dnf install python3-devel  # CentOS/RHEL
    # 或 apt-get install python3-dev  # Ubuntu
    

问题 2:ModuleNotFoundError: No module named 'vllm'

  • 原因:工作节点未安装 vLLM。
  • 解决:在所有工作节点的虚拟环境中安装 vLLM:
    source /opt/vllm_env/bin/activate
    pip install vllm==0.9.2
    

问题 3:Ray Client 连接超时

  • 原因:6379 端口未开放或 Ray Client 服务未启动。
  • 解决
    # 主节点开放端口
    firewall-cmd --add-port=6379/tcp --permanent
    firewall-cmd --reload# 重启Ray时显式指定Client端口
    ray start --head ... --ray-client-server-port 6379
    

问题 4:GPU 资源不足

  • 原因tensor-parallel-size超过实际 GPU 数量。
  • 解决:确保--tensor-parallel-size等于集群总 GPU 数(本文为 2)。
关键代码
pip install "ray[default]" --upgrade
ray start --head   --node-ip-address 192.168.2.221   --port 6379   --dashboard-host 0.0.0.0    --dashboard-port 8265   --include-dashboard=True  创建master ray主节点
ray start   --address '192.168.2.221:6379'   --node-ip-address 192.168.2.226 
ray start   --address '192.168.2.221:6379'   --node-ip-address 192.168.2.227cd /opt/
source vllm_env/bin/activateexport HF_ENDPOINT=https://hf-mirror.com 
huggingface-cli download --resume-download deepseek-ai/deepseek-llm-7b-chat --local-dir /data/storage/data/VLLM_MODE/deepseek-llm-7b-chatRAY_ADDRESS="192.168.2.221:6379" python -m vllm.entrypoints.openai.api_server   --model /data/storage/data/VLLM_MODE/deepseek-llm-7b-chat   --port 9001 --host 0.0.0.0    --tensor-parallel-size 2   --distributed-executor-backend ray  --gpu-memory-utilization 0.9

http://www.lryc.cn/news/589917.html

相关文章:

  • C# StringBuilder源码分析
  • 在不升级Office 32位的情况下,安装64位MDAC
  • 15.dispatcherRunner启动
  • 上线!《指标 + AI 数智应用白皮书》聚焦智能问数与分析等AI高阶应用,深入剖析四大行业落地实践
  • Python数据分析全流程指南:从数据采集到可视化呈现的实战解析
  • 修改pipenv默认安装路径
  • 李宏毅2025《机器学习》第七讲-推理模型:从原理、流派到未来挑战
  • Python面向对象编程(OOP)详解:通俗易懂的全面指南
  • C++面向对象创建打印算术表达式树
  • IIS-网站报500.19错误代码0x8007000d问题解决
  • 代码随想录算法训练营十七天|二叉树part07
  • LeafletJS 入门:构建你的第一个交互式地图
  • 【无标题】LighthouseGS:面向全景式移动拍摄的室内结构感知三维高斯泼溅
  • Day36 Java方法和流程控制练习 计算器
  • 微软AutoGen:多智能体协作的工业级解决方案
  • ESP32——快速入门
  • 外接硬盘写入速度很慢?Windows 写入缓存功能开启教程!
  • 知识点3:python-sdk 核心概念(prompt、image、context)
  • 项目学习笔记 display从none切换成block
  • 尚庭公寓-------图片上传接口
  • 2025年工会考试题库及答案
  • alpineLinux修改包管理为国内源
  • 详解SPFA算法-单源最短路径求解
  • 陆面、生态、水文模拟与多源遥感数据同化的实践技术应用
  • 【图灵完备】算数运算
  • sktime - 时间序列机器学习统一接口
  • 控制Vue对话框显示隐藏
  • C++设计模式之创建型模式
  • 【机器学习】数据理解:数据导入、数据审查与数据可视化
  • 数据降维方法:PCA