
Ubuntu系统使用CondaVllm方式部署Qwen3.5-27B环境版本插件版本号fastapi0.136.3starlette1.3.0pydantic2.13.4vLLM0.19.1python33.10.20pip326.1.1NVIDIA-SMI535.54.03CUDA12.2PyTorch2.10.0Ubuntu20.04.6安装强制条件显卡决定驱动最高版本、驱动决定cuda最高版本 cuda决定torch最高棒棒棒 torch决定vllm最高版本显卡硬件 → 驱动最高版本 → CUDA Toolkit 最高版本 → PyTorch 最高版本 → vLLM 最高版本[ GPU 硬件 ] ↑ | 执行所有并行计算任务张量运算、矩阵乘、Attention等 | [ 显卡驱动 (NVIDIA Driver) ] ↑ | 操作系统与GPU之间的桥梁管理GPU资源、显存分配提供底层的CUDA Driver API | 版本决定了最高可支持的CUDA能力如 nvidia-smi 显示 CUDA Version: 12.1 | [ CUDA 运行时库 (CUDA Runtime) ] ↑ | 封装更易用的运行时APIcudaMalloc、cudaMemcpy、核函数启动等 | 程序运行时动态链接到 libcudart.soPyTorch 和 vLLM 直接调用这些库 | [ PyTorch (torch) ] ↑ | 提供张量计算、自动微分、以及大量高性能的CUDA算子如 cuBLAS、cuDNN | 内置了特定版本的CUDA依赖通过 cu118 或 cu121 标识 | 上层框架vLLM / transformers通过 PyTorch 执行实际的计算 | [ Transformer 模型权重计算图 ] ↑ | 具体的神经网络结构设计Multi-Head Attention、FFN、LayerNorm 等 | 包含预训练好的参数权重文件 .safetensors 或 .bin和配置文件 config.json | 本身不是可运行的软件需要被加载到 PyTorch 或 vLLM 中才能执行推理 | [ vLLM ] ↑ | 高性能推理引擎负责加载 Transformer 模型并用 PagedAttention、连续批处理等 | 技术优化显存占用与吞吐量。内部调用 PyTorch 或自己的CUDA扩展完成计算 | 对外提供 HTTP 服务或 Python 接口供上层应用调用vllm (版本) └── torch (特定版本) ├── CUDA Toolkit 版本 (cu121 / cu124 / cu126...) ├── Compute Capability (sm_xx决定支持哪些 GPU 架构) └── Python 版本 (cp310 / cp311 / cp312...) vllm0.x.x └── 要求 torch2.x.x └── torch wheel 文件名: torch-2.x.xcu126-cp311-cp311-linux_x86_64.whl ↑ ↑ ↑ CUDA版本 Python 架构 (工具链) 版本 wheel 内部编译了哪些 sm_xx → 这取决于 torch 官方构建时的选择驱动全局只能一个、其他都可以有多个dos命令Ubuntu查询当前文件夹磁盘空间大小df -h /xxx/xxx查询当前文件夹下文件以及大小du -h *返回上一级cd …新建文件夹mkdri xxxxxx1. 查看 NVIDIA 驱动和 CUDA 版本 nvidia-smiNVIDIA 驱动如果 nvidia-smi 能正常显示就跳过sudo apt update sudo apt install nvidia-driver-550sudo reboot当前实操服务器 当前显卡V100*8*12GB96GB显存 显卡version是570.133.07 CUDA version 12.8查看 Python 版本需要 3.9python3 --version查看有没有 pippip3 --version装 conda最省心wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shbash Miniconda3-latest-Linux-x86_64.sh创建环境装依赖conda create -n vllm python3.10 -yconda activate vllm退出vllm conda如果启动vllm的话不需要执行这个conda activate vllm安装 CUDA Toolkit 12.4conda install nvidia/label/cuda-12.4.0::cuda-toolkit -y验证nvcc --version安装PyTorch 版本pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128查看 PyTorchpip show torchpython3 -c “import torch; print(torch.version)”vllm的版本最高只能使用0.19受限于显卡和CUDA版本pip install vllm0.19.1查看 vllmpip show vllmpython3 -c “import vllm; print(vllm.version)”设置国内镜像export HF_ENDPOINThttps://hf-mirror.com安装依赖pip install huggingface_hub下载模型该模型56GB其中27B的B是百亿参数的意思B参数的数越大则需要的显存越大HF_ENDPOINThttps://hf-mirror.com hf download Qwen/Qwen3.5-27B --local-dir ./Qwen3.5-27B用本地路径启动 其中tensor-parallel-size的8是使用8张显卡这种只是临时启动终端退出会停止进程vllm serve ./Qwen3.5-27B --tensor-parallel-size 8 --pipeline-parallel-size 1 --dtype float16 --host 0.0.0.0 --port 5001 --gpu-memory-utilization 0.90 --max-model-len 16384 --max-num-seqs 64使用nohup后台启动首次启动编译会非常慢需要耐心等待模型的隐藏维度是 10240需要能被 8 整除。tensor-parallel-size 必须能整除这个数。CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 nohup vllm serve ./Qwen3.5-27B --tensor-parallel-size 8 --pipeline-parallel-size 1 --dtype float16 --host 0.0.0.0 --port 5001 --gpu-memory-utilization 0.90 --max-model-len 16384 --max-num-seqs 64 vllm.log 21 参数类别参数名设定值功能说明环境变量CUDA_VISIBLE_DEVICES0,1,2,3指定可见的GPU设备使用4张卡模型配置--model/data/wh/models/Qwen3.6-27B模型路径--served-model-nameQwen3.6-27BAPI对外暴露的模型名称--trust-remote-code-信任并执行模型仓库中的自定义代码--dtypefloat16模型数据类型半精度节省显存网络配置--host0.0.0.0监听所有网络接口--port5001API服务端口--api-keyqweasdzxcAPI访问认证密钥并行策略--tensor-parallel-size4张量并行度将模型切分到4张卡--pipeline-parallel-size1流水线并行度不启用采样参数--temperature1.0控制随机性值越高输出越多样--top-p0.95核采样只从累积概率top-p的token中采样--top-k20只从概率最高的top-k个token中采样extraBody--min-p0.0 0.0-1.0只从概率最高的top-k个token中采样--presence-penalty1.5惩罚已出现的token增加话题多样性extraBody--repetition-penalty1.0重复惩罚1.0减少重复1.0增加重复frequency_penalty-2.0 ~ 2.0根据 token出现频率进行惩罚显存优化--gpu-memory-utilization0.90GPU显存利用率上限90%--max-model-len16384最大序列长度16K tokens--max-num-seqs64最大并发序列数--enable-prefix-caching-启用前缀缓存加速重复前缀的请求Agent功能--enable-auto-tool-choice-启用模型自动选择工具调用--tool-call-parserqwen3_coder工具调用解析器Qwen3代码格式--reasoning-parserqwen3推理解析器Qwen3思维链格式查看进程是否存在ps aux | grep “vllm serve”2. 查看日志tail -f vllm.log杀死进程pkill -9 -f vllm测试curl http://localhost:5001/v1/models因为Qwen部署在异地机房需要使用frp映射到公网1.在github下载frp客户端到异地机房2.frp客户端压缩包上传到异地机房服务器tar -xzf frp_0.69.1_linux_amd64.tar.gz3.解压frp客户端然后进入解压文件夹cd frp_0.69.1_linux_amd644.查看frp配置文件cat frpc.tomlserverAddr frp服务端的公网服务器的IP serverPort frp服务端的bindPort端口 auth.methodtoken auth.tokenfrp服务端的token参数 [[proxies]] name vllm-api type tcp localIP 127.0.0.1 localPort 5001 remotePort 5001持久化启动frpnohup ./frpc -c frpc.toml frpc.log 21 查看是否运行ps aux | grep frpc查看日志tail -f frpc.log停止pkill frpc本地笔记本电脑cmd测试curl http://frp服务端的公网服务器的IP:5001/v1/models浏览器控制台流式输出asyncfunctionchat(){constresawaitfetch(http://frp服务端的公网服务器的IP:5001/v1/chat/completions,{method:POST,headers:{Content-Type:application/json},body:JSON.stringify({model:./Qwen3-5-27B,messages:[{role:user,content:你好,你是谁}],max_tokens:256,stream:true})});constreaderres.body.getReader();constdecodernewTextDecoder();letresult;while(true){const{done,value}awaitreader.read();if(done)break;constchunkdecoder.decode(value);for(constlineofchunk.split(\n)){if(!line.startsWith(data: )||line.includes([DONE]))continue;try{constcontentJSON.parse(line.slice(6)).choices[0]?.delta?.content||;resultcontent;console.clear();console.log(result);}catch(e){}}}}chat();