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

简介: 告别服务器繁忙,云上部署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蒸馏模型服务。


/ END /

相关文章
|
1月前
|
域名解析 人工智能 弹性计算
DeepSeek服务器繁忙解决方法:使用阿里云一键部署DeepSeek个人网站!
通过阿里云一键部署DeepSeek个人网站,解决服务器繁忙问题。学生用户可领取300元代金券实现0成本部署,普通用户则可用99元/年的服务器。教程涵盖从选择套餐、设置密码到获取百炼API-KEY的全流程,助您快速搭建专属大模型主页,体验DeepSeek、Qwen-max、Llama等多款模型,无需代码,最快5分钟完成部署。支持绑定个人域名,共享亲友使用,日均成本仅约1元。
154 10
|
6天前
|
弹性计算 关系型数据库 Apache
阿里云实验基于ECS搭建云上博客
实验网址https://developer.aliyun.com/adc/scenario/fdecd528be6145dcbe747f0206e361f3?spm=a2c6h.13858375.devcloud-scene-list.4.d1a04090jMEG9j
69 26
|
30天前
|
JavaScript 应用服务中间件 nginx
Vue项目部署:如何打包并上传至服务器进行部署?
以上就是Vue项目打包及部署的方法,希望对你有所帮助。描述中可能会有一些小疏漏,但基本流程应该没有问题。记住要根据你的实际情况调整对应的目录路径和服务器IP地址等信息。此外,实际操作时可能会遇到各种问题,解决问题的能力是每一位开发者必备的技能。祝你部署顺利!
218 17
|
1月前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
178 0
|
1月前
|
域名解析 人工智能 API
学生看过来!白嫖阿里云服务器自建DeepSeek个人网站,3分钟站点上线,超简单!
学生看过来!利用阿里云服务器自建DeepSeek个人网站,3分钟快速上线,超简单!学生用户可领取300元代金券,实现0成本部署;普通用户则可选择99元/年的服务器。通过阿里云计算巢“DeepSeek个人站点-快速部署”服务,无需代码,最快5分钟即可体验多个AI模型。教程详情涵盖从打开部署页面、选择套餐、设置实例密码到获取API-KEY的完整步骤,助你轻松搭建专属AI网站。
151 1
|
1月前
|
域名解析 人工智能 API
使用阿里云服务器搭建自己的DeepSeek个人站点,3分钟尝鲜教程!
通过阿里云服务器,您可以0成本部署专属的DeepSeek网站。学生用户可领取300元代金券,实现免费部署;普通用户则可以选择99元/年的服务器方案。使用阿里云计算巢“DeepSeek个人站点-快速部署”服务,最快5分钟完成部署,无需编写代码。该服务集成了百炼API和Open WebUI,支持多种AI模型(如DeepSeek、Qwen-max、Llama等),并提供稳定、高性价比的个人专属AI网站体验。详情及教程请参考官方页面。
499 0
|
1月前
|
弹性计算
【已解决】Matomo本地SMTP配置可以发邮件,但部署到阿里云ECS就发不了邮件
在阿里云ECS上使用Matomo和PHPMailer发送邮件时遇到问题,邮件无法发出且接口调用Pending。经过排查,发现是ECS安全组未开放25/465端口,导致SMTP请求无法正常通信。解决方法为在安全组中配置并开放25/465端口,从而恢复邮件发送功能。
|
1月前
|
Linux 虚拟化 Docker
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
191 1
|
1月前
|
域名解析 弹性计算 应用服务中间件
使用域名访问部署在ECS上的网站
本文为您介绍如何为网站配置域名并为域名配置HTTPS证书。
|
数据采集 SQL 弹性计算
使用云服务器ECS部署了自己的第一个爬虫
云服务器部署爬虫爬取网站最新通告并推送
使用云服务器ECS部署了自己的第一个爬虫

热门文章

最新文章

下一篇
oss创建bucket