本文将为您详细介绍QwQ-32B模型的特性、关键指标、边缘云部署的最佳实践以及测试环境搭建的步骤。为您提供了关于QwQ-32B模型的全面指南,帮助您快速了解模型特性、部署要求和性能优化方法,从而高效地在边缘云环境中部署和使用该模型,提升推理效率并降低成本。
QwQ-32B模型
模型简介
QwQ-32B模型是基于 Qwen2.5-32B训练的开源推理模型,通过强化学习大幅度提升了模型推理能力。模型数学代码等核心指标(AIME 24/25、LiveCodeBench)以及部分通用指标(IFEval、LiveBench等)达到DeepSeek-R1 满血版水平,在推理任务中实现了“小参数、大性能”的范式突破,为高成本的大模型部署提供了更具性价比的选择。
适用场景
QwQ-32B模型适用于数学逻辑推理、长文档处理、代码生成等场景,在中文领域的知识回答和多轮对话场景也有优异表现。典型的推理场景分类如下:
推理场景类型 | 平均输入长度(Tokens) | 平均输出长度(Tokens) | 典型应用案例 |
数学逻辑推理 | 0.5K-1.5K | 0.8-3.6K | MATH解题,LSAT逻辑题解析 |
知识问答 | 1K-4K | 0.2K-1K | MMLU知识测评、医疗咨询 |
多轮对话系统 | 2K-8K | 0.5K-2K | 客服对话、心理咨询 |
长文档处理 | 8K-16K | 1K-4K | 论文摘要、法律文书分析 |
代码生成/调试 | 0.3K-2K | 1K-5K | 函数实现、错误修复 |
模型推理关键指标
指标 | 定义 |
模型精度 | 模型权重和计算使用的数值精度。低精度版本的模型占用的显存更小,所需的资源成本更低,但会降低复杂任务上的准确性。 |
并发数 | 同时处理的用户请求数量,更高的并发代表着更大的业务容量,但并发增加也会导致显存、显存带宽占用的增长。 |
输入长度 | 用户提供的提示词(Prompt)的Token数量,直接影响显存占用,高输入长度会影响TTFT。 |
输出长度 | 模型生成的响应文本的Token数量,直接影响显存占用,高输出长度会触发截断或导致OOM。 |
TTFT(Time To First Token) | 用户请求提交到收到首个输出Token的时间,首Token时延过高会导致用户体验迟滞,推荐TTFT控制在1s以下,不要超过2s。 |
TPOT(Time Per Output Token) | 生成每个输出Token所需的平均时间(不含首个Token),反映生成速度与阅读体验的匹配度,推荐TPOT控制在50ms以下,不要超过100ms。 |
单路吞吐量 | 每路输出Token的速率(Tokens/s),较低的单路吞吐量会导致客户体验糟糕,推荐控制在10Tokens/s~30Tokens/s范围内。 |
显存占用率 | 运行时的显存占用百分比,显存占用的构成为模型参数、KV Cache、中间激活值。显存占用率过高(如>95%)易触发OOM,直接影响服务可用性。 |
边缘云部署QwQ-32B模型最佳实践
边缘云面向不同场景的异构算力需求,在广泛分布的节点上提供了多规格、差异化的异构算力资源,单卡显存从12GB到48GB不等。在边缘云上部署QwQ-32B不同精度模型的推理业务,推荐的最佳配置及推理性能如下:
QwQ-32B FP16精度推荐使用48G显存双卡实例
48G显存双卡实例为虚拟机形态,资源配置如下
环境参数
CPU
96核
内存
384GB
GPU
NVIDIA 48GB * 2
操作系统
Ubuntu 22.04
Docker version
26.1.3
GPU Driver
Driver Version: 570.124.06
CUDA Version: 12.4
推理框架
vllm 0.7.2
细分场景性能表现
场景类型
输入长度
输出长度
并发数
单路吞吐量(Tokens)
TTFT(s)
TPOT(ms)
显存占用率
数学逻辑推理&代码生成
1K
4K
4
14.5
0.6
67.4
95%
1K
4K
8
13.3
1.6
71.3
95%
知识问答
4K
1K
2
14.2
1.8
68.6
95%
4K
1K
4
13
2.7
72.7
95%
多轮对话系统&长文档处理
4K
4K
2
14.64
1.7
71.5
95%
4K
4K
4
13.6
2.9
82.3
95%
数学逻辑推理&代码生成场景:
该场景属于短输入长输出业务,输入长度范围:0.3K~2K,输出长度范围:0.8K~5K。
并发数为4时,单路吞吐接近15Tokens/s,TTFT小于1s,在用户体验和成本上实现最佳性价比。当并发数为8时,TTFT变大对用户体验略有影响,但仍在可接受范围内,如果您希望获得更优的成本,可提高并发数。
知识问答场景:
该场景属于长输入短输出业务,输入长度范围:1K~4K,输出长度范围:0.2K~1K。
单实例最佳工作区间可以承载2并发,当并发增加至4时,TTFT大于2s,考虑到网络延时的问题,对用户体验的影响仍在可接受范围。
多轮对话系统&长文档处理场景:
该场景属于长输入长输出业务,输入长度范围:2K~16K,输出长度范围:1K~4K。
输入长度的增加不仅会加大显存消耗,还会显著影响TTFT,单实例最佳工作区间为2并发,可根据业务实际情况控制输入长度和并发数。
QwQ-32B INT4精度推荐使用12G显存五卡实例
12GB显存五卡实例为裸金属形态,资源配置如下
环境参数
CPU
24Core×2,3.0-4.0GHz
内存
256GB
GPU
NVIDIA 12GB * 5
操作系统
Ubuntu 20.04
Docker version
28.0.1
GPU Driver
Driver Version: 570.124.06
CUDA Version: 12.4
推理框架
vllm 0.7.2
细分场景性能表现
12GB显存五卡实例不论是单路并发还是多路并发,单路吞吐量均能满足性能要求,但受制于单卡显存大小问题,TTFT表现差强人意。建议在该配置下部署数学逻辑推理和代码生成业务,对于输入长度较大的知识问答、多轮对话、长文档处理等场景,建议您采用48G显存双卡实例。
场景类型
输入长度
输出长度
并发数
单路吞吐量(Tokens)
TTFT(s)
TPOT(ms)
显存占用率
数学逻辑推理&代码生成
1K
4K
2
37
1.3
26.4
96.5%
1K
4K
4
32.5
1.7
28.7
96.5%
1K
4K
8
24.6
3.5
61.5
96.5%
知识问答
4K
1K
1
33.5
4.7
25.1
96.5%
多轮对话系统&长文档处理
4K
4K
1
35.8
4.7
26.6
96.5%
8K
4K
1
21.9
9.3
43.3
96.5%
数学逻辑推理&代码生成场景
并发数为2时,单路吞吐可达37Tokens/s,TTFT在1.3s,在用户体验和成本上实现最佳性价比。当并发数提升至8时,对用户体验影响较大,如果想追求更优的性价比方案,可将并发数提高至4。
知识问答场景&多轮对话系统&长文档处理场景
因输入长度过大,显存空间占用较多,单并发下TTFT接近5s,不适合生产应用,但可用于PoC环境的搭建
测试环境搭建
48GB显存双卡实例创建与初始化
通过控制台创建实例
登录ENS控制台。
在左侧导航栏,单击 。
在实例页面,单击创建实例。您可以通过创建实例了解创建ENS实例时的参数。
请您按照您的需求进行配置,推荐配置如下:
页面
参数选项
参考值
基础配置
付费方式
包年包月
实例类型
X86计算
实例规格
NVIDIA 48GB * 2
(详细规格请咨询客户经理)
镜像
Ubuntu
ubuntu_22_04_x64_20G_alibase_20240926
网络和存储
网络
自建网络
系统盘
高效云盘 80G+
数据盘
高效云盘 1T+
系统设置
密码设置
密码/密钥对
确认订单。
当您完成系统设置之后,您可以单击右下角确认订单。系统会根据您的配置来配置实例,并展示价格。进行支付后会提示支付成功,并可跳转到ENS控制台。
ENS控制台实例列表可查询到您创建的实例,若您创建的实例状态为运行中,代表您已经可以使用该实例。
通过OpenAPI创建实例
您也可以使用OpenAPI方式进行创建,您可以在阿里云开发者门户快速使用OpenAPI创建实例。
调用参数的参考代码如下,请您灵活调整:
{
"InstanceType": "ens.gnxxxx", <您的实例规格>
"InstanceChargeType": "PrePaid",
"ImageId": "ubuntu_22_04_x64_20G_alibase_20240926",
"ScheduleAreaLevel": "Region",
"EnsRegionId": "cn-your—ens-region", <实际的节点>
"Password": <YOURPASSWORD>, <自定义密码>
"InternetChargeType": "95BandwidthByMonth",
"SystemDisk": {
"Size": 80,
"Category": "cloud_efficiency"
},
"DataDisk": [
{
"Category": "cloud_efficiency",
"Size": 1024
}
],
"InternetMaxBandwidthOut": 5000,
"Amount": 1,
"NetWorkId": "n-xxxxxxxxxxxxxxx",
"VSwitchId": "vsw-xxxxxxxxxxxxxxx",
"InstanceName": "test",
"HostName": "test",
"PublicIpIdentification": true,
"InstanceChargeStrategy": "instance", <实例粒度计费>
}
实例登录与初始化磁盘
实例登录
您可以参考连接实例来登录实例。
磁盘初始化
根目录扩容。
实例新创建或扩容后,需要在不重启的情况下在线扩容根分区
# 安装云环境工具包 sudo apt-get update sudo apt-get install -y cloud-guest-utils # 确保GPT分区工具sgdisk存在 type sgdisk || sudo apt-get install -y gdisk # 扩展物理分区 sudo LC_ALL=en_US.UTF-8 growpart /dev/vda 3 # 调整文件系统大小 sudo resize2fs /dev/vda3 # 验证扩容结果 df -h
数据盘挂载
您需要对数据盘进行格式化,并进行挂载。以下是参考,按需进行操作。
# 识别新磁盘 lsblk # 这里不进行分区,直接格式化 sudo mkfs -t ext4 /dev/vdb # 配置挂载 sudo mkdir /data echo "UUID=$(sudo blkid -s UUID -o value /dev/vdb) /data ext4 defaults,nofail 0 0" | sudo tee -a /etc/fstab # 验证 sudo mount -a df -hT /data # 修改权限 sudo chown $USER:$USER $MOUNT_DIR
说明如果您要基于该实例制作镜像,需要删除
/etc/fstab
文件中添加的ext4 defaults 0 0
所在行。如果不删除,您制作的镜像创建实例将无法启动。
安装vllm推理环境
安装CUDA
您可以参考CUDA Toolkit 12.4 Downloads | NVIDIA Developer来完成CUDA的安装。
# 安装CUDA Toolkit
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_570.124.06_linux.run
chmod +x cuda_12.4.0_570.124.06_linux.run
# 这一步需等待一段时间,并和图形界面交互
sudo sh cuda_12.4.0_570.124.06_linux.run
# 添加环境变量
vim ~/.bashrc
export PATH="$PATH:/usr/local/cuda-12.8/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-12.8/lib64"
source ~/.bashrc
# 验证是否成功
nvcc -V
nvidia-smi
辅助软件安装(可选)
UV是较好的Python虚拟环境和依赖管理工具,适合需要运行多个模型的集群。你可以参考Installation | uv (astral.sh)来完成对UV的安装。
# 安装uv,默认安装在~/.local/bin/
curl -LsSf https://astral.sh/uv/install.sh | sh
# 编辑~/.bashrc
export PATH="$PATH:~/.local/bin"
source ~/.bashrc
# 创建一个干净的venv环境
uv venv myenv --python 3.12 --seed
source myenv/bin/activate
如果您遇到安装UV后,原来所设置的CUDA环境变量失效,nvcc\nvidia-smi
无法找到,请您执行如下操作:
vim myenv/bin/activate
将
export PATH="$PATH:/usr/local/cuda-12.8/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-12.8/lib64"
加到export PATH的后面
# 安装vllm和modelscope
uv pip install vllm==0.7.2
uv pip install modelscope
# GPU监控工具,也可以使用nvidia-smi默认的
uv pip install nvitop
下载QwQ-32B模型、vllm benchmark脚本
# 下载模型,请下载到数据盘/data下,避免空间不够报错
mkdir -p /data/Qwen/QwQ-32B
cd /data/Qwen/QwQ-32B
modelscope download --model Qwen/QwQ-32B --local_dir .
# 下载数据集(可选)
wget https://www.modelscope.cn/datasets/gliang1001/ShareGPT_V3_unfiltered_cleaned_split/resolve/master/ShareGPT_V3_unfiltered_cleaned_split.json
# 安装git(若无git)
apt update
apt install git -y
# 下载vllm-git,包含了测试脚本
git clone https://github.com/vllm-project/vllm.git
在线测试
启动vllm server
vllm serve /data/Qwen/QwQ-32B/ \
--host 127.0.0.1 \
--port 8080 \
--tensor-parallel-size 2 \
--trust-remote-code \
--served-model-name qw \
--gpu-memory-utilization 0.95 \
--enforce-eage \
--max-num-batched-Tokens 8192 \
--max-model-len 8192 \
--enable-prefix-caching
开启测试
python3 ./vllm/benchmarks/benchmark_serving.py --backend vllm --served-model-name qw --model /data/Qwen/QwQ-32B --dataset-name random --random-input 1024 --random-output 4096 --random-range-ratio 1 --max-concurrency 4 --num-prompts 10 --host 127.0.0.1 --port 8080 --save-result --result-dir /data/logs/ --result-filename QwQ-32B-4-1-4.log
测试完成
测试结果如下: