zluda

202514

17:49

 

Windows11下通过HIP SDKZluda运行pytorch

 

1、下载Zluda和HIP

https://github.com/lshqqytiger/ZLUDA/

根据兼容性要求下载AMD HIP SDK 6.2版本

 

AMD官网下载HIP SDK for Windows(llama.cpp直接依靠HIP SDK,即使你不打算安装Zluda你也应该安装HIP SDK,而Zluda同样依靠HIP SDK运行,所以这应该是必装的):

 

https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html

 

 

2、编辑系统环境变量

装完HIP会自动添加

 

Path中添加zluda等路径,以及%HIP_PATH%\bin

 

 

 

3、检查GPUROCM支持

https://rocm.docs.amd.com/projects/install-on-windows/en/develop/reference/system-requirements.html

我的显卡是6800XT,是正式支持的,因此可以跳到下一步

如果不在正式支持列表中,则请进入https://github.com/brknsoul/ROCmLibs 项目中下载对应的ROCmLibs.7z,解压后复制到%HIP_PATH%\bin\rocblas\中

 

 

4Anaconda创建虚拟化环境

这里一定要注意,python版本、cuda版本、pytorch版本都需要一一对应

由于目前zluda的难绷兼容性,我选择python3.10+cuda11.8+pytorch2.3.1(很难想象这是2025新提交的代码

 

conda create -n torch_zluda python=3.10

conda activate torch_zluda

pip install torch==2.3.1+cu118 torchvision==0.18.1+cu118 torchaudio==2.3.1+cu118 -f https://mirrors.aliyun.com/pytorch-wheels/torch_stable.html

 

conda info --envs查看环境位置,并进入这个位置

 

再进入.\Lib\site-packages\torch\lib,将cublas64_11.dll和cusparse64_11.dll分别重命名为cublas64_11.dll.bak和cusparse64_11.dll.bak,使用Zluda文件夹中的替换

 

其他的dll我也进行了部分替换,后续会进行测试,如有bug在以下反馈:

 

更新:3.8.7版本加入fft,目前只替换了以下6

 

 

5、效果验证与测试

进入torch_zluda终端

python

import torch

torch.cuda.is_available()

正常情况下应该输出为True,说明已经可以通过Zluda调用你的AMD GPU进行计算

继续用vscode测试显存读取:

 

import torch

print("CUDA version is: "+ torch.cuda_version)

# 检查CUDA是否可用

if torch.cuda.is_available():

    # 获取GPU的总显存大小(以字节为单位)

    total_memory = torch.cuda.get_device_properties(0).total_memory

    # 将字节转换为GB

    total_memory_gb = total_memory / (1024 ** 3)

    print(f"Total GPU memory: {total_memory_gb:.2f} GB")

    # 获取当前GPU的已分配显存大小(以字节为单位)

    allocated_memory = torch.cuda.memory_allocated(0)

    # 将字节转换为GB

    allocated_memory_gb = allocated_memory / (1024 ** 3)

    print(f"Allocated GPU memory: {allocated_memory_gb:.2f} GB")

    # 获取当前GPU的缓存显存大小(以字节为单位)

    cached_memory = torch.cuda.memory_reserved(0)

    # 将字节转换为GB

    cached_memory_gb = cached_memory / (1024 ** 3)

    print(f"Cached GPU memory: {cached_memory_gb:.2f} GB")

else:

    print("CUDA is not available. Using CPU instead.")

 

 

6、后记:

    需要注意的是,如果你在上面安装了不受支持的pytorch版本(如2.5.1),尽管这里torch.cuda.is_available()返回的是True,甚至你创建两个张量移动到GPU上相加并打印都完全没有问题,但是当你实际运行神经网络(如最基本的ResNet18)的时候依然会报CUDA错误,(eg.CUDA error: CUBLAS_STATUS_NOT_SUPPORTED

    该错误主要出现在linear线性层进行计算的时候,具体原因未知,但至少正确版本的pytorch能保证不出现该错误。

    另外,在通过Zluda运行一个新的torch网络的时候,其需要编译PTX模块,这个过程需要耗费十几分钟到一个小时不等,期间终端不会有任何输出,请耐心等待,第二次及之后运行则不需要此过程。

 

为了正常使用,安装必要组件

pip uninstall numpy

pip uninstall pandas

pip index versions numpy查看可安装版本

pip install numpy==1.26.4 当前python版本只支持1.x版本

conda install matplotlib

conda install seaborn

conda install pandas

conda install scikit-learn

 

 

已使用 OneNote 创建。