Ollama使用AMD GPU运行大模型
安装ROCm(可选)
备注
之前尝试在 AMD FirePro S7150 x2运算卡 尝试部署AMD ROCm软件堆栈来支持运行不同的LLM ,但是因为硬件支持兼容性原因失败。后来我又购买了较新的 AMD Radeon Instinct MI50 完成 ROCm 快速起步 ,理论上支持使用 Ollama
。
我最初尝试部署在 在bhyve中实现AMD GPU passthrough 实现,但很不幸 admgpu 驱动没有能够正确初始化,失败了
现在我重新在物理主机 Ubuntu Linux 上直接安装ROCm(成功: ROCm 快速起步 )
警告
最新版本的Ollama捆绑了 ROCm ,所以实际上不需要本段安装步骤: /usr/lib/ollama/rocm
有独立的内置ROCm库用于驱动 AMD GPU
我理解物理主机实际上只需要安装 amdgpu driver
也就是 amdgpu-dkms
就可以了,Ollama通过自带的ROCm能够驱动底层的 amdgpu driver
工作。也就是说,Ollama既可以运行在安装了 amdgpu-dkms
物理主机,也可以运行在 amdgpu-dkms
物理主机上的容器中。
总之,物理主机系统范围不需要安装 ROCm ,只需要安装 amdgpu-dkms
(AMD GPU驱动)就可以运行Ollama(自带ROCm)
安装 ROCm 和 AMDGPU驱动( ROCm 快速起步 )
cd /tmp/
wget https://repo.radeon.com/amdgpu-install/6.4.3/ubuntu/noble/amdgpu-install_6.4.60403-1_all.deb
sudo apt install ./amdgpu-install_6.4.60403-1_all.deb
sudo apt update
sudo apt install python3-setuptools python3-wheel
sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
sudo apt install rocm
wget https://repo.radeon.com/amdgpu-install/6.4.3/ubuntu/noble/amdgpu-install_6.4.60403-1_all.deb
sudo apt install ./amdgpu-install_6.4.60403-1_all.deb
sudo apt update
sudo apt install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)"
sudo apt install amdgpu-dkms
安装Ollama
AMD GPU 部署 Ollama
除了需要安装 ollama-linux-amd64.tgz
包以外(也就是 NVIDIA GPU 是内置支持),还需要附加安装 ollama-linux-amd64-rocm.tgz
首先和 ollama简介 一样下载
ollama-linux-amd64.tgz
安装ollama
执行程序:
curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz
sudo tar -C /usr -xzf ollama-linux-amd64.tgz
比 Ollama使用NVIDIA GPU运行大模型 多一个步骤,需要附加安装
ollama-linux-amd64-rocm.tgz
:
ollama-linux-amd64-rocm
curl -L https://ollama.com/download/ollama-linux-amd64-rocm.tgz -o ollama-linux-amd64-rocm.tgz
sudo tar -C /usr -xzf ollama-linux-amd64-rocm.tgz
检查就可以看到实际上安装目录就是 /usr/lib/ollama/rocm
,检查就可以看到 /usr/lib/ollama
目录下也包含了 cuda_v11
和 cuda_v12
以及一些cpu相关的运行动态库文件,为了节约根目录空间,可以移动到大容量磁盘中:
/usr/lib/ollama
移动到大容量硬盘内sudo mv /usr/lib/ollama /huggingface.co/ollama/lib
sudo ln -s /huggingface.co/ollama/lib /usr/lib/ollama
配置
和 Ollama使用NVIDIA GPU运行大模型 配置类似,但又有所不同。按照官方文档,Ollama通过AMD ROCm 库来使用AMD GPU,并不是直接支持所有AMD GPU。需要传递一个 LLVM target,而这个LLVM target是一个需要将GPU和 LLVM target 对应起来的参数。
HSA_OVERRIDE_GFX_VERSION
AMD FirePro S7150 x2运算卡 实践笔记
警告
AMD FirePro S7150 x2运算卡 太古老了, ROCm 不支持这款GPU,导致无法用于Ollama,实践失败。
启动一次 ollama
然后查看日志:
Feb 20 21:31:52 debian12 systemd[1]: Started ollama.service - Ollama Service.
Feb 20 21:31:52 debian12 ollama[3125]: 2025/02/20 21:31:52 routes.go:1186: INFO server config env="map[CUDA_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION: HTTPS_PROXY: HTTP_PROXY: NO_PROXY: OLLAMA_DEBUG>
Feb 20 21:31:52 debian12 ollama[3125]: time=2025-02-20T21:31:52.867+08:00 level=INFO source=images.go:432 msg="total blobs: 5"
Feb 20 21:31:52 debian12 ollama[3125]: time=2025-02-20T21:31:52.867+08:00 level=INFO source=images.go:439 msg="total unused blobs removed: 0"
Feb 20 21:31:52 debian12 ollama[3125]: time=2025-02-20T21:31:52.868+08:00 level=INFO source=routes.go:1237 msg="Listening on 127.0.0.1:11434 (version 0.5.11)"
Feb 20 21:31:52 debian12 ollama[3125]: time=2025-02-20T21:31:52.868+08:00 level=INFO source=gpu.go:217 msg="looking for compatible GPUs"
Feb 20 21:31:52 debian12 ollama[3125]: time=2025-02-20T21:31:52.972+08:00 level=INFO source=gpu.go:602 msg="no nvidia devices detected by library /usr/lib/x86_64-linux-gnu/libcuda.so.570.86.15"
Feb 20 21:31:53 debian12 ollama[3125]: time=2025-02-20T21:31:53.310+08:00 level=WARN source=amd_linux.go:309 msg="amdgpu too old gfx802" gpu=0
Feb 20 21:31:53 debian12 ollama[3125]: time=2025-02-20T21:31:53.311+08:00 level=WARN source=amd_linux.go:309 msg="amdgpu too old gfx802" gpu=1
Feb 20 21:31:53 debian12 ollama[3125]: time=2025-02-20T21:31:53.311+08:00 level=INFO source=amd_linux.go:402 msg="no compatible amdgpu devices detected"
Feb 20 21:31:53 debian12 ollama[3125]: time=2025-02-20T21:31:53.311+08:00 level=INFO source=gpu.go:377 msg="no compatible GPUs were discovered"
Feb 20 21:31:53 debian12 ollama[3125]: time=2025-02-20T21:31:53.311+08:00 level=INFO source=types.go:130 msg="inference compute" id=0 library=cpu variant="" compute="" driver=0.0 name="" total="755.7 GiB" available="750.5 GiB"
很不幸,我的这块 AMD FirePro S7150 x2运算卡 检测显示为 gfx802
,不在支持之列(最低是 gfx900
),我尝试传递环境变量 HSA_OVERRIDE_GFX_VERSION=9.0.0
(找最接近的LLVM版本),但是很不幸,重启ollama依然报错(如果兼容正确,则应该能够看到报告显卡的显存大小)
Feb 20 21:50:45 debian12 ollama[3306]: 2025/02/20 21:50:45 routes.go:1186: INFO server config env="map[CUDA_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION:9.0.0 HTTPS_PROXY: HTTP_PROXY: NO_PROXY: OLLAMA_>
Feb 20 21:50:45 debian12 ollama[3306]: time=2025-02-20T21:50:45.251+08:00 level=INFO source=images.go:432 msg="total blobs: 5"
Feb 20 21:50:45 debian12 ollama[3306]: time=2025-02-20T21:50:45.251+08:00 level=INFO source=images.go:439 msg="total unused blobs removed: 0"
Feb 20 21:50:45 debian12 ollama[3306]: time=2025-02-20T21:50:45.251+08:00 level=INFO source=routes.go:1237 msg="Listening on 127.0.0.1:11434 (version 0.5.11)"
Feb 20 21:50:45 debian12 ollama[3306]: time=2025-02-20T21:50:45.251+08:00 level=INFO source=gpu.go:217 msg="looking for compatible GPUs"
Feb 20 21:50:45 debian12 ollama[3306]: time=2025-02-20T21:50:45.373+08:00 level=INFO source=gpu.go:602 msg="no nvidia devices detected by library /usr/lib/x86_64-linux-gnu/libcuda.so.570.86.15"
Feb 20 21:50:45 debian12 ollama[3306]: time=2025-02-20T21:50:45.703+08:00 level=WARN source=amd_linux.go:309 msg="amdgpu too old gfx802" gpu=0
Feb 20 21:50:45 debian12 ollama[3306]: time=2025-02-20T21:50:45.704+08:00 level=WARN source=amd_linux.go:309 msg="amdgpu too old gfx802" gpu=1
Feb 20 21:50:45 debian12 ollama[3306]: time=2025-02-20T21:50:45.704+08:00 level=INFO source=amd_linux.go:402 msg="no compatible amdgpu devices detected"
Feb 20 21:50:45 debian12 ollama[3306]: time=2025-02-20T21:50:45.704+08:00 level=INFO source=gpu.go:377 msg="no compatible GPUs were discovered"
Feb 20 21:50:45 debian12 ollama[3306]: time=2025-02-20T21:50:45.704+08:00 level=INFO source=types.go:130 msg="inference compute" id=0 library=cpu variant="" compute="" driver=0.0 name="" total="755.7 GiB" available="750.5 GiB"
警告
很不幸,我的 AMD FirePro S7150 x2运算卡 太古老无法支持,所以 ollama
在AMD GPU上测试无法继续进行
对于支持的AMD GPU,还可以传递一个 ROCR_VISIBLE_DEVICES
来指定设备,这个参数的值是通过 rocminfo
获得的设备列表(不过我没有实践过)
补充信息
Gentoo提供了一个编译支持amdgpu_targets USE列表 看起来最低的支持是
gfx803
(Fiji GPU, codename fiji, including Radeon R9 Nano/Fury/FuryX, Radeon Pro Duo, FirePro S9300x2, Radeon Instinct MI8) ,看来我的二手 AMD FirePro S7150 x2运算卡 不在支持之列Use ROCm on Redeon GPUs > Compatibility metrices > Linux support matrices by ROCm version :
操作系统支持 Ubuntu 22.04 / 24.04
AMD Radeon系列最低看来是 AMD Radeon Pro W7800
Pytorch 2.4.1/Stable 支持的 ROCm 版本最低是 6.1 ,但是不支持 Radeon 7000 系列
AMD Radeon Instinct MI50 实践笔记
执行
ollama serve
命令,然后检查控制台输出:
ollama serve
终端输出...
time=2025-08-17T08:34:15.865Z level=INFO source=images.go:477 msg="total blobs: 0"
time=2025-08-17T08:34:15.865Z level=INFO source=images.go:484 msg="total unused blobs removed: 0"
time=2025-08-17T08:34:15.865Z level=INFO source=routes.go:1357 msg="Listening on 127.0.0.1:11434 (version 0.11.4)"
time=2025-08-17T08:34:15.865Z level=INFO source=gpu.go:217 msg="looking for compatible GPUs"
time=2025-08-17T08:34:15.881Z level=INFO source=amd_linux.go:386 msg="amdgpu is supported" gpu=GPU-6a92216172f0fcb5 gpu_type=gfx906
time=2025-08-17T08:34:15.889Z level=INFO source=types.go:130 msg="inference compute" id=GPU-6a92216172f0fcb5 library=rocm variant="" compute=gfx906 driver=6.12 name=1002:66a1 total="32.0 GiB" available="32.0 GiB"
由于我的主机目前仅安装了 AMD Radeon Instinct MI50 ,并且被ROCm支持,所以Ollama启动信息中看到顺利识别出 gfx906
(32GB版本)
在另外一个终端上执行
ollama run
客户端命令
qwen2.5-coder:32b-instruct-q6_K
# 选择运行32b-instruct版本,q6量化
ollama run qwen2.5-coder:32b-instruct-q6_K