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,