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