ollama gpu设置

作者: adm 分类: AI 发布时间: 2025-01-31

默认的ollama调用的各种大模型,如deepseek 70b模型,每个模型实例只绑定一张 GPU,如果是多卡,其它卡会一直闲置,造成一定浪费。
本文档介绍如何通过 systemd 配置文件为 Ollama 服务添加 GPU 和调度相关的环境变量,从而实现多 GPU 的高效利用与负载均衡。
Ollama 默认每个模型实例只绑定一张 GPU,并不具备自动负载均衡的能力。

为实现模型多卡部署与更高的吞吐量,我们可以通过设置环境变量来调整 Ollama 的调度行为。

因此我们需要相应的环境设置,设置也很简单。

修改 systemd 服务配置
1. 配置文件路径

Ollama 的 systemd 服务配置文件路径如下:

/etc/systemd/system/ollama.service

2. 编辑服务文件

sudo vim /etc/systemd/system/ollama.service

默认的整体配置如下:

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin"
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"

[Install]
WantedBy=default.target

按下 i 进入插入模式,找到 [Service] 段,我们需要在[Service]的下面添加几个环境变量设置,如下:

Environment="CUDA_VISIBLE_DEVICES=0,1,2,3"
Environment="OLLAMA_SCHED_SPREAD=1"
Environment="OLLAMA_KEEP_ALIVE=-1"

参数说明:

Environment=“CUDA_VISIBLE_DEVICES=0,1,2,3” 代表让ollama能识别到第几张显卡,因为4张显卡,从0开始编号,所以为0,1,2,3。根据你的显卡数量进行设置。
Environment=“OLLAMA_SCHED_SPREAD=1” 这几张卡均衡使用
Environment=“OLLAMA_KEEP_ALIVE=-1” 模型一直加载, 不自动卸载,这个设置会一直占用显存不释放,相应会快一些。如果不经常使用模型,可以把这个去掉,啥时候通过Open Webui访问,然后啥时候加载模型,第一次加载一般会慢一些。

添加之后的完整配置:

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin"
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
### 添加如下配置,下面三个是新增的
Environment="CUDA_VISIBLE_DEVICES=0,1,2,3"
Environment="OLLAMA_SCHED_SPREAD=1"
Environment="OLLAMA_KEEP_ALIVE=-1"

[Install]
WantedBy=default.target

按下 Esc,然后输入 :wq 保存并退出。

2. 重新加载配置并重启服务

使用如下命令:

sudo systemctl daemon-reload
sudo systemctl restart ollama

注意:若出现 Failed 信息,仅为非关键错误,通常不影响实际运行。
sudo systemctl daemon-reload命令解释:

重新加载 systemd 管理器的配置文件。当你修改了服务的配置文件(比如 /etc/systemd/system/ollama.service)后,systemd 并不会自动发现这些改动,你需要显式告诉它:“配置文件变了,请重新读取”。

sudo systemctl restart ollama命令解释:

停止再重新启动 ollama 服务,使其立即应用你新修改的配置。

3. 验证配置是否成功

查看服务状态:

systemctl status ollama

检查环境变量是否注入成功:

sudo systemctl show ollama | grep Environment

你应当看到如下输出:

Environment=CUDA_VISIBLE_DEVICES=0,1,2,3
Environment=OLLAMA_SCHED_SPREAD=1
Environment=OLLAMA_KEEP_ALIVE=-1

参数说明

参数	含义
CUDA_VISIBLE_DEVICES=0,1,2,3	指定可用的 GPU 编号(0 到 3),表示总共使用 4 张显卡
OLLAMA_SCHED_SPREAD=1	启用多 GPU 均衡调度,让模型推理在多卡之间分摊负载
OLLAMA_KEEP_ALIVE=-1	模型常驻内存,保持加载状态,防止自动卸载,提高响应速度

显存监控

watch -n 0.5 nvidia-smi --query-gpu=utilization.gpu,memory.used --format=csv

正常情况:双卡显存占用应均衡。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!