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),完成两项关键配置:
Advanced → OEM → Ryzen AI → Enabled(虽不用于Ollama,但不开启可能影响核显识别);
关闭Secure Boot(否则ROCm驱动无法正常加载,导致核显无法识别)。
配置完成后保存重启,进入Ubuntu系统。
2.2 ROCm驱动安装(Ubuntu)
执行以下命令,一步安装ROCm依赖与驱动(适配ROCm 6.4版本,兼容零刻SER9核显):
1 | # 1. 安装基础依赖(内核 headers 与编译工具) |
2.3 验证ROCm是否生效
执行以下命令,确认核显被ROCm识别(零刻SER9核显架构为gfx1151):
1 | # 查看核显架构 |
若未识别到核显,需重新检查BIOS配置与驱动安装步骤,确认Secure Boot已关闭。
三、Docker部署Ollama(ROCm加速版)
采用Ollama官方ROCm镜像,无需手动构建,通过容器启动命令即可完成部署,重点配置设备直通与环境变量。
3.1 拉取Ollama ROCm镜像
推荐使用固定版本(避免最新版出现兼容性问题),执行命令:
1 | # 拉取固定版本(0.16.0,经测试适配零刻SER9) |
3.2 启动Ollama容器(核心命令)
先获取宿主机render、video组的GID(确保容器权限与宿主机一致,避免核显访问失败),再启动容器:
1 | # 1. 获取宿主机render、video组GID |
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 | version: "3.8" |
启动命令:
1 | # 导出宿主机GID(仅首次执行) |
四、Ollama运行bge-m3(ROCm核显加速测试)
bge-m3是字节跳动推出的高性能嵌入模型,适用于语义检索、向量生成等场景,下面以该模型为例,测试Ollama+ROCm的加速效果。
4.1 拉取bge-m3模型
进入Ollama容器,拉取bge-m3模型(模型体积约2.2GB,无需额外配置):
1 | # 进入容器 |
4.2 测试bge-m3推理(ROCm加速)
有两种测试方式,分别适用于交互式测试和接口调用,均能实现ROCm核显加速。
方式1:交互式运行(容器内)
1 | # 启动bge-m3交互式会话 |
方式2:API接口调用(外部访问)
通过HTTP接口调用bge-m3,适用于集成到应用程序中,命令如下:
1 | curl http://localhost:11434/api/embeddings -d '{ |
正常输出:返回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 | # 重新获取GID并重启容器 |
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 | # 查看占用11434端口的进程 |
六、总结与扩展
6.1 核心总结
本文实现了“Docker+Ollama+ROCm”的完整部署,以bge-m3为例完成了加速测试,核心要点:
宿主机ROCm驱动是加速的基础,必须完成BIOS配置与驱动安装;
Docker部署的关键是“核显设备直通+权限匹配+架构指定”,避免权限与识别问题;
bge-m3在Ollama中可通过ROCm核显实现2-3倍加速,满足本地化嵌入模型的性能需求;
当前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 生成)