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)

在 Ubuntu 24.04 上安装 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
Ubuntu 24.04 安装 amdgpu 驱动
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-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_v11cuda_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

这个参数比较搞,参考 https://forum.level1techs.com/t/ubuntu-22-04-from-zero-to-70b-llama-with-both-nvidia-and-amd-7xxx-series-gpus/206411/13

AMD FirePro S7150 x2运算卡 实践笔记

警告

AMD FirePro S7150 x2运算卡 太古老了, ROCm 不支持这款GPU,导致无法用于Ollama,实践失败。

启动一次 ollama 然后查看日志:

查看ollama启动时发现的AMD GPU信息
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依然报错(如果兼容正确,则应该能够看到报告显卡的显存大小)

修订环境变量但是查看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 获得的设备列表(不过我没有实践过)

补充信息

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