我这台机器是双路 A100 80GB,系统是 Ubuntu 20.04,目标是跑 Ollama 部署本地大模型服务,并且要同时把两张卡都吃满。刚开始我以为装个 Ollama 然后启动就完事了,结果从系统安装到驱动配置,再到最后双实例并行,整整折腾了两天。中间踩的坑不少,但最终跑通了,双卡吞吐从单实例卡在 30 tokens/s 一路拉到接近翻倍。这篇文章就是把整个部署过程、翻车现场以及最终稳定的双实例方案完整记录下来。
无论你是刚接触 Ollama 的运维小白,还是想在一台多卡 GPU 服务器上做大模型推理服务的开发者,这篇内容都会给你一个可以直接照做的参考路径。
1. 方案选型与整体设计思路
1.1 为什么用 Ollama 做本地推理
Ollama 是目前跑本地大模型最省事的工具之一,尤其是对于开发测试环境,它能帮你省掉大量手工配置 Python 虚拟环境、Torch、Transformers、CUDA 绑定的时间。它把模型下载、服务暴露、API 调用全部统一了,一条命令就能跑起一个兼容 OpenAI 格式的服务,直接 curl 就能调。
在实际生产环境里,托管多卡推理也有其他方案,比如 vLLM、Triton、Text Generation Inference,这些框架在批量推理和高并发场景下确实更强。但如果目标是快速验证、内部工具、小规模服务,Ollama 的易用性就秒杀前面那些重型框架了。而且 Ollama 底层也是用 llama.cpp,对显存复用、KV Cache 管理都做得不错,双卡场景下完全够用。
1.2 为什么不用单实例多卡,反而用双实例
如果你手里只有一张卡,那没得选,单实例。但当你面对两张 A100 时,最常见的选择有两个:
第一种,单实例多卡,通过 Ollama 的 OLLAMA_GPU_LAYERS 或 CUDA_VISIBLE_DEVICES 把所有 GPU 给一个任务用。这种方式适合超大模型,比如单张卡显存放不下,必须把层分散到多张卡上。
第二种,双实例单卡,也就是启动两个 Ollama 进程,每个进程只绑定一张 GPU。这种方式特别适合并发请求很多的场景。因为 Ollama 本身对并发请求的管理是单实例内排队执行,如果所有请求都打进同一个实例,就算你有两张卡,第一个进程在处理请求时,第二张卡也就是空闲状态,白白浪费。
双实例方案的优势在于:
- 显存隔离。每个 Ollama 进程管理自己的显存池,互不干扰。
- 并发隔离。两个实例同时处理不同的请求,互不阻塞。
- 更容易监控。你可以精确知道每张卡的利用率和吞吐。
- 无需改动 Ollama 源码,只要环境变量区分 GPU 就行。
我最终选择双实例,还有一个原因是 Ollama 在单实例下即使设置了 CUDA_VISIBLE_DEVICES=0,1,它对多卡并行的调度也不是线性的,尤其在处理多个短请求时,GPU 1 经常处于闲置状态,显存占用也不平均。与其去猜这些行为,不如直接切成两个独立服务,控制逻辑完全透明。
1.3 整体架构预览
我最终实现的架构是这样的:
text复制客户端请求
|
v
Nginx (localhost:8080, 负载均衡)
|
+----> Ollama 实例 A (localhost:11434, CUDA_VISIBLE_DEVICES=0)
|
+----> Ollama 实例 B (localhost:11435, CUDA_VISIBLE_DEVICES=1)
两个 Ollama 实例分别监听不同端口,各自绑定一张 A100。Nginx 在 8080 端口做轮询转发,对外统一成一个服务入口。这样上层应用无感知,同时两张卡的吞吐都吃满。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备:Ubuntu 20 + A100 的坑
2.1 系统安装与软件源配置
我们这台机器是裸金属服务器,安装系统时直接选了 Ubuntu 20.04.6 LTS,没有用桌面版,纯 Server 版效率更高。如果你是虚拟机或者云主机,也是一样的操作,只要能拿到 root 权限就行。
系统装完第一件事,就是更换国内软件源。默认源在国外,下载速度非常折磨。Ubuntu 20.04 的源配置在 /etc/apt/sources.list,我直接换成清华源,备份原文件后写入以下内容:
bash复制cp /etc/apt/sources.list /etc/apt/sources.list.bak
cat > /etc/apt/sources.list << EOF
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
EOF
apt update
apt upgrade -y
这一步很基础,但很关键。如果源没有换好,后续安装驱动、依赖都会卡在下载阶段。
2.2 NVIDIA 驱动与 CUDA 部署
A100 这种 Ampere 架构的卡,对驱动版本有要求,太老的驱动根本不识别。Ubuntu 20.04 自带的 nouveau 开源驱动和 A100 的兼容性不是特别好,最好直接装 NVIDIA 官方闭源驱动。
我使用的是 525 系列的驱动,因为该版本对 CUDA 12 支持良好,Ollama 运行时也可以正常调用。你可以通过 APT 安装:
bash复制apt install -y nvidia-driver-525
装完驱动后,重启机器,然后执行 nvidia-smi,如果能看到两张 A100
