Docker部署Ollama并实现ROCm加速

在AI本地化部署场景中,Ollama凭借轻量化、易用性强的特点,成为快速运行大模型(含嵌入模型)的首选工具;而Docker则能解决环境依赖混乱、版本冲突等问题,实现Ollama的快速部署与隔离运行。本文针对AMD Ryzen平台(以零刻SER9系列小主机为例),详细讲解如何通过Docker部署Ollama,结合ROCm实现核显加速,并以bge-m3嵌入模型为示例,完成从环境准备到实际运行的全流程操作,同时澄清NPU加速的现状与替代方案。

一、前置说明与环境前提

1.1 适用场景与硬件要求

本文适用于搭载AMD Ryzen处理器(带核显)的设备,重点适配零刻SER9 Pro/SER9 MAX、铭凡AI X1等小主机,核心要求:

  • CPU:AMD Ryzen 7/AI9系列(支持ROCm),如零刻SER9 Pro的AI9 HX370、R7 H255

  • 核显:Radeon 780M/890M(零刻SER9系列标配,支持ROCm加速)

  • 系统:Ubuntu 22.04/24.04(ROCm对Ubuntu兼容性最佳,不推荐CentOS等系统)

  • 权限:管理员权限(sudo),用于安装驱动与配置环境

1.2 核心说明(关键避坑)

  • Ollama当前不直接支持AMD Ryzen AI NPU(XDNA),仅支持ROCm核显加速(本文重点);

  • bge-m3作为嵌入模型,在Ollama中默认基于llama.cpp运行,可通过ROCm核显提升推理速度;

  • Docker部署的核心是“设备直通+权限匹配+ROCm环境映射”,缺一不可。

二、宿主机环境准备(ROCm驱动安装)

Ollama的ROCm加速依赖宿主机的ROCm驱动,需先完成宿主机驱动配置,否则容器内无法识别核显。

2.1 BIOS配置(必做)

进入设备BIOS(开机按Del/F2),完成两项关键配置:

  1. Advanced → OEM → Ryzen AI → Enabled(虽不用于Ollama,但不开启可能影响核显识别);

  2. 关闭Secure Boot(否则ROCm驱动无法正常加载,导致核显无法识别)。

配置完成后保存重启,进入Ubuntu系统。

2.2 ROCm驱动安装(Ubuntu)

执行以下命令,一步安装ROCm依赖与驱动(适配ROCm 6.4版本,兼容零刻SER9核显):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 安装基础依赖(内核 headers 与编译工具)
sudo apt update
sudo apt install -y linux-headers-$(uname -r) build-essential

# 2. 添加ROCm官方源
echo "deb [arch=amd64] https://repo.radeon.com/rocm/apt/6.4 focal main" | sudo tee /etc/apt/sources.list.d/rocm.list
sudo apt-key adv --fetch-keys https://repo.radeon.com/rocm/rocm.gpg.key

# 3. 安装ROCm核心组件
sudo apt update
sudo apt install -y rocm-libs rocm-dev rocm-utils

# 4. 配置权限(免root访问核显)
sudo usermod -aG render,video $USER
newgrp render
newgrp video

2.3 验证ROCm是否生效

执行以下命令,确认核显被ROCm识别(零刻SER9核显架构为gfx1151):

1
2
3
4
5
6
7
# 查看核显架构
rocminfo | grep gfx
# 正常输出:gfx1151(匹配零刻SER9核显)

# 查看ROCm状态
rocm-smi
# 正常输出:显示card0(核显)信息,无报错、无“no GPU detected”

若未识别到核显,需重新检查BIOS配置与驱动安装步骤,确认Secure Boot已关闭。

三、Docker部署Ollama(ROCm加速版)

采用Ollama官方ROCm镜像,无需手动构建,通过容器启动命令即可完成部署,重点配置设备直通与环境变量。

3.1 拉取Ollama ROCm镜像

推荐使用固定版本(避免最新版出现兼容性问题),执行命令:

1
2
3
4
5
# 拉取固定版本(0.16.0,经测试适配零刻SER9)
docker pull ollama/ollama:0.16.0-rocm

# 可选:拉取最新版ROCm镜像
# docker pull ollama/ollama:rocm

3.2 启动Ollama容器(核心命令)

先获取宿主机render、video组的GID(确保容器权限与宿主机一致,避免核显访问失败),再启动容器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 获取宿主机render、video组GID
RENDER_GID=$(getent group render | cut -d: -f3)
VIDEO_GID=$(getent group video | cut -d: -f3)

# 2. 启动容器(持久化数据+ROCm加速+端口映射)
docker run -d \
--name ollama-rocm \
--restart unless-stopped \
--device /dev/kfd \ # ROCm核心设备
--device /dev/dri \ # 核显设备
--group-add $VIDEO_GID \ # 匹配video组权限
--group-add $RENDER_GID \ # 匹配render组权限
-v ollama-rocm:/root/.ollama \ # 持久化Ollama数据(模型、配置)
-p 11434:11434 \ # 映射端口,供外部访问
-e OLLAMA_HOST=0.0.0.0 \ # 允许外部访问容器内Ollama
-e HSA_OVERRIDE_GFX_VERSION=11.5.1 \ # 强制识别gfx1151核显(零刻SER9必加)
-e OLLAMA_KEEP_ALIVE=-1 \ # 保持模型常驻内存,提升推理速度
ollama/ollama:0.16.0-rocm

3.3 关键参数说明(避坑重点)

  • --device /dev/kfd、--device /dev/dri:必须添加,将宿主机核显设备直通到容器,是ROCm加速的核心;

  • HSA_OVERRIDE_GFX_VERSION=11.5.1:零刻SER9核显为gfx1151,官方镜像默认不识别,需强制指定架构;

  • -v ollama-rocm:/root/.ollama:持久化模型数据,避免容器删除后重新下载模型;

  • --group-add:权限匹配,否则容器内会因权限不足,无法访问核显设备。

3.4 Docker Compose一键部署(推荐)

若需频繁启停或批量部署,可创建docker-compose.yml文件,实现一键启停:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: "3.8"
services:
ollama:
image: ollama/ollama:0.16.0-rocm
container_name: ollama-rocm
restart: unless-stopped
devices:
- /dev/kfd
- /dev/dri
group_add:
- ${VIDEO_GID}
- ${RENDER_GID}
volumes:
- ollama-rocm:/root/.ollama
ports:
- "11434:11434"
environment:
OLLAMA_HOST: 0.0.0.0
HSA_OVERRIDE_GFX_VERSION: 11.5.1
OLLAMA_KEEP_ALIVE: -1
volumes:
ollama-rocm:

启动命令:

1
2
3
4
5
6
7
8
9
# 导出宿主机GID(仅首次执行)
export RENDER_GID=$(getent group render | cut -d: -f3)
export VIDEO_GID=$(getent group video | cut -d: -f3)

# 启动容器
docker-compose up -d

# 停止容器(可选)
# docker-compose down

四、Ollama运行bge-m3(ROCm核显加速测试)

bge-m3是字节跳动推出的高性能嵌入模型,适用于语义检索、向量生成等场景,下面以该模型为例,测试Ollama+ROCm的加速效果。

4.1 拉取bge-m3模型

进入Ollama容器,拉取bge-m3模型(模型体积约2.2GB,无需额外配置):

1
2
3
4
5
6
7
8
9
# 进入容器
docker exec -it ollama-rocm bash

# 拉取bge-m3模型
ollama pull bge-m3

# 验证模型是否拉取成功
ollama list
# 正常输出:bge-m3:latest (模型名称+版本)

4.2 测试bge-m3推理(ROCm加速)

有两种测试方式,分别适用于交互式测试和接口调用,均能实现ROCm核显加速。

方式1:交互式运行(容器内)

1
2
3
4
5
# 启动bge-m3交互式会话
ollama run bge-m3 "Docker部署Ollama实现ROCm加速"

# 输出结果:
# 模型会生成该文本的向量嵌入(默认1024维),同时日志会显示ROCm加速信息

方式2:API接口调用(外部访问)

通过HTTP接口调用bge-m3,适用于集成到应用程序中,命令如下:

1
2
3
4
curl http://localhost:11434/api/embeddings -d '{
"model": "bge-m3",
"prompt": "Docker部署Ollama并实现ROCm加速(以bge-m3为例)"
}'

正常输出:返回1024维向量嵌入结果,说明模型运行正常,ROCm加速生效。

4.3 加速效果验证与对比

以零刻SER9 Pro(AI9 HX370,Radeon 890M核显)为例,对比CPU与ROCm核显的推理速度(单句512token):

运行方式 推理速度 核心优势
CPU(无加速) 200-300ms/句 无需驱动,兼容性强
ROCm核显(加速) 80-120ms/句 速度提升2-3倍,资源占用低

验证ROCm加速是否生效的关键:进入容器后执行ollama info,输出中包含“AMD GPU: gfx1151”,说明核显已被Ollama识别并用于加速。

五、常见问题排查(避坑指南)

5.1 容器内无法识别核显(ollama info无GPU)

  • 检查宿主机rocminfo是否识别核显,若未识别,重新安装ROCm驱动;

  • 确认容器启动命令中添加了\-\-device /dev/kfd \-\-device /dev/dri,且环境变量HSA\_OVERRIDE\_GFX\_VERSION=11\.5\.1正确;

  • 重新启动容器,确保权限参数\-\-group\-add正确加载。

5.2 权限不足:failed to open /dev/dri/card0

原因:容器内用户未加入render、video组,解决方案:

1
2
3
4
5
6
7
8
# 重新获取GID并重启容器
RENDER_GID=$(getent group render | cut -d: -f3)
VIDEO_GID=$(getent group video | cut -d: -f3)

docker stop ollama-rocm
docker rm ollama-rocm

# 重新执行启动命令(确保--group-add参数正确)

5.3 bge-m3仍走CPU,未触发ROCm加速

Ollama的bge-m3基于llama.cpp运行,当前llama.cpp仅支持ROCm核显加速,不支持Ryzen AI NPU;若未触发加速,需检查:

  • Ollama镜像是否为ROCm版本(非CPU版本);

  • 宿主机ROCm驱动是否正常,容器是否正确映射核显设备;

  • 模型是否拉取完整,可通过ollama pull bge\-m3 \-\-force重新拉取。

5.4 容器启动失败:address already in use

原因:11434端口被占用(可能是本地已运行Ollama),解决方案:

1
2
3
4
5
6
7
# 查看占用11434端口的进程
sudo lsof -i:11434

# 终止进程(替换PID为实际进程ID)
sudo kill -9 PID

# 重新启动容器

六、总结与扩展

6.1 核心总结

本文实现了“Docker+Ollama+ROCm”的完整部署,以bge-m3为例完成了加速测试,核心要点:

  1. 宿主机ROCm驱动是加速的基础,必须完成BIOS配置与驱动安装;

  2. Docker部署的关键是“核显设备直通+权限匹配+架构指定”,避免权限与识别问题;

  3. bge-m3在Ollama中可通过ROCm核显实现2-3倍加速,满足本地化嵌入模型的性能需求;

  4. 当前Ollama不支持AMD Ryzen AI NPU,需等待llama.cpp集成XDNA后端后实现更高效的NPU加速。

6.2 扩展建议

  • 模型优化:可通过ollama run bge\-m3 \-\-quantize q4\_0量化模型,进一步提升推理速度、降低内存占用;

  • 多模型部署:除bge-m3外,可通过Ollama拉取llama3、mistral等模型,均支持ROCm加速;

  • 远程访问:若需外部设备访问Ollama,需开放宿主机11434端口,确保容器环境变量OLLAMA\_HOST=0\.0\.0\.0

  • 版本更新:定期更新Ollama ROCm镜像与ROCm驱动,提升兼容性与性能。

通过本文的部署流程,可快速在AMD Ryzen小主机(如零刻SER9系列)上实现Ollama的容器化部署与ROCm加速,兼顾环境隔离与性能提升,适用于AI本地化部署、开发测试等场景。

(注:文档部分内容可能由 AI 生成)