背景
最近关注了stable-diffusion.cpp,一个用纯C/C++推理扩散模型的方案
之前一直在用ComfyUI推理SDXL或Z Image Turbo,想试一下stable-diffusion.cpp会不会更快
我的电脑用的是AMD的780M核显(gfx1103),虽然目前AMD官方没有该显卡的ROCm驱动,但可以通过社区项目TheRock安装ROCm驱动
所以我的环境是780M TheRock ROCm
stable-diffusion.cpp 已经提供了 ROCm 的预构建,理论上可以直接下载运行
但这个版本在运行过程中会报错:
因为这个是基于AMD官方的ROCm驱动编译的,与TheRock ROCm目前还有兼容性问题。为了正常使用,可以自行编译stable-diffusion.cpp ROCm版本
编译过程
环境配置
首先,需要安装 TheRock ROCm 的相关开发组件rocm[libraries,devel]
这里用 780M 举例,详细安装命令请自行参照 TheRock 安装
pipinstall--index-url https://rocm.nightlies.amd.com/v2/gfx110X-all/"rocm[libraries,devel]"注:安装时建议创建一个虚拟环境或独立环境安装
等待安装完成后就可以在 pip 看到相关包了
此时,运行rocm-sdk init就可以得到环境目录:
把环境目录下的bin和lib\llvm\bin放到环境变量PATH中:
在我这里就是:D:\ToolChain\micromamba\envs\therock\Lib\site-packages\_rocm_sdk_devel\bin
(ROCm 相关组件)D:\ToolChain\micromamba\envs\therock\Lib\site-packages\_rocm_sdk_devel\lib\llvm\bin
(ROCm附带的Clang编译器)
配置好环境变量后,在终端运行clang -v,就能看到如下提示:
至此,编译所需的环境就配置好了。
注:因为后续需要cpp编译,默认使用ninja构建,如未安装,请自行下载。
编译过程
首先,通过git获取源码:git clone https://github.com/leejet/stable-diffusion.cpp.git
接着进入目录,执行子模块初始化与更新git submodule update --init --recursive
下载好文件后,就可以创建build目录,手动创建或者直接执行mkdir build && cd build都可以
然后就可以运行 CMake 生成 ROCm 后端构建文件:
cmake..-G"Ninja"-DCMAKE_C_COMPILER=clang-DCMAKE_CXX_COMPILER=clang++-DSD_HIPBLAS=ON-DCMAKE_BUILD_TYPE=Release-DGPU_TARGETS=gfx1103-DAMDGPU_TARGETS=gfx1103-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON-DCMAKE_POSITION_INDEPENDENT_CODE=ON注:参数中的gfx1103对应 780M 核显,其他显卡请输入正确的对应编号。
然后直接运行构建即可:cmake --build . --config Release
等待一段时间后,就可以看到结果: