You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

do_build_common.sh 4.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #!/bin/bash -ex
  2. function handle_strip() {
  3. echo "now handle strip $1"
  4. objcopy --only-keep-debug $1 $1.dbg
  5. strip -s $1
  6. objcopy --add-gnu-debuglink=$1.dbg $1
  7. rm $1.dbg
  8. }
  9. function full_copy_so(){
  10. lib_path=$1
  11. dst_dir=$2
  12. append_rpath=$3
  13. lib_name=$(basename $lib_path)
  14. cp $lib_path $dst_dir/$lib_name
  15. if [ "$append_rpath" != "" ];then
  16. ori_rpath=$(patchelf --print-rpath $dst_dir/$lib_name)
  17. if [ "$ori_rpath" != "" ];then
  18. patchelf --set-rpath "$ori_rpath:$append_rpath" $dst_dir/$lib_name
  19. else
  20. patchelf --set-rpath "$append_rpath" $dst_dir/$lib_name
  21. fi
  22. fi
  23. }
  24. function patch_elf_depend_lib() {
  25. echo "handle common depend lib"
  26. LIBS_DIR=${BUILD_DIR}/staging/megengine/core/lib
  27. mkdir -p ${LIBS_DIR}
  28. cp /usr/lib64/libatomic.so.1 ${LIBS_DIR}
  29. patchelf --remove-rpath ${BUILD_DIR}/staging/megengine/core/_imperative_rt.so
  30. patchelf --force-rpath --set-rpath '$ORIGIN/lib' ${BUILD_DIR}/staging/megengine/core/_imperative_rt.so
  31. cp ${BUILD_DIR}/src/libmegengine_export.so ${LIBS_DIR}
  32. patchelf --remove-rpath ${LIBS_DIR}/libmegengine_export.so
  33. patchelf --force-rpath --set-rpath '$ORIGIN/.' ${LIBS_DIR}/libmegengine_export.so
  34. cp ${BUILD_DIR}/src/libmegengine_export.so ${LIBS_DIR}
  35. patchelf --remove-rpath ${LIBS_DIR}/libmegengine_export.so
  36. patchelf --force-rpath --set-rpath '$ORIGIN/.' ${LIBS_DIR}/libmegengine_export.so
  37. if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then
  38. echo "handle cuda lib"
  39. cp ${BUILD_DIR}/dnn/cuda-stub/libcuda_stub.so ${LIBS_DIR}
  40. cp /usr/local/cuda/lib64/libnvToolsExt.so.1 ${LIBS_DIR}
  41. IFS=: read -a lib_name_array <<<"$COPY_LIB_LIST"
  42. append_rpath='$ORIGIN/.'
  43. for lib_name in ${lib_name_array[@]};do
  44. full_copy_so $lib_name ${LIBS_DIR} $lib_append_rpath
  45. done
  46. fi
  47. }
  48. ALL_PYTHON=${ALL_PYTHON}
  49. if [[ -z ${ALL_PYTHON} ]]
  50. then
  51. ALL_PYTHON="35m 36m 37m 38"
  52. fi
  53. BUILD_WHL_CPU_ONLY=${BUILD_WHL_CPU_ONLY}
  54. if [[ -z ${BUILD_WHL_CPU_ONLY} ]]
  55. then
  56. BUILD_WHL_CPU_ONLY="OFF"
  57. fi
  58. SRC_DIR=$(readlink -f "`dirname $0`/../../../")
  59. BUILD_DIR=${SRC_DIR}/build_dir/host/MGE_WITH_CUDA_OFF/MGE_INFERENCE_ONLY_OFF/Release/build/
  60. if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then
  61. BUILD_DIR=${SRC_DIR}/build_dir/host/MGE_WITH_CUDA_ON/MGE_INFERENCE_ONLY_OFF/Release/build/
  62. fi
  63. NEW_LIB_PATH=core/lib
  64. for ver in ${ALL_PYTHON}
  65. do
  66. USE_AUDITWHEEL="ON"
  67. python_ver=${ver:0:2}
  68. MAJOR=${python_ver:0:1}
  69. MINOR=${ver:1}
  70. PYTHON_DIR=/opt/python/cp${python_ver}-cp${ver}/
  71. export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} ${EXTRA_CMAKE_FLAG}"
  72. export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=RelWithDebInfo"
  73. export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DCMAKE_PREFIX_PATH=${PYTHON_DIR}"
  74. export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DPYTHON_EXECUTABLE=${PYTHON_DIR}/bin/python3"
  75. export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DPYTHON_LIBRARY=${PYTHON_DIR}lib/"
  76. export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DPYTHON_INCLUDE_DIR=${PYTHON_DIR}include/python${MAJOR}.${MINOR}"
  77. export EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DMGE_WITH_ATLAS=ON"
  78. if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then
  79. ${SRC_DIR}/scripts/cmake-build/host_build.sh -c -t -r
  80. else
  81. ${SRC_DIR}/scripts/cmake-build/host_build.sh -t -r
  82. fi
  83. cd ${BUILD_DIR}
  84. rm -rf staging
  85. mkdir -p staging
  86. cp -a imperative/python/{megengine,setup.py,requires.txt,requires-style.txt,requires-test.txt} staging/
  87. handle_strip ${BUILD_DIR}/src/libmegengine_export.so
  88. cd ${BUILD_DIR}/staging/megengine/core
  89. handle_strip _imperative_rt.so
  90. mkdir -p lib/ucx
  91. if [ ${USE_AUDITWHEEL} = "OFF" ]; then
  92. patch_elf_depend_lib
  93. fi
  94. cd ${BUILD_DIR}/staging/
  95. ${PYTHON_DIR}/bin/python setup.py bdist_wheel
  96. cd /home/output
  97. if [ ${USE_AUDITWHEEL} = "ON" ]; then
  98. LD_LIBRARY_PATH=${BUILD_DIR}/dnn/cuda-stub:$LD_LIBRARY_PATH auditwheel repair -L ${NEW_LIB_PATH} ${BUILD_DIR}/staging/dist/Meg*.whl
  99. else
  100. mkdir -p ${SRC_DIR}/scripts/whl/manylinux2014/output/wheelhouse/${OUT_DIR}
  101. cd ${BUILD_DIR}/staging/dist/
  102. org_whl_name=`ls Meg*${ver}*.whl`
  103. compat_whl_name=`echo ${org_whl_name} | sed 's/linux/manylinux2014/'`
  104. echo "org whl name: ${org_whl_name}"
  105. echo "comapt whl name: ${compat_whl_name}"
  106. mv ${org_whl_name} ${SRC_DIR}/scripts/whl/manylinux2014/output/wheelhouse/${OUT_DIR}/${compat_whl_name}
  107. cd /home/output
  108. fi
  109. chown -R ${UID}.${UID} .
  110. # compat for root-less docker env to remove output at host side
  111. chmod -R 777 .
  112. echo "python $ver done"
  113. done

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台