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.

host_build.sh 7.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. #!/usr/bin/env bash
  2. set -e
  3. function usage() {
  4. echo "$0 args1 args2 .."
  5. echo "available args detail:"
  6. echo "-d : Build with Debug mode, default Release mode"
  7. echo "-c : Build with CUDA, default without CUDA"
  8. echo "-t : Build with training mode, default inference only"
  9. echo "-m : Build with m32 mode(only for windows build), default m64"
  10. echo "-r : remove old build dir before make, default off"
  11. echo "-h : show usage"
  12. echo "append other cmake config by export EXTRA_CMAKE_ARGS=..."
  13. echo "example: $0 -d"
  14. exit -1
  15. }
  16. BUILD_TYPE=Release
  17. MGE_WITH_CUDA=OFF
  18. MGE_INFERENCE_ONLY=ON
  19. MGE_WINDOWS_BUILD_ARCH=x64
  20. MGE_WINDOWS_BUILD_MARCH=m64
  21. MGE_ARCH=x86_64
  22. REMOVE_OLD_BUILD=false
  23. echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}"
  24. while getopts "rhdctm" arg
  25. do
  26. case $arg in
  27. d)
  28. echo "Build with Debug mode"
  29. BUILD_TYPE=Debug
  30. ;;
  31. c)
  32. echo "Build with CUDA"
  33. MGE_WITH_CUDA=ON
  34. ;;
  35. t)
  36. echo "Build with training mode"
  37. MGE_INFERENCE_ONLY=OFF
  38. ;;
  39. h)
  40. echo "show usage"
  41. usage
  42. ;;
  43. r)
  44. echo "config REMOVE_OLD_BUILD=true"
  45. REMOVE_OLD_BUILD=true
  46. ;;
  47. m)
  48. echo "build for m32(only use for windows)"
  49. MGE_WINDOWS_BUILD_ARCH=x86
  50. MGE_WINDOWS_BUILD_MARCH=m32
  51. MGE_ARCH=i386
  52. ;;
  53. ?)
  54. echo "unkonw argument"
  55. usage
  56. ;;
  57. esac
  58. done
  59. echo "------------------------------------"
  60. echo "build config summary:"
  61. echo "BUILD_TYPE: $BUILD_TYPE"
  62. echo "MGE_WITH_CUDA: $MGE_WITH_CUDA"
  63. echo "MGE_INFERENCE_ONLY: $MGE_INFERENCE_ONLY"
  64. echo "------------------------------------"
  65. READLINK=readlink
  66. OS=$(uname -s)
  67. if [ $OS = "Darwin" ];then
  68. READLINK=greadlink
  69. if [ $MGE_WITH_CUDA = "ON" ];then
  70. echo "MACOS DO NOT SUPPORT TensorRT, ABORT NOW!!"
  71. exit -1
  72. fi
  73. elif [[ $OS =~ "NT" ]]; then
  74. echo "BUILD in NT ..."
  75. fi
  76. SRC_DIR=$($READLINK -f "`dirname $0`/../../")
  77. source $SRC_DIR/scripts/cmake-build/utils/utils.sh
  78. function cmake_build() {
  79. BUILD_DIR=$SRC_DIR/build_dir/host/MGE_WITH_CUDA_$1/MGE_INFERENCE_ONLY_$2/$3/build
  80. INSTALL_DIR=$BUILD_DIR/../install
  81. MGE_WITH_CUDA=$1
  82. MGE_INFERENCE_ONLY=$2
  83. BUILD_TYPE=$3
  84. echo "build dir: $BUILD_DIR"
  85. echo "install dir: $INSTALL_DIR"
  86. echo "build type: $BUILD_TYPE"
  87. echo "MGE_WITH_CUDA: $MGE_WITH_CUDA"
  88. echo "MGE_INFERENCE_ONLY: $MGE_INFERENCE_ONLY"
  89. try_remove_old_build $REMOVE_OLD_BUILD $BUILD_DIR $INSTALL_DIR
  90. echo "create build dir"
  91. mkdir -p $BUILD_DIR
  92. mkdir -p $INSTALL_DIR
  93. cd $BUILD_DIR
  94. cmake \
  95. -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
  96. -DMGE_INFERENCE_ONLY=$MGE_INFERENCE_ONLY \
  97. -DMGE_WITH_CUDA=$MGE_WITH_CUDA \
  98. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
  99. ${EXTRA_CMAKE_ARGS} \
  100. $SRC_DIR
  101. make -j$(nproc)
  102. make install/strip
  103. }
  104. function windows_env_err() {
  105. echo "check windows env failed!!"
  106. echo "please install LLVM/clang-cl/cmake/python at Visual Studio Extensions"
  107. exit -1
  108. }
  109. function prepare_env_for_windows_build() {
  110. echo "check Visual Studio install path env..."
  111. if [[ -z $VS_PATH ]];then
  112. echo "can not find visual_studio_path env, pls export you Visual Studio install dir to VS_PATH"
  113. echo "examle for export Visual Studio 2019 Enterprise default install dir"
  114. echo "export VS_PATH=/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2019/Enterprise"
  115. exit -1
  116. fi
  117. echo $VS_PATH
  118. # only use cmake/clang-cl/Ninja install from Visual Studio, if not, may build failed
  119. # some user env may install cmake/clang-cl/Ninja at MSYS env, so we put Visual Studio
  120. # path at the head of PATH, and check the valid
  121. echo "check cmake install..."
  122. export PATH=$VS_PATH/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/:$PATH
  123. which cmake
  124. cmake_loc=`which cmake`
  125. if [[ $cmake_loc =~ "Visual" ]]; then
  126. echo "cmake valid ..."
  127. else
  128. echo "cmake Invalid: ..."
  129. windows_env_err
  130. fi
  131. echo "check clang-cl install..."
  132. export PATH=$VS_PATH/VC/Tools/Llvm/bin/:$PATH
  133. which clang-cl
  134. clang_loc=`which clang-cl`
  135. if [[ $clang_loc =~ "Visual" ]]; then
  136. echo "clang-cl valid ..."
  137. else
  138. echo "clang-cl Invalid: ..."
  139. windows_env_err
  140. fi
  141. echo "check Ninja install..."
  142. export PATH=$VS_PATH/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/:$PATH
  143. which Ninja
  144. ninja_loc=`which Ninja`
  145. if [[ $ninja_loc =~ "Visual" ]]; then
  146. echo "Ninja valid ..."
  147. else
  148. echo "Ninja Invalid: ..."
  149. windows_env_err
  150. fi
  151. echo "put vcvarsall.bat path to PATH env.."
  152. export PATH=$VS_PATH/VC/Auxiliary/Build:$PATH
  153. echo "config cuda/cudnn/TensorRT env..."
  154. export NIVIDA_INSTALL_PRE=/c/Program\ Files/NVIDIA\ GPU\ Computing\ Toolkit
  155. export CUDA_V=v10.1
  156. export CUDNN_V=cudnn-10.1-windows10-x64-v7.6.5.32
  157. export TRT_V=TensorRT-6.0.1.5
  158. export CUDA_PATH=$NIVIDA_INSTALL_PRE/CUDA/${CUDA_V}
  159. export PATH=$PATH:$CUDA_PATH/bin
  160. export CUDA_BIN_PATH=$CUDA_PATH
  161. export PC_CUDNN_INCLUDE_DIRS=$NIVIDA_INSTALL_PRE/${CUDNN_V}/cuda/include
  162. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NIVIDA_INSTALL_PRE/${TRT_V}/lib:$NIVIDA_INSTALL_PRE/CUDA/${CUDA_V}/lib/x64:$NIVIDA_INSTALL_PRE/${CUDNN_V}/cuda/lib/x64
  163. export CPATH=$CPATH:$NIVIDA_INSTALL_PRE/${TRT_V}/include:$NIVIDA_INSTALL_PRE/CUDA/${CUDA_V}/include:$NIVIDA_INSTALL_PRE/CUDA/${CUDA_V}/include/nvtx3:$PC_CUDNN_INCLUDE_DIRS
  164. export LIBRARY_PATH=$LIBRARY_PATH:$LD_LIBRARY_PATH
  165. export INCLUDE=$INCLUDE:$CPATH
  166. }
  167. WINDOWS_BUILD_TARGET="Ninja all > build.log"
  168. if [[ -z ${MAKE_DEVELOP} ]]
  169. then
  170. MAKE_DEVELOP="false"
  171. fi
  172. function config_windows_build_target() {
  173. if [ ${MAKE_DEVELOP} = "true" ]; then
  174. echo "build all and develop for pytest test"
  175. WINDOWS_BUILD_TARGET="Ninja all > build.log && Ninja develop"
  176. fi
  177. }
  178. function cmake_build_windows() {
  179. # windows do not support long path, so we cache the BUILD_DIR ASAP
  180. prepare_env_for_windows_build
  181. BUILD_DIR=$SRC_DIR/build_dir/host/build
  182. INSTALL_DIR=$BUILD_DIR/../install
  183. MGE_WITH_CUDA=$1
  184. MGE_INFERENCE_ONLY=$2
  185. BUILD_TYPE=$3
  186. echo "build dir: $BUILD_DIR"
  187. echo "install dir: $INSTALL_DIR"
  188. echo "build type: $BUILD_TYPE"
  189. echo "MGE_WITH_CUDA: $MGE_WITH_CUDA"
  190. echo "MGE_INFERENCE_ONLY: $MGE_INFERENCE_ONLY"
  191. try_remove_old_build $REMOVE_OLD_BUILD $BUILD_DIR $INSTALL_DIR
  192. echo "create build dir"
  193. mkdir -p $BUILD_DIR
  194. mkdir -p $INSTALL_DIR
  195. cd $BUILD_DIR
  196. echo "now try build windows native with cmake/clang-ci/Ninja/Visual Studio ....."
  197. export CFLAGS=-$MGE_WINDOWS_BUILD_MARCH
  198. export CXXFLAGS=-$MGE_WINDOWS_BUILD_MARCH
  199. cmd.exe /c " \
  200. vcvarsall.bat $MGE_WINDOWS_BUILD_ARCH && cmake -G "Ninja" \
  201. -DMGE_ARCH=$MGE_ARCH \
  202. -DMGE_INFERENCE_ONLY=$MGE_INFERENCE_ONLY \
  203. -DMGE_WITH_CUDA=$MGE_WITH_CUDA \
  204. -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
  205. -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR \
  206. -DCMAKE_C_COMPILER=clang-cl.exe \
  207. -DCMAKE_CXX_COMPILER=clang-cl.exe \
  208. -DCMAKE_MAKE_PROGRAM=ninja.exe \
  209. ${EXTRA_CMAKE_ARGS} \
  210. ../../.. && \
  211. echo \"start Ninja build log to build.log, may take serval min...\" && \
  212. ${WINDOWS_BUILD_TARGET}"
  213. }
  214. if [[ $OS =~ "NT" ]]; then
  215. config_windows_build_target
  216. cmake_build_windows $MGE_WITH_CUDA $MGE_INFERENCE_ONLY $BUILD_TYPE
  217. else
  218. cmake_build $MGE_WITH_CUDA $MGE_INFERENCE_ONLY $BUILD_TYPE
  219. fi

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