From 40dc263602a229b1419c285a43db3e62db15686f Mon Sep 17 00:00:00 2001 From: Hui Liu <96135754+amdsc21@users.noreply.github.com> Date: Mon, 30 Oct 2023 12:52:44 -0700 Subject: [PATCH] enable ROCm for jvm and R --- R-package/src/xgboost_custom.cc | 2 +- jvm-packages/CMakeLists.txt | 5 +++++ jvm-packages/create_jni.py | 12 +++++++++--- jvm-packages/pom.xml | 1 + jvm-packages/xgboost4j-gpu/pom.xml | 2 ++ .../xgboost4j-gpu/src/native/xgboost4j-gpu.cpp | 2 +- .../xgboost4j-gpu/src/native/xgboost4j-gpu.cu | 4 ++++ .../xgboost4j-gpu/src/native/xgboost4j-gpu.hip | 4 ++++ python-package/packager/build_config.py | 4 ++++ 9 files changed, 31 insertions(+), 5 deletions(-) diff --git a/R-package/src/xgboost_custom.cc b/R-package/src/xgboost_custom.cc index f196297ec..92f8a8e1f 100644 --- a/R-package/src/xgboost_custom.cc +++ b/R-package/src/xgboost_custom.cc @@ -32,7 +32,7 @@ namespace common { bool CheckNAN(double v) { return ISNAN(v); } -#if !defined(XGBOOST_USE_CUDA) +#if !defined(XGBOOST_USE_CUDA) && !defined(XGBOOST_USE_HIP) double LogGamma(double v) { return lgammafn(v); } diff --git a/jvm-packages/CMakeLists.txt b/jvm-packages/CMakeLists.txt index 36ed61a6b..f9706d2f3 100644 --- a/jvm-packages/CMakeLists.txt +++ b/jvm-packages/CMakeLists.txt @@ -9,6 +9,11 @@ if(USE_CUDA) ${PROJECT_SOURCE_DIR}/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cu) endif() +if(USE_HIP) + list(APPEND JVM_SOURCES + ${PROJECT_SOURCE_DIR}/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.hip) +endif() + add_library(xgboost4j SHARED ${JVM_SOURCES} ${XGBOOST_OBJ_SOURCES}) if(ENABLE_ALL_WARNINGS) diff --git a/jvm-packages/create_jni.py b/jvm-packages/create_jni.py index 18908fc1c..009d0cf6d 100755 --- a/jvm-packages/create_jni.py +++ b/jvm-packages/create_jni.py @@ -22,6 +22,8 @@ CONFIG = { "USE_CUDA": "OFF", "USE_NCCL": "OFF", + "USE_HIP": "OFF", + "USE_RCCL": "OFF", "JVM_BINDINGS": "ON", "LOG_CAPI_INVOCATION": "OFF" } @@ -74,6 +76,7 @@ if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--log-capi-invocation', type=str, choices=['ON', 'OFF'], default='OFF') parser.add_argument('--use-cuda', type=str, choices=['ON', 'OFF'], default='OFF') + parser.add_argument('--use-hip', type=str, choices=['ON', 'OFF'], default='OFF') cli_args = parser.parse_args() if sys.platform == "darwin": @@ -84,7 +87,7 @@ if __name__ == "__main__": print("building Java wrapper") with cd(".."): - build_dir = 'build-gpu' if cli_args.use_cuda == 'ON' else 'build' + build_dir = 'build-gpu' if cli_args.use_cuda == 'ON' or cli_args.use_hip == 'ON' else 'build' maybe_makedirs(build_dir) with cd(build_dir): if sys.platform == "win32": @@ -103,6 +106,9 @@ if __name__ == "__main__": if cli_args.use_cuda == 'ON': CONFIG['USE_CUDA'] = 'ON' CONFIG['USE_NCCL'] = 'ON' + elif cli_args.use_hip== 'ON': + CONFIG['USE_HIP'] = 'ON' + CONFIG['USE_RCCL'] = 'ON' args = ["-D{0}:BOOL={1}".format(k, v) for k, v in CONFIG.items()] @@ -125,8 +131,8 @@ if __name__ == "__main__": run(f'"{sys.executable}" mapfeat.py') run(f'"{sys.executable}" mknfold.py machine.txt 1') - xgboost4j = 'xgboost4j-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j' - xgboost4j_spark = 'xgboost4j-spark-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j-spark' + xgboost4j = 'xgboost4j-gpu' if cli_args.use_cuda == 'ON' or cli_args.use_hip== 'ON' else 'xgboost4j' + xgboost4j_spark = 'xgboost4j-spark-gpu' if cli_args.use_cuda == 'ON' or cli_args.use_hip == 'ON' else 'xgboost4j-spark' print("copying native library") library_name, os_folder = { diff --git a/jvm-packages/pom.xml b/jvm-packages/pom.xml index 5469773c5..609d9fe9b 100644 --- a/jvm-packages/pom.xml +++ b/jvm-packages/pom.xml @@ -43,6 +43,7 @@ 5 OFF OFF + OFF 23.08.0 23.08.1 cuda11 diff --git a/jvm-packages/xgboost4j-gpu/pom.xml b/jvm-packages/xgboost4j-gpu/pom.xml index c08988ac8..c7f02e808 100644 --- a/jvm-packages/xgboost4j-gpu/pom.xml +++ b/jvm-packages/xgboost4j-gpu/pom.xml @@ -104,6 +104,8 @@ ${log.capi.invocation} --use-cuda ${use.cuda} + --use-hip + ${use.hip} ${user.dir} diff --git a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cpp b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cpp index 698da6244..57769e5dc 100644 --- a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cpp +++ b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cpp @@ -2,7 +2,7 @@ // Created by bobwang on 2021/9/8. // -#ifndef XGBOOST_USE_CUDA +#if !defined(XGBOOST_USE_CUDA) && !defined(XGBOOST_USE_HIP) #include diff --git a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cu b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cu index 317be01ad..272a90354 100644 --- a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cu +++ b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.cu @@ -1,6 +1,10 @@ #include +#if defined(XGBOOST_USE_CUDA) #include "../../../../src/common/device_helpers.cuh" +#elif defined(XGBOOST_USE_HIP) +#include "../../../../src/common/device_helpers.hip.h" +#endif #include "../../../../src/common/cuda_pinned_allocator.h" #include "../../../../src/data/array_interface.h" #include "jvm_utils.h" diff --git a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.hip b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.hip index e69de29bb..2095d4182 100644 --- a/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.hip +++ b/jvm-packages/xgboost4j-gpu/src/native/xgboost4j-gpu.hip @@ -0,0 +1,4 @@ + +#if defined(XGBOOST_USE_HIP) +#include "xgboost4j-gpu.cu" +#endif diff --git a/python-package/packager/build_config.py b/python-package/packager/build_config.py index 26392a897..e22600a70 100644 --- a/python-package/packager/build_config.py +++ b/python-package/packager/build_config.py @@ -15,6 +15,10 @@ class BuildConfiguration: # pylint: disable=R0902 use_cuda: bool = False # Whether to enable NCCL use_nccl: bool = False + # Whether to enable HIP + use_hip: bool = False + # Whether to enable RCCL + use_rccl: bool = False # Whether to enable HDFS use_hdfs: bool = False # Whether to enable Azure Storage