Optimizing DeepSeek-R1-Distill-Qwen-1.5B Deployment on Kylin V10 with vLLM and Ollama
1. 环境准备与驱动安装
在Kylin V10上部署AI大模型,第一步也是最关键的一步,就是搞定GPU环境。我刚开始接触国产操作系统时,也踩过不少坑,尤其是驱动兼容性问题。Kylin V10基于RHEL/CentOS,所以很多操作和CentOS类似,但又有自己的“小脾气”。
首先,你得确认你的服务器有NVIDIA GPU。用 lspci | grep -i nvidia 命令看一眼,如果能看到显卡信息,那就没问题。接下来就是安装驱动。这里有个大坑:Kylin默认可能使用了开源的 nouveau 驱动,它会和官方的NVIDIA驱动冲突,必须禁掉。
禁用的方法不复杂,但一步都不能错。先创建配置文件:
sudo tee /etc/modprobe.d/blacklist-nouveau.conf << 'EOF'
blacklist nouveau
options nouveau modeset=0
EOF
然后更新内核镜像并重启:
sudo mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
sudo dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
sudo reboot
重启后,务必用 lsmod | grep nouveau 检查一下,如果没有输出,说明禁用成功了。
驱动安装我推荐从NVIDIA官网下载对应的.run文件。选择版本时要注意,CUDA Toolkit的版本最好和后续要用的深度学习框架要求匹配。对于我们要部署的DeepSeek-R1-Distill-Qwen-1.5B,CUDA 12.x系列是比较稳妥的选择。下载后,给文件添加执行权限并运行安装程序:
chmod +x NVIDIA-Linux-x86_64-*.run
sudo ./NVIDIA-Linux-x86_64-*.run
安装过程中,如果提示缺少kernel-devel等包,用 sudo yum install kernel-devel gcc make 装上就行。安装完成后,跑一下 nvidia-smi,如果能看到显卡的详细信息表格,包括驱动版本、CUDA版本和GPU状态,那驱动这块就算过关了。
2. 配置容器GPU支持(NVIDIA Container Toolkit)
模型部署现在离不开容器,要让容器里的应用也能用上GPU,就得安装 NVIDIA Container Toolkit。这工具相当于在Docker(或其他容器运行时)和NVIDIA驱动之间架了一座桥。
在Kylin V10上安装,步骤很清晰。首先确保系统已经装了curl和基础的开发工具:
sudo yum install -y curl gcc-c++ make
然后,添加NVIDIA的官方仓库。这里直接用curl管道写入配置文件是最稳的:
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
接着刷新仓库缓存并安装工具包:
sudo yum clean expire-cache
sudo yum install -y nvidia-container-toolkit
安装完成后,需要配置你的容器运行时。假设你用Docker,运行以下命令来生成配置:
sudo nvidia-ctk runtime configure --runtime=docker
这个命令会自动修改 /etc/docker/daemon.json 文件,加入NVIDIA运行时。改完后,重启Docker服务让配置生效:
sudo systemctl restart docker
最后,我们来验证一下。跑一个带GPU的测试容器:
sudo docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu20.04 nvidia-smi
如果这个容器里也能成功输出和宿主机一样的 nvidia-smi 信息,恭喜你,容器GPU支持配置成功!这意味着你后续无论是用Ollama还是其他方式在容器里跑模型,都能直接调用GPU了。
3. 使用Ollama简化模型部署与管理
对于想快速上手、不太关心底层配置的朋友,Ollama 绝对是福音。它把模型下载、环境配置、服务启动全打包了,用起来就像在电脑上安装一个软件那么简单。它的核心优势在于“开箱即用”,特别适合原型验证和个人开发。
在Kylin V10上安装Ollama,一条命令搞定:
curl -fsSL https://ollama.com/install.sh | sh
安装脚本会自动处理依赖,并创建一个叫ollama的系统服务。安装完,启动服务并设置开机自启:
sudo systemctl start ollama
sudo systemctl enable ollama
服务跑在 http://127.0.0.1:11434。用 curl http://127.0.0.1:11434 测一下,有返回就说明服务起来了。
Ollama管理模型非常直观。要运行DeepSeek-R1-Distill-Qwen-1.5B,如果Ollama官方库有,直接 ollama run deepseek-r1:1.5b 就行。但有时候我们需要用自己下载的特定版本模型。这时,可以创建一个 Modelfile 来指定本地模型路径。假设你的模型下载到了 /home/data/models/DeepSeek-R1-Distill-Qwen-1.5B,可以这样操作:
cd /home/data/models/DeepSeek-R1-Distill-Qwen-1.5B
cat > Modelfile << 'EOF'
FROM /home/data/models/DeepSeek-R1-Distill-Qwen-1.5B
TEMPLATE """{{- if .System }}{{ .System }}{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1}}
{{- if eq .Role "user" }}### Human: {{ .Content }}
{{- else if eq .Role "assistant" }}### Assistant: {{ .Content }}{{- if not $last }}{{- end }}
{{- end }}
{{- if and $last (ne .Role "assistant") }}### Assistant:{{- end }}
{{- end }}"""
PARAMETER stop "### Human:"
PARAMETER stop "### Assistant:"
EOF
然后用这个Modelfile创建Ollama可用的模型:
ollama create my-deepseek-1.5b -f ./Modelfile
创建成功后,用 ollama run my-deepseek-1.5b 就能启动一个交互式对话界面。Ollama也提供REST API,方便集成到其他应用里。比如,用curl发一个请求:
curl http://127.0.0.1:11434/api/generate -d '{
"model": "my-deepseek-1.5b",
"prompt": "你好,请介绍一下你自己。",
"stream": false
}'
对于需要快速验证模型效果、或者资源有限(比如只有单张GPU)的场景,Ollama的轻量和易用性优势非常明显。它把复杂度都隐藏了,让你能专注在模型应用本身。
4. 使用vLLM实现高性能推理
当你需要追求极致的推理速度和高吞吐量,尤其是在生产环境部署时,vLLM 就是那个“专业选手”。它通过创新的 PagedAttention 算法,高效管理注意力机制的键值(KV)缓存,能大幅提升大模型并发推理的性能。简单说,就是同样硬件下,vLLm能同时处理更多用户的请求,且响应更快。
vLLM的安装稍微复杂点,因为它对Python环境和CUDA版本有要求。我强烈建议使用 Miniconda 来创建一个独立、干净的环境,避免污染系统Python。
首先,下载并安装Miniconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /usr/local/miniconda3
安装时记得同意将conda加入环境变量。安装后,执行 source ~/.bashrc 或新开一个终端,让 conda 命令生效。
接着,创建一个专用于vLLM的Python环境(这里用Python 3.10,兼容性较好):
conda create -n vllm python=3.10 -y
conda activate vllm
在vLLM环境里,安装PyTorch。务必去 PyTorch官网 根据你的CUDA版本选择正确的安装命令。假设你是CUDA 12.1:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
然后安装vLLM本体:
pip install vllm
安装完成后,就可以启动推理服务了。对于DeepSeek-R1-Distill-Qwen-1.5B这样1.5B参数量的“小”模型,单张GPU通常就够了。启动命令如下:
conda activate vllm
CUDA_VISIBLE_DEVICES=0 vllm serve /home/data/models/DeepSeek-R1-Distill-Qwen-1.5B \
--host 0.0.0.0 \
--port 8000 \
--max-model-len 2048 \
--gpu-memory-utilization 0.85 \
--served-model-name deepseek-r1-1.5b
我来解释一下这几个关键参数:
CUDA_VISIBLE_DEVICES=0:指定使用第一张GPU。--max-model-len 2048:模型支持的最大上下文长度(token数),根据你的需求调整。--gpu-memory-utilization 0.85:GPU显存使用率上限,留点余量给系统更稳定。--served-model-name:指定服务中模型的名称,调用API时会用到。
服务启动后,会监听8000端口。你可以用curl测试一下OpenAI兼容的API:
curl http://127.0.0.1:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1-1.5b",
"prompt": "法国的首都是哪里?",
"max_tokens": 50,
"temperature": 0.1
}'
vLLM的优势在并发请求时尤其明显。你可以写个简单的Python脚本,模拟多个并发请求,观察其响应时间和吞吐量,会发现它比一些简单的推理后端要高效得多。对于企业级应用,vLLM提供的性能保障是至关重要的。
5. 高级优化与生产化部署
把模型跑起来只是第一步,要真正用到生产环境,还得做不少优化和加固工作。这里我分享几个从实战中总结出来的经验。
首先是用systemd托管服务。 无论是Ollama还是vLLM,都不能让它只在前台运行。为vLLM创建一个systemd服务是最稳妥的。创建服务文件 /etc/systemd/system/deepseek-vllm.service:
[Unit]
Description=vLLM Service for DeepSeek-R1-1.5B
After=network.target nvidia-persistenced.service
[Service]
Type=simple
User=root
Environment="PATH=/usr/local/miniconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
# 关键:先激活conda环境,再执行命令
ExecStart=/bin/bash -c "source /usr/local/miniconda3/etc/profile.d/conda.sh && conda activate vllm && exec vllm serve /home/data/models/DeepSeek-R1-Distill-Qwen-1.5B --host 0.0.0.0 --port 8000 --max-model-len 2048 --gpu-memory-utilization 0.85 --served-model-name deepseek-r1-1.5b"
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
然后启用服务:
sudo systemctl daemon-reload
sudo systemctl enable deepseek-vllm
sudo systemctl start deepseek-vllm
这样服务就会在后台稳定运行,崩溃了自动重启,日志也交给systemd统一管理。
其次是性能监控。 光跑起来不行,我们得知道它跑得怎么样。nvidia-smi 是最直接的,可以写个脚本定期记录GPU使用情况。更进阶一点,可以集成Prometheus和Grafana。vLLM内置了Prometheus指标导出,在启动命令里加上 --metrics-port 8001,它就会在8001端口暴露监控指标。你可以配置Prometheus来抓取这些数据,然后在Grafana里制作漂亮的监控看板,实时观察请求量、延迟、GPU利用率等关键指标。
最后是处理DeepSeek-R1特有的“思考”标签。 DeepSeek-R1系列模型在推理时,内部会先产生一个“思考过程”(Think),然后再输出最终答案。在vLLM中,如果不做特殊处理,这个思考标签可能会被一起输出,影响用户体验。我们需要通过 --chat-template 参数指定一个正确的对话模板。这个模板文件(例如 template_deepseek_r1.jinja)定义了如何将对话历史格式化成模型能理解的prompt,并正确处理思考标签的剥离。模板内容需要根据模型的具体要求来编写,通常可以从模型的官方仓库或社区找到示例。在启动命令中加上 --chat-template /path/to/template_deepseek_r1.jinja 即可。
生产化部署是一个系统工程,除了上面几点,还需要考虑网络安全(如API网关、鉴权)、负载均衡、模型版本热更新等。但打好基础,做好服务管理和监控,就已经成功了一大半。
更多推荐

所有评论(0)