利用 TencentOS 在企业私有化场景中快速部署 DeepSeek

DeepSeek 是这段时间最热门的话题之一,其先进的 AI 技术可以实现低成本而高质量的推理,使企业可以低成本的使用优秀的 AI 推理能力,为企业业务带来更多的 AI 助力。
目前在腾讯云上已经提供了多种体验和使用 DeepSeek 的方法,但经常有行业的小伙伴询问:“能否在企业私有化场景的国产服务器上部署和使用 DeepSeek?”

这就给大家安排!
目前国产硬件主要包括 5 种架构、6 大品牌的 CPU,在私有化部署 DeepSeek 的时候,需要一个安全、可靠、高性能的操作系统来支持这些 CPU 架构的服务器,同时能够支持多种类型的 GPU/NPU 设备以及上层完整的 DeepSeek 软件栈。
TencentOS Sever(腾讯云 Linux 服务器操作系统)是腾讯云自主研发设计的服务器 Linux 操作系统,支主流的国产 CPU 和国产 GPU/NPU,安全性上通过了信息安全可靠测评,能够很好的在国产硬件平台上运行 DeepSeek。

接下来便为大家展示在一台海光 CPU+Nvidia T4 GPU 的服务器上,实现基于 TencentOS Server V3 的 DeepSeek R1 私有化部署,并且针对 AI 场景对操作系统进行性能优化。
本私有化部署方式同样也支持其他架构的 CPU,例如鲲鹏、龙芯、飞腾等 CPU 的服务器平台。
1. DeepSeek-R1 的资源要求
DeepSeek-R1 提供多种不同规模的模型,以满足不同用户的需求。模型规模越大,性能越强,但对硬件的要求也越高。
通常大模型对显存的要求可以参照以下公式:
VRAMreq =P×Bdtype ×Ke ×(1+α)
P:模型原始参数量(单位:B)
BdtypeBdtype:数据类型系数(FP16=2, Int8=1, FP8=0.87)
KeKe:MoE 激活因子(默认 0.35)
αα:缓存余量(建议≥25%)
基于以上公式,结合其他需求,可以给出常用的几个模型版本的资源需求:

2.部署环境说明
本次部署计划部署 DeepSeek-R1-7B,根据资源要求,实验配置的硬件资源为海光 CPU+Nvidia T4 GPU,海光 CPU 分配 8 核资源,配置 32GB 内存,磁盘为 100GB SSD 磁盘,同时配置了一块 Nvidia T4 GPU 卡,显存为 16GB。
操作系统为 TencentOS Server V3,相关信息如下:
cat /etc/system-release
TencentOS Server 3.1 (Final)
uname -r
5.4.119-19.0009.56
TencentOS Server V3 的内核为 5.4 内核,提供例如 io_uring 等高级特性,对大模型应用有更好的支持
GPU 信息如下:
nvidia-smi -L
GPU 0: Tesla T4 (UUID: xxxxxx)
2.1. 使用 Ollama 部署 DeepSeek-R1
2.1.1. Ollama 简介
DeepSeek-R1 的部署最简单的方式是通过 Ollama 来进行,Ollama 是一个开源的本地化大模型部署工具,可以借助 Ollama 简化大型语言模型(LLM)的安装、运行和管理。它支持多种模型架构,并提供与 OpenAI 兼容的 API 接口,适合开发者和企业快速搭建私有化 AI 服务。

2.1.2. 安装 Ollama
直接使用 Ollama 官网提供的快速安装脚本通常会由于网络问题导致安装失败,这里采用手动方式来安装
下载 Ollama 的安装包:
curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o
ollama-linux-amd64.tgz
安装包大小约为 1.7GB,也可以通过其他方式下载,下载后上传到服务器上即可
解压缩安装包
tar xzvf ollama-linux-amd64.tgz -C /usr
创建服务文件/etc/systemd/system/ollama.service,注意,在 Ollama 官网上比较推荐创建一个独立的 ollama 用户来启动和管理 ollama 服务,我们这里直接用 root 启动即可
cat > /etc/systemd/system/ollama.service << EOF
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=root
Group=root
Restart=always
RestartSec=3
Environment="PATH=$PATH"
[Install]
WantedBy=default.target
EOF
加载服务并启动 Ollama
systemctl daemon-reload
systemctl enable ollama
systemctl start ollama
2.1.3. 使用 Ollama 运行 DeepSeek R1 7b
下载 DeepSeek R1 7b
# ollama pull deepseek-r1:7b
查看模型信息
ollama list
NAME ID SIZE MODIFIED
deepseek-r1:7b 0a8c26691023 4.7 GB 27 seconds ago
运行 DeepSeek-R1
ollama run deepseek-r1:7b
>>>你是谁
<think>
</think>
您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。
>>>请告诉我2025年“惊蛰”这个节气是几月几号
<think>
嗯,用户现在问的是关于2025年“惊蛰”这个节气的日期,具体是几月几号。我之前回复说我不知道具体的日期,并建议他们查看日历或使用工具查询。
首先,我需要确认用户的需求是什么。他可能是在计划某个活动,或者对某个节日感兴趣,想知道什么时候庆祝“惊蛰”。这种情况下,提供准确的信息会更有帮助。
接下来,考虑到用户可能不太清楚如何查找这个信息,我可以进一步解释“惊蛰”是什么节气,以及它在中国文化中的意义。这不仅能满足他的直接需求,还能增加他对相关节气的了解。
同时,我也要考虑到用户是否有更深层的需求。比如,他可能希望提前规划一些事情,或者对自然现象感兴趣。因此,在回应时可以稍微展开一下关于“惊蛰”的特点或影响,这样回答会更加全面和有意义。
最后,我需要确保我的回答清晰易懂,并且提供一个可行的解决方案,比如如何查询准确日期的方法,以及推荐使用的时间管理工具或日历应用。
</think>
2.2. 部署 Open-WebUI 增强交互体验
2.2.1. Open WebUI 简介
为了在 Ollama 上增加更加丰富的交互方式,通常需要在 Ollama 前端再增加一个交互层,常用的交互层有 AnythingLLM、Dify、Open-WebUI 等,Open-WebUI 侧重于聊天模式,支持多模型集成,可以提供一个简单、易用的 Web 交互窗口。

2.2.2. 安装 Open WebUI
Open WebUI 能够通过 Docker 进行安装,也可以直接通过 Python 的 pip 进行安装,这里使用 Docker 进行安装
首先在 TencentOS Server 上部署 Docker
yum install docker-ce -y
systemctl enable docker --now
下载 Open WebUI 的 docker image
docker pull ghcr.io/open-webui/open-webui:main
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ghcr.io/open-webui/open-webui main a088eea70396 6 days ago 4.27GB
使用 Docker 命令启动 Open WebUI
注意,这里会遇到后期在界面中无法连接 Ollama 的情况,这是因为在 Docker 容器内部是无法访问 Ollama 的默认监听地址http://127.0.0.1:11434,需要调整 Ollama 配置或者直接让 Open WebUI 使用 host only 网络即可:
docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main
这样启动容器后,Open WebUI 会直接监听 Host 网络的 8080 端口
通过浏览器访问 Open WebUI,http://<IP>:8080
第一次登录需要创建管理员账户

登录后应该已经可以看到我们刚才在 Ollama 中启动的 DeepSeek-R1 7b 模型,如果无法看到,可以在管理员面板中设置
点击右上角设置“管理员面板”

进入后,进入“设置”-”外部链接“标签项,设置 Ollama 的连接方式(可以将 OpenAI 的连接关掉)

然后可以在“模型”中自动发现我们添加在 Ollama 中的模型了
2.2.3. 和 DeepSeek R1 对话并查看系统负载
回到首页,和 DeepSeek R1 对话

在 DeepSeek R1 思考并输出时,查看系统负载以及显卡负载:

可以看到,Ollama 占用了将近 100%的 CPU 资源,ollama_llama_se 采用多线程运行,负载分担在多个 CPU 核上

可以看到,显存的占用大约为 5.3GB,体现了 DeepSeek R1 的显存使用优势,Nvidia T4 GPU 的资源占用大约为 85%
3. TencentOS Server 针对大模型业务的常规优化
3.1. 概述
大模型应用在运行中,会产生较大的 IO 操作以及内存操作,从系统优化角度来说,主要是在这两方面进行优化,本部分仅对常规优化进行了说明,实际的生产场景中,会面临着不同的情况,如果需要进一步优化,通常需要对系统性能进行评估,发现瓶颈后再进行进一步的优化。
3.2. TencentOS Server 性能调优
3.2.1. 禁用透明大页(THP)
现代内核默认启用了 THP 以改善内存管理,但在高并发或大量内存分配的场景下,THP 可能导致延迟波动。对于需要低延迟响应的 AI 模型来说,禁用 THP 可以保持性能稳定。在 AI 场景中开启 THP,通常会遇到以下问题:
l 内存分配延迟不可预测(200μs ~ 15ms 波动)
l 易引发直接内存回收(Direct Reclaim),造成推理停顿
l 大页分裂时的锁争用加剧
可以通过下面命令检测当前是否开启了透明大页以及当前的内存消耗
## 检测是否开启了透明大页,不是 never 则说明开启
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
## 临时关闭透明大页
## 注意:临时关闭仅后续不会申请透明大页内存,如需立即释放已申请的内存,需要内核参数配置关闭透明大页后,重启机器
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
## 检测 AnonHugePages 用量
cat /proc/meminfo | grep 'AnonHugePages'
AnonHugePages: 6658048 kB
在内核启动时就关闭透明大页面
## 编辑 /etc/default/grub ,在内核启动参数 GRUB_CMDLINE_LINUX 里加上 transparent_hugepage=never
vi /etc/default/grub
GRUB_CMDLINE_LINUX="nomodeset crashkernel=auto rd.lvm.lv=vg_os/lv_root rd.lvm.lv=vg_os/lv_swap rhgb quiet transparent_hugepage=never"
## 保存配置并重启机器
grub2-mkconfig -o /boot/grub2/grub.cfg
## 注意,如果是EFI启动,配置目录根据具体系统调整
# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
## 重启服务器
reboot
3.2.2. IO 子系统优化
IO 子系统的优化主要表现在以下 3 部分:
l 提升 NVMe 设备的待处理 IO 请求上限(默认 128→1024)
l 搭配 Deadline 调度器实现公平排队
l 调整磁盘的挂载选项,降低 IO 负载
用以下命令实现以上优化:
#块设备队列深度扩展
echo 1024 > /sys/block/nvme0n1/queue/nr_requests
#调整SSD磁盘的调度算法为Deadline(这里nvme0n1替换为真实的磁盘名称)
echo deadline > /sys/block/nvme0n1/queue/scheduler
#修改/etc/fstab文件,在SSD磁盘的挂载选项中,增加以下挂载选项
noatime,discard,nobarrier
3.2.3. CPU 调度策略
TencentOS Server 默认采用 CFS 调度策略,可以调整调度时间片粒度至 8ms,减少上下文切换次数唤醒粒度设为 12ms,抑制过多任务抢占,这样的调整比较适用于长耗时 CUDA Kernel 执行场景
sysctl -w kernel.sched_min_granularity_ns=8000000
sysctl -w kernel.sched_wakeup_granularity_ns=12000000
3.2.4. 文件句柄限制调整
模型处理大量请求时会频繁读写文件和网络连接,如果系统默认的文件描述符限制过低,可能导致“Too many open files”错误,影响服务的可用性。增加到百万级别能支持更高的并发。
#提升文件句柄限制
echo "* soft nofile 1048576" >> /etc/security/limits.conf
echo "* hard nofile 1048576" >> /etc/security/limits.conf
版权声明: 本文为 InfoQ 作者【OpenCloudOS】的原创文章。
原文链接:【http://xie.infoq.cn/article/e45cdf68d227be3bfe1af803c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论