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.

cross_build_linux_arm_inference.sh 4.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #!/usr/bin/env bash
  2. set -e
  3. ARCHS=("arm64-v8a" "armeabi-v7a-softfp" "armeabi-v7a-hardfp")
  4. BUILD_TYPE=Release
  5. MGE_WITH_CUDA=OFF
  6. MGE_ARMV8_2_FEATURE_FP16=OFF
  7. MGE_DISABLE_FLOAT16=OFF
  8. ARCH=arm64-v8a
  9. REMOVE_OLD_BUILD=false
  10. CMAKE_C_FLAGS="-Wno-psabi"
  11. CMAKE_CXX_FLAGS="-Wno-psabi"
  12. echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}"
  13. function usage() {
  14. echo "$0 args1 args2 .."
  15. echo "available args detail:"
  16. echo "-d : Build with Debug mode, default Release mode"
  17. echo "-c : Build with CUDA, default without CUDA(for arm with cuda, example tx1)"
  18. echo "-f : enable MGE_ARMV8_2_FEATURE_FP16 for ARM64, need toolchain and hardware support"
  19. echo "-k : open MGE_DISABLE_FLOAT16 for NEON "
  20. echo "-a : config build arch available: ${ARCHS[@]}"
  21. echo "-r : remove old build dir before make, default off"
  22. echo "-h : show usage"
  23. echo "append other cmake config by export EXTRA_CMAKE_ARGS=..."
  24. echo "example: $0 -d"
  25. exit -1
  26. }
  27. while getopts "rkhdcfa:" arg
  28. do
  29. case $arg in
  30. d)
  31. echo "Build with Debug mode"
  32. BUILD_TYPE=Debug
  33. ;;
  34. c)
  35. echo "Build with CUDA"
  36. MGE_WITH_CUDA=ON
  37. ;;
  38. f)
  39. echo "enable MGE_ARMV8_2_FEATURE_FP16 for ARM64"
  40. MGE_ARMV8_2_FEATURE_FP16=ON
  41. ;;
  42. k)
  43. echo "open MGE_DISABLE_FLOAT16 for NEON"
  44. MGE_DISABLE_FLOAT16=ON
  45. ;;
  46. a)
  47. tmp_arch=null
  48. for arch in ${ARCHS[@]}; do
  49. if [ "$arch" = "$OPTARG" ]; then
  50. echo "CONFIG BUILD ARCH to : $OPTARG"
  51. tmp_arch=$OPTARG
  52. ARCH=$OPTARG
  53. break
  54. fi
  55. done
  56. if [ "$tmp_arch" = "null" ]; then
  57. echo "ERR args for arch (-a)"
  58. echo "available arch list: ${ARCHS[@]}"
  59. usage
  60. fi
  61. ;;
  62. h)
  63. echo "show usage"
  64. usage
  65. ;;
  66. r)
  67. echo "config REMOVE_OLD_BUILD=true"
  68. REMOVE_OLD_BUILD=true
  69. ;;
  70. ?)
  71. echo "unkonw argument"
  72. usage
  73. ;;
  74. esac
  75. done
  76. echo "----------------------------------------------------"
  77. echo "build config summary:"
  78. echo "BUILD_TYPE: $BUILD_TYPE"
  79. echo "MGE_WITH_CUDA: $MGE_WITH_CUDA"
  80. echo "MGE_ARMV8_2_FEATURE_FP16: $MGE_ARMV8_2_FEATURE_FP16"
  81. echo "MGE_DISABLE_FLOAT16: $MGE_DISABLE_FLOAT16"
  82. echo "ARCH: $ARCH"
  83. echo "----------------------------------------------------"
  84. READLINK=readlink
  85. MAKEFILE_TYPE="Unix"
  86. OS=$(uname -s)
  87. if [ $OS = "Darwin" ];then
  88. READLINK=greadlink
  89. elif [[ $OS =~ "NT" ]]; then
  90. echo "BUILD in NT ..."
  91. MAKEFILE_TYPE="Unix"
  92. fi
  93. if [ ! $OS = "Linux" ] && [ $MGE_WITH_CUDA = "ON" ];then
  94. echo "cross build for arm with cuda only support from Linux"
  95. exit -1
  96. fi
  97. if [ $MGE_WITH_CUDA = "ON" ] && [ ! $ARCH = "arm64-v8a" ];then
  98. echo "arm with cuda only support ARCH: arm64-v8a"
  99. exit -1
  100. fi
  101. if [ $MGE_WITH_CUDA = "OFF" ];then
  102. echo "config -Werror=unused-parameter when cuda off for CI check"
  103. CMAKE_C_FLAGS="-Werror=unused-parameter -Wno-psabi"
  104. CMAKE_CXX_FLAGS="-Werror=unused-parameter -Wno-psabi"
  105. fi
  106. SRC_DIR=$($READLINK -f "`dirname $0`/../../")
  107. source $SRC_DIR/scripts/cmake-build/utils/utils.sh
  108. function cmake_build() {
  109. BUILD_DIR=$SRC_DIR/build_dir/gnu-linux/MGE_WITH_CUDA_$3/$1/$BUILD_TYPE/build
  110. INSTALL_DIR=$BUILD_DIR/../install
  111. TOOLCHAIN=$SRC_DIR/toolchains/$2
  112. MGE_WITH_CUDA=$3
  113. echo "build dir: $BUILD_DIR"
  114. echo "install dir: $INSTALL_DIR"
  115. echo "build type: $BUILD_TYPE"
  116. echo "build toolchain: $TOOLCHAIN"
  117. echo "MGE_WITH_CUDA: $MGE_WITH_CUDA"
  118. echo "BUILD MAKEFILE_TYPE: $MAKEFILE_TYPE"
  119. try_remove_old_build $REMOVE_OLD_BUILD $BUILD_DIR $INSTALL_DIR
  120. echo "create build dir"
  121. mkdir -p $BUILD_DIR
  122. mkdir -p $INSTALL_DIR
  123. cd $BUILD_DIR
  124. cmake -G "$MAKEFILE_TYPE Makefiles" \
  125. -DCMAKE_C_FLAGS=$CMAKE_C_FLAGS \
  126. -DCMAKE_CXX_FLAGS=$CMAKE_CXX_FLAGS \
  127. -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN \
  128. -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
  129. -DMGE_INFERENCE_ONLY=ON \
  130. -DMGE_WITH_CUDA=$MGE_WITH_CUDA \
  131. -DMGE_ARMV8_2_FEATURE_FP16= $MGE_ARMV8_2_FEATURE_FP16 \
  132. -DMGE_DISABLE_FLOAT16=$MGE_DISABLE_FLOAT16 \
  133. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
  134. ${EXTRA_CMAKE_ARGS} \
  135. $SRC_DIR
  136. make -j$(nproc)
  137. make install/strip
  138. }
  139. build_flatc $SRC_DIR $REMOVE_OLD_BUILD
  140. toolchain=null
  141. if [ "$ARCH" = "arm64-v8a" ]; then
  142. toolchain="aarch64-linux-gnu.toolchain.cmake"
  143. elif [ "$ARCH" = "armeabi-v7a-hardfp" ]; then
  144. toolchain="arm-linux-gnueabihf.toolchain.cmake"
  145. elif [ "$ARCH" = "armeabi-v7a-softfp" ]; then
  146. toolchain="arm-linux-gnueabi.toolchain.cmake"
  147. else
  148. echo "ERR CONFIG ABORT NOW!!"
  149. exit -1
  150. fi
  151. cmake_build $ARCH $toolchain $MGE_WITH_CUDA

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