DeepSeek专栏3:vLLM×DeepSeek部署指南(鲲鹏+昇腾)

引言

上期介绍了在鲲鹏 CPU+NVIDIA GPU上部署DeepSeek的流程,本期将会继续介绍在鲲鹏 CPU+昇腾 NPU上通过vLLM框架来部署DeepSeek。

系统环境硬件要求

NPU推理规格

模型CPUNPU内存存储
DeepSeek-R1-Distill-Qwen-1.5B至少8核至少6GB显存16GB以上60GB以上
DeepSeek-R1-Distill-Qwen-7B至少32核至少32GB显存32GB以上60GB以上
DeepSeek-R1-Distill-Llama-8B至少32核至少32GB显存32GB以上60GB以上

使用vLLM推理框架在昇腾NPU上的DeepSeek部署过程

以下部署流程以Atlas 800I A2服务器,openEuler 24.03 LTS操作系统为例说明如何使用vLLM框架部署DeepSeek-R1-Distill-Llama-8B。需要注意的是,该部署流程当前适合Altas 800I A2和Altas 800T A2服务器,对于其他的服务器型号暂时缺乏验证。

部署流程分为以下3个部分:

  • 开发环境配置
  • vLLM构建
  • 大模型部署

开发环境配置

首先执行npu-smi info查看驱动加载是否成功。如果出现类似下图的回显信息说明加载成功,可跳过驱动固件安装步骤,开始安装昇腾容器引擎插件。否则需要首先安装驱动及固件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于Atlas 800I A2服务器,按照官方提供的流程安装NPU驱动及固件和[昇腾容器引擎插件]。(https://www.hiascend.com/document/detail/zh/quick-installation/24.0.RC1/quickinstg/800I_A2/quickinstg_800I_A2_0030.html)

vLLM构建

首先需要拉取镜像:

docker pull hub.oepkgs.net/neocopilot/deepseek_vllm:cann.8.0.rc3.beta1-910b-openeuler22.03-py3.10

倘若出现了x509: certificate signed by unknown authority错误,可以临时绕过证书验证,执行如下命令后重新拉取镜像:

echo '{"insecure-registries": ["quay.io"]}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker

采用如下命令拉起容器:

docker run -it \
    -p 2023:23 \
    --name deepseek_npu_8b \
    --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/devmm_svm \
    --device /dev/hisi_hdc \
    -v /usr/local/dcmi:/usr/local/dcmi \
    -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
    -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
    -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
    quay.io/ascend/cann:8.0.rc3.beta1-910b-openeuler22.03-py3.10 bash

注意:

  • -p 2023:23是将容器内的2023端口映射到宿主机上的23端口。这两个端口可以根据开发者机器的情况来自行调整。需要注意的是,一旦这里的端口映射修改了,后续流程中的端口也要做响应调整。
  • --device /dev/davinciX 为使用的NPU卡的数量,可以根据实际情况进行调整,本教程使用的是8张NPU卡,即/dev/davinci0/dev/davinci7,其他启动参数不变。

在进入容器后,采用如下命令构建vLLM:

yum install -y python python-pip gcc cmake git
pip install ml-dtypes tornado -i https://mirrors.huaweicloud.com/repository/pypi/simple
git clone https://github.com/wangshuai09/vllm
cd vllm
git chekcout npu_support

VLLM_TARGET_DEVICE=npu pip install -e . -i https://mirrors.huaweicloud.com/repository/pypi/simple

大模型部署

采用如下命令启动模型服务:

python -m vllm.entrypoints.openai.api_server \
    --served-model-name deepseek-r1:8b \
    --model /home/deepseek/DeepSeek-R1-Distill-Llama-8B \
    --trust-remote-code \
    --host 0.0.0.0 \
    --port 23 \
    --max-model-len 4096 \
    --tensor-parallel-size 8 \
    --gpu_memory_utilization 0.8 \
    --enforce-eager \
    --dtype float16 &

以下是部分参数的解读:

  • --served-model-name指定部署的模型名称,这里指定为deepseek-r1:8b
  • --model指定要加载的模型路径,这里需要注意修改模型路径为自己刚刚下载的模型路径文件
  • --host指定服务器监听的IP地址,0.0.0.0表示监听所有的网络接口,允许外部访问
  • --port指定服务器监听的端口号,这里与上文对应,指定为23,读者可以自行修改
  • --max-model-len指定模型的最大上下文长度,这里指定为4096,超过该长度的输入会被截断
  • --tensor-parallel-size指定张量并行的数量,设置为8表示模型将会在8个NPU上进行并行计算,读者需要根据在容器启动时制定的NPU数量来填写。
  • --dtype float16指定模型计算的数据类型为float16(半精度浮点数)

通过CTRL+D回到宿主机后,通过如下命令进行功能验证:

curl -X POST "http://localhost:2023/v1/chat/completions" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1:8b",
"messages": [{"role": "user", "content": "请介绍一下开源操作系统openEuler"}]
}'

问答效果展示:

{
	"id": "chatcmpl-e8643c42d3e04fe3b509d284b761422d",
	"object": "chat.completion",
	"created": 1739419475,
	"model": "deepseek-r1:8b",
	"choices": [{
		"index": 0,
		"message": {
			"role": "assistant",
			"reasoning\_content": null,
			"content": "好的,我现在遇到了关于openEuler的问题,我需要仔细思考一下该怎么介绍它。首先,openEuler是一个操作系统,类似于Linux和Windows,主要面向企业用户,提供了诸多高级功能。它在几年前发布,开源社区支持很好,这点很重要,说服用户使用的关键点。在资源管理方面,openEuler有高效的内核,支持Containerd和CRI,让云原生应用方便运行。安全性也是一大卖点,多级权限和容器安全机制都是亮点,满足企业对安全的需求。当然,openEuler也有不足之处。虽然功能全面,但相较于传统大 flea Like Linux,生态系统还不够成熟。企业如果有特殊需求,可能还是得依赖花旗帮派,这也是需要考虑的。其他挑战包括引起的许可问题和技术债务,需要持续改进。所以,总体来看,openEuler适合需要高性能和可靠性企业用户,特别是开源技术和云原生应用方面的团队。它能提供一整套工具,解决很多复杂问题,但仍在不断发展中,未来有很多潜力。</think>openEuler 是一个开源操作系统,旨在为企业用户提供高性能和可靠的运维体验。它结合了 Linux 的成熟稳定性和 Windows 的现代化 User Experience。开源背景使得 openEuler 适合开发者和企业,可以根据特定需求进行定制和优化。由于其高效的资源管理和强大的安全机制,openEuler 在云原生应用和容器化环境中表现优异。然而,尽管功能丰富,这些要是到传统操作系统路线上的uggy以外,openEuler 的生态系统尚未成熟,可能难以满足所有复杂需求。总体而言,openEuler 是一个有潜力的操作系统,值得企业关注。",
			"tool\_calls": []
		},
		"Logprobs": null,
		"finish\_reason": "stop",
		"stop\_reason": null
	}],
	"usage": {
		"prompt\_tokens": 15,
		"total\_tokens": 466,
		"completion\_tokens": 451,
		"prompt\_tokens details": null
	},
	"prompt\_logprobs": null
}
### 部署环境准备 为了在鲲鹏和昇腾平台上成功部署 DeepSeek-R1-Distill-Qwen-32B 模型并集成 WebUI,需先准备好相应的软件包和支持库。确保操作系统已安装 Python 3.x 版本以及 pip 工具。对于特定硬件的支持,需要安装 NPU 的驱动程序与 CANN (Compute Architecture for Neural Networks) SDK 来适配昇腾处理器[^1]。 ### 安装依赖项 通过命令行工具更新系统包管理器,并安装必要的 Python 库来支持模型加载和服务启动: ```bash pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu pip install transformers sentencepiece gradio flask ``` 上述命令会安装 PyTorch 及其扩展模块、Hugging Face Transformers 库用于处理预训练语言模型、SentencePiece 进行分词操作以及 Gradio 和 Flask 构建简易的 Web UI 接口。 ### 下载模型文件 前往 ModelScope 平台获取目标模型权重文件 `DeepSeek-R1-Distill-Qwen-32B` ,并将之放置于项目根目录下或指定路径内以便后续调用。 ### 编写服务脚本 创建一个新的 Python 文件作为入口点,在其中定义好 API 路由逻辑并与前端页面交互展示推理结果。下面是一个简单的例子说明如何实现这一功能: ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch import gradio as gr tokenizer = AutoTokenizer.from_pretrained("path/to/model") model = AutoModelForCausalLM.from_pretrained("path/to/model") def predict(text_input): inputs = tokenizer.encode_plus( text_input, add_special_tokens=True, return_tensors="pt" ) with torch.no_grad(): outputs = model.generate(**inputs) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return response iface = gr.Interface(fn=predict, inputs=&#39;text&#39;, outputs=&#39;text&#39;) if __name__ == "__main__": iface.launch() ``` 此段代码实现了基于 Transformer 结构的语言生成任务接口,利用 Gradio 提供了一个简洁易用的文字输入框让用户提交待预测文本串,并返回经过 Qwen 大规模对话理解能力加工后的回复内容。 ### 启动应用 完成以上配置之后就可以运行该应用程序了。打开终端窗口进入包含 main.py 的工作空间执行 python 命令即可开启 HTTP Server 监听来自浏览器端发起请求的服务实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

openEuler社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值