Commit 21d47d0e authored by yuguo's avatar yuguo
Browse files

Oneflow 0.8 for DCU

parents
set(BUILD_CUDA YES CACHE BOOL "")
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "")
option(CUDA_STATIC "" ON)
if(BUILD_CUDA)
if((NOT CUDA_STATIC) OR BUILD_SHARED_LIBS)
set(OF_CUDA_LINK_DYNAMIC_LIBRARY ON)
else()
set(OF_CUDA_LINK_DYNAMIC_LIBRARY OFF)
endif()
if(DEFINED CUDA_TOOLKIT_ROOT_DIR)
message(WARNING "CUDA_TOOLKIT_ROOT_DIR is deprecated, use CUDAToolkit_ROOT instead")
set(CUDAToolkit_ROOT ${CUDA_TOOLKIT_ROOT_DIR})
endif(DEFINED CUDA_TOOLKIT_ROOT_DIR)
find_package(CUDAToolkit REQUIRED)
message(STATUS "CUDAToolkit_FOUND: ${CUDAToolkit_FOUND}")
message(STATUS "CUDAToolkit_VERSION: ${CUDAToolkit_VERSION}")
message(STATUS "CUDAToolkit_VERSION_MAJOR: ${CUDAToolkit_VERSION_MAJOR}")
message(STATUS "CUDAToolkit_VERSION_MINOR: ${CUDAToolkit_VERSION_MINOR}")
message(STATUS "CUDAToolkit_VERSION_PATCH: ${CUDAToolkit_VERSION_PATCH}")
message(STATUS "CUDAToolkit_BIN_DIR: ${CUDAToolkit_BIN_DIR}")
message(STATUS "CUDAToolkit_INCLUDE_DIRS: ${CUDAToolkit_INCLUDE_DIRS}")
message(STATUS "CUDAToolkit_LIBRARY_DIR: ${CUDAToolkit_LIBRARY_DIR}")
message(STATUS "CUDAToolkit_LIBRARY_ROOT: ${CUDAToolkit_LIBRARY_ROOT}")
message(STATUS "CUDAToolkit_TARGET_DIR: ${CUDAToolkit_TARGET_DIR}")
message(STATUS "CUDAToolkit_NVCC_EXECUTABLE: ${CUDAToolkit_NVCC_EXECUTABLE}")
if(CUDA_NVCC_GENCODES)
message(FATAL_ERROR "CUDA_NVCC_GENCODES is deprecated, use CMAKE_CUDA_ARCHITECTURES instead")
endif()
add_definitions(-DWITH_CUDA)
# NOTE: For some unknown reason, CUDAToolkit_VERSION may become empty when running cmake again
set(CUDA_VERSION ${CUDAToolkit_VERSION} CACHE STRING "")
if(NOT CUDA_VERSION)
message(FATAL_ERROR "CUDA_VERSION empty")
endif()
message(STATUS "CUDA_VERSION: ${CUDA_VERSION}")
if(OF_CUDA_LINK_DYNAMIC_LIBRARY)
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::cublas)
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::curand)
if(CUDA_VERSION VERSION_GREATER_EQUAL "10.1")
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::cublasLt)
endif()
if(CUDA_VERSION VERSION_GREATER_EQUAL "10.2")
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::nvjpeg)
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::nppc)
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::nppig)
endif()
else()
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::cublas_static)
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::curand_static)
if(CUDA_VERSION VERSION_GREATER_EQUAL "10.1")
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::cublasLt_static)
endif()
if(CUDA_VERSION VERSION_GREATER_EQUAL "10.2")
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::nvjpeg_static)
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::nppig_static)
# Must put nppc_static after nppig_static in CUDA 10.2
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::nppc_static)
list(APPEND VENDOR_CUDA_LIBRARIES CUDA::culibos)
endif()
endif()
message(STATUS "VENDOR_CUDA_LIBRARIES: ${VENDOR_CUDA_LIBRARIES}")
# add a cache entry if want to use a ccache/sccache wrapped nvcc
set(CMAKE_CUDA_COMPILER ${CUDAToolkit_NVCC_EXECUTABLE} CACHE STRING "")
message(STATUS "CMAKE_CUDA_COMPILER: ${CMAKE_CUDA_COMPILER}")
set(CMAKE_CUDA_STANDARD 14)
find_package(CUDNN REQUIRED)
endif()
function(GENERATE_FUNCTIONAL_API_AND_PYBIND11_CPP SRCS HDRS PYBIND_SRCS ROOT_DIR)
set(YAML_FILE ${PROJECT_SOURCE_DIR}/oneflow/core/functional/functional_api.yaml)
set(GENERATED_API_DIR oneflow/core/functional)
list(APPEND SRCS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.cpp)
list(APPEND HDRS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.h)
if(BUILD_PYTHON)
set(GENERATED_PYBIND_DIR oneflow/api/python/functional)
list(APPEND PYBIND_SRCS
${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/functional_api.yaml.pybind.cpp)
endif(BUILD_PYTHON)
if(BUILD_PYTHON)
add_custom_command(
OUTPUT "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.cpp"
"${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.h"
"${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/functional_api.yaml.pybind.cpp"
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_API_DIR}
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_PYBIND_DIR}
COMMAND ${CODEGEN_PYTHON_EXECUTABLE} ARGS
${PROJECT_SOURCE_DIR}/tools/functional/generate_functional_api.py --project_source_dir
${PROJECT_SOURCE_DIR} --export_pybind
DEPENDS ${CODEGEN_PYTHON_EXECUTABLE}
${PROJECT_SOURCE_DIR}/tools/functional/generate_functional_api.py
${PROJECT_SOURCE_DIR}/tools/functional/generator.py ${YAML_FILE}
VERBATIM)
else() # build_python
add_custom_command(
OUTPUT "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.cpp"
"${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/functional_api.yaml.h"
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_API_DIR}
COMMAND ${CODEGEN_PYTHON_EXECUTABLE} ARGS
${PROJECT_SOURCE_DIR}/tools/functional/generate_functional_api.py --project_source_dir
${PROJECT_SOURCE_DIR}
DEPENDS ${CODEGEN_PYTHON_EXECUTABLE}
${PROJECT_SOURCE_DIR}/tools/functional/generate_functional_api.py
${PROJECT_SOURCE_DIR}/tools/functional/generator.py ${YAML_FILE}
VERBATIM)
endif(BUILD_PYTHON)
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
if(BUILD_PYTHON)
set_source_files_properties(${${PYBIND_SRCS}} PROPERTIES GENERATED TRUE)
set(${PYBIND_SRCS} ${${PYBIND_SRCS}} PARENT_SCOPE)
endif(BUILD_PYTHON)
endfunction()
function(GENERATE_FUNCTIONAL_TENSOR_API_AND_PYBIND11_CPP SRCS HDRS PYBIND_SRCS ROOT_DIR)
set(YAML_FILE ${PROJECT_SOURCE_DIR}/oneflow/api/python/functional/tensor_api.yaml)
set(GENERATED_API_DIR oneflow/api/python/functional)
set(GENERATED_PYBIND_DIR oneflow/api/python/functional)
list(APPEND SRCS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/tensor_api.yaml.cpp)
list(APPEND HDRS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/tensor_api.yaml.h)
list(APPEND PYBIND_SRCS ${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/tensor_api.yaml.pybind.cpp)
add_custom_command(
OUTPUT "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/tensor_api.yaml.cpp"
"${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/tensor_api.yaml.h"
"${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/tensor_api.yaml.pybind.cpp"
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_API_DIR}
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_PYBIND_DIR}
COMMAND ${CODEGEN_PYTHON_EXECUTABLE} ARGS
${PROJECT_SOURCE_DIR}/tools/functional/generate_tensor_api.py --project_source_dir
${PROJECT_SOURCE_DIR}
DEPENDS ${CODEGEN_PYTHON_EXECUTABLE}
${PROJECT_SOURCE_DIR}/tools/functional/generate_tensor_api.py
${PROJECT_SOURCE_DIR}/tools/functional/generator.py ${YAML_FILE}
VERBATIM)
set_source_files_properties(${${SRCS}} ${${HDRS}} ${${PYBIND_SRCS}} PROPERTIES GENERATED TRUE)
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
set(${PYBIND_SRCS} ${${PYBIND_SRCS}} PARENT_SCOPE)
endfunction()
function(GENERATE_FUNCTIONAL_DISPATCH_STATEFUL_OPS_AND_PYBIND11_CPP SRCS HDRS PYBIND_SRCS ROOT_DIR)
set(YAML_FILE ${PROJECT_SOURCE_DIR}/oneflow/api/python/functional/dispatch_stateful_ops.yaml)
set(GENERATED_API_DIR oneflow/api/python/functional)
set(GENERATED_PYBIND_DIR oneflow/api/python/functional)
list(APPEND SRCS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/dispatch_stateful_ops.yaml.cpp)
list(APPEND HDRS ${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/dispatch_stateful_ops.yaml.h)
list(APPEND PYBIND_SRCS
${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/dispatch_stateful_ops.yaml.pybind.cpp)
add_custom_command(
OUTPUT "${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/dispatch_stateful_ops.yaml.cpp"
"${PROJECT_BINARY_DIR}/${GENERATED_API_DIR}/dispatch_stateful_ops.yaml.h"
"${PROJECT_BINARY_DIR}/${GENERATED_PYBIND_DIR}/dispatch_stateful_ops.yaml.pybind.cpp"
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_API_DIR}
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${GENERATED_PYBIND_DIR}
COMMAND ${CODEGEN_PYTHON_EXECUTABLE} ARGS
${PROJECT_SOURCE_DIR}/tools/functional/generate_dispatch_stateful_ops.py
--project_source_dir ${PROJECT_SOURCE_DIR}
DEPENDS ${CODEGEN_PYTHON_EXECUTABLE}
${PROJECT_SOURCE_DIR}/tools/functional/generate_dispatch_stateful_ops.py
${PROJECT_SOURCE_DIR}/tools/functional/generator.py ${YAML_FILE}
VERBATIM)
set_source_files_properties(${${SRCS}} ${${HDRS}} ${${PYBIND_SRCS}} PROPERTIES GENERATED TRUE)
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
set(${PYBIND_SRCS} ${${PYBIND_SRCS}} PARENT_SCOPE)
endfunction()
cmake_minimum_required(VERSION 3.5)
execute_process(
COMMAND git describe --tags --always --dirty=-snapshot
WORKING_DIRECTORY ${OF_GIT_VERSION_ROOT}
OUTPUT_VARIABLE GIT_REV
ERROR_QUIET)
if(("${GIT_REV}" STREQUAL "") OR (NOT BUILD_GIT_VERSION))
set(GIT_REV "N/A")
else()
string(STRIP "${GIT_REV}" GIT_REV)
endif()
set(VERSION_FILE_CONTENT
"namespace oneflow {\n\
\n\
const char* GetOneFlowGitVersion() {\n\
return \"${GIT_REV}\";\n\
}\n\
\n\
}\n")
if(EXISTS ${OF_GIT_VERSION_FILE})
file(READ ${OF_GIT_VERSION_FILE} VERSION_FILE_CONTENT_)
else()
set(VERSION_FILE_CONTENT_ "")
endif()
if(NOT "${VERSION_FILE_CONTENT}" STREQUAL "${VERSION_FILE_CONTENT_}")
file(WRITE ${OF_GIT_VERSION_FILE} "${VERSION_FILE_CONTENT}")
endif()
if(DEFINED ENV{ONEFLOW_INSTALL_PREFIX})
set(ONEFLOW_INSTALL_PREFIX $ENV{ONEFLOW_INSTALL_PREFIX})
else()
get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(ONEFLOW_INSTALL_PREFIX "${CMAKE_CURRENT_LIST_DIR}/../" ABSOLUTE)
endif()
set(ONEFLOW_INCLUDE_DIRS ${ONEFLOW_INSTALL_PREFIX}/include)
find_library(ONEFLOW_LIBRARY NAMES oneflow_cpp PATHS ${ONEFLOW_INSTALL_PREFIX}/lib REQUIRED)
if(NOT TARGET OneFlow::liboneflow)
add_library(OneFlow::liboneflow INTERFACE IMPORTED)
set_property(TARGET OneFlow::liboneflow PROPERTY INTERFACE_LINK_LIBRARIES ${ONEFLOW_LIBRARY})
set_property(TARGET OneFlow::liboneflow PROPERTY INTERFACE_INCLUDE_DIRECTORIES
${ONEFLOW_INCLUDE_DIRS})
endif()
This diff is collapsed.
This diff is collapsed.
function(RELATIVE_PROTOBUF_GENERATE_CPP SRCS HDRS ROOT_DIR)
if(NOT ARGN)
message(SEND_ERROR "Error: RELATIVE_PROTOBUF_GENERATE_CPP() called without any proto files")
return()
endif()
set(${SRCS})
set(${HDRS})
foreach(FIL ${ARGN})
set(ABS_FIL ${ROOT_DIR}/${FIL})
get_filename_component(FIL_WE ${FIL} NAME_WE)
get_filename_component(FIL_DIR ${ABS_FIL} PATH)
file(RELATIVE_PATH REL_DIR ${ROOT_DIR} ${FIL_DIR})
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.cc")
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.h")
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.cc"
"${CMAKE_CURRENT_BINARY_DIR}/${REL_DIR}/${FIL_WE}.pb.h"
"${of_proto_python_dir}/${REL_DIR}/${FIL_WE}_pb2.py"
COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} -I
${ROOT_DIR} ${ABS_FIL} -I ${PROTOBUF_INCLUDE_DIR}
COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ARGS --python_out ${of_proto_python_dir} -I ${ROOT_DIR}
${ABS_FIL} -I ${PROTOBUF_INCLUDE_DIR}
COMMAND ${CMAKE_COMMAND} ARGS -E touch ${of_proto_python_dir}/${REL_DIR}/__init__.py
DEPENDS ${ABS_FIL} protobuf
COMMENT "Running Protocol Buffer Compiler on ${FIL}"
VERBATIM)
endforeach()
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
endfunction()
include(FetchContent)
set_mirror_url_with_hash(PYBIND11_URL https://github.com/pybind/pybind11/archive/v2.7.0.zip
267807f790ef598ef912a79aceefdc10)
FetchContent_Declare(pybind11 URL ${PYBIND11_URL} URL_HASH MD5=${PYBIND11_URL_HASH})
FetchContent_MakeAvailable(pybind11)
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment