diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e9aee76..11842b2a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,7 @@ message(STATUS "Build configuration: " ${CMAKE_BUILD_TYPE}) # projects included in this one by FetchContent. # option(TRITON_DALI_SKIP_DOWNLOAD "Don't download DALI. Use the version provided in the system" OFF) +option(TRITON_DALI_BUILD_IN_TRITON "Turn this option on, if the DALI Backend is built inside Triton docker container." OFF) option(TRITON_ENABLE_GPU "Enable GPU support in backend" ON) option(TRITON_ENABLE_STATS "Include statistics collections in backend" ON) option(WERROR "Trigger error on warnings" OFF) diff --git a/cmake/dali.cmake b/cmake/dali.cmake index 4791ae97..540de770 100644 --- a/cmake/dali.cmake +++ b/cmake/dali.cmake @@ -20,28 +20,30 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # Using DALI's installed whl, find the location of DALI libs and DALI include dirs -function(get_dali_paths DALI_INCLUDE_DIR_VAR DALI_LIB_DIR_VAR DALI_LIBRARIES_VAR) +function(get_dali_paths PYTHON_BINARY DALI_INCLUDE_DIR_VAR DALI_LIB_DIR_VAR DALI_LIBRARIES_VAR) execute_process( - COMMAND python3 -c "import nvidia.dali as dali; print(dali.sysconfig.get_include_dir())" + COMMAND ${PYTHON_BINARY} -c "import nvidia.dali as dali; print(dali.sysconfig.get_include_dir())" OUTPUT_VARIABLE DALI_INCLUDE_DIR RESULT_VARIABLE INCLUDE_DIR_RESULT) - string(STRIP ${DALI_INCLUDE_DIR} DALI_INCLUDE_DIR) if (${INCLUDE_DIR_RESULT} EQUAL "1") message(FATAL_ERROR "Failed to get include paths for DALI. Make sure that DALI is installed.") endif () + string(STRIP ${DALI_INCLUDE_DIR} DALI_INCLUDE_DIR) + execute_process( - COMMAND python3 -c "import nvidia.dali as dali; print(dali.sysconfig.get_lib_dir())" + COMMAND ${PYTHON_BINARY} -c "import nvidia.dali as dali; print(dali.sysconfig.get_lib_dir())" OUTPUT_VARIABLE DALI_LIB_DIR RESULT_VARIABLE LIB_DIR_RESULT) - string(STRIP ${DALI_LIB_DIR} DALI_LIB_DIR) if (${LIB_DIR_RESULT} EQUAL "1") message(FATAL_ERROR "Failed to get library paths for DALI. Make sure that DALI is installed.") endif () + string(STRIP ${DALI_LIB_DIR} DALI_LIB_DIR) + set(${DALI_INCLUDE_DIR_VAR} ${DALI_INCLUDE_DIR} PARENT_SCOPE) set(${DALI_LIB_DIR_VAR} ${DALI_LIB_DIR} PARENT_SCOPE) set(${DALI_LIBRARIES_VAR} dali dali_core dali_kernels dali_operators PARENT_SCOPE) diff --git a/docker/Dockerfile.devel b/docker/Dockerfile.devel index 99da63e4..e98612b2 100644 --- a/docker/Dockerfile.devel +++ b/docker/Dockerfile.devel @@ -101,6 +101,7 @@ RUN mkdir build_in_ci && cd build_in_ci && \ -D CMAKE_BUILD_TYPE=Debug \ -D TRITON_BACKEND_API_VERSION=${TRITON_BACKEND_API_VERSION} \ -D TRITON_DALI_SKIP_DOWNLOAD=ON \ + -D TRITON_DALI_BUILD_IN_TRITON=ON \ .. && \ make -j"$(grep ^processor /proc/cpuinfo | wc -l)" install diff --git a/docker/Dockerfile.release b/docker/Dockerfile.release index 70d9912a..079ef626 100644 --- a/docker/Dockerfile.release +++ b/docker/Dockerfile.release @@ -102,6 +102,8 @@ RUN set -ex && mkdir build_in_ci && cd build_in_ci && -D DALI_EXTRA_INDEX_URL=${DALI_DOWNLOAD_EXTRA_INDEX_URL}} \ -D DALI_VERSION=${DALI_DOWNLOAD_VERSION} \ -D DALI_DOWNLOAD_EXTRA_OPTIONS="${DALI_DOWNLOAD_EXTRA_OPTIONS}" \ + -D TRITON_DALI_SKIP_DOWNLOAD=OFF \ + -D TRITON_DALI_BUILD_IN_TRITON=ON \ .. && \ make -j"$(grep ^processor /proc/cpuinfo | wc -l)" install diff --git a/src/dali_executor/CMakeLists.txt b/src/dali_executor/CMakeLists.txt index bb3b5eed..84e84e9c 100644 --- a/src/dali_executor/CMakeLists.txt +++ b/src/dali_executor/CMakeLists.txt @@ -39,6 +39,9 @@ endif() configure_file(${tritondalibackend_SOURCE_DIR}/cmake/dalienv.yml.in dalienv.yml @ONLY) +set(CONDA_ENV_PREFIX ${CMAKE_INSTALL_PREFIX}/backends/dali/conda/envs) +set(CONDA_ENV_PATH ${CONDA_ENV_PREFIX}/dalienv) + add_custom_command( OUTPUT dali_env COMMAND @@ -48,7 +51,11 @@ add_custom_command( ) if(${TRITON_DALI_SKIP_DOWNLOAD}) - get_dali_paths(DALI_INCLUDE_DIR DALI_LIB_DIR DALI_LIBRARIES) + if(${TRITON_DALI_BUILD_IN_TRITON}) + get_dali_paths("${CONDA_ENV_PATH}/bin/python3" DALI_INCLUDE_DIR DALI_LIB_DIR DALI_LIBRARIES) + else() + get_dali_paths("python3" DALI_INCLUDE_DIR DALI_LIB_DIR DALI_LIBRARIES) + endif() else() set(DALI_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/dalienv/lib/python${PYTHON_VERSION}/site-packages/nvidia/dali/include) set(DALI_LIB_DIR ${CMAKE_CURRENT_BINARY_DIR}/dalienv/lib/python${PYTHON_VERSION}/site-packages/nvidia/dali) @@ -84,7 +91,7 @@ target_link_libraries(dali_executor PUBLIC target_compile_definitions(dali_executor PUBLIC) if (NOT ${TRITON_DALI_SKIP_DOWNLOAD}) - install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dalienv - DESTINATION ${CMAKE_INSTALL_PREFIX}/backends/dali/conda/envs + install(DIRECTORY ${CONDA_ENV_PATH} + DESTINATION ${CONDA_ENV_PREFIX} USE_SOURCE_PERMISSIONS) endif ()