在Ubuntu 22.04上榨干GPU性能:Ollama与Open WebUI的深度调优实战
最近在本地部署大语言模型的朋友越来越多了,但很多人装完就发现,怎么跑起来这么慢?显存动不动就爆了?模型加载要等半天?如果你也遇到了这些问题,那今天这篇实战指南就是为你准备的。我们不只讲怎么把Ollama和Open WebUI跑起来,更要深入探讨如何让它们在你的Ubuntu 22.04服务器上发挥出GPU的全部潜力。无论你是个人开发者想搭建一个高效的本地AI工作台,还是团队需要部署一个稳定的模型推理服务,接下来的内容都会让你少走很多弯路。
1. 环境准备:不只是安装,而是优化配置
很多人一上来就直接装Docker、装驱动,但忽略了系统层面的基础优化。这些优化虽然看起来不起眼,却能显著影响后续GPU资源的利用效率。
1.1 系统层面的性能调优
Ubuntu 22.04默认的配置是为通用场景设计的,我们需要针对AI推理负载做一些调整。首先检查一下系统的交换空间(Swap),这对于处理大模型时的内存管理至关重要。
# 查看当前交换空间配置
sudo swapon --show
free -h
如果交换空间不足或者没有启用,可以考虑创建一个专用的交换文件。我一般推荐设置为物理内存的1.5到2倍,特别是当你的GPU显存较大时。
# 创建16GB的交换文件
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
提示:交换空间虽然能防止内存不足导致的崩溃,但频繁使用会显著降低性能。理想情况下,我们应该通过合理的模型选择和参数配置来避免频繁的交换。
接下来调整系统的文件描述符限制和进程限制,这对于处理大量并发请求很重要:
# 编辑系统限制配置文件
sudo nano /etc/security/limits.conf
# 在文件末尾添加
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
重启后生效,这些调整能让Docker容器更好地利用系统资源。
1.2 Docker的深度配置优化
安装Docker大家都会,但如何配置才能最大化性能?这里有几个关键点:
首先是存储驱动器的选择。Ubuntu 22.04默认使用overlay2,这通常是最佳选择,但我们需要确认它是否正确配置:
# 检查当前存储驱动
docker info | grep "Storage Driver"
# 查看Docker根目录
docker info | grep "Docker Root Dir"
确保你的Docker根目录位于SSD或者高速存储设备上,如果是HDD,性能会大打折扣。
国内镜像源的配置很重要,但不仅仅是添加几个地址那么简单。我测试过多个镜像源的速度,发现不同地区、不同运营商的访问速度差异很大。建议先测试一下:
# 测试各个镜像源的下载速度(需要先安装speedtest-cli)
curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python3 -
根据测试结果选择最快的镜像源。我的/etc/docker/daemon.json配置是这样的:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
注意我添加了日志配置,防止Docker日志无限增长占用磁盘空间。
Docker守护进程的资源限制也需要调整。编辑/etc/docker/daemon.json后,重启Docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
# 验证配置生效
sudo systemctl status docker
2. GPU驱动与容器工具链的精准部署
显卡驱动的安装看似简单,实则暗藏玄机。不同的安装方式、不同的版本,对后续的容器GPU支持影响很大。
2.1 NVIDIA驱动的选择与安装
Ubuntu 22.04提供了多种安装NVIDIA驱动的方式,我强烈推荐使用官方的nvidia-driver包,而不是PPA或者.run文件:
# 首先识别你的显卡型号
lspci | grep -i nvidia
# 查看推荐的驱动版本
ubuntu-drivers devices
# 安装推荐版本(通常是最稳定的)
sudo apt install nvidia-driver-535
# 或者安装最新版本
sudo apt install nvidia-driver-545
安装完成后,重启系统并验证:
# 验证驱动安装
nvidia-smi
# 应该看到类似这样的输出
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.29.06 Driver Version: 545.29.06 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 4090 Off | 00000000:01:00.0 Off | Off |
| 0% 38C P8 20W / 450W | 0MiB / 24564MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
注意:如果你看到CUDA版本显示为"N/A",说明驱动安装有问题。这时候需要完全卸载重装,我建议使用
sudo apt purge nvidia*清理后再重新安装。
2.2 NVIDIA Container Toolkit的配置细节
这是让Docker容器使用GPU的关键组件。安装过程虽然简单,但配置上有很多可以优化的地方:
# 添加NVIDIA容器工具包仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L 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/$distribution/libnvidia-container.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
安装完成后,配置Docker使用NVIDIA运行时:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
现在测试一下GPU在容器中是否可用:
# 运行一个测试容器
docker run --rm --runtime=nvidia --gpus all nvidia/cuda:12.2.2-base-ubuntu22.04 nvidia-smi
如果能看到和宿主机一样的GPU信息,说明配置成功。
这里有个重要的性能优化点:默认情况下,NVIDIA容器运行时会将所有GPU暴露给容器。如果你有多个GPU,或者想限制容器使用的GPU资源,可以这样配置:
# 只使用第一个GPU
docker run --gpus '"device=0


617

被折叠的 条评论
为什么被折叠?



