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 6.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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, defaule 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 "-h : show usage"
  11. echo "example: $0 -d"
  12. exit -1
  13. }
  14. BUILD_TYPE=Release
  15. MGE_WITH_CUDA=OFF
  16. MGE_INFERENCE_ONLY=ON
  17. MGE_WINDOWS_BUILD_ARCH=x64
  18. MGE_WINDOWS_BUILD_MARCH=m64
  19. MGE_ARCH=x86_64
  20. while getopts "hdctm" arg
  21. do
  22. case $arg in
  23. d)
  24. echo "Build with Debug mode"
  25. BUILD_TYPE=Debug
  26. ;;
  27. c)
  28. echo "Build with CUDA"
  29. MGE_WITH_CUDA=ON
  30. ;;
  31. t)
  32. echo "Build with training mode"
  33. MGE_INFERENCE_ONLY=OFF
  34. ;;
  35. h)
  36. echo "show usage"
  37. usage
  38. ;;
  39. m)
  40. echo "build for m32(only use for windows)"
  41. MGE_WINDOWS_BUILD_ARCH=x86
  42. MGE_WINDOWS_BUILD_MARCH=m32
  43. MGE_ARCH=i386
  44. ;;
  45. ?)
  46. echo "unkonw argument"
  47. usage
  48. ;;
  49. esac
  50. done
  51. echo "------------------------------------"
  52. echo "build config summary:"
  53. echo "BUILD_TYPE: $BUILD_TYPE"
  54. echo "MGE_WITH_CUDA: $MGE_WITH_CUDA"
  55. echo "MGE_INFERENCE_ONLY: $MGE_INFERENCE_ONLY"
  56. echo "------------------------------------"
  57. READLINK=readlink
  58. OS=$(uname -s)
  59. if [ $OS = "Darwin" ];then
  60. READLINK=greadlink
  61. if [ $MGE_WITH_CUDA = "ON" ];then
  62. echo "MACOS DO NOT SUPPORT TensorRT, ABORT NOW!!"
  63. exit -1
  64. fi
  65. elif [[ $OS =~ "NT" ]]; then
  66. echo "BUILD in NT ..."
  67. fi
  68. SRC_DIR=$($READLINK -f "`dirname $0`/../../")
  69. function cmake_build() {
  70. BUILD_DIR=$SRC_DIR/build_dir/host/MGE_WITH_CUDA_$1/MGE_INFERENCE_ONLY_$2/$3/build
  71. INSTALL_DIR=$BUILD_DIR/../install
  72. MGE_WITH_CUDA=$1
  73. MGE_INFERENCE_ONLY=$2
  74. BUILD_TYPE=$3
  75. echo "build dir: $BUILD_DIR"
  76. echo "install dir: $INSTALL_DIR"
  77. echo "build type: $BUILD_TYPE"
  78. echo "MGE_WITH_CUDA: $MGE_WITH_CUDA"
  79. echo "MGE_INFERENCE_ONLY: $MGE_INFERENCE_ONLY"
  80. if [ -e $BUILD_DIR ];then
  81. echo "clean old dir: $BUILD_DIR"
  82. rm -rf $BUILD_DIR
  83. fi
  84. if [ -e $INSTALL_DIR ];then
  85. echo "clean old dir: $INSTALL_DIR"
  86. rm -rf $INSTALL_DIR
  87. fi
  88. echo "create build dir"
  89. mkdir -p $BUILD_DIR
  90. mkdir -p $INSTALL_DIR
  91. cd $BUILD_DIR
  92. cmake \
  93. -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
  94. -DMGE_INFERENCE_ONLY=$MGE_INFERENCE_ONLY \
  95. -DMGE_WITH_CUDA=$MGE_WITH_CUDA \
  96. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
  97. $SRC_DIR
  98. make -j$(nproc)
  99. make install/strip
  100. }
  101. function windows_env_err() {
  102. echo "check windows env failed!!"
  103. echo "please install LLVM/clang-cl/cmake/python at Visual Studio Extensions"
  104. exit -1
  105. }
  106. function prepare_env_for_windows_build() {
  107. echo "check Visual Studio install path env..."
  108. if [[ -z $VS_PATH ]];then
  109. echo "can not find visual_studio_path env, pls export you Visual Studio install dir to VS_PATH"
  110. echo "examle for export Visual Studio 2019 Enterprise default install dir"
  111. echo "export VS_PATH=/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2019/Enterprise"
  112. exit -1
  113. fi
  114. echo $VS_PATH
  115. # only use cmake/clang-cl/Ninja install from Visual Studio, if not, may build failed
  116. # some user env may install cmake/clang-cl/Ninja at MSYS env, so we put Visual Studio
  117. # path at the head of PATH, and check the valid
  118. echo "check cmake install..."
  119. export PATH=$VS_PATH/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/:$PATH
  120. which cmake
  121. cmake_loc=`which cmake`
  122. if [[ $cmake_loc =~ "Visual" ]]; then
  123. echo "cmake valid ..."
  124. else
  125. echo "cmake Invalid: ..."
  126. windows_env_err
  127. fi
  128. echo "check clang-cl install..."
  129. export PATH=$VS_PATH/VC/Tools/Llvm/bin/:$PATH
  130. which clang-cl
  131. clang_loc=`which clang-cl`
  132. if [[ $clang_loc =~ "Visual" ]]; then
  133. echo "clang-cl valid ..."
  134. else
  135. echo "clang-cl Invalid: ..."
  136. windows_env_err
  137. fi
  138. echo "check Ninja install..."
  139. export PATH=$VS_PATH/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/:$PATH
  140. which Ninja
  141. ninja_loc=`which Ninja`
  142. if [[ $ninja_loc =~ "Visual" ]]; then
  143. echo "Ninja valid ..."
  144. else
  145. echo "Ninja Invalid: ..."
  146. windows_env_er
  147. fi
  148. export PATH=$VS_PATH/VC/Auxiliary/Build:$PATH
  149. echo "put vcvarsall.bat path to PATH env.."
  150. }
  151. function cmake_build_windows() {
  152. # windows do not support long path, so we cache the BUILD_DIR ASAP
  153. prepare_env_for_windows_build
  154. BUILD_DIR=$SRC_DIR/build_dir/host/build
  155. INSTALL_DIR=$BUILD_DIR/../install
  156. MGE_WITH_CUDA=$1
  157. MGE_INFERENCE_ONLY=$2
  158. BUILD_TYPE=$3
  159. echo "build dir: $BUILD_DIR"
  160. echo "install dir: $INSTALL_DIR"
  161. echo "build type: $BUILD_TYPE"
  162. echo "MGE_WITH_CUDA: $MGE_WITH_CUDA"
  163. echo "MGE_INFERENCE_ONLY: $MGE_INFERENCE_ONLY"
  164. if [ -e $BUILD_DIR ];then
  165. echo "clean old dir: $BUILD_DIR"
  166. rm -rf $BUILD_DIR
  167. fi
  168. if [ -e $INSTALL_DIR ];then
  169. echo "clean old dir: $INSTALL_DIR"
  170. rm -rf $INSTALL_DIR
  171. fi
  172. echo "create build dir"
  173. mkdir -p $BUILD_DIR
  174. mkdir -p $INSTALL_DIR
  175. cd $BUILD_DIR
  176. echo "now try build windows native with cmake/clang-ci/Ninja/Visual Studio ....."
  177. export CFLAGS=-$MGE_WINDOWS_BUILD_MARCH
  178. export CXXFLAGS=-$MGE_WINDOWS_BUILD_MARCH
  179. cmd.exe /c " \
  180. vcvarsall.bat $MGE_WINDOWS_BUILD_ARCH && cmake -G "Ninja" \
  181. -DMGE_ARCH=$MGE_ARCH \
  182. -DMGE_INFERENCE_ONLY=$MGE_INFERENCE_ONLY \
  183. -DMGE_WITH_CUDA=$MGE_WITH_CUDA \
  184. -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \
  185. -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR \
  186. -DCMAKE_C_COMPILER=clang-cl.exe \
  187. -DCMAKE_CXX_COMPILER=clang-cl.exe \
  188. -DCMAKE_MAKE_PROGRAM=ninja.exe \
  189. ../../.. && \
  190. echo \"start Ninja build log to build.log, may take serval min...\" && \
  191. Ninja load_and_run > build.log"
  192. }
  193. if [[ $OS =~ "NT" ]]; then
  194. cmake_build_windows $MGE_WITH_CUDA $MGE_INFERENCE_ONLY $BUILD_TYPE
  195. else
  196. cmake_build $MGE_WITH_CUDA $MGE_INFERENCE_ONLY $BUILD_TYPE
  197. fi

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