打造专属AI智能助手(二)模型部署:vLLM+DeepSeek+OpenWebUI保姆级教程

198 阅读4分钟

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI

本文介绍如何使用vLLM+DeepSeek+OpenWebUI搭建自己的智能助手,实现简单的问答和推理任务。前面已经介绍过基本环境的配置:GPU驱动的安装、NVLink&NVSwitch配置、容器化环境配置、模型权重下载等,本篇介绍模型的部署,这里以DeepSeek-R1-Distill-Qwen-32B模型为例。

vLLM是一个专注于LLM的高性能推理和服务框架,通过创新的PagedAttention机制和深度优化等技术,帮助用户高效的部署和运行大语言模型。

vLLM的安装有两种方式:pip安装和docker安装,这里以docker安装为例。

1、拉取vLLM镜像

docker pull vllm/vllm-openai

如果没有配置docker镜像加速,可能拉取失败:

配置docker镜像加速:

vi /etc/docker/daemon.json

可以看到拉取速度很慢,原因是镜像文件有21G,所以等待即可。

下载完21G:

这里需要注意拉取vLLM的版本和CUDA版本的对应关系:

vLLM 镜像 TAG所需 CUDA 版本
v0.9.2CUDA ≥ 12.8
v0.8.2CUDA ≥ 12.4

CUDA版本是向后兼容的,但是不能跨大版本运行。

2、启动vLLM容器并加载模型

运行docker命令启动vLLM容器,

docker run -d \  
  --gpus all \  
--restart unless-stopped \  
--name deepseek-container \  
--network host \  
  -v /data/DeepSeek/DeepSeek-R1-Distill-Qwen-32B:/model \  
--ipc=host \  
  vllm/vllm-openai:latest \  
--model /model \  
--served-model-name deepseek-r1 \  
--dtype half \  
--api-key OPENWEBUI123 \  
--tensor-parallel-size 8 \  
--gpu-memory-utilization 0.8 \  
--enable-prefix-caching \  
--max-num-batched-tokens 2048 \  
  --max-model-len 131072

参数解释:


-d: 在后台运行容器。
--gpus all: 使用所有可用的 GPU。
--restart unless-stopped: 重启策略为除非手动停止,否则总是重启容器。
--network host:使用主机网络,等同在主机网络里面启动容器。
--name deepseek-container: 给容器命名为 deepseek-container
-v /data/DeepSeek/DeepSeek-R1-Distill-Qwen-32B:/model : 将主机上的模型目录挂载到容器内的 /model路径。
vllm/vllm-openai:latest: 使用的 Docker 镜像名称和标签。
-- ipc=host: 允许容器访问host的共享内
--model /model: 指定在容器内部使用的模型路径。
--served-model-name deepseek-r1: 设置对外提供服务时的模型名称。
--dtype half: 使用 float16数据类型,我的显卡必须添加这个。
--api-key OPENWEBUI123: 设置 API 密钥。
--tensor-parallel-size 8:Tensor 并行的数量,当多 GPU 分布式推理时使用,建议和GPU的数量一致。
--gpu-memory-utilization 0.8:显存使用率 推荐 0.8~0.95
--enable-prefix-caching:启用前缀缓存减少重复计算。
--max-num-batched-tokens 2048:限制单次批处理的总token数量。
--max-model-len 131072:支持的最大上下文长度 不要超过模型训练长度,定义模型可以处理的最大输入 + 输出 token 数量,该参数越大占用显存越大.

可以使用docker logs -f deepseek-container查看启动过程,如果启动失败,可以看到具体的报错信息,便于分析排查:

3、部署后测试

vLLM容器启动之后,可以使用curl命令来获取model信息:

测试一下推理问答:

同时容器日志里也能看到token的吞吐以及KV Cache的使用:

模型加载启动之后,可以看到GPU使用情况:

4、部署Open-WebUI

Open WebUI是一个开源的、可扩展的、功能丰富的自托管AI平台,旨在完全离线运行。它主要设计用于与大型语言模型(LLMs)进行交互,支持多种模型和API,提供了直观的图形用户界面,使得用户可以更方便地管理和运行模型。

Github 地址:

github.com/open-webui/…

4.1 open-webui镜像拉取

docker pull

ghcr.io/open-webui/open-webui:cuda

4.2 服务启动

docker run -d \  
-p 3000:8080 \  
--name openwebui-container \  
--network host \  
--gpus all \  
-e OPENAI_API_BASE_URL=http://localhost:8000/v1 \  
-e OPENAI_API_KEYS=OPENWEBUI123 \  
-e USE_CUDA_DOCKER=true \  
ghcr.io/open-webui/open-webui:cuda

启动后,可以通过浏览器访问Open-WebUI:

http://ip:8080

4.3 模型配置

创建账号:

进入对话界面:

创建完,进入之后,模型已经自动连接:

可以直接进行对话:

进入管理员页面,进行配置:

如果没有自动连接,可以手动连接模型:

将 OpenAI API 和 Ollama API 关闭,前提如果你有这两个连接的话,可以开启。然后保留 直接连接 的开启

然后再次点击左下角进入设置:

模型ID 可以留空,会自动从 /v1/models 接口中获取。

保存后,点击左上角 新对话 , 即可看到默认选择了 DeepSeek-R1 模型

总结:

本文详细介绍了使用vLLM部署DeepSeek-R1-Distill-Qwen-32B模型,以及结合Open-WebUI对接模型,提供交互的图像界面,至此一个开源模型的本地化部署完成。

学习资源推荐

如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI