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.

ge_env.sh 4.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #!/bin/bash
  2. # Copyright 2021 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. PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../}
  18. MOUNT_PROJECT_HOME=$(cd $PROJECT_HOME || return; pwd)
  19. DOCKER_BUILD_ENV_NAME=${MOUNT_PROJECT_HOME#*/}
  20. DOCKER_BUILD_ENV_NAME=${DOCKER_BUILD_ENV_NAME//\//\_}
  21. DOCKER_IMAGE_TAG=ge_build_env.1.0.9
  22. DOCKER_IAMGE_NAME=joycode2art/turing
  23. DOCKER_FULL_IMAGE_NAME=${DOCKER_IAMGE_NAME}:${DOCKER_IMAGE_TAG}
  24. if [ "$(uname)" == "Darwin" ]; then
  25. #running on Mac OS
  26. docker_cmd=docker
  27. MOUNT_PROJECT_HOME=${MOUNT_PROJECT_HOME}
  28. docker_work_dir=/code/Turing/graphEngine
  29. docker_bash_dir=/bin/bash
  30. elif [ "$(expr substr "$(uname -s)" 1 10)" == "MINGW32_NT" ] || [ "$(expr substr "$(uname -s)" 1 10)" == "MINGW64_NT" ]; then
  31. #running on Windows
  32. docker_cmd="winpty docker"
  33. MOUNT_PROJECT_HOME=/${MOUNT_PROJECT_HOME}
  34. docker_work_dir=//code/Turing/graphEngine
  35. docker_bash_dir=//bin/bash
  36. elif [ "$(expr substr "$(uname -s)" 1 5)" == "Linux" ]; then
  37. #running on Linux
  38. docker_cmd=docker
  39. MOUNT_PROJECT_HOME=${PROJECT_HOME}
  40. docker_work_dir=/code/Turing/graphEngine
  41. docker_bash_dir=/bin/bash
  42. fi
  43. function build_docker_image(){
  44. if test -z "$(docker images |grep ${DOCKER_IAMGE_NAME} | grep ${DOCKER_IMAGE_TAG})"; then
  45. $docker_cmd build -t ${DOCKER_FULL_IMAGE_NAME} ${PROJECT_HOME}/scripts/env
  46. else
  47. echo "docker image for graph engine build is build ok...."
  48. fi
  49. }
  50. function pull_docker_image(){
  51. $docker_cmd pull $DOCKER_FULL_IMAGE_NAME
  52. }
  53. function enter_docker_env(){
  54. if test -z "$(docker images |grep ${DOCKER_IAMGE_NAME} | grep ${DOCKER_IMAGE_TAG})"; then
  55. echo "please run 'ge env --pull' to download images first!"
  56. elif test -z "$(docker ps -a |grep ${DOCKER_BUILD_ENV_NAME})"; then
  57. $docker_cmd run -p 7002:22 -p 7003:7777 --privileged=true -it -v ${MOUNT_PROJECT_HOME}:/code/Turing/graphEngine --workdir ${docker_work_dir} --name ${DOCKER_BUILD_ENV_NAME} ${DOCKER_FULL_IMAGE_NAME} ${docker_bash_dir}
  58. elif test -z "$(docker ps |grep ${DOCKER_BUILD_ENV_NAME})"; then
  59. $docker_cmd start ${DOCKER_BUILD_ENV_NAME}
  60. $docker_cmd exec -w ${docker_work_dir} -it ${DOCKER_BUILD_ENV_NAME} ${docker_bash_dir}
  61. else
  62. $docker_cmd exec -w ${docker_work_dir} -it ${DOCKER_BUILD_ENV_NAME} ${docker_bash_dir}
  63. fi
  64. }
  65. function resert_docker_env(){
  66. if test -z "$(docker ps -a |grep ${DOCKER_BUILD_ENV_NAME})"; then
  67. echo "no runing container for graphengine build"
  68. elif test -z "$(docker ps |grep ${DOCKER_BUILD_ENV_NAME})"; then
  69. $docker_cmd rm ${DOCKER_BUILD_ENV_NAME}
  70. else
  71. $docker_cmd stop ${DOCKER_BUILD_ENV_NAME}
  72. $docker_cmd rm ${DOCKER_BUILD_ENV_NAME}
  73. fi
  74. }
  75. function help(){
  76. cat <<-EOF
  77. Usage: ge env [OPTIONS]
  78. Prepare for docker env for build and test
  79. Options:
  80. -b, --build Build docker image
  81. -p, --pull Pull docker image
  82. -e, --enter Enter container
  83. -r, --reset Reset container
  84. -h, --help
  85. EOF
  86. }
  87. function parse_args(){
  88. parsed_args=$(getopt -a -o bperh --long build,pull,enter,reset,help -- "$@") || {
  89. help
  90. exit 1
  91. }
  92. if [ $# -lt 1 ]; then
  93. pull_docker_image
  94. enter_docker_env
  95. exit 1
  96. fi
  97. eval set -- "$parsed_args"
  98. while true; do
  99. case "$1" in
  100. -b | --build)
  101. build_docker_image
  102. ;;
  103. -p | --pull)
  104. pull_docker_image
  105. ;;
  106. -e | --enter)
  107. enter_docker_env
  108. ;;
  109. -r | --reset)
  110. resert_docker_env
  111. ;;
  112. -h | --help)
  113. help
  114. ;;
  115. --)
  116. shift; break;
  117. ;;
  118. *)
  119. help; exit 1
  120. ;;
  121. esac
  122. shift
  123. done
  124. }
  125. function main(){
  126. parse_args "$@"
  127. }
  128. main "$@"
  129. set -e

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