问题
ROCm(Radeon Open Compute Platform)是AMD推出的一个开放的、基于GPU的高性能计算平台,涵盖了许多用于GPU计算的库、工具和运行时环境等诸多组件,主要用于加速科学计算、机器学写等多种类型的计算任务,对标Nvidia的CUDA生态,旨在为HPC和超大规模GPU计算提供软件开发平台。
Ollama使用ROCm来对AMD GPU运行大模型给以支持,如果ollama使用的ROCm版本对GPU支持有限制,那么ollama就不会利用GPU来运行大模型。
截至到2024年03月14日,Ollama使用的ROCm支持的AMD显卡如下:
Family | Supported cards and accelerators |
---|---|
AMD Radeon RX | 7900 XTX 7900 XT 7900 GRE 7800 XT 7700 XT 7600 XT 7600 6950 XT 6900 XTX 6900XT 6800 XT 6800 Vega 64 Vega 56 |
AMD Radeon PRO | W7900 W7800 W7700 W7600 W7500 W6900X W6800X Duo W6800X W6800 V620 V420 V340 V320 Vega II Duo Vega II VII SSG |
AMD Instinct | MI300X MI300A MI300 MI250X MI250 MI210 MI200 MI100 MI60 MI50 |
很不幸,我的AMD Radeon RX 6700XT就没有在支持的列表里面。
解决方案
感谢开源的力量,因为ollama是开源的,有热心网友尝试在ollama中加入较新版本的ROCm的支持,因为新版本的ROCm就有对RX 6700XT显卡的支持,自然而然加入新版本ROCm支持的Ollama也会同样支持到RX 6700XT。
准备步骤
- 首先到ollama官方网站,安装最新版本的Ollama,截至到文章发布时,最新版本的ollama为
0.4.4
- 然后尝试在ollama的服务日志中找到显卡代码,例如下面日志中
gpu_type=gfx1031
字段表示RX6700XT
对应的显卡代码为gfx1031
...level=WARN source=amd_windows.go:138 msg="amdgpu is not supported (supported types:[gfx1103])" gpu_type=gfx1031 gpu=0 library=C:\Users\rfanc\AppData\Local\Programs\Ollama\lib\ollama
- 然后到
https://github.com/likelovewant/ollama-for-amd/releases
网站找到最匹配的Ollama修改版本,匹配原则就是和官方网站的ollama版本最接近的,例如:https://github.com/likelovewant/ollama-for-amd/releases/tag/v0.4.2
具体步骤
从准备步骤中,我们已经获取到如下信息:
- 显卡代码: gfx1031
- Ollama修改版本链接: https://github.com/likelovewant/ollama-for-amd/releases/tag/v0.4.2
基于上述信息,我们具体的操作步骤如下:
- 打开Ollama修改版本页面:https://github.com/likelovewant/ollama-for-amd/releases/tag/v0.4.2
- 退出ollama
- 在该页面中下载并安装ollama修改版:OllamaSetup.exe
- 在该页面中找到
v6.1.2
版本的ROCm库的下载地址:https://github.com/likelovewant/ROCmLibs-for-gfx1103-AMD780M-APU/releases/tag/v0.6.1.2 - 打开
v6.1.2
的ROCm库下载页面,下载:rocm.gfx1031.for.hip.sdk.6.1.2.7z - 解压
rocm.gfx1031.for.hip.sdk.6.1.2.7z
文件,将压缩包中的文件替换到下列路径:rocblas.dll
替换%LocalAppData%\Programs\Ollama\lib\ollama\rocblas.dll
library\*
替换%LocalAppData%\Programs\Ollama\lib\ollama\rocblas\library\*
- 重新启动ollama
验证
- 如果在ollama的server.log能找到类似日志,说明显卡已经成功找到
...level=INFO source=types.go:123 msg="inference compute" id=0 library=rocm variant="" compute=gfx1031 driver=6.1 name="AMD Radeon RX 6700 XT"...
- 或者在运行大模型的时候,打开任务管理器,查看GPU的性能,如果看到显存被大幅占用,并且在推理时发现GPU利用率变高说明显卡已经被正确使用。