告别服务器繁忙,云上部署DeepSeek

简介: 本文以 DeepSeek-R1-Distill-Qwen-32B-FP8 为例,向您介绍如何在GPU实例上使用容器来部署量化的 DeepSeek-R1 蒸馏模型。

【阅读原文】戳:告别服务器繁忙,云上部署DeepSeek

 

一、背景

 

 

 

DeepSeek-R1是DeepSeek公司推出的一个开源推理模型,推理性能优秀,在性能比肩OpenAI o1的同时,还能够输出它的思维链,即思考的过程。原生DeepSeek-R1模型拥有660B个参数,无法部署在显存较小的GPU上,所以DeepSeek公司通过DeepSeek-R1的输出,借助蒸馏技术用低成本训练出高效的模型,蒸馏出了Qwen、Llama等6个小模型版本,其中32B和70B模型在多项能力上实现了对标OpenAI o1-mini的效果。本文以DeepSeek-R1-Distill-Qwen-32B-FP8为例,向您介绍如何在GPU实例上使用容器来部署量化的DeepSeek-R1蒸馏模型,可以离线测试或通过WebUI在线使用DeepSeek-R1蒸馏模型服务。

 

 

 

二、准备运行环境

 

 

 

我们可以根据实际使用的模型选择合适的GPU实例,如下表所示:

 

 

模型运行时实际占用的显存大小除了需要考虑模型本身的大小之外,还需要考虑上下文长度,KV cache的设置情况等。运行DeepSeek-R1-Distill-Qwen-32B-FP8蒸馏模型需要的显存大小至少为32GB,所以本文将在gn8is实例上(显存大小48GB)通过容器来运行DeepSeek-R1蒸馏模型。使用容器可以帮助您快速且方便地构建大语言模型的推理环境,无需深入了解底层硬件,也无需额外配置即可开箱即用。

 

Tips:本文使用ecs.gn8is.2xlarge实例进行模型部署(目前该实例规格仅海外在售,如有需求请联系阿里云销售)。若您只是用于模型体验,也可选择库存充足的ecs.gn7i-4x.8xlarge实例,调整vLLM启动参数--tensor-parallel-size 4,其他操作配置不变,也可运行模型。

 

下面将详细介绍如何创建gn8is实例、安装GPU驱动和安装容器,以准备运行环境:

 

1. 创建GPU实例并安装GPU驱动

 

我们打开阿里云创建实例页面,选择ecs.gn8is.2xlarge实例类型,操作系统我们选择Ubuntu20.04,取消勾选安装eRDMA软件栈(单卡实例不需要),勾选安装GPU驱动:CUDA 12.4.1,Driver 550.127.08, CUDNN 9.2.0.82,这样GPU实例创建完成后,会同时自动安装GPU驱动、CUDA、cuDNN库等,相比手动安装方式更快捷。磁盘空间需要200G以上,因为需要下载模型数据与容器镜像。

 

 

2. 通过ssh远程连接GPU实例

 

3. 执行以下命令,安装Docker环境

 

sudo apt-get update
sudo apt-get -y install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

 

4. 执行以下命令,检查Docker是否安装成功

 

docker -v

 

如下图回显信息所示,表示Docker已安装成功。

 

 

5. 执行以下命令,安装nvidia-container-toolkit

 

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

 

6. 设置Docker开机自启动并重启Docker服务

 

sudo systemctl enable docker 
sudo systemctl restart docker

 

7. 执行以下命令,查看Docker是否已启动

 

sudo systemctl status docker

 

如下图回显所示,表示Docker已启动。

 

 

 

 

 

三、运行deepseek-R1 32B蒸馏模型容器

 

 

 

通常情况下,运行32B的模型需要64G显存,gn8is实例GPU的显存大小为48GB,无法直接运行32B模型,所以需要使用参数量化后的模型,这样才能在gn8is实例上运行32B模型,本文以 modelscope上FP8量化的模型DeepSeek-R1-Distill-Qwen-32B-FP8为例,您可根据实际需求更换其他量化模型。下面将分别介绍两种运行deepseek-R1 32B蒸馏模型容器的方法,您可以根据需求选择其一来运行容器:

 

1. 使用预装 DeepSeek-R1-Distill-Qwen-32B-FP8 蒸馏模型的容器镜像运行容器

2. 手动部署运行 DeepSeek-R1-Distill-Qwen-32B-FP8 蒸馏模型容器

 

 

3.1 使用预装DeepSeek-R1-Distill-Qwen-32B-FP8蒸馏模型的容器镜像运行容器

 

阿里云提供了预装DeepSeek-R1-Distill-Qwen-32B-FP8蒸馏模型和Open-WebUI的容器镜像,方便您快速便地构建大语言模型的推理环境,无需额外配置即可开箱即用。

 

1. 执行以下命令,拉取容器镜像。镜像大小47GB(包含了模型数据),拉取容器镜像耗时较长,请您耐心等候

 

sudo docker pull egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-nv-pytorch:preview-25.02-dsr1distill-qwen32bfp8-vllm0.6.4.post1-pytorch2.5.1-cuda12.4-20250208

 

2. 执行以下命令,运行deepseek容器

 

sudo docker run -d -t --net=host --gpus all \
 --privileged \
 --ipc=host \
 --name deepseek \
 egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/inference-nv-pytorch:preview-25.02-dsr1distill-qwen32bfp8-vllm0.6.4.post1-pytorch2.5.1-cuda12.4-20250208

 

配置参数解释:

--net=host --ipc=host:共享宿主机的网络命名空间与IPC命名空间,方便后续访问容器内运行的大模型服务

 

3. 执行以下命令,查看deepseek容器是否启动成功

 

docker ps

 

如下图回显所示,表示deepseek容器已启动。

 

 

3.2 手动部署运行DeepSeek-R1-Distill-Qwen-32B-FP8蒸馏模型容器

 

如果不使用预装 DeepSeek-R1-Distill-Qwen-32B-FP8 蒸馏模型和 Open-WebUI 的容器镜像,也可以通过以下命令手动部署运行 DeepSeek-R1-Distill-Qwen-32B-FP8 蒸馏模型容器。以下将介绍如何在基础镜像 nvcr.io/nvidia/cuda:12.4.1-runtime-ubuntu22.04上安装依赖库,准备 DeepSeek-R1 蒸馏模型运行的容器环境:

 

1. 执行以下命令,拉取基础容器镜像

 

sudo docker pull nvcr.io/nvidia/cuda:12.4.1-runtime-ubuntu22.04

 

2. 执行以下命令,运行deepseek容器

 

sudo docker run -d -t --net=host --gpus all \
 --privileged \
 --ipc=host \
 --name deepseek \
 nvcr.io/nvidia/cuda:12.4.1-runtime-ubuntu22.04

 

配置参数解释:

--net=host --ipc=host:共享宿主机的网络命名空间与IPC命名空间,方便后续访问容器内运行的大模型服务

 

3. 执行以下命令,查看deepseek容器是否启动成功

 

docker ps

 

如下图回显所示,表示deepseek容器已启动。

 

 

4. 执行以下命令,进入deepseek容器

 

docker exec -it deepseek bash

 

5. 执行以下命令,创建并进入工作目录 /workspace

 

mkdir /workspace && cd /workspace

 

6. OpenWebUI依赖python 3.11,执行以下命令,安装python 3.11

 

# 安装 python3.11
apt update
apt install -y python3.11
# 使用 Python 3.11 作为默认的 Python3
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
# 安装对应版本的 pip
apt install -y curl
curl -sS https://bootstrap.pypa.io/get-pip.py | python3

 

7. 执行以下命令,查看python3.11和pip是否安装成功

 

# 查看 python3 是否安装成功
python3 --version
# 查看 pip 是否安装成功
pip --version

 

如下图回显所示,表示python3.11和pip安装成功。

 

 

8. 执行以下命令,安装vllm 0.6.4.post1。“-i https://pypi.tuna.tsinghua.edu.cn/simple” 参数,用于指定清华的pip源,加快下载速度

 

pip install vllm==0.6.4.post1 -i https://pypi.tuna.tsinghua.edu.cn/simple

 

9. 执行以下命令,查看vllm 0.6.4.post1是否安装成功

 

python3 -c 'import vllm; print(vllm.__version__)'

 

如下图回显所示,表示vllm 0.6.4.post1安装成功。

 

 

10. 执行以下命令,安装运行vllm的依赖库

 

apt-get install -y libgl1-mesa-glx libglib2.0-0

 

11. 执行以下命令,安装 open-webui,同样指定清华pip源

 

pip install open-webui==0.5.10 -i https://pypi.tuna.tsinghua.edu.cn/simple

 

12. 执行以下命令,查看open-webui是否安装成功

 

open-webui --help

 

如下图回显所示,表示open-webui安装成功。

 

 

13. 执行以下命令,通过git lfs下载modelscope格式的DeepSeek-R1-Distill-Qwen-32B-FP8蒸馏模型

 

安装git-lfs便于下载大语言模型:

 

apt install -y git-lfs

 

执行以下命令,下载模型。下载模型耗时较长,耗时视模型大小与网络情况而定,下载DeepSeek-R1-Distill-Qwen-32B-FP8大约需要2小时,请耐心等候。

 

git lfs clone https://www.modelscope.cn/okwinds/DeepSeek-R1-Distill-Qwen-32B-FP8.git

 

下载完成的文件目录如下:

 

 

vllm适配版本说明

 

1. 需要使用较新版本的vLLM,使用0.5.4版本会报错Exception: data did not match any variant of untagged enum ModelWrapper at line 757503 column 3

 

2. 实测vLLM版本0.6.4.post1与最新版本0.7.2(截止2025年2月8号)均可以运行,上文以v0.6.4.post1版本为例,如需使用最新版本0.7.2,可在运行deepseek容器后,在容器内执行以下命令升级vllm版本到0.7.2,“-i https://pypi.tuna.tsinghua.edu.cn/simple” 参数,用于指定清华的pip源,加快下载速度。

 

pip install vllm==0.7.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

 

在容器内执行以下命令,查看vllm是否升级成功:

 

python3 -c 'import vllm; print(vllm.__version__)'

 

如下图回显所示,表示vllm升级成功。

 

 

 

 

 

四、运行deepseek-R1 32B蒸馏模型服务

 

 

 

根据步骤三,通过预装DeepSeek-R1-Distill-Qwen-32B-FP8 蒸馏模型的容器镜像或手动部署,我们成功运行了deepseek容器,接下来我们将在deepseek容器中运行量化的蒸馏模型服务与OpenWebUI服务,并进行一些测试与验证。

 

执行以下命令,进入deepseek容器与工作目录

 

docker exec -it deepseek bash
cd /workspace

 

4.1 离线运行DeepSeek-R1-Distill-Qwen-32B-FP8推理服务

 

1. 执行以下命令,创建demo目录,下载安装vim,编辑vllm_demo.py脚本

 

# 使用预装 DeepSeek-R1-Distill-Qwen-32B-FP8 容器镜像,
# 测试脚本已准备好,进入 demo 目录即可。
cd demo
# 手动部署 DeepSeek-R1-Distill-Qwen-32B-FP8 容器,
# 需要创建编辑 vllm_demo.py 脚本。
mkdir demo && cd demo
apt install -y vim
vim vllm_demo.py

 

2. vllm_demo.py脚本内容如下:

 

from vllm import LLM, SamplingParams
# Sample prompts.
prompts = [
    "Hello, my name is",
    "The president of the United States is",
    "The capital of France is",
    "The future of AI is",
]
# Create a sampling params object.
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
# Create an LLM.
llm = LLM(model="/workspace/DeepSeek-R1-Distill-Qwen-32B-FP8", max_model_len=18432, gpu_memory_utilization=0.98)
# Generate texts from the prompts. The output is a list of RequestOutput objects
# that contain the prompt, generated text, and other information.
outputs = llm.generate(prompts, sampling_params)
# Print the outputs.
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

 

代码第14行llm = LLM(model="/workspace/DeepSeek-R1-Distill-Qwen-32B-FP8",max_model_len=18432, gpu_memory_utilization=0.98) 模型的配置参数解释如下:

 

a. model:指定模型路径

 

b. max_model_len=18432设置模型上下文长度,gpu_memory_utilization=0.98设置 vllm 的显存使用率,如果设置不恰当,可能会报错 ValueError: The model's max seq len (131072) is larger than the maximum number of tokens that can be stored in KV cache (39648). Try increasing gpu_memory_utilization or decreasing max_model_len when initializing the engine. 这个错误说明模型上下文长度max_model_len超出了所用GPU的KV缓存限制,减小max_model_len或增加 gpu_memory_utilization即可。

 

c. gpu_memory_utilization=0.98

 

3. 执行以下命令,进行离线测试

 

python3 /workspace/demo/vllm_demo.py

 

可以快速地处理对话问答任务,推理示例如下:

 

 

4.2 在线运行DeepSeek-R1-Distill-Qwen-32B-FP8推理服务

 

1. 容器内任意目录下执行以下命令,启动蒸馏模型推理服务

 

python3 -m vllm.entrypoints.openai.api_server \
--model /workspace/DeepSeek-R1-Distill-Qwen-32B-FP8 \
--trust-remote-code \
--quantization fp8 \
--tensor-parallel-size 1 \
--port 8000 \
--enforce-eager \
--gpu-memory-utilization 0.98 \
--max-model-len 18432

 

如下所示,表示蒸馏模型推理服务已启动,服务地址是localhost:8000。

 


配置参数解释:

• model/workspace/DeepSeek-R1-Distill-Qwen-32B-FP8:指定模型路径

• quantization fp8:启用 FP8 量化,显著降低显存占用。

• tensor-parallel-size 1:设置 tensor 并行大小。

• port 8000:设置服务监听端口为8000。

• enforce-eager:启用eager模式,加快推理速度。

• gpu_memory_utilization 0.98:设置显存使用率为98%,尽可能多地利用显存。

• max-model-len 18432设置最大序列长度为18432个token,可以设置的大小跟显存大小和KV cache限制有关,如果报错 ValueError: The model's max seq len (131072) is larger than the maximum number of tokens that can be stored in KV cache (39648). Try increasing gpu_memory_utilization or decreasing max_model_len when initializing the engine. 则说明模型上下文长度max_model_len超出了所用GPU的KV缓存限制,减小max_model_len或增加gpu_memory_utilization即可。

 

2. 执行以下命令,测试推理效果

 

curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
    "model": "/workspace/DeepSeek-R1-Distill-Qwen-32B-FP8",   
    "messages": [
    {"role": "user", "content": "介绍一下什么是大模型推理。" }
    ]}'

 

耗时1分钟左右输出推理结果,如下图所示:

 

 

3. 运行Open-WebUI前端服务,可以访问公网ip通过web页面访问 DeepSeek-R1蒸馏模型推理服务。执行以下命令:

 

a. 打开新的终端窗口,执行以下命令进入deepseek容器和工作目录。

 

docker exec -it deepseek bash
cd /workspace

 

b. 设置以下Open-WebUI运行的环境变量

 

# 避免服务器一直尝试连接 Ollama 而降低面板响应速度
export ENABLE_OLLAMA_API=False 
# 连接 DeepSeek 大模型服务器,访问 localhost:8080 即可使用
# 蒸馏模型服务(对应服务地址是 localhost:8000)
export OPENAI_API_BASE_URL=http://127.0.0.1:8000/v1
# 指定 open-webui 下载依赖的镜像源
export HF_ENDPOINT=https://hf-mirror.com
# 指定 open-webui 的数据存储路径
export DATA_DIR=./open-webui-data

 

c. 运行以下命令启动Open-WebUI前端服务:

 

open-webui serve

 

如下所示,表示Open WebUI前端服务已启动,服务地址为 localhost:8080(注意跟大模型服务做区分,大模型服务地址是 localhost:8000)。第一次运行需要下载一些依赖库,耗时2分钟左右。

 

 

4. 访问web页面之前,需要打开阿里云控制台,配置实例的安全组,将TCP端口8080放行。授权对象是您客户端的公网ip,客户端的公网ip可以通过网页访问ip138.com查询。

 

 

a. 在浏览器中输入阿里云实例的公网ip:8080端口,即 http://x.x.x.x:8080就可以访问了。如下所示:

 

 

b. 点击开始使用,根据提示创建管理员账号。

 

 

然后就可以使用了。

 

 

通过deepseek容器运行的后台服务器看到平均吞吐量为17.0 tokens/s

 

 

4.3 使用其他精度量化的模型

 

本文以DeepSeek-R1-Distill-Qwen-32B-FP8为例,根据实际需求,如果您想要使用其他精度量化的模型,只需要下载对应的模型以及更改运行命令即可,其余与前文保持一致:

 

比如,如果想要支持更长的上下文,如65536,并且可以承担一些精度损失,那么可以在modelscope上寻找使用量化精度更小的模型,比如int4量化的deepseek-r1-distill-qwen-32b-gptq-int4。

 

1. 下载模型

 

git lfs clone https://www.modelscope.cn/tclf90/deepseek-r1-distill-qwen-32b-gptq-int4.git

 

2. 运行命令

 

python3 -m vllm.entrypoints.openai.api_server \
--model /workspace/deepseek-r1-distill-qwen-32b-gptq-int4 \
--trust-remote-code \
--quantization gptq_marlin \
--tensor-parallel-size 1 \
--port 8000 \
--enforce-eager \
--gpu-memory-utilization 0.98 \
--max-model-len 65536

 

与运行DeepSeek-R1-Distill-Qwen-32B-FP8命令的不同之处在于:

 

a. model修改为对应的模型/workspace/deepseek-r1-distill-qwen-32b-gptq-int4

b. quantization修改量化方式为gptq_marlin

c. max-model-len修改最大上下文长度为65536

 

 

 

 

五、总结

 

 

 

通过上述步骤,我们可以在阿里云异构实例gn8is上部署DeepSeek蒸馏模型DeepSeek-R1-Distill-Qwen-32B-FP8,可以离线测试或通过WebUI在线使用DeepSeek-R1蒸馏模型服务。




我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。

欢迎关注 “阿里云基础设施”同名微信微博知乎

获取关于我们的更多信息~

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
弹性计算 人工智能 前端开发
在阿里云ECS上部署n8n自动化工作流:U2实例实战
本文介绍如何在阿里云ECS的u2i/u2a实例上部署开源工作流自动化平台n8n,利用Docker快速搭建并配置定时任务,实现如每日抓取MuleRun新AI Agent并推送通知等自动化流程。内容涵盖环境准备、安全组设置、实战案例与优化建议,助力高效构建低维护成本的自动化系统。
560 5
|
2月前
|
Java Linux Apache
在CentOS服务器上编译并部署NiFi源码
部署Apache NiFi在CentOS上是一个涉及细节的过程,需要注意Java环境、源码编译、配置调整等多个方面。遵循上述步骤,可以在CentOS服务器上成功部署和配置Apache NiFi,从而高效地处理和分发数据。
176 17
|
3月前
|
弹性计算 安全 Linux
使用阿里云服务器安装Z-Blog博客网站流程,新手一键部署教程
本教程教你如何在阿里云99元服务器上,通过宝塔Linux面板一键部署Z-Blog博客。基于CentOS 7.9系统,从远程连接、安装宝塔面板、开放端口到部署Z-Blog全流程详解,操作简单,新手也能轻松搭建个人博客网站。
455 13
|
3月前
|
弹性计算 Devops Shell
用阿里云 DevOps Flow 实现 ECS 部署自动化:从准备到落地的完整指南
阿里云 DevOps Flow 是一款助力开发者实现自动化部署的高效工具,支持代码流水线构建、测试与部署至ECS实例,显著提升交付效率与稳定性。本文详解如何通过 Flow 自动部署 Bash 脚本至 ECS,涵盖环境准备、流水线搭建、源码接入、部署流程设计及结果验证,助你快速上手云上自动化运维。
289 0
监控 安全 Linux
146 0
|
4月前
|
监控 Java Linux
Apache NiFi项目的编译与部署于CentOS服务器
总而言之,Apache NiFi的编译和部署虽然涉及多个步骤,但这些操作步骤简明扼要,即使是不太熟悉Java或Maven的用户也能跟随指南完成。通过遵循上述步骤,您将能够在CentOS服务器上成功部署Apache NiFi,为您的数据流处理任务建立一个功能强大的平台。
338 16
|
4月前
|
资源调度 负载均衡 JavaScript
使用PM2工具部署Vue.js应用于服务器
以上步骤完成之后,你就成功利⽤ PM⼆工具将 Vuejs 应⽰程序部署至服 务 器,并且配合反向代理实现了高效稳定访问及负载均衡功能。
194 0
|
4月前
|
运维 数据可视化 数据库
一小时搞定服务器软件部署:资深工程师实测方案
本文分享了一位运维工程师在短时间内将30个不同软件部署到新服务器上的实战经验。面对全新 Rocky Linux 系统,传统手工部署方式效率低下且容易出错。作者尝试多种自动化方案后,最终选择使用自动化部署工具,通过其内置的 Docker Compose 模板和可视化界面,实现快速、批量部署,大幅提升效率,30个应用仅用约1小时完成,显著节省时间和人力成本。