1
计算物理
DTK版numba适配
2025-04-16 10:08:19
454

关键问题说明

  1. numba目前基于0.58版本,只是合入了numba-0.53对roc部分的支持,从而能够使高版本numba重新支持roc的用法,并进一步兼容DTK平台。
  2. 由于numba对版本敏感,最新版本也仅支持clang-14。对应DTK版本,目前只有DTK-23.04符合要求。

基础环境部署

numba版本敏感,各库请符合如下版本。
dtk-23.04、python-3.8、numba-0.58、llvm-lite-0.41

基础依赖库

  • numpy(1.22-1.27之间的版本即可)
pip install numpy
  • llvmlite (需要0.41版本,对应clang-14,可直接用官方版,不用基于DTK重新编译)
conda install llvmlite=0.41
或者
pip install llvmlite==0.41
  • rocmlite(适配DTK版)
    可按照如下方式源码编译,得到librocmlite.so。(或者直接用提供好的动态库)
# 源码编译
需要用适配版源码安装,或者用编译好的动态库
git clone http://developer.hpccube.com/codes/liupw/rocmlite.git
cd rocmlite
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_BITCODE_ROOT=${ROCM_PATH}/amdgcn/bitcode/
make
  • numba(0.58适配roc版)
    可按照如下方式源码编译安装(或者直接用提供好的whl包进行安装)
git clone http://developer.hpccube.com/codes/liupw/numba-dtk.git
cd numba
python setup.py bdist_wheel
pip install dist/numba-0.58.1-cp38-cp38-linux_x86_64.whl

运行环境测试

当前环境安装好numba后,可以检测当前的numba是否可用。

注意需要先加载环境变量,以便于numba能够找到关键的动态库librocmlite.so,环境变量ROCMLITE_LIBRARY_PATH为librocmlite.so文件实际所在的路径

source dtk/env.sh
export ROCMLITE_LIBRARY_PATH= xxx
export NUMBA_CAPTURED_ERRORS="new_style"

这里有一些不需要强制加载的环境变量,若有报错文件找不到时,部分环境变量可尝试加载来解决问题(以下是示例路径,请根据实际情况修改)

export HSAILBIN=${ROCM_PATH}/llvm/bin
export NUMBA_ROCM_BC_PATH=${ROCM_PATH}/amdgcn/bitcode
export NUMBA_HSA_DRIVER=${ROCM_PATH}/lib/libhsa-runtime64.so
  • ROC环境验证
    查看ROC Available是否为true
numba -s
  • 单元测试
# 整体测试
python -m numba.runtests numba.roc.tests -v 

# 单测
python -m numba.runtests numba.roc.tests.hsapy.test_compiler.TestExecution  -v 

版本差异修改说明

numba从0.54版本废弃roc,且废弃后对整体框架有了较大的调整。
同时,废弃的很大原因,也是ROCM本身有了较大的改变,不再单独提供hsa层接口,而是主推runtime层的接口。
两边都存在较大的变化,导致很难完全适配。目前仅通过了单元测试,其它场景未进一步测试。后期可根据实际需求,对部分功能实现进行调整。

DTK的CUDA兼容模块目前不能支持numba-cuda,主要是因为缺少nvvm这个库,这个库和PTX翻译相关,较难支持。

主要版本差异包括

  • numba-0.53-roc升级到numba-0.58的差异
  • llvmlite用法的差异(高版本llvmlite也有差别了)
  • 部分功能类的组织形式变化的差异(例如 dispatcher等)
  • 适配高版本DTK的差异
  • hsa接口大部分废弃

几处可能存在隐患的修改点

jit环境创建

  • 修改refresh逻辑(numba\core\base.py)
  • ROCmdispatcher实现不完整(numba\roc\descriptor.py)

转义阶段

  • 不调用alloca_addrspace_correction(numba\roc\hlc\common.py)

hsa运行

  • 核函数名查找时,加“kd”后缀(numba\roc\compiler.py)
  • 几处可能存在隐患的修改点

numba-0.60适配
新增numba-0.60适配,可支持dtk-24.04.3,在KM上运行。额外需要配置环境

pip install numpy==1.24
pip install llvmlite==0.43

解压numba-0.60_install_dep.tar,安装numba包,并配置环境变量
tar -xf numba-0.60_install_dep.tar
cd numba_install_dep
pip install numba-0.60.0-cp39-cp39-linux_x86_64.whl
source dtk/env.sh
export ROCMLITE_LIBRARY_PATH=/xxx/xxx/numba_install_dep
export NUMBA_CAPTURED_ERRORS="new_style"

可用如下命令检查numba是否安装成功
python -m numba.runtests numba.roc.tests -v
python -m numba.runtests numba.roc.tests.hsapy.test_compiler.TestExecution -v

numba roc版本和CUDA的用法存在差异,可以参考如下手册,以及测试用例进行代码修改。
https://numba.readthedocs.io/en/0.53.0/roc/index.html

全部评论(0)
只看楼主
暂无数据
--
楼主
Level.1
0 帖子
楼主热帖
暂无数据