前言:这个教程是为官方不支持 HIP SDK 的 amd GPU 准备的,支持的 GPU 在安装好 HIP SDK 后直接从官方渠道下载应用并体验。
这个教程大部分的操作都转为了 powershell 命令行操作,方便后续制作成一键式脚本。
后续有下载失败,自行开启代理。
rocBLAS 编译
环境准备
-
没有 HIP SDK 支持但有 ROCm runtime 支持的 gpu 也能安装 HIP SDK,只是后续需要手动编译 rocBLAS。
-
安装 HIP SDK。安装好后将 HIP 执行文件目录添加到 Path 环境变量,下面是 powershell 添加示例。
# 目前(2024年5月29日) HIP SDK for windows 最新为 5.7.x。 # Check:安装成功后,会自动添加 HIP_Path 环境变量,说明安装成功 $HIP_PATH=[Environment]::GetEnvironmentVariable("HIP_Path", "Machine") echo $HIP_PATH # C:\Program Files\AMD\ROCm\5.7\ # 下面是 gpt 生成的添加Path环境变量的函数 function AddToPath([string]$pathToAdd) { $oldPath = [Environment]::GetEnvironmentVariable("Path", "Machine") if (-not $oldPath.Contains($pathToAdd)) { $newPath = "$oldPath;$pathToAdd" [Environment]::SetEnvironmentVariable("Path", $newPath, "Machine") Write-Host "Path updated successfully." } else { Write-Host "Path already exists in the environment variable." } } # 调用函数,添加 HIP_Path 执行文件目录 AddToPath "%HIP_Path%\bin" # check command hipcc --version #HIP version: 5.7.32000-193a0b56e #clang version 17.0.0 (git@github.amd.com:Compute-Mirrors/llvm-project 6e709f613348e5258188527d11ee8d78376f26b7) #Target: x86_64-pc-windows-msvc #Thread model: posix #InstalledDir: C:\Program Files\AMD\ROCm\5.7\\bin # 获取查看显卡架构,后续需要使用 $arch=$(hipinfo | Select-String ArchName).Line.Split()[-1] echo $arch # gfx1032
-
软件安装:
- git
- curl
- perl
- python38(个人环境习惯,最后一个官方支持 win7 的版本,高于此版本应该都行)、
- cmake (c++ 项目编译工具)
- ninja (cmake 的生成器)
- vcpkg ( visual stdio 的 c++ 包管理器)
推荐使用 scoop 安装,会自动配置命令路径至 Path 环境变量
scoop install main/git main/curl main/perl main/vcpkg main/cmake main/ninja versions/python38
后续安装 vs c++ develop tool 时,cmake、ninja 也会安装,如果使用 vs 提供的,需要自己配置对应的 Path 环境变量。
check 命令是否正常(也可以用
GET-COMMAND
命令)git --version # git version 2.45.1.windows.1 curl --version # curl 8.8.0 (x86_64-w64-mingw32) libcurl/8.8.0 LibreSSL/3.9.2 zlib/1.3.1 brotli/1.1.0 zstd/1.5.6 WinIDN libpsl/0.21.5 libssh2/1.11.0 nghttp2/1.62.1 ngtcp2/1.5.0 nghttp3/1.3.0 perl --version # This is perl 5, version 38, subversion 2 (v5.38.2) built for MSWin32-x64-multi-thread python --version # Python 3.8.10 cmake --version # cmake version 3.29.3 ninja --version # 1.12.1 vcpkg --version # vcpkg package management program version 2024-04-23-d6945642ee5c3076addd1a42c331bbf4cfc97457
-
c++ 编译环境安装
visual stdio 2022 Community(已有其他版本也可以,但是需要安装 c++ 开发组件【包括推荐】) ,推荐使用 winget-cli 安装。
# 社区版默认下载只有编辑器,命令添加了 C++ 开发组件 Microsoft.VisualStudio.Workload.NativeDesktop # 静默安装为后台安装。需要 wizard 交互确认或者配置其他的参数(如安装路径),删除下面命令的 --quiet 参数 # 因为安装下载是静默,所以需要查看后台的 visualstdioInstaller 进程结束后才是真正安装完成。 winget install --id 'Microsoft.VisualStudio.2022.Community' --override "--quiet --add Microsoft.VisualStudio.Workload.NativeDesktop;includeRecommended"
编译
参考资料
- https://rocm.docs.amd.com/projects/rocBLAS/en/docs-5.7.1/Windows_Install_Guide.html#building-and-installing-rocblas
- https://github.com/ulyssesrr/docker-rocm-xtra
-
创建工作目录
$HOME/ROCm
,后续所有的命令默认从工作目录开始mkdir $HOME/ROCm
-
Tensile 是 rocBLAS 依赖的 tensor 运算库。rocBLAS 编译的时候可以选择使用仓库中已编译好的库,也可以指定本地的 Tensile 手动编译。
-
获取 Tensile 源码
# Tensile,节省下载的时间,只下所需的最新源码版本 git clone -b release/rocm-rel-5.7 --depth 1 https://github.com/ROCm/Tensile.git $HOME/ROCm/Tensile
-
获取支持 fallback gpu 编译的补丁:
curl -L https://raw.githubusercontent.com/ulyssesrr/docker-rocm-xtra/main/rocm-xtra-builder-rocblas/patches/Tensile-fix-fallback-arch-build.patch -o $HOME/ROCm/Tensile-fix-fallback-arch-build.patch cd $HOME/ROCm/Tensile git apply ../Tensile-fix-fallback-arch-build.patch
-
最新 vcpkg 中仓库的
msgpack
分化成了msgpack-cxx
和msgpack-c
两个库,devolper 分支的代码已经修复了这个问题。curl -L https://raw.githubusercontent.com/ROCm/Tensile/develop/Tensile/Source/lib/CMakeLists.txt -o $HOME/ROCm/Tensile/Tensile/Source/lib/CMakeLists.txt
-
(符合的 GPU 可直接跳过。下面内容来源 bilibili - Windows 编译 AMD ROCm rocblas 教程)
Tensile 默认情况下并不支持某些显卡(比如核显),比如 gfx1103——780M,需要自行在源码中添加相应(遍历 下面文件中
gfxxxx
,然后添加对应的代码。Tensile\pytest.ini Tensile\Tensile\Source\CMakeLists.txt Tensile\Tensile\Source\lib\include\Tensile\AMDGPU.hpp Tensile\Tensile\Source\lib\include\Tensile\Serialization\Predicates.hpp
以及
Tensile-rocm\Tensile\Common.py
中修改globalParameters["SupportedISA"]
CACHED_ASM_CAPS
这两个变量
-
-
rocBLAS
-
源码和依赖下载
5.7 目前 gfx1032 无法编译 lazy lib: https://github.com/LostRuins/koboldcpp/issues/655#issuecomment-1937866919。只能 no-lazy。
# rocBLAS,节省下载的时间,只下所需的最新源码版本 git clone -b release/rocm-rel-5.7 --depth 1 https://github.com/ROCm/rocBLAS.git $HOME/ROCm/rocBLAS cd $HOME/ROCm/rocBLAS # 下载依赖 python .\rdeps.py
-
编译
# 编译库。-t 要指定 Tensile 的绝对路径 python .\rmake.py -a $arch --lazy-library-loading --no-merge-architectures -t $HOME\ROCm\Tensile\
-
-
将生成的 dll 和库文件,拷贝到 ROCm 的 library 下
# ls .\build\release\staging\ # rocblas.dll cp '.\build\release\staging\rocblas.dll' "$HIP_PATH\bin\" ls .\build\release\Tensile\library\ # Kernels.so-000-gfx1032.hsaco TensileLibrary.dat TensileManifest.txt cp .\build\release\Tensile\library\* "$HIP_PATH\bin\rocblas\library"
ollama 编译
环境准备
前提:已完成 rocBLAS
的编译。
软件安装:
- go 1.22
- mingw ( llama 依赖的 c++ 编译)
scoop install main/go main/mingw
# check
go version
# go version go1.22.3 windows/amd64
mingw32-make.exe --version
# GNU Make 4.4.1
# Built for x86_64-w64-mingw32
编译
参考资料
-
llama_server:
# 下载 Ollama v0.1.39 最新的代码 git clone -b v0.1.39 --depth 1 https://github.com/ollama/ollama.git $HOME\ollama-v0.1.39 cd $HOME\ollama0.1.39 $env:CGO_ENABLED="1" $env:AMDGPU_TARGETS="$arch" # 这里会下载 llama.cpp 并会自动编译 # llama 的编译会很久(cpu、cpu_avx、cuda、rocm都要编译一次) # 若不想全部编译,可以在下载完成后,Ctrl-c 终止,修改 llm\generate\gen_windows.ps1, 只留下所需的 build_rocm。 go generate ./...
-
ollama:
# 此时依旧在 $HOME\ollama0.1.39 目录下 # 编译 ollama go build .
简单使用
服务端和客户端分别在两个不同的终端中启动
-
服务端
# 这个环境变量的作用是跳过 ollama 的可用 rocm GPU 的检测 $env:HSA_OVERRIDE_GFX_VERSION="10.1.0" Invoke-Expression "$HOME\ollama-v0.1.39\ollama.exe serve" # ...下面的输出说明成功通过 rocm 运行在 GPU 上 # time=2024-05-31T20:26:28.433+08:00 level=INFO source=payload.go:44 msg="Dynamic LLM libraries [rocm_v5.7]" # time=2024-05-31T20:26:28.473+08:00 level=INFO source=amd_windows.go:63 msg="skipping rocm gfx compatibility check" HSA_OVERRIDE_GFX_VERSION=10.1.0 # time=2024-05-31T20:26:28.922+08:00 level=INFO source=types.go:71 msg="inference compute" id=0 library=rocm compute=gfx1032 driver=0.0 name="AMD Radeon RX 6650 XT" total="8.0 GiB" available="7.9 GiB"
-
客户端
# 模型拉取时,下载变慢,Ctrl-c停止重新执行拉取命令可恢复一定下载速度 Invoke-Expression "$HOME\ollama-v0.1.39\ollama.exe pull llama3:latest" Invoke-Expression "$HOME\ollama-v0.1.39\ollama.exe run llama3"
效果如下:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于