From 5bd62500324546ee07f14dc208bd4c24a8706e49 Mon Sep 17 00:00:00 2001 From: Kaito Udagawa Date: Fri, 9 Feb 2024 16:01:39 +0900 Subject: [PATCH 1/9] Enable ROCm --- CMakeLists.txt | 8 ++++++++ src/ort-utils/ort-session-utils.cpp | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d140acb5..6ff196bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,10 +42,18 @@ set(DISABLE_ONNXRUNTIME_GPU OFF CACHE STRING "Disables GPU support of ONNX Runtime (Only valid on Linux)") +set(ENABLE_ROCM + OFF + CACHE STRING "Enables ROCm support (Only valid on Linux)") + if(DISABLE_ONNXRUNTIME_GPU) target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE DISABLE_ONNXRUNTIME_GPU) endif() +if(ENABLE_ROCM) + target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE ENABLE_ROCM) +endif() + if(USE_SYSTEM_ONNXRUNTIME) if(OS_LINUX) find_package(Onnxruntime 1.16.3 REQUIRED) diff --git a/src/ort-utils/ort-session-utils.cpp b/src/ort-utils/ort-session-utils.cpp index 795e945e..10b2dfbd 100644 --- a/src/ort-utils/ort-session-utils.cpp +++ b/src/ort-utils/ort-session-utils.cpp @@ -66,7 +66,13 @@ int createOrtSession(filter_data *tf) bfree(modelFilepath_rawPtr); try { -#if defined(__linux__) && defined(__x86_64__) && \ +#ifdef ENABLE_ROCM + if (tf->useGPU == USEGPU_TENSORRT) { + Ort::ThrowOnError( + OrtSessionOptionsAppendExecutionProvider_ROCM( + sessionOptions, 0)); + } +#elif defined(__linux__) && defined(__x86_64__) && \ !defined(DISABLE_ONNXRUNTIME_GPU) if (tf->useGPU == USEGPU_TENSORRT) { Ort::ThrowOnError( From 9bb4c32710bac254058ab6ef21923956cf4ddfa6 Mon Sep 17 00:00:00 2001 From: Kaito Udagawa Date: Fri, 9 Feb 2024 16:20:18 +0900 Subject: [PATCH 2/9] Add ROCm support --- CMakeLists.txt | 18 ++++++--- docs/BUILDING-ROCM-UBUNTU.md | 78 ++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 docs/BUILDING-ROCM-UBUNTU.md diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ff196bd..0638a7f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,12 +56,18 @@ endif() if(USE_SYSTEM_ONNXRUNTIME) if(OS_LINUX) - find_package(Onnxruntime 1.16.3 REQUIRED) - set(Onnxruntime_INCLUDE_PATH - ${Onnxruntime_INCLUDE_DIR} ${Onnxruntime_INCLUDE_DIR}/onnxruntime - ${Onnxruntime_INCLUDE_DIR}/onnxruntime/core/session ${Onnxruntime_INCLUDE_DIR}/onnxruntime/core/providers/cpu) - target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${Onnxruntime_LIBRARIES}") - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PUBLIC "${Onnxruntime_INCLUDE_PATH}") + find_package(Onnxruntime 1.16.3) + if(Onnxruntime_FOUND) + set(Onnxruntime_INCLUDE_PATH + ${Onnxruntime_INCLUDE_DIR} ${Onnxruntime_INCLUDE_DIR}/onnxruntime + ${Onnxruntime_INCLUDE_DIR}/onnxruntime/core/session ${Onnxruntime_INCLUDE_DIR}/onnxruntime/core/providers/cpu) + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE "${Onnxruntime_LIBRARIES}") + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PUBLIC "${Onnxruntime_INCLUDE_PATH}") + else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(Onnxruntime REQUIRED IMPORTED_TARGET onnxruntime) + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE PkgConfig::Onnxruntime) + endif() else() message(FATAL_ERROR "System ONNX Runtime is only supported on Linux!") endif() diff --git a/docs/BUILDING-ROCM-UBUNTU.md b/docs/BUILDING-ROCM-UBUNTU.md new file mode 100644 index 00000000..c6ec47d4 --- /dev/null +++ b/docs/BUILDING-ROCM-UBUNTU.md @@ -0,0 +1,78 @@ +# Build with ROCm on Ubuntu + + +## Prequisites + +- Linux Kernel 5 is required. 6 cannot install ROCm. +- You must use Ubuntu 22.04 LTS to follow this instructions. +- 50 GB+ space is required for building ONNX Runtime. + +## Install ROCm + +https://docs.amd.com/en/docs-5.4.0/deploy/linux/os-native/install.html + + +``` +sudo mkdir --parents --mode=0755 /etc/apt/keyrings +wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | \ + gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null +echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/amdgpu/5.4/ubuntu jammy main' \ + | sudo tee /etc/apt/sources.list.d/amdgpu.list +sudo apt update +sudo apt install amdgpu-dkms +sudo reboot +``` + +``` +for ver in 5.3.3 5.4; do +echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/$ver jammy main" \ + | sudo tee --append /etc/apt/sources.list.d/rocm.list +done +echo -e 'Package: *\nPin: release o=repo.radeon.com\nPin-Priority: 600' \ + | sudo tee /etc/apt/preferences.d/rocm-pin-600 +sudo apt update +sudo apt install rocm-hip-sdk5.4.0 miopen-hip-dev5.4.0 roctracer-dev5.4.0 rocm-dev5.4.0 +``` + +## Build and install ONNX Runtime + +``` +wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | \ + gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null +echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ jammy main' | sudo tee /etc/apt/sources.list.d/kitware.list >/dev/null +sudo apt update +sudo apt install kitware-archive-keyring +sudo apt install cmake +``` + +``` +sudo apt install build-essential libstdc++-12-dev +git clone --recursive https://github.com/microsoft/onnxruntime.git -b v1.16.3 +cd onnxruntime +./build.sh --config RelWithDebInfo --use_rocm --rocm_home /opt/rocm-5.4.0 --skip_tests --parallel +sudo cmake --install build/Linux/RelWithDebInfo +cd .. +``` + +## Build and install obs-backgroundremoval + +``` +sudo add-apt-repository ppa:obsproject/obs-studio +sudo apt update +sudo apt install obs-studio qt6-base-dev +``` + +``` +git clone --recursive https://github.com/occ-ai/obs-backgroundremoval.git +cd obs-backgroundremoval +cmake . -B build_x86_64 \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DENABLE_FRONTEND_API=ON \ + -DENABLE_QT=ON \ + -DCMAKE_COMPILE_WARNING_AS_ERROR=ON \ + -DUSE_SYSTEM_ONNXRUNTIME=ON \ + -DENABLE_ROCM=ON +cmake --build build_x86_64 +cmake --install build_x86_64 +``` \ No newline at end of file From 7e64a94c304039e39d5b3de2cb255c280f2bfcf5 Mon Sep 17 00:00:00 2001 From: Kaito Udagawa Date: Fri, 9 Feb 2024 16:21:46 +0900 Subject: [PATCH 3/9] Fix --- CMakeLists.txt | 2 +- docs/BUILDING-ROCM-UBUNTU.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0638a7f2..36259369 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,7 +65,7 @@ if(USE_SYSTEM_ONNXRUNTIME) target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PUBLIC "${Onnxruntime_INCLUDE_PATH}") else() find_package(PkgConfig REQUIRED) - pkg_check_modules(Onnxruntime REQUIRED IMPORTED_TARGET onnxruntime) + pkg_check_modules(Onnxruntime REQUIRED IMPORTED_TARGET libonnxruntime) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE PkgConfig::Onnxruntime) endif() else() diff --git a/docs/BUILDING-ROCM-UBUNTU.md b/docs/BUILDING-ROCM-UBUNTU.md index c6ec47d4..c95b4a1a 100644 --- a/docs/BUILDING-ROCM-UBUNTU.md +++ b/docs/BUILDING-ROCM-UBUNTU.md @@ -59,7 +59,7 @@ cd .. ``` sudo add-apt-repository ppa:obsproject/obs-studio sudo apt update -sudo apt install obs-studio qt6-base-dev +sudo apt install obs-studio qt6-base-dev pkg-config ``` ``` From 05582ddc9aaa89e0c55fa07d859341c3ce32ac1f Mon Sep 17 00:00:00 2001 From: Kaito Udagawa Date: Fri, 9 Feb 2024 16:39:10 +0900 Subject: [PATCH 4/9] Fix --- CMakeLists.txt | 8 ++++++++ docs/BUILDING-ROCM-UBUNTU.md | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 36259369..fe9b0a4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,14 @@ if(USE_SYSTEM_ONNXRUNTIME) find_package(PkgConfig REQUIRED) pkg_check_modules(Onnxruntime REQUIRED IMPORTED_TARGET libonnxruntime) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE PkgConfig::Onnxruntime) + get_target_property(ONNXRUNTIME_INCLUDE_DIRS PkgConfig::Tesseract INCLUDE_DIRECTORIES) + foreach(dir ${ONNXRUNTIME_INCLUDE_DIRS}) + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime/core/common") + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime/core/framework") + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime/core/graph") + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime/core/optimizer") + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime") + endforeach() endif() else() message(FATAL_ERROR "System ONNX Runtime is only supported on Linux!") diff --git a/docs/BUILDING-ROCM-UBUNTU.md b/docs/BUILDING-ROCM-UBUNTU.md index c95b4a1a..cba68fdb 100644 --- a/docs/BUILDING-ROCM-UBUNTU.md +++ b/docs/BUILDING-ROCM-UBUNTU.md @@ -59,7 +59,7 @@ cd .. ``` sudo add-apt-repository ppa:obsproject/obs-studio sudo apt update -sudo apt install obs-studio qt6-base-dev pkg-config +sudo apt install obs-studio qt6-base-dev pkg-config libcurl4-openssl-dev ``` ``` From 569fa5c336b59c0aa840c077e398484ecdbf1f03 Mon Sep 17 00:00:00 2001 From: Kaito Udagawa Date: Fri, 9 Feb 2024 16:39:40 +0900 Subject: [PATCH 5/9] Update CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fe9b0a4c..11efc99d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,7 +67,7 @@ if(USE_SYSTEM_ONNXRUNTIME) find_package(PkgConfig REQUIRED) pkg_check_modules(Onnxruntime REQUIRED IMPORTED_TARGET libonnxruntime) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE PkgConfig::Onnxruntime) - get_target_property(ONNXRUNTIME_INCLUDE_DIRS PkgConfig::Tesseract INCLUDE_DIRECTORIES) + get_target_property(ONNXRUNTIME_INCLUDE_DIRS PkgConfig::Onnxruntime INCLUDE_DIRECTORIES) foreach(dir ${ONNXRUNTIME_INCLUDE_DIRS}) target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime/core/common") target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime/core/framework") From 5691fb6ff8d1f0aad938032bdbe973d7a9747464 Mon Sep 17 00:00:00 2001 From: Kaito Udagawa Date: Fri, 9 Feb 2024 16:49:37 +0900 Subject: [PATCH 6/9] Fix --- CMakeLists.txt | 11 ++++------- src/ort-utils/ort-session-utils.cpp | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 11efc99d..4204c7a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,13 +68,10 @@ if(USE_SYSTEM_ONNXRUNTIME) pkg_check_modules(Onnxruntime REQUIRED IMPORTED_TARGET libonnxruntime) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE PkgConfig::Onnxruntime) get_target_property(ONNXRUNTIME_INCLUDE_DIRS PkgConfig::Onnxruntime INCLUDE_DIRECTORIES) - foreach(dir ${ONNXRUNTIME_INCLUDE_DIRS}) - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime/core/common") - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime/core/framework") - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime/core/graph") - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime/core/optimizer") - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${dir}/onnxruntime") - endforeach() + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${Onnxruntime_INCLUDEDIR}/core/common") + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${Onnxruntime_INCLUDEDIR}/core/framework") + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${Onnxruntime_INCLUDEDIR}/core/graph") + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${Onnxruntime_INCLUDEDIR}/core/optimizer") endif() else() message(FATAL_ERROR "System ONNX Runtime is only supported on Linux!") diff --git a/src/ort-utils/ort-session-utils.cpp b/src/ort-utils/ort-session-utils.cpp index 10b2dfbd..13921c9d 100644 --- a/src/ort-utils/ort-session-utils.cpp +++ b/src/ort-utils/ort-session-utils.cpp @@ -6,7 +6,7 @@ #endif #if defined(__linux__) && defined(__x86_64__) && \ - !defined(DISABLE_ONNXRUNTIME_GPU) + !defined(DISABLE_ONNXRUNTIME_GPU) && !defined(ENABLE_ROCM) #include #endif From ca8f3b4173e4b273ef40f2c228eb8449766d903e Mon Sep 17 00:00:00 2001 From: Kaito Udagawa Date: Fri, 9 Feb 2024 16:50:13 +0900 Subject: [PATCH 7/9] Update CMakeLists.txt --- CMakeLists.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4204c7a6..14f8b3ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,10 +68,7 @@ if(USE_SYSTEM_ONNXRUNTIME) pkg_check_modules(Onnxruntime REQUIRED IMPORTED_TARGET libonnxruntime) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE PkgConfig::Onnxruntime) get_target_property(ONNXRUNTIME_INCLUDE_DIRS PkgConfig::Onnxruntime INCLUDE_DIRECTORIES) - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${Onnxruntime_INCLUDEDIR}/core/common") - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${Onnxruntime_INCLUDEDIR}/core/framework") - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${Onnxruntime_INCLUDEDIR}/core/graph") - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${Onnxruntime_INCLUDEDIR}/core/optimizer") + target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${Onnxruntime_INCLUDEDIR}/core/session") endif() else() message(FATAL_ERROR "System ONNX Runtime is only supported on Linux!") From 3da1062c26c8c3b017e55385518d3a8b673d08ef Mon Sep 17 00:00:00 2001 From: Kaito Udagawa Date: Fri, 9 Feb 2024 16:54:06 +0900 Subject: [PATCH 8/9] Fix --- CMakeLists.txt | 2 -- docs/BUILDING-ROCM-UBUNTU.md | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 14f8b3ed..36259369 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,8 +67,6 @@ if(USE_SYSTEM_ONNXRUNTIME) find_package(PkgConfig REQUIRED) pkg_check_modules(Onnxruntime REQUIRED IMPORTED_TARGET libonnxruntime) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE PkgConfig::Onnxruntime) - get_target_property(ONNXRUNTIME_INCLUDE_DIRS PkgConfig::Onnxruntime INCLUDE_DIRECTORIES) - target_include_directories(${CMAKE_PROJECT_NAME} SYSTEM PRIVATE "${Onnxruntime_INCLUDEDIR}/core/session") endif() else() message(FATAL_ERROR "System ONNX Runtime is only supported on Linux!") diff --git a/docs/BUILDING-ROCM-UBUNTU.md b/docs/BUILDING-ROCM-UBUNTU.md index cba68fdb..8cca224f 100644 --- a/docs/BUILDING-ROCM-UBUNTU.md +++ b/docs/BUILDING-ROCM-UBUNTU.md @@ -49,7 +49,7 @@ sudo apt install cmake sudo apt install build-essential libstdc++-12-dev git clone --recursive https://github.com/microsoft/onnxruntime.git -b v1.16.3 cd onnxruntime -./build.sh --config RelWithDebInfo --use_rocm --rocm_home /opt/rocm-5.4.0 --skip_tests --parallel +./build.sh --config RelWithDebInfo --use_rocm --rocm_home /opt/rocm-5.4.0 --skip_tests --parallel --build_shared_lib sudo cmake --install build/Linux/RelWithDebInfo cd .. ``` From 4b179992427e330df63c29bbc56a6d0c801d4a1a Mon Sep 17 00:00:00 2001 From: Kaito Udagawa Date: Fri, 9 Feb 2024 17:01:31 +0900 Subject: [PATCH 9/9] Update BUILDING-ROCM-UBUNTU.md --- docs/BUILDING-ROCM-UBUNTU.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/BUILDING-ROCM-UBUNTU.md b/docs/BUILDING-ROCM-UBUNTU.md index 8cca224f..aa454239 100644 --- a/docs/BUILDING-ROCM-UBUNTU.md +++ b/docs/BUILDING-ROCM-UBUNTU.md @@ -66,6 +66,7 @@ sudo apt install obs-studio qt6-base-dev pkg-config libcurl4-openssl-dev git clone --recursive https://github.com/occ-ai/obs-backgroundremoval.git cd obs-backgroundremoval cmake . -B build_x86_64 \ + -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DENABLE_FRONTEND_API=ON \ @@ -74,5 +75,5 @@ cmake . -B build_x86_64 \ -DUSE_SYSTEM_ONNXRUNTIME=ON \ -DENABLE_ROCM=ON cmake --build build_x86_64 -cmake --install build_x86_64 +sudo cmake --install build_x86_64 --prefix /usr ``` \ No newline at end of file