diff --git a/CMakeLists.txt b/CMakeLists.txt index 4fcdf1eba09..f3a5655c5e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -171,7 +171,8 @@ cmake_dependent_option( USE_STATIC_CUDNN "Use cuDNN static libraries" OFF "USE_CUDNN" OFF) option(USE_FBGEMM "Use FBGEMM (quantized 8-bit server operators)" ON) -option(USE_KINETO "Use Kineto profiling library" OFF) +option(USE_KINETO "Use Kineto profiling library" ON) +option(USE_CUPTI_SO "Use CUPTI as a shared library" OFF) option(USE_FAKELOWP "Use FakeLowp operators" OFF) option(USE_FFMPEG "Use ffmpeg" OFF) option(USE_GFLAGS "Use GFLAGS" OFF) @@ -545,31 +546,12 @@ if(USE_FBGEMM AND ((CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND CMAKE_SIZEOF_VO set(USE_FBGEMM OFF) endif() -if(USE_KINETO AND INTERN_BUILD_MOBILE) - message(STATUS "Not using libkineto in a mobile build.") - set(USE_KINETO OFF) -endif() - -if(USE_KINETO AND (NOT USE_CUDA)) - message(STATUS "Not using libkineto in a non-CUDA build.") - set(USE_KINETO OFF) -endif() - -if(USE_KINETO AND MSVC) - message(STATUS "Not using libkineto in a Windows build.") - set(USE_KINETO OFF) -endif() - include(cmake/Dependencies.cmake) if(USE_FBGEMM) string(APPEND CMAKE_CXX_FLAGS " -DUSE_FBGEMM") endif() -if(USE_KINETO) - string(APPEND CMAKE_CXX_FLAGS " -DUSE_KINETO") -endif() - if(USE_QNNPACK) string(APPEND CMAKE_CXX_FLAGS " -DUSE_QNNPACK") endif() diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index e5fed395801..0ee503daa73 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -1787,43 +1787,68 @@ list(APPEND Caffe2_DEPENDENCY_LIBS fmt::fmt-header-only) set(BUILD_SHARED_LIBS ${TEMP_BUILD_SHARED_LIBS} CACHE BOOL "Build shared libs" FORCE) # ---[ Kineto +if(USE_KINETO AND INTERN_BUILD_MOBILE) + message(STATUS "Not using libkineto in a mobile build.") + set(USE_KINETO OFF) +endif() +if(USE_KINETO AND (NOT USE_CUDA)) + message(STATUS "Not using libkineto in a non-CUDA build.") + set(USE_KINETO OFF) +endif() +if(USE_KINETO AND MSVC) + message(STATUS "Not using libkineto in a Windows build.") + set(USE_KINETO OFF) +endif() if(USE_KINETO) - if(USE_KINETO AND NOT TARGET kineto) - set(CAFFE2_THIRD_PARTY_ROOT "${PROJECT_SOURCE_DIR}/third_party" CACHE STRING "") - set(KINETO_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/kineto/libkineto" CACHE STRING "") - set(KINETO_BUILD_TESTS OFF CACHE BOOL "") - set(KINETO_LIBRARY_TYPE "static" CACHE STRING "") - set(CUDA_SOURCE_DIR "${CUDA_TOOLKIT_ROOT_DIR}" CACHE STRING "") + set(CAFFE2_THIRD_PARTY_ROOT "${PROJECT_SOURCE_DIR}/third_party" CACHE STRING "") + set(KINETO_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/kineto/libkineto" CACHE STRING "") + set(KINETO_BUILD_TESTS OFF CACHE BOOL "") + set(KINETO_LIBRARY_TYPE "static" CACHE STRING "") + set(CUDA_SOURCE_DIR "${CUDA_TOOLKIT_ROOT_DIR}" CACHE STRING "") - message(STATUS "Configuring Kineto dependency:") - message(STATUS " KINETO_SOURCE_DIR = ${KINETO_SOURCE_DIR}") - message(STATUS " KINETO_BUILD_TESTS = ${KINETO_BUILD_TESTS}") - message(STATUS " KINETO_LIBRARY_TYPE = ${KINETO_LIBRARY_TYPE}") - message(STATUS " CUDA_SOURCE_DIR = ${CUDA_SOURCE_DIR}") + message(STATUS "Configuring Kineto dependency:") + message(STATUS " KINETO_SOURCE_DIR = ${KINETO_SOURCE_DIR}") + message(STATUS " KINETO_BUILD_TESTS = ${KINETO_BUILD_TESTS}") + message(STATUS " KINETO_LIBRARY_TYPE = ${KINETO_LIBRARY_TYPE}") + message(STATUS " CUDA_SOURCE_DIR = ${CUDA_SOURCE_DIR}") - if(EXISTS ${CUDA_SOURCE_DIR}/extras/CUPTI/include) - set(CUPTI_INCLUDE_DIR "${CUDA_SOURCE_DIR}/extras/CUPTI/include") - elseif(EXISTS ${CUDA_SOURCE_DIR}/include/cupti.h) - set(CUPTI_INCLUDE_DIR "${CUDA_SOURCE_DIR}/include") + if(EXISTS ${CUDA_SOURCE_DIR}/extras/CUPTI/lib64/libcupti_static.a) + set(CUDA_cupti_LIBRARY "${CUDA_SOURCE_DIR}/extras/CUPTI/lib64/libcupti_static.a") + elseif(EXISTS ${CUDA_SOURCE_DIR}/lib64/libcupti_static.a) + set(CUDA_cupti_LIBRARY "${CUDA_SOURCE_DIR}/lib64/libcupti_static.a") + elseif(USE_CUPTI_SO) + if(EXISTS ${CUDA_SOURCE_DIR}/extras/CUPTI/lib64/libcupti.so) + set(CUDA_cupti_LIBRARY "${CUDA_SOURCE_DIR}/extras/CUPTI/lib64/libcupti.so") + elseif(EXISTS ${CUDA_SOURCE_DIR}/lib64/libcupti.so) + set(CUDA_cupti_LIBRARY "${CUDA_SOURCE_DIR}/lib64/libcupti.so") endif() - - if((NOT DEFINED CUDA_cupti_LIBRARY) OR (${CUDA_cupti_LIBRARY} STREQUAL "CUDA_cupti_LIBRARY-NOTFOUND")) - if(EXISTS ${CUDA_SOURCE_DIR}/extras/CUPTI/lib64/libcupti_static.a) - set(CUDA_cupti_LIBRARY "${CUDA_SOURCE_DIR}/extras/CUPTI/lib64/libcupti_static.a") - elseif(EXISTS ${CUDA_SOURCE_DIR}/lib64/libcupti_static.a) - set(CUDA_cupti_LIBRARY "${CUDA_SOURCE_DIR}/lib64/libcupti_static.a") - elseif(EXISTS ${CUDA_SOURCE_DIR}/extras/CUPTI/lib64/libcupti.so) - set(CUDA_cupti_LIBRARY "${CUDA_SOURCE_DIR}/extras/CUPTI/lib64/libcupti.so") - elseif(EXISTS ${CUDA_SOURCE_DIR}/lib64/libcupti.so) - set(CUDA_cupti_LIBRARY "${CUDA_SOURCE_DIR}/lib64/libcupti.so") - endif() - endif() - message(STATUS " CUDA_cupti_LIBRARY = ${CUDA_cupti_LIBRARY}") - message(STATUS " CUPTI_INCLUDE_DIR = ${CUPTI_INCLUDE_DIR}") - - add_subdirectory("${KINETO_SOURCE_DIR}") - message(STATUS "Configured Kineto as a dependency.") endif() - list(APPEND Caffe2_DEPENDENCY_LIBS kineto) + if(EXISTS ${CUDA_SOURCE_DIR}/extras/CUPTI/include) + set(CUPTI_INCLUDE_DIR "${CUDA_SOURCE_DIR}/extras/CUPTI/include") + elseif(EXISTS ${CUDA_SOURCE_DIR}/include/cupti.h) + set(CUPTI_INCLUDE_DIR "${CUDA_SOURCE_DIR}/include") + endif() + + set(FOUND_CUPTI FALSE) + if((DEFINED CUPTI_INCLUDE_DIR) AND (DEFINED CUDA_cupti_LIBRARY)) + if((CUDA_cupti_LIBRARY MATCHES "libcupti_static.a") OR ((CUDA_cupti_LIBRARY MATCHES "libcupti.so") AND (USE_CUPTI_SO))) + set(FOUND_CUPTI TRUE) + endif() + endif() + + if(FOUND_CUPTI) + message(STATUS " CUDA_cupti_LIBRARY = ${CUDA_cupti_LIBRARY}") + message(STATUS " CUPTI_INCLUDE_DIR = ${CUPTI_INCLUDE_DIR}") + if(NOT TARGET kineto) + add_subdirectory("${KINETO_SOURCE_DIR}") + endif() + string(APPEND CMAKE_CXX_FLAGS " -DUSE_KINETO") + list(APPEND Caffe2_DEPENDENCY_LIBS kineto) + message(STATUS "Configured Kineto") + else() + message(STATUS "Could not find CUPTI library, skipping Kineto build") + set(USE_KINETO OFF) + endif() endif() + diff --git a/setup.py b/setup.py index 50983a89ad5..42fa68e94de 100644 --- a/setup.py +++ b/setup.py @@ -33,8 +33,8 @@ # USE_FBGEMM=0 # disables the FBGEMM build # -# USE_KINETO=1 -# enables experimental usage of libkineto +# USE_KINETO=0 +# disables usage of libkineto library for profiling # # USE_NUMPY=0 # disables the NumPy build diff --git a/torch/csrc/autograd/profiler_kineto.cpp b/torch/csrc/autograd/profiler_kineto.cpp index 1c3c351eeb0..df4917b3520 100644 --- a/torch/csrc/autograd/profiler_kineto.cpp +++ b/torch/csrc/autograd/profiler_kineto.cpp @@ -7,6 +7,7 @@ #ifdef USE_KINETO #include +#include #include #endif @@ -241,7 +242,7 @@ void prepareProfiler( } if (!libkineto::api().isProfilerRegistered()) { - libkineto_init(); + libkineto_init(!torch::cuda::is_available()); libkineto::api().suppressLogMessages(); }