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网关、鉴权)、负载均衡、模型版本热更新等。但打好基础,做好服务管理和监控,就已经成功了一大半。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐