diff --git a/cmake/third_party/FindCUDNN.cmake b/cmake/third_party/FindCUDNN.cmake index 75b772ee726704017db5445915f989dfe4fd12e2..55205e33d8d8df3fe3ef42f3ac93a320d1c9e462 100644 --- a/cmake/third_party/FindCUDNN.cmake +++ b/cmake/third_party/FindCUDNN.cmake @@ -16,7 +16,7 @@ set(CUDNN_ROOT_DIR "" CACHE PATH "Folder contains NVIDIA cuDNN") option(CUDNN_STATIC "Look for static cuDNN" ON) if(BUILD_SHARED_LIBS) set(CUDNN_STATIC OFF) - endif() +endif() if (CUDNN_STATIC) set(__cudnn_libname "libcudnn_static.a") else() @@ -27,6 +27,7 @@ find_path(CUDNN_INCLUDE_DIR cudnn.h HINTS ${CUDNN_ROOT_DIR} ${CUDA_TOOLKIT_ROOT_DIR} PATH_SUFFIXES cuda/include include) +unset(CUDNN_LIBRARY CACHE) find_library(CUDNN_LIBRARY ${__cudnn_libname} HINTS ${CUDNN_ROOT_DIR} ${CUDA_TOOLKIT_ROOT_DIR} PATH_SUFFIXES lib lib64 cuda/lib cuda/lib64 lib/x64) @@ -61,7 +62,17 @@ if(CUDNN_FOUND) endif() set(CUDNN_INCLUDE_DIRS ${CUDNN_INCLUDE_DIR}) - set(CUDNN_LIBRARIES ${CUDNN_LIBRARY}) - message(STATUS "Found cuDNN: v${CUDNN_VERSION} (include: ${CUDNN_INCLUDE_DIR}, library: ${CUDNN_LIBRARY})") + + if(NOT CUDNN_STATIC AND CUDNN_VERSION_MAJOR GREATER_EQUAL 8) + # skipping: libcudnn_adv_infer.so libcudnn_adv_train.so + set(CUDNN_DYNAMIC_NAMES libcudnn_cnn_infer.so libcudnn_cnn_train.so libcudnn_ops_infer.so libcudnn_ops_train.so) + get_filename_component(CUDNN_LIBRARY_DIRECTORY ${CUDNN_LIBRARY} DIRECTORY) + foreach(CUDNN_DYNAMIC_NAME ${CUDNN_DYNAMIC_NAMES}) + list(APPEND CUDNN_LIBRARIES ${CUDNN_LIBRARY_DIRECTORY}/${CUDNN_DYNAMIC_NAME}) + endforeach() + else() + set(CUDNN_LIBRARIES ${CUDNN_LIBRARY}) + endif() + message(STATUS "Found cuDNN: v${CUDNN_VERSION} (include: ${CUDNN_INCLUDE_DIR}, library: ${CUDNN_LIBRARIES})") mark_as_advanced(CUDNN_ROOT_DIR CUDNN_LIBRARY CUDNN_INCLUDE_DIR) endif() diff --git a/docker/package/manylinux/Dockerfile b/docker/package/manylinux/Dockerfile index 3667ee6e81a90ce4721d6cef758ec9a44ee6bd2a..d4d21c01c520b1daa5b85e98069eaa99e74d8d61 100644 --- a/docker/package/manylinux/Dockerfile +++ b/docker/package/manylinux/Dockerfile @@ -37,8 +37,11 @@ RUN yum-config-manager --add-repo https://yum.repos.intel.com/oneapi && \ RUN /opt/python/cp35-cp35m/bin/pip install $pip_args -U cmake==3.18.4.post1 && ln -s /opt/_internal/cpython-3.5.9/bin/cmake /usr/bin/cmake -# overwrite patchelf to fix "maximum size exceed" problem -RUN mkdir -p /tmp && curl -L -o 0.11.zip https://github.com/NixOS/patchelf/archive/0.11.zip && unzip 0.11.zip && cd patchelf-0.11 && sed -i 's/32/64/g' src/patchelf.cc && ./bootstrap.sh && ./configure && make -j`nproc` && make install && cd .. && rm -rf patchelf-0.11 0.11.zip +RUN mkdir -p /tmp && cd /tmp && \ + curl -L -o patchelf-src.zip \ + https://github.com/Oneflow-Inc/patchelf/archive/64bf5388ef7d45d3697c4aadbd3f5d7d68a22aa3.zip && \ + unzip patchelf-src.zip && cd patchelf-* && ./bootstrap.sh && ./configure && make -j`nproc` && \ + make install && cd .. && rm -rf patchelf-* RUN curl -L $bazel_url -o /usr/local/bin/bazel \ && chmod +x /usr/local/bin/bazel \ diff --git a/docker/package/manylinux/build_wheel.py b/docker/package/manylinux/build_wheel.py index c87cb3e1375d6d2f264093325197df57332bcb27..7326286d4119b4c72e2e78725ecd8146bf4c9437 100644 --- a/docker/package/manylinux/build_wheel.py +++ b/docker/package/manylinux/build_wheel.py @@ -53,6 +53,10 @@ def build_img( cuda_version_img = cuda_version if cuda_version == "11.2": cuda_version_img = "11.2.2" + if cuda_version == "11.1": + cuda_version_img = "11.1.1" + if cuda_version == "11.0": + cuda_version_img = "11.0.3" from_img = f"nvidia/cuda:{cuda_version_img}-cudnn{cudnn_version}-devel-centos7" tuna_build_arg = "" if use_tuna: @@ -374,6 +378,14 @@ if __name__ == "__main__": img_prefix = f"oneflow-manylinux2014-cuda{cuda_version}" user = getpass.getuser() versioned_img_tag = f"{img_prefix}:0.1" + if cuda_version in ["11.0", "11.1"]: + versioned_img_tag = f"{img_prefix}:0.2" + enforced_oneflow_cmake_args = "" + if float(cuda_version) >= 11: + assert ( + "CUDNN_STATIC" not in extra_oneflow_cmake_args + ), "CUDNN_STATIC will be set to OFF if cuda_version > 11" + enforced_oneflow_cmake_args += " -DCUDNN_STATIC=OFF" user_img_tag = f"{img_prefix}:{user}" extra_docker_args = args.extra_docker_args if "--name" not in extra_docker_args: @@ -384,7 +396,9 @@ if __name__ == "__main__": img_tag = args.custom_img_tag skip_img = True elif skip_img: - assert is_img_existing(versioned_img_tag) + assert is_img_existing( + versioned_img_tag + ), f"img not found: {versioned_img_tag}" img_tag = versioned_img_tag else: img_tag = user_img_tag @@ -437,7 +451,7 @@ gcc --version img_tag, args.oneflow_src_dir, cache_dir, - extra_oneflow_cmake_args, + extra_oneflow_cmake_args + enforced_oneflow_cmake_args, extra_docker_args, bash_args, bash_wrap, @@ -455,7 +469,7 @@ gcc --version img_tag, args.oneflow_src_dir, cache_dir, - extra_oneflow_cmake_args, + extra_oneflow_cmake_args + enforced_oneflow_cmake_args, extra_docker_args, python_version, args.skip_wheel,