新人刚进,给大家分享最近部署的一点点经验,关于qwen3.5 122b部署在昇腾910B4服务器上,刚好对未来比较迷茫,想问问大家
- 内容介绍
- 文章标签
- 相关推荐
内网ARM服务器部署Qwen3.5 122B模型实录
设备:8张昇腾910B4卡,NPU驱动25.2.3,ARM架构,内网离线环境
目标:跑通Qwen3.5-122B-A10B
一、环境确认,前置条件
- 架构:
uname -m→ 必须输出aarch64,否则后面所有镜像都得重新选。 - NPU状态:
npu-smi info→ 确认8张卡都在,健康状态OK,驱动版本记下来。 - Docker:
docker version→ 最好20.10以上。
二、镜像选择
quay.io/ascend/vllm-ascend-v0.17.0rc1,适配Qwen3.5、miniMax 2.5 awq
这是华为官方适配昇腾NPU的vLLM镜像,内置了CANN、torch_npu、vllm-ascend插件,不需要下载任何环境。
下载到内网(外网有Windows电脑的情况):
bash
# 在外网Docker Desktop上(使用windows电脑是可以的,但是Docker Desktop要开启实验功能)
docker pull --platform linux/arm64 quay.io/ascend/vllm-ascend:v0.17.0rc1 #一定要加--platform linux/arm64
docker save -o D:\vllm-arm64.tar 镜像ID
# 把tar文件拷到内网服务器
docker load -i vllm-arm64.tar
docker tag 镜像ID vllm-ascend:0.17
docker inspect --format='{{.Architecture}}' 镜像名 #确认镜像架构
注意:导出时如果报
NotFound: content digest sha256:...,改用docker save -o xx.tar --platform=linux/arm64 镜像名或直接用镜像ID导出。
三、docker-compose.yml 模板(针对4卡/8卡)
我最后稳定运行的配置长这样(以8卡为例,模型路径按实际改):
yaml
version: '1.0'
services:
vllm:
image: vllm-ascend:0.17 # 你导入的镜像
container_name: vllm
restart: unless-stopped
shm_size: 64g # MoE模型需要更大共享内存
ports:
- "8180:8180"
devices:
- /dev/davinci0
- /dev/davinci1
- /dev/davinci2
- /dev/davinci3
- /dev/davinci4
- /dev/davinci5
- /dev/davinci6
- /dev/davinci7
- /dev/davinci_manager
- /dev/devmm_svm
- /dev/hisi_hdc
volumes:
- /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro
- /usr/local/dcmi:/usr/local/dcmi:ro
- /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro
- /etc/ascend_install.info:/etc/ascend_install.info:ro
- /root/.cache:/root/.cache #缓存路径,可以新建换成服务器的
- /home/user/models:/models/ #模型挂在路径
environment:
- LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64:$LD_LIBRARY_PATH
- SOC_VERSION=ascend910b4
- PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:32
command: >
python -m vllm.entrypoints.openai.api_server
--model /models/Qwen3.5-122B #模型挂在路径,注意名字
--tensor-parallel-size 8 #八卡运行
--dtype bfloat16
--trust-remote-code
--max-model-len 16384 #上下文长度,必须设置超过Claude的范围,好像是4000多
--gpu-memory-utilization 0.95 #显存最大利用率
--port 8180
--served-model-name qwen3.5-122b #模型起名,不然无法使用claude,这能解决Claude之前“找不到模型”的问题,让模型名固定下来。
--enable-auto-tool-choice #允许模型自主决定什么时候该“写代码”或“看文件”。
--tool-call-parser qwen3_coder #告诉 vLLM 如何理解 Qwen 模型输出的特殊工具格式。
几个容易踩的坑:
- –max-model-len 16384 要超过claude设置的4000,不然claude无法处理上下文
- –served-model-name qwen3.5-122b 这是为了可以在ccswitch中使用模型,不然claude找不到
- ccswitch中配置claude的APIURL的时候要设置成:http://ip:端口/v1/messages,一定要加上messages,不然识别不到,因为是openai的
四、模型准备:下载、导入、挂载
4.1 下载模型(外网)
bash 我是用git拉的,稳定一定,也比较慢,在魔搭社区上,点击下载模型,里面有具体命令
# 跳过LFS大文件(只拉配置)
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/xxx/model.git
cd model
git lfs pull --include="*.safetensors" # 按需拉权重
4.2 打包传输到内网
bash
tar -czvf model.tar.gz model_folder/
# 拷到内网后
tar -xzvf model.tar.gz -C /home/user/models/
五、启动与验证
bash
# 启动容器
docker-compose up -d
# 看日志
docker-compose logs -f vllm
# 测试API
curl http://localhost:8180/v1/models
curl http://localhost:8180/v1/completions \
-H "Content-Type: application/json" \
-d '{"model": "/models/Qwen3.5-122B", "prompt": "你好", "max_tokens": 50}'
# 检查NPU占用
docker exec vllm npu-smi info
六、Claude、CCSwitch
- Claude,CCSwitch离线安装前置条件:node v18以上,git版本
- 离线安装
npm install -g ./anthropic-ai-claude-code-x.x.x.tgz --offline - CCSwitch 配置好APIURL 和模型就好,token随便填,一定要按照docker-compose里面的模型名字来
--【壹】--:
对 公司的
--【贰】--:
性能我感觉一般,总感觉离线模型,再怎么跑也一般,vllm-ascend 到没啥问题,挺稳定的
--【叁】--:
没有物理机路过
--【肆】--:
性能如何? 特别是vllm-ascend现在稳定么?
--【伍】--:
实际效果怎么样
--【陆】--:
整机成本多少,单卡什么价位
--【柒】--:
性能测试暂时还没做,我感觉docker-compose里面有很多命令不太了解
--【捌】--:
没有玩过这么高端的机器,加油大佬
--【玖】--:
可以加个性能测试环节
--【拾】--:
感谢大佬
--【拾壹】--:
查了下,单卡 10-12 万
--【拾贰】--:
我个人感觉一般
内网ARM服务器部署Qwen3.5 122B模型实录
设备:8张昇腾910B4卡,NPU驱动25.2.3,ARM架构,内网离线环境
目标:跑通Qwen3.5-122B-A10B
一、环境确认,前置条件
- 架构:
uname -m→ 必须输出aarch64,否则后面所有镜像都得重新选。 - NPU状态:
npu-smi info→ 确认8张卡都在,健康状态OK,驱动版本记下来。 - Docker:
docker version→ 最好20.10以上。
二、镜像选择
quay.io/ascend/vllm-ascend-v0.17.0rc1,适配Qwen3.5、miniMax 2.5 awq
这是华为官方适配昇腾NPU的vLLM镜像,内置了CANN、torch_npu、vllm-ascend插件,不需要下载任何环境。
下载到内网(外网有Windows电脑的情况):
bash
# 在外网Docker Desktop上(使用windows电脑是可以的,但是Docker Desktop要开启实验功能)
docker pull --platform linux/arm64 quay.io/ascend/vllm-ascend:v0.17.0rc1 #一定要加--platform linux/arm64
docker save -o D:\vllm-arm64.tar 镜像ID
# 把tar文件拷到内网服务器
docker load -i vllm-arm64.tar
docker tag 镜像ID vllm-ascend:0.17
docker inspect --format='{{.Architecture}}' 镜像名 #确认镜像架构
注意:导出时如果报
NotFound: content digest sha256:...,改用docker save -o xx.tar --platform=linux/arm64 镜像名或直接用镜像ID导出。
三、docker-compose.yml 模板(针对4卡/8卡)
我最后稳定运行的配置长这样(以8卡为例,模型路径按实际改):
yaml
version: '1.0'
services:
vllm:
image: vllm-ascend:0.17 # 你导入的镜像
container_name: vllm
restart: unless-stopped
shm_size: 64g # MoE模型需要更大共享内存
ports:
- "8180:8180"
devices:
- /dev/davinci0
- /dev/davinci1
- /dev/davinci2
- /dev/davinci3
- /dev/davinci4
- /dev/davinci5
- /dev/davinci6
- /dev/davinci7
- /dev/davinci_manager
- /dev/devmm_svm
- /dev/hisi_hdc
volumes:
- /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro
- /usr/local/dcmi:/usr/local/dcmi:ro
- /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro
- /etc/ascend_install.info:/etc/ascend_install.info:ro
- /root/.cache:/root/.cache #缓存路径,可以新建换成服务器的
- /home/user/models:/models/ #模型挂在路径
environment:
- LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64:$LD_LIBRARY_PATH
- SOC_VERSION=ascend910b4
- PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:32
command: >
python -m vllm.entrypoints.openai.api_server
--model /models/Qwen3.5-122B #模型挂在路径,注意名字
--tensor-parallel-size 8 #八卡运行
--dtype bfloat16
--trust-remote-code
--max-model-len 16384 #上下文长度,必须设置超过Claude的范围,好像是4000多
--gpu-memory-utilization 0.95 #显存最大利用率
--port 8180
--served-model-name qwen3.5-122b #模型起名,不然无法使用claude,这能解决Claude之前“找不到模型”的问题,让模型名固定下来。
--enable-auto-tool-choice #允许模型自主决定什么时候该“写代码”或“看文件”。
--tool-call-parser qwen3_coder #告诉 vLLM 如何理解 Qwen 模型输出的特殊工具格式。
几个容易踩的坑:
- –max-model-len 16384 要超过claude设置的4000,不然claude无法处理上下文
- –served-model-name qwen3.5-122b 这是为了可以在ccswitch中使用模型,不然claude找不到
- ccswitch中配置claude的APIURL的时候要设置成:http://ip:端口/v1/messages,一定要加上messages,不然识别不到,因为是openai的
四、模型准备:下载、导入、挂载
4.1 下载模型(外网)
bash 我是用git拉的,稳定一定,也比较慢,在魔搭社区上,点击下载模型,里面有具体命令
# 跳过LFS大文件(只拉配置)
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/xxx/model.git
cd model
git lfs pull --include="*.safetensors" # 按需拉权重
4.2 打包传输到内网
bash
tar -czvf model.tar.gz model_folder/
# 拷到内网后
tar -xzvf model.tar.gz -C /home/user/models/
五、启动与验证
bash
# 启动容器
docker-compose up -d
# 看日志
docker-compose logs -f vllm
# 测试API
curl http://localhost:8180/v1/models
curl http://localhost:8180/v1/completions \
-H "Content-Type: application/json" \
-d '{"model": "/models/Qwen3.5-122B", "prompt": "你好", "max_tokens": 50}'
# 检查NPU占用
docker exec vllm npu-smi info
六、Claude、CCSwitch
- Claude,CCSwitch离线安装前置条件:node v18以上,git版本
- 离线安装
npm install -g ./anthropic-ai-claude-code-x.x.x.tgz --offline - CCSwitch 配置好APIURL 和模型就好,token随便填,一定要按照docker-compose里面的模型名字来
--【壹】--:
对 公司的
--【贰】--:
性能我感觉一般,总感觉离线模型,再怎么跑也一般,vllm-ascend 到没啥问题,挺稳定的
--【叁】--:
没有物理机路过
--【肆】--:
性能如何? 特别是vllm-ascend现在稳定么?
--【伍】--:
实际效果怎么样
--【陆】--:
整机成本多少,单卡什么价位
--【柒】--:
性能测试暂时还没做,我感觉docker-compose里面有很多命令不太了解
--【捌】--:
没有玩过这么高端的机器,加油大佬
--【玖】--:
可以加个性能测试环节
--【拾】--:
感谢大佬
--【拾壹】--:
查了下,单卡 10-12 万
--【拾贰】--:
我个人感觉一般

