环境要求
硬件
硬件要求:
- 当前支持Atlas 800I A2
显存需求:
- DeepSeek-R1-Distill-Llama-70B相关模型权重占用情况如下表所示。此外,据推理后端加速特性,实际占用视具体情况而定。
模型 数据类型 权重占用显存 (GB) DeepSeek-R1-Distill-Llama-70B BF16 140 DeepSeek-R1-Distill-Llama-70B-quantized.w8a8 INT8 80 DeepSeek-R1-Distill-Llama-70B-w8a8 INT8 80 DeepSeek-R1-Distill-Llama-70B-AWQ INT4 40
版本配套
| 镜像版本 | CANN版本 | Pytorch版本 | vLLM版本 | MindIE版本 | 变更项 |
|---|---|---|---|---|---|
| 7.1.T9-aarch64 | 8.1.RC1 | 2.5.1 | 0.8.5 | 2.0.RC2 | 新增MiniCPM-V-2_6, Qwen2.5-OMNI-3B/7B, 部分Qwen3模型支持, 新增ViT-B-16, ViT-H-14模型支持, 部分模型新增 Ascend 310p 硬件支持 |
| 7.1.T2-800I-A2-aarch64 | 8.0.0(LLM) / 8.1.RC1(VLM) | 2.5.1 | 0.7.1 | 1.0.0 | 支持Atlas 800I A2, 提供 vLLM / MindIE / TEI 推理后端支持, 提供 LLM / VLM / EMB 模型支持, 提供部分模型的量化支持 |
依赖安装
驱动与固件
Atlas 800I A2推理产品:请参见《Atlas A2 中心推理和训练硬件 24.1.0 NPU驱动和固件安装指南》中的“物理机安装与卸载”章节。
Ascend 310p 推理产品:请参见《Atlas 300I 推理卡 6.0.0 NPU驱动和固件安装指南(型号 3000)》中的“物理机安装与卸载”章节。
启动推理微服务
启动步骤
- 设置模型权重加载方式:
设置本地缓存路径为环境变量
LOCAL_CACHE_PATH或跳转至魔乐社区链接下载模型权重,并将模型权重对应文件路径设置为环境变量LOCAL_CACHE_PATH(以BF16权重为例):export LOCAL_CACHE_PATH=~/models注意:微服务会从LOCAL_CACHE_PATH路径下的 MindSDK/DeepSeek-R1-Distill-Llama-70B 进行权重的加载,请确保模型放置路径正确。
- 使用以下命令运行镜像,启动容器 (以Atlas 800I A2, BF16权重为例, 其他权重类型的容器启动需更改环境变量MIS_CONFIG,详情见环境变量列表):
【方式一】:Ascend Docker Runtime 启动
如果尚未安装 Ascend Docker Runtime,请先获取安装包,并参考 Ascend Docker Runtime安装部署指南完成安装。
# 设置容器名称 export CONTAINER_NAME=deepseek-r1-distill-llama-70b # 选择镜像 export IMG_NAME=swr.cn-south-1.myhuaweicloud.com/ascendhub/deepseek-r1-distill-llama-70b:7.1.T9-aarch64 # 启动推理微服务,使用ASCEND_VISIBLE_DEVICES选择卡号,范围[0,7],示例选择0-7卡 docker run -itd \ --name=$CONTAINER_NAME \ -e ASCEND_VISIBLE_DEVICES=0-7 \ -e MIS_CONFIG=atlas800ia2-8x32gb-bf16-vllm-default \ -v $LOCAL_CACHE_PATH:/opt/mis/.cache \ -p 8000:8000 \ --shm-size 1gb \ $IMG_NAME【方式二】:手动挂载设备启动
在启动推理微服务时,通过手动挂载设备的方式将昇腾处理器与容器绑定。以下样例代码中,
/dev/davinci0至/dev/davinci7分别表示挂载 0 号至 7 号设备,共计 8 张NPU加速卡。# 设置容器名称与选择镜像操作同上 # 启动推理微服务,手动挂载设备 docker run -itd \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device=/dev/devmm_svm \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \ -v /usr/local/sbin:/usr/local/sbin:ro \ --name=$CONTAINER_NAME \ --shm-size 1gb \ -e MIS_CONFIG=atlas800ia2-8x32gb-bf16-vllm-default \ -v $LOCAL_CACHE_PATH:/opt/mis/.cache \ -p 8000:8000 \ $IMG_NAME - 在容器启动后,可通过如下命令进入容器查看日志
# 查看推理容器日志 docker logs -f ${CONTAINER_NAME}推理微服务容器内出现以下消息表示启动成功。
INFO: Application startup complete.
安全加固
为确保服务通信安全,建议通过挂载证书实现HTTPS启动,请确保证书的安全性与权限正确:
提示:证书私钥请务必加密,未加密私钥将被明文挂载
- 设置环境变量
export MIS_SSL_CERTFILE=/etc/mis/ssl/cert.pem # 需要按照实际路径挂载证书路径 export MIS_SSL_KEYFILE=/etc/mis/ssl/key.pem # 需要按照实际路径挂载证书私钥路径 export CERT_PATH_MOUNT=/etc/mis # 需要按照实际路径设置证书挂载路径 - 容器启动时挂载 启动推理微服务时,挂载证书相关环境变量与证书路径,其他启动方式类同
docker run -itd \ --name=$CONTAINER_NAME \ -e ASCEND_VISIBLE_DEVICES=0-7 \ -e MIS_CONFIG=atlas800ia2-8x32gb-bf16-vllm-default \ -e MIS_SSL_CERTFILE=$MIS_SSL_CERTFILE \ -e MIS_SSL_KEYFILE=$MIS_SSL_KEYFILE \ -v $CERT_PATH_MOUNT:$CERT_PATH_MOUNT \ -v $LOCAL_CACHE_PATH:/opt/mis/.cache \ -p 8000:8000 \ --shm-size 1gb \ $IMG_NAME - 密码输入 当日志显示如下内容时
INFO [launcher.py:28] Available routes are: INFO [launcher.py:36] Route: /openapi.json, Methods: HEAD, GET INFO [launcher.py:36] Route: /docs, Methods: HEAD, GET INFO [launcher.py:36] Route: /docs/oauth2-redirect, Methods: HEAD, GET INFO [launcher.py:36] Route: /redoc, Methods: HEAD, GET INFO [launcher.py:36] Route: /openai/v1/models, Methods: GET INFO [launcher.py:36] Route: /openai/v1/chat/completions, Methods: POST
可通过在新开命令窗口中执行
docker attach ${CONTAINER_NAME}(需要重新输入环境变量,例如 export CONTAINER_NAME=deepseek-r1-distill-llama-70b 或者直接指定容器名)docker attach deepseek-r1-distill-llama-70b (此处为空白需输入密码,密码不可见)
请通过 先Ctrl+p 再Ctrl+q 退出 attach 状态, 请勿使用 Ctrl+c 而导致服务退出
主要环境变量列表
| 配置项 | 描述 | 默认值 |
|---|---|---|
| MIS_CACHE_PATH | 缓存目录 | /opt/mis/.cache |
| MIS_SERVED_MODEL_NAME | 服务模型名称 | 模型名 |
| MIS_CONFIG | 模型优化配置类型,详情如下述 | atlas800ia2-8x32gb-bf16-vllm-default |
| MIS_HOST | 服务启动IP | 服务绑定的主机(容器)地址 |
| MIS_PORT | 服务启动端口 | 8000 |
| MIS_LOG_LEVEL | MIS 的日志等级,可选范围:DEBUG, INFO, WARNING, ERROR, CRITICAL | INFO |
| MIS_DISABLE_LOG_REQUESTS | 1 表示取消打印请求日志,0 表示打印 | 0 |
优化配置
| 可选值 | 计算服务器硬件型号 | 计算卡规格 | 数据类型 | 量化方法 | 后端 | 性能倾向 |
|---|---|---|---|---|---|---|
| atlas800ia2-8x32gb-bf16-vllm-default | Atlas 800I A2 | 8x32GB | BF16 | – | vLLM | 均衡 |
| atlas800ia2-8x32gb-bf16-vllm-throughput | Atlas 800I A2 | 8x32GB | BF16 | – | vLLM | 高吞吐 |
| atlas800ia2-8x32gb-bf16-vllm-latency | Atlas 800I A2 | 8x32GB | BF16 | – | vLLM | 低时延 |
| atlas800ia2-8x32gb-bf16-mindie-service-default | Atlas 800I A2 | 8x32GB | BF16 | – | MindIE | 均衡 |
| atlas800ia2-8x32gb-bf16-mindie-service-throughput | Atlas 800I A2 | 8x32GB | BF16 | – | MindIE | 高吞吐 |
| atlas800ia2-8x32gb-bf16-mindie-service-latency | Atlas 800I A2 | 8x32GB | BF16 | – | MindIE | 低时延 |
| atlas800ia2-4x32gb-int8-cts-vllm-default | Atlas 800I A2 | 4x32GB | INT8 | Compressed-Tensors | vLLM | 均衡 |
| atlas800ia2-4x32gb-int8-cts-vllm-throughput | Atlas 800I A2 | 4x32GB | INT8 | Compressed-Tensors | vLLM | 高吞吐 |
| atlas800ia2-4x32gb-int8-cts-vllm-latency | Atlas 800I A2 | 4x32GB | INT8 | Compressed-Tensors | vLLM | 低时延 |
| atlas800ia2-4x32gb-int8-msms-mindie-service-default | Atlas 800I A2 | 4x32GB | INT8 | msModelSlim | MindIE | 均衡 |
| atlas800ia2-4x32gb-int8-msms-mindie-service-throughput | Atlas 800I A2 | 4x32GB | INT8 | msModelSlim | MindIE | 高吞吐 |
| atlas800ia2-4x32gb-int8-msms-mindie-service-latency | Atlas 800I A2 | 4x32GB | INT8 | msModelSlim | MindIE | 低时延 |
| atlas800ia2-4x32gb-int4-awq-vllm-default | Atlas 800I A2 | 4x32GB | INT4 | AWQ | vLLM | 均衡 |
| atlas800ia2-4x32gb-int4-awq-vllm-throughput | Atlas 800I A2 | 4x32GB | INT4 | AWQ | vLLM | 高吞吐 |
| atlas800ia2-4x32gb-int4-awq-vllm-latency | Atlas 800I A2 | 4x32GB | INT4 | AWQ | vLLM | 低时延 |
请求推理微服务
OpenAI Chat Completion请求 (以BF16权重为例)
【方式一】 Python 调用
使用OpenAI API发起对话请求。
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/openai/v1",
api_key="dummy_key"
)
response = client.chat.completions.create(
model="DeepSeek-R1-Distill-Llama-70B",
messages=[
{"role": "system", "content": "你是一个友好的AI助手。"},
{"role": "user", "content": "你好"},
],
max_tokens=100,
temperature=0.6,
top_p=0.6,
)
print(response.choices[0].message)
执行成功后返回(参考样例)
ChatCompletionMessage(
content="你好!很高兴为你提供帮助。有什么我可以帮助你的吗?",
refusal=None,
role="assistant",
audio=None,
function_call=None,
tool_calls=[],
reasoning_content=None,
)
【方式二】 curl 调用
在终端中运行相应命令以发起对话请求。通过该接口,在传入model和message参数后,即可启动多轮对话模式。
curl -H 'accept: application/json' -H 'Content-Type: application/json' \
-X 'POST' \
-d '{
"model": "DeepSeek-R1-Distill-Llama-70B",
"messages": [
{
"role":"system",
"content":"你是一个友好的AI助手。"
},
{
"role":"user",
"content":"你好"
}
],
"max_tokens": 100,
"temperature": 0.6,
"top_p": 0.6
}' http://localhost:8000/openai/v1/chat/completions
执行成功后返回(参考样例)
{
"id": "chatcmpl-341c3f4adcdc4e539b6bda70e87cad78",
"object": "chat.completion",
"created": 1741789700,
"model": "DeepSeek-R1-Distill-Llama-70B",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"reasoning_content": null,
"content": "您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。\n</think>\n\n您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 18,
"total_tokens": 109,
"completion_tokens": 91,
"prompt_tokens_details": null
},
"prompt_logprobs": null
}
支持的接口列表及参数
文本模态
1. 获取可用模型
接口描述
列出当前可用的模型。
请求方式
GET
请求路径
/openai/v1/models
请求示例
GET /openai/v1/models
响应示例(以BF16权重为例)
{
"object": "list",
"data": [
{
"id": "DeepSeek-R1-Distill-Llama-70B",
"object": "model",
"created": 1741789745,
"owned_by": "vllm",
"max_model_len": 16384
}
]
}
2. Openai Chat Completions
接口描述
该接口用于通过API调用OpenAI的聊天功能,生成与用户输入相关的回复。
请求方式
POST
请求路径
/openai/v1/chat/completions
请求示例(以BF16权重为例)
POST /openai/v1/chat/completions
Host: api.openai.com
Content-Type: application/json
{
"model": "DeepSeek-R1-Distill-Llama-70B",
"messages": [{
"role": "user",
"content": "Who won the world series in 2020?"
}],
"max_tokens": 100,
"temperature": 0.6,
"top_p":0.6,
"stream": false
}
响应示例(以BF16权重为例)
{
"id": "chatcmpl-f71b90d42c1548de906582a866e45f8a",
"object": "chat.completion",
"created": 1741789748,
"model": "DeepSeek-R1-Distill-Llama-70B",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"reasoning_content": null,
"content": "Okay, so I need to figure out who won the World Series in 2020. I'm not super familiar with baseball, but I know the World Series is the championship series of Major League Baseball (MLB), played between the American League (AL) and National League (NL) champions. \n\nFirst, I'll try to recall any major events from 2020 related to sports. 2020 was a unique year because of the COVID-19 pandemic, which affected many sports events.",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "length"
}
],
"usage": {
"prompt_tokens": 15,
"total_tokens": 115,
"completion_tokens": 100,
"prompt_tokens_details": null
},
"prompt_logprobs": null
}
FAQ
- 启动容器失败
请确保指定卡被正确挂载到容器中:
- 宿主机未安装Ascend Docker Runtime请以挂载设备方式启动
- 以普通用户运行容器,宿主机上驱动安装未配置–install-for-all参数
- 普通用户运行请确保运行的卡未被其他容器挂载
- 推理服务部署时报错
Check path: config.json failed, by: Check Other group permission failed: Current permission is 4, but required no greater than 0. Required permission: 750, but got 644 Failed to check config.json under model weight path.
此处报错是因使用MindIE后端需提升模型仓库中config.json权限为750。为了避免安全风险, 用户挂载模型则需手动提升权限:
chmod 750 /path/to/model/config.json部署MIS时自动下载的模型仓库config.json将自动提权至750
详细信息请参考MindIE-Service 部署推理服务前准备 等相关文档
- 启动时报错
RuntimeError: GetDevice:build/CMakeFiles/torch_npu.dir/compiler_depend.ts:62 NPU function error: aclrtGetCurrentContext(&used_devices[local_device]), error code is 107002[ERROR] ERR00100 PTA call acl api failed[Error]: The context is empty. Check whether acl.rt.set_context or acl.rt.set_device is called.尝试使用特权容器启动 (Ascend Docker Runtime 启动示例, 手动挂卡启动同理)
docker run -itd \ --privileged \ --name=$CONTAINER_NAME \ -e ASCEND_VISIBLE_DEVICES=0-7 \ -e ASCEND_RT_VISIBLE_DEVICES=0-7 \ -e MIS_CONFIG=atlas800ia2-8x32gb-bf16-vllm-default \ -v $LOCAL_CACHE_PATH:/opt/mis/.cache \ -p 8000:8000 \ --shm-size 1gb \ $IMG_NAME - 启动时报错
ImportError: libascend_hal.so: cannot open shared object file: No such file or directory
请参考手动”启动步骤”中”挂载设备启动”的启动方式。无需设置环境变量 TORCH_DEVICE_BACKEND_AUTOLOAD=0
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/ai/318588.html