保姆级教程:在4台A10服务器上用vLLM和Ray部署Qwen2.5-14B模型(含跨节点SSH配置避坑)

张开发
2026/6/10 19:12:43 15 分钟阅读
保姆级教程:在4台A10服务器上用vLLM和Ray部署Qwen2.5-14B模型(含跨节点SSH配置避坑)
多机分布式推理实战基于vLLM与Ray部署Qwen2.5-14B模型的完整指南当面对需要处理大规模语言模型推理任务时单台服务器往往难以满足性能和吞吐量的需求。本文将详细介绍如何利用4台配备NVIDIA A10显卡的服务器通过vLLM和Ray框架搭建分布式推理环境完整部署Qwen2.5-14B模型。1. 环境准备与系统配置在开始部署前确保所有服务器满足以下基础要求操作系统Ubuntu 20.04 LTS或更高版本显卡驱动NVIDIA驱动版本≥525.60.13CUDA版本12.1及以上网络节点间延迟1ms带宽≥10Gbps关键配置步骤更新系统并安装基础工具包sudo apt update sudo apt upgrade -y sudo apt install -y git curl wget unzip build-essential rsync pdsh设置主机名解析在所有节点执行sudo hostnamectl set-hostname --static te1 # 分别设置为te1, te2, te3, te4 echo 172.18.81.126 te1 /etc/hosts echo 172.18.81.127 te2 /etc/hosts echo 172.18.81.128 te3 /etc/hosts echo 172.18.81.129 te4 /etc/hosts注意IP地址需根据实际环境调整确保各节点间可以互相ping通2. 跨节点SSH免密登录配置分布式部署的核心是节点间的无缝通信。以下是建立SSH信任关系的详细流程修改SSH配置所有节点sudo sed -i s/#PasswordAuthentication yes/PasswordAuthentication yes/g /etc/ssh/sshd_config sudo systemctl restart sshd在主节点(te1)生成密钥并分发ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys for node in te1 te2 te3 te4; do ssh-copy-id -i ~/.ssh/id_rsa.pub root$node done验证跨节点访问pdsh -S -w te1,te2,te3,te4 hostname常见问题排查如果出现连接超时检查防火墙设置sudo ufw allow 22确保各节点的~/.ssh目录权限为700使用ssh -v rootte2查看详细的连接调试信息3. Python环境与依赖安装我们推荐使用Miniconda管理Python环境以下是具体步骤安装Miniconda所有节点wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh bash /tmp/miniconda.sh -b -p /opt/miniconda3 echo export PATH/opt/miniconda3/bin:$PATH ~/.bashrc source ~/.bashrc创建专用环境并安装依赖conda create -n vllm python3.10 -y conda activate vllm pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 pip install vllm0.3.3 ray2.10.0 transformers4.38.1版本兼容性矩阵组件推荐版本最低要求vLLM0.3.30.2.0Ray2.10.02.8.0PyTorch2.1.22.0.0CUDA12.111.84. Ray集群部署与配置Ray集群的搭建是分布式推理的核心以下是详细配置流程在主节点(te1)启动Head节点ray start --head --node-ip-addresste1 --port6379 \ --num-gpus1 \ --resources{node:te1: 1}在工作节点(te2-te4)加入集群ray start --addresste1:6379 \ --num-gpus1 \ --resources{node:te2: 1} # 分别修改为te3, te4验证集群状态ray status性能优化参数--object-store-memory: 设置共享内存大小建议为总内存的30%--num-cpus: 指定CPU核心数--dashboard-host: 启用监控面板5. Qwen2.5-14B模型部署针对Qwen2.5-14B模型的分布式部署需要特别注意张量并行配置下载模型权重只需在一个节点执行huggingface-cli download Qwen/Qwen2.5-14B \ --repo-type model \ --local-dir /data/models/qwen2.5-14b \ --local-dir-use-symlinks False使用rsync同步到其他节点for node in te2 te3 te4; do rsync -avzP /data/models/qwen2.5-14b/ root$node:/data/models/qwen2.5-14b/ done启动vLLM服务python -m vllm.entrypoints.openai.api_server \ --model /data/models/qwen2.5-14b \ --tensor-parallel-size 4 \ --trust-remote-code \ --gpu-memory-utilization 0.8 \ --max-num-seqs 128 \ --host 0.0.0.0 \ --port 8000关键参数解析--tensor-parallel-size 4: 匹配我们的4节点部署--gpu-memory-utilization 0.8: 预留20%显存余量--max-num-seqs 128: 根据A10显存容量调整6. 服务测试与性能监控部署完成后需要进行全面的功能验证和性能评估基础功能测试curl http://te1:8000/v1/completions \ -H Content-Type: application/json \ -d { model: /data/models/qwen2.5-14b, prompt: 解释量子计算的基本原理, max_tokens: 256, temperature: 0.7 } | jq压力测试脚本示例import requests import concurrent.futures def send_request(prompt): response requests.post( http://te1:8000/v1/completions, json{ model: /data/models/qwen2.5-14b, prompt: prompt, max_tokens: 128 } ) return response.json() prompts [写一首关于春天的诗] * 100 with concurrent.futures.ThreadPoolExecutor(max_workers32) as executor: results list(executor.map(send_request, prompts))性能指标参考值A10显卡指标单节点4节点集群吞吐量(tokens/s)85320延迟(ms)350380并发请求数321287. 运维与优化建议在实际生产环境中还需要考虑以下运维方面的问题日志监控方案# 使用Ray的日志聚合功能 ray logs # 查看所有节点日志 ray dashboard # 访问Web监控界面自动恢复脚本#!/bin/bash while true; do if ! pgrep -f vllm.entrypoints.openai.api_server /dev/null; then echo vLLM进程异常终止正在重启... | tee -a /var/log/vllm_monitor.log conda activate vllm nohup python -m vllm.entrypoints.openai.api_server ... fi sleep 30 done模型更新策略使用版本化目录结构/data/models/qwen2.5-14b-v1.0通过软链接切换当前版本ln -sfn /data/models/qwen2.5-14b-v1.1 /data/models/current滚动重启服务节点

更多文章