Skip to content

Commit 1f5841c

Browse files
authored
[ROCM] update cmake and dockerfile, test=develop (PaddlePaddle#30598)
1 parent cf9bdb9 commit 1f5841c

17 files changed

+391
-481
lines changed

CMakeLists.txt

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,9 @@ option(WITH_DISTRIBUTE "Compile with distributed support" OFF)
148148
option(WITH_BRPC_RDMA "Use brpc rdma as the rpc protocal" OFF)
149149
option(ON_INFER "Turn on inference optimization and inference-lib generation" OFF)
150150
################################ Internal Configurations #######################################
151-
option(WITH_ROCM_PLATFORM "Compile PaddlePaddle with ROCM platform" OFF)
152-
option(WITH_NV_JETSON "Compile PaddlePaddle with NV JETSON" OFF)
151+
option(WITH_ROCM "Compile PaddlePaddle with ROCM platform" OFF)
152+
option(WITH_RCCL "Compile PaddlePaddle with RCCL support" OFF)
153+
option(WITH_NV_JETSON "Compile PaddlePaddle with NV JETSON" OFF)
153154
option(WITH_PROFILER "Compile PaddlePaddle with GPU profiler and gperftools" OFF)
154155
option(WITH_COVERAGE "Compile PaddlePaddle with code coverage" OFF)
155156
option(WITH_INCREMENTAL_COVERAGE "Generate coverage reports only for incremental code" OFF)
@@ -278,19 +279,25 @@ include(configure) # add paddle env configuration
278279

279280
include_directories("${PADDLE_SOURCE_DIR}")
280281

281-
if(NOT DEFINED ENV{ROCM_PATH})
282-
set(ROCM_PATH "/opt/rocm" CACHE PATH "Path to which ROCm has been installed")
283-
set(HIP_PATH ${ROCM_PATH}/hip CACHE PATH "Path to which HIP has been installed")
284-
else()
285-
set(ROCM_PATH $ENV{ROCM_PATH} CACHE PATH "Path to which ROCm has been installed")
286-
set(HIP_PATH ${ROCM_PATH}/hip CACHE PATH "Path to which HIP has been installed")
282+
if(WITH_ROCM)
283+
include(hip)
284+
endif(WITH_ROCM)
285+
286+
if (NOT WITH_ROCM AND WITH_RCCL)
287+
MESSAGE(WARNING
288+
"Disable RCCL when compiling without GPU. Force WITH_RCCL=OFF.")
289+
set(WITH_NCCL OFF CACHE STRING
290+
"Disable RCCL when compiling without GPU" FORCE)
287291
endif()
288-
set(CMAKE_MODULE_PATH "${HIP_PATH}/cmake" ${CMAKE_MODULE_PATH})
289292

290-
if(WITH_ROCM_PLATFORM)
291-
find_package(HIP)
292-
include(hip)
293-
endif(WITH_ROCM_PLATFORM)
293+
if(WITH_RCCL)
294+
add_definitions("-DPADDLE_WITH_RCCL")
295+
include(rccl)
296+
else()
297+
if(WITH_ROCM)
298+
MESSAGE(WARNING "If the environment is multi-card, the WITH_RCCL option needs to be turned on, otherwise only a single card can be used.")
299+
endif()
300+
endif()
294301

295302
if(WITH_NV_JETSON)
296303
set(WITH_ARM ON CACHE STRING "Set WITH_ARM=ON when compiling WITH_NV_JETSON=ON." FORCE)

cmake/configure.cmake

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,10 @@ if(WITH_GPU)
130130
endif()
131131
include_directories(${TENSORRT_INCLUDE_DIR})
132132
endif()
133-
elseif(WITH_ROCM_PLATFORM)
133+
elseif(WITH_ROCM)
134134
add_definitions(-DPADDLE_WITH_HIP)
135+
add_definitions(-DEIGEN_USE_GPU)
135136
add_definitions(-DEIGEN_USE_HIP)
136-
add_definitions(-D__HIP_PLATFORM_HCC__)
137-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__HIP_PLATFORM_HCC__")
138-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__HIP_PLATFORM_HCC__")
139-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_HIP")
140-
set(THRUST_DEVICE_SYSTEM THRUST_DEVICE_SYSTEM_HIP)
141137
else()
142138
add_definitions(-DHPPL_STUB_FUNC)
143139
list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS cu)

cmake/flags.cmake

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ set(COMMON_FLAGS
155155
)
156156

157157
if(NOT APPLE)
158-
if((${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 8.0) OR (WITH_ROCM_PLATFORM AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 7.3))
158+
if((${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 8.0) OR (WITH_ROCM))
159159
set(COMMON_FLAGS
160160
${COMMON_FLAGS}
161161
-Wno-format-truncation # Warning in boost gcc 8.2
@@ -213,5 +213,17 @@ foreach(flag ${GPU_COMMON_FLAGS})
213213
safe_set_nvflag(${flag})
214214
endforeach()
215215

216-
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} ${SAFE_GPU_COMMON_FLAGS}")
216+
if(WITH_GPU)
217+
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} ${SAFE_GPU_COMMON_FLAGS}")
218+
endif()
219+
220+
if(WITH_ROCM)
221+
set(HIP_HIPCC_FLAGS "${HIP_HIPCC_FLAGS} ${SAFE_GPU_COMMON_FLAGS}")
222+
endif()
223+
224+
# Disable -Werror, otherwise the compile will fail for rocblas_gemm_ex
225+
if(WITH_ROCM)
226+
string (REPLACE "-Werror" "-Wno-error" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
227+
string (REPLACE "-Werror" "-Wno-error" CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
228+
endif()
217229

cmake/generic.cmake

Lines changed: 36 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,9 @@ function(cc_binary TARGET_NAME)
382382
endif()
383383
get_property(os_dependency_modules GLOBAL PROPERTY OS_DEPENDENCY_MODULES)
384384
target_link_libraries(${TARGET_NAME} ${os_dependency_modules})
385+
if(WITH_ROCM)
386+
target_link_libraries(${TARGET_NAME} ${ROCM_HIPRTC_LIB})
387+
endif()
385388

386389
check_coverage_opt(${TARGET_NAME} ${cc_binary_SRCS})
387390

@@ -403,6 +406,9 @@ function(cc_test_build TARGET_NAME)
403406
target_link_libraries(${TARGET_NAME} ${cc_test_DEPS} ${os_dependency_modules} paddle_gtest_main lod_tensor memory gtest gflags glog)
404407
add_dependencies(${TARGET_NAME} ${cc_test_DEPS} paddle_gtest_main lod_tensor memory gtest gflags glog)
405408
common_link(${TARGET_NAME})
409+
if(WITH_ROCM)
410+
target_link_libraries(${TARGET_NAME} ${ROCM_HIPRTC_LIB})
411+
endif()
406412
endif()
407413

408414
check_coverage_opt(${TARGET_NAME} ${cc_test_SRCS})
@@ -538,33 +544,24 @@ function(nv_test TARGET_NAME)
538544
endfunction(nv_test)
539545

540546
function(hip_library TARGET_NAME)
541-
if (WITH_ROCM_PLATFORM)
547+
if (WITH_ROCM)
542548
set(options STATIC static SHARED shared)
543549
set(oneValueArgs "")
544550
set(multiValueArgs SRCS DEPS)
545551
cmake_parse_arguments(hip_library "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
546-
set(_sources ${hip_library_SRCS})
547-
set_source_files_properties(${_sources} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
548-
HIP_PREPARE_TARGET_COMMANDS(${TARGET_NAME} OBJ _generated_files _source_files ${_sources} HIPCC_OPTIONS ${_hipcc_options} HCC_OPTIONS ${_hcc_options} NVCC_OPTIONS ${_nvcc_options})
549-
if(_source_files)
550-
list(REMOVE_ITEM _sources ${_source_files})
551-
endif()
552552
if(hip_library_SRCS)
553+
# FindHIP.cmake defined hip_add_library, HIP_SOURCE_PROPERTY_FORMAT is requried if no .cu files found
554+
if(NOT ${CMAKE_CURRENT_SOURCE_DIR} MATCHES ".*/operators")
555+
set_source_files_properties(${hip_library_SRCS} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
556+
endif()
553557
if (hip_library_SHARED OR hip_library_shared) # build *.so
554-
add_library(${TARGET_NAME} SHARED ${_cmake_options} ${_generated_files} ${_sources})
555-
set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE HIP)
558+
hip_add_library(${TARGET_NAME} SHARED ${hip_library_SRCS})
556559
else()
557-
add_library(${TARGET_NAME} STATIC ${_cmake_options} ${_generated_files} ${_sources})
558-
set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
559-
target_link_libraries(${TARGET_NAME} ${ROCM_PATH}/hip/lib/libhip_hcc.so)
560+
hip_add_library(${TARGET_NAME} STATIC ${hip_library_SRCS})
560561
find_fluid_modules(${TARGET_NAME})
561562
endif()
562-
if("${hip_library_DEPS}" MATCHES "ARCHIVE_START")
563-
# Support linking flags: --whole-archive (Linux) / -force_load (MacOS).
564-
# WARNING: Please don't use ARCHIVE_START&ARCHIVE_END if TARGET_NAME will be linked by other libraries.
565-
target_circle_link_libraries(${TARGET_NAME} ${hip_library_DEPS})
566-
list(REMOVE_ITEM hip_library_DEPS ARCHIVE_START ARCHIVE_END)
567-
else()
563+
if (hip_library_DEPS)
564+
add_dependencies(${TARGET_NAME} ${hip_library_DEPS})
568565
target_link_libraries(${TARGET_NAME} ${hip_library_DEPS})
569566
endif()
570567
# cpplint code style
@@ -574,107 +571,57 @@ function(hip_library TARGET_NAME)
574571
list(APPEND hip_library_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/${source}.h)
575572
endif()
576573
endforeach()
577-
578-
check_coverage_opt(${TARGET_NAME} ${hip_library_SRCS})
579-
580574
else(hip_library_SRCS)
581575
if (hip_library_DEPS)
582-
merge_static_libs(${TARGET_NAME} ${hip_library_DEPS})
576+
list(REMOVE_DUPLICATES hip_library_DEPS)
577+
generate_dummy_static_lib(LIB_NAME ${TARGET_NAME} FILE_PATH ${target_SRCS} GENERATOR "generic.cmake:hip_library")
578+
579+
target_link_libraries(${TARGET_NAME} ${hip_library_DEPS})
580+
add_dependencies(${TARGET_NAME} ${hip_library_DEPS})
583581
else()
584-
message(FATAL "Please specify source file or library in nv_library.")
582+
message(FATAL "Please specify source file or library in hip_library.")
585583
endif()
586584
endif(hip_library_SRCS)
587585
endif()
588586
endfunction(hip_library)
589587

590-
function(hip_library_ops TARGET_NAME)
591-
if (WITH_ROCM_PLATFORM)
592-
set(options STATIC static SHARED shared)
593-
set(oneValueArgs "")
594-
set(multiValueArgs SRCS DEPS)
595-
cmake_parse_arguments(hip_library_ops "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
596-
set(_sources ${hip_library_ops_SRCS})
597-
HIP_PREPARE_TARGET_COMMANDS(${TARGET_NAME} OBJ _generated_files _source_files ${_sources} HIPCC_OPTIONS ${_hipcc_options} HCC_OPTIONS ${_hcc_options} NVCC_OPTIONS ${_nvcc_options})
598-
if(_source_files)
599-
list(REMOVE_ITEM _sources ${_source_files})
600-
endif()
601-
if(hip_library_ops_SRCS)
602-
if (hip_library_ops_SHARED OR hip_library_ops_shared) # build *.so
603-
add_library(${TARGET_NAME} SHARED ${_cmake_options} ${_generated_files} ${_sources})
604-
set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE HIP)
605-
else()
606-
add_library(${TARGET_NAME} STATIC ${_cmake_options} ${_generated_files} ${_sources})
607-
set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
608-
target_link_libraries(${TARGET_NAME} ${ROCM_PATH}/hip/lib/libhip_hcc.so)
609-
find_fluid_modules(${TARGET_NAME})
610-
endif()
611-
if("${hip_library_ops_DEPS}" MATCHES "ARCHIVE_START")
612-
# Support linking flags: --whole-archive (Linux) / -force_load (MacOS).
613-
# WARNING: Please don't use ARCHIVE_START&ARCHIVE_END if TARGET_NAME will be linked by other libraries.
614-
target_circle_link_libraries(${TARGET_NAME} ${hip_library_ops_DEPS})
615-
list(REMOVE_ITEM hip_library_ops_DEPS ARCHIVE_START ARCHIVE_END)
616-
else()
617-
target_link_libraries(${TARGET_NAME} ${hip_library_ops_DEPS})
618-
endif()
619-
# cpplint code style
620-
foreach(source_file ${hip_library_ops_SRCS})
621-
string(REGEX REPLACE "\\.[^.]*$" "" source ${source_file})
622-
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${source}.h)
623-
list(APPEND hip_library_ops_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/${source}.h)
624-
endif()
625-
endforeach()
626-
else(hip_library_ops_SRCS)
627-
if (hip_library_ops_DEPS)
628-
merge_static_libs(${TARGET_NAME} ${hip_library_ops_DEPS})
629-
else()
630-
message(FATAL "Please specify source file or library in nv_library.")
631-
endif()
632-
endif(hip_library_ops_SRCS)
633-
endif()
634-
endfunction(hip_library_ops)
635-
636588
function(hip_binary TARGET_NAME)
637-
if (WITH_ROCM_PLATFORM)
589+
if (WITH_ROCM)
638590
set(options "")
639591
set(oneValueArgs "")
640592
set(multiValueArgs SRCS DEPS)
641593
cmake_parse_arguments(hip_binary "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
642-
set_source_files_properties(${_sources} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
594+
# FindHIP.cmake defined hip_add_executable, HIP_SOURCE_PROPERTY_FORMAT is requried for .cc files
643595
hip_add_executable(${TARGET_NAME} ${hip_binary_SRCS})
644596
if(hip_binary_DEPS)
645597
target_link_libraries(${TARGET_NAME} ${hip_binary_DEPS})
646598
add_dependencies(${TARGET_NAME} ${hip_binary_DEPS})
647599
common_link(${TARGET_NAME})
648600
endif()
649601
endif()
650-
651-
check_coverage_opt(${TARGET_NAME} ${hip_binary_SRCS})
652-
653602
endfunction(hip_binary)
654603

655604
function(hip_test TARGET_NAME)
656-
if (WITH_ROCM_PLATFORM AND WITH_TESTING)
657-
set(options "")
605+
# The environment variable `CI_SKIP_CPP_TEST` is used to skip the compilation
606+
# and execution of test in CI. `CI_SKIP_CPP_TEST` is set to ON when no files
607+
# other than *.py are modified.
608+
if (WITH_ROCM AND WITH_TESTING AND NOT "$ENV{CI_SKIP_CPP_TEST}" STREQUAL "ON")
658609
set(oneValueArgs "")
659610
set(multiValueArgs SRCS DEPS)
660611
cmake_parse_arguments(hip_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
661-
set(_sources ${hip_test_SRCS})
662-
set_source_files_properties(${_sources} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
663-
HIP_PREPARE_TARGET_COMMANDS(${TARGET_NAME} OBJ _generated_files _source_files ${_sources} HIPCC_OPTIONS ${_hipcc_options} HCC_OPTIONS ${_hcc_options} NVCC_OPTIONS ${_nvcc_options})
664-
if(_source_files)
665-
list(REMOVE_ITEM _sources ${_source_files})
666-
endif()
667-
add_executable(${TARGET_NAME} ${_cmake_options} ${_generated_files} ${_sources})
668-
set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE HIP)
612+
# FindHIP.cmake defined hip_add_executable, HIP_SOURCE_PROPERTY_FORMAT is requried for .cc files
613+
hip_add_executable(${TARGET_NAME} ${hip_test_SRCS})
614+
# "-pthread -ldl -lrt" is defined in CMAKE_CXX_LINK_EXECUTABLE
615+
target_link_options(${TARGET_NAME} PRIVATE -pthread -ldl -lrt)
669616
get_property(os_dependency_modules GLOBAL PROPERTY OS_DEPENDENCY_MODULES)
670-
target_link_libraries(${TARGET_NAME} ${hip_test_DEPS} paddle_gtest_main memory gtest gflags ${os_dependency_modules})
671-
add_dependencies(${TARGET_NAME} ${hip_test_DEPS} paddle_gtest_main memory gtest gflags)
617+
target_link_libraries(${TARGET_NAME} ${hip_test_DEPS} paddle_gtest_main lod_tensor memory gtest gflags glog ${os_dependency_modules})
618+
add_dependencies(${TARGET_NAME} ${hip_test_DEPS} paddle_gtest_main lod_tensor memory gtest gflags glog)
672619
common_link(${TARGET_NAME})
673620
add_test(${TARGET_NAME} ${TARGET_NAME})
621+
set_property(TEST ${TARGET_NAME} PROPERTY ENVIRONMENT FLAGS_cpu_deterministic=true)
622+
set_property(TEST ${TARGET_NAME} PROPERTY ENVIRONMENT FLAGS_init_allocated_mem=true)
623+
set_property(TEST ${TARGET_NAME} PROPERTY ENVIRONMENT FLAGS_cudnn_deterministic=true)
674624
endif()
675-
676-
check_coverage_opt(${TARGET_NAME} ${hip_test_SRCS})
677-
678625
endfunction(hip_test)
679626

680627
function(go_library TARGET_NAME)

0 commit comments

Comments
 (0)