Ollama私有云GPU服务器搭建的完整路径就是 6 步:装 NVIDIA Container Toolkit、用 docker run 跑通 GPU 直通、写 Compose 固化配置、挂持久化卷保存权重、按卡做隔离、开 OpenAI 兼容接口——全程不需要分布式集群。2026 年 8 月的私有化部署实践已经把这条路径规范成了标准动作,单机单卡或多卡都能覆盖。
Ollama私有云GPU服务器搭建前先确认三件事:驱动、卡数、模型规模
先花两分钟确认三件事:
- nvidia-smi 是否正常:能列出显卡、驱动和显存。
- 有几张卡:
nvidia-smi -L看卡 ID,决定count: all还是device_ids。 - 最大模型规模:7B 还是 70B 量化版,决定显存需求和 Compose 写法。
第一步:装 NVIDIA Container Toolkit
容器要使用 GPU,必须有 NVIDIA Container Toolkit 做桥接。只装驱动没装 toolkit,或装完没重启 Docker,docker run --gpus all 会报:
could not select device driver "" with capabilities: [[gpu]]排查顺序:确认 toolkit 已安装(dpkg -l | grep nvidia-container-toolkit),重启 Docker(sudo systemctl restart docker),验证(docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi)。
第二步:用 docker run 起最小可用服务
先跑一次性命令验证 GPU 直通:
docker run -d --gpus all -v ollama:/root/.ollama -p 11434:11434 ollama/ollama--gpus all:让容器访问所有 GPU。-v ollama:/root/.ollama:持久化模型权重。-p 11434:11434:暴露默认端口。
进容器执行 nvidia-smi 确认能列出显卡,再拉模型。
第三步:写 Docker Compose 固化配置
services:
ollama:
image: ollama/ollama
container_name: ollama
volumes:
- ollama:/root/.ollama
ports:
- "11434:11434"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
restart: unless-stopped
volumes:
ollama:deploy.resources.reservations.devices:声明 GPU 资源预留。count: all:暴露所有 GPU。restart: unless-stopped:崩溃后自动拉起。
要指定某张卡,用 device_ids: ["0", "1"],但容器内编号从 0 重新映射。
第四步:挂持久化卷保存模型权重
Ollama 模型默认存放在容器内的 /root/.ollama。不挂卷,容器重建后权重丢失。
| 方案 | 写法 | 优点 | 缺点 |
|---|---|---|---|
| 命名卷 | -v ollama:/root/.ollama | Docker 管理,迁移方便 | 备份需额外处理 |
| 宿主目录绑定 | -v /data/ollama:/root/.ollama | 直接可见文件 | 权限需手动设置 |
首次部署可先按量租用实例跑通再决定长期保留。
第五步:多卡隔离——用 NVIDIA_VISIBLE_DEVICES 分卡
多卡机器两种场景:
- 场景 A:跑两个服务实例,各占一张卡。
- 场景 B:保留部分卡给其他任务。
| 方式 | 作用层级 | 示例 | 适合场景 |
|---|---|---|---|
| 环境变量 | 容器运行时 | -e NVIDIA_VISIBLE_DEVICES=1 | 快速临时指定 |
| Compose device_ids | 编排声明 | device_ids: ["1"] | 长期配置 |
容器内卡号从 0 重新映射,脚本别写错。
第六步:开放 OpenAI 兼容接口并保护访问
Ollama 原生提供 OpenAI 兼容接口。容器部署时由 -p 端口映射决定可达性,用 curl http://服务器IP:11434/v1/models 实测。但默认不带鉴权,三种安全暴露方式:
- 反向代理加鉴权:Nginx 或 Caddy 做 TLS 和 API-KEY。
- 安全组白名单:只放行特定 IP。
- 内网或隧道:VPN 或内网穿透。
显存调度:多模型常驻时怎么分配
多模型常驻时显存被权重、KV Cache 和并发增量占用,分账算法可参考GPU显存怎么选。同时加载多个模型显存不够,多数是空闲驻留时间太长。
以下为按量化精度换算的估算区间,实际随上下文长度与并发浮动:
| 显存档位 | 可常驻组合示例 |
|---|---|
| 48GB | 2-3 个 7B/14B 量化,或 1 个 32B 量化 |
| 80GB | 1 个 70B 量化独占,或 4-5 个 7B |
显存不足时用 OLLAMA_KEEP_ALIVE=0 让模型用完立即释放。
卡型对照:7B/14B/32B/70B 量化版显存台阶
根据 2026 年 8 月云算力数据,L40S 为 48GB、时租约 $1.50/GPU-小时;A100 80GB 时租约 $1.77/GPU-小时。显存估算(按量化精度换算,实际浮动):
| 模型规模 | 量化精度 | 显存估算 |
|---|---|---|
| 7B | Q4_K_M | 约 4-6 GB |
| 14B | Q4_K_M | 约 8-12 GB |
| 32B | Q4_K_M | 约 18-24 GB |
| 70B | Q4_K_M | 约 35-45 GB |
Batch ≥ 8 的 FP8 下 L40S 成本更优;超长上下文和低 Batch 时 A100 延迟更低。建议先在支持按量、多型号 GPU 与预制模板的平台(如 NexGPU)上跑通,再定长期规格。参考 L40S 租用 与 Qwen部署要多少显存。
搭建检查清单与常见踩坑
- [ ] NVIDIA Container Toolkit 已安装,Docker 已重启
- [ ]
docker run --gpus all后容器内nvidia-smi可见卡 - [ ] 权重卷已挂载(
/root/.ollama持久化) - [ ] 卡级隔离已配置
- [ ] 对外端口已加鉴权
| 问题 | 一句话处置 |
|---|---|
could not select device driver 报错 | 重装 toolkit 或重启 docker |
| 静默跑 CPU | 拉模型时观察宿主机显存 |
| 重启后重新拉模型 | 检查卷是否挂载到 /root/.ollama |
| 多容器抢同一张卡 OOM | 用环境变量或 device_ids 隔离,参考 GPU Out of Memory显存溢出解决方法 |
常见问题
ollama容器怎么指定用哪一张显卡?
用环境变量 NVIDIA_VISIBLE_DEVICES,如 -e NVIDIA_VISIBLE_DEVICES=1,或在 Compose 写 device_ids: ["1"]。容器内编号从 0 开始。
docker run ollama报could not select device driver nvidia怎么办?
检查 toolkit 是否安装,重启 Docker;还报错就执行 nvidia-smi 确认驱动。
ollama模型文件在容器里存哪个目录?
默认在 /root/.ollama,用 -v ollama:/root/.ollama 或绑定宿主目录持久化。
ollama同时加载多个模型显存不够怎么办?
设 OLLAMA_KEEP_ALIVE=0 释放显存,或换更小量化、减少并发。
ollama跑70b量化模型需要多大显存?
估算约 35-45 GB(Q4_K_M),实际随上下文和并发浮动。建议先按量租用 48GB 或 80GB 实测。
先用 NexGPU 按量实例跑通六步,量出真实显存占用,再定长期规格。
NexGPU-算力租赁,GPU服务器,GPU云算力,AI服务器租用-新闻博客
评论(0)