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.

build.sh 10 kB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
4 years ago
4 years ago
5 years ago
4 years ago
5 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. #!/bin/bash
  2. # Copyright 2019-2020 Huawei Technologies Co., Ltd
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. # ============================================================================
  16. set -e
  17. BASEPATH=$(cd "$(dirname $0)"; pwd)
  18. OUTPUT_PATH="${BASEPATH}/output"
  19. export BUILD_PATH="${BASEPATH}/build/"
  20. # print usage message
  21. usage()
  22. {
  23. echo "Usage:"
  24. echo "sh build.sh [-j[n]] [-h] [-v] [-s] [-t] [-u] [-c] [-p]"
  25. echo ""
  26. echo "Options:"
  27. echo " -h Print usage"
  28. echo " -u Only compile ut, not execute"
  29. echo " -s Build st"
  30. echo " -j[n] Set the number of threads used for building GraphEngine, default is 8"
  31. echo " -t Build and execute ut"
  32. echo " -c Build ut with coverage tag"
  33. echo " -p Build inference or train"
  34. echo " -v Display build command"
  35. echo "to be continued ..."
  36. }
  37. # parse and set options
  38. checkopts()
  39. {
  40. VERBOSE=""
  41. THREAD_NUM=8
  42. # ENABLE_GE_UT_ONLY_COMPILE="off"
  43. ENABLE_GE_UT="off"
  44. ENABLE_GE_ST="off"
  45. ENABLE_GE_COV="off"
  46. GE_ONLY="on"
  47. PLATFORM="inference"
  48. PRODUCT="normal"
  49. # Process the options
  50. while getopts 'ustchj:p:g:v' opt
  51. do
  52. OPTARG=$(echo ${OPTARG} | tr '[A-Z]' '[a-z]')
  53. case "${opt}" in
  54. u)
  55. # ENABLE_GE_UT_ONLY_COMPILE="on"
  56. ENABLE_GE_UT="on"
  57. GE_ONLY="off"
  58. ;;
  59. s)
  60. ENABLE_GE_ST="on"
  61. ;;
  62. t)
  63. ENABLE_GE_UT="on"
  64. GE_ONLY="off"
  65. ;;
  66. c)
  67. ENABLE_GE_COV="on"
  68. GE_ONLY="off"
  69. ;;
  70. h)
  71. usage
  72. exit 0
  73. ;;
  74. j)
  75. THREAD_NUM=$OPTARG
  76. ;;
  77. v)
  78. VERBOSE="VERBOSE=1"
  79. ;;
  80. p)
  81. PLATFORM=$OPTARG
  82. ;;
  83. g)
  84. PRODUCT=$OPTARG
  85. ;;
  86. *)
  87. echo "Undefined option: ${opt}"
  88. usage
  89. exit 1
  90. esac
  91. done
  92. }
  93. checkopts "$@"
  94. git submodule update --init metadef
  95. git submodule update --init parser
  96. mk_dir() {
  97. local create_dir="$1" # the target to make
  98. mkdir -pv "${create_dir}"
  99. echo "created ${create_dir}"
  100. }
  101. # GraphEngine build start
  102. echo "---------------- GraphEngine build start ----------------"
  103. # create build path
  104. build_graphengine()
  105. {
  106. echo "create build directory and build GraphEngine";
  107. mk_dir "${BUILD_PATH}"
  108. cd "${BUILD_PATH}"
  109. CMAKE_ARGS="-DBUILD_PATH=$BUILD_PATH -DGE_ONLY=$GE_ONLY"
  110. if [[ "X$ENABLE_GE_COV" = "Xon" ]]; then
  111. CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_GE_COV=ON"
  112. fi
  113. if [[ "X$ENABLE_GE_UT" = "Xon" ]]; then
  114. CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_GE_UT=ON"
  115. fi
  116. if [[ "X$ENABLE_GE_ST" = "Xon" ]]; then
  117. CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_GE_ST=ON"
  118. fi
  119. CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_OPEN_SRC=True -DCMAKE_INSTALL_PREFIX=${OUTPUT_PATH} -DPLATFORM=${PLATFORM} -DPRODUCT=${PRODUCT}"
  120. echo "${CMAKE_ARGS}"
  121. cmake ${CMAKE_ARGS} ..
  122. if [ $? -ne 0 ]
  123. then
  124. echo "execute command: cmake ${CMAKE_ARGS} .. failed."
  125. return 1
  126. fi
  127. COMMON_TARGET="ge_common engine fmk_parser parser_common _caffe_parser fmk_onnx_parser graph register engine_conf.json optimizer_priority.pbtxt "
  128. TARGET=${COMMON_TARGET}
  129. if [ "x${PLATFORM}" = "xtrain" ]
  130. then
  131. TARGET="ge_runner ge_local_engine ge_local_opskernel_builder host_cpu_engine host_cpu_opskernel_builder ${TARGET}"
  132. elif [ "x${PLATFORM}" = "xinference" ]
  133. then
  134. TARGET="ge_compiler atc_ge_local_engine atc_ge_local_opskernel_builder atc_host_cpu_engine atc_host_cpu_opskernel_builder atc opensrc_ascendcl ${TARGET}"
  135. elif [ "x${PLATFORM}" = "xall" ]
  136. then
  137. # build all the target
  138. TARGET=""
  139. fi
  140. make ${VERBOSE} ${TARGET} -j${THREAD_NUM} && make install
  141. if [ $? -ne 0 ]
  142. then
  143. echo "execute command: make ${VERBOSE} -j${THREAD_NUM} && make install failed."
  144. return 1
  145. fi
  146. echo "GraphEngine build success!"
  147. }
  148. g++ -v
  149. mk_dir ${OUTPUT_PATH}
  150. build_graphengine || { echo "GraphEngine build failed."; return; }
  151. echo "---------------- GraphEngine build finished ----------------"
  152. #cp -rf "${BUILD_PATH}/graphengine/"*.so "${OUTPUT_PATH}"
  153. #rm -rf "${OUTPUT_PATH}/"libproto*
  154. rm -f ${OUTPUT_PATH}/libgmock*.so
  155. rm -f ${OUTPUT_PATH}/libgtest*.so
  156. rm -f ${OUTPUT_PATH}/lib*_stub.so
  157. chmod -R 750 ${OUTPUT_PATH}
  158. find ${OUTPUT_PATH} -name "*.so*" -print0 | xargs -0 chmod 500
  159. echo "---------------- GraphEngine output generated ----------------"
  160. # if [[ "X$ENABLE_GE_ST" = "Xon" ]]; then
  161. # cp ${BUILD_PATH}/graphengine/tests/st/st_resnet50_train ${OUTPUT_PATH}
  162. # fi
  163. # if [[ "X$ENABLE_GE_UT" = "Xon" || "X$ENABLE_GE_COV" = "Xon" ]]; then
  164. # cp ${BUILD_PATH}/graphengine/tests/ut/common/graph/ut_libgraph ${OUTPUT_PATH}
  165. # cp ${BUILD_PATH}/graphengine/tests/ut/ge/ut_libge_multiparts_utest ${OUTPUT_PATH}
  166. # cp ${BUILD_PATH}/graphengine/tests/ut/ge/ut_libge_distinct_load_utest ${OUTPUT_PATH}
  167. # cp ${BUILD_PATH}/graphengine/tests/ut/ge/ut_libge_others_utest ${OUTPUT_PATH}
  168. # cp ${BUILD_PATH}/graphengine/tests/ut/ge/ut_libge_kernel_utest ${OUTPUT_PATH}
  169. # if [[ "X${ENABLE_GE_UT_ONLY_COMPILE}" != "Xon" ]]; then
  170. # export LD_LIBRARY_PATH=${D_LINK_PATH}/x86_64/:${BUILD_PATH}../third_party/prebuild/x86_64/:${BUILD_PATH}/graphengine/:/usr/local/HiAI/driver/lib64:/usr/local/HiAI/runtime/lib64:${LD_LIBRARY_PATH}
  171. # echo ${LD_LIBRARY_PATH}
  172. # ${OUTPUT_PATH}/ut_libgraph &&
  173. # ${OUTPUT_PATH}/ut_libge_multiparts_utest &&
  174. # ${OUTPUT_PATH}/ut_libge_distinct_load_utest &&
  175. # ${OUTPUT_PATH}/ut_libge_others_utest &&
  176. # ${OUTPUT_PATH}/ut_libge_kernel_utest
  177. # if [[ "$?" -ne 0 ]]; then
  178. # echo "!!! UT FAILED, PLEASE CHECK YOUR CHANGES !!!"
  179. # exit 1;
  180. # fi
  181. # fi
  182. # if [[ "X$ENABLE_GE_COV" = "Xon" ]]; then
  183. # echo "Generating coverage statistics, please wait..."
  184. # cd ${BASEPATH}
  185. # rm -rf ${BASEPATH}/cov
  186. # mkdir ${BASEPATH}/cov
  187. # gcovr -r ./ --exclude 'third_party' --exclude 'build' --exclude 'tests' --exclude 'prebuild' --exclude 'inc' --print-summary --html --html-details -d -o cov/index.html
  188. # fi
  189. # fi
  190. # generate output package in tar form, including ut/st libraries/executables
  191. generate_package()
  192. {
  193. cd "${BASEPATH}"
  194. GRAPHENGINE_LIB_PATH="lib"
  195. ACL_PATH="acllib/lib64"
  196. FWK_PATH="fwkacllib/lib64"
  197. ATC_PATH="atc/lib64"
  198. ATC_BIN_PATH="atc/bin"
  199. NNENGINE_PATH="plugin/nnengine/ge_config"
  200. OPSKERNEL_PATH="plugin/opskernel"
  201. ATC_LIB=("libc_sec.so" "libge_common.so" "libge_compiler.so" "libgraph.so" "libregister.so")
  202. FWK_LIB=("libge_common.so" "libge_runner.so" "libgraph.so" "libregister.so")
  203. PLUGIN_OPSKERNEL=("libge_local_engine.so" "libge_local_opskernel_builder.so" "libhost_cpu_engine.so" "libhost_cpu_opskernel_builder.so" "optimizer_priority.pbtxt")
  204. PARSER_LIB=("lib_caffe_parser.so" "libfmk_onnx_parser.so" "libfmk_parser.so" "libparser_common.so")
  205. rm -rf ${OUTPUT_PATH:?}/${FWK_PATH}/
  206. rm -rf ${OUTPUT_PATH:?}/${ACL_PATH}/
  207. rm -rf ${OUTPUT_PATH:?}/${ATC_PATH}/
  208. rm -rf ${OUTPUT_PATH:?}/${ATC_BIN_PATH}/
  209. mk_dir "${OUTPUT_PATH}/${FWK_PATH}/${NNENGINE_PATH}"
  210. mk_dir "${OUTPUT_PATH}/${FWK_PATH}/${OPSKERNEL_PATH}"
  211. mk_dir "${OUTPUT_PATH}/${ATC_PATH}/${NNENGINE_PATH}"
  212. mk_dir "${OUTPUT_PATH}/${ATC_PATH}/${OPSKERNEL_PATH}"
  213. mk_dir "${OUTPUT_PATH}/${ACL_PATH}"
  214. mk_dir "${OUTPUT_PATH}/${ATC_BIN_PATH}"
  215. cd "${OUTPUT_PATH}"
  216. find ./ -name graphengine_lib.tar -exec rm {} \;
  217. cp ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH}/engine_conf.json ${OUTPUT_PATH}/${FWK_PATH}/${NNENGINE_PATH}
  218. cp ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH}/engine_conf.json ${OUTPUT_PATH}/${ATC_PATH}/${NNENGINE_PATH}
  219. find ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH} -maxdepth 1 -name libengine.so -exec cp -f {} ${OUTPUT_PATH}/${FWK_PATH}/${NNENGINE_PATH}/../ \;
  220. find ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH} -maxdepth 1 -name libengine.so -exec cp -f {} ${OUTPUT_PATH}/${ATC_PATH}/${NNENGINE_PATH}/../ \;
  221. MAX_DEPTH=1
  222. if [ "x${PLATFORM}" = "xall" ] || [ "x${PLATFORM}" = "xinference" ]
  223. then
  224. MAX_DEPTH=2
  225. fi
  226. for lib in "${PLUGIN_OPSKERNEL[@]}";
  227. do
  228. find ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH} -maxdepth ${MAX_DEPTH} -name "$lib" -exec cp -f {} ${OUTPUT_PATH}/${FWK_PATH}/${OPSKERNEL_PATH} \;
  229. find ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH} -maxdepth ${MAX_DEPTH} -name "$lib" -exec cp -f {} ${OUTPUT_PATH}/${ATC_PATH}/${OPSKERNEL_PATH} \;
  230. done
  231. for lib in "${PARSER_LIB[@]}";
  232. do
  233. find ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH} -maxdepth 1 -name "$lib" -exec cp -f {} ${OUTPUT_PATH}/${FWK_PATH} \;
  234. find ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH} -maxdepth 1 -name "$lib" -exec cp -f {} ${OUTPUT_PATH}/${ATC_PATH} \;
  235. done
  236. for lib in "${FWK_LIB[@]}";
  237. do
  238. find ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH} -maxdepth 1 -name "$lib" -exec cp -f {} ${OUTPUT_PATH}/${FWK_PATH} \;
  239. done
  240. for lib in "${ATC_LIB[@]}";
  241. do
  242. find ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH} -maxdepth 1 -name "$lib" -exec cp -f {} ${OUTPUT_PATH}/${ATC_PATH} \;
  243. done
  244. find ./bin -name atc -exec cp {} "${OUTPUT_PATH}/${ATC_BIN_PATH}" \;
  245. find ${OUTPUT_PATH}/${GRAPHENGINE_LIB_PATH} -maxdepth 1 -name "libascendcl.so" -exec cp -f {} ${OUTPUT_PATH}/${ACL_PATH} \;
  246. if [ "x${PLATFORM}" = "xtrain" ]
  247. then
  248. tar -cf graphengine_lib.tar fwkacllib
  249. elif [ "x${PLATFORM}" = "xinference" ]
  250. then
  251. tar -cf graphengine_lib.tar acllib atc
  252. elif [ "x${PLATFORM}" = "xall" ]
  253. then
  254. tar -cf graphengine_lib.tar fwkacllib acllib atc
  255. fi
  256. }
  257. if [[ "X$ENABLE_GE_UT" = "Xoff" ]]; then
  258. generate_package
  259. fi
  260. echo "---------------- GraphEngine package archive generated ----------------"

图引擎模块(GE)是MindSpore的一个子模块,其代码由C++实现,位于前端模块ME和底层硬件之间,起到承接作用。图引擎模块以ME下发的图作为输入,然后进行一系列的深度图优化操作,最后输出一张可以在底层硬件上高效运行的图。GE针对昇腾AI处理器的硬件结构特点,做了特定的优化工作,以此来充分发挥出昇腾AI处理器的强大算力。在进行模型训练/推理时,GE会被自动调用而用户并不感知。GE主要由GE API和GE Core两部分组成,详细的架构图如下所示