DeepSeek-R1本机部署(VLLM+OpenWebUI)

66 阅读3分钟

本文搭建环境

系统:Ubuntu 22.04.4 LTS

Python版本:Python 3.10

显卡:RTX 4090D

一、DeepSeek-R1-14b原始模型和q8量化模型

1.从modelscope下载模型

官方原始模型:modelscope.cn/models/deep…

第三方量化模型:modelscope.cn/models/okwi…

先安装modelscope

pip install modelscope

选择你需要的量化参数模型,这是下载14B的q8量化模型(本文使用的模型):

from modelscope import snapshot_download
# 指定模型
model_name = "okwinds/DeepSeek-R1-Distill-Qwen-14B-Int8-W8A16"
custom_path = "/home"
model_dir = snapshot_download(model_name,cache_dir=custom_path)
print(f"model download to {model_dir}")

在这里插入图片描述

这是下载原始模型:

from modelscope import snapshot_download
# 指定模型
model_name = "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B"
custom_path = "/home"
model_dir = snapshot_download(model_name,cache_dir=custom_path)
print(f"model download to {model_dir}")

安装vllm,安装不成功的话需要先安装pytorch和cuda,如果报错 gcc 版本的话,可能你用的是CentOS7,可以参考我的这篇文章升级你的 gcc 版本。

CentOS7升级gcc版本

运行安装命令

pip install vllm

更新uvloop:

pip install --upgrade uvloop

如果运行q8量化模型:

cd /home/okwinds
vllm serve DeepSeek-R1-Distill-Qwen-14B-Int8-W8A16

vllm serve命令可添加参数说明:

参数说明
--tensor-parallel-size指定使用的GPU数量
--gpu-memory-utilization设置每张GPU的显存利用率上限,取值范围为0~1(例如:0.9表示限制为90%的显存使用)。
--max-model-len设置模型支持的最大输入序列长度(以token为单位)。该参数限制了模型接收的最大token数量,从而控制内存和计算资源的使用。
--host --port 指定模型API的主机和端口。
--enforce-eager启用即时执行模式(Eager Execution),即模型推理会在每个操作执行时立即进行,而非先构建完整的操作图。
这是示例vllm serve DeepSeek-R1-Distill-Qwen-14B-Int8-W8A16 --max-model-len 21152 --enforce-eager --gpu_memory_utilization=0.9 --enable-chunked-prefill --host 0.0.0.0 --port 6666

默认运行在端口8000,在命令行测试模型是否正常可用(q8量化模型):

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
        "model": "DeepSeek-R1-Distill-Qwen-14B-Int8-W8A16",  # 指定模型名称
        "messages": [                                          
          {"role": "system", "content": "You are a helpful assistant."},  # 系统消息
          {"role": "user", "content": "Hello, introduce yourself."}       # 用户消息
        ],
        "max_tokens": 2000,   # 最大生成token数
        "temperature": 0.7,   # 控制生成文本的随机性
        "top_p": 0.9          # 控制生成文本的多样性
      }'

有正常回复就行。

二、部署Open WebUI

推荐大家使用Docker的方式来跑WebUi镜像。

Docker拉取并运行Open WebUI。

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

需要等待一段时间,访问 http://localhost:3000/ ,注册管理员账户。

点击设置

在这里插入图片描述

点击管理员设置

在这里插入图片描述

点击外部连接后,在左侧框中输入本机的API地址,并在末尾加上/v1。如果是在本机操作,直接填写本机地址,注意地址以http开头。右侧框中填写一个空格(默认值为vllm API token)。开启新对话,选择模型。

在这里插入图片描述