Compare commits
No commits in common. "master" and "master" have entirely different histories.
|
|
@ -3,10 +3,6 @@ build/
|
|||
mindspore/lib
|
||||
output
|
||||
*.ir
|
||||
st_tests
|
||||
kernel_meta/
|
||||
somas_meta/
|
||||
trace_code_graph_*
|
||||
|
||||
# mindspore lite java
|
||||
mindspore/lite/java/java/.gradle
|
||||
|
|
|
|||
|
|
@ -1,6 +1,33 @@
|
|||
[submodule "third_party/flatbuffers"]
|
||||
path = third_party/flatbuffers
|
||||
url = https://github.com/google/flatbuffers.git
|
||||
ignore = all
|
||||
[submodule "third_party/googletest"]
|
||||
path = third_party/googletest
|
||||
url = https://github.com/google/googletest.git
|
||||
[submodule "third_party/protobuf"]
|
||||
path = third_party/protobuf
|
||||
url = https://github.com/protocolbuffers/protobuf.git
|
||||
ignore = all
|
||||
[submodule "akg"]
|
||||
path = akg
|
||||
url = https://gitee.com/mindspore/akg.git
|
||||
[submodule "graphengine"]
|
||||
path = graphengine
|
||||
url = https://gitee.com/mindspore/graphengine.git
|
||||
[submodule "third_party/OpenCL-CLHPP"]
|
||||
path = third_party/OpenCL-CLHPP
|
||||
url = https://github.com/KhronosGroup/OpenCL-CLHPP.git
|
||||
[submodule "third_party/OpenCL-Headers"]
|
||||
path = third_party/OpenCL-Headers
|
||||
url = https://github.com/KhronosGroup/OpenCL-Headers.git
|
||||
[submodule "third_party/opencv"]
|
||||
path = third_party/opencv
|
||||
url = https://github.com/opencv/opencv.git
|
||||
[submodule "third_party/eigen"]
|
||||
path = third_party/eigen
|
||||
url = https://gitlab.com/libeigen/eigen.git
|
||||
[submodule "third_party/libjpeg-turbo"]
|
||||
path = third_party/libjpeg-turbo
|
||||
url = https://github.com/libjpeg-turbo/libjpeg-turbo.git
|
||||
ignore = dirty
|
||||
|
|
|
|||
|
|
@ -1,46 +1,36 @@
|
|||
cmake_minimum_required(VERSION 3.14.0)
|
||||
project(MindSpore)
|
||||
cmake_minimum_required(VERSION 3.14.1)
|
||||
project (MindSpore)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3.0)
|
||||
message(FATAL_ERROR "GCC version ${CMAKE_CXX_COMPILER_VERSION} must not be less than 7.3.0")
|
||||
endif()
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3.0)
|
||||
message(FATAL_ERROR "GCC vesion ${CMAKE_CXX_COMPILER_VERSION} must not be less than 7.3.0")
|
||||
endif ()
|
||||
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/options.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/check_requirements.cmake)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
|
||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if(NOT ENABLE_GLIBCXX)
|
||||
add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)
|
||||
endif()
|
||||
endif()
|
||||
if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)
|
||||
endif ()
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(CMAKE_OSX_SYSROOT "")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O2 -Winconsistent-missing-override -Wuser-defined-warnings \
|
||||
-Wno-return-std-move -Wno-unused-private-field -Wno-unused-lambda-capture -Wno-sign-compare \
|
||||
-Wno-overloaded-virtual -Wno-unneeded-internal-declaration -Wno-unused-variable -Wno-pessimizing-move \
|
||||
-Wno-inconsistent-missing-override -DHALF_ENABLE_CPP11_USER_LITERALS=0 -D_FORTIFY_SOURCE=2")
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O2 -Werror -Wno-return-std-move -Wno-unused-private-field -Wno-unused-lambda-capture -Wno-sign-compare -Wno-overloaded-virtual -Wno-unneeded-internal-declaration -Wno-unused-variable -Wno-pessimizing-move -Wno-inconsistent-missing-override -DHALF_ENABLE_CPP11_USER_LITERALS=0 -D_FORTIFY_SOURCE=2")
|
||||
else()
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O2 -Wl,--allow-shlib-undefined \
|
||||
-DHALF_ENABLE_CPP11_USER_LITERALS=0 -D_FORTIFY_SOURCE=2")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O2 -Wl,--allow-shlib-undefined -DHALF_ENABLE_CPP11_USER_LITERALS=0 -D_FORTIFY_SOURCE=2")
|
||||
endif()
|
||||
|
||||
if(ENABLE_PYTHON)
|
||||
if (ENABLE_PYTHON)
|
||||
add_compile_definitions(ENABLE_PYTHON)
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g2 -ggdb -fno-inline-functions -fno-omit-frame-pointer \
|
||||
-Wl,--allow-shlib-undefined -D_LIBCPP_INLINE_VISIBILITY='' -D_LIBCPP_DISABLE_EXTERN_TEMPLATE=1 \
|
||||
-DHALF_ENABLE_CPP11_USER_LITERALS=0 -D_FORTIFY_SOURCE=2 -Wno-cpp")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g2 -ggdb -fno-inline-functions -fno-omit-frame-pointer -Wl,--allow-shlib-undefined -D_LIBCPP_INLINE_VISIBILITY='' -D_LIBCPP_DISABLE_EXTERN_TEMPLATE=1 -DHALF_ENABLE_CPP11_USER_LITERALS=0 -D_FORTIFY_SOURCE=2 -Wno-cpp")
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/include -std=c++17 \
|
||||
-Werror -Wall -Wno-deprecated-declarations -fPIC")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/include -std=c++17 -Werror -Wall -fPIC")
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
set(PYBIND11_CPP_STANDARD -std=c++17)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPTION_CXX_FLAGS}")
|
||||
|
||||
if(ENABLE_AKG AND (ENABLE_D OR ENABLE_GPU))
|
||||
if (ENABLE_AKG AND (ENABLE_D OR ENABLE_GPU))
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/akg")
|
||||
endif()
|
||||
|
||||
|
|
@ -51,12 +41,12 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/flatbuffers/include)
|
|||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/flatbuffers/include/flatbuffers)
|
||||
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/dependency_utils.cmake)
|
||||
find_package(Python3 COMPONENTS Interpreter Development)
|
||||
find_package(Python3 3.7 COMPONENTS Interpreter Development)
|
||||
if(Python3_FOUND)
|
||||
set(PYTHON_INCLUDE_DIRS "${Python3_INCLUDE_DIRS}")
|
||||
set(PYTHON_LIBRARIES "${Python3_LIBRARIES}")
|
||||
if(WIN32)
|
||||
if(Python3_DIR)
|
||||
if (WIN32)
|
||||
if (Python3_DIR)
|
||||
message("Python3_DIR set already: " ${Python3_DIR})
|
||||
else()
|
||||
string(LENGTH ${PYTHON_LIBRARIES} PYTHON_LIBRARIES_LEN)
|
||||
|
|
@ -79,15 +69,30 @@ include_directories(${PYTHON_INCLUDE_DIRS})
|
|||
set(MS_CCSRC_PATH ${CMAKE_SOURCE_DIR}/mindspore/ccsrc)
|
||||
set(MS_CCSRC_BUILD_PATH ${BUILD_PATH}/mindspore/mindspore/ccsrc)
|
||||
|
||||
if(ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES)
|
||||
if (ENABLE_GE)
|
||||
link_directories(${CMAKE_SOURCE_DIR}/third_party/ge/lib)
|
||||
elseif(ENABLE_D OR ENABLE_TESTCASES)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/dependency_graphengine.cmake)
|
||||
endif()
|
||||
|
||||
if (ENABLE_GE OR ENABLE_D OR ENABLE_TESTCASES)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/graphengine/inc)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/graphengine/inc/external)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/graphengine/inc/framework)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/graphengine/third_party/fwkacllib/inc)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/graphengine/third_party/fwkacllib/inc/toolchain)
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
|
||||
add_subdirectory(mindspore/ccsrc)
|
||||
add_subdirectory(mindspore/core)
|
||||
if(ENABLE_TESTCASES OR ENABLE_CPP_ST)
|
||||
if (ENABLE_TESTCASES)
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
||||
if (ENABLE_SERVING)
|
||||
add_subdirectory(serving)
|
||||
add_subdirectory(serving/example/cpp_client)
|
||||
endif()
|
||||
|
||||
include(cmake/package.cmake)
|
||||
|
|
|
|||
|
|
@ -30,24 +30,23 @@ For individual contributor, please refer to [ICLA online document](https://www.m
|
|||
|
||||
Please follow this style to make MindSpore easy to review, maintain and develop.
|
||||
|
||||
- Coding guidelines
|
||||
* Coding guidelines
|
||||
|
||||
The *Python* coding style suggested by [Python PEP 8 Coding Style](https://pep8.org/) and *C++* coding style suggested by [Google C++ Coding Guidelines](http://google.github.io/styleguide/cppguide.html) are used in MindSpore community.
|
||||
|
||||
- Unittest guidelines
|
||||
* Unittest guidelines
|
||||
|
||||
The *Python* unittest style suggested by [pytest](http://www.pytest.org/en/latest/) and *C++* unittest style suggested by [Googletest Primer](https://github.com/google/googletest/blob/master/docs/primer.md) are used in MindSpore community.
|
||||
The *Python* unittest style suggested by [pytest](http://www.pytest.org/en/latest/) and *C++* unittest style suggested by [Googletest Primer](https://github.com/google/googletest/blob/master/googletest/docs/primer.md) are used in MindSpore community.
|
||||
|
||||
### Fork-Pull development model
|
||||
|
||||
- Fork MindSpore repository
|
||||
* Fork MindSpore repository
|
||||
|
||||
Before submitting code to MindSpore project, please make sure that this project have been forked to your own repository. It means that there will be parallel development between MindSpore repository and your own repository, so be careful to avoid the inconsistency between them.
|
||||
|
||||
- Clone the remote repository
|
||||
* Clone the remote repository
|
||||
|
||||
If you want to download the code to the local machine, `git` is the best way:
|
||||
|
||||
```shell
|
||||
# For GitHub
|
||||
git clone https://github.com/{insert_your_forked_repo}/mindspore.git
|
||||
|
|
@ -57,20 +56,18 @@ Please follow this style to make MindSpore easy to review, maintain and develop.
|
|||
git remote add upstream https://gitee.com/mindspore/mindspore.git
|
||||
```
|
||||
|
||||
- Develop code locally
|
||||
* Develop code locally
|
||||
|
||||
To avoid inconsistency between multiple branches, checking out to a new branch is `SUGGESTED`:
|
||||
|
||||
```shell
|
||||
git checkout -b {new_branch_name} origin/master
|
||||
```
|
||||
|
||||
Then you can change the code arbitrarily.
|
||||
|
||||
- Push the code to the remote repository
|
||||
* Push the code to the remote repository
|
||||
|
||||
After updating the code, you should push the update in the formal way:
|
||||
|
||||
```shell
|
||||
git add .
|
||||
git status # Check the update status
|
||||
|
|
@ -79,7 +76,7 @@ Please follow this style to make MindSpore easy to review, maintain and develop.
|
|||
git push origin {new_branch_name}
|
||||
```
|
||||
|
||||
- Pull a request to MindSpore repository
|
||||
* Pull a request to MindSpore repository
|
||||
|
||||
In the last step, your need to pull a compare request between your new branch and MindSpore `master` branch. After finishing the pull request, the Jenkins CI will be automatically set up for building test.
|
||||
|
||||
|
|
@ -104,11 +101,11 @@ When reporting issues, refer to this format:
|
|||
|
||||
### Propose PRs
|
||||
|
||||
- Raise your idea as an *issue* on [GitHub](https://github.com/mindspore-ai/mindspore/issues) or [Gitee](https://gitee.com/mindspore/mindspore/issues)
|
||||
- If it is a new feature that needs lots of design details, a design proposal should also be submitted.
|
||||
- After reaching consensus in the issue discussions and design proposal reviews, complete the development on the forked repo and submit a PR.
|
||||
- None of PRs is not permitted until it receives **2+ LGTM** from approvers. Please NOTICE that approver is NOT allowed to add *LGTM* on his own PR.
|
||||
- After PR is sufficiently discussed, it will get merged, abandoned or rejected depending on the outcome of the discussion.
|
||||
* Raise your idea as an *issue* on [GitHub](https://github.com/mindspore-ai/mindspore/issues) or [Gitee](https://gitee.com/mindspore/mindspore/issues)
|
||||
* If it is a new feature that needs lots of design details, a design proposal should also be submitted.
|
||||
* After reaching consensus in the issue discussions and design proposal reviews, complete the development on the forked repo and submit a PR.
|
||||
* None of PRs is not permitted until it receives **2+ LGTM** from approvers. Please NOTICE that approver is NOT allowed to add *LGTM* on his own PR.
|
||||
* After PR is sufficiently discussed, it will get merged, abandoned or rejected depending on the outcome of the discussion.
|
||||
|
||||
**PRs advisory:**
|
||||
|
||||
|
|
|
|||
119
README.md
119
README.md
|
|
@ -1,15 +1,14 @@
|
|||

|
||||

|
||||
============================================================
|
||||
|
||||
[查看中文](./README_CN.md)
|
||||
|
||||
<!-- TOC -->
|
||||
|
||||
- [What Is MindSpore](#what-is-mindspore)
|
||||
- [Automatic Differentiation](#automatic-differentiation)
|
||||
- [Automatic Parallel](#automatic-parallel)
|
||||
- [Installation](#installation)
|
||||
- [Pip mode method installation](#pip-mode-method-installation)
|
||||
- [Source code compilation installation](#source-code-compilation-installation)
|
||||
- [Binaries](#binaries)
|
||||
- [From Source](#from-source)
|
||||
- [Docker Image](#docker-image)
|
||||
- [Quickstart](#quickstart)
|
||||
- [Docs](#docs)
|
||||
|
|
@ -17,13 +16,9 @@
|
|||
- [Governance](#governance)
|
||||
- [Communication](#communication)
|
||||
- [Contributing](#contributing)
|
||||
- [Maintenance phases](#maintenance-phases)
|
||||
- [Maintenance status](#maintenance-status)
|
||||
- [Release Notes](#release-notes)
|
||||
- [License](#license)
|
||||
|
||||
<!-- /TOC -->
|
||||
|
||||
## What Is MindSpore
|
||||
|
||||
MindSpore is a new open source deep learning training/inference framework that
|
||||
|
|
@ -34,7 +29,7 @@ processor, and software hardware co-optimization. At the meantime MindSpore as
|
|||
a global AI open source community, aims to further advance the development and
|
||||
enrichment of the AI software/hardware application ecosystem.
|
||||
|
||||
<img src="https://gitee.com/mindspore/mindspore/raw/master/docs/MindSpore-architecture.png" alt="MindSpore Architecture" width="600"/>
|
||||
<img src="docs/MindSpore-architecture.png" alt="MindSpore Architecture" width="600"/>
|
||||
|
||||
For more details please check out our [Architecture Guide](https://www.mindspore.cn/doc/note/en/master/design/mindspore/architecture.html).
|
||||
|
||||
|
|
@ -50,7 +45,7 @@ TensorFlow adopted static calculation diagrams in the early days, whereas PyTorc
|
|||
|
||||
But MindSpore finds another way, automatic differentiation based on source code conversion. On the one hand, it supports automatic differentiation of automatic control flow, so it is quite convenient to build models like PyTorch. On the other hand, MindSpore can perform static compilation optimization on neural networks to achieve great performance.
|
||||
|
||||
<img src="https://gitee.com/mindspore/mindspore/raw/master/docs/Automatic-differentiation.png" alt="Automatic Differentiation" width="600"/>
|
||||
<img src="docs/Automatic-differentiation.png" alt="Automatic Differentiation" width="600"/>
|
||||
|
||||
The implementation of MindSpore automatic differentiation can be understood as the symbolic differentiation of the program itself. Because MindSpore IR is a functional intermediate expression, it has an intuitive correspondence with the composite function in basic algebra. The derivation formula of the composite function composed of arbitrary basic functions can be derived. Each primitive operation in MindSpore IR can correspond to the basic functions in basic algebra, which can build more complex flow control.
|
||||
|
||||
|
|
@ -58,13 +53,13 @@ The implementation of MindSpore automatic differentiation can be understood as t
|
|||
|
||||
The goal of MindSpore automatic parallel is to build a training method that combines data parallelism, model parallelism, and hybrid parallelism. It can automatically select a least cost model splitting strategy to achieve automatic distributed parallel training.
|
||||
|
||||
<img src="https://gitee.com/mindspore/mindspore/raw/master/docs/Automatic-parallel.png" alt="Automatic Parallel" width="600"/>
|
||||
<img src="docs/Automatic-parallel.png" alt="Automatic Parallel" width="600"/>
|
||||
|
||||
At present, MindSpore uses a fine-grained parallel strategy of splitting operators, that is, each operator in the figure is split into a cluster to complete parallel operations. The splitting strategy during this period may be very complicated, but as a developer advocating Pythonic, you don't need to care about the underlying implementation, as long as the top-level API compute is efficient.
|
||||
At present, MindSpore uses a fine-grained parallel strategy of splitting operators, that is, each operator in the figure is splitted into a cluster to complete parallel operations. The splitting strategy during this period may be very complicated, but as a developer advocating Pythonic, you don't need to care about the underlying implementation, as long as the top-level API compute is efficient.
|
||||
|
||||
## Installation
|
||||
|
||||
### Pip mode method installation
|
||||
### Binaries
|
||||
|
||||
MindSpore offers build options across multiple backends:
|
||||
|
||||
|
|
@ -72,6 +67,7 @@ MindSpore offers build options across multiple backends:
|
|||
| :---------------- | :--------------- | :----- |
|
||||
| Ascend910 | Ubuntu-x86 | ✔️ |
|
||||
| | Ubuntu-aarch64 | ✔️ |
|
||||
| | EulerOS-x86 | ✔️ |
|
||||
| | EulerOS-aarch64 | ✔️ |
|
||||
| | CentOS-x86 | ✔️ |
|
||||
| | CentOS-aarch64 | ✔️ |
|
||||
|
|
@ -84,8 +80,8 @@ For installation using `pip`, take `CPU` and `Ubuntu-x86` build version as an ex
|
|||
|
||||
1. Download whl from [MindSpore download page](https://www.mindspore.cn/versions/en), and install the package.
|
||||
|
||||
```bash
|
||||
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.2.0-rc1/MindSpore/cpu/ubuntu_x86/mindspore-1.2.0rc1-cp37-cp37m-linux_x86_64.whl
|
||||
```
|
||||
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.0.0/MindSpore/cpu/ubuntu_x86/mindspore-1.0.0-cp37-cp37m-linux_x86_64.whl
|
||||
```
|
||||
|
||||
2. Run the following command to verify the install.
|
||||
|
|
@ -113,24 +109,13 @@ For installation using `pip`, take `CPU` and `Ubuntu-x86` build version as an ex
|
|||
mul = Mul()
|
||||
print(mul(x, y))
|
||||
```
|
||||
|
||||
```text
|
||||
```
|
||||
[ 4. 10. 18.]
|
||||
```
|
||||
|
||||
Use pip mode method to install MindSpore in different environments. Refer to the following documents.
|
||||
### From Source
|
||||
|
||||
- [Using pip mode method to install MindSpore in Ascend environment](https://gitee.com/mindspore/docs/blob/master/install/mindspore_ascend_install_pip_en.md)
|
||||
- [Using pip mode method to install MindSpore in GPU environment](https://gitee.com/mindspore/docs/blob/master/install/mindspore_gpu_install_pip_en.md)
|
||||
- [Using pip mode method to install MindSpore in CPU environment](https://gitee.com/mindspore/docs/blob/master/install/mindspore_cpu_install_pip_en.md)
|
||||
|
||||
### Source code compilation installation
|
||||
|
||||
Use the source code compilation method to install MindSpore in different environments. Refer to the following documents.
|
||||
|
||||
- [Using the source code compilation method to install MindSpore in Ascend environment](https://gitee.com/mindspore/docs/blob/master/install/mindspore_ascend_install_source_en.md)
|
||||
- [Using the source code compilation method to install MindSpore in GPU environment](https://gitee.com/mindspore/docs/blob/master/install/mindspore_gpu_install_source_en.md)
|
||||
- [Using the source code compilation method to install MindSpore in CPU environment](https://gitee.com/mindspore/docs/blob/master/install/mindspore_cpu_install_source_en.md)
|
||||
[Install MindSpore](https://www.mindspore.cn/install/en).
|
||||
|
||||
### Docker Image
|
||||
|
||||
|
|
@ -140,29 +125,27 @@ currently the containerized build options are supported as follows:
|
|||
| Hardware Platform | Docker Image Repository | Tag | Description |
|
||||
| :---------------- | :---------------------- | :-- | :---------- |
|
||||
| CPU | `mindspore/mindspore-cpu` | `x.y.z` | Production environment with pre-installed MindSpore `x.y.z` CPU release. |
|
||||
| | | `devel` | Development environment provided to build MindSpore (with `CPU` backend) from the source, refer to <https://www.mindspore.cn/install/en> for installation details. |
|
||||
| | | `devel` | Development environment provided to build MindSpore (with `CPU` backend) from the source, refer to https://www.mindspore.cn/install/en for installation details. |
|
||||
| | | `runtime` | Runtime environment provided to install MindSpore binary package with `CPU` backend. |
|
||||
| GPU | `mindspore/mindspore-gpu` | `x.y.z` | Production environment with pre-installed MindSpore `x.y.z` GPU release. |
|
||||
| | | `devel` | Development environment provided to build MindSpore (with `GPU CUDA10.1` backend) from the source, refer to <https://www.mindspore.cn/install/en> for installation details. |
|
||||
| | | `devel` | Development environment provided to build MindSpore (with `GPU CUDA10.1` backend) from the source, refer to https://www.mindspore.cn/install/en for installation details. |
|
||||
| | | `runtime` | Runtime environment provided to install MindSpore binary package with `GPU CUDA10.1` backend. |
|
||||
| Ascend | <center>—</center> | <center>—</center> | Coming soon. |
|
||||
|
||||
> **NOTICE:** For GPU `devel` docker image, it's NOT suggested to directly install the whl package after building from the source, instead we strongly RECOMMEND you transfer and install the whl package inside GPU `runtime` docker image.
|
||||
|
||||
- CPU
|
||||
* CPU
|
||||
|
||||
For `CPU` backend, you can directly pull and run the latest stable image using the below command:
|
||||
|
||||
```bash
|
||||
docker pull mindspore/mindspore-cpu:1.1.0
|
||||
docker run -it mindspore/mindspore-cpu:1.1.0 /bin/bash
|
||||
```
|
||||
docker pull mindspore/mindspore-cpu:1.0.0
|
||||
docker run -it mindspore/mindspore-cpu:1.0.0 /bin/bash
|
||||
```
|
||||
|
||||
- GPU
|
||||
* GPU
|
||||
|
||||
For `GPU` backend, please make sure the `nvidia-container-toolkit` has been installed in advance, here are some install guidelines for `Ubuntu` users:
|
||||
|
||||
```bash
|
||||
```
|
||||
DISTRIBUTION=$(. /etc/os-release; echo $ID$VERSION_ID)
|
||||
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
|
||||
curl -s -L https://nvidia.github.io/nvidia-docker/$DISTRIBUTION/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
|
||||
|
|
@ -170,10 +153,8 @@ currently the containerized build options are supported as follows:
|
|||
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-docker2
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
Then edit the file daemon.json:
|
||||
|
||||
```bash
|
||||
```
|
||||
$ vim /etc/docker/daemon.json
|
||||
{
|
||||
"runtimes": {
|
||||
|
|
@ -184,23 +165,18 @@ currently the containerized build options are supported as follows:
|
|||
}
|
||||
}
|
||||
```
|
||||
|
||||
Restart docker again:
|
||||
|
||||
```bash
|
||||
```
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
Then you can pull and run the latest stable image using the below command:
|
||||
|
||||
```bash
|
||||
docker pull mindspore/mindspore-gpu:1.1.0
|
||||
docker run -it -v /dev/shm:/dev/shm --runtime=nvidia --privileged=true mindspore/mindspore-gpu:1.1.0 /bin/bash
|
||||
```
|
||||
docker pull mindspore/mindspore-gpu:1.0.0
|
||||
docker run -it --runtime=nvidia --privileged=true mindspore/mindspore-gpu:1.0.0 /bin/bash
|
||||
```
|
||||
|
||||
To test if the docker image works, please execute the python code below and check the output:
|
||||
|
||||
```python
|
||||
import numpy as np
|
||||
import mindspore.context as context
|
||||
|
|
@ -213,8 +189,7 @@ currently the containerized build options are supported as follows:
|
|||
y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
|
||||
print(F.tensor_add(x, y))
|
||||
```
|
||||
|
||||
```text
|
||||
```
|
||||
[[[ 2. 2. 2. 2.],
|
||||
[ 2. 2. 2. 2.],
|
||||
[ 2. 2. 2. 2.]],
|
||||
|
|
@ -229,11 +204,11 @@ currently the containerized build options are supported as follows:
|
|||
```
|
||||
|
||||
If you want to learn more about the building process of MindSpore docker images,
|
||||
please check out [docker](https://gitee.com/mindspore/mindspore/blob/master/docker/README.md) repo for the details.
|
||||
please check out [docker](docker/README.md) repo for the details.
|
||||
|
||||
## Quickstart
|
||||
|
||||
See the [Quick Start](https://www.mindspore.cn/tutorial/training/en/master/quick_start/quick_start.html)
|
||||
See the [Quick Start](https://www.mindspore.cn/tutorial/training/en/master/quick_start/quick_start.html)
|
||||
to implement the image classification.
|
||||
|
||||
## Docs
|
||||
|
|
@ -256,39 +231,13 @@ Check out how MindSpore Open Governance [works](https://gitee.com/mindspore/comm
|
|||
|
||||
## Contributing
|
||||
|
||||
Welcome contributions. See our [Contributor Wiki](https://gitee.com/mindspore/mindspore/blob/master/CONTRIBUTING.md) for
|
||||
Welcome contributions. See our [Contributor Wiki](CONTRIBUTING.md) for
|
||||
more details.
|
||||
|
||||
## Maintenance phases
|
||||
|
||||
Project stable branches will be in one of the following states:
|
||||
|
||||
| **State** | **Time frame** | **Summary** |
|
||||
|-------------|---------------|--------------------------------------------------|
|
||||
| Planning | 1 - 3 months | Features are under planning. |
|
||||
| Development | 3 months | Features are under development. |
|
||||
| Maintained | 6 - 12 months | All bugfixes are appropriate. Releases produced. |
|
||||
| Unmaintained| 0 - 3 months | All bugfixes are appropriate. No Maintainers and No Releases produced. |
|
||||
| End Of Life (EOL) | N/A | Branch no longer accepting changes. |
|
||||
|
||||
## Maintenance status
|
||||
|
||||
| **Branch** | **Status** | **Initial Release Date** | **Next Phase** | **EOL Date** |
|
||||
|--------|--------------|----------------------|-----------------------------------|------------|
|
||||
| **r1.2** | Development | 2021-03-31 estimated | Maintained <br> 2021-03-31 estimated | |
|
||||
| **r1.1** | Maintained | 2020-12-31 | Unmaintained <br> 2021-06-30 estimated | |
|
||||
| **r1.0** | Maintained | 2020-09-24 | Unmaintained <br> 2021-03-30 estimated | |
|
||||
| **r0.7** | Unmaintained | 2020-08-31 | End Of Life <br> 2021-02-28 estimated | |
|
||||
| **r0.6** | End Of Life | 2020-07-31 | | 2020-12-30 |
|
||||
| **r0.5** | Maintained | 2020-06-30 | Unmaintained <br> 2021-06-30 estimated | |
|
||||
| **r0.3** | End Of Life | 2020-05-31 | | 2020-09-30 |
|
||||
| **r0.2** | End Of Life | 2020-04-30 | | 2020-08-31 |
|
||||
| **r0.1** | End Of Life | 2020-03-28 | | 2020-06-30 |
|
||||
|
||||
## Release Notes
|
||||
|
||||
The release notes, see our [RELEASE](https://gitee.com/mindspore/mindspore/blob/master/RELEASE.md).
|
||||
The release notes, see our [RELEASE](RELEASE.md).
|
||||
|
||||
## License
|
||||
|
||||
[Apache License 2.0](https://gitee.com/mindspore/mindspore#/mindspore/mindspore/blob/master/LICENSE)
|
||||
[Apache License 2.0](LICENSE)
|
||||
|
|
|
|||
127
README_CN.md
127
README_CN.md
|
|
@ -1,15 +1,14 @@
|
|||

|
||||

|
||||
============================================================
|
||||
|
||||
[View English](./README.md)
|
||||
|
||||
<!-- TOC -->
|
||||
|
||||
- [MindSpore介绍](#mindspore介绍)
|
||||
- [自动微分](#自动微分)
|
||||
- [自动并行](#自动并行)
|
||||
- [安装](#安装)
|
||||
- [pip方式安装](#pip方式安装)
|
||||
- [源码编译方式安装](#源码编译方式安装)
|
||||
- [二进制文件](#二进制文件)
|
||||
- [来源](#来源)
|
||||
- [Docker镜像](#docker镜像)
|
||||
- [快速入门](#快速入门)
|
||||
- [文档](#文档)
|
||||
|
|
@ -17,13 +16,9 @@
|
|||
- [治理](#治理)
|
||||
- [交流](#交流)
|
||||
- [贡献](#贡献)
|
||||
- [分支维护策略](#分支维护策略)
|
||||
- [现有分支维护状态](#现有分支维护状态)
|
||||
- [版本说明](#版本说明)
|
||||
- [许可证](#许可证)
|
||||
|
||||
<!-- /TOC -->
|
||||
|
||||
## MindSpore介绍
|
||||
|
||||
MindSpore是一种适用于端边云场景的新型开源深度学习训练/推理框架。
|
||||
|
|
@ -31,7 +26,7 @@ MindSpore提供了友好的设计和高效的执行,旨在提升数据科学
|
|||
|
||||
同时,MindSpore作为全球AI开源社区,致力于进一步开发和丰富AI软硬件应用生态。
|
||||
|
||||
<img src="https://gitee.com/mindspore/mindspore/raw/master/docs/MindSpore-architecture.png" alt="MindSpore Architecture" width="600"/>
|
||||
<img src="docs/MindSpore-architecture.png" alt="MindSpore Architecture" width="600"/>
|
||||
|
||||
欲了解更多详情,请查看我们的[总体架构](https://www.mindspore.cn/doc/note/zh-CN/master/design/mindspore/architecture.html)。
|
||||
|
||||
|
|
@ -47,7 +42,7 @@ TensorFlow早期采用的是静态计算图,PyTorch采用的是动态计算图
|
|||
|
||||
MindSpore找到了另一种方法,即基于源代码转换的自动微分。一方面,它支持自动控制流的自动微分,因此像PyTorch这样的模型构建非常方便。另一方面,MindSpore可以对神经网络进行静态编译优化,以获得更好的性能。
|
||||
|
||||
<img src="https://gitee.com/mindspore/mindspore/raw/master/docs/Automatic-differentiation.png" alt="Automatic Differentiation" width="600"/>
|
||||
<img src="docs/Automatic-differentiation.png" alt="Automatic Differentiation" width="600"/>
|
||||
|
||||
MindSpore自动微分的实现可以理解为程序本身的符号微分。MindSpore IR是一个函数中间表达式,它与基础代数中的复合函数具有直观的对应关系。复合函数的公式由任意可推导的基础函数组成。MindSpore IR中的每个原语操作都可以对应基础代数中的基本功能,从而可以建立更复杂的流控制。
|
||||
|
||||
|
|
@ -55,13 +50,13 @@ MindSpore自动微分的实现可以理解为程序本身的符号微分。MindS
|
|||
|
||||
MindSpore自动并行的目的是构建数据并行、模型并行和混合并行相结合的训练方法。该方法能够自动选择开销最小的模型切分策略,实现自动分布并行训练。
|
||||
|
||||
<img src="https://gitee.com/mindspore/mindspore/raw/master/docs/Automatic-parallel.png" alt="Automatic Parallel" width="600"/>
|
||||
<img src="docs/Automatic-parallel.png" alt="Automatic Parallel" width="600"/>
|
||||
|
||||
目前MindSpore采用的是算子切分的细粒度并行策略,即图中的每个算子被切分为一个集群,完成并行操作。在此期间的切分策略可能非常复杂,但是作为一名Python开发者,您无需关注底层实现,只要顶层API计算是有效的即可。
|
||||
|
||||
## 安装
|
||||
|
||||
### pip方式安装
|
||||
### 二进制文件
|
||||
|
||||
MindSpore提供跨多个后端的构建选项:
|
||||
|
||||
|
|
@ -69,6 +64,7 @@ MindSpore提供跨多个后端的构建选项:
|
|||
| :------------ | :-------------- | :--- |
|
||||
| Ascend 910 | Ubuntu-x86 | ✔️ |
|
||||
| | Ubuntu-aarch64 | ✔️ |
|
||||
| | EulerOS-x86 | ✔️ |
|
||||
| | EulerOS-aarch64 | ✔️ |
|
||||
| | CentOS-x86 | ✔️ |
|
||||
| | CentOS-aarch64 | ✔️ |
|
||||
|
|
@ -81,8 +77,8 @@ MindSpore提供跨多个后端的构建选项:
|
|||
|
||||
1. 请从[MindSpore下载页面](https://www.mindspore.cn/versions)下载并安装whl包。
|
||||
|
||||
```bash
|
||||
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.2.0-rc1/MindSpore/cpu/ubuntu_x86/mindspore-1.2.0rc1-cp37-cp37m-linux_x86_64.whl
|
||||
```
|
||||
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.0.0/MindSpore/cpu/ubuntu_x86/mindspore-1.0.0-cp37-cp37m-linux_x86_64.whl
|
||||
```
|
||||
|
||||
2. 执行以下命令,验证安装结果。
|
||||
|
|
@ -93,41 +89,29 @@ MindSpore提供跨多个后端的构建选项:
|
|||
import mindspore.nn as nn
|
||||
from mindspore import Tensor
|
||||
from mindspore.ops import operations as P
|
||||
|
||||
|
||||
context.set_context(mode=context.GRAPH_MODE, device_target="CPU")
|
||||
|
||||
|
||||
class Mul(nn.Cell):
|
||||
def __init__(self):
|
||||
super(Mul, self).__init__()
|
||||
self.mul = P.Mul()
|
||||
|
||||
|
||||
def construct(self, x, y):
|
||||
return self.mul(x, y)
|
||||
|
||||
|
||||
x = Tensor(np.array([1.0, 2.0, 3.0]).astype(np.float32))
|
||||
y = Tensor(np.array([4.0, 5.0, 6.0]).astype(np.float32))
|
||||
|
||||
|
||||
mul = Mul()
|
||||
print(mul(x, y))
|
||||
```
|
||||
|
||||
```text
|
||||
```
|
||||
[ 4. 10. 18.]
|
||||
```
|
||||
### 来源
|
||||
|
||||
使用pip方式,在不同的环境安装MindSpore,可参考以下文档。
|
||||
|
||||
- [Ascend环境使用pip方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_ascend_install_pip.md)
|
||||
- [GPU环境使用pip方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_gpu_install_pip.md)
|
||||
- [CPU环境使用pip方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_cpu_install_pip.md)
|
||||
|
||||
### 源码编译方式安装
|
||||
|
||||
使用源码编译方式,在不同的环境安装MindSpore,可参考以下文档。
|
||||
|
||||
- [Ascend环境使用源码编译方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_ascend_install_source.md)
|
||||
- [GPU环境使用源码编译方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_gpu_install_source.md)
|
||||
- [CPU环境使用源码编译方式安装MindSpore](https://gitee.com/mindspore/docs/blob/master/install/mindspore_cpu_install_source.md)
|
||||
[MindSpore安装](https://www.mindspore.cn/install)。
|
||||
|
||||
### Docker镜像
|
||||
|
||||
|
|
@ -137,29 +121,27 @@ MindSpore的Docker镜像托管在[Docker Hub](https://hub.docker.com/r/mindspore
|
|||
| 硬件平台 | Docker镜像仓库 | 标签 | 说明 |
|
||||
| :----- | :------------------------ | :----------------------- | :--------------------------------------- |
|
||||
| CPU | `mindspore/mindspore-cpu` | `x.y.z` | 已经预安装MindSpore `x.y.z` CPU版本的生产环境。 |
|
||||
| | | `devel` | 提供开发环境从源头构建MindSpore(`CPU`后端)。安装详情请参考<https://www.mindspore.cn/install> 。 |
|
||||
| | | `devel` | 提供开发环境从源头构建MindSpore(`CPU`后端)。安装详情请参考https://www.mindspore.cn/install 。 |
|
||||
| | | `runtime` | 提供运行时环境安装MindSpore二进制包(`CPU`后端)。 |
|
||||
| GPU | `mindspore/mindspore-gpu` | `x.y.z` | 已经预安装MindSpore `x.y.z` GPU版本的生产环境。 |
|
||||
| | | `devel` | 提供开发环境从源头构建MindSpore(`GPU CUDA10.1`后端)。安装详情请参考<https://www.mindspore.cn/install> 。 |
|
||||
| | | `devel` | 提供开发环境从源头构建MindSpore(`GPU CUDA10.1`后端)。安装详情请参考https://www.mindspore.cn/install 。 |
|
||||
| | | `runtime` | 提供运行时环境安装MindSpore二进制包(`GPU CUDA10.1`后端)。 |
|
||||
| Ascend | <center>—</center> | <center>—</center> | 即将推出,敬请期待。 |
|
||||
|
||||
> **注意:** 不建议从源头构建GPU `devel` Docker镜像后直接安装whl包。我们强烈建议您在GPU `runtime` Docker镜像中传输并安装whl包。
|
||||
|
||||
- CPU
|
||||
* CPU
|
||||
|
||||
对于`CPU`后端,可以直接使用以下命令获取并运行最新的稳定镜像:
|
||||
|
||||
```bash
|
||||
docker pull mindspore/mindspore-cpu:1.1.0
|
||||
docker run -it mindspore/mindspore-cpu:1.1.0 /bin/bash
|
||||
```
|
||||
docker pull mindspore/mindspore-cpu:1.0.0
|
||||
docker run -it mindspore/mindspore-cpu:1.0.0 /bin/bash
|
||||
```
|
||||
|
||||
- GPU
|
||||
* GPU
|
||||
|
||||
对于`GPU`后端,请确保`nvidia-container-toolkit`已经提前安装,以下是`Ubuntu`用户安装指南:
|
||||
|
||||
```bash
|
||||
```
|
||||
DISTRIBUTION=$(. /etc/os-release; echo $ID$VERSION_ID)
|
||||
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
|
||||
curl -s -L https://nvidia.github.io/nvidia-docker/$DISTRIBUTION/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
|
||||
|
|
@ -167,10 +149,8 @@ MindSpore的Docker镜像托管在[Docker Hub](https://hub.docker.com/r/mindspore
|
|||
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-docker2
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
编辑文件 daemon.json:
|
||||
|
||||
```bash
|
||||
```
|
||||
$ vim /etc/docker/daemon.json
|
||||
{
|
||||
"runtimes": {
|
||||
|
|
@ -181,23 +161,18 @@ MindSpore的Docker镜像托管在[Docker Hub](https://hub.docker.com/r/mindspore
|
|||
}
|
||||
}
|
||||
```
|
||||
|
||||
再次重启docker:
|
||||
|
||||
```bash
|
||||
```
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
使用以下命令获取并运行最新的稳定镜像:
|
||||
|
||||
```bash
|
||||
docker pull mindspore/mindspore-gpu:1.1.0
|
||||
docker run -it -v /dev/shm:/dev/shm --runtime=nvidia --privileged=true mindspore/mindspore-gpu:1.1.0 /bin/bash
|
||||
```
|
||||
docker pull mindspore/mindspore-gpu:1.0.0
|
||||
docker run -it --runtime=nvidia --privileged=true mindspore/mindspore-gpu:1.0.0 /bin/bash
|
||||
```
|
||||
|
||||
要测试Docker是否正常工作,请运行下面的Python代码并检查输出:
|
||||
|
||||
```python
|
||||
import numpy as np
|
||||
import mindspore.context as context
|
||||
|
|
@ -210,8 +185,7 @@ MindSpore的Docker镜像托管在[Docker Hub](https://hub.docker.com/r/mindspore
|
|||
y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
|
||||
print(F.tensor_add(x, y))
|
||||
```
|
||||
|
||||
```text
|
||||
```
|
||||
[[[ 2. 2. 2. 2.],
|
||||
[ 2. 2. 2. 2.],
|
||||
[ 2. 2. 2. 2.]],
|
||||
|
|
@ -225,12 +199,13 @@ MindSpore的Docker镜像托管在[Docker Hub](https://hub.docker.com/r/mindspore
|
|||
[ 2. 2. 2. 2.]]]
|
||||
```
|
||||
|
||||
如果您想了解更多关于MindSpore Docker镜像的构建过程,请查看[docker](https://gitee.com/mindspore/mindspore/blob/master/docker/README.md) repo了解详细信息。
|
||||
如果您想了解更多关于MindSpore Docker镜像的构建过程,请查看[docker](docker/README.md) repo了解详细信息。
|
||||
|
||||
## 快速入门
|
||||
|
||||
参考[快速入门](https://www.mindspore.cn/tutorial/training/zh-CN/master/quick_start/quick_start.html)实现图片分类。
|
||||
|
||||
|
||||
## 文档
|
||||
|
||||
有关安装指南、教程和API的更多详细信息,请参阅[用户文档](https://gitee.com/mindspore/docs)。
|
||||
|
|
@ -250,38 +225,12 @@ MindSpore的Docker镜像托管在[Docker Hub](https://hub.docker.com/r/mindspore
|
|||
|
||||
## 贡献
|
||||
|
||||
欢迎参与贡献。更多详情,请参阅我们的[贡献者Wiki](https://gitee.com/mindspore/mindspore/blob/master/CONTRIBUTING.md)。
|
||||
|
||||
## 分支维护策略
|
||||
|
||||
MindSpore的版本分支有以下几种维护阶段:
|
||||
|
||||
| **状态** | **持续时间** | **说明** |
|
||||
|-------------|---------------|--------------------------------------------------|
|
||||
| Planning | 1 - 3 months | 特性规划。 |
|
||||
| Development | 3 months | 特性开发。 |
|
||||
| Maintained | 6 - 12 months | 允许所有问题修复的合入,并发布版本。 |
|
||||
| Unmaintained| 0 - 3 months | 允许所有问题修复的合入,无专人维护,不再发布版本。 |
|
||||
| End Of Life (EOL) | N/A | 不再接受修改合入该分支。 |
|
||||
|
||||
## 现有分支维护状态
|
||||
|
||||
| **分支名** | **当前状态** | **上线时间** | **后续状态** | **EOL 日期** |
|
||||
|--------|--------------|----------------------|-----------------------------------|------------|
|
||||
| **r1.2** | Development | 2021-03-31 estimated | Maintained <br> 2021-03-31 estimated | |
|
||||
| **r1.1** | Maintained | 2020-12-31 | Unmaintained <br> 2021-06-30 estimated | |
|
||||
| **r1.0** | Maintained | 2020-09-24 | Unmaintained <br> 2021-03-30 estimated | |
|
||||
| **r0.7** | Unmaintained | 2020-08-31 | End Of Life <br> 2021-02-28 estimated | |
|
||||
| **r0.6** | End Of Life | 2020-07-31 | | 2020-12-30 |
|
||||
| **r0.5** | Maintained | 2020-06-30 | Unmaintained <br> 2021-06-30 estimated | |
|
||||
| **r0.3** | End Of Life | 2020-05-31 | | 2020-09-30 |
|
||||
| **r0.2** | End Of Life | 2020-04-30 | | 2020-08-31 |
|
||||
| **r0.1** | End Of Life | 2020-03-28 | | 2020-06-30 |
|
||||
欢迎参与贡献。更多详情,请参阅我们的[贡献者Wiki](CONTRIBUTING.md)。
|
||||
|
||||
## 版本说明
|
||||
|
||||
版本说明请参阅[RELEASE](https://gitee.com/mindspore/mindspore/blob/master/RELEASE.md)。
|
||||
版本说明请参阅[RELEASE](RELEASE.md)。
|
||||
|
||||
## 许可证
|
||||
|
||||
[Apache License 2.0](https://gitee.com/mindspore/mindspore#/mindspore/mindspore/blob/master/LICENSE)
|
||||
[Apache License 2.0](LICENSE)
|
||||
|
|
|
|||
2791
RELEASE.md
2791
RELEASE.md
File diff suppressed because it is too large
Load Diff
17
SECURITY.md
17
SECURITY.md
|
|
@ -1,27 +1,14 @@
|
|||
# Security for MindSpore training
|
||||
|
||||
## Security Risk Description
|
||||
# Security Risk Description
|
||||
|
||||
1. When MindSpore is used for AI model training, if the user-defined computational graph structure (for example, Python code for generating the MindSpore computational graph) is provided by an untrusted third party, malicious code may exist and will be loaded and executed to attack the system.
|
||||
2. Model files are stored in binary mode. When MindSpore is used to optimize or infer AI models and the model files are loaded in deserialization mode, once malicious code is written into the model files, the code are loaded and executed, causing attacks on the system.
|
||||
3. MindSpore performs only model training and inference based on the data provided by users. Users need to protect data security to avoid privacy leakage.
|
||||
4. MindSpore is a distributed training platform. When MindSpore is used for distributed training, if an Ascend chip is used for training, a device provides a secure transmission protocol for gradient fusion. If GPUs or other clusters are used for training, identity authentication and secure transmission are not provided.
|
||||
|
||||
## Security Usage Suggestions
|
||||
# Security Usage Suggestions
|
||||
|
||||
1. Run MindSpore in the sandbox.
|
||||
2. Run MindSpore as a non-root user.
|
||||
3. Ensure that the source of a computational graph structure is trustworthy. Do not write code irrelevant to model training in the network structure definition.
|
||||
4. Ensure that the source of a network model is trustworthy or enter secure network model parameters to prevent model parameters from being tampered with.
|
||||
5. Ensure that GPU distributed training is performed on an isolated cluster network.
|
||||
|
||||
# Security for MindSpore Lite
|
||||
|
||||
## Security Risk Description
|
||||
|
||||
When run a model using MindSpore Lite, the value from the model will be read and used as the parameter or input of a operator, if the value read from the model is invalid, it may cause unexpected result. For example, if the invalid value is used as the offset of a vector, it may cause your app run into segmentation fault issue.
|
||||
|
||||
## Security Usage Suggestions
|
||||
|
||||
1. Make sure your model is well verified and protected.
|
||||
2. The exception catching mechanism of C++ is an effective method to improve robustness of your app, consider adding code to catch exception when calling the MindSpore Lite API, as exception will be raised in some case such as the example mentioned in the risk description above.
|
||||
|
|
|
|||
|
|
@ -1527,7 +1527,7 @@ Copyright (c) 2017-2018 Research Organization for Information Science
|
|||
Copyright (c) 2019 Mellanox Technologies, Inc. All rights reserved.
|
||||
Copyright (c) 2015-2017 Mellanox Technologies. All rights reserved.
|
||||
Copyright (c) 2008-2017 Cisco Systems, Inc. All rights reserved
|
||||
Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
|
||||
Copyright (c) 2007 Sun Microsystems, Inc. All rights reserverd.
|
||||
Copyright (c) 2015 Cisco Systems, Inc.
|
||||
(C) 2004 by Argonne National Laboratory.
|
||||
Copyright (c) 2011-2013 Los Alamos National Security, LLC. All
|
||||
|
|
@ -1608,7 +1608,7 @@ Copyright (c) 2019 The University of Tennessee and The University
|
|||
Copyright (c) 2009-2014 The University of Tennessee and The University
|
||||
Copyright (c) 2009-2010 The Trustees of Indiana University.
|
||||
Copyright (c) 2014 Intel Corporation. All rights reserved.
|
||||
Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
|
||||
Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
|
||||
Copyright (c) 2010-2016 Los Alamos National Security, LLC. All rights
|
||||
Copyright (c) 2007-2009 Sun Microsystems, Inc. All rights reserved.
|
||||
Copyright (c) 2013 Mellanox Technologies, Inc. All rights reserved.
|
||||
|
|
@ -4249,487 +4249,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
Software: opencl v2.0
|
||||
Copyright notice:
|
||||
Copyright (c) 2020 The Khronos Group Inc.
|
||||
Copyright (c) 2008-2020 The Khronos Group Inc.
|
||||
Copyright (c) 2013-2020 Intel Corporation All Rights Reserved.
|
||||
Copyright (c) 2019-2020 The Khronos Group Inc.
|
||||
Copyright (c) 2018-2020 The Khronos Group Inc.
|
||||
Copyright (c) 2013-2019 Intel Corporation All Rights Reserved.
|
||||
file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
Software: vulkan v1.2.144
|
||||
Copyright notice:
|
||||
Copyright 2000-2018 Kitware, Inc. and Contributors
|
||||
Copyright (c) 2013-2020 The Khronos Group Inc.
|
||||
Copyright (c) 2018-2019 Collabora, Ltd.
|
||||
Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||
Copyright 2013-2020 The Khronos Group Inc.
|
||||
Copyright (C) 2018-2019 The ANGLE Project Authors.
|
||||
Copyright (C) 2019 LunarG, Inc.
|
||||
Copyright (c) 2018 Valve Corporation
|
||||
Copyright (c) 2018 LunarG, Inc.
|
||||
Copyright (c) 2014-2020 The Khronos Group Inc.
|
||||
Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||
Copyright (c) 2015-2016 Valve Corporation
|
||||
Copyright (c) 2015-2016 LunarG, Inc.
|
||||
Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
Copyright (c) 2015-2017 Valve Corporation
|
||||
Copyright (c) 2015-2017 LunarG, Inc.
|
||||
file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
vative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
ing that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
You distribute, all copyright, patent, trademark, and
|
||||
ibution notices from the Source form of the Work,
|
||||
uding those notices that do not pertain to any part of
|
||||
Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
ribution, then any Derivative Works that You distribute must
|
||||
ude a readable copy of the attribution notices contained
|
||||
in such NOTICE file, excluding those notices that do not
|
||||
ain to any part of the Derivative Works, in at least one
|
||||
he following places: within a NOTICE text file distributed
|
||||
art of the Derivative Works; within the Source form or
|
||||
mentation, if provided along with the Derivative Works; or,
|
||||
in a display generated by the Derivative Works, if and
|
||||
ever such third-party notices normally appear. The contents
|
||||
he NOTICE file are for informational purposes only and
|
||||
ot modify the License. You may add Your own attribution
|
||||
ces within Derivative Works that You distribute, alongside
|
||||
s an addendum to the NOTICE text from the Work, provided
|
||||
such additional attribution notices cannot be construed
|
||||
odifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
Software: CMSIS v5.7.0
|
||||
Copyright notice:
|
||||
Copyright (c) 2006-2012 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2006-2016 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2009-2013 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2009-2016 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2009-2017 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2009-2018 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2009-2019 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2009-2020 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2010 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2010-2012 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2010-2013 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2010-2018 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2010-2019 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2010-2020 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2011 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2012-2011 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2012-2018 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2013-2016 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2013-2017 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2013-2018 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2013-2019 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2013-2020 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2015-2016 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2015-2020 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2016 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2016-2020 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2017 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2017-2017 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2017-2018 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2017-2019 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2017-2020 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2018-2020 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2019-2020 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2020 ARM Limited. All rights reserved.
|
||||
Copyright (c) 2009 by Dimitri van Heesch.
|
||||
Copyright (c) 2010 "Cowboy" ben Alman.
|
||||
Copyright (c) 1999-2009 KEIL, 2009-2016 ARM Germany GmbH. All rights reserved.
|
||||
Copyright (c) 1999-2009 KEIL, 2009-2017 ARM Germany GmbH. All rights reserved.
|
||||
Copyright (c) 1999-2009 KEIL, 2009-2018 ARM Germany GmbH. All rights reserved.
|
||||
Copyright (c) 1999-2009 KEIL, 2009-2019 ARM Germany GmbH. All rights reserved.
|
||||
Copyright (c) 2004-2016 ARM Germany GmbH. All rights reserved.
|
||||
Copyright (c) 2005-2014 ARM Germany GmbH. All rights reserved.
|
||||
Copyright (c) 2016 ARM Germany GmbH. All rights reserved.
|
||||
Copyright (c) 2016-2018 ARM Germany GmbH. All rights reserved.
|
||||
Copyright (c) 2005-2014 Keil Software. All rights reserved.
|
||||
Copyright (c) 2012-2017 Keil Software. All rights reserved.
|
||||
Copyright (c) 2012-2019 Keil Software. All rights reserved.
|
||||
Copyright (c) 2006,2007 CodeSourcery Inc
|
||||
Copyright (c) 2012 mbed.org
|
||||
Copyright (c) 2017-2018 IAR Systems
|
||||
Copyright (c) 2017-2019 IAR Systems
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
vative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
ing that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
You distribute, all copyright, patent, trademark, and
|
||||
ibution notices from the Source form of the Work,
|
||||
uding those notices that do not pertain to any part of
|
||||
Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
ribution, then any Derivative Works that You distribute must
|
||||
ude a readable copy of the attribution notices contained
|
||||
in such NOTICE file, excluding those notices that do not
|
||||
ain to any part of the Derivative Works, in at least one
|
||||
he following places: within a NOTICE text file distributed
|
||||
art of the Derivative Works; within the Source form or
|
||||
mentation, if provided along with the Derivative Works; or,
|
||||
in a display generated by the Derivative Works, if and
|
||||
ever such third-party notices normally appear. The contents
|
||||
he NOTICE file are for informational purposes only and
|
||||
ot modify the License. You may add Your own attribution
|
||||
ces within Derivative Works that You distribute, alongside
|
||||
s an addendum to the NOTICE text from the Work, provided
|
||||
such additional attribution notices cannot be construed
|
||||
odifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
|
|
|||
2
akg
2
akg
|
|
@ -1 +1 @@
|
|||
Subproject commit e7a391c51e66975d46bacf6425ae8f27e1675f85
|
||||
Subproject commit f308919c39811c2c3e07fb0dcc8054a533c84cbc
|
||||
82
build.bat
82
build.bat
|
|
@ -15,55 +15,26 @@
|
|||
@echo off
|
||||
@title mindspore_build
|
||||
|
||||
SET BASE_PATH=%CD%
|
||||
SET BUILD_PATH=%BASE_PATH%/build
|
||||
|
||||
SET threads=6
|
||||
SET X86_64_SIMD=off
|
||||
SET ENABLE_GITEE=OFF
|
||||
|
||||
set VERSION_MAJOR=''
|
||||
set VERSION_MINOR=''
|
||||
set ERSION_REVISION=''
|
||||
|
||||
for /f "delims=\= tokens=2" %%a in ('findstr /C:"const int ms_version_major = " mindspore\lite\include\version.h') do (set x=%%a)
|
||||
find "const int ms_version_major =" mindspore\lite\include\version.h > version.txt
|
||||
for /f "delims=\= tokens=2" %%a in ('findstr "const int ms_version_major = " version.txt') do (set x=%%a)
|
||||
set VERSION_MAJOR=%x:~1,1%
|
||||
for /f "delims=\= tokens=2" %%b in ('findstr /C:"const int ms_version_minor = " mindspore\lite\include\version.h') do (set y=%%b)
|
||||
find "const int ms_version_minor =" mindspore\lite\include\version.h > version.txt
|
||||
for /f "delims=\= tokens=2" %%b in ('findstr "const int ms_versio/retestn_minor = " version.txt') do (set y=%%b)
|
||||
set VERSION_MINOR=%y:~1,1%
|
||||
for /f "delims=\= tokens=2" %%c in ('findstr /C:"const int ms_version_revision = " mindspore\lite\include\version.h') do (set z=%%c)
|
||||
find "const int ms_version_revision =" mindspore\lite\include\version.h > version.txt
|
||||
for /f "delims=\= tokens=2" %%c in ('findstr "const int ms_version_revision = " version.txt') do (set z=%%c)
|
||||
set VERSION_REVISION=%z:~1,1%
|
||||
del version.txt
|
||||
|
||||
echo "======Start building MindSpore Lite %VERSION_MAJOR%.%VERSION_MINOR%.%VERSION_REVISION%======"
|
||||
|
||||
ECHO %2%|FINDSTR "^[0-9][0-9]*$"
|
||||
IF %errorlevel% == 0 (
|
||||
SET threads=6
|
||||
IF NOT "%2%" == "" (
|
||||
SET threads=%2%
|
||||
) ELSE (
|
||||
IF NOT "%2%" == "" (
|
||||
IF "%2%" == "avx" (
|
||||
SET X86_64_SIMD=avx
|
||||
) ELSE IF "%2%" == "sse" (
|
||||
SET X86_64_SIMD=sse
|
||||
) ELSE IF "%2%" == "off" (
|
||||
SET X86_64_SIMD=off
|
||||
) ELSE IF "%2%" == "avx512" (
|
||||
SET X86_64_SIMD=avx512
|
||||
) ELSE (
|
||||
echo "MindSpore_lite the second parameter must in [avx, avx512, sse, off], but now is [%2%]"
|
||||
call :clean
|
||||
EXIT /b 1
|
||||
)
|
||||
IF NOT "%3%" == "" (
|
||||
SET threads=%3%
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
IF "%FROM_GITEE%" == "1" (
|
||||
echo "DownLoad from gitee"
|
||||
SET ENABLE_GITEE=ON
|
||||
)
|
||||
|
||||
SET BASE_PATH=%CD%
|
||||
SET BUILD_PATH=%BASE_PATH%/build
|
||||
IF NOT EXIST "%BUILD_PATH%" (
|
||||
md "build"
|
||||
)
|
||||
|
|
@ -74,38 +45,37 @@ IF NOT EXIST "%BUILD_PATH%/mindspore" (
|
|||
|
||||
cd %BUILD_PATH%/mindspore
|
||||
IF "%1%" == "lite" (
|
||||
cmake --build "%BUILD_PATH%\mindspore" --target clean
|
||||
rd /s /q "%BASE_PATH%\output"
|
||||
(git log -1 | findstr "^commit") > %BUILD_PATH%\.commit_id
|
||||
cmake -DPLATFORM_ARM64=off -DSUPPORT_TRAIN=off ^
|
||||
-DENABLE_TOOLS=on -DENABLE_CONVERTER=on -DBUILD_TESTCASES=off ^
|
||||
-DCMAKE_BUILD_TYPE=Release -DSUPPORT_GPU=off -DBUILD_MINDDATA=off -DOFFLINE_COMPILE=off ^
|
||||
-DMS_VERSION_MAJOR=%VERSION_MAJOR% -DMS_VERSION_MINOR=%VERSION_MINOR% -DMS_VERSION_REVISION=%VERSION_REVISION% ^
|
||||
-DX86_64_SIMD=%X86_64_SIMD% ^
|
||||
-G "CodeBlocks - MinGW Makefiles" "%BASE_PATH%/mindspore/lite"
|
||||
) ELSE (
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_CPU=ON -DENABLE_MINDDATA=ON -DUSE_GLOG=ON -DENABLE_GITEE=%ENABLE_GITEE% ^
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_CPU=ON -DENABLE_MINDDATA=ON -DUSE_GLOG=ON ^
|
||||
-G "CodeBlocks - MinGW Makefiles" ../..
|
||||
)
|
||||
IF NOT %errorlevel% == 0 (
|
||||
echo "cmake fail."
|
||||
call :clean
|
||||
EXIT /b 1
|
||||
call :run_fail
|
||||
)
|
||||
|
||||
cmake --build . --target package -- -j%threads%
|
||||
IF NOT %errorlevel% == 0 (
|
||||
echo "build fail."
|
||||
call :clean
|
||||
EXIT /b 1
|
||||
call :run_fail
|
||||
)
|
||||
|
||||
call :clean
|
||||
EXIT /b 0
|
||||
IF EXIST "%BASE_PATH%/output" (
|
||||
cd %BASE_PATH%/output
|
||||
rd /s /q _CPack_Packages
|
||||
)
|
||||
|
||||
:clean
|
||||
IF EXIST "%BASE_PATH%/output" (
|
||||
cd %BASE_PATH%/output
|
||||
rd /s /q _CPack_Packages
|
||||
)
|
||||
goto run_eof
|
||||
|
||||
:run_fail
|
||||
cd %BASE_PATH%
|
||||
set errorlevel=1
|
||||
EXIT /b %errorlevel%
|
||||
|
||||
:run_eof
|
||||
cd %BASE_PATH%
|
||||
702
build.sh
702
build.sh
|
|
@ -22,18 +22,18 @@ export BUILD_PATH="${BASEPATH}/build/"
|
|||
usage()
|
||||
{
|
||||
echo "Usage:"
|
||||
echo "bash build.sh [-d] [-r] [-v] [-c on|off] [-t ut|st] [-g on|off] [-h] [-b ge] [-m infer|train] \\"
|
||||
echo " [-a on|off] [-p on|off] [-i] [-L] [-R] [-D on|off] [-j[n]] [-e gpu|ascend|cpu|npu] \\"
|
||||
echo " [-P on|off] [-z [on|off]] [-M on|off] [-V 9.2|10.1|310|910] [-I arm64|arm32|x86_64] [-K] \\"
|
||||
echo " [-B on|off] [-E] [-l on|off] [-n full|lite|off] [-T on|off] [-H on|off] \\"
|
||||
echo " [-A [cpp|java|object-c] [-C on|off] [-o on|off] [-S on|off] [-k on|off] [-W sse|neon|avx|off] \\"
|
||||
echo "bash build.sh [-d] [-r] [-v] [-c on|off] [-t on|off] [-g on|off] [-h] [-b ge] [-m infer|train] \\"
|
||||
echo " [-a on|off] [-p on|off] [-i] [-L] [-R] [-D on|off] [-j[n]] [-e gpu|d|cpu] \\"
|
||||
echo " [-P on|off] [-z [on|off]] [-M on|off] [-V 9.2|10.1] [-I arm64|arm32|x86_64] [-K] \\"
|
||||
echo " [-B on|off] [-w on|off] [-E] [-l on|off] [-n full|lite|off] [-T on|off] \\"
|
||||
echo " [-A [cpp|java|object-c] [-C on|off] [-o on|off] [-S on|off] [-k on|off] \\"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -d Debug mode"
|
||||
echo " -r Release mode, default mode"
|
||||
echo " -v Display build command"
|
||||
echo " -c Enable code coverage, default off"
|
||||
echo " -t Run testcases, default off"
|
||||
echo " -t Run testcases, default on"
|
||||
echo " -g Use glog to output log, default on"
|
||||
echo " -h Print usage"
|
||||
echo " -b Select other backend, available: \\"
|
||||
|
|
@ -45,15 +45,17 @@ usage()
|
|||
echo " -i Enable increment building, default off"
|
||||
echo " -L Enable load ANF-IR as input of 'infer', default off"
|
||||
echo " -j[n] Set the threads when building (Default: -j8)"
|
||||
echo " -e Use cpu, gpu, npu or ascend"
|
||||
echo " -e Use gpu, d or cpu"
|
||||
echo " -P Enable dump anf graph to file in ProtoBuffer format, default on"
|
||||
echo " -D Enable dumping of function graph ir, default on"
|
||||
echo " -z Compile dataset & mindrecord, default on"
|
||||
echo " -n Compile minddata with mindspore lite, available: off, lite, full, lite_cv, full mode in lite train and lite_cv, wrapper mode in lite predict"
|
||||
echo " -n Compile minddata with mindspore lite, available: off, lite, full, lite_cv, full mode in lite train and lite_cv mode in lite predict"
|
||||
echo " -M Enable MPI and NCCL for GPU training, gpu default on"
|
||||
echo " -V Specify the device version, if -e gpu, default CUDA 10.1, if -e ascend, default Ascend 910"
|
||||
echo " -V Specify the minimum required cuda version, default CUDA 10.1"
|
||||
echo " -I Enable compiling mindspore lite for arm64, arm32 or x86_64, default disable mindspore lite compilation"
|
||||
echo " -K Compile with AKG, default on"
|
||||
echo " -s Enable serving module, default off"
|
||||
echo " -w Enable acl module, default off"
|
||||
echo " -B Enable debugger, default on"
|
||||
echo " -E Enable IBVERBS for parameter server, default off"
|
||||
echo " -l Compile with python dependency, default on"
|
||||
|
|
@ -63,8 +65,6 @@ usage()
|
|||
echo " -o Enable mindspore lite tools compilation, enabled when -I is specified, default on"
|
||||
echo " -S Enable enable download cmake compile dependency from gitee , default off"
|
||||
echo " -k Enable make clean, clean up compilation generated cache "
|
||||
echo " -W Enable x86_64 SSE or AVX instruction set, use [sse|avx|neon|off], default off"
|
||||
echo " -H Enable hidden"
|
||||
}
|
||||
|
||||
# check value of input is 'on' or 'off'
|
||||
|
|
@ -87,7 +87,6 @@ checkopts()
|
|||
VERBOSE=""
|
||||
ENABLE_COVERAGE="off"
|
||||
RUN_TESTCASES="off"
|
||||
RUN_CPP_ST_TESTS="off"
|
||||
ENABLE_BACKEND=""
|
||||
TRAIN_MODE="INFER"
|
||||
ENABLE_ASAN="off"
|
||||
|
|
@ -106,6 +105,7 @@ checkopts()
|
|||
SUPPORT_TRAIN="off"
|
||||
USE_GLOG="on"
|
||||
ENABLE_AKG="on"
|
||||
ENABLE_SERVING="off"
|
||||
ENABLE_ACL="off"
|
||||
ENABLE_DEBUGGER="on"
|
||||
ENABLE_IBVERBS="off"
|
||||
|
|
@ -118,14 +118,9 @@ checkopts()
|
|||
ENABLE_GITEE="off"
|
||||
ANDROID_STL="c++_shared"
|
||||
ENABLE_MAKE_CLEAN="off"
|
||||
X86_64_SIMD="off"
|
||||
DEVICE_VERSION=""
|
||||
DEVICE=""
|
||||
ENABLE_NPU="off"
|
||||
ENABLE_HIDDEN="on"
|
||||
LITE_ENABLE_GPU=""
|
||||
|
||||
# Process the options
|
||||
while getopts 'drvj:c:t:hsb:a:g:p:ie:m:l:I:LRP:D:zM:V:K:B:En:T:A:C:o:S:k:W:H:' opt
|
||||
while getopts 'drvj:c:t:hsb:a:g:p:ie:m:l:I:LRP:D:zM:V:K:swB:En:T:A:C:o:S:k:' opt
|
||||
do
|
||||
OPTARG=$(echo ${OPTARG} | tr '[A-Z]' '[a-z]')
|
||||
case "${opt}" in
|
||||
|
|
@ -133,7 +128,7 @@ checkopts()
|
|||
DEBUG_MODE="on"
|
||||
;;
|
||||
n)
|
||||
if [[ "X$OPTARG" == "Xoff" || "X$OPTARG" == "Xlite" || "X$OPTARG" == "Xfull" || "X$OPTARG" == "Xlite_cv" || "X$OPTARG" == "Xwrapper" ]]; then
|
||||
if [[ "X$OPTARG" == "Xoff" || "X$OPTARG" == "Xlite" || "X$OPTARG" == "Xfull" || "X$OPTARG" == "Xlite_cv" ]]; then
|
||||
COMPILE_MINDDATA_LITE="$OPTARG"
|
||||
else
|
||||
echo "Invalid value ${OPTARG} for option -n"
|
||||
|
|
@ -156,17 +151,8 @@ checkopts()
|
|||
ENABLE_COVERAGE="$OPTARG"
|
||||
;;
|
||||
t)
|
||||
if [[ "X$OPTARG" == "Xon" || "X$OPTARG" == "Xut" ]]; then
|
||||
RUN_TESTCASES="on"
|
||||
elif [[ "X$OPTARG" == "Xoff" ]]; then
|
||||
RUN_TESTCASES="off"
|
||||
elif [[ "X$OPTARG" == "Xst" ]]; then
|
||||
RUN_CPP_ST_TESTS="on"
|
||||
else
|
||||
echo "Invalid value ${OPTARG} for option -t"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
check_on_off $OPTARG t
|
||||
RUN_TESTCASES="$OPTARG"
|
||||
;;
|
||||
g)
|
||||
check_on_off $OPTARG g
|
||||
|
|
@ -229,14 +215,37 @@ checkopts()
|
|||
echo "enable make clean"
|
||||
;;
|
||||
e)
|
||||
DEVICE=$OPTARG
|
||||
if [[ "X$OPTARG" == "Xgpu" ]]; then
|
||||
ENABLE_GPU="on"
|
||||
ENABLE_CPU="on"
|
||||
ENABLE_MPI="on"
|
||||
elif [[ "X$OPTARG" == "Xd" || "X$OPTARG" == "Xascend" ]]; then
|
||||
ENABLE_D="on"
|
||||
ENABLE_CPU="on"
|
||||
ENABLE_SERVING="on"
|
||||
elif [[ "X$OPTARG" == "Xcpu" ]]; then
|
||||
ENABLE_CPU="on"
|
||||
else
|
||||
echo "Invalid value ${OPTARG} for option -e"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
M)
|
||||
check_on_off $OPTARG M
|
||||
ENABLE_MPI="$OPTARG"
|
||||
;;
|
||||
V)
|
||||
DEVICE_VERSION=$OPTARG
|
||||
if [[ "X$OPTARG" != "X9.2" && "X$OPTARG" != "X10.1" ]]; then
|
||||
echo "Invalid value ${OPTARG} for option -V"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
if [[ "X$OPTARG" == "X9.2" ]]; then
|
||||
echo "Unsupported CUDA version 9.2"
|
||||
exit 1
|
||||
fi
|
||||
CUDA_VERSION="$OPTARG"
|
||||
;;
|
||||
P)
|
||||
check_on_off $OPTARG p
|
||||
|
|
@ -284,6 +293,16 @@ checkopts()
|
|||
ENABLE_AKG="on"
|
||||
echo "enable compile with akg"
|
||||
;;
|
||||
s)
|
||||
ENABLE_SERVING="on"
|
||||
echo "enable serving"
|
||||
;;
|
||||
w)
|
||||
ENABLE_SERVING="on"
|
||||
echo "enable serving"
|
||||
ENABLE_ACL="on"
|
||||
echo "enable acl"
|
||||
;;
|
||||
B)
|
||||
check_on_off $OPTARG B
|
||||
ENABLE_DEBUGGER="$OPTARG"
|
||||
|
|
@ -307,8 +326,6 @@ checkopts()
|
|||
LITE_LANGUAGE="java"
|
||||
ENABLE_CONVERTER="off"
|
||||
ANDROID_STL="c++_static"
|
||||
RUN_TESTCASES="off"
|
||||
ENABLE_TOOLS="off"
|
||||
elif [[ "$OPTARG" == "object-c" ]]; then
|
||||
LITE_LANGUAGE="object-c"
|
||||
else
|
||||
|
|
@ -324,92 +341,21 @@ checkopts()
|
|||
check_on_off $OPTARG o
|
||||
ENABLE_TOOLS="$OPTARG"
|
||||
;;
|
||||
W)
|
||||
if [[ "$OPTARG" != "sse" && "$OPTARG" != "off" && "$OPTARG" != "avx" && "$OPTARG" != "neon" ]]; then
|
||||
echo "Invalid value ${OPTARG} for option -W, -W parameter must be sse|neon|avx|off"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
if [[ "$OPTARG" == "sse" || "$OPTARG" == "avx" ]]; then
|
||||
X86_64_SIMD="$OPTARG"
|
||||
fi
|
||||
;;
|
||||
H)
|
||||
check_on_off $OPTARG H
|
||||
ENABLE_HIDDEN="$OPTARG"
|
||||
echo "${OPTARG} hidden"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option ${opt}!"
|
||||
usage
|
||||
exit 1
|
||||
esac
|
||||
done
|
||||
|
||||
# Parse device
|
||||
# Process build option
|
||||
if [[ "X$DEVICE" == "Xgpu" ]]; then
|
||||
LITE_ENABLE_GPU="opencl"
|
||||
ENABLE_GPU="on"
|
||||
ENABLE_CPU="on"
|
||||
ENABLE_MPI="on"
|
||||
# version default 10.1
|
||||
if [[ "X$DEVICE_VERSION" == "X" ]]; then
|
||||
DEVICE_VERSION=10.1
|
||||
fi
|
||||
if [[ "X$DEVICE_VERSION" != "X11.1" && "X$DEVICE_VERSION" != "X10.1" ]]; then
|
||||
echo "Invalid value ${DEVICE_VERSION} for option -V"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
CUDA_VERSION="$DEVICE_VERSION"
|
||||
elif [[ "X$DEVICE" == "Xd" || "X$DEVICE" == "Xascend" ]]; then
|
||||
# version default 910
|
||||
if [[ "X$DEVICE_VERSION" == "X" ]]; then
|
||||
DEVICE_VERSION=910
|
||||
fi
|
||||
if [[ "X$DEVICE_VERSION" == "X310" ]]; then
|
||||
ENABLE_ACL="on"
|
||||
elif [[ "X$DEVICE_VERSION" == "X910" ]]; then
|
||||
ENABLE_D="on"
|
||||
ENABLE_CPU="on"
|
||||
else
|
||||
echo "Invalid value ${DEVICE_VERSION} for option -V"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
elif [[ "X$DEVICE" == "Xnpu" ]]; then
|
||||
ENABLE_NPU="on"
|
||||
ENABLE_CPU="on"
|
||||
elif [[ "X$DEVICE" == "Xcpu" ]]; then
|
||||
ENABLE_CPU="on"
|
||||
elif [[ "X$DEVICE" == "Xopencl" ]]; then
|
||||
LITE_ENABLE_GPU="opencl"
|
||||
elif [[ "X$DEVICE" == "Xvulkan" ]]; then
|
||||
LITE_ENABLE_GPU="vulkan"
|
||||
elif [[ "X$DEVICE" == "Xcuda" ]]; then
|
||||
LITE_ENABLE_GPU="cuda"
|
||||
elif [[ "X$DEVICE" == "X" ]]; then
|
||||
:
|
||||
else
|
||||
echo "Invalid value ${DEVICE} for option -e"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
checkopts "$@"
|
||||
echo "---------------- MindSpore: build start ----------------"
|
||||
mkdir -pv "${BUILD_PATH}/package/mindspore/lib"
|
||||
git submodule update --init graphengine
|
||||
cd "${BASEPATH}/graphengine"
|
||||
git submodule update --init metadef
|
||||
cd "${BASEPATH}"
|
||||
if [[ "X$ENABLE_AKG" = "Xon" ]] && [[ "X$ENABLE_D" = "Xon" || "X$ENABLE_GPU" = "Xon" ]]; then
|
||||
git submodule update --init --recursive akg
|
||||
fi
|
||||
|
||||
|
||||
build_exit()
|
||||
{
|
||||
echo "$@" >&2
|
||||
|
|
@ -431,9 +377,6 @@ build_mindspore()
|
|||
if [[ "X$RUN_TESTCASES" = "Xon" ]]; then
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_TESTCASES=ON"
|
||||
fi
|
||||
if [[ "X$RUN_CPP_ST_TESTS" = "Xon" ]]; then
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_CPP_ST=ON"
|
||||
fi
|
||||
if [[ -n "$ENABLE_BACKEND" ]]; then
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_${ENABLE_BACKEND}=ON"
|
||||
fi
|
||||
|
|
@ -478,6 +421,9 @@ build_mindspore()
|
|||
if [[ "X$ENABLE_AKG" = "Xon" ]] && [[ "X$ENABLE_D" = "Xon" || "X$ENABLE_GPU" = "Xon" ]]; then
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_AKG=ON"
|
||||
fi
|
||||
if [[ "X$ENABLE_SERVING" = "Xon" ]]; then
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_SERVING=ON"
|
||||
fi
|
||||
if [[ "X$ENABLE_ACL" = "Xon" ]]; then
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_ACL=ON"
|
||||
fi
|
||||
|
|
@ -488,9 +434,6 @@ build_mindspore()
|
|||
if [[ "X$ENABLE_IBVERBS" = "Xon" ]]; then
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_IBVERBS=ON"
|
||||
fi
|
||||
if [[ "X$ENABLE_HIDDEN" = "Xoff" ]]; then
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_HIDDEN=OFF"
|
||||
fi
|
||||
echo "${CMAKE_ARGS}"
|
||||
if [[ "X$INC_BUILD" = "Xoff" ]]; then
|
||||
cmake ${CMAKE_ARGS} ../..
|
||||
|
|
@ -504,20 +447,197 @@ build_mindspore()
|
|||
|
||||
checkndk() {
|
||||
if [ "${ANDROID_NDK}" ]; then
|
||||
echo -e "\e[31mANDROID_NDK=$ANDROID_NDK \e[0m"
|
||||
echo -e "\e[31mANDROID_NDK_PATH=$ANDROID_NDK \e[0m"
|
||||
else
|
||||
echo -e "\e[31mplease set ANDROID_NDK in environment variable for example: export ANDROID_NDK=/root/usr/android-ndk-r20b/ \e[0m"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
checkddk() {
|
||||
if [ "${HWHIAI_DDK}" ]; then
|
||||
echo -e "\e[31mHWHIAI_DDK=$HWHIAI_DDK \e[0m"
|
||||
else
|
||||
echo -e "\e[31mplease set HWHIAI_DDK in environment variable for example: export HWHIAI_DDK=/root/usr/hwhiai-ddk-100.500.010.010/ \e[0m"
|
||||
exit 1
|
||||
gene_flatbuffer() {
|
||||
FLAT_DIR="${BASEPATH}/mindspore/lite/schema"
|
||||
cd ${FLAT_DIR} && rm -rf "${FLAT_DIR}/inner" && mkdir -p "${FLAT_DIR}/inner"
|
||||
find . -name "*.fbs" -print0 | xargs -0 "${FLATC}" -c -b
|
||||
find . -name "*.fbs" -print0 | xargs -0 "${FLATC}" -c -b --reflect-types --gen-mutable --reflect-names --gen-object-api -o "${FLAT_DIR}/inner"
|
||||
|
||||
FLAT_DIR="${BASEPATH}/mindspore/lite/tools/converter/parser/tflite"
|
||||
cd ${FLAT_DIR}
|
||||
find . -name "*.fbs" -print0 | xargs -0 "${FLATC}" -c -b --reflect-types --gen-mutable --reflect-names --gen-object-api -o "${FLAT_DIR}/"
|
||||
}
|
||||
|
||||
build_flatbuffer() {
|
||||
cd ${BASEPATH}
|
||||
FLATC="${BASEPATH}"/third_party/flatbuffers/build/flatc
|
||||
if [[ ! -f "${FLATC}" ]]; then
|
||||
if [[ "${MSLIBS_SERVER}" ]]; then
|
||||
cd "${BASEPATH}"/third_party/
|
||||
rm -rf ./v1.11.0.tar.gz ./flatbuffers
|
||||
wget http://${MSLIBS_SERVER}:8081/libs/flatbuffers/v1.11.0.tar.gz
|
||||
tar -zxvf ./v1.11.0.tar.gz
|
||||
mv ./flatbuffers-1.11.0 ./flatbuffers
|
||||
else
|
||||
git submodule update --init --recursive third_party/flatbuffers
|
||||
fi
|
||||
cd ${BASEPATH}/third_party/flatbuffers
|
||||
rm -rf build && mkdir -pv build && cd build && cmake -DFLATBUFFERS_BUILD_SHAREDLIB=ON .. && make -j$THREAD_NUM
|
||||
gene_flatbuffer
|
||||
fi
|
||||
if [[ "${INC_BUILD}" == "off" ]]; then
|
||||
gene_flatbuffer
|
||||
fi
|
||||
}
|
||||
|
||||
build_gtest() {
|
||||
cd ${BASEPATH}
|
||||
git submodule update --init --recursive third_party/googletest
|
||||
}
|
||||
|
||||
gene_clhpp() {
|
||||
CL_SRC_DIR="${BASEPATH}/mindspore/lite/src/runtime/kernel/opencl/cl"
|
||||
if [ ! -d "${CL_SRC_DIR}" ]; then
|
||||
return
|
||||
fi
|
||||
cd ${CL_SRC_DIR}/
|
||||
rm -rf *.inc
|
||||
echo "$(cd "$(dirname $0)"; pwd)"
|
||||
for file_path in "${CL_SRC_DIR}"/*
|
||||
do
|
||||
file="$(basename ${file_path})"
|
||||
inc_file=$(echo ${CL_SRC_DIR}/${file} | sed 's/$/.inc/')
|
||||
sed 's/\\/\\\\/g;s/\"/\\\"/g;s/^/\"/;s/$/\\n\" \\/' ${CL_SRC_DIR}/${file} > ${inc_file}
|
||||
kernel_name=$(echo ${file} | sed s'/.\{3\}$//')
|
||||
sed -i "1i\static const char *${kernel_name}_source =\"\\n\" \\" ${inc_file}
|
||||
sed -i '$a\;' ${inc_file}
|
||||
done
|
||||
}
|
||||
|
||||
gene_ocl_program() {
|
||||
OCL_SRC_DIR="${BASEPATH}/mindspore/lite/src/runtime/kernel/opencl/cl"
|
||||
SPIRV_DIR=build/spirv
|
||||
[ -n "${SPIRV_DIR}" ] && rm -rf ${SPIRV_DIR}
|
||||
mkdir -pv ${SPIRV_DIR}
|
||||
if [ ! -d "${OCL_SRC_DIR}" ]; then
|
||||
return
|
||||
fi
|
||||
for file_path in "${OCL_SRC_DIR}"/*
|
||||
do
|
||||
ocl_file="$(basename ${file_path})"
|
||||
if [ "${ocl_file##*.}" != "cl" ]; then
|
||||
continue
|
||||
fi
|
||||
clang -Xclang -finclude-default-header -cl-std=CL2.0 --target=spir64-unknown-unknown -emit-llvm \
|
||||
-c -O0 -o ${SPIRV_DIR}/${ocl_file%.*}.bc ${OCL_SRC_DIR}/${ocl_file}
|
||||
done
|
||||
|
||||
bcs=$(ls ${SPIRV_DIR}/*.bc)
|
||||
llvm-link ${bcs} -o ${SPIRV_DIR}/program.bc
|
||||
llvm-spirv -o ${SPIRV_DIR}/program.spv ${SPIRV_DIR}/program.bc
|
||||
|
||||
CL_PROGRAM_PATH="${BASEPATH}/mindspore/lite/src/runtime/kernel/opencl/cl/program.inc"
|
||||
echo "#include <vector>" > ${CL_PROGRAM_PATH}
|
||||
echo "std::vector<unsigned char> g_program_binary = {" >> ${CL_PROGRAM_PATH}
|
||||
#hexdump -v -e '16/1 "0x%02x, " "\n"' ${SPIRV_DIR}/program.spv >> ${CL_PROGRAM_PATH}
|
||||
hexdump -v -e '1/1 "0x%02x, "' ${SPIRV_DIR}/program.spv >> ${CL_PROGRAM_PATH}
|
||||
echo "};" >> ${CL_PROGRAM_PATH}
|
||||
echo "Compile SPIRV done"
|
||||
}
|
||||
|
||||
build_opencl() {
|
||||
cd ${BASEPATH}
|
||||
git submodule update --init third_party/OpenCL-Headers
|
||||
git submodule update --init third_party/OpenCL-CLHPP
|
||||
if [[ "${OPENCL_OFFLINE_COMPILE}" == "on" ]]; then
|
||||
gene_ocl_program
|
||||
else
|
||||
gene_clhpp
|
||||
fi
|
||||
}
|
||||
|
||||
build_opencv() {
|
||||
# check what platform we are building opencv on
|
||||
cd ${BASEPATH}
|
||||
if [[ "${LITE_PLATFORM}" == "x86_64" ]]; then
|
||||
OPENCV_BIN="${BASEPATH}"/third_party/opencv/build/lib/libopencv_core.so.4.2.0
|
||||
elif [[ "${LITE_PLATFORM}" == "arm32" ]]; then
|
||||
OPENCV_BIN="${BASEPATH}"/third_party/opencv/build/lib/armeabi-v7a/libopencv_core.so
|
||||
else
|
||||
OPENCV_BIN="${BASEPATH}"/third_party/opencv/build/lib/arm64-v8a/libopencv_core.so
|
||||
|
||||
fi
|
||||
if [[ ! -f "${OPENCV_BIN}" ]]; then
|
||||
if [[ "${MSLIBS_SERVER}" ]]; then
|
||||
cd "${BASEPATH}"/third_party/
|
||||
rm -rf 4.2.0.tar.gz ./opencv
|
||||
wget http://${MSLIBS_SERVER}:8081/libs/opencv/4.2.0.tar.gz
|
||||
tar -zxvf ./4.2.0.tar.gz
|
||||
mv ./opencv-4.2.0 ./opencv
|
||||
rm -rf 4.2.0.tar.gz
|
||||
else
|
||||
git submodule update --init --recursive third_party/opencv
|
||||
fi
|
||||
cd ${BASEPATH}/third_party/opencv
|
||||
rm -rf build && mkdir -p build && cd build && cmake ${CMAKE_MINDDATA_ARGS} -DBUILD_SHARED_LIBS=ON -DBUILD_ANDROID_PROJECTS=OFF \
|
||||
-DBUILD_LIST=core,imgcodecs,imgproc -DBUILD_ZLIB=ON .. && make -j$THREAD_NUM
|
||||
fi
|
||||
}
|
||||
|
||||
build_jpeg_turbo() {
|
||||
cd ${BASEPATH}
|
||||
if [[ "${LITE_PLATFORM}" == "x86_64" ]]; then
|
||||
JPEG_TURBO="${BASEPATH}"/third_party/libjpeg-turbo/lib/libjpeg.so.62.3.0
|
||||
else
|
||||
JPEG_TURBO="${BASEPATH}"/third_party/libjpeg-turbo/lib/libjpeg.so
|
||||
fi
|
||||
|
||||
if [[ ! -f "${JPEG_TURBO}" ]]; then
|
||||
if [[ "${MSLIBS_SERVER}" ]]; then
|
||||
cd "${BASEPATH}"/third_party/
|
||||
rm -rf 2.0.4.tar.gz ./libjpeg-turbo
|
||||
wget http://${MSLIBS_SERVER}:8081/libs/jpeg_turbo/2.0.4.tar.gz
|
||||
tar -zxvf ./2.0.4.tar.gz
|
||||
mv ./libjpeg-turbo-2.0.4 ./libjpeg-turbo
|
||||
rm -rf ./2.0.4.tar.gz
|
||||
else
|
||||
git submodule update --init --recursive third_party/libjpeg-turbo
|
||||
fi
|
||||
|
||||
cd ${BASEPATH}/third_party/libjpeg-turbo
|
||||
rm -rf build && mkdir -p build && cd build && cmake ${CMAKE_MINDDATA_ARGS} -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX="${BASEPATH}/third_party/libjpeg-turbo" .. && make -j$THREAD_NUM && make install
|
||||
fi
|
||||
}
|
||||
|
||||
build_eigen() {
|
||||
cd ${BASEPATH}
|
||||
if [[ "${MSLIBS_SERVER}" ]]; then
|
||||
cd "${BASEPATH}"/third_party/
|
||||
rm -rf ./eigen-3.*.tar.gz ./eigen
|
||||
wget http://${MSLIBS_SERVER}:8081/libs/eigen3/eigen-3.3.7.tar.gz
|
||||
tar -zxvf ./eigen-3.3.7.tar.gz
|
||||
mv ./eigen-3.3.7 ./eigen
|
||||
rm -rf ./eigen-3.*.tar.gz
|
||||
else
|
||||
git submodule update --init --recursive third_party/eigen
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
build_minddata_lite_deps()
|
||||
{
|
||||
echo "start build minddata lite project"
|
||||
if [[ "${LITE_PLATFORM}" == "arm64" ]]; then
|
||||
CMAKE_MINDDATA_ARGS="-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=19 \
|
||||
-DANDROID_NDK=${ANDROID_NDK} -DANDROID_ABI=arm64-v8a -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang \
|
||||
-DANDROID_STL=c++_shared -DCMAKE_BUILD_TYPE=${BUILD_TYPE}"
|
||||
elif [[ "${LITE_PLATFORM}" == "arm32" ]]; then
|
||||
CMAKE_MINDDATA_ARGS="-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=19 \
|
||||
-DANDROID_NDK=${ANDROID_NDK} -DANDROID_ABI=armeabi-v7a -DANDROID_TOOLCHAIN_NAME=clang \
|
||||
-DANDROID_STL=c++_shared -DCMAKE_BUILD_TYPE=${BUILD_TYPE}"
|
||||
else
|
||||
CMAKE_MINDDATA_ARGS="-DCMAKE_BUILD_TYPE=${BUILD_TYPE}"
|
||||
fi
|
||||
build_eigen
|
||||
build_jpeg_turbo
|
||||
}
|
||||
|
||||
get_version() {
|
||||
|
|
@ -527,112 +647,71 @@ get_version() {
|
|||
VERSION_STR=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}
|
||||
}
|
||||
|
||||
write_commit_file() {
|
||||
COMMIT_STR=$(git log -1 | grep commit)
|
||||
echo ${COMMIT_STR} > "${BASEPATH}/mindspore/lite/build/.commit_id"
|
||||
}
|
||||
|
||||
build_lite()
|
||||
{
|
||||
rm -rf ${BASEPATH}/output/*
|
||||
get_version
|
||||
echo "============ Start building MindSpore Lite ${VERSION_STR} ============"
|
||||
local LOCAL_LITE_PLATFORM=${LITE_PLATFORM}
|
||||
local LOCAL_INC_BUILD=${INC_BUILD}
|
||||
local LOCAL_LITE_ENABLE_GPU=${LITE_ENABLE_GPU}
|
||||
local LOCAL_LITE_ENABLE_NPU=${ENABLE_NPU}
|
||||
|
||||
if [[ "${LITE_LANGUAGE}" == "java" ]]; then
|
||||
if [[ "X$1" != "X" ]]; then
|
||||
LOCAL_LITE_PLATFORM=$1
|
||||
else
|
||||
LOCAL_LITE_PLATFORM=""
|
||||
fi
|
||||
if [[ "X$2" != "X" ]]; then
|
||||
LOCAL_INC_BUILD=$2
|
||||
else
|
||||
LOCAL_INC_BUILD=""
|
||||
fi
|
||||
if [[ "X$3" != "X" ]]; then
|
||||
LOCAL_LITE_ENABLE_GPU=$3
|
||||
else
|
||||
LOCAL_LITE_ENABLE_GPU=""
|
||||
fi
|
||||
mkdir -p ${BASEPATH}/mindspore/lite/build/java
|
||||
cd ${BASEPATH}/mindspore/lite/build/
|
||||
find . -maxdepth 1 | grep -v java | grep '/' | xargs -I {} rm -rf {}
|
||||
if [ "${ENABLE_GPU}" == "on" ] && [ "${LITE_PLATFORM}" == "arm64" ]; then
|
||||
echo "start build opencl"
|
||||
build_opencl
|
||||
fi
|
||||
if [[ "${LITE_LANGUAGE}" == "cpp" ]]; then
|
||||
if [[ "${DEVICE}" == "" && "${LOCAL_LITE_PLATFORM}" == "arm64" ]]; then
|
||||
LOCAL_LITE_ENABLE_GPU="opencl"
|
||||
LOCAL_LITE_ENABLE_NPU="on"
|
||||
fi
|
||||
|
||||
if [[ "${LOCAL_INC_BUILD}" == "off" ]]; then
|
||||
rm -rf ${BASEPATH}/mindspore/lite/build
|
||||
fi
|
||||
mkdir -pv ${BASEPATH}/mindspore/lite/build
|
||||
if [ "${RUN_TESTCASES}" == "on" ]; then
|
||||
build_gtest
|
||||
fi
|
||||
|
||||
if [ "${LOCAL_LITE_ENABLE_NPU}" == "on" ]; then
|
||||
if [ "${LOCAL_LITE_PLATFORM}" == "arm64" ]; then
|
||||
checkddk
|
||||
else
|
||||
echo "NPU only support platform arm64."
|
||||
exit 1
|
||||
fi
|
||||
if [ "${COMPILE_MINDDATA_LITE}" == "lite" ] || [ "${COMPILE_MINDDATA_LITE}" == "full" ]; then
|
||||
build_minddata_lite_deps
|
||||
fi
|
||||
|
||||
cd ${BASEPATH}/mindspore/lite/build
|
||||
write_commit_file
|
||||
cd "${BASEPATH}/mindspore/lite"
|
||||
if [[ "${INC_BUILD}" == "off" ]]; then
|
||||
rm -rf build
|
||||
fi
|
||||
mkdir -pv build
|
||||
cd build
|
||||
BUILD_TYPE="Release"
|
||||
if [[ "${DEBUG_MODE}" == "on" ]]; then
|
||||
BUILD_TYPE="Debug"
|
||||
fi
|
||||
|
||||
if [[ "${LOCAL_LITE_PLATFORM}" == "arm64" ]]; then
|
||||
if [[ "${LITE_PLATFORM}" == "arm64" ]]; then
|
||||
checkndk
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" -DANDROID_NATIVE_API_LEVEL="19" \
|
||||
-DANDROID_NDK="${ANDROID_NDK}" -DANDROID_ABI="arm64-v8a" -DANDROID_TOOLCHAIN_NAME="aarch64-linux-android-clang" \
|
||||
-DANDROID_STL=${ANDROID_STL} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DSUPPORT_TRAIN=${SUPPORT_TRAIN} \
|
||||
-DPLATFORM_ARM64=on -DENABLE_NEON=on -DENABLE_FP16="on" \
|
||||
-DPLATFORM_ARM64=on -DENABLE_NEON=on -DENABLE_FP16="off" \
|
||||
-DENABLE_TOOLS=${ENABLE_TOOLS} -DENABLE_CONVERTER=${ENABLE_CONVERTER} -DBUILD_TESTCASES=${RUN_TESTCASES} \
|
||||
-DSUPPORT_GPU=${LOCAL_LITE_ENABLE_GPU} -DSUPPORT_NPU=${LOCAL_LITE_ENABLE_NPU} -DENABLE_V0=on \
|
||||
-DOFFLINE_COMPILE=${OPENCL_OFFLINE_COMPILE} -DBUILD_MINDDATA=${COMPILE_MINDDATA_LITE} \
|
||||
-DSUPPORT_GPU=${ENABLE_GPU} -DOFFLINE_COMPILE=${OPENCL_OFFLINE_COMPILE} -DBUILD_MINDDATA=${COMPILE_MINDDATA_LITE} \
|
||||
-DCMAKE_INSTALL_PREFIX=${BASEPATH}/output/tmp -DMS_VERSION_MAJOR=${VERSION_MAJOR} \
|
||||
-DMS_VERSION_MINOR=${VERSION_MINOR} -DMS_VERSION_REVISION=${VERSION_REVISION} -DENABLE_VERBOSE=${ENABLE_VERBOSE} \
|
||||
"${BASEPATH}/mindspore/lite"
|
||||
elif [[ "${LOCAL_LITE_PLATFORM}" == "arm32" ]]; then
|
||||
elif [[ "${LITE_PLATFORM}" == "arm32" ]]; then
|
||||
checkndk
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" -DANDROID_NATIVE_API_LEVEL="19" \
|
||||
-DANDROID_NDK="${ANDROID_NDK}" -DANDROID_ABI="armeabi-v7a" -DANDROID_TOOLCHAIN_NAME="clang" \
|
||||
-DANDROID_STL=${ANDROID_STL} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
||||
-DPLATFORM_ARM32=on -DENABLE_NEON=on -DSUPPORT_TRAIN=${SUPPORT_TRAIN} \
|
||||
-DENABLE_TOOLS=${ENABLE_TOOLS} -DENABLE_CONVERTER=${ENABLE_CONVERTER} -DBUILD_TESTCASES=${RUN_TESTCASES} \
|
||||
-DSUPPORT_GPU=${LOCAL_LITE_ENABLE_GPU} -DSUPPORT_NPU=${LOCAL_LITE_ENABLE_NPU} -DENABLE_V0=on \
|
||||
-DOFFLINE_COMPILE=${OPENCL_OFFLINE_COMPILE} -DBUILD_MINDDATA=${COMPILE_MINDDATA_LITE} \
|
||||
-DSUPPORT_GPU=${ENABLE_GPU} -DOFFLINE_COMPILE=${OPENCL_OFFLINE_COMPILE} -DBUILD_MINDDATA=${COMPILE_MINDDATA_LITE} \
|
||||
-DCMAKE_INSTALL_PREFIX=${BASEPATH}/output/tmp -DMS_VERSION_MAJOR=${VERSION_MAJOR} \
|
||||
-DMS_VERSION_MINOR=${VERSION_MINOR} -DMS_VERSION_REVISION=${VERSION_REVISION} -DENABLE_VERBOSE=${ENABLE_VERBOSE} \
|
||||
"${BASEPATH}/mindspore/lite"
|
||||
else
|
||||
cmake -DPLATFORM_ARM64=off -DSUPPORT_TRAIN=${SUPPORT_TRAIN} \
|
||||
-DENABLE_TOOLS=${ENABLE_TOOLS} -DENABLE_CONVERTER=${ENABLE_CONVERTER} -DBUILD_TESTCASES=${RUN_TESTCASES} \
|
||||
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DSUPPORT_GPU=${LOCAL_LITE_ENABLE_GPU} -DSUPPORT_NPU=${LOCAL_LITE_ENABLE_NPU} \
|
||||
-DBUILD_MINDDATA=${COMPILE_MINDDATA_LITE} -DENABLE_V0=on \
|
||||
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DSUPPORT_GPU=${ENABLE_GPU} -DBUILD_MINDDATA=${COMPILE_MINDDATA_LITE} \
|
||||
-DOFFLINE_COMPILE=${OPENCL_OFFLINE_COMPILE} -DCMAKE_INSTALL_PREFIX=${BASEPATH}/output/tmp \
|
||||
-DMS_VERSION_MAJOR=${VERSION_MAJOR} -DMS_VERSION_MINOR=${VERSION_MINOR} -DMS_VERSION_REVISION=${VERSION_REVISION} \
|
||||
-DENABLE_VERBOSE=${ENABLE_VERBOSE} -DX86_64_SIMD=${X86_64_SIMD} "${BASEPATH}/mindspore/lite"
|
||||
-DENABLE_VERBOSE=${ENABLE_VERBOSE} "${BASEPATH}/mindspore/lite"
|
||||
fi
|
||||
make -j$THREAD_NUM && make install && make package
|
||||
if [[ $? -ne 0 ]]; then
|
||||
COMPILE_RET=$?
|
||||
|
||||
if [[ "${COMPILE_RET}" -ne 0 ]]; then
|
||||
echo "---------------- mindspore lite: build failed ----------------"
|
||||
exit 1
|
||||
else
|
||||
if [[ "${LITE_LANGUAGE}" == "cpp" ]]; then
|
||||
mv ${BASEPATH}/output/tmp/*.tar.gz* ${BASEPATH}/output/
|
||||
elif [[ "${LITE_LANGUAGE}" == "java" ]]; then
|
||||
mv ${BASEPATH}/output/tmp/*.tar.gz* ${BASEPATH}/mindspore/lite/build/java
|
||||
fi
|
||||
mv ${BASEPATH}/output/tmp/*.tar.gz* ${BASEPATH}/output/
|
||||
rm -rf ${BASEPATH}/output/tmp/
|
||||
echo "---------------- mindspore lite: build success ----------------"
|
||||
if [[ "X$LITE_LANGUAGE" = "Xcpp" ]]; then
|
||||
|
|
@ -643,253 +722,116 @@ build_lite()
|
|||
|
||||
build_lite_java_arm64() {
|
||||
# build mindspore-lite arm64
|
||||
local JTARBALL=mindspore-lite-${VERSION_STR}-inference-android-aarch64
|
||||
if [[ "X$SUPPORT_TRAIN" = "Xon" ]]; then
|
||||
JTARBALL=mindspore-lite-${VERSION_STR}-train-android-aarch64
|
||||
fi
|
||||
if [[ "X$INC_BUILD" == "Xoff" ]] || [[ ! -f "${BASEPATH}/mindspore/lite/build/java/${JTARBALL}.tar.gz" ]]; then
|
||||
if [[ "X${DEVICE}" == "Xcpu" ]]; then
|
||||
build_lite "arm64" "off" ""
|
||||
elif [[ "X${DEVICE}" == "Xnpu" ]]; then
|
||||
echo "NPU only support c++."
|
||||
exit 1
|
||||
else
|
||||
build_lite "arm64" "off" "opencl"
|
||||
fi
|
||||
if [[ "X$INC_BUILD" = "Xoff" ]] || [[ ! -f "${BASEPATH}/output/mindspore-lite-${VERSION_STR}-runtime-arm64-cpu.tar.gz" ]]; then
|
||||
LITE_PLATFORM="arm64"
|
||||
INC_BUILD_COPY=${INC_BUILD}
|
||||
INC_BUILD="off"
|
||||
build_lite
|
||||
INC_BUILD=${INC_BUILD_COPY}
|
||||
fi
|
||||
# copy arm64 so
|
||||
cd ${BASEPATH}/mindspore/lite/build/java/
|
||||
rm -rf ${JTARBALL}
|
||||
tar -zxvf ${JTARBALL}.tar.gz
|
||||
cd ${BASEPATH}/output/
|
||||
rm -rf mindspore-lite-${VERSION_STR}-runtime-arm64-cpu
|
||||
tar -zxvf mindspore-lite-${VERSION_STR}-runtime-arm64-cpu.tar.gz
|
||||
[ -n "${JAVA_PATH}" ] && rm -rf ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
mkdir -p ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
mkdir -p ${JAVA_PATH}/native/libs/arm64-v8a/
|
||||
if [[ "X$SUPPORT_TRAIN" = "Xon" ]]; then
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/lib/libmindspore-lite.so ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/lib/libmindspore-lite.so ${JAVA_PATH}/native/libs/arm64-v8a/
|
||||
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/lib/libminddata-lite.so ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/lib/libminddata-lite.so ${JAVA_PATH}/native/libs/arm64-v8a/
|
||||
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/third_party/libjpeg-turbo/lib/*.so ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/third_party/libjpeg-turbo/lib/*.so ${JAVA_PATH}/native/libs/arm64-v8a/
|
||||
else
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/inference/lib/libmindspore-lite.so ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/inference/lib/libmindspore-lite.so ${JAVA_PATH}/native/libs/arm64-v8a/
|
||||
fi
|
||||
[ -n "${VERSION_STR}" ] && rm -rf ${JTARBALL}
|
||||
cp ${BASEPATH}/output/mindspore-lite-${VERSION_STR}-runtime-arm64-cpu/lib/libmindspore-lite.so ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
cp ${BASEPATH}/output/mindspore-lite-${VERSION_STR}-runtime-arm64-cpu/lib/libmindspore-lite-fp16.so ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
cp ${BASEPATH}/output/mindspore-lite-${VERSION_STR}-runtime-arm64-cpu/lib/libmindspore-lite-optimize.so ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
echo mindspore-lite-${VERSION_STR}-runtime-arm64-cpu
|
||||
[ -n "${VERSION_STR}" ] && rm -rf mindspore-lite-${VERSION_STR}-runtime-arm64-cpu
|
||||
}
|
||||
|
||||
build_lite_java_arm32() {
|
||||
# build mindspore-lite arm32
|
||||
local JTARBALL=mindspore-lite-${VERSION_STR}-inference-android-aarch32
|
||||
if [[ "X$SUPPORT_TRAIN" = "Xon" ]]; then
|
||||
JTARBALL=mindspore-lite-${VERSION_STR}-train-android-aarch32
|
||||
fi
|
||||
if [[ "X$INC_BUILD" == "Xoff" ]] || [[ ! -f "${BASEPATH}/mindspore/lite/build/java/${JTARBALL}.tar.gz" ]]; then
|
||||
build_lite "arm32" "off" ""
|
||||
if [[ "X$INC_BUILD" = "Xoff" ]] || [[ ! -f "${BASEPATH}/output/mindspore-lite-${VERSION_STR}-runtime-arm32-cpu.tar.gz" ]]; then
|
||||
LITE_PLATFORM="arm32"
|
||||
INC_BUILD_COPY=${INC_BUILD}
|
||||
INC_BUILD="off"
|
||||
build_lite
|
||||
INC_BUILD=${INC_BUILD_COPY}
|
||||
fi
|
||||
# copy arm32 so
|
||||
cd ${BASEPATH}/mindspore/lite/build/java/
|
||||
rm -rf ${JTARBALL}
|
||||
tar -zxvf ${JTARBALL}.tar.gz
|
||||
cd ${BASEPATH}/output/
|
||||
rm -rf mindspore-lite-${VERSION_STR}-runtime-arm32-cpu
|
||||
tar -zxvf mindspore-lite-${VERSION_STR}-runtime-arm32-cpu.tar.gz
|
||||
[ -n "${JAVA_PATH}" ] && rm -rf ${JAVA_PATH}/java/app/libs/armeabi-v7a/
|
||||
mkdir -p ${JAVA_PATH}/java/app/libs/armeabi-v7a/
|
||||
mkdir -p ${JAVA_PATH}/native/libs/armeabi-v7a/
|
||||
if [[ "X$SUPPORT_TRAIN" = "Xon" ]]; then
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/lib/libmindspore-lite.so ${JAVA_PATH}/java/app/libs/armeabi-v7a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/lib/libmindspore-lite.so ${JAVA_PATH}/native/libs/armeabi-v7a/
|
||||
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/lib/libminddata-lite.so ${JAVA_PATH}/java/app/libs/armeabi-v7a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/lib/libminddata-lite.so ${JAVA_PATH}/native/libs/armeabi-v7a/
|
||||
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/third_party/libjpeg-turbo/lib/*.so ${JAVA_PATH}/java/app/libs/armeabi-v7a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/third_party/libjpeg-turbo/lib/*.so ${JAVA_PATH}/native/libs/armeabi-v7a/
|
||||
else
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/inference/lib/libmindspore-lite.so ${JAVA_PATH}/java/app/libs/armeabi-v7a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/inference/lib/libmindspore-lite.so ${JAVA_PATH}/native/libs/armeabi-v7a/
|
||||
fi
|
||||
[ -n "${VERSION_STR}" ] && rm -rf ${JTARBALL}
|
||||
}
|
||||
|
||||
build_lite_java_x86() {
|
||||
# build mindspore-lite x86
|
||||
local inference_or_train=inference
|
||||
if [[ "X$SUPPORT_TRAIN" = "Xon" ]]; then
|
||||
inference_or_train=train
|
||||
fi
|
||||
|
||||
if [[ "$X86_64_SIMD" == "sse" || "$X86_64_SIMD" == "avx" ]]; then
|
||||
local JTARBALL=mindspore-lite-${VERSION_STR}-${inference_or_train}-linux-x64-${X86_64_SIMD}
|
||||
else
|
||||
local JTARBALL=mindspore-lite-${VERSION_STR}-${inference_or_train}-linux-x64
|
||||
fi
|
||||
if [[ "X$INC_BUILD" == "Xoff" ]] || [[ ! -f "${BASEPATH}/mindspore/lite/build/java/${JTARBALL}.tar.gz" ]]; then
|
||||
build_lite "x86_64" "off" ""
|
||||
fi
|
||||
# copy x86 so
|
||||
cd ${BASEPATH}/mindspore/lite/build/java
|
||||
rm -rf ${JTARBALL}
|
||||
tar -zxvf ${JTARBALL}.tar.gz
|
||||
[ -n "${JAVA_PATH}" ] && rm -rf ${JAVA_PATH}/java/linux_x86/libs/
|
||||
mkdir -p ${JAVA_PATH}/java/linux_x86/libs/
|
||||
mkdir -p ${JAVA_PATH}/native/libs/linux_x86/
|
||||
if [[ "X$SUPPORT_TRAIN" = "Xon" ]]; then
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/lib/libmindspore-lite.so ${JAVA_PATH}/java/linux_x86/libs/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/lib/libmindspore-lite.so ${JAVA_PATH}/native/libs/linux_x86/
|
||||
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/lib/libminddata-lite.so ${JAVA_PATH}/java/linux_x86/libs/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/lib/libminddata-lite.so ${JAVA_PATH}/native/libs/linux_x86/
|
||||
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/third_party/libjpeg-turbo/lib/*.so* ${JAVA_PATH}/java/linux_x86/libs/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/train/minddata/third_party/libjpeg-turbo/lib/*.so* ${JAVA_PATH}/native/libs/linux_x86/
|
||||
else
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/inference/lib/libmindspore-lite.so ${JAVA_PATH}/java/linux_x86/libs/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/${JTARBALL}/inference/lib/libmindspore-lite.so ${JAVA_PATH}/native/libs/linux_x86/
|
||||
fi
|
||||
[ -n "${VERSION_STR}" ] && rm -rf ${JTARBALL}
|
||||
cp ${BASEPATH}/output/mindspore-lite-${VERSION_STR}-runtime-arm32-cpu/lib/libmindspore-lite.so ${JAVA_PATH}/java/app/libs/armeabi-v7a/
|
||||
[ -n "${VERSION_STR}" ] && rm -rf mindspore-lite-${VERSION_STR}-runtime-arm32-cpu
|
||||
}
|
||||
|
||||
build_jni_arm64() {
|
||||
# build jni so
|
||||
cd "${BASEPATH}/mindspore/lite/build"
|
||||
rm -rf java/jni
|
||||
mkdir -pv java/jni
|
||||
cd java/jni
|
||||
rm -rf java
|
||||
mkdir -pv java
|
||||
cd java
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" -DANDROID_NATIVE_API_LEVEL="19" \
|
||||
-DANDROID_NDK="${ANDROID_NDK}" -DANDROID_ABI="arm64-v8a" -DANDROID_TOOLCHAIN_NAME="aarch64-linux-android-clang" \
|
||||
-DMS_VERSION_MAJOR=${VERSION_MAJOR} -DMS_VERSION_MINOR=${VERSION_MINOR} -DMS_VERSION_REVISION=${VERSION_REVISION} \
|
||||
-DANDROID_STL="c++_static" -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_VERBOSE=${ENABLE_VERBOSE} \
|
||||
-DSUPPORT_TRAIN=${SUPPORT_TRAIN} -DPLATFORM_ARM64=on "${JAVA_PATH}/native/"
|
||||
-DPLATFORM_ARM64=on "${JAVA_PATH}/java/app/src/main/native"
|
||||
make -j$THREAD_NUM
|
||||
if [[ $? -ne 0 ]]; then
|
||||
COMPILE_RET=$?
|
||||
if [[ "${COMPILE_RET}" -ne 0 ]]; then
|
||||
echo "---------------- mindspore lite: build jni arm64 failed----------------"
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/jni/libmindspore-lite-jni.so ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
mkdir -p ${JAVA_PATH}/native/libs/arm64-v8a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/jni/libmindspore-lite-jni.so ${JAVA_PATH}/native/libs/arm64-v8a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/libmindspore-lite-jni.so ${JAVA_PATH}/java/app/libs/arm64-v8a/
|
||||
}
|
||||
|
||||
build_jni_arm32() {
|
||||
# build jni so
|
||||
cd "${BASEPATH}/mindspore/lite/build"
|
||||
rm -rf java/jni
|
||||
mkdir -pv java/jni
|
||||
cd java/jni
|
||||
rm -rf java
|
||||
mkdir -pv java
|
||||
cd java
|
||||
cmake -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" -DANDROID_NATIVE_API_LEVEL="19" \
|
||||
-DANDROID_NDK="${ANDROID_NDK}" -DANDROID_ABI="armeabi-v7a" -DANDROID_TOOLCHAIN_NAME="aarch64-linux-android-clang" \
|
||||
-DMS_VERSION_MAJOR=${VERSION_MAJOR} -DMS_VERSION_MINOR=${VERSION_MINOR} -DMS_VERSION_REVISION=${VERSION_REVISION} \
|
||||
-DANDROID_STL="c++_static" -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_VERBOSE=${ENABLE_VERBOSE} \
|
||||
-DSUPPORT_TRAIN=${SUPPORT_TRAIN} -DPLATFORM_ARM32=on "${JAVA_PATH}/native"
|
||||
-DPLATFORM_ARM32=on "${JAVA_PATH}/java/app/src/main/native"
|
||||
make -j$THREAD_NUM
|
||||
if [[ $? -ne 0 ]]; then
|
||||
COMPILE_RET=$?
|
||||
if [[ "${COMPILE_RET}" -ne 0 ]]; then
|
||||
echo "---------------- mindspore lite: build jni arm32 failed----------------"
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p ${JAVA_PATH}/java/app/libs/armeabi-v7a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/jni/libmindspore-lite-jni.so ${JAVA_PATH}/java/app/libs/armeabi-v7a/
|
||||
mkdir -p ${JAVA_PATH}/native/libs/armeabi-v7a/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/jni/libmindspore-lite-jni.so ${JAVA_PATH}/native/libs/armeabi-v7a/
|
||||
}
|
||||
|
||||
build_jni_x86_64() {
|
||||
# build jni so
|
||||
cd "${BASEPATH}/mindspore/lite/build"
|
||||
rm -rf java/jni
|
||||
mkdir -pv java/jni
|
||||
cd java/jni
|
||||
cmake -DMS_VERSION_MAJOR=${VERSION_MAJOR} -DMS_VERSION_MINOR=${VERSION_MINOR} -DMS_VERSION_REVISION=${VERSION_REVISION} \
|
||||
-DENABLE_VERBOSE=${ENABLE_VERBOSE} -DSUPPORT_TRAIN=${SUPPORT_TRAIN} "${JAVA_PATH}/native/"
|
||||
make -j$THREAD_NUM
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "---------------- mindspore lite: build jni x86_64 failed----------------"
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p ${JAVA_PATH}/java/linux_x86/libs/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/jni/libmindspore-lite-jni.so ${JAVA_PATH}/java/linux_x86/libs/
|
||||
mkdir -p ${JAVA_PATH}/native/libs/linux_x86/
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/jni/libmindspore-lite-jni.so ${JAVA_PATH}/native/libs/linux_x86/
|
||||
}
|
||||
|
||||
check_java_home() {
|
||||
if [ "${JAVA_PATH}" ]; then
|
||||
echo -e "\e[31mJAVA_HOME=$JAVA_HOME \e[0m"
|
||||
else
|
||||
echo -e "\e[31mplease set $JAVA_HOME in environment variable for example: export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 \e[0m"
|
||||
exit 1
|
||||
fi
|
||||
cp ${BASEPATH}/mindspore/lite/build/java/libmindspore-lite-jni.so ${JAVA_PATH}/java/app/libs/armeabi-v7a/
|
||||
}
|
||||
|
||||
build_java() {
|
||||
JAVA_PATH=${BASEPATH}/mindspore/lite/java
|
||||
get_version
|
||||
if [[ "X${INC_BUILD}" == "Xoff" ]]; then
|
||||
rm -rf ${BASEPATH}/mindspore/lite/build
|
||||
fi
|
||||
# build common module
|
||||
cd ${JAVA_PATH}/java/common
|
||||
gradle clean
|
||||
gradle build
|
||||
JAVA_PATH=${BASEPATH}/mindspore/lite/java
|
||||
get_version
|
||||
build_lite_java_arm64
|
||||
build_lite_java_arm32
|
||||
build_jni_arm64
|
||||
build_jni_arm32
|
||||
|
||||
# build aar
|
||||
build_lite_java_arm64
|
||||
build_jni_arm64
|
||||
build_lite_java_arm32
|
||||
build_jni_arm32
|
||||
# build aar
|
||||
## check sdk gradle
|
||||
cd ${JAVA_PATH}/java
|
||||
rm -rf .gradle build gradle gradlew gradlew.bat build app/build
|
||||
|
||||
mkdir -p ${JAVA_PATH}/java/linux_x86/libs
|
||||
cp ${JAVA_PATH}/java/common/build/libs/mindspore-lite-java-common.jar ${JAVA_PATH}/java/app/libs
|
||||
cd ${JAVA_PATH}/java/app
|
||||
gradle clean
|
||||
gradle build
|
||||
gradle init
|
||||
gradle wrapper
|
||||
./gradlew build
|
||||
|
||||
gradle publish -PLITE_VERSION=${VERSION_STR}
|
||||
gradle publish -PLITE_VERSION=${VERSION_STR}
|
||||
|
||||
cd ${JAVA_PATH}/java/app/build
|
||||
zip -r mindspore-lite-maven-${VERSION_STR}.zip mindspore
|
||||
|
||||
local inference_or_train=inference
|
||||
if [[ "X$SUPPORT_TRAIN" = "Xon" ]]; then
|
||||
inference_or_train=train
|
||||
fi
|
||||
|
||||
# build linux x86 jar
|
||||
if [[ "$X86_64_SIMD" == "sse" || "$X86_64_SIMD" == "avx" ]]; then
|
||||
local LINUX_X86_PACKAGE_NAME=mindspore-lite-${VERSION_STR}-${inference_or_train}-linux-x64-${X86_64_SIMD}-jar
|
||||
else
|
||||
local LINUX_X86_PACKAGE_NAME=mindspore-lite-${VERSION_STR}-${inference_or_train}-linux-x64-jar
|
||||
fi
|
||||
check_java_home
|
||||
build_lite_java_x86
|
||||
build_jni_x86_64
|
||||
|
||||
mkdir -p ${JAVA_PATH}/java/linux_x86/libs
|
||||
cp ${JAVA_PATH}/java/common/build/libs/mindspore-lite-java-common.jar ${JAVA_PATH}/java/linux_x86/libs/
|
||||
# build java
|
||||
cd ${JAVA_PATH}/java/linux_x86/
|
||||
gradle clean
|
||||
gradle releaseJar
|
||||
# install and package
|
||||
mkdir -p ${JAVA_PATH}/java/linux_x86/build/lib
|
||||
cp ${JAVA_PATH}/java/linux_x86/libs/*.so* ${JAVA_PATH}/java/linux_x86/build/lib/jar
|
||||
cd ${JAVA_PATH}/java/linux_x86/build/
|
||||
|
||||
cp -r ${JAVA_PATH}/java/linux_x86/build/lib ${JAVA_PATH}/java/linux_x86/build/${LINUX_X86_PACKAGE_NAME}
|
||||
tar czvf ${LINUX_X86_PACKAGE_NAME}.tar.gz ${LINUX_X86_PACKAGE_NAME}
|
||||
# copy output
|
||||
cp ${JAVA_PATH}/java/app/build/mindspore-lite-maven-${VERSION_STR}.zip ${BASEPATH}/output
|
||||
cp ${LINUX_X86_PACKAGE_NAME}.tar.gz ${BASEPATH}/output
|
||||
|
||||
cd ${BASEPATH}/output
|
||||
[ -n "${VERSION_STR}" ] && rm -rf ${BASEPATH}/mindspore/lite/build/java/mindspore-lite-${VERSION_STR}-${inference_or_train}-linux-x64
|
||||
exit 0
|
||||
cd ${JAVA_PATH}/java/app/build
|
||||
zip -r mindspore-lite-maven-${VERSION_STR}.zip mindspore
|
||||
# copy output
|
||||
cp mindspore-lite-maven-${VERSION_STR}.zip ${BASEPATH}/output/
|
||||
exit 0
|
||||
}
|
||||
|
||||
make_clean()
|
||||
{
|
||||
echo "enable make clean"
|
||||
echo "enbale make clean"
|
||||
cd "${BUILD_PATH}/mindspore"
|
||||
cmake --build . --target clean
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,69 +1,70 @@
|
|||
## define customized find functions, print customized error messages
|
||||
## define customized find fucntions, print customized error messages
|
||||
function(find_required_package pkg_name)
|
||||
find_package(${pkg_name})
|
||||
if(NOT ${pkg_name}_FOUND)
|
||||
message(FATAL_ERROR "Required package ${pkg_name} not found, "
|
||||
"please install the package and try building MindSpore again.")
|
||||
if (NOT ${pkg_name}_FOUND)
|
||||
message(FATAL_ERROR "Required package ${pkg_name} not found, please install the package and try building MindSpore again.")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(find_required_program prog_name)
|
||||
find_program(${prog_name}_EXE ${prog_name})
|
||||
if(NOT ${prog_name}_EXE)
|
||||
message(FATAL_ERROR "Required program ${prog_name} not found, "
|
||||
"please install the package and try building MindSpore again.")
|
||||
endif()
|
||||
if (NOT ${prog_name}_EXE)
|
||||
message(FATAL_ERROR "Required program ${prog_name} not found, please install the package and try building MindSpore again.")
|
||||
endif ()
|
||||
endfunction()
|
||||
|
||||
|
||||
## find python, quit if the found python is static
|
||||
set(Python3_USE_STATIC_LIBS FALSE)
|
||||
find_package(Python3 COMPONENTS Interpreter Development)
|
||||
if(Python3_FOUND)
|
||||
if (Python3_FOUND)
|
||||
message("Python3 found, version: ${Python3_VERSION}")
|
||||
message("Python3 library path: ${Python3_LIBRARY}")
|
||||
message("Python3 interpreter: ${Python3_EXECUTABLE}")
|
||||
elseif(Python3_LIBRARY AND Python3_EXECUTABLE AND
|
||||
${Python3_VERSION} VERSION_GREATER_EQUAL "3.7.0" AND ${Python3_VERSION} VERSION_LESS "3.9.9")
|
||||
elseif (Python3_LIBRARY AND Python3_EXECUTABLE AND
|
||||
${Python3_VERSION} VERSION_GREATER_EQUAL "3.7.0" AND ${Python3_VERSION} VERSION_LESS "3.8.0")
|
||||
message(WARNING "Maybe python3 environment is broken.")
|
||||
message("Python3 library path: ${Python3_LIBRARY}")
|
||||
message("Python3 interpreter: ${Python3_EXECUTABLE}")
|
||||
else()
|
||||
else ()
|
||||
message(FATAL_ERROR "Python3 not found, please install Python>=3.7.5, and set --enable-shared "
|
||||
"if you are building Python locally")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
## packages used both on windows and linux
|
||||
if(DEFINED ENV{MS_PATCH_PATH})
|
||||
if (DEFINED ENV{MS_PATCH_PATH})
|
||||
find_program(Patch_EXECUTABLE patch PATHS $ENV{MS_PATCH_PATH})
|
||||
set(Patch_FOUND ${Patch_EXECUTABLE})
|
||||
else()
|
||||
else ()
|
||||
find_package(Patch)
|
||||
endif()
|
||||
if(NOT Patch_FOUND)
|
||||
message(FATAL_ERROR "Patch not found, "
|
||||
"please set environment variable MS_PATCH_PATH to path where Patch is located, "
|
||||
endif ()
|
||||
if (NOT Patch_FOUND)
|
||||
message(FATAL_ERROR "Patch not found, please set environment variable MS_PATCH_PATH to path where Patch is located, "
|
||||
"usually found in GIT_PATH/usr/bin on Windows")
|
||||
endif()
|
||||
endif ()
|
||||
message(PATCH_EXECUTABLE = ${Patch_EXECUTABLE})
|
||||
|
||||
find_required_package(Threads)
|
||||
|
||||
|
||||
## packages used on Linux
|
||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if(ENABLE_MINDDATA)
|
||||
if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (ENABLE_MINDDATA)
|
||||
find_required_program(tclsh)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (MS_BUILD_GRPC)
|
||||
find_required_package(OpenSSL)
|
||||
endif ()
|
||||
|
||||
## packages used in GPU mode only
|
||||
if(ENABLE_GPU)
|
||||
if (ENABLE_GPU)
|
||||
find_library(gmp_LIB gmp)
|
||||
find_library(gmpxx_LIB gmpxx)
|
||||
find_file(gmp_HEADER gmp.h)
|
||||
if(NOT gmp_LIB OR NOT gmpxx_LIB OR NOT gmp_HEADER)
|
||||
if (NOT gmp_LIB OR NOT gmpxx_LIB OR NOT gmp_HEADER)
|
||||
message(FATAL_ERROR "Required package gmp not found, please install gmp and try building MindSpore again.")
|
||||
endif()
|
||||
endif ()
|
||||
find_required_program(automake)
|
||||
find_required_program(autoconf)
|
||||
find_required_program(libtoolize)
|
||||
|
|
|
|||
|
|
@ -1,43 +1,84 @@
|
|||
message(STATUS "Compiling GraphEngine")
|
||||
message(STATUS "compiling GraphEngine")
|
||||
set(GE_SOURCE_DIR ${CMAKE_SOURCE_DIR}/graphengine)
|
||||
|
||||
message(STATUS "[ME] build_path: ${BUILD_PATH}")
|
||||
message(STATUS "ge dir: ${GE_SOURCE_DIR}")
|
||||
include(${GE_SOURCE_DIR}/cmake/ge_utils.cmake)
|
||||
include(${GE_SOURCE_DIR}/cmake/external_libs/json.cmake)
|
||||
include(${GE_SOURCE_DIR}/cmake/external_libs/eigen.cmake)
|
||||
include(${GE_SOURCE_DIR}/cmake/external_libs/gtest.cmake)
|
||||
include(${GE_SOURCE_DIR}/cmake/external_libs/protobuf.cmake)
|
||||
include(${GE_SOURCE_DIR}/cmake/external_libs/onnx.cmake)
|
||||
include(${GE_SOURCE_DIR}/cmake/external_libs/securec.cmake)
|
||||
|
||||
function(find_submodule_lib module name path)
|
||||
find_library(${module}_LIBRARY_DIR NAMES ${name} NAMES_PER_DIR PATHS ${path}
|
||||
PATH_SUFFIXES lib
|
||||
)
|
||||
if("${${module}_LIBRARY_DIR}" STREQUAL "${module}_LIBRARY_DIR-NOTFOUND")
|
||||
message(FATAL_ERROR "${name} not found in any of following paths: ${path}")
|
||||
# for UT, find slog and error_manager from local prebuild
|
||||
if (NOT ENABLE_D)
|
||||
set(GE_PREBUILD_PATH ${GE_SOURCE_DIR}/third_party/prebuild/${CMAKE_HOST_SYSTEM_PROCESSOR})
|
||||
find_library(slog libslog.so ${GE_PREBUILD_PATH})
|
||||
find_library(error_manager liberror_manager.so ${GE_PREBUILD_PATH})
|
||||
elseif (DEFINED ENV{D_LINK_PATH})
|
||||
set(GE_LIB_PATH $ENV{D_LINK_PATH})
|
||||
set(GE_SYS_ARCH "")
|
||||
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64")
|
||||
# x86 ubuntu
|
||||
set(GE_SYS_ARCH "x86_64")
|
||||
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
|
||||
# arm euleros
|
||||
set(GE_SYS_ARCH "aarch64")
|
||||
else()
|
||||
message(FATAL_ERROR "Running on a unsupported architecture: ${SYSTEM_TYPE}, build terminated")
|
||||
endif()
|
||||
add_library(${module} SHARED IMPORTED)
|
||||
set_target_properties(${module} PROPERTIES
|
||||
IMPORTED_LOCATION ${${module}_LIBRARY_DIR}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
if(ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES)
|
||||
set(_ge_tmp_CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set(_ge_tmp_ENABLE_GITEE ${ENABLE_GITEE})
|
||||
set(_ge_tmp_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
set(ENABLE_GITEE ON)
|
||||
set(CMAKE_INSTALL_PREFIX ${BUILD_PATH}/graphengine)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__FILE__='\"$(subst $(realpath ${CMAKE_SOURCE_DIR})/,,$(abspath $<))\"' \
|
||||
-Wno-builtin-macro-redefined")
|
||||
|
||||
if(ENABLE_TESTCASES)
|
||||
# use slog, error manager, mmpa in non ascend mode, e.g. tests
|
||||
set(GE_PREBUILD_PATH ${GE_SOURCE_DIR}/third_party/prebuild/${CMAKE_HOST_SYSTEM_PROCESSOR})
|
||||
set(ENABLE_MS_TESTCASES TRUE)
|
||||
find_submodule_lib(slog libalog.so ${GE_PREBUILD_PATH})
|
||||
find_submodule_lib(static_mmpa libmmpa.a ${GE_PREBUILD_PATH})
|
||||
endif()
|
||||
|
||||
string(REPLACE " -Werror" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
add_subdirectory(${GE_SOURCE_DIR})
|
||||
set(CMAKE_INSTALL_PREFIX ${_ge_tmp_CMAKE_INSTALL_PREFIX})
|
||||
set(ENABLE_GITEE ${_ge_tmp_ENABLE_GITEE})
|
||||
set(CMAKE_CXX_FLAGS ${_ge_tmp_CMAKE_CXX_FLAGS})
|
||||
set(GE_LIB_PATH ${GE_LIB_PATH}/${GE_SYS_ARCH})
|
||||
find_library(slog libslog.so ${GE_LIB_PATH})
|
||||
find_library(mmpa libmmpa.so ${GE_LIB_PATH})
|
||||
find_library(runtime libruntime.so ${GE_LIB_PATH})
|
||||
find_library(msprof libmsprof.so ${GE_LIB_PATH})
|
||||
find_library(register libregister.so ${GE_LIB_PATH})
|
||||
find_library(hccl libhccl.so ${GE_LIB_PATH})
|
||||
find_library(cce libcce.so ${GE_LIB_PATH})
|
||||
find_library(resource libresource.so ${GE_LIB_PATH})
|
||||
find_library(error_manager liberror_manager.so ${GE_LIB_PATH})
|
||||
else()
|
||||
message(FATAL_ERROR "No compile option defined for GraphEngine, exiting")
|
||||
# Ascend mode
|
||||
if(DEFINED ENV{ASCEND_CUSTOM_PATH})
|
||||
set(ASCEND_PATH $ENV{ASCEND_CUSTOM_PATH})
|
||||
else()
|
||||
set(ASCEND_PATH /usr/local/Ascend)
|
||||
endif()
|
||||
set(ASCEND_DRIVER_PATH ${ASCEND_PATH}/driver/lib64/common)
|
||||
set(ASCEND_RUNTIME_PATH ${ASCEND_PATH}/fwkacllib/lib64)
|
||||
find_library(c_sec libc_sec.so ${ASCEND_DRIVER_PATH})
|
||||
find_library(slog libslog.so ${ASCEND_DRIVER_PATH})
|
||||
find_library(mmpa libmmpa.so ${ASCEND_DRIVER_PATH})
|
||||
find_library(cce libcce.so ${ASCEND_RUNTIME_PATH})
|
||||
find_library(hccl libhccl.so ${ASCEND_RUNTIME_PATH})
|
||||
find_library(runtime libruntime.so ${ASCEND_RUNTIME_PATH})
|
||||
find_library(msprof libmsprof.so ${ASCEND_RUNTIME_PATH})
|
||||
find_library(register libregister.so ${ASCEND_RUNTIME_PATH})
|
||||
find_library(resource libresource.so ${ASCEND_RUNTIME_PATH})
|
||||
find_library(error_manager liberror_manager.so ${ASCEND_RUNTIME_PATH})
|
||||
# for Atlas env
|
||||
set(ASCEND_TOOLKIT_RUNTIME_PATH ${ASCEND_PATH}/ascend-toolkit/latest/fwkacllib/lib64)
|
||||
find_library(cce libcce.so ${ASCEND_TOOLKIT_RUNTIME_PATH})
|
||||
find_library(hccl libhccl.so ${ASCEND_TOOLKIT_RUNTIME_PATH})
|
||||
find_library(runtime libruntime.so ${ASCEND_TOOLKIT_RUNTIME_PATH})
|
||||
find_library(msprof libmsprof.so ${ASCEND_TOOLKIT_RUNTIME_PATH})
|
||||
find_library(register libregister.so ${ASCEND_TOOLKIT_RUNTIME_PATH})
|
||||
find_library(resource libresource.so ${ASCEND_TOOLKIT_RUNTIME_PATH})
|
||||
find_library(error_manager liberror_manager.so ${ASCEND_TOOLKIT_RUNTIME_PATH})
|
||||
endif()
|
||||
|
||||
# compile libraries from following directories
|
||||
# this cmake file is called only when NOT ENABLE_GE is set
|
||||
set(_ge_tmp_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
|
||||
string(REPLACE " -Wall" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
string(REPLACE " -Werror" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
# force __FILE__ to show relative path of file, from source directory
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__FILE__='\"$(subst $(realpath ${CMAKE_SOURCE_DIR})/,,$(abspath $<))\"' -Wno-builtin-macro-redefined")
|
||||
add_subdirectory(${GE_SOURCE_DIR}/src/common/graph)
|
||||
if(ENABLE_D)
|
||||
add_subdirectory(${GE_SOURCE_DIR}/src/ge/common)
|
||||
add_subdirectory(${GE_SOURCE_DIR}/src/ge/ge_runtime)
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_FLAGS ${_ge_tmp_CMAKE_CXX_FLAGS})
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
# GTest_LIBRARY
|
||||
#
|
||||
|
||||
if(NOT TARGET gtest)
|
||||
if (NOT TARGET gtest)
|
||||
set(BUILD_TESTING OFF CACHE BOOL "Disable glog test")
|
||||
|
||||
set(_ms_tmp_CMAKE_POSITION_INDEPENDENT_CODE ${CMAKE_POSITION_INDEPENDENT_CODE})
|
||||
|
|
@ -17,8 +17,7 @@ if(NOT TARGET gtest)
|
|||
set(CMAKE_MACOSX_RPATH TRUE)
|
||||
set(CMAKE_CXX_FLAGS "${SECURE_CXX_FLAGS}")
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "5.0"
|
||||
AND CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64" AND SYSTEM_TYPE MATCHES "euleros")
|
||||
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "5.0" AND CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64" AND SYSTEM_TYPE MATCHES "euleros")
|
||||
# -D_GLIBCXX_USE_CXX11_ABI=0 added for the ABI incompatible for libtsdclient.so
|
||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
# PROTOBUF_LIBRARY - Link this to use protobuf
|
||||
#
|
||||
if(NOT TARGET protobuf::libprotobuf)
|
||||
if (NOT TARGET protobuf::libprotobuf)
|
||||
set(protobuf_BUILD_TESTS OFF CACHE BOOL "Disable protobuf test")
|
||||
set(protobuf_BUILD_SHARED_LIBS OFF CACHE BOOL "Gen shared library")
|
||||
set(_ms_tmp_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
|
|
@ -14,7 +14,7 @@ if(NOT TARGET protobuf::libprotobuf)
|
|||
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/protobuf/cmake ${CMAKE_BINARY_DIR}/protobuf)
|
||||
|
||||
set(CMAKE_CXX_FLAGS ${_ms_tmp_CMAKE_CXX_FLAGS})
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
include_directories(${CMAKE_CURRENT_LIST_DIR}/../third_party/protobuf/src)
|
||||
|
||||
|
|
@ -47,7 +47,7 @@ function(ms_protobuf_generate c_var h_var)
|
|||
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/${rel_path}"
|
||||
COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/${rel_path} ${abs_file}
|
||||
DEPENDS protobuf::protoc ${abs_file}
|
||||
COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM)
|
||||
COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM )
|
||||
endforeach()
|
||||
|
||||
set_source_files_properties(${${c_var}} ${${h_var}} PROPERTIES GENERATED TRUE)
|
||||
|
|
@ -86,12 +86,10 @@ function(ms_protobuf_generate_py c_var h_var py_var)
|
|||
COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/${rel_path} ${abs_file}
|
||||
COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/${rel_path} ${abs_file}
|
||||
COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/${rel_path} ${abs_file}
|
||||
COMMAND perl -pi -e "s/import (.+_pb2.*)/from . import \\1/"
|
||||
"${CMAKE_BINARY_DIR}/${rel_path}/${file_name}_pb2.py"
|
||||
COMMAND cp "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}_pb2.py"
|
||||
"${PROJECT_SOURCE_DIR}/mindspore/train/"
|
||||
COMMAND perl -pi -e "s/import (.+_pb2.*)/from . import \\1/" "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}_pb2.py"
|
||||
COMMAND cp "${CMAKE_BINARY_DIR}/${rel_path}/${file_name}_pb2.py" "${PROJECT_SOURCE_DIR}/mindspore/train/"
|
||||
DEPENDS protobuf::protoc ${abs_file}
|
||||
COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM)
|
||||
COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM )
|
||||
endforeach()
|
||||
|
||||
set_source_files_properties(${${c_var}} ${${h_var}} ${${py_var}} PROPERTIES GENERATED TRUE)
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@
|
|||
# SECUREC_LIBRARY
|
||||
#
|
||||
|
||||
if(NOT TARGET securec)
|
||||
if (NOT TARGET securec)
|
||||
set(_ms_tmp_CMAKE_POSITION_INDEPENDENT_CODE ${CMAKE_POSITION_INDEPENDENT_CODE})
|
||||
set(_ms_tmp_CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
|
||||
|
||||
set(CMAKE_C_FLAGS "${SECURE_CXX_FLAGS}")
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
add_compile_definitions(SECUREC_ONLY_DECLARE_MEMSET)
|
||||
endif()
|
||||
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/securec ${CMAKE_BINARY_DIR}/securec)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
function(find_python_package out_inc out_lib)
|
||||
# Use PYTHON_EXECUTABLE if it is defined, otherwise default to python
|
||||
if("${PYTHON_EXECUTABLE}" STREQUAL "")
|
||||
if ("${PYTHON_EXECUTABLE}" STREQUAL "")
|
||||
set(PYTHON_EXECUTABLE "python3")
|
||||
else()
|
||||
set(PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
|
|
@ -15,10 +15,9 @@ function(find_python_package out_inc out_lib)
|
|||
OUTPUT_VARIABLE inc)
|
||||
string(STRIP "${inc}" inc)
|
||||
set(${out_inc} ${inc} PARENT_SCOPE)
|
||||
|
||||
|
||||
execute_process(
|
||||
COMMAND "${PYTHON_EXECUTABLE}" -c "import distutils.sysconfig as sysconfig; import os; \
|
||||
print(os.path.join(sysconfig.get_config_var('LIBDIR'), sysconfig.get_config_var('LDLIBRARY')))"
|
||||
COMMAND "${PYTHON_EXECUTABLE}" -c "import distutils.sysconfig as sysconfig; import os; print(os.path.join(sysconfig.get_config_var('LIBDIR'), sysconfig.get_config_var('LDLIBRARY')))"
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE lib)
|
||||
string(STRIP "${lib}" lib)
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/abseil-cpp/repository/archive/20200225.2.tar.gz")
|
||||
set(MD5 "7e84ac40ee4541f645f5b9c90c9c98e6")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/abseil/abseil-cpp/archive/20200225.2.tar.gz")
|
||||
set(MD5 "73f2b6e72f1599a9139170c29482ddc4")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(absl
|
||||
VER 20200225.2
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/c-ares/repository/archive/cares-1_15_0.tar.gz")
|
||||
set(MD5 "a1e06c7eb45b96b8bff2ee1b43a4c70b")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/c-ares/c-ares/releases/download/cares-1_15_0/c-ares-1.15.0.tar.gz")
|
||||
set(MD5 "d2391da274653f7643270623e822dff7")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(c-ares
|
||||
VER 1.15.0
|
||||
LIBS cares
|
||||
LIBS cares
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release
|
||||
|
|
|
|||
|
|
@ -1,37 +0,0 @@
|
|||
set(cmsis_pkg_name cmsis)
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/CMSIS_5/repository/archive/5.7.0")
|
||||
set(MD5 "f8b5c3f0711feb9ebac0fb05c15f0306")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/ARM-software/CMSIS_5/archive/5.7.0.tar.gz")
|
||||
set(MD5 "0eaa594b0c62dd72e41ec181c4689842")
|
||||
endif()
|
||||
|
||||
set(INCLUDE "./")
|
||||
|
||||
mindspore_add_pkg(${cmsis_pkg_name}
|
||||
VER 5.7.0
|
||||
HEAD_ONLY ${INCLUDE}
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5})
|
||||
|
||||
message("micro get ${cmsis_pkg_name} config hash: ${${cmsis_pkg_name}_CONFIG_HASH}")
|
||||
|
||||
file(GLOB cmsic_children RELATIVE ${_MS_LIB_CACHE} ${_MS_LIB_CACHE}/*)
|
||||
|
||||
foreach(child ${cmsic_children})
|
||||
string(FIND "${child}" "${cmsis_pkg_name}" position)
|
||||
if(NOT "${position}" EQUAL "-1")
|
||||
file(STRINGS ${_MS_LIB_CACHE}/${child}/options.txt cmsis_configs)
|
||||
foreach(cmsis_config ${cmsis_configs})
|
||||
string(FIND "${cmsis_config}" "${MD5}" position_md5)
|
||||
if(NOT "${position_md5}" EQUAL "-1")
|
||||
if(NOT IS_DIRECTORY ${CMAKE_BINARY_DIR}/${cmsis_pkg_name})
|
||||
MESSAGE("copy cmsis libaray: ${child} to ${CMAKE_BINARY_DIR}")
|
||||
file(COPY ${_MS_LIB_CACHE}/${child}/CMSIS DESTINATION ${CMAKE_BINARY_DIR}/${cmsis_pkg_name})
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endforeach()
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
set(cppjieba_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
set(cppjieba_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/cppjieba/repository/archive/v5.0.3.tar.gz")
|
||||
set(MD5 "ea0bdd5a654a376e2c2077daae23b376")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/yanyiwu/cppjieba/archive/v5.0.3.tar.gz")
|
||||
set(MD5 "b8b3f7a73032c9ce9daafa4f67196c8c")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(cppjieba
|
||||
VER 5.0.3
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
set(Eigen3_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
set(Eigen3_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/eigen-git-mirrorsource/repository/archive/3.3.7.tar.gz")
|
||||
set(MD5 "cf6552a5d90c1aca4b5e0b011f65ea93")
|
||||
else()
|
||||
set(REQ_URL "https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz")
|
||||
set(MD5 "9e30f67e8531477de4117506fe44669b")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(Eigen3
|
||||
VER 3.3.7
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
set(flatbuffers_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
set(flatbuffers_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
if(WIN32)
|
||||
set(flatbuffers_USE_STATIC_LIBS ON)
|
||||
if (WIN32)
|
||||
set(flatbuffers_USE_STATIC_LIBS ON)
|
||||
endif()
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/flatbuffers/repository/archive/v1.11.0.tar.gz")
|
||||
set(MD5 "4051dc865063ffa724c4264dea8dbbe9")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/google/flatbuffers/archive/v1.11.0.tar.gz")
|
||||
set(MD5 "02c64880acb89dbd57eebacfd67200d8")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(flatbuffers
|
||||
VER 1.11.0
|
||||
|
|
@ -18,7 +18,7 @@ mindspore_add_pkg(flatbuffers
|
|||
EXE flatc
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib)
|
||||
CMAKE_OPTION -DFLATBUFFERS_BUILD_TESTS=OFF )
|
||||
|
||||
include_directories(${flatbuffers_INC})
|
||||
add_library(mindspore::flatbuffers ALIAS flatbuffers::flatbuffers)
|
||||
|
|
@ -31,13 +31,13 @@ function(ms_build_flatbuffers source_schema_files
|
|||
set(total_schema_dirs "")
|
||||
set(total_generated_files "")
|
||||
set(FLATC mindspore::flatc)
|
||||
foreach(schema_dir ${source_schema_dirs})
|
||||
foreach (schema_dir ${source_schema_dirs})
|
||||
set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs})
|
||||
endforeach()
|
||||
|
||||
foreach(schema ${source_schema_files})
|
||||
get_filename_component(filename ${schema} NAME_WE)
|
||||
if(NOT ${generated_output_dir} STREQUAL "")
|
||||
if (NOT ${generated_output_dir} STREQUAL "")
|
||||
set(generated_file ${generated_output_dir}/${filename}_generated.h)
|
||||
add_custom_command(
|
||||
OUTPUT ${generated_file}
|
||||
|
|
@ -55,7 +55,7 @@ function(ms_build_flatbuffers source_schema_files
|
|||
add_custom_target(${custom_target_name} ALL
|
||||
DEPENDS ${total_generated_files})
|
||||
|
||||
if(NOT ${generated_output_dir} STREQUAL "")
|
||||
if (NOT ${generated_output_dir} STREQUAL "")
|
||||
include_directories(${generated_output_dir})
|
||||
set_property(TARGET ${custom_target_name}
|
||||
PROPERTY GENERATED_OUTPUT_DIR
|
||||
|
|
@ -63,21 +63,24 @@ function(ms_build_flatbuffers source_schema_files
|
|||
endif()
|
||||
endfunction()
|
||||
|
||||
function(ms_build_flatbuffers_lite
|
||||
source_schema_files source_schema_dirs custom_target_name generated_output_dir if_inner)
|
||||
function(ms_build_flatbuffers_lite source_schema_files
|
||||
source_schema_dirs
|
||||
custom_target_name
|
||||
generated_output_dir
|
||||
if_inner)
|
||||
|
||||
set(total_schema_dirs "")
|
||||
set(total_generated_files "")
|
||||
set(FLATC mindspore::flatc)
|
||||
foreach(schema_dir ${source_schema_dirs})
|
||||
foreach (schema_dir ${source_schema_dirs})
|
||||
set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs})
|
||||
endforeach()
|
||||
|
||||
foreach(schema IN LISTS ${source_schema_files})
|
||||
get_filename_component(filename ${schema} NAME_WE)
|
||||
if(NOT ${generated_output_dir} STREQUAL "")
|
||||
if (NOT ${generated_output_dir} STREQUAL "")
|
||||
set(generated_file ${generated_output_dir}/${filename}_generated.h)
|
||||
if(if_inner MATCHES "inner")
|
||||
if (if_inner MATCHES "inner")
|
||||
add_custom_command(
|
||||
OUTPUT ${generated_file}
|
||||
COMMAND ${FLATC} --gen-mutable
|
||||
|
|
@ -104,7 +107,7 @@ function(ms_build_flatbuffers_lite
|
|||
add_custom_target(${custom_target_name} ALL
|
||||
DEPENDS ${total_generated_files})
|
||||
|
||||
if(NOT ${generated_output_dir} STREQUAL "")
|
||||
if (NOT ${generated_output_dir} STREQUAL "")
|
||||
include_directories(${generated_output_dir})
|
||||
set_property(TARGET ${custom_target_name}
|
||||
PROPERTY GENERATED_OUTPUT_DIR
|
||||
|
|
|
|||
|
|
@ -1,29 +1,17 @@
|
|||
set(glog_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 ${SECURE_CXX_FLAGS} -Dgoogle=mindspore_private")
|
||||
set(glog_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 ${SECURE_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
|
||||
set(glog_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
if(NOT ENABLE_GLIBCXX)
|
||||
set(glog_CXXFLAGS "${glog_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
|
||||
endif()
|
||||
if(BUILD_LITE)
|
||||
set(glog_patch "")
|
||||
set(glog_lib glog)
|
||||
else()
|
||||
set(glog_patch ${CMAKE_SOURCE_DIR}/third_party/patch/glog/glog.patch001)
|
||||
set(glog_lib mindspore_glog)
|
||||
endif()
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/glog/repository/archive/v0.4.0.tar.gz")
|
||||
set(MD5 "22fe340ddc231e6c8e46bc295320f8ee")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/google/glog/archive/v0.4.0.tar.gz")
|
||||
set(MD5 "0daea8785e6df922d7887755c3d100d0")
|
||||
endif()
|
||||
|
||||
endif ()
|
||||
mindspore_add_pkg(glog
|
||||
VER 0.4.0
|
||||
LIBS ${glog_lib}
|
||||
LIBS glog
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
PATCHES ${glog_patch}
|
||||
CMAKE_OPTION -DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -DWITH_GFLAGS=OFF)
|
||||
include_directories(${glog_INC})
|
||||
add_library(mindspore::glog ALIAS glog::${glog_lib})
|
||||
add_library(mindspore::glog ALIAS glog::glog)
|
||||
|
|
|
|||
|
|
@ -1,46 +1,41 @@
|
|||
set(grpc_USE_STATIC_LIBS ON)
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(grpc_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC \
|
||||
-fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
set(grpc_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \
|
||||
-fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(grpc_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
set(grpc_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
else()
|
||||
set(grpc_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \
|
||||
-fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
if(NOT ENABLE_GLIBCXX)
|
||||
set(grpc_CXXFLAGS "${grpc_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
|
||||
endif()
|
||||
set(grpc_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -D_GLIBCXX_USE_CXX11_ABI=0 -O2")
|
||||
endif()
|
||||
|
||||
set(grpc_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
|
||||
|
||||
if(EXISTS ${protobuf_ROOT}/lib64)
|
||||
if (EXISTS ${protobuf_ROOT}/lib64)
|
||||
set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${protobuf_ROOT}/lib64/cmake/protobuf")
|
||||
else()
|
||||
set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${protobuf_ROOT}/lib/cmake/protobuf")
|
||||
endif()
|
||||
message("grpc using Protobuf_DIR : " ${_FINDPACKAGE_PROTOBUF_CONFIG_DIR})
|
||||
|
||||
if(EXISTS ${absl_ROOT}/lib64)
|
||||
if (EXISTS ${absl_ROOT}/lib64)
|
||||
set(_FINDPACKAGE_ABSL_CONFIG_DIR "${absl_ROOT}/lib64/cmake/absl")
|
||||
else()
|
||||
set(_FINDPACKAGE_ABSL_CONFIG_DIR "${absl_ROOT}/lib/cmake/absl")
|
||||
endif()
|
||||
message("grpc using absl_DIR : " ${_FINDPACKAGE_ABSL_CONFIG_DIR})
|
||||
|
||||
if(EXISTS ${openssl_ROOT})
|
||||
set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "-DOPENSSL_ROOT_DIR:PATH=${openssl_ROOT}")
|
||||
set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "")
|
||||
if (OPENSSL_ROOT_DIR)
|
||||
set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "-DOPENSSL_ROOT_DIR:PATH=${OPENSSL_ROOT_DIR}")
|
||||
endif()
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/grpc/repository/archive/v1.27.3.tar.gz")
|
||||
set(MD5 "b8b6d8defeda0355105e3b64b4201786")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/grpc/grpc/archive/v1.27.3.tar.gz")
|
||||
set(MD5 "0c6c3fc8682d4262dd0e5e6fabe1a7e2")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(grpc
|
||||
VER 1.27.3
|
||||
|
|
@ -76,7 +71,10 @@ target_link_libraries(grpc::grpc++ INTERFACE mindspore::z)
|
|||
target_link_libraries(grpc::grpc++ INTERFACE mindspore::cares)
|
||||
target_link_libraries(grpc::grpc++ INTERFACE mindspore::absl_strings mindspore::absl_throw_delegate
|
||||
mindspore::absl_raw_logging_internal mindspore::absl_int128 mindspore::absl_bad_optional_access)
|
||||
target_link_libraries(grpc::grpc++ INTERFACE mindspore::ssl mindspore::crypto)
|
||||
|
||||
# link system openssl
|
||||
find_package(OpenSSL REQUIRED)
|
||||
target_link_libraries(grpc::grpc++ INTERFACE OpenSSL::SSL OpenSSL::Crypto)
|
||||
|
||||
|
||||
function(ms_grpc_generate c_var h_var)
|
||||
|
|
@ -108,8 +106,7 @@ function(ms_grpc_generate c_var h_var)
|
|||
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/proto"
|
||||
COMMAND protobuf::protoc --version
|
||||
COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/proto
|
||||
--grpc_out=${CMAKE_BINARY_DIR}/proto
|
||||
--plugin=protoc-gen-grpc=$<TARGET_FILE:grpc::grpc_cpp_plugin> ${abs_file}
|
||||
--grpc_out=${CMAKE_BINARY_DIR}/proto --plugin=protoc-gen-grpc=$<TARGET_FILE:grpc::grpc_cpp_plugin> ${abs_file}
|
||||
DEPENDS protobuf::protoc grpc::grpc_cpp_plugin ${abs_file}
|
||||
COMMENT "Running C++ gRPC compiler on ${file}" VERBATIM)
|
||||
endforeach()
|
||||
|
|
@ -117,4 +114,5 @@ function(ms_grpc_generate c_var h_var)
|
|||
set_source_files_properties(${${c_var}} ${${h_var}} PROPERTIES GENERATED TRUE)
|
||||
set(${c_var} ${${c_var}} PARENT_SCOPE)
|
||||
set(${h_var} ${${h_var}} PARENT_SCOPE)
|
||||
|
||||
endfunction()
|
||||
|
|
|
|||
|
|
@ -1,58 +1,22 @@
|
|||
set(gtest_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
set(gtest_CXXFLAGS "-D_FORTIFY_SOURCE=2 -D_GLIBCXX_USE_CXX11_ABI=0 -O2")
|
||||
set(gtest_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
|
||||
set(CMAKE_OPTION
|
||||
-DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON
|
||||
-DCMAKE_MACOSX_RPATH=TRUE -Dgtest_disable_pthreads=ON)
|
||||
if(BUILD_LITE)
|
||||
if(PLATFORM_ARM64)
|
||||
set(CMAKE_OPTION -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake
|
||||
-DANDROID_NATIVE_API_LEVEL=19
|
||||
-DANDROID_NDK=$ENV{ANDROID_NDK}
|
||||
-DANDROID_ABI=arm64-v8a
|
||||
-DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang
|
||||
-DANDROID_STL=${ANDROID_STL}
|
||||
${CMAKE_OPTION})
|
||||
endif()
|
||||
if(PLATFORM_ARM32)
|
||||
set(CMAKE_OPTION -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake
|
||||
-DANDROID_NATIVE_API_LEVEL=19
|
||||
-DANDROID_NDK=$ENV{ANDROID_NDK}
|
||||
-DANDROID_ABI=armeabi-v7a
|
||||
-DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang
|
||||
-DANDROID_STL=${ANDROID_STL}
|
||||
${CMAKE_OPTION})
|
||||
endif()
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/googletest/repository/archive/release-1.8.0.tar.gz")
|
||||
set(MD5 "89e13ca1aa48d370719d58010b83f62c")
|
||||
else()
|
||||
if(NOT ENABLE_GLIBCXX)
|
||||
set(gtest_CXXFLAGS "${gtest_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/googletest/repository/archive/release-1.8.1.tar.gz")
|
||||
set(MD5 "0ec077324f27c2685635ad4cc9bdc263")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/google/googletest/archive/release-1.8.1.tar.gz")
|
||||
set(MD5 "2e6fbeb6a91310a16efe181886c59596")
|
||||
endif()
|
||||
set(REQ_URL "https://github.com/google/googletest/archive/release-1.8.0.tar.gz")
|
||||
set(MD5 "16877098823401d1bf2ed7891d7dce36")
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(gtest
|
||||
VER 1.8.1
|
||||
VER 1.8.0
|
||||
LIBS gtest
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION ${CMAKE_OPTION})
|
||||
CMAKE_OPTION -DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON
|
||||
-DCMAKE_MACOSX_RPATH=TRUE -Dgtest_disable_pthreads=ON)
|
||||
include_directories(${gtest_INC})
|
||||
add_library(mindspore::gtest ALIAS gtest::gtest)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
file(COPY ${gtest_DIRPATH}/bin/libgtest${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION
|
||||
${CMAKE_BINARY_DIR}/googletest/googlemock/gtest)
|
||||
file(COPY ${gtest_DIRPATH}/bin/libgtest_main${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION
|
||||
${CMAKE_BINARY_DIR}/googletest/googlemock/gtest)
|
||||
else()
|
||||
file(COPY ${gtest_LIBPATH}/libgtest${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION
|
||||
${CMAKE_BINARY_DIR}/googletest/googlemock/gtest)
|
||||
file(COPY ${gtest_LIBPATH}/libgtest_main${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION
|
||||
${CMAKE_BINARY_DIR}/googletest/googlemock/gtest)
|
||||
endif()
|
||||
file(COPY ${gtest_LIBPATH}/libgtest${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest)
|
||||
file(COPY ${gtest_LIBPATH}/libgtest_main${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest)
|
||||
|
|
|
|||
|
|
@ -2,15 +2,15 @@ set(LIB_ICU_COMMON icuuc)
|
|||
set(LIB_ICU_DATA icudata)
|
||||
set(LIB_ICU_I18N icui18n)
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/icu/repository/archive/release-67-1.tar.gz")
|
||||
set(MD5 "72415ffd1af3acf19f9aa3fa82c7b5bc")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/unicode-org/icu/archive/release-67-1.tar.gz")
|
||||
set(MD5 "fd525fb47d8827b0b7da78b51dd2d93f")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
message("icu4c thirdparty do not support windows currently.")
|
||||
else()
|
||||
set(JSON_FILE "{ \n\
|
||||
|
|
@ -21,29 +21,14 @@ else()
|
|||
}\
|
||||
")
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/icu4c_filter.json ${JSON_FILE})
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
mindspore_add_pkg(icu4c
|
||||
VER 67.1
|
||||
LIBS ${LIB_ICU_COMMON} ${LIB_ICU_DATA} ${LIB_ICU_I18N}
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/icu4c/icu4c.patch01
|
||||
CONFIGURE_COMMAND ./icu4c/source/runConfigureICU MacOSX --enable-rpath --disable-tests
|
||||
--disable-samples --disable-icuio --disable-extras
|
||||
ICU_DATA_FILTER_FILE=${CMAKE_BINARY_DIR}/icu4c_filter.json
|
||||
)
|
||||
else()
|
||||
mindspore_add_pkg(icu4c
|
||||
VER 67.1
|
||||
LIBS ${LIB_ICU_COMMON} ${LIB_ICU_DATA} ${LIB_ICU_I18N}
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/icu4c/icu4c.patch01
|
||||
CONFIGURE_COMMAND ./icu4c/source/runConfigureICU Linux --enable-rpath --disable-tests --disable-samples
|
||||
--disable-icuio --disable-extras
|
||||
ICU_DATA_FILTER_FILE=${CMAKE_BINARY_DIR}/icu4c_filter.json
|
||||
)
|
||||
endif()
|
||||
mindspore_add_pkg(icu4c
|
||||
VER 67.1
|
||||
LIBS ${LIB_ICU_COMMON} ${LIB_ICU_DATA} ${LIB_ICU_I18N}
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/icu4c/icu4c.patch01
|
||||
CONFIGURE_COMMAND ./icu4c/source/runConfigureICU Linux --enable-rpath --disable-tests --disable-samples --disable-icuio --disable-extras ICU_DATA_FILTER_FILE=${CMAKE_BINARY_DIR}/icu4c_filter.json
|
||||
)
|
||||
include_directories(${icu4c_INC})
|
||||
add_library(mindspore::icuuc ALIAS icu4c::${LIB_ICU_COMMON})
|
||||
add_library(mindspore::icudata ALIAS icu4c::${LIB_ICU_DATA})
|
||||
|
|
|
|||
|
|
@ -1,55 +1,27 @@
|
|||
set(jpeg_turbo_USE_STATIC_LIBS ON)
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/libjpeg-turbo/repository/archive/2.0.4.tar.gz")
|
||||
set(MD5 "51aac2382ad1a68b2e4beb391dc1cf60")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/libjpeg-turbo/libjpeg-turbo/archive/2.0.4.tar.gz")
|
||||
set(MD5 "44c43e4a9fb352f47090804529317c88")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(jpeg_turbo_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 \
|
||||
-O2")
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(jpeg_turbo_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 -O2")
|
||||
else()
|
||||
set(jpeg_turbo_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC \
|
||||
-D_FORTIFY_SOURCE=2 -O2")
|
||||
endif()
|
||||
|
||||
set(jpeg_turbo_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack,-s")
|
||||
|
||||
|
||||
set(jpeg_turbo_USE_STATIC_LIBS ON)
|
||||
set(JPEG_TURBO_PATCHE ${CMAKE_SOURCE_DIR}/third_party/patch/jpeg_turbo/jpeg_turbo.patch001)
|
||||
set(CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_RPATH=TRUE -DWITH_SIMD=ON)
|
||||
if(BUILD_LITE)
|
||||
set(jpeg_turbo_USE_STATIC_LIBS OFF)
|
||||
set(JPEG_TURBO_PATCHE ${TOP_DIR}/third_party/patch/jpeg_turbo/jpeg_turbo.patch001)
|
||||
if(PLATFORM_ARM64)
|
||||
set(CMAKE_OPTION -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake
|
||||
-DANDROID_NATIVE_API_LEVEL=19
|
||||
-DANDROID_NDK=$ENV{ANDROID_NDK}
|
||||
-DANDROID_ABI=arm64-v8a
|
||||
-DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang
|
||||
-DANDROID_STL=c++_shared -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
|
||||
endif()
|
||||
if(PLATFORM_ARM32)
|
||||
set(CMAKE_OPTION -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake
|
||||
-DANDROID_NATIVE_API_LEVEL=19
|
||||
-DANDROID_NDK=$ENV{ANDROID_NDK}
|
||||
-DANDROID_ABI=armeabi-v7a
|
||||
-DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang
|
||||
-DANDROID_STL=c++_shared -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
|
||||
endif()
|
||||
|
||||
set(jpeg_turbo_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 -O2")
|
||||
endif()
|
||||
|
||||
set(jpeg_turbo_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
mindspore_add_pkg(jpeg_turbo
|
||||
VER 2.0.4
|
||||
LIBS jpeg turbojpeg
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION ${CMAKE_OPTION}
|
||||
PATCHES ${JPEG_TURBO_PATCHE}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_RPATH=TRUE -DWITH_SIMD=ON
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/jpeg_turbo/jpeg_turbo.patch001
|
||||
)
|
||||
include_directories(${jpeg_turbo_INC})
|
||||
add_library(mindspore::jpeg_turbo ALIAS jpeg_turbo::jpeg)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
set(nlohmann_json_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
set(nlohmann_json_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/JSON-for-Modern-CPP/repository/archive/v3.6.1.zip")
|
||||
set(MD5 "5bda78ce308e6cfcf614dcf1d5ff27a7")
|
||||
set(INCLUDE "./include")
|
||||
|
|
@ -9,7 +9,7 @@ else()
|
|||
set(REQ_URL "https://github.com/nlohmann/json/releases/download/v3.6.1/include.zip")
|
||||
set(MD5 "0dc903888211db3a0f170304cd9f3a89")
|
||||
set(INCLUDE "./")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(nlohmann_json
|
||||
VER 3.6.1
|
||||
|
|
|
|||
|
|
@ -1,29 +1,22 @@
|
|||
set(libevent_CFLAGS "-fstack-protector-all -D_FORTIFY_SOURCE=2 -O2")
|
||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
set(libevent_LDFLAGS "-Wl,-z,now")
|
||||
endif()
|
||||
set(libevent_LDFLAGS "-Wl,-z,now")
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/libevent/repository/archive/release-2.1.12-stable.tar.gz")
|
||||
set(MD5 "c9036513dd9e5b4fa1c81ade23b7ead2")
|
||||
else()
|
||||
set(REQ_URL
|
||||
"https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz")
|
||||
set(REQ_URL "https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz")
|
||||
set(MD5 "b5333f021f880fe76490d8a799cd79f4")
|
||||
endif()
|
||||
|
||||
message("libevent using openssl stub dir: " ${openssl_ROOT})
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(libevent
|
||||
VER 2.1.12
|
||||
LIBS event event_pthreads event_core event_openssl
|
||||
LIBS event event_pthreads
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING=OFF -DOPENSSL_ROOT_DIR:PATH=${openssl_ROOT})
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING=OFF)
|
||||
|
||||
include_directories(${libevent_INC})
|
||||
|
||||
add_library(mindspore::event ALIAS libevent::event)
|
||||
add_library(mindspore::event_pthreads ALIAS libevent::event_pthreads)
|
||||
add_library(mindspore::event_core ALIAS libevent::event_core)
|
||||
add_library(mindspore::event_openssl ALIAS libevent::event_openssl)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(tiff_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -Wno-unused-result \
|
||||
-Wno-unused-but-set-variable -fPIC -D_FORTIFY_SOURCE=2 -O2")
|
||||
set(tiff_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -Wno-unused-result \
|
||||
|
|
@ -8,20 +8,20 @@ else()
|
|||
-Wno-unused-but-set-variable -fPIC -D_FORTIFY_SOURCE=2 -O2")
|
||||
set(tiff_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -Wno-unused-result \
|
||||
-Wno-unused-but-set-variable -fPIC -D_FORTIFY_SOURCE=2 -O2")
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
set(tiff_CFLAGS "${tiff_CFLAGS} -Wno-int-to-pointer-cast -Wno-implicit-fallthrough -Wno-pointer-to-int-cast")
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
set(tiff_CFLAGS "${tiff_CFLAGS} -Wno-int-to-pointer-cast -Wno-implicit-fallthrough -Wno-pointer-to-int-cast")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(tiff_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/libtiff/repository/archive/v4.2.0.tar.gz")
|
||||
set(MD5 "38b7bdd622c554b98967ccf2013b6478")
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/libtiff/repository/archive/v4.1.0.tar.gz")
|
||||
set(MD5 "76b951159c8bdf47dba4803659c232d1")
|
||||
else()
|
||||
set(REQ_URL "http://download.osgeo.org/libtiff/tiff-4.2.0.tar.gz")
|
||||
set(MD5 "2bbf6db1ddc4a59c89d6986b368fc063")
|
||||
endif()
|
||||
set(REQ_URL "https://gitlab.com/libtiff/libtiff/-/archive/v4.1.0/libtiff-v4.1.0.tar.gz")
|
||||
set(MD5 "21de8d35c1b21ac82663fa9f56d3350d")
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(tiff
|
||||
VER 4.1.0
|
||||
|
|
|
|||
|
|
@ -1,27 +1,27 @@
|
|||
set(onednn_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
set(onednn_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
mindspore_add_pkg(onednn
|
||||
VER 1.6
|
||||
VER 1.5
|
||||
LIBS dnnl mkldnn
|
||||
HEAD_ONLY ./include
|
||||
RELEASE on
|
||||
URL https://github.com/oneapi-src/oneDNN/releases/download/v1.6/dnnl_win_1.6.0_cpu_vcomp.zip
|
||||
MD5 fe660e34e9f73ab13a65987819a0712e)
|
||||
URL https://github.com/oneapi-src/oneDNN/releases/download/v1.5/dnnl_win_1.5.0_cpu_vcomp.zip
|
||||
MD5 17757c84f49edd42d34ae8c9288110a1)
|
||||
else()
|
||||
if(ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/MKL-DNN/repository/archive/v1.6.tar.gz")
|
||||
set(MD5 "44da423a3b6848990a907f99a65b26e7")
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/MKL-DNN/repository/archive/v1.5.tar.gz")
|
||||
set(MD5 "5e0f3800d484969d420188e9cff7348c")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/oneapi-src/oneDNN/archive/v1.6.tar.gz")
|
||||
set(MD5 "7cf251209f774ae6d61489ad7c2c3bea")
|
||||
endif()
|
||||
set(REQ_URL "https://github.com/oneapi-src/oneDNN/archive/v1.5.tar.gz")
|
||||
set(MD5 "5d97e0e8f4c0b37da5f524533b7a644b")
|
||||
endif ()
|
||||
mindspore_add_pkg(onednn
|
||||
VER 1.6
|
||||
VER 1.5
|
||||
LIBS dnnl mkldnn
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DDNNL_ARCH_OPT_FLAGS='' -DDNNL_BUILD_EXAMPLES=OFF -DDNNL_BUILD_TESTS=OFF)
|
||||
CMAKE_OPTION -DDNNL_ARCH_OPT_FLAGS='' -DDNNL_CPU_RUNTIME='SEQ' -DDNNL_BUILD_EXAMPLES=OFF -DDNNL_BUILD_TESTS=OFF)
|
||||
endif()
|
||||
|
||||
include_directories(${onednn_INC})
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/nccl/repository/archive/v2.7.6-1.tar.gz")
|
||||
set(MD5 "220d232b30cb9bff2e54219399b9f6fb")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/NVIDIA/nccl/archive/v2.7.6-1.tar.gz")
|
||||
set(MD5 "073b19899f374c5ba07d2db02dc38f9f")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
set(nccl_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
mindspore_add_pkg(nccl
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/ompi/repository/archive/v4.0.3.tar.gz")
|
||||
set(MD5 "f76abc92ae870feff186d790f40ae762")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/open-mpi/ompi/archive/v4.0.3.tar.gz")
|
||||
set(MD5 "86cb724e8fe71741ad3be4e7927928a2")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
set(ompi_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
mindspore_add_pkg(ompi
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/ONNX/repository/archive/v1.6.0.tar.gz")
|
||||
set(MD5 "1bdbcecdd68ea8392630467646776e02")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/onnx/onnx/releases/download/v1.6.0/onnx-1.6.0.tar.gz")
|
||||
set(MD5 "512f2779d6215d4a36f366b6b9acdf1e")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(ms_onnx
|
||||
VER 1.6.0
|
||||
|
|
|
|||
|
|
@ -1,46 +0,0 @@
|
|||
if(ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/OpenCL-Headers/repository/archive/v2020.06.16.tar.gz")
|
||||
set(MD5 "8797a525aff953ea536ebe338a9f5ef6")
|
||||
set(PKG_GIT_TAG "")
|
||||
__download_pkg_with_git(OpenCL-Headers ${REQ_URL} ${PKG_GIT_TAG} ${MD5})
|
||||
set(REQ_URL "https://gitee.com/mirrors/OpenCL-CLHPP/repository/archive/v2.0.12.tar.gz")
|
||||
set(MD5 "a07b45d676b02644482bc2c3bb90b891")
|
||||
set(PKG_GIT_TAG "")
|
||||
__download_pkg_with_git(OpenCL-CLHPP ${REQ_URL} ${PKG_GIT_TAG} ${MD5})
|
||||
else()
|
||||
set(REQ_URL "https://github.com/KhronosGroup/OpenCL-Headers/archive/v2020.06.16.tar.gz")
|
||||
set(MD5 "fc7627b5a8a95ecbe3d5df43bc88aa44")
|
||||
__download_pkg(OpenCL-Headers ${REQ_URL} ${MD5})
|
||||
set(REQ_URL "https://github.com/KhronosGroup/OpenCL-CLHPP/archive/v2.0.12.tar.gz")
|
||||
set(MD5 "bd00fca8f861b3b65660d719f00a58dd")
|
||||
__download_pkg(OpenCL-CLHPP ${REQ_URL} ${MD5})
|
||||
endif()
|
||||
|
||||
function(gene_opencl BASEPATH)
|
||||
string(CONCAT CL_SRC_DIR "${BASEPATH}" "/src/runtime/kernel/opencl/cl")
|
||||
message(STATUS "**********gene opencl*********base path: " "${BASEPATH}" ", cl path: " "${CL_SRC_DIR}")
|
||||
if(NOT EXISTS ${CL_SRC_DIR})
|
||||
return()
|
||||
endif()
|
||||
file(GLOB_RECURSE CL_LIST ${CL_SRC_DIR}/*.cl ${CL_SRC_DIR}/int8/*.cl)
|
||||
foreach(file_path ${CL_LIST})
|
||||
file(REMOVE ${file_path}.inc)
|
||||
string(REGEX REPLACE ".+/(.+)\\..*" "\\1" kernel_name "${file_path}")
|
||||
set(inc_file_ex "${file_path}.inc")
|
||||
execute_process(
|
||||
COMMAND bash -c "sed 's/\\\\/\\\\\\\\/g' "
|
||||
COMMAND bash -c "sed 's/\\\"/\\\\\\\"/g' "
|
||||
COMMAND bash -c "sed 's/$/\\\\n\\\" \\\\/' "
|
||||
COMMAND bash -c "sed 's/^/\\\"/' "
|
||||
WORKING_DIRECTORY ${CL_SRC_DIR}
|
||||
INPUT_FILE ${file_path}
|
||||
OUTPUT_FILE ${inc_file_ex}
|
||||
RESULT_VARIABLE RESULT)
|
||||
if(NOT RESULT EQUAL "0")
|
||||
message(FATAL_ERROR "error! when generate ${inc_file_ex}")
|
||||
endif()
|
||||
__exec_cmd(COMMAND sed -i "1i\\static const char *${kernel_name}_source =\\\"\\\\n\\\" \\\\"
|
||||
${inc_file_ex} WORKING_DIRECTORY ${CL_SRC_DIR})
|
||||
__exec_cmd(COMMAND sed -i "$a\\\\\;" ${inc_file_ex} WORKING_DIRECTORY ${CL_SRC_DIR})
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
|
@ -1,166 +1,81 @@
|
|||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(opencv_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2")
|
||||
set(opencv_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2")
|
||||
set(opencv_LDFLAGS "-Wl")
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
set(opencv_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2")
|
||||
set(opencv_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2")
|
||||
set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -Wno-attributes -Wno-unknown-pragmas")
|
||||
set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -Wno-unused-value -Wno-implicit-fallthrough")
|
||||
else()
|
||||
set(opencv_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2")
|
||||
set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -O2")
|
||||
if(NOT ENABLE_GLIBCXX)
|
||||
set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
|
||||
endif()
|
||||
set(opencv_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -D_GLIBCXX_USE_CXX11_ABI=0 -O2")
|
||||
set(opencv_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2")
|
||||
set(opencv_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
endif()
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
set(REQ_URL "https://gitee.com/mirrors/opencv/repository/archive/4.5.1.tar.gz")
|
||||
set(MD5 "e74309207f2fa88fb6cc417d8ea9ff09")
|
||||
elseif((PYTHON_VERSION MATCHES "3.7") OR (PYTHON_VERSION MATCHES "3.8"))
|
||||
set(REQ_URL "https://gitee.com/mirrors/opencv/repository/archive/4.2.0.tar.gz")
|
||||
set(MD5 "00424c7c4acde1e26ebf17aaa155bf23")
|
||||
else()
|
||||
message("Could not find 'Python 3.8' or 'Python 3.7' or 'Python 3.9'")
|
||||
return()
|
||||
endif()
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/opencv/repository/archive/4.2.0.tar.gz")
|
||||
set(MD5 "00424c7c4acde1e26ebf17aaa155bf23")
|
||||
else()
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
set(REQ_URL "https://github.com/opencv/opencv/archive/4.5.1.tar.gz")
|
||||
set(MD5 "2205d3169238ec1f184438a96de68513")
|
||||
elseif((PYTHON_VERSION MATCHES "3.7") OR (PYTHON_VERSION MATCHES "3.8"))
|
||||
set(REQ_URL "https://github.com/opencv/opencv/archive/4.2.0.tar.gz")
|
||||
set(MD5 "e8cb208ce2723481408b604b480183b6")
|
||||
else()
|
||||
message("Could not find 'Python 3.8' or 'Python 3.7' or 'Python 3.9'")
|
||||
return()
|
||||
endif()
|
||||
set(REQ_URL "https://github.com/opencv/opencv/archive/4.2.0.tar.gz")
|
||||
set(MD5 "e8cb208ce2723481408b604b480183b6")
|
||||
endif ()
|
||||
|
||||
if (WIN32)
|
||||
mindspore_add_pkg(opencv
|
||||
VER 4.2.0
|
||||
LIBS libopencv_core420.dll.a libopencv_imgcodecs420.dll.a libopencv_imgproc420.dll.a
|
||||
LIB_PATH x64/mingw/lib
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DWITH_PROTOBUF=OFF -DWITH_WEBP=OFF -DWITH_IPP=OFF -DWITH_ADE=OFF
|
||||
-DBUILD_ZLIB=ON
|
||||
-DBUILD_JPEG=ON
|
||||
-DBUILD_PNG=ON
|
||||
-DBUILD_OPENEXR=ON
|
||||
-DBUILD_TESTS=OFF
|
||||
-DBUILD_PERF_TESTS=OFF
|
||||
-DBUILD_opencv_apps=OFF
|
||||
-DCMAKE_SKIP_RPATH=TRUE
|
||||
-DBUILD_opencv_python3=OFF
|
||||
-DBUILD_opencv_videoio=OFF
|
||||
-DWITH_FFMPEG=OFF
|
||||
-DWITH_TIFF=ON
|
||||
-DBUILD_TIFF=OFF
|
||||
-DWITH_JASPER=OFF
|
||||
-DBUILD_JASPER=OFF
|
||||
-DTIFF_INCLUDE_DIR=${tiff_INC}
|
||||
-DTIFF_LIBRARY=${tiff_LIB})
|
||||
else()
|
||||
mindspore_add_pkg(opencv
|
||||
VER 4.2.0
|
||||
LIBS opencv_core opencv_imgcodecs opencv_imgproc
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DWITH_PROTOBUF=OFF -DWITH_WEBP=OFF -DWITH_IPP=OFF -DWITH_ADE=OFF
|
||||
-DBUILD_ZLIB=ON
|
||||
-DBUILD_JPEG=ON
|
||||
-DBUILD_PNG=ON
|
||||
-DBUILD_OPENEXR=ON
|
||||
-DBUILD_TESTS=OFF
|
||||
-DBUILD_PERF_TESTS=OFF
|
||||
-DBUILD_opencv_apps=OFF
|
||||
-DCMAKE_SKIP_RPATH=TRUE
|
||||
-DBUILD_opencv_python3=OFF
|
||||
-DWITH_FFMPEG=OFF
|
||||
-DWITH_TIFF=ON
|
||||
-DBUILD_TIFF=OFF
|
||||
-DWITH_JASPER=OFF
|
||||
-DBUILD_JASPER=OFF
|
||||
-DTIFF_INCLUDE_DIR=${tiff_INC}
|
||||
-DTIFF_LIBRARY=${tiff_LIB})
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
mindspore_add_pkg(opencv
|
||||
VER 4.5.1
|
||||
LIBS libopencv_core451.dll.a libopencv_imgcodecs451.dll.a libopencv_imgproc451.dll.a
|
||||
LIB_PATH x64/mingw/lib
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DWITH_PROTOBUF=OFF -DWITH_WEBP=OFF -DWITH_IPP=OFF
|
||||
-DWITH_ADE=OFF
|
||||
-DBUILD_ZLIB=ON
|
||||
-DBUILD_JPEG=ON
|
||||
-DBUILD_PNG=ON
|
||||
-DBUILD_OPENEXR=ON
|
||||
-DBUILD_TESTS=OFF
|
||||
-DBUILD_PERF_TESTS=OFF
|
||||
-DBUILD_opencv_apps=OFF
|
||||
-DCMAKE_SKIP_RPATH=TRUE
|
||||
-DBUILD_opencv_python3=OFF
|
||||
-DBUILD_opencv_videoio=OFF
|
||||
-DWITH_FFMPEG=OFF
|
||||
-DWITH_TIFF=ON
|
||||
-DBUILD_TIFF=OFF
|
||||
-DWITH_JASPER=OFF
|
||||
-DBUILD_JASPER=OFF
|
||||
-DTIFF_INCLUDE_DIR=${tiff_INC}
|
||||
-DTIFF_LIBRARY=${tiff_LIB})
|
||||
elseif(PYTHON_VERSION MATCHES "3.8" OR PYTHON_VERSION MATCHES "3.7")
|
||||
mindspore_add_pkg(opencv
|
||||
VER 4.2.0
|
||||
LIBS libopencv_core420.dll.a libopencv_imgcodecs420.dll.a libopencv_imgproc420.dll.a
|
||||
LIB_PATH x64/mingw/lib
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DWITH_PROTOBUF=OFF -DWITH_WEBP=OFF -DWITH_IPP=OFF
|
||||
-DWITH_ADE=OFF
|
||||
-DBUILD_ZLIB=ON
|
||||
-DBUILD_JPEG=ON
|
||||
-DBUILD_PNG=ON
|
||||
-DBUILD_OPENEXR=ON
|
||||
-DBUILD_TESTS=OFF
|
||||
-DBUILD_PERF_TESTS=OFF
|
||||
-DBUILD_opencv_apps=OFF
|
||||
-DCMAKE_SKIP_RPATH=TRUE
|
||||
-DBUILD_opencv_python3=OFF
|
||||
-DBUILD_opencv_videoio=OFF
|
||||
-DWITH_FFMPEG=OFF
|
||||
-DWITH_TIFF=ON
|
||||
-DBUILD_TIFF=OFF
|
||||
-DWITH_JASPER=OFF
|
||||
-DBUILD_JASPER=OFF
|
||||
-DWITH_LAPACK=OFF
|
||||
-DTIFF_INCLUDE_DIR=${tiff_INC}
|
||||
-DTIFF_LIBRARY=${tiff_LIB})
|
||||
endif()
|
||||
else()
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
mindspore_add_pkg(opencv
|
||||
VER 4.5.1
|
||||
LIBS opencv_core opencv_imgcodecs opencv_imgproc
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DWITH_PROTOBUF=OFF -DWITH_WEBP=OFF -DWITH_IPP=OFF
|
||||
-DWITH_ADE=OFF
|
||||
-DBUILD_ZLIB=ON
|
||||
-DBUILD_JPEG=ON
|
||||
-DBUILD_PNG=ON
|
||||
-DBUILD_OPENEXR=ON
|
||||
-DBUILD_TESTS=OFF
|
||||
-DBUILD_PERF_TESTS=OFF
|
||||
-DBUILD_opencv_apps=OFF
|
||||
-DCMAKE_SKIP_RPATH=TRUE
|
||||
-DBUILD_opencv_python3=OFF
|
||||
-DWITH_FFMPEG=OFF
|
||||
-DWITH_TIFF=ON
|
||||
-DBUILD_TIFF=OFF
|
||||
-DWITH_JASPER=OFF
|
||||
-DBUILD_JASPER=OFF
|
||||
-DTIFF_INCLUDE_DIR=${tiff_INC}
|
||||
-DTIFF_LIBRARY=${tiff_LIB})
|
||||
elseif(PYTHON_VERSION MATCHES "3.8" OR PYTHON_VERSION MATCHES "3.7")
|
||||
mindspore_add_pkg(opencv
|
||||
VER 4.2.0
|
||||
LIBS opencv_core opencv_imgcodecs opencv_imgproc
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DWITH_PROTOBUF=OFF -DWITH_WEBP=OFF -DWITH_IPP=OFF
|
||||
-DWITH_ADE=OFF
|
||||
-DBUILD_ZLIB=ON
|
||||
-DBUILD_JPEG=ON
|
||||
-DBUILD_PNG=ON
|
||||
-DBUILD_OPENEXR=ON
|
||||
-DBUILD_TESTS=OFF
|
||||
-DBUILD_PERF_TESTS=OFF
|
||||
-DBUILD_opencv_apps=OFF
|
||||
-DCMAKE_SKIP_RPATH=TRUE
|
||||
-DBUILD_opencv_python3=OFF
|
||||
-DWITH_FFMPEG=OFF
|
||||
-DWITH_TIFF=ON
|
||||
-DBUILD_TIFF=OFF
|
||||
-DWITH_JASPER=OFF
|
||||
-DBUILD_JASPER=OFF
|
||||
-DWITH_LAPACK=OFF
|
||||
-DTIFF_INCLUDE_DIR=${tiff_INC}
|
||||
-DTIFF_LIBRARY=${tiff_LIB})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
include_directories(${opencv_INC})
|
||||
add_library(mindspore::opencv_core ALIAS opencv::libopencv_core451.dll.a)
|
||||
add_library(mindspore::opencv_imgcodecs ALIAS opencv::libopencv_imgcodecs451.dll.a)
|
||||
add_library(mindspore::opencv_imgproc ALIAS opencv::libopencv_imgproc451.dll.a)
|
||||
elseif(PYTHON_VERSION MATCHES "3.8" OR PYTHON_VERSION MATCHES "3.7")
|
||||
include_directories(${opencv_INC})
|
||||
add_library(mindspore::opencv_core ALIAS opencv::libopencv_core420.dll.a)
|
||||
add_library(mindspore::opencv_imgcodecs ALIAS opencv::libopencv_imgcodecs420.dll.a)
|
||||
add_library(mindspore::opencv_imgproc ALIAS opencv::libopencv_imgproc420.dll.a)
|
||||
endif()
|
||||
if (WIN32)
|
||||
include_directories(${opencv_INC})
|
||||
add_library(mindspore::opencv_core ALIAS opencv::libopencv_core420.dll.a)
|
||||
add_library(mindspore::opencv_imgcodecs ALIAS opencv::libopencv_imgcodecs420.dll.a)
|
||||
add_library(mindspore::opencv_imgproc ALIAS opencv::libopencv_imgproc420.dll.a)
|
||||
else()
|
||||
include_directories(${opencv_INC}/opencv4)
|
||||
add_library(mindspore::opencv_core ALIAS opencv::opencv_core)
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
if(ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/openssl/repository/archive/OpenSSL_1_1_0l.tar.gz")
|
||||
set(MD5 "9d18479e0cac8ff62f7e3df3cceb69dc")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_1_1_0l.tar.gz")
|
||||
set(MD5 "46d9a2a92fd39198501503b40954e6f0")
|
||||
endif()
|
||||
mindspore_add_pkg(openssl
|
||||
VER 1.1.0
|
||||
LIBS ssl crypto
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/openssl-stub/openssl-stub.patch001
|
||||
CONFIGURE_COMMAND ./config no-zlib)
|
||||
|
||||
include_directories(${openssl_INC})
|
||||
add_library(mindspore::ssl ALIAS openssl::ssl)
|
||||
add_library(mindspore::crypto ALIAS openssl::crypto)
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
set(projectq_CXXFLAGS "-fopenmp -O2 -ffast-mast -mavx -DINTRIN")
|
||||
set(projectq_CFLAGS "-fopenmp -O2 -ffast-mast -mavx -DINTRIN")
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/ProjectQ/repository/archive/v0.5.1.tar.gz")
|
||||
set(MD5 "d874e93e56d3375f1c54c7dd1b731054")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/ProjectQ-Framework/ProjectQ/archive/v0.5.1.tar.gz ")
|
||||
set(MD5 "13430199c253284df8b3d840f11d3560")
|
||||
endif()
|
||||
|
||||
if(ENABLE_CPU AND ${CMAKE_SYSTEM_NAME} MATCHES "Linux"
|
||||
AND ${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "x86_64")
|
||||
message("Include projectq simulator")
|
||||
mindspore_add_pkg(projectq
|
||||
VER 0.5.1
|
||||
HEAD_ONLY ./
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/projectq/projectq.patch001
|
||||
)
|
||||
include_directories(${projectq_INC})
|
||||
else()
|
||||
message("Quantum simulation only support x86_64 linux platform.")
|
||||
endif()
|
||||
|
|
@ -1,22 +1,15 @@
|
|||
set(protobuf_USE_STATIC_LIBS ON)
|
||||
if(BUILD_LITE)
|
||||
set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \
|
||||
-fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
else()
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC \
|
||||
-fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \
|
||||
-fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
if (BUILD_LITE)
|
||||
set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
else(BUILD_LITE)
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
else()
|
||||
set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \
|
||||
-fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2")
|
||||
if(NOT ENABLE_GLIBCXX)
|
||||
set(protobuf_CXXFLAGS "${protobuf_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
|
||||
endif()
|
||||
set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -D_GLIBCXX_USE_CXX11_ABI=0 -O2")
|
||||
endif()
|
||||
endif()
|
||||
endif(BUILD_LITE)
|
||||
|
||||
set(protobuf_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
set(_ms_tmp_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
|
|
@ -24,13 +17,13 @@ set(CMAKE_CXX_FLAGS ${_ms_tmp_CMAKE_CXX_FLAGS})
|
|||
string(REPLACE " -Wall" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
string(REPLACE " -Werror" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/protobuf_source/repository/archive/v3.8.0.tar.gz")
|
||||
set(MD5 "eba86ae9f07ba5cfbaf8af3bc4e84236")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/protocolbuffers/protobuf/archive/v3.8.0.tar.gz")
|
||||
set(MD5 "3d9e32700639618a4d2d342c99d4507a")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(protobuf
|
||||
VER 3.8.0
|
||||
|
|
@ -76,6 +69,7 @@ function(ms_protobuf_generate c_var h_var)
|
|||
set_source_files_properties(${${c_var}} ${${h_var}} PROPERTIES GENERATED TRUE)
|
||||
set(${c_var} ${${c_var}} PARENT_SCOPE)
|
||||
set(${h_var} ${${h_var}} PARENT_SCOPE)
|
||||
|
||||
endfunction()
|
||||
|
||||
function(ms_protobuf_generate_py c_var h_var py_var)
|
||||
|
|
@ -96,7 +90,7 @@ function(ms_protobuf_generate_py c_var h_var py_var)
|
|||
list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc")
|
||||
list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h")
|
||||
list(APPEND ${py_var} "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py")
|
||||
if(WIN32)
|
||||
if (WIN32)
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc"
|
||||
"${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h"
|
||||
|
|
@ -106,12 +100,10 @@ function(ms_protobuf_generate_py c_var h_var py_var)
|
|||
COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/proto ${abs_file}
|
||||
COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file}
|
||||
COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file}
|
||||
COMMAND perl -pi.bak -e "s/import (.+_pb2.*)/from . import \\1/"
|
||||
"${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py"
|
||||
"${PROJECT_SOURCE_DIR}/mindspore/train/"
|
||||
COMMAND perl -pi.bak -e "s/import (.+_pb2.*)/from . import \\1/" "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" "${PROJECT_SOURCE_DIR}/mindspore/train/"
|
||||
DEPENDS protobuf::protoc ${abs_file}
|
||||
COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM)
|
||||
COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM )
|
||||
else()
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc"
|
||||
|
|
@ -122,8 +114,7 @@ function(ms_protobuf_generate_py c_var h_var py_var)
|
|||
COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/proto ${abs_file}
|
||||
COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file}
|
||||
COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file}
|
||||
COMMAND perl -pi -e "s/import (.+_pb2.*)/from . import \\1/"
|
||||
"${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py"
|
||||
COMMAND perl -pi -e "s/import (.+_pb2.*)/from . import \\1/" "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py"
|
||||
COMMAND cp "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" "${PROJECT_SOURCE_DIR}/mindspore/train/"
|
||||
DEPENDS protobuf::protoc ${abs_file}
|
||||
COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM)
|
||||
|
|
@ -133,4 +124,5 @@ function(ms_protobuf_generate_py c_var h_var py_var)
|
|||
set(${c_var} ${${c_var}} PARENT_SCOPE)
|
||||
set(${h_var} ${${h_var}} PARENT_SCOPE)
|
||||
set(${py_var} ${${py_var}} PARENT_SCOPE)
|
||||
|
||||
endfunction()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/ps-lite/repository/archive/34fd45cae457d59850fdcb2066467778d0673f21.zip")
|
||||
set(MD5 "0d1543b8dcb0bc3610637e1643c94eb4")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/dmlc/ps-lite/archive/34fd45cae457d59850fdcb2066467778d0673f21.zip")
|
||||
set(MD5 "393c0e27b68bfaf96718caa3aa96f5a3")
|
||||
endif ()
|
||||
|
||||
set(pslite_USE_STATIC_LIBS ON)
|
||||
if (${ENABLE_IBVERBS} STREQUAL "ON")
|
||||
set(pslite_CXXFLAGS "USE_IBVERBS=1")
|
||||
endif()
|
||||
mindspore_add_pkg(pslite
|
||||
LIBS ps
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/pslite/ps_lite.patch001
|
||||
ONLY_MAKE True
|
||||
ONLY_MAKE_INCS include/*
|
||||
ONLY_MAKE_LIBS build/*)
|
||||
include_directories(${pslite_INC})
|
||||
add_library(mindspore::pslite ALIAS pslite::ps)
|
||||
|
|
@ -1,60 +1,18 @@
|
|||
set(PYTHON_VERSION ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR})
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
set(REQ_URL "https://gitee.com/mirrors/pybind11/repository/archive/v2.6.1.tar.gz")
|
||||
set(MD5 "a9b7642031f35daf33a75fe837b3dd31")
|
||||
elseif(PYTHON_VERSION MATCHES "3.8")
|
||||
set(REQ_URL "https://gitee.com/mirrors/pybind11/repository/archive/v2.6.1.tar.gz")
|
||||
set(MD5 "a9b7642031f35daf33a75fe837b3dd31")
|
||||
elseif(PYTHON_VERSION MATCHES "3.7")
|
||||
set(REQ_URL "https://gitee.com/mirrors/pybind11/repository/archive/v2.4.3.tar.gz")
|
||||
set(MD5 "b473a37987ce456ea8cc7aab3f9486f9")
|
||||
else()
|
||||
message("Could not find 'Python 3.8' or 'Python 3.7' or 'Python 3.9'")
|
||||
return()
|
||||
endif()
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/pybind11/repository/archive/v2.4.3.tar.gz")
|
||||
set(MD5 "b473a37987ce456ea8cc7aab3f9486f9")
|
||||
else()
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.6.1.tar.gz")
|
||||
set(MD5 "32a7811f3db423df4ebfc731a28e5901")
|
||||
elseif(PYTHON_VERSION MATCHES "3.8")
|
||||
set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.6.1.tar.gz")
|
||||
set(MD5 "32a7811f3db423df4ebfc731a28e5901")
|
||||
elseif(PYTHON_VERSION MATCHES "3.7")
|
||||
set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.4.3.tar.gz")
|
||||
set(MD5 "62254c40f89925bb894be421fe4cdef2")
|
||||
else()
|
||||
message("Could not find 'Python 3.8' or 'Python 3.7' or 'Python 3.9'")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.4.3.tar.gz")
|
||||
set(MD5 "62254c40f89925bb894be421fe4cdef2")
|
||||
endif ()
|
||||
set(pybind11_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
set(pybind11_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
mindspore_add_pkg(pybind11
|
||||
VER 2.6.1
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DPYBIND11_TEST=OFF -DPYBIND11_LTO_CXX_FLAGS=FALSE
|
||||
)
|
||||
elseif(PYTHON_VERSION MATCHES "3.8")
|
||||
mindspore_add_pkg(pybind11
|
||||
VER 2.6.1
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DPYBIND11_TEST=OFF -DPYBIND11_LTO_CXX_FLAGS=FALSE
|
||||
)
|
||||
else()
|
||||
mindspore_add_pkg(pybind11
|
||||
mindspore_add_pkg(pybind11
|
||||
VER 2.4.3
|
||||
URL ${REQ_URL}
|
||||
MD5 ${MD5}
|
||||
CMAKE_OPTION -DPYBIND11_TEST=OFF -DPYBIND11_LTO_CXX_FLAGS=FALSE
|
||||
)
|
||||
endif()
|
||||
|
||||
include_directories(${pybind11_INC})
|
||||
find_package(pybind11 REQUIRED)
|
||||
set_property(TARGET pybind11::module PROPERTY IMPORTED_GLOBAL TRUE)
|
||||
|
|
|
|||
|
|
@ -1,48 +1,34 @@
|
|||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/sentencepiece/repository/archive/v0.1.92.tar.gz")
|
||||
set(MD5 "618f5590c99884866c01cb773096c523")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/google/sentencepiece/archive/v0.1.92.tar.gz")
|
||||
set(MD5 "5dfd2241914b5598a68b2a8542ed8e91")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
|
||||
if(WIN32)
|
||||
set(sentencepiece_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 -Wno-unused-result -Wno-stringop-overflow \
|
||||
-Wno-format-extra-args -Wno-format")
|
||||
set(sentencepiece_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
mindspore_add_pkg(sentencepiece
|
||||
VER 0.1.92
|
||||
LIBS sentencepiece sentencepiece_train
|
||||
URL ${REQ_URL}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DSPM_USE_BUILTIN_PROTOBUF=ON
|
||||
MD5 ${MD5}
|
||||
)
|
||||
else()
|
||||
set(sentencepiece_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 -Wno-unused-result -Wno-sign-compare")
|
||||
set(sentencepiece_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
if(ENABLE_GLIBCXX)
|
||||
if (WIN32)
|
||||
set(sentencepiece_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 -Wno-unused-result -Wno-stringop-overflow -Wno-format-extra-args -Wno-format")
|
||||
set(sentencepiece_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
mindspore_add_pkg(sentencepiece
|
||||
VER 0.1.92
|
||||
LIBS sentencepiece sentencepiece_train
|
||||
URL ${REQ_URL}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DSPM_USE_BUILTIN_PROTOBUF=OFF -DSPM_ENABLE_SHARED=OFF
|
||||
-DPROTOBUF_INC=${protobuf_INC}
|
||||
MD5 ${MD5}
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/sentencepiece/sentencepiece.patch001_cpu
|
||||
)
|
||||
else()
|
||||
mindspore_add_pkg(sentencepiece
|
||||
VER 0.1.92
|
||||
LIBS sentencepiece sentencepiece_train
|
||||
URL ${REQ_URL}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DSPM_USE_BUILTIN_PROTOBUF=OFF -DSPM_ENABLE_SHARED=OFF
|
||||
-DPROTOBUF_INC=${protobuf_INC}
|
||||
MD5 ${MD5}
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/sentencepiece/sentencepiece.patch001
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
VER 0.1.92
|
||||
LIBS sentencepiece sentencepiece_train
|
||||
URL ${REQ_URL}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DSPM_USE_BUILTIN_PROTOBUF=ON
|
||||
MD5 ${MD5}
|
||||
)
|
||||
else ()
|
||||
set(sentencepiece_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 -Wno-unused-result -Wno-sign-compare")
|
||||
set(sentencepiece_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
mindspore_add_pkg(sentencepiece
|
||||
VER 0.1.92
|
||||
LIBS sentencepiece sentencepiece_train
|
||||
URL ${REQ_URL}
|
||||
CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DSPM_USE_BUILTIN_PROTOBUF=OFF -DSPM_ENABLE_SHARED=OFF -DPROTOBUF_INC=${protobuf_INC}
|
||||
MD5 ${MD5}
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/sentencepiece/sentencepiece.patch001
|
||||
)
|
||||
endif ()
|
||||
include_directories(${sentencepiece_INC})
|
||||
add_library(mindspore::sentencepiece ALIAS sentencepiece::sentencepiece)
|
||||
add_library(mindspore::sentencepiece_train ALIAS sentencepiece::sentencepiece_train)
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/sqlite/repository/archive/version-3.32.2.tar.gz")
|
||||
set(MD5 "7312cad1739d8a73b14abddc850c0afa")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/sqlite/sqlite/archive/version-3.32.2.tar.gz")
|
||||
set(MD5 "ea6d3b3289b4ac216fb06081a01ef101")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
|
||||
if(WIN32)
|
||||
if (WIN32)
|
||||
mindspore_add_pkg(sqlite
|
||||
VER 3.32.2
|
||||
LIBS sqlite3
|
||||
|
|
@ -17,17 +17,15 @@ if(WIN32)
|
|||
CMAKE_OPTION " "
|
||||
)
|
||||
|
||||
else()
|
||||
set(sqlite_USE_STATIC_LIBS ON)
|
||||
else ()
|
||||
set(sqlite_USE_STATIC_LIBS ON)
|
||||
set(sqlite_CXXFLAGS)
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(sqlite_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 \
|
||||
-O2")
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
set(sqlite_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 -O2")
|
||||
else()
|
||||
set(sqlite_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC \
|
||||
-D_FORTIFY_SOURCE=2 -O2")
|
||||
set(sqlite_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
set(sqlite_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 -O2")
|
||||
endif()
|
||||
set(sqlite_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
mindspore_add_pkg(sqlite
|
||||
VER 3.32.2
|
||||
LIBS sqlite3
|
||||
|
|
@ -35,7 +33,7 @@ else()
|
|||
MD5 ${MD5}
|
||||
PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/sqlite/sqlite.patch001
|
||||
CONFIGURE_COMMAND ./configure --enable-shared=no --disable-tcl --disable-editline --enable-json1)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
include_directories(${sqlite_INC})
|
||||
add_library(mindspore::sqlite ALIAS sqlite::sqlite3)
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
set(tinyxml2_CXXFLAGS "-fstack-protector -D_FORTIFY_SOURCE=2 -O2 -Wno-unused-result")
|
||||
set(tinyxml2_CFLAGS "-fstack-protector -D_FORTIFY_SOURCE=2 -O2")
|
||||
|
||||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/tinyxml2/repository/archive/8.0.0.tar.gz")
|
||||
set(MD5 "6a70cea637d0b17179e8bfd77860f811")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/leethomason/tinyxml2/archive/8.0.0.tar.gz")
|
||||
set(MD5 "5dc535c8b34ee621fe2128f072d275b5")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
|
||||
if(NOT WIN32 AND NOT APPLE)
|
||||
if (NOT WIN32)
|
||||
set(tinyxml2_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
endif()
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/incubator-tvm/repository/archive/v0.6.0.tar.gz")
|
||||
set(MD5 "7b22965745cf1c6208a4e367fb86a585")
|
||||
else()
|
||||
set(REQ_URL
|
||||
"https://github.com/apache/incubator-tvm/release/download/v0.6.0/apache-tvm-src-v0.6.0-incubating.tar.gz")
|
||||
set(REQ_URL "https://github.com/apache/incubator-tvm/release/download/v0.6.0/apache-tvm-src-v0.6.0-incubating.tar.gz")
|
||||
set(MD5 "2d77a005f0046d937b99c67de82f6438")
|
||||
endif()
|
||||
endif ()
|
||||
set(incubator_tvm_predict_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
set(incubator_tvm_predict_CFLAGS "-D_FORTIFY_SOURCE=2 -O2")
|
||||
mindspore_add_pkg(incubator_tvm_predict
|
||||
|
|
|
|||
|
|
@ -1,41 +0,0 @@
|
|||
if(ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/Vulkan-Headers/archive/v1.2.144.zip")
|
||||
set(MD5 "8797a525aff953ea536ebe338a9f5ef6")
|
||||
set(PKG_GIT_TAG "")
|
||||
__download_pkg_with_git(Vulkan-Headers ${REQ_URL} ${PKG_GIT_TAG} ${MD5})
|
||||
else()
|
||||
set(REQ_URL "https://github.com/KhronosGroup/Vulkan-Headers/archive/v1.2.144.zip")
|
||||
set(MD5 "91eae880a0ad9ad77c89d79b95b7399a")
|
||||
__download_pkg(Vulkan-Headers ${REQ_URL} ${MD5})
|
||||
endif()
|
||||
|
||||
function(gene_spirv BASEPATH)
|
||||
string(CONCAT CL_SRC_DIR "${BASEPATH}" "/src/runtime/kernel/vulkan/glsl")
|
||||
message(STATUS "**********gene spirv*********base path: " "${BASEPATH}" ", glsl path: " "${CL_SRC_DIR}")
|
||||
if(NOT EXISTS ${CL_SRC_DIR})
|
||||
return()
|
||||
endif()
|
||||
file(GLOB_RECURSE CL_LIST ${CL_SRC_DIR}/*.cl)
|
||||
foreach(file_path ${CL_LIST})
|
||||
file(REMOVE ${file_path}.inc)
|
||||
string(REGEX REPLACE ".+/(.+)\\..*" "\\1" kernel_name "${file_path}")
|
||||
set(inc_file_ex "${kernel_name}.cl.inc")
|
||||
execute_process(
|
||||
COMMAND bash -c "sed 's/\\\\/\\\\\\\\/g' "
|
||||
COMMAND bash -c "sed 's/\\\"/\\\\\\\"/g' "
|
||||
COMMAND bash -c "sed 's/$/\\\\n\\\" \\\\/' "
|
||||
COMMAND bash -c "sed 's/^/\\\"/' "
|
||||
WORKING_DIRECTORY ${CL_SRC_DIR}
|
||||
INPUT_FILE ${file_path}
|
||||
OUTPUT_FILE ${inc_file_ex}
|
||||
RESULT_VARIABLE RESULT)
|
||||
if(NOT RESULT EQUAL "0")
|
||||
message(FATAL_ERROR "error! when generate ${inc_file_ex}")
|
||||
endif()
|
||||
__exec_cmd(COMMAND sed -i
|
||||
"1i\\static const char *${kernel_name}_source =\\\"\\\\n\\\" \\\\"
|
||||
${inc_file_ex} WORKING_DIRECTORY ${CL_SRC_DIR}
|
||||
)
|
||||
__exec_cmd(COMMAND sed -i "$a\\\\\;" ${inc_file_ex} WORKING_DIRECTORY ${CL_SRC_DIR})
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
mindspore_add_pkg(zeromq
|
||||
VER 4.1.4
|
||||
HEAD_ONLY ./
|
||||
URL https://raw.githubusercontent.com/mli/deps/master/build/zeromq-4.1.4.tar.gz
|
||||
MD5 a611ecc93fffeb6d058c0e6edf4ad4fb)
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
if(ENABLE_GITEE)
|
||||
if (ENABLE_GITEE)
|
||||
set(REQ_URL "https://gitee.com/mirrors/zlib/repository/archive/v1.2.11.tar.gz")
|
||||
set(MD5 "be6d144068d8835e86a81b3f36b66a42")
|
||||
else()
|
||||
set(REQ_URL "https://github.com/madler/zlib/archive/v1.2.11.tar.gz")
|
||||
set(MD5 "0095d2d2d1f3442ce1318336637b695f")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
mindspore_add_pkg(zlib
|
||||
VER 1.2.11
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
set(SECURE_CXX_FLAGS "")
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||
if(WIN32)
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||
if (WIN32)
|
||||
set(SECURE_CXX_FLAGS "-fstack-protector-all")
|
||||
else()
|
||||
set(SECURE_CXX_FLAGS "-fstack-protector-all -Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
set(SECURE_CXX_FLAGS "-fstack-protector-all -Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
endif()
|
||||
endif()
|
||||
set(_ms_tmp_CMAKE_CXX_FLAGS_F ${CMAKE_CXX_FLAGS})
|
||||
|
|
@ -15,9 +15,8 @@ include(${CMAKE_SOURCE_DIR}/cmake/external_libs/json.cmake)
|
|||
include(${CMAKE_SOURCE_DIR}/cmake/dependency_securec.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/protobuf.cmake)
|
||||
|
||||
if(MS_BUILD_GRPC)
|
||||
if (MS_BUILD_GRPC)
|
||||
# build dependencies of gRPC
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/openssl_stub.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/absl.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/c-ares.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/zlib.cmake)
|
||||
|
|
@ -33,55 +32,40 @@ include(${CMAKE_SOURCE_DIR}/cmake/external_libs/flatbuffers.cmake)
|
|||
if(USE_GLOG)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/glog.cmake)
|
||||
endif()
|
||||
if (ENABLE_CPU AND (ENABLE_D OR ENABLE_GPU))
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/zeromq.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/pslite.cmake)
|
||||
endif()
|
||||
|
||||
find_package(Python3)
|
||||
include_directories(${Python3_INCLUDE_DIRS})
|
||||
include_directories(${CMAKE_SOURCE_DIR}/third_party)
|
||||
if(ENABLE_MPI)
|
||||
if (ENABLE_MPI)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/ompi.cmake)
|
||||
endif()
|
||||
|
||||
if(ENABLE_CPU)
|
||||
if (ENABLE_CPU)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/mkl_dnn.cmake)
|
||||
endif()
|
||||
|
||||
if(ENABLE_CPU AND ${CMAKE_SYSTEM_NAME} MATCHES "Linux"
|
||||
AND ${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "x86_64")
|
||||
message("Include projectq")
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/projectq.cmake)
|
||||
endif()
|
||||
|
||||
if(ENABLE_GPU)
|
||||
if(ENABLE_MPI)
|
||||
if (ENABLE_GPU)
|
||||
if (ENABLE_MPI)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/nccl.cmake)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(ENABLE_GE)
|
||||
if (ENABLE_GE)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/third_party/ge/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/third_party/ge/include/external)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/third_party/ge/include/external/graph)
|
||||
link_directories(${CMAKE_SOURCE_DIR}/third_party/ge/lib)
|
||||
elseif(ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES)
|
||||
elseif(ENABLE_D OR ENABLE_TESTCASES)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc/ops)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc/external)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/metadef/inc)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/metadef/inc/external)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/metadef/inc/external/graph)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc/external/graph)
|
||||
endif()
|
||||
|
||||
if(ENABLE_GE OR ENABLE_D OR ENABLE_ACL OR ENABLE_TESTCASES)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc/external)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/inc/framework)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/third_party/fwkacllib/inc)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/third_party/fwkacllib/inc/toolchain)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/metadef/inc)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/metadef/inc/external)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/graphengine/metadef/inc/external/graph)
|
||||
endif()
|
||||
|
||||
if(ENABLE_MINDDATA)
|
||||
if (ENABLE_MINDDATA)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/icu4c.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/libtiff.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/opencv.cmake)
|
||||
|
|
@ -91,7 +75,7 @@ if(ENABLE_MINDDATA)
|
|||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/sentencepiece.cmake)
|
||||
endif()
|
||||
|
||||
if(ENABLE_MINDDATA)
|
||||
if (ENABLE_MINDDATA OR ENABLE_SERVING)
|
||||
include(${CMAKE_SOURCE_DIR}/cmake/external_libs/jpeg_turbo.cmake)
|
||||
endif()
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ option(ENABLE_GE "Enable graph engine as backend to execute" OFF)
|
|||
option(ENABLE_MINDDATA "Enable minddata compile" OFF)
|
||||
option(ENABLE_TRAIN "Enable ge train, default off(only infer)" OFF)
|
||||
option(ENABLE_TESTCASES "Run testcases switch, default off" OFF)
|
||||
option(ENABLE_CPP_ST "Run cpp st testcases switch, default off" OFF)
|
||||
option(DEBUG_MODE "Debug mode, default off" OFF)
|
||||
option(ENABLE_ASAN "Enable Google Sanitizer to find memory bugs")
|
||||
option(ENABLE_LOAD_ANF_IR "Enable load ANF-IR as input of 'infer' stage of pipeline" OFF)
|
||||
|
|
@ -14,71 +13,66 @@ option(USE_GLOG "Use glog to output log" OFF)
|
|||
option(ENABLE_PROFILE "Enable pipeline profile, default off" OFF)
|
||||
option(ENABLE_TIMELINE "Enable time line record" OFF)
|
||||
option(ENABLE_DUMP_PROTO "Enable dump anf graph to file in ProtoBuffer format, default on" ON)
|
||||
option(ENABLE_DUMP_IR "Enable dump function graph ir, default on" ON)
|
||||
option(ENABLE_DUMP_IR "Enable dump funciton graph ir, default on" ON)
|
||||
option(ENABLE_MPI "enable mpi" OFF)
|
||||
option(ENABLE_AKG "enable akg" OFF)
|
||||
option(ENABLE_DEBUGGER "enable debugger" OFF)
|
||||
option(ENABLE_IBVERBS "enable IBVERBS for parameter server" OFF)
|
||||
option(ENABLE_PYTHON "Enable python" ON)
|
||||
option(ENABLE_ACL "enable acl" OFF)
|
||||
option(ENABLE_GLIBCXX "enable_glibcxx" OFF)
|
||||
|
||||
if(NOT ENABLE_D AND NOT ENABLE_TESTCASES AND NOT ENABLE_ACL AND NOT ENABLE_GE)
|
||||
set(ENABLE_GLIBCXX ON)
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
if(WIN32)
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
if (WIN32)
|
||||
set(OPTION_CXX_FLAGS "${OPTION_CXX_FLAGS} -fstack-protector-all")
|
||||
else()
|
||||
set(OPTION_CXX_FLAGS "${OPTION_CXX_FLAGS} -fstack-protector-all -Wl,-z,relro,-z,now,-z,noexecstack")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
set(OPTION_CXX_FLAGS "${OPTION_CXX_FLAGS} -Wsign-compare")
|
||||
endif()
|
||||
|
||||
if(ENABLE_COVERAGE)
|
||||
if (ENABLE_COVERAGE)
|
||||
set(COVERAGE_COMPILER_FLAGS "-g --coverage -fprofile-arcs -ftest-coverage")
|
||||
set(OPTION_CXX_FLAGS "${OPTION_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}")
|
||||
endif()
|
||||
|
||||
if(ENABLE_ASAN)
|
||||
set(OPTION_CXX_FLAGS "${OPTION_CXX_FLAGS} -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer")
|
||||
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
set(OPTION_CXX_FLAGS "${OPTION_CXX_FLAGS} -static-libsan")
|
||||
if (ENABLE_ASAN)
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
set(OPTION_CXX_FLAGS "${OPTION_CXX_FLAGS} -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer -fsanitize=undefined")
|
||||
else()
|
||||
set(OPTION_CXX_FLAGS "${OPTION_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libsan -fsanitize=undefined")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(DEBUG_MODE)
|
||||
if (DEBUG_MODE)
|
||||
set(CMAKE_BUILD_TYPE "Debug")
|
||||
else()
|
||||
set(CMAKE_BUILD_TYPE "Release")
|
||||
endif()
|
||||
|
||||
if((CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") OR (CMAKE_BUILD_TYPE STREQUAL Release))
|
||||
if ((CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") OR (CMAKE_BUILD_TYPE STREQUAL Release))
|
||||
set(PYBIND11_LTO_CXX_FLAGS FALSE)
|
||||
endif()
|
||||
|
||||
if(NOT BUILD_PATH)
|
||||
if (NOT BUILD_PATH)
|
||||
set(BUILD_PATH "${CMAKE_SOURCE_DIR}/build")
|
||||
endif()
|
||||
|
||||
if(ENABLE_GE OR ENABLE_D)
|
||||
if (ENABLE_GE OR ENABLE_D)
|
||||
set(ENABLE_TDTQUE ON)
|
||||
endif()
|
||||
|
||||
if(ENABLE_GPU)
|
||||
if (ENABLE_GPU)
|
||||
set(ENABLE_GPUQUE ON)
|
||||
add_compile_definitions(ENABLE_GPU_COLLECTIVE)
|
||||
endif()
|
||||
|
||||
if(ENABLE_CPU)
|
||||
if (ENABLE_CPU)
|
||||
add_compile_definitions(ENABLE_CPU)
|
||||
endif()
|
||||
|
||||
if(ENABLE_GE)
|
||||
if (ENABLE_GE)
|
||||
add_compile_definitions(ENABLE_GE)
|
||||
add_compile_definitions(CUSTOM_OP)
|
||||
endif()
|
||||
|
|
@ -93,29 +87,29 @@ if(USE_GLOG)
|
|||
add_compile_definitions(USE_GLOG)
|
||||
endif()
|
||||
|
||||
if(ENABLE_PROFILE)
|
||||
if (ENABLE_PROFILE)
|
||||
add_compile_definitions(ENABLE_PROFILE)
|
||||
endif()
|
||||
|
||||
if(ENABLE_TIMELINE)
|
||||
if (ENABLE_TIMELINE)
|
||||
add_compile_definitions(ENABLE_TIMELINE)
|
||||
endif()
|
||||
|
||||
if(ENABLE_LOAD_ANF_IR)
|
||||
if (ENABLE_LOAD_ANF_IR)
|
||||
add_compile_definitions(ENABLE_LOAD_ANF_IR)
|
||||
endif()
|
||||
|
||||
if(ENABLE_TESTCASES OR (NOT ENABLE_D AND NOT ENABLE_GE))
|
||||
if (ENABLE_TESTCASES OR (NOT ENABLE_D AND NOT ENABLE_GE))
|
||||
add_compile_definitions(NO_DLIB=1)
|
||||
endif()
|
||||
|
||||
if(ENABLE_DUMP_IR)
|
||||
add_compile_definitions(ENABLE_DUMP_IR)
|
||||
endif()
|
||||
endif(ENABLE_DUMP_IR)
|
||||
|
||||
if(ENABLE_MINDDATA)
|
||||
add_compile_definitions(ENABLE_MINDDATA)
|
||||
if(ENABLE_TDTQUE)
|
||||
if (ENABLE_TDTQUE)
|
||||
add_compile_definitions(ENABLE_TDTQUE)
|
||||
endif()
|
||||
endif()
|
||||
|
|
@ -124,9 +118,9 @@ if(ENABLE_DEBUGGER)
|
|||
add_compile_definitions(ENABLE_DEBUGGER)
|
||||
endif()
|
||||
|
||||
if(ENABLE_DEBUGGER OR ENABLE_TESTCASES)
|
||||
if (ENABLE_DEBUGGER OR ENABLE_SERVING OR ENABLE_TESTCASES)
|
||||
set(MS_BUILD_GRPC ON)
|
||||
endif()
|
||||
if(ENABLE_MINDDATA AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (ENABLE_MINDDATA AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
set(MS_BUILD_GRPC ON)
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -5,36 +5,31 @@ include(GNUInstallDirs)
|
|||
# set package information
|
||||
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
|
||||
set(CPACK_GENERATOR "External")
|
||||
set(CPACK_CMAKE_GENERATOR "Ninja")
|
||||
set(CPACK_EXTERNAL_PACKAGE_SCRIPT ${CMAKE_SOURCE_DIR}/cmake/package_script.cmake)
|
||||
set(CPACK_EXTERNAL_ENABLE_STAGING true)
|
||||
set(CPACK_TEMPORARY_PACKAGE_FILE_NAME ${CMAKE_SOURCE_DIR}/build/package/mindspore)
|
||||
set(CPACK_TEMPORARY_INSTALL_DIRECTORY ${CMAKE_SOURCE_DIR}/build/package/mindspore)
|
||||
if(ENABLE_GE)
|
||||
if (ENABLE_GE)
|
||||
set(CPACK_MS_BACKEND "ge")
|
||||
set(CPACK_MS_TARGET "ascend or cpu")
|
||||
set(CPACK_MS_TARGET "ascend-cpu")
|
||||
set(CPACK_MS_PACKAGE_NAME "mindspore")
|
||||
elseif(ENABLE_GPU)
|
||||
elseif (ENABLE_GPU)
|
||||
set(CPACK_MS_BACKEND "ms")
|
||||
set(CPACK_MS_TARGET "gpu or cpu")
|
||||
set(CPACK_MS_TARGET "gpu-cpu")
|
||||
set(CPACK_MS_PACKAGE_NAME "mindspore-gpu")
|
||||
elseif(ENABLE_D)
|
||||
elseif (ENABLE_D)
|
||||
set(CPACK_MS_BACKEND "ms")
|
||||
set(CPACK_MS_TARGET "ascend or cpu")
|
||||
set(CPACK_MS_TARGET "ascend-cpu")
|
||||
set(CPACK_MS_PACKAGE_NAME "mindspore-ascend")
|
||||
elseif(ENABLE_CPU)
|
||||
elseif (ENABLE_CPU)
|
||||
set(CPACK_MS_BACKEND "ms")
|
||||
set(CPACK_MS_TARGET "cpu")
|
||||
set(CPACK_MS_PACKAGE_NAME "mindspore")
|
||||
elseif(ENABLE_ACL)
|
||||
else ()
|
||||
set(CPACK_MS_BACKEND "debug")
|
||||
set(CPACK_MS_TARGET "ascend or gpu or cpu")
|
||||
set(CPACK_MS_PACKAGE_NAME "mindspore-ascend")
|
||||
else()
|
||||
set(CPACK_MS_BACKEND "debug")
|
||||
set(CPACK_MS_TARGET "ascend or gpu or cpu")
|
||||
set(CPACK_MS_TARGET "ascend-gpu-cpu")
|
||||
set(CPACK_MS_PACKAGE_NAME "mindspore")
|
||||
endif()
|
||||
endif ()
|
||||
include(CPack)
|
||||
|
||||
# set install path
|
||||
|
|
@ -42,9 +37,8 @@ set(INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory f
|
|||
set(INSTALL_PY_DIR ".")
|
||||
set(INSTALL_BASE_DIR ".")
|
||||
set(INSTALL_BIN_DIR "bin")
|
||||
set(INSTALL_CFG_DIR "config")
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
set(INSTALL_LIB_DIR ".")
|
||||
set(onednn_LIBPATH ${onednn_LIBPATH}/../bin/)
|
||||
set(glog_LIBPATH ${glog_LIBPATH}/../bin/)
|
||||
|
|
@ -53,9 +47,9 @@ if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
|||
set(sqlite_LIBPATH ${sqlite_LIBPATH}/../bin/)
|
||||
set(tinyxml2_LIBPATH ${tinyxml2_LIBPATH}/../bin/)
|
||||
set(sentencepiece_LIBPATH ${sentencepiece_LIBPATH}/../bin/)
|
||||
else()
|
||||
else ()
|
||||
set(INSTALL_LIB_DIR "lib")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# set package files
|
||||
install(
|
||||
|
|
@ -64,40 +58,24 @@ install(
|
|||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
message("offline debugger does not support windows system temporarily")
|
||||
else()
|
||||
install(
|
||||
TARGETS _mindspore_offline_debug
|
||||
DESTINATION ${INSTALL_BASE_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
|
||||
install(
|
||||
TARGETS mindspore_shared_lib
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
install(
|
||||
TARGETS mindspore_gvar
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
if(USE_GLOG)
|
||||
file(GLOB_RECURSE GLOG_LIB_LIST ${glog_LIBPATH}/libmindspore_glog*)
|
||||
if (USE_GLOG)
|
||||
file(GLOB_RECURSE GLOG_LIB_LIST ${glog_LIBPATH}/libglog*)
|
||||
install(
|
||||
FILES ${GLOG_LIB_LIST}
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
file(GLOB_RECURSE LIBEVENT_LIB_LIST
|
||||
${libevent_LIBPATH}/libevent*${CMAKE_SHARED_LIBRARY_SUFFIX}*
|
||||
${libevent_LIBPATH}/libevent_pthreads*${CMAKE_SHARED_LIBRARY_SUFFIX}*
|
||||
${libevent_LIBPATH}/libevent*
|
||||
${libevent_LIBPATH}/libevent_pthreads*
|
||||
)
|
||||
|
||||
install(
|
||||
|
|
@ -105,14 +83,13 @@ install(
|
|||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
if(ENABLE_MINDDATA)
|
||||
if (ENABLE_MINDDATA)
|
||||
install(
|
||||
TARGETS _c_dataengine _c_mindrecord
|
||||
DESTINATION ${INSTALL_BASE_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
install(
|
||||
TARGETS cache_admin cache_server
|
||||
OPTIONAL
|
||||
|
|
@ -130,9 +107,11 @@ if(ENABLE_MINDDATA)
|
|||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
file(GLOB_RECURSE TINYXML2_LIB_LIST ${tinyxml2_LIBPATH}/libtinyxml2*)
|
||||
file(GLOB_RECURSE TINYXML2_LIB_LIST
|
||||
${tinyxml2_LIBPATH}/libtinyxml2*
|
||||
)
|
||||
install(
|
||||
FILES ${TINYXML2_LIB_LIST}
|
||||
FILES ${TINYXML2_LIB_LIST}
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
|
@ -144,7 +123,7 @@ if(ENABLE_MINDDATA)
|
|||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
message("icu4c does not support windows system temporarily")
|
||||
else()
|
||||
file(GLOB_RECURSE ICU4C_LIB_LIST
|
||||
|
|
@ -158,113 +137,98 @@ if(ENABLE_MINDDATA)
|
|||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(ENABLE_CPU)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
if (ENABLE_CPU)
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
file(GLOB_RECURSE DNNL_LIB_LIST ${onednn_LIBPATH}/libdnnl${CMAKE_SHARED_LIBRARY_SUFFIX}*)
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
elseif (CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
file(GLOB_RECURSE DNNL_LIB_LIST ${onednn_LIBPATH}/libdnnl*${CMAKE_SHARED_LIBRARY_SUFFIX}*)
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
elseif (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
file(GLOB_RECURSE DNNL_LIB_LIST ${onednn_LIBPATH}/dnnl.dll)
|
||||
endif()
|
||||
endif ()
|
||||
install(
|
||||
FILES ${DNNL_LIB_LIST}
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(ENABLE_MPI)
|
||||
if(ENABLE_GPU)
|
||||
if (ENABLE_MPI)
|
||||
if (ENABLE_GPU)
|
||||
install(
|
||||
TARGETS _ms_mpi
|
||||
DESTINATION ${INSTALL_BASE_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
if(ENABLE_CPU)
|
||||
endif ()
|
||||
if (ENABLE_CPU)
|
||||
install(
|
||||
TARGETS mpi_adapter
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if(ENABLE_GPU)
|
||||
if(ENABLE_MPI)
|
||||
if (ENABLE_GPU)
|
||||
if (ENABLE_MPI)
|
||||
install(
|
||||
TARGETS gpu_collective
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
install(
|
||||
TARGETS gpu_queue
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(ENABLE_CPU AND (ENABLE_D OR ENABLE_GPU))
|
||||
install(
|
||||
TARGETS ps_cache
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
|
||||
if(ENABLE_TESTCASES)
|
||||
if (ENABLE_SERVING OR ENABLE_TESTCASES)
|
||||
file(GLOB_RECURSE LIBEVENT_LIB_LIST
|
||||
${libevent_LIBPATH}/libevent*
|
||||
${libevent_LIBPATH}/libevent_pthreads*
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(NOT ENABLE_GE)
|
||||
if(ENABLE_D OR ENABLE_ACL)
|
||||
if(DEFINED ENV{ASCEND_CUSTOM_PATH})
|
||||
if (NOT ENABLE_GE)
|
||||
if (ENABLE_D)
|
||||
if (DEFINED ENV{ASCEND_CUSTOM_PATH})
|
||||
set(ASCEND_PATH $ENV{ASCEND_CUSTOM_PATH})
|
||||
else()
|
||||
else ()
|
||||
set(ASCEND_PATH /usr/local/Ascend)
|
||||
endif()
|
||||
endif ()
|
||||
set(ASCEND_DRIVER_PATH ${ASCEND_PATH}/driver/lib64/common)
|
||||
|
||||
install(
|
||||
FILES ${CMAKE_SOURCE_DIR}/build/graphengine/c_sec/lib/libc_sec.so
|
||||
FILES
|
||||
${CMAKE_BINARY_DIR}/graphengine/src/common/graph/libgraph.so
|
||||
${CMAKE_BINARY_DIR}/graphengine/src/ge/common/libge_common.so
|
||||
${CMAKE_BINARY_DIR}/graphengine/src/ge/ge_runtime/libge_runtime.so
|
||||
${CMAKE_SOURCE_DIR}/build/graphengine/libc_sec.so
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
if(ENABLE_D)
|
||||
install(
|
||||
TARGETS ms_profile
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
install(
|
||||
FILES
|
||||
${CMAKE_BINARY_DIR}/graphengine/metadef/graph/libgraph.so
|
||||
${CMAKE_BINARY_DIR}/graphengine/ge/common/libge_common.so
|
||||
${CMAKE_BINARY_DIR}/graphengine/ge/ge_runtime/libge_runtime.so
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
elseif(ENABLE_TESTCASES)
|
||||
install(
|
||||
TARGETS ms_profile
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
elseif (ENABLE_TESTCASES)
|
||||
install(
|
||||
FILES
|
||||
${CMAKE_BINARY_DIR}/graphengine/metadef/graph/libgraph.so
|
||||
${CMAKE_SOURCE_DIR}/build/graphengine/c_sec/lib/libc_sec.so
|
||||
${CMAKE_BINARY_DIR}/graphengine/src/common/graph/libgraph.so
|
||||
${CMAKE_SOURCE_DIR}/build/graphengine/libc_sec.so
|
||||
${LIBEVENT_LIB_LIST}
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
get_filename_component(CXX_DIR ${CMAKE_CXX_COMPILER} PATH)
|
||||
file(GLOB CXX_LIB_LIST ${CXX_DIR}/*.dll)
|
||||
|
||||
|
|
@ -278,7 +242,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
|||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# set python files
|
||||
file(GLOB MS_PY_LIST ${CMAKE_SOURCE_DIR}/mindspore/*.py)
|
||||
|
|
@ -294,7 +258,6 @@ install(
|
|||
${CMAKE_SOURCE_DIR}/mindspore/_extends
|
||||
${CMAKE_SOURCE_DIR}/mindspore/parallel
|
||||
${CMAKE_SOURCE_DIR}/mindspore/mindrecord
|
||||
${CMAKE_SOURCE_DIR}/mindspore/numpy
|
||||
${CMAKE_SOURCE_DIR}/mindspore/train
|
||||
${CMAKE_SOURCE_DIR}/mindspore/common
|
||||
${CMAKE_SOURCE_DIR}/mindspore/ops
|
||||
|
|
@ -306,63 +269,47 @@ install(
|
|||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
if((ENABLE_D OR ENABLE_GPU) AND ENABLE_AKG)
|
||||
if ((ENABLE_D OR ENABLE_GPU) AND ENABLE_AKG)
|
||||
set (AKG_PATH ${CMAKE_SOURCE_DIR}/build/mindspore/akg)
|
||||
file(REMOVE_RECURSE ${AKG_PATH}/_akg)
|
||||
file(MAKE_DIRECTORY ${AKG_PATH}/_akg)
|
||||
file(TOUCH ${AKG_PATH}/_akg/__init__.py)
|
||||
install(DIRECTORY "${AKG_PATH}/akg" DESTINATION "${AKG_PATH}/_akg")
|
||||
install(
|
||||
DIRECTORY
|
||||
${AKG_PATH}/_akg
|
||||
DESTINATION ${INSTALL_PY_DIR}/
|
||||
${AKG_PATH}/akg
|
||||
DESTINATION ${INSTALL_PY_DIR}/..
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(EXISTS ${CMAKE_SOURCE_DIR}/mindspore/dataset)
|
||||
if (EXISTS ${CMAKE_SOURCE_DIR}/mindspore/dataset)
|
||||
install(
|
||||
DIRECTORY ${CMAKE_SOURCE_DIR}/mindspore/dataset
|
||||
DESTINATION ${INSTALL_PY_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
message("offline debugger does not support windows system temporarily")
|
||||
else()
|
||||
if(EXISTS ${CMAKE_SOURCE_DIR}/mindspore/offline_debug)
|
||||
install(
|
||||
DIRECTORY ${CMAKE_SOURCE_DIR}/mindspore/offline_debug
|
||||
DESTINATION ${INSTALL_PY_DIR}
|
||||
if (ENABLE_SERVING)
|
||||
install(
|
||||
TARGETS ms_serving
|
||||
DESTINATION ${INSTALL_BASE_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
install(
|
||||
FILES ${CMAKE_SOURCE_DIR}/build/mindspore/serving/ms_service_pb2.py
|
||||
${CMAKE_SOURCE_DIR}/build/mindspore/serving/ms_service_pb2_grpc.py
|
||||
DESTINATION ${INSTALL_PY_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
install(
|
||||
TARGETS inference
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
install(
|
||||
FILES ${LIBEVENT_LIB_LIST}
|
||||
DESTINATION ${INSTALL_LIB_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
## Public header files
|
||||
install(
|
||||
DIRECTORY ${CMAKE_SOURCE_DIR}/include
|
||||
DESTINATION ${INSTALL_BASE_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
## Public header files for minddata
|
||||
install(
|
||||
FILES ${CMAKE_SOURCE_DIR}/mindspore/ccsrc/minddata/dataset/include/constants.h
|
||||
${CMAKE_SOURCE_DIR}/mindspore/ccsrc/minddata/dataset/include/transforms.h
|
||||
${CMAKE_SOURCE_DIR}/mindspore/ccsrc/minddata/dataset/include/vision.h
|
||||
${CMAKE_SOURCE_DIR}/mindspore/ccsrc/minddata/dataset/include/vision_lite.h
|
||||
${CMAKE_SOURCE_DIR}/mindspore/ccsrc/minddata/dataset/include/vision_ascend.h
|
||||
${CMAKE_SOURCE_DIR}/mindspore/ccsrc/minddata/dataset/include/execute.h
|
||||
DESTINATION ${INSTALL_BASE_DIR}/include/minddata/dataset/include
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
## config files
|
||||
install(
|
||||
FILES ${CMAKE_SOURCE_DIR}/config/op_info.config
|
||||
DESTINATION ${INSTALL_CFG_DIR}
|
||||
COMPONENT mindspore
|
||||
)
|
||||
|
||||
)
|
||||
endif ()
|
||||
|
|
|
|||
|
|
@ -1,312 +1,152 @@
|
|||
include(CMakePackageConfigHelpers)
|
||||
|
||||
set(RUNTIME_PKG_NAME ${MAIN_DIR}-${RUNTIME_COMPONENT_NAME})
|
||||
set(LIB_DIR ${MAIN_DIR}-${COMPONENT_NAME}/lib)
|
||||
set(INC_DIR ${MAIN_DIR}-${COMPONENT_NAME}/include)
|
||||
|
||||
set(CODEGEN_ROOT_DIR ${RUNTIME_PKG_NAME}/tools/codegen)
|
||||
set(CONVERTER_ROOT_DIR ${RUNTIME_PKG_NAME}/tools/converter)
|
||||
set(CROPPER_ROOT_DIR ${RUNTIME_PKG_NAME}/tools/cropper)
|
||||
set(TURBO_DIR ${MAIN_DIR}-${COMPONENT_NAME}/minddata/third_party/libjpeg-turbo)
|
||||
set(OPENCV_DIR ${MAIN_DIR}-${COMPONENT_NAME}/minddata/third_party/opencv)
|
||||
set(PROTOBF_DIR ${MAIN_DIR}-${COMPONENT_NAME}/third_party/protobuf)
|
||||
set(FLATBF_DIR ${MAIN_DIR}-${COMPONENT_NAME}/third_party/flatbuffers)
|
||||
|
||||
if(SUPPORT_TRAIN)
|
||||
set(RUNTIME_DIR ${RUNTIME_PKG_NAME}/train)
|
||||
set(RUNTIME_INC_DIR ${RUNTIME_PKG_NAME}/train/include)
|
||||
set(RUNTIME_LIB_DIR ${RUNTIME_PKG_NAME}/train/lib)
|
||||
set(MIND_DATA_INC_DIR ${RUNTIME_PKG_NAME}/train/minddata/include)
|
||||
set(MIND_DATA_LIB_DIR ${RUNTIME_PKG_NAME}/train/minddata/lib)
|
||||
set(TURBO_DIR ${RUNTIME_PKG_NAME}/train/minddata/third_party/libjpeg-turbo)
|
||||
set(MINDSPORE_LITE_LIB_NAME libmindspore-lite-train)
|
||||
set(BENCHMARK_NAME benchmark_train)
|
||||
set(BENCHMARK_ROOT_DIR ${RUNTIME_PKG_NAME}/tools/benchmark_train)
|
||||
else()
|
||||
set(RUNTIME_DIR ${RUNTIME_PKG_NAME}/inference)
|
||||
set(RUNTIME_INC_DIR ${RUNTIME_PKG_NAME}/inference/include)
|
||||
set(RUNTIME_LIB_DIR ${RUNTIME_PKG_NAME}/inference/lib)
|
||||
set(MIND_DATA_INC_DIR ${RUNTIME_PKG_NAME}/inference/minddata/include)
|
||||
set(MIND_DATA_LIB_DIR ${RUNTIME_PKG_NAME}/inference/minddata/lib)
|
||||
set(TURBO_DIR ${RUNTIME_PKG_NAME}/inference/minddata/third_party/libjpeg-turbo)
|
||||
set(MINDSPORE_LITE_LIB_NAME libmindspore-lite)
|
||||
set(BENCHMARK_NAME benchmark)
|
||||
set(BENCHMARK_ROOT_DIR ${RUNTIME_PKG_NAME}/tools/benchmark)
|
||||
endif()
|
||||
set(MIND_DATA_INC_DIR ${MAIN_DIR}-${COMPONENT_NAME}/minddata/include)
|
||||
set(MIND_DATA_LIB_DIR ${MAIN_DIR}-${COMPONENT_NAME}/minddata/lib)
|
||||
set(MIND_DATA_LIB_DIR_RUN_X86 ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/minddata/lib)
|
||||
set(MIND_DATA_INC_DIR_RUN_X86 ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/minddata/include)
|
||||
|
||||
if(BUILD_MINDDATA STREQUAL "full")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/liteapi/include/ DESTINATION
|
||||
${MIND_DATA_INC_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
set(LIB_DIR_RUN_X86 ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/lib)
|
||||
set(INC_DIR_RUN_X86 ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/include)
|
||||
set(TURBO_DIR_RUN_X86 ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/minddata/third_party/libjpeg-turbo)
|
||||
set(OPENCV_DIR_RUN_X86 ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/minddata/third_party/opencv)
|
||||
set(PROTOBF_DIR_RUN_X86 ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/third_party/protobuf)
|
||||
set(FLATBF_DIR_RUN_X86 ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/third_party/flatbuffers)
|
||||
|
||||
if(PLATFORM_ARM64)
|
||||
file(GLOB JPEGTURBO_LIB_LIST ${jpeg_turbo_LIBPATH}/*.so)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so
|
||||
DESTINATION ${MIND_DATA_LIB_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${JPEGTURBO_LIB_LIST} DESTINATION ${TURBO_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
elseif(PLATFORM_ARM32)
|
||||
file(GLOB JPEGTURBO_LIB_LIST ${jpeg_turbo_LIBPATH}/*.so)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION
|
||||
${MIND_DATA_LIB_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${JPEGTURBO_LIB_LIST} DESTINATION ${TURBO_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
else()
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION
|
||||
${MIND_DATA_LIB_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${jpeg_turbo_LIBPATH}/libjpeg.so.62.3.0 DESTINATION ${TURBO_DIR}/lib
|
||||
RENAME libjpeg.so.62 COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${jpeg_turbo_LIBPATH}/libturbojpeg.so.0.2.0 DESTINATION ${TURBO_DIR}/lib
|
||||
RENAME libturbojpeg.so.0 COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
endif()
|
||||
endif()
|
||||
if (BUILD_MINDDATA STREQUAL "full")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/include/ DESTINATION ${MIND_DATA_INC_DIR} COMPONENT ${COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
if (PLATFORM_ARM64)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libjpeg.so DESTINATION ${TURBO_DIR}/lib COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libturbojpeg.so DESTINATION ${TURBO_DIR}/lib COMPONENT ${COMPONENT_NAME})
|
||||
elseif (PLATFORM_ARM32)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libjpeg.so DESTINATION ${TURBO_DIR}/lib COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libturbojpeg.so DESTINATION ${TURBO_DIR}/lib COMPONENT ${COMPONENT_NAME})
|
||||
else ()
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR_RUN_X86} COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libjpeg.so.62.3.0 DESTINATION ${TURBO_DIR_RUN_X86}/lib RENAME libjpeg.so.62 COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libturbojpeg.so.0.2.0 DESTINATION ${TURBO_DIR_RUN_X86}/lib RENAME libturbojpeg.so.0 COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if(BUILD_MINDDATA STREQUAL "wrapper")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/include/ DESTINATION ${MIND_DATA_INC_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "vision.h" EXCLUDE)
|
||||
if(PLATFORM_ARM64)
|
||||
file(GLOB JPEGTURBO_LIB_LIST ${jpeg_turbo_LIBPATH}/*.so)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${JPEGTURBO_LIB_LIST} DESTINATION ${TURBO_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
elseif(PLATFORM_ARM32)
|
||||
file(GLOB JPEGTURBO_LIB_LIST ${jpeg_turbo_LIBPATH}/*.so)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${JPEGTURBO_LIB_LIST} DESTINATION ${TURBO_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
else()
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${jpeg_turbo_LIBPATH}/libjpeg.so.62.3.0 DESTINATION ${TURBO_DIR}/lib RENAME libjpeg.so.62
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${jpeg_turbo_LIBPATH}/libturbojpeg.so.0.2.0 DESTINATION ${TURBO_DIR}/lib RENAME libturbojpeg.so.0
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
endif()
|
||||
endif()
|
||||
if (BUILD_MINDDATA STREQUAL "lite")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/include/ DESTINATION ${MIND_DATA_INC_DIR} COMPONENT ${COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
if (PLATFORM_ARM64)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libjpeg.so DESTINATION ${TURBO_DIR}/lib COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libturbojpeg.so DESTINATION ${TURBO_DIR}/lib COMPONENT ${COMPONENT_NAME})
|
||||
elseif (PLATFORM_ARM32)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libjpeg.so DESTINATION ${TURBO_DIR}/lib COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libturbojpeg.so DESTINATION ${TURBO_DIR}/lib COMPONENT ${COMPONENT_NAME})
|
||||
else ()
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR_RUN_X86} COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libjpeg.so.62.3.0 DESTINATION ${TURBO_DIR_RUN_X86}/lib RENAME libjpeg.so.62 COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libturbojpeg.so.0.2.0 DESTINATION ${TURBO_DIR_RUN_X86}/lib RENAME libturbojpeg.so.0 COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if(BUILD_MINDDATA STREQUAL "lite")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/include/ DESTINATION ${MIND_DATA_INC_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
if(PLATFORM_ARM64)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libjpeg.so DESTINATION ${TURBO_DIR}/lib
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libturbojpeg.so DESTINATION ${TURBO_DIR}/lib
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
elseif(PLATFORM_ARM32)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libjpeg.so DESTINATION ${TURBO_DIR}/lib
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libturbojpeg.so DESTINATION ${TURBO_DIR}/lib
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
else()
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libjpeg.so.62.3.0
|
||||
DESTINATION ${TURBO_DIR}/lib RENAME libjpeg.so.62 COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/third_party/libjpeg-turbo/lib/libturbojpeg.so.0.2.0
|
||||
DESTINATION ${TURBO_DIR}/lib RENAME libturbojpeg.so.0 COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
endif()
|
||||
endif()
|
||||
if (BUILD_MINDDATA STREQUAL "lite_cv")
|
||||
if (PLATFORM_ARM64)
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv DESTINATION ${MIND_DATA_INC_DIR} COMPONENT ${COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
elseif (PLATFORM_ARM32)
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv DESTINATION ${MIND_DATA_INC_DIR} COMPONENT ${COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
else ()
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv DESTINATION ${MIND_DATA_INC_DIR_RUN_X86} COMPONENT ${RUN_X86_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR_RUN_X86} COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if(BUILD_MINDDATA STREQUAL "lite_cv")
|
||||
if(PLATFORM_ARM64)
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv
|
||||
DESTINATION ${MIND_DATA_INC_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so
|
||||
DESTINATION ${MIND_DATA_LIB_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
elseif(PLATFORM_ARM32)
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv
|
||||
DESTINATION ${MIND_DATA_INC_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
else()
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv
|
||||
DESTINATION ${MIND_DATA_INC_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/minddata/libminddata-lite.so DESTINATION ${MIND_DATA_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
if (PLATFORM_ARM64)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/libmindspore-lite.so DESTINATION ${LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/libmindspore-lite.a DESTINATION ${LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/core/ir/dtype/type_id.h DESTINATION ${INC_DIR}/ir/dtype COMPONENT ${COMPONENT_NAME})
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${INC_DIR} COMPONENT ${COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/build/schema/ DESTINATION ${INC_DIR}/schema COMPONENT ${COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "inner" EXCLUDE)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/libmindspore-lite-optimize.so DESTINATION ${LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/libmindspore-lite-fp16.so DESTINATION ${LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
install(DIRECTORY ${flatbuffers_INC} DESTINATION ${FLATBF_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
if (ENABLE_TOOLS)
|
||||
install(TARGETS benchmark RUNTIME DESTINATION ${MAIN_DIR}-${COMPONENT_NAME}/benchmark COMPONENT ${COMPONENT_NAME})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
install(FILES ${TOP_DIR}/build/.commit_id DESTINATION ${RUNTIME_PKG_NAME}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
else()
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/.commit_id DESTINATION ${RUNTIME_PKG_NAME}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
endif()
|
||||
|
||||
if(PLATFORM_ARM64)
|
||||
if(SUPPORT_NPU)
|
||||
install(FILES ${DDK_LIB_PATH}/libhiai.so DESTINATION ${RUNTIME_DIR}/third_party/hiai_ddk/lib
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${DDK_LIB_PATH}/libhiai_ir.so DESTINATION ${RUNTIME_DIR}/third_party/hiai_ddk/lib
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${DDK_LIB_PATH}/libhiai_ir_build.so DESTINATION ${RUNTIME_DIR}/third_party/hiai_ddk/lib
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
elseif (PLATFORM_ARM32)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/libmindspore-lite.so DESTINATION ${LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/libmindspore-lite.a DESTINATION ${LIB_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/core/ir/dtype/type_id.h DESTINATION ${INC_DIR}/ir/dtype COMPONENT ${COMPONENT_NAME})
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${INC_DIR} COMPONENT ${COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/build/schema/ DESTINATION ${INC_DIR}/schema COMPONENT ${COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "inner" EXCLUDE)
|
||||
install(DIRECTORY ${flatbuffers_INC} DESTINATION ${FLATBF_DIR} COMPONENT ${COMPONENT_NAME})
|
||||
if (ENABLE_TOOLS)
|
||||
install(TARGETS benchmark RUNTIME DESTINATION ${MAIN_DIR}-${COMPONENT_NAME}/benchmark COMPONENT ${COMPONENT_NAME})
|
||||
endif()
|
||||
if(SUPPORT_TRAIN)
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${RUNTIME_INC_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
else()
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${RUNTIME_INC_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "train*" EXCLUDE)
|
||||
endif()
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/${MINDSPORE_LITE_LIB_NAME}.so DESTINATION ${RUNTIME_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/${MINDSPORE_LITE_LIB_NAME}.a DESTINATION ${RUNTIME_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/core/ir/dtype/type_id.h DESTINATION ${RUNTIME_INC_DIR}/ir/dtype
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(DIRECTORY ${TOP_DIR}/include/api/ DESTINATION ${RUNTIME_INC_DIR}/api
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "ops*" EXCLUDE)
|
||||
file(GLOB NNACL_FILES GLOB ${TOP_DIR}/mindspore/lite/nnacl/*.h)
|
||||
install(FILES ${NNACL_FILES} DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/base DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/int8 DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/fp32 DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/intrinsics DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/micro/coder/wrapper DESTINATION ${CODEGEN_ROOT_DIR}/include
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(TARGETS wrapper ARCHIVE DESTINATION ${CODEGEN_ROOT_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
if(ENABLE_TOOLS)
|
||||
install(TARGETS ${BENCHMARK_NAME} RUNTIME DESTINATION ${BENCHMARK_ROOT_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
endif()
|
||||
elseif(PLATFORM_ARM32)
|
||||
if(SUPPORT_TRAIN)
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${RUNTIME_INC_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
else()
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${RUNTIME_INC_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "train*" EXCLUDE)
|
||||
endif()
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/${MINDSPORE_LITE_LIB_NAME}.so DESTINATION ${RUNTIME_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/${MINDSPORE_LITE_LIB_NAME}.a DESTINATION ${RUNTIME_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/core/ir/dtype/type_id.h DESTINATION ${RUNTIME_INC_DIR}/ir/dtype
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(DIRECTORY ${TOP_DIR}/include/api/ DESTINATION ${RUNTIME_INC_DIR}/api
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "ops*" EXCLUDE)
|
||||
file(GLOB NNACL_FILES GLOB ${TOP_DIR}/mindspore/lite/nnacl/*.h)
|
||||
install(FILES ${NNACL_FILES} DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/base DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/int8 DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/fp32 DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/intrinsics DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/micro/coder/wrapper DESTINATION ${CODEGEN_ROOT_DIR}/include
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(TARGETS wrapper ARCHIVE DESTINATION ${CODEGEN_ROOT_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
if(ENABLE_TOOLS)
|
||||
install(TARGETS ${BENCHMARK_NAME} RUNTIME DESTINATION ${BENCHMARK_ROOT_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
endif()
|
||||
elseif(WIN32)
|
||||
elseif (WIN32)
|
||||
get_filename_component(CXX_DIR ${CMAKE_CXX_COMPILER} PATH)
|
||||
file(GLOB LIB_LIST ${CXX_DIR}/libstdc++-6.dll ${CXX_DIR}/libwinpthread-1.dll
|
||||
${CXX_DIR}/libssp-0.dll ${CXX_DIR}/libgcc_s_seh-1.dll)
|
||||
if(ENABLE_CONVERTER)
|
||||
install(TARGETS converter_lite RUNTIME DESTINATION ${CONVERTER_ROOT_DIR}/converter
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${LIB_LIST} DESTINATION ${CONVERTER_ROOT_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/build/mindspore/tools/converter/mindspore_core/gvar/libmindspore_gvar.dll
|
||||
DESTINATION ${CONVERTER_ROOT_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${glog_LIBPATH}/../bin/libglog.dll DESTINATION ${CONVERTER_ROOT_DIR}/lib
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(TARGETS codegen RUNTIME DESTINATION ${CODEGEN_ROOT_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
file(GLOB LIB_LIST ${CXX_DIR}/libstdc++-6.dll ${CXX_DIR}/libwinpthread-1.dll ${CXX_DIR}/libssp-0.dll ${CXX_DIR}/libgcc_s_seh-1.dll)
|
||||
if (ENABLE_CONVERTER)
|
||||
install(TARGETS converter_lite RUNTIME DESTINATION ${MAIN_DIR}-${COMPONENT_NAME}/converter COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${LIB_LIST} DESTINATION ${MAIN_DIR}-${COMPONENT_NAME}/converter COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/build/mindspore/tools/converter/mindspore_core/gvar/libmindspore_gvar.dll DESTINATION ${MAIN_DIR}-${COMPONENT_NAME}/converter COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${glog_LIBPATH}/../bin/libglog.dll DESTINATION ${MAIN_DIR}-${COMPONENT_NAME}/converter COMPONENT ${COMPONENT_NAME})
|
||||
endif ()
|
||||
if (ENABLE_TOOLS)
|
||||
install(TARGETS benchmark RUNTIME DESTINATION ${MAIN_DIR}-${WIN_RUN_X86_NAME}/benchmark COMPONENT ${WIN_RUN_X86_NAME})
|
||||
install(FILES ${LIB_LIST} DESTINATION ${MAIN_DIR}-${WIN_RUN_X86_NAME}/benchmark COMPONENT ${WIN_RUN_X86_NAME})
|
||||
install(DIRECTORY ${flatbuffers_INC} DESTINATION ${MAIN_DIR}-${WIN_RUN_X86_NAME}/third_party/flatbuffers COMPONENT ${WIN_RUN_X86_NAME})
|
||||
set(WIN_INC_DIR_RUN_X86 ${MAIN_DIR}-${WIN_RUN_X86_NAME}/include)
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${WIN_INC_DIR_RUN_X86} COMPONENT ${WIN_RUN_X86_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(FILES ${TOP_DIR}/build/mindspore/schema/model_generated.h DESTINATION ${WIN_INC_DIR_RUN_X86}/schema COMPONENT ${WIN_RUN_X86_NAME})
|
||||
install(FILES ${TOP_DIR}/build/mindspore/schema/ops_generated.h DESTINATION ${WIN_INC_DIR_RUN_X86}/schema COMPONENT ${WIN_RUN_X86_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/core/ir/dtype/type_id.h DESTINATION ${WIN_INC_DIR_RUN_X86}/ir/dtype COMPONENT ${WIN_RUN_X86_NAME})
|
||||
set(WIN_LIB_DIR_RUN_X86 ${MAIN_DIR}-${WIN_RUN_X86_NAME}/benchmark)
|
||||
install(FILES ${TOP_DIR}/build/mindspore/src/libmindspore-lite.a DESTINATION ${WIN_LIB_DIR_RUN_X86} COMPONENT ${WIN_RUN_X86_NAME})
|
||||
install(FILES ${TOP_DIR}/build/mindspore/src/libmindspore-lite.dll.a DESTINATION ${WIN_LIB_DIR_RUN_X86} COMPONENT ${WIN_RUN_X86_NAME})
|
||||
install(FILES ${TOP_DIR}/build/mindspore/src/libmindspore-lite.dll DESTINATION ${WIN_LIB_DIR_RUN_X86} COMPONENT ${WIN_RUN_X86_NAME})
|
||||
endif()
|
||||
if(ENABLE_TOOLS)
|
||||
install(TARGETS ${BENCHMARK_NAME} RUNTIME DESTINATION ${BENCHMARK_ROOT_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
else ()
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${INC_DIR_RUN_X86} COMPONENT ${RUN_X86_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/schema/model_generated.h DESTINATION ${INC_DIR_RUN_X86}/schema COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/schema/ops_generated.h DESTINATION ${INC_DIR_RUN_X86}/schema COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/core/ir/dtype/type_id.h DESTINATION ${INC_DIR_RUN_X86}/ir/dtype COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
install(DIRECTORY ${flatbuffers_INC} DESTINATION ${FLATBF_DIR_RUN_X86} COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/libmindspore-lite.so DESTINATION ${LIB_DIR_RUN_X86} COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/libmindspore-lite.a DESTINATION ${LIB_DIR_RUN_X86} COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
if (ENABLE_CONVERTER)
|
||||
install(TARGETS converter_lite RUNTIME DESTINATION ${MAIN_DIR}-${COMPONENT_NAME}/converter COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/tools/converter/mindspore_core/gvar/libmindspore_gvar.so DESTINATION ${MAIN_DIR}-${COMPONENT_NAME}/lib COMPONENT ${COMPONENT_NAME})
|
||||
install(FILES ${glog_LIBPATH}/libglog.so.0.4.0 DESTINATION ${MAIN_DIR}-${COMPONENT_NAME}/third_party/glog/lib RENAME libglog.so.0 COMPONENT ${COMPONENT_NAME})
|
||||
endif()
|
||||
install(FILES ${LIB_LIST} DESTINATION ${RUNTIME_LIB_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(DIRECTORY ${flatbuffers_INC} DESTINATION ${RUNTIME_INC_DIR}/third_party/
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
if(SUPPORT_TRAIN)
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${RUNTIME_INC_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
else()
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${RUNTIME_INC_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "train*" EXCLUDE)
|
||||
if (ENABLE_TOOLS)
|
||||
install(TARGETS benchmark RUNTIME DESTINATION ${MAIN_DIR}-${RUN_X86_COMPONENT_NAME}/benchmark COMPONENT ${RUN_X86_COMPONENT_NAME})
|
||||
endif()
|
||||
install(FILES ${TOP_DIR}/mindspore/core/ir/dtype/type_id.h DESTINATION ${RUNTIME_INC_DIR}/ir/dtype
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(DIRECTORY ${TOP_DIR}/include/api/ DESTINATION ${RUNTIME_INC_DIR}/api
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "ops*" EXCLUDE)
|
||||
install(FILES ${TOP_DIR}/build/mindspore/src/${MINDSPORE_LITE_LIB_NAME}.a DESTINATION ${RUNTIME_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/build/mindspore/src/${MINDSPORE_LITE_LIB_NAME}.dll.a DESTINATION ${RUNTIME_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/build/mindspore/src/${MINDSPORE_LITE_LIB_NAME}.dll DESTINATION ${RUNTIME_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
else()
|
||||
if(SUPPORT_TRAIN)
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${RUNTIME_INC_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
else()
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/include/ DESTINATION ${RUNTIME_INC_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "train*" EXCLUDE)
|
||||
endif()
|
||||
install(FILES ${TOP_DIR}/mindspore/core/ir/dtype/type_id.h DESTINATION ${RUNTIME_INC_DIR}/ir/dtype
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(DIRECTORY ${TOP_DIR}/include/api/ DESTINATION ${RUNTIME_INC_DIR}/api
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "ops*" EXCLUDE)
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/${MINDSPORE_LITE_LIB_NAME}.so DESTINATION ${RUNTIME_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/src/${MINDSPORE_LITE_LIB_NAME}.a DESTINATION ${RUNTIME_LIB_DIR}
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
if(ENABLE_CONVERTER)
|
||||
install(TARGETS converter_lite RUNTIME DESTINATION ${CONVERTER_ROOT_DIR}/converter
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/tools/converter/mindspore_core/gvar/libmindspore_gvar.so
|
||||
DESTINATION ${CONVERTER_ROOT_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${glog_LIBPATH}/libglog.so.0.4.0
|
||||
DESTINATION ${CONVERTER_ROOT_DIR}/third_party/glog/lib RENAME libglog.so.0
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
file(GLOB NNACL_FILES GLOB ${TOP_DIR}/mindspore/lite/nnacl/*.h)
|
||||
install(FILES ${NNACL_FILES} DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/base DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/int8 DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/fp32 DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/nnacl/intrinsics DESTINATION ${CODEGEN_ROOT_DIR}/include/nnacl
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${TOP_DIR}/mindspore/lite/micro/coder/wrapper DESTINATION ${CODEGEN_ROOT_DIR}/include
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(TARGETS wrapper ARCHIVE DESTINATION ${CODEGEN_ROOT_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
set(MICRO_CMSIS_DIR ${CMAKE_BINARY_DIR}/cmsis/CMSIS)
|
||||
install(DIRECTORY ${MICRO_CMSIS_DIR}/Core/Include DESTINATION ${CODEGEN_ROOT_DIR}/third_party/include/CMSIS/Core
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${MICRO_CMSIS_DIR}/DSP/Include DESTINATION ${CODEGEN_ROOT_DIR}/third_party/include/CMSIS/DSP
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(DIRECTORY ${MICRO_CMSIS_DIR}/NN/Include DESTINATION ${CODEGEN_ROOT_DIR}/third_party/include/CMSIS/NN
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h")
|
||||
install(TARGETS cmsis_nn ARCHIVE DESTINATION ${CODEGEN_ROOT_DIR}/third_party/lib
|
||||
COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(TARGETS codegen RUNTIME DESTINATION ${CODEGEN_ROOT_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
endif()
|
||||
if(ENABLE_TOOLS)
|
||||
install(TARGETS ${BENCHMARK_NAME} RUNTIME DESTINATION ${BENCHMARK_ROOT_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(TARGETS cropper RUNTIME DESTINATION ${CROPPER_ROOT_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
install(FILES ${TOP_DIR}/mindspore/lite/build/tools/cropper/cropper_mapping_cpu.cfg
|
||||
DESTINATION ${CROPPER_ROOT_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME})
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
set(CPACK_GENERATOR ZIP)
|
||||
else()
|
||||
else ()
|
||||
set(CPACK_GENERATOR TGZ)
|
||||
endif()
|
||||
|
||||
endif ()
|
||||
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
|
||||
set(CPACK_COMPONENTS_ALL ${RUNTIME_COMPONENT_NAME})
|
||||
if (PLATFORM_ARM64 OR PLATFORM_ARM32)
|
||||
set(CPACK_COMPONENTS_ALL ${COMPONENT_NAME})
|
||||
elseif (WIN32)
|
||||
set(CPACK_COMPONENTS_ALL ${COMPONENT_NAME} ${WIN_RUN_X86_NAME})
|
||||
else ()
|
||||
set(CPACK_COMPONENTS_ALL ${COMPONENT_NAME} ${RUN_X86_COMPONENT_NAME})
|
||||
endif ()
|
||||
set(CPACK_PACKAGE_FILE_NAME ${MAIN_DIR})
|
||||
|
||||
if(WIN32)
|
||||
if (WIN32)
|
||||
set(CPACK_PACKAGE_DIRECTORY ${TOP_DIR}/output)
|
||||
else()
|
||||
else ()
|
||||
set(CPACK_PACKAGE_DIRECTORY ${TOP_DIR}/output/tmp)
|
||||
endif()
|
||||
set(CPACK_PACKAGE_CHECKSUM SHA256)
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
# find exec
|
||||
find_package(Python3 COMPONENTS Interpreter)
|
||||
if(NOT Python3_FOUND)
|
||||
find_package(Python3 3.7 COMPONENTS Interpreter)
|
||||
if (NOT Python3_FOUND)
|
||||
message(FATAL_ERROR "No python3 found.")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
set(PYTHON ${Python3_EXECUTABLE})
|
||||
set(PYTHON_VERSION ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR})
|
||||
|
||||
if(NOT (PYTHON_VERSION MATCHES "3.9" OR PYTHON_VERSION MATCHES "3.8" OR PYTHON_VERSION MATCHES "3.7"))
|
||||
message(FATAL_ERROR "FIND PYTHON VERSION ${PYTHON_VERSION} BUT CAN NOT MATCH PYTHON VERSION 3.9 OR 3.8 OR 3.7")
|
||||
endif()
|
||||
if (NOT PYTHON_VERSION MATCHES "3.7")
|
||||
message(FATAL_ERROR "FIND PYTHON VERSION ${PYTHON_VERSION} BUT CAN NOT MATCH PYTHON VERSION 3.7")
|
||||
endif ()
|
||||
|
||||
find_package(Git)
|
||||
if(NOT GIT_FOUND)
|
||||
if (NOT GIT_FOUND)
|
||||
message("No git found.")
|
||||
return()
|
||||
endif()
|
||||
return ()
|
||||
endif ()
|
||||
set(GIT ${GIT_EXECUTABLE})
|
||||
|
||||
# set path
|
||||
|
|
@ -23,45 +23,33 @@ set(MS_ROOT_DIR ${CPACK_PACKAGE_DIRECTORY}/../../)
|
|||
set(MS_PACK_ROOT_DIR ${MS_ROOT_DIR}/build/package)
|
||||
|
||||
# set package file name
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
set(PY_TAGS "cp39-cp39")
|
||||
elseif(PYTHON_VERSION MATCHES "3.8")
|
||||
set(PY_TAGS "cp38-cp38")
|
||||
elseif(PYTHON_VERSION MATCHES "3.7")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
if (PYTHON_VERSION MATCHES "3.7")
|
||||
set(PY_TAGS "cp37-cp37m")
|
||||
else()
|
||||
message("Could not find 'Python 3.9' OR 'Python 3.8' or 'Python 3.7'")
|
||||
else ()
|
||||
message("Could not find 'Python 3.7'")
|
||||
return()
|
||||
endif()
|
||||
endif ()
|
||||
string(TOLOWER linux_${CMAKE_HOST_SYSTEM_PROCESSOR} PLATFORM_TAG)
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
set(PY_TAGS "py39-none")
|
||||
elseif(PYTHON_VERSION MATCHES "3.8")
|
||||
set(PY_TAGS "py38-none")
|
||||
elseif(PYTHON_VERSION MATCHES "3.7")
|
||||
elseif (CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
if (PYTHON_VERSION MATCHES "3.7")
|
||||
set(PY_TAGS "py37-none")
|
||||
else()
|
||||
message("Could not find 'Python 3.9' OR 'Python 3.8' or 'Python 3.7'")
|
||||
else ()
|
||||
message("Could not find 'Python 3.7'")
|
||||
return()
|
||||
endif()
|
||||
endif ()
|
||||
set(PLATFORM_TAG "any")
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if(PYTHON_VERSION MATCHES "3.9")
|
||||
set(PY_TAGS "cp39-cp39")
|
||||
elseif(PYTHON_VERSION MATCHES "3.8")
|
||||
set(PY_TAGS "cp38-cp38")
|
||||
elseif(PYTHON_VERSION MATCHES "3.7")
|
||||
elseif (CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (PYTHON_VERSION MATCHES "3.7")
|
||||
set(PY_TAGS "cp37-cp37m")
|
||||
else()
|
||||
message("Could not find 'Python 3.9' OR 'Python 3.8' or 'Python 3.7'")
|
||||
else ()
|
||||
message("Could not find 'Python 3.7'")
|
||||
return()
|
||||
endif()
|
||||
endif ()
|
||||
set(PLATFORM_TAG "win_amd64")
|
||||
else()
|
||||
else ()
|
||||
message(FATAL_ERROR "other platform: ${CMAKE_SYSTEM_NAME}")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# get git commit id
|
||||
set(GIT_COMMIT_ID "")
|
||||
|
|
@ -84,13 +72,13 @@ execute_process(
|
|||
|
||||
# finally
|
||||
set(PACKAGE_NAME ${CPACK_MS_PACKAGE_NAME})
|
||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
string(REPLACE "-" "_" PACKAGE_NAME ${PACKAGE_NAME})
|
||||
execute_process(
|
||||
COMMAND chmod -R 700 ${MS_PACK_ROOT_DIR}/mindspore/
|
||||
COMMAND chmod -R 700 ${MS_PACK_ROOT_DIR}/${PACKAGE_NAME}.egg-info/
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
file(GLOB WHL_FILE ${MS_PACK_ROOT_DIR}/dist/*.whl)
|
||||
get_filename_component(ORIGIN_FILE_NAME ${WHL_FILE} NAME)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
include(FetchContent)
|
||||
set(FETCHCONTENT_QUIET OFF)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows" AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.17.0)
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "Windows" AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.17.0)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .dll ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
function(mindspore_add_submodule_obj des_submodule_objs sub_dir submodule_name_obj)
|
||||
|
||||
|
|
@ -20,45 +20,45 @@ function(mindspore_add_submodule_obj des_submodule_objs sub_dir submodule_name_o
|
|||
|
||||
endfunction()
|
||||
|
||||
if(DEFINED ENV{MSLIBS_CACHE_PATH})
|
||||
if (DEFINED ENV{MSLIBS_CACHE_PATH})
|
||||
set(_MS_LIB_CACHE $ENV{MSLIBS_CACHE_PATH})
|
||||
else()
|
||||
set(_MS_LIB_CACHE ${CMAKE_BINARY_DIR}/.mslib)
|
||||
endif()
|
||||
endif ()
|
||||
message("MS LIBS CACHE PATH: ${_MS_LIB_CACHE}")
|
||||
|
||||
if(NOT EXISTS ${_MS_LIB_CACHE})
|
||||
if (NOT EXISTS ${_MS_LIB_CACHE})
|
||||
file(MAKE_DIRECTORY ${_MS_LIB_CACHE})
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(DEFINED ENV{MSLIBS_SERVER} AND NOT ENABLE_GITEE)
|
||||
if (DEFINED ENV{MSLIBS_SERVER} AND NOT ENABLE_GITEE)
|
||||
set(LOCAL_LIBS_SERVER $ENV{MSLIBS_SERVER})
|
||||
message("LOCAL_LIBS_SERVER: ${LOCAL_LIBS_SERVER}")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
include(ProcessorCount)
|
||||
ProcessorCount(N)
|
||||
if(JOBS)
|
||||
if (JOBS)
|
||||
set(THNUM ${JOBS})
|
||||
else()
|
||||
set(JOBS 8)
|
||||
if(${JOBS} GREATER ${N})
|
||||
if (${JOBS} GREATER ${N})
|
||||
set(THNUM ${N})
|
||||
else()
|
||||
set(THNUM ${JOBS})
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
message("set make thread num: ${THNUM}")
|
||||
|
||||
if(LOCAL_LIBS_SERVER)
|
||||
if(NOT ENV{no_proxy})
|
||||
if (NOT ENV{no_proxy})
|
||||
set(ENV{no_proxy} "${LOCAL_LIBS_SERVER}")
|
||||
else()
|
||||
string(FIND $ENV{no_proxy} ${LOCAL_LIBS_SERVER} IP_POS)
|
||||
if(${IP_POS} EQUAL -1)
|
||||
if (${IP_POS} EQUAL -1)
|
||||
set(ENV{no_proxy} "$ENV{no_proxy},${LOCAL_LIBS_SERVER}")
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
endif ()
|
||||
endif()
|
||||
|
||||
function(__download_pkg pkg_name pkg_url pkg_md5)
|
||||
|
|
@ -92,10 +92,10 @@ function(__download_pkg_with_git pkg_name pkg_url pkg_git_commit pkg_md5)
|
|||
URL_HASH MD5=${pkg_md5}
|
||||
)
|
||||
else()
|
||||
FetchContent_Declare(
|
||||
FetchContent_Declare(
|
||||
${pkg_name}
|
||||
GIT_REPOSITORY ${pkg_url}
|
||||
GIT_TAG ${pkg_git_commit})
|
||||
GIT_REPOSITORY ${pkg_url}
|
||||
GIT_TAG ${pkg_git_commit})
|
||||
endif()
|
||||
FetchContent_GetProperties(${pkg_name})
|
||||
message("download: ${${pkg_name}_SOURCE_DIR} , ${pkg_name} , ${pkg_url}")
|
||||
|
|
@ -128,43 +128,46 @@ function(__find_pkg_then_add_target pkg_name pkg_exe lib_path)
|
|||
foreach(_LIB_NAME ${ARGN})
|
||||
set(_LIB_SEARCH_NAME ${_LIB_NAME})
|
||||
set(_LIB_TYPE SHARED)
|
||||
if(${pkg_name}_USE_STATIC_LIBS)
|
||||
if (${pkg_name}_USE_STATIC_LIBS)
|
||||
set(_LIB_SEARCH_NAME "${CMAKE_STATIC_LIBRARY_PREFIX}${_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
set(_LIB_TYPE STATIC)
|
||||
endif()
|
||||
endif ()
|
||||
set(${_LIB_NAME}_LIB ${_LIB_NAME}_LIB-NOTFOUND)
|
||||
find_library(${_LIB_NAME}_LIB ${_LIB_SEARCH_NAME} PATHS ${${pkg_name}_BASE_DIR}/${lib_path} NO_DEFAULT_PATH)
|
||||
if (NOT ${_LIB_NAME}_LIB AND BUILD_LITE AND PLATFORM_ARM)
|
||||
set(${_LIB_NAME}_LIB "${${pkg_name}_BASE_DIR}/${lib_path}/lib${_LIB_SEARCH_NAME}.so")
|
||||
endif(NOT ${_LIB_NAME}_LIB AND BUILD_LITE AND PLATFORM_ARM)
|
||||
if(NOT ${_LIB_NAME}_LIB)
|
||||
return()
|
||||
endif()
|
||||
|
||||
add_library(${pkg_name}::${_LIB_NAME} ${_LIB_TYPE} IMPORTED GLOBAL)
|
||||
if(WIN32 AND ${_LIB_TYPE} STREQUAL "SHARED")
|
||||
if (WIN32 AND ${_LIB_TYPE} STREQUAL "SHARED")
|
||||
set_target_properties(${pkg_name}::${_LIB_NAME} PROPERTIES IMPORTED_IMPLIB_RELEASE ${${_LIB_NAME}_LIB})
|
||||
else()
|
||||
set_target_properties(${pkg_name}::${_LIB_NAME} PROPERTIES IMPORTED_LOCATION ${${_LIB_NAME}_LIB})
|
||||
endif()
|
||||
|
||||
if(EXISTS ${${pkg_name}_BASE_DIR}/include)
|
||||
set_target_properties(${pkg_name}::${_LIB_NAME} PROPERTIES
|
||||
if (EXISTS ${${pkg_name}_BASE_DIR}/include)
|
||||
set_target_properties(${pkg_name}::${_LIB_NAME} PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${${pkg_name}_BASE_DIR}/include")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
list(APPEND ${pkg_name}_LIBS ${pkg_name}::${_LIB_NAME})
|
||||
message("found ${${_LIB_NAME}_LIB}")
|
||||
STRING(REGEX REPLACE "(.+)/(.+)" "\\1" LIBPATH ${${_LIB_NAME}_LIB})
|
||||
STRING( REGEX REPLACE "(.+)/(.+)" "\\1" LIBPATH ${${_LIB_NAME}_LIB})
|
||||
set(${pkg_name}_LIBPATH ${LIBPATH} CACHE STRING INTERNAL)
|
||||
endforeach()
|
||||
endforeach(_LIB_NAME)
|
||||
|
||||
set(${pkg_name}_LIBS ${${pkg_name}_LIBS} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(__exec_cmd)
|
||||
set(options)
|
||||
set(options )
|
||||
set(oneValueArgs WORKING_DIRECTORY)
|
||||
set(multiValueArgs COMMAND)
|
||||
|
||||
cmake_parse_arguments(EXEC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
cmake_parse_arguments(EXEC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
|
||||
|
||||
execute_process(COMMAND ${EXEC_COMMAND}
|
||||
WORKING_DIRECTORY ${EXEC_WORKING_DIRECTORY}
|
||||
|
|
@ -176,43 +179,41 @@ endfunction()
|
|||
|
||||
function(__check_patches pkg_patches)
|
||||
# check patches
|
||||
if(PKG_PATCHES)
|
||||
if (PKG_PATCHES)
|
||||
file(TOUCH ${_MS_LIB_CACHE}/${pkg_name}_patch.md5)
|
||||
file(READ ${_MS_LIB_CACHE}/${pkg_name}_patch.md5 ${pkg_name}_PATCHES_MD5)
|
||||
|
||||
message("patches md5:${${pkg_name}_PATCHES_MD5}")
|
||||
|
||||
set(${pkg_name}_PATCHES_NEW_MD5)
|
||||
set(${pkg_name}_PATCHES_NEW_MD5 )
|
||||
foreach(_PATCH ${PKG_PATCHES})
|
||||
file(MD5 ${_PATCH} _PF_MD5)
|
||||
set(${pkg_name}_PATCHES_NEW_MD5 "${${pkg_name}_PATCHES_NEW_MD5},${_PF_MD5}")
|
||||
endforeach()
|
||||
endforeach(_PATCH)
|
||||
|
||||
if(NOT ${pkg_name}_PATCHES_MD5 STREQUAL ${pkg_name}_PATCHES_NEW_MD5)
|
||||
if (NOT ${pkg_name}_PATCHES_MD5 STREQUAL ${pkg_name}_PATCHES_NEW_MD5)
|
||||
set(${pkg_name}_PATCHES ${PKG_PATCHES})
|
||||
file(REMOVE_RECURSE "${_MS_LIB_CACHE}/${pkg_name}-subbuild")
|
||||
file(WRITE ${_MS_LIB_CACHE}/${pkg_name}_patch.md5 ${${pkg_name}_PATCHES_NEW_MD5})
|
||||
message("patches changed : ${${pkg_name}_PATCHES_NEW_MD5}")
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
endif ()
|
||||
endfunction()
|
||||
|
||||
set(MS_FIND_NO_DEFAULT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH
|
||||
NO_CMAKE_BUILDS_PATH NO_CMAKE_PACKAGE_REGISTRY NO_CMAKE_SYSTEM_PATH
|
||||
NO_CMAKE_SYSTEM_PACKAGE_REGISTRY)
|
||||
set(MS_FIND_NO_DEFAULT_PATH ${MS_FIND_NO_DEFAULT_PATH} PARENT_SCOPE)
|
||||
function(mindspore_add_pkg pkg_name)
|
||||
function(mindspore_add_pkg pkg_name )
|
||||
|
||||
set(options)
|
||||
set(options )
|
||||
set(oneValueArgs URL MD5 GIT_REPOSITORY GIT_TAG VER EXE DIR HEAD_ONLY CMAKE_PATH RELEASE LIB_PATH CUSTOM_CMAKE)
|
||||
set(multiValueArgs
|
||||
CMAKE_OPTION LIBS PRE_CONFIGURE_COMMAND CONFIGURE_COMMAND BUILD_OPTION INSTALL_INCS
|
||||
INSTALL_LIBS PATCHES SUBMODULES SOURCEMODULES ONLY_MAKE ONLY_MAKE_INCS ONLY_MAKE_LIBS)
|
||||
cmake_parse_arguments(PKG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
set(multiValueArgs CMAKE_OPTION LIBS PRE_CONFIGURE_COMMAND CONFIGURE_COMMAND BUILD_OPTION INSTALL_INCS INSTALL_LIBS PATCHES SUBMODULES SOURCEMODULES ONLY_MAKE ONLY_MAKE_INCS ONLY_MAKE_LIBS)
|
||||
cmake_parse_arguments(PKG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
|
||||
|
||||
if(NOT PKG_LIB_PATH)
|
||||
if (NOT PKG_LIB_PATH)
|
||||
set(PKG_LIB_PATH lib)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(NOT PKG_EXE)
|
||||
set(PKG_EXE 0)
|
||||
|
|
@ -222,11 +223,11 @@ function(mindspore_add_pkg pkg_name)
|
|||
string(TOLOWER ${pkg_name} pkg_name)
|
||||
message("pkg name:${__FIND_PKG_NAME},${pkg_name}")
|
||||
|
||||
set(${pkg_name}_PATCHES_HASH)
|
||||
set(${pkg_name}_PATCHES_HASH )
|
||||
foreach(_PATCH ${PKG_PATCHES})
|
||||
file(MD5 ${_PATCH} _PF_MD5)
|
||||
set(${pkg_name}_PATCHES_HASH "${${pkg_name}_PATCHES_HASH},${_PF_MD5}")
|
||||
endforeach()
|
||||
endforeach(_PATCH)
|
||||
|
||||
# check options
|
||||
set(${pkg_name}_CONFIG_TXT
|
||||
|
|
@ -245,16 +246,16 @@ function(mindspore_add_pkg pkg_name)
|
|||
set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/${PKG_HEAD_ONLY} PARENT_SCOPE)
|
||||
add_library(${pkg_name} INTERFACE)
|
||||
target_include_directories(${pkg_name} INTERFACE ${${pkg_name}_INC})
|
||||
if(${PKG_RELEASE})
|
||||
if (${PKG_RELEASE})
|
||||
__find_pkg_then_add_target(${pkg_name} ${PKG_EXE} ${PKG_LIB_PATH} ${PKG_LIBS})
|
||||
endif()
|
||||
endif ()
|
||||
return()
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
set(${__FIND_PKG_NAME}_ROOT ${${pkg_name}_BASE_DIR})
|
||||
set(${__FIND_PKG_NAME}_ROOT ${${pkg_name}_BASE_DIR} PARENT_SCOPE)
|
||||
|
||||
if(PKG_LIBS)
|
||||
if (PKG_LIBS)
|
||||
__find_pkg_then_add_target(${pkg_name} ${PKG_EXE} ${PKG_LIB_PATH} ${PKG_LIBS})
|
||||
if(${pkg_name}_LIBS)
|
||||
set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/include PARENT_SCOPE)
|
||||
|
|
@ -263,28 +264,28 @@ function(mindspore_add_pkg pkg_name)
|
|||
endif()
|
||||
elseif(NOT PKG_HEAD_ONLY)
|
||||
find_package(${__FIND_PKG_NAME} ${PKG_VER} ${MS_FIND_NO_DEFAULT_PATH})
|
||||
if(${__FIND_PKG_NAME}_FOUND)
|
||||
if (${__FIND_PKG_NAME}_FOUND)
|
||||
set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/include PARENT_SCOPE)
|
||||
message("Found pkg: ${__FIND_PKG_NAME}")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if(NOT PKG_DIR)
|
||||
if(PKG_GIT_REPOSITORY)
|
||||
if (NOT PKG_DIR)
|
||||
if (PKG_GIT_REPOSITORY)
|
||||
__download_pkg_with_git(${pkg_name} ${PKG_GIT_REPOSITORY} ${PKG_GIT_TAG} ${PKG_MD5})
|
||||
else()
|
||||
__download_pkg(${pkg_name} ${PKG_URL} ${PKG_MD5})
|
||||
endif()
|
||||
foreach(_SUBMODULE_FILE ${PKG_SUBMODULES})
|
||||
STRING(REGEX REPLACE "(.+)_(.+)" "\\1" _SUBMODEPATH ${_SUBMODULE_FILE})
|
||||
STRING(REGEX REPLACE "(.+)/(.+)" "\\2" _SUBMODENAME ${_SUBMODEPATH})
|
||||
STRING( REGEX REPLACE "(.+)_(.+)" "\\1" _SUBMODEPATH ${_SUBMODULE_FILE})
|
||||
STRING( REGEX REPLACE "(.+)/(.+)" "\\2" _SUBMODENAME ${_SUBMODEPATH})
|
||||
file(GLOB ${pkg_name}_INSTALL_SUBMODULE ${_SUBMODULE_FILE}/*)
|
||||
file(COPY ${${pkg_name}_INSTALL_SUBMODULE} DESTINATION ${${pkg_name}_SOURCE_DIR}/3rdparty/${_SUBMODENAME})
|
||||
endforeach()
|
||||
endforeach (_SUBMODULE_FILE)
|
||||
else()
|
||||
set(${pkg_name}_SOURCE_DIR ${PKG_DIR})
|
||||
endif()
|
||||
endif ()
|
||||
file(WRITE ${${pkg_name}_BASE_DIR}/options.txt ${${pkg_name}_CONFIG_TXT})
|
||||
message("${pkg_name}_SOURCE_DIR : ${${pkg_name}_SOURCE_DIR}")
|
||||
|
||||
|
|
@ -300,32 +301,32 @@ function(mindspore_add_pkg pkg_name)
|
|||
if(NOT Result EQUAL "0")
|
||||
message(FATAL_ERROR "Failed patch: ${_LF_PATCH_FILE}")
|
||||
endif()
|
||||
endforeach()
|
||||
endforeach(_PATCH_FILE)
|
||||
foreach(_SOURCE_DIR ${PKG_SOURCEMODULES})
|
||||
file(GLOB ${pkg_name}_INSTALL_SOURCE ${${pkg_name}_SOURCE_DIR}/${_SOURCE_DIR}/*)
|
||||
file(COPY ${${pkg_name}_INSTALL_SOURCE} DESTINATION ${${pkg_name}_BASE_DIR}/${_SOURCE_DIR}/)
|
||||
endforeach()
|
||||
endforeach (_SUBMODULE_FILE)
|
||||
file(LOCK ${${pkg_name}_BASE_DIR} DIRECTORY GUARD FUNCTION RESULT_VARIABLE ${pkg_name}_LOCK_RET TIMEOUT 600)
|
||||
if(NOT ${pkg_name}_LOCK_RET EQUAL "0")
|
||||
message(FATAL_ERROR "error! when try lock ${${pkg_name}_BASE_DIR} : ${${pkg_name}_LOCK_RET}")
|
||||
endif()
|
||||
|
||||
if(PKG_CUSTOM_CMAKE)
|
||||
if (PKG_CUSTOM_CMAKE)
|
||||
file(GLOB ${pkg_name}_cmake ${PKG_CUSTOM_CMAKE}/CMakeLists.txt)
|
||||
file(COPY ${${pkg_name}_cmake} DESTINATION ${${pkg_name}_SOURCE_DIR})
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(${pkg_name}_SOURCE_DIR)
|
||||
if(PKG_HEAD_ONLY)
|
||||
if (PKG_HEAD_ONLY)
|
||||
file(GLOB ${pkg_name}_SOURCE_SUBDIRS ${${pkg_name}_SOURCE_DIR}/*)
|
||||
file(COPY ${${pkg_name}_SOURCE_SUBDIRS} DESTINATION ${${pkg_name}_BASE_DIR})
|
||||
set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/${PKG_HEAD_ONLY} PARENT_SCOPE)
|
||||
if(NOT PKG_RELEASE)
|
||||
if (NOT PKG_RELEASE)
|
||||
add_library(${pkg_name} INTERFACE)
|
||||
target_include_directories(${pkg_name} INTERFACE ${${pkg_name}_INC})
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
elseif(PKG_ONLY_MAKE)
|
||||
elseif (PKG_ONLY_MAKE)
|
||||
__exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} ${${pkg_name}_CXXFLAGS} -j${THNUM}
|
||||
WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR})
|
||||
set(PKG_INSTALL_INCS ${PKG_ONLY_MAKE_INCS})
|
||||
|
|
@ -335,84 +336,75 @@ function(mindspore_add_pkg pkg_name)
|
|||
file(COPY ${${pkg_name}_INSTALL_INCS} DESTINATION ${${pkg_name}_BASE_DIR}/include)
|
||||
file(COPY ${${pkg_name}_INSTALL_LIBS} DESTINATION ${${pkg_name}_BASE_DIR}/lib)
|
||||
|
||||
elseif(PKG_CMAKE_OPTION)
|
||||
elseif (PKG_CMAKE_OPTION)
|
||||
# in cmake
|
||||
file(MAKE_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build)
|
||||
if(${pkg_name}_CFLAGS)
|
||||
if (${pkg_name}_CFLAGS)
|
||||
set(${pkg_name}_CMAKE_CFLAGS "-DCMAKE_C_FLAGS=${${pkg_name}_CFLAGS}")
|
||||
endif()
|
||||
if(${pkg_name}_CXXFLAGS)
|
||||
endif ()
|
||||
if (${pkg_name}_CXXFLAGS)
|
||||
set(${pkg_name}_CMAKE_CXXFLAGS "-DCMAKE_CXX_FLAGS=${${pkg_name}_CXXFLAGS}")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(${pkg_name}_LDFLAGS)
|
||||
if(${pkg_name}_USE_STATIC_LIBS)
|
||||
if (${pkg_name}_LDFLAGS)
|
||||
if (${pkg_name}_USE_STATIC_LIBS)
|
||||
#set(${pkg_name}_CMAKE_LDFLAGS "-DCMAKE_STATIC_LINKER_FLAGS=${${pkg_name}_LDFLAGS}")
|
||||
else()
|
||||
set(${pkg_name}_CMAKE_LDFLAGS "-DCMAKE_SHARED_LINKER_FLAGS=${${pkg_name}_LDFLAGS}")
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
__exec_cmd(COMMAND ${CMAKE_COMMAND} ${PKG_CMAKE_OPTION} -G ${CMAKE_GENERATOR}
|
||||
${${pkg_name}_CMAKE_CFLAGS} ${${pkg_name}_CMAKE_CXXFLAGS} ${${pkg_name}_CMAKE_LDFLAGS}
|
||||
-DCMAKE_INSTALL_PREFIX=${${pkg_name}_BASE_DIR} ${${pkg_name}_SOURCE_DIR}/${PKG_CMAKE_PATH}
|
||||
WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build)
|
||||
|
||||
if(APPLE)
|
||||
__exec_cmd(COMMAND ${CMAKE_COMMAND} --build . --target install --
|
||||
WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build)
|
||||
else()
|
||||
__exec_cmd(COMMAND ${CMAKE_COMMAND} --build . --target install -- -j${THNUM}
|
||||
WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build)
|
||||
endif()
|
||||
__exec_cmd(COMMAND ${CMAKE_COMMAND} --build . --target install -- -j${THNUM}
|
||||
WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build)
|
||||
|
||||
else()
|
||||
if(${pkg_name}_CFLAGS)
|
||||
if (${pkg_name}_CFLAGS)
|
||||
set(${pkg_name}_MAKE_CFLAGS "CFLAGS=${${pkg_name}_CFLAGS}")
|
||||
endif()
|
||||
if(${pkg_name}_CXXFLAGS)
|
||||
endif ()
|
||||
if (${pkg_name}_CXXFLAGS)
|
||||
set(${pkg_name}_MAKE_CXXFLAGS "CXXFLAGS=${${pkg_name}_CXXFLAGS}")
|
||||
endif()
|
||||
if(${pkg_name}_LDFLAGS)
|
||||
endif ()
|
||||
if (${pkg_name}_LDFLAGS)
|
||||
set(${pkg_name}_MAKE_LDFLAGS "LDFLAGS=${${pkg_name}_LDFLAGS}")
|
||||
endif()
|
||||
endif ()
|
||||
# in configure && make
|
||||
if(PKG_PRE_CONFIGURE_COMMAND)
|
||||
if (PKG_PRE_CONFIGURE_COMMAND)
|
||||
__exec_cmd(COMMAND ${PKG_PRE_CONFIGURE_COMMAND}
|
||||
WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR})
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(PKG_CONFIGURE_COMMAND)
|
||||
if (PKG_CONFIGURE_COMMAND)
|
||||
__exec_cmd(COMMAND ${PKG_CONFIGURE_COMMAND}
|
||||
${${pkg_name}_MAKE_CFLAGS} ${${pkg_name}_MAKE_CXXFLAGS} ${${pkg_name}_MAKE_LDFLAGS}
|
||||
--prefix=${${pkg_name}_BASE_DIR}
|
||||
WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR})
|
||||
endif()
|
||||
endif ()
|
||||
set(${pkg_name}_BUILD_OPTION ${PKG_BUILD_OPTION})
|
||||
if(NOT PKG_CONFIGURE_COMMAND)
|
||||
if (NOT PKG_CONFIGURE_COMMAND)
|
||||
set(${pkg_name}_BUILD_OPTION ${${pkg_name}_BUILD_OPTION}
|
||||
${${pkg_name}_MAKE_CFLAGS} ${${pkg_name}_MAKE_CXXFLAGS} ${${pkg_name}_MAKE_LDFLAGS})
|
||||
endif()
|
||||
endif ()
|
||||
# build
|
||||
if(APPLE)
|
||||
__exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} ${${pkg_name}_BUILD_OPTION}
|
||||
WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR})
|
||||
else()
|
||||
__exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} ${${pkg_name}_BUILD_OPTION} -j${THNUM}
|
||||
WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR})
|
||||
endif()
|
||||
__exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} ${${pkg_name}_BUILD_OPTION} -j${THNUM}
|
||||
WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR})
|
||||
|
||||
if(PKG_INSTALL_INCS OR PKG_INSTALL_LIBS)
|
||||
if (PKG_INSTALL_INCS OR PKG_INSTALL_LIBS)
|
||||
file(GLOB ${pkg_name}_INSTALL_INCS ${${pkg_name}_SOURCE_DIR}/${PKG_INSTALL_INCS})
|
||||
file(GLOB ${pkg_name}_INSTALL_LIBS ${${pkg_name}_SOURCE_DIR}/${PKG_INSTALL_LIBS})
|
||||
file(COPY ${${pkg_name}_INSTALL_INCS} DESTINATION ${${pkg_name}_BASE_DIR}/include)
|
||||
file(COPY ${${pkg_name}_INSTALL_LIBS} DESTINATION ${${pkg_name}_BASE_DIR}/lib)
|
||||
else()
|
||||
__exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} install WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR})
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
endif ()
|
||||
endif()
|
||||
|
||||
if(PKG_LIBS)
|
||||
if (PKG_LIBS)
|
||||
__find_pkg_then_add_target(${pkg_name} ${PKG_EXE} ${PKG_LIB_PATH} ${PKG_LIBS})
|
||||
set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/include PARENT_SCOPE)
|
||||
if(NOT ${pkg_name}_LIBS)
|
||||
|
|
@ -420,10 +412,10 @@ function(mindspore_add_pkg pkg_name)
|
|||
endif()
|
||||
else()
|
||||
find_package(${__FIND_PKG_NAME} ${PKG_VER} QUIET ${MS_FIND_NO_DEFAULT_PATH})
|
||||
if(${__FIND_PKG_NAME}_FOUND)
|
||||
if (${__FIND_PKG_NAME}_FOUND)
|
||||
set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/include PARENT_SCOPE)
|
||||
message("Found pkg: ${${__FIND_PKG_NAME}_LIBRARIES}")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
endif ()
|
||||
endfunction()
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -4,7 +4,7 @@ MAINTAINER leonwanghui <leon.wanghui@huawei.com>
|
|||
|
||||
# Set env
|
||||
ENV PYTHON_ROOT_PATH /usr/local/python-3.7.5
|
||||
ENV PATH /usr/local/bin:/root/.local/bin:$PATH
|
||||
ENV PATH /usr/local/bin:$PATH
|
||||
|
||||
# Install base tools
|
||||
RUN apt update \
|
||||
|
|
|
|||
|
|
@ -1,71 +0,0 @@
|
|||
FROM ubuntu:18.04
|
||||
|
||||
MAINTAINER leonwanghui <leon.wanghui@huawei.com>
|
||||
|
||||
# Set env
|
||||
ENV PYTHON_ROOT_PATH /usr/local/python-3.7.5
|
||||
ENV PATH /usr/local/bin:/root/.local/bin:$PATH
|
||||
|
||||
# Install base tools
|
||||
RUN apt update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt install -y \
|
||||
vim \
|
||||
wget \
|
||||
curl \
|
||||
xz-utils \
|
||||
net-tools \
|
||||
openssh-client \
|
||||
git \
|
||||
ntpdate \
|
||||
tzdata \
|
||||
tcl \
|
||||
sudo \
|
||||
bash-completion
|
||||
|
||||
# Install compile tools
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
||||
gcc \
|
||||
g++ \
|
||||
zlibc \
|
||||
make \
|
||||
libgmp-dev \
|
||||
patch \
|
||||
autoconf \
|
||||
libtool \
|
||||
automake \
|
||||
flex
|
||||
|
||||
# Install the rest dependent tools
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
||||
libnuma-dev
|
||||
|
||||
# Set bash
|
||||
RUN echo "dash dash/sh boolean false" | debconf-set-selections
|
||||
RUN DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
|
||||
|
||||
# Install python (v3.7.5)
|
||||
RUN apt install -y libffi-dev libssl-dev zlib1g-dev libbz2-dev libncurses5-dev \
|
||||
libgdbm-dev libgdbm-compat-dev liblzma-dev libreadline-dev libsqlite3-dev \
|
||||
&& cd /tmp \
|
||||
&& wget https://github.com/python/cpython/archive/v3.7.5.tar.gz \
|
||||
&& tar -xvf v3.7.5.tar.gz \
|
||||
&& cd /tmp/cpython-3.7.5 \
|
||||
&& mkdir -p ${PYTHON_ROOT_PATH} \
|
||||
&& ./configure --prefix=${PYTHON_ROOT_PATH} \
|
||||
&& make -j4 \
|
||||
&& make install -j4 \
|
||||
&& rm -f /usr/local/bin/python \
|
||||
&& rm -f /usr/local/bin/pip \
|
||||
&& ln -s ${PYTHON_ROOT_PATH}/bin/python3.7 /usr/local/bin/python \
|
||||
&& ln -s ${PYTHON_ROOT_PATH}/bin/pip3.7 /usr/local/bin/pip \
|
||||
&& rm -rf /tmp/cpython-3.7.5 \
|
||||
&& rm -f /tmp/v3.7.5.tar.gz
|
||||
|
||||
# Set pip source
|
||||
RUN mkdir -pv /root/.pip \
|
||||
&& echo "[global]" > /root/.pip/pip.conf \
|
||||
&& echo "trusted-host=mirrors.aliyun.com" >> /root/.pip/pip.conf \
|
||||
&& echo "index-url=http://mirrors.aliyun.com/pypi/simple/" >> /root/.pip/pip.conf
|
||||
|
||||
# Install MindSpore cpu whl package
|
||||
RUN pip install --no-cache-dir https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.1.0/MindSpore/cpu/ubuntu_x86/mindspore-1.1.0-cp37-cp37m-linux_x86_64.whl
|
||||
|
|
@ -37,10 +37,6 @@ RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
|||
automake \
|
||||
flex
|
||||
|
||||
# Install the rest dependent tools
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
||||
libnuma-dev
|
||||
|
||||
# Set bash
|
||||
RUN echo "dash dash/sh boolean false" | debconf-set-selections
|
||||
RUN DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
|
||||
|
|
|
|||
|
|
@ -35,10 +35,6 @@ RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
|||
automake \
|
||||
flex
|
||||
|
||||
# Install the rest dependent tools
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
||||
libnuma-dev
|
||||
|
||||
# Set bash
|
||||
RUN echo "dash dash/sh boolean false" | debconf-set-selections
|
||||
RUN DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
|
||||
|
|
|
|||
|
|
@ -1,85 +0,0 @@
|
|||
FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04
|
||||
|
||||
MAINTAINER leonwanghui <leon.wanghui@huawei.com>
|
||||
|
||||
# Set env
|
||||
ENV PYTHON_ROOT_PATH /usr/local/python-3.7.5
|
||||
ENV OMPI_ROOT_PATH /usr/local/openmpi-4.0.3
|
||||
ENV PATH ${OMPI_ROOT_PATH}/bin:/usr/local/bin:$PATH
|
||||
ENV LD_LIBRARY_PATH ${OMPI_ROOT_PATH}/lib:$LD_LIBRARY_PATH
|
||||
|
||||
# Install base tools
|
||||
RUN apt update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt install -y \
|
||||
vim \
|
||||
wget \
|
||||
curl \
|
||||
xz-utils \
|
||||
net-tools \
|
||||
openssh-client \
|
||||
git \
|
||||
ntpdate \
|
||||
tzdata \
|
||||
tcl \
|
||||
sudo \
|
||||
bash-completion
|
||||
|
||||
# Install compile tools
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
||||
gcc \
|
||||
g++ \
|
||||
zlibc \
|
||||
make \
|
||||
libgmp-dev \
|
||||
patch \
|
||||
autoconf \
|
||||
libtool \
|
||||
automake \
|
||||
flex
|
||||
|
||||
# Install the rest dependent tools
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
||||
libnuma-dev
|
||||
|
||||
# Set bash
|
||||
RUN echo "dash dash/sh boolean false" | debconf-set-selections
|
||||
RUN DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
|
||||
|
||||
# Install python (v3.7.5)
|
||||
RUN apt install -y libffi-dev libssl-dev zlib1g-dev libbz2-dev libncurses5-dev \
|
||||
libgdbm-dev libgdbm-compat-dev liblzma-dev libreadline-dev libsqlite3-dev \
|
||||
&& cd /tmp \
|
||||
&& wget https://github.com/python/cpython/archive/v3.7.5.tar.gz \
|
||||
&& tar -xvf v3.7.5.tar.gz \
|
||||
&& cd /tmp/cpython-3.7.5 \
|
||||
&& mkdir -p ${PYTHON_ROOT_PATH} \
|
||||
&& ./configure --prefix=${PYTHON_ROOT_PATH} \
|
||||
&& make -j4 \
|
||||
&& make install -j4 \
|
||||
&& rm -f /usr/local/bin/python \
|
||||
&& rm -f /usr/local/bin/pip \
|
||||
&& ln -s ${PYTHON_ROOT_PATH}/bin/python3.7 /usr/local/bin/python \
|
||||
&& ln -s ${PYTHON_ROOT_PATH}/bin/pip3.7 /usr/local/bin/pip \
|
||||
&& rm -rf /tmp/cpython-3.7.5 \
|
||||
&& rm -f /tmp/v3.7.5.tar.gz
|
||||
|
||||
# Set pip source
|
||||
RUN mkdir -pv /root/.pip \
|
||||
&& echo "[global]" > /root/.pip/pip.conf \
|
||||
&& echo "trusted-host=mirrors.aliyun.com" >> /root/.pip/pip.conf \
|
||||
&& echo "index-url=http://mirrors.aliyun.com/pypi/simple/" >> /root/.pip/pip.conf
|
||||
|
||||
# Install openmpi (v4.0.3)
|
||||
RUN cd /tmp \
|
||||
&& wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.gz \
|
||||
&& tar -xvf openmpi-4.0.3.tar.gz \
|
||||
&& cd /tmp/openmpi-4.0.3 \
|
||||
&& mkdir -p ${OMPI_ROOT_PATH} \
|
||||
&& ./configure --prefix=${OMPI_ROOT_PATH} \
|
||||
&& make -j4 \
|
||||
&& make install -j4 \
|
||||
&& rm -rf /tmp/openmpi-4.0.3 \
|
||||
&& rm -f /tmp/openmpi-4.0.3.tar.gz
|
||||
|
||||
# Install MindSpore cuda-10.1 whl package
|
||||
RUN pip install --no-cache-dir https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.1.0/MindSpore/gpu/ubuntu_x86/cuda-10.1/mindspore_gpu-1.1.0-cp37-cp37m-linux_x86_64.whl
|
||||
|
|
@ -5,9 +5,8 @@ MAINTAINER leonwanghui <leon.wanghui@huawei.com>
|
|||
# Set env
|
||||
ENV PYTHON_ROOT_PATH /usr/local/python-3.7.5
|
||||
ENV CMAKE_ROOT_PATH /usr/local/cmake-3.14.1
|
||||
ENV OMPI_ROOT_PATH /usr/local/openmpi-4.0.3
|
||||
ENV PATH ${OMPI_ROOT_PATH}/bin:${PYTHON_ROOT_PATH}/bin:${CMAKE_ROOT_PATH}/bin:/usr/local/bin:$PATH
|
||||
ENV LD_LIBRARY_PATH ${OMPI_ROOT_PATH}/lib::${PYTHON_ROOT_PATH}/lib
|
||||
ENV PATH ${CMAKE_ROOT_PATH}/bin:/usr/local/bin:$PATH
|
||||
ENV LD_LIBRARY_PATH ${PYTHON_ROOT_PATH}/lib
|
||||
|
||||
# Install base tools
|
||||
RUN apt update \
|
||||
|
|
@ -38,10 +37,6 @@ RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
|||
automake \
|
||||
flex
|
||||
|
||||
# Install the rest dependent tools
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
||||
libnuma-dev
|
||||
|
||||
# Configure cuDNN (v7.6.5)
|
||||
RUN ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so.7.6.5 /usr/local/cuda/lib64/libcudnn.so
|
||||
|
||||
|
|
@ -80,15 +75,3 @@ RUN cd /tmp \
|
|||
&& mkdir -p ${CMAKE_ROOT_PATH} \
|
||||
&& bash ./cmake-3.14.1-Linux-x86_64.sh --prefix=${CMAKE_ROOT_PATH} --exclude-subdir --skip-license \
|
||||
&& rm -f /tmp/cmake-3.14.1-Linux-x86_64.sh
|
||||
|
||||
# Install openmpi (v4.0.3)
|
||||
RUN cd /tmp \
|
||||
&& wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.gz \
|
||||
&& tar -xvf openmpi-4.0.3.tar.gz \
|
||||
&& cd /tmp/openmpi-4.0.3 \
|
||||
&& mkdir -p ${OMPI_ROOT_PATH} \
|
||||
&& ./configure --prefix=${OMPI_ROOT_PATH} \
|
||||
&& make -j4 \
|
||||
&& make install -j4 \
|
||||
&& rm -rf /tmp/openmpi-4.0.3 \
|
||||
&& rm -f /tmp/openmpi-4.0.3.tar.gz
|
||||
|
|
@ -37,10 +37,6 @@ RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
|||
automake \
|
||||
flex
|
||||
|
||||
# Install the rest dependent tools
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt install -y \
|
||||
libnuma-dev
|
||||
|
||||
# Set bash
|
||||
RUN echo "dash dash/sh boolean false" | debconf-set-selections
|
||||
RUN DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 53 KiB |
|
|
@ -1 +1 @@
|
|||
Subproject commit 6d92a616eaebbc29c920778113f3d0a0d0cf395b
|
||||
Subproject commit 423c0228e8c421f2b095e40d14e9fb3b563f63aa
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MINDSPORE_INCLUDE_API_CELL_H
|
||||
#define MINDSPORE_INCLUDE_API_CELL_H
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include "include/api/status.h"
|
||||
#include "include/api/types.h"
|
||||
#include "include/api/graph.h"
|
||||
|
||||
namespace mindspore {
|
||||
class InputAndOutput;
|
||||
class Context;
|
||||
using Input = InputAndOutput;
|
||||
using Output = InputAndOutput;
|
||||
|
||||
class MS_API CellBase {
|
||||
public:
|
||||
CellBase() = default;
|
||||
virtual ~CellBase() = default;
|
||||
virtual std::vector<Output> Construct(const std::vector<Input> &inputs) { return {}; }
|
||||
virtual std::shared_ptr<CellBase> Clone() const = 0;
|
||||
virtual Status Run(const std::vector<MSTensor> &inputs, std::vector<MSTensor> *outputs) { return kSuccess; }
|
||||
std::vector<Output> operator()(const std::vector<Input> &inputs) const;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class MS_API Cell : public CellBase {
|
||||
public:
|
||||
virtual ~Cell() = default;
|
||||
std::shared_ptr<CellBase> Clone() const override { return std::make_shared<T>(static_cast<const T &>(*this)); }
|
||||
};
|
||||
|
||||
class MS_API ParameterCell final : public Cell<ParameterCell> {
|
||||
public:
|
||||
ParameterCell() = default;
|
||||
~ParameterCell() override = default;
|
||||
|
||||
ParameterCell(const ParameterCell &);
|
||||
ParameterCell &operator=(const ParameterCell &);
|
||||
|
||||
ParameterCell(ParameterCell &&);
|
||||
ParameterCell &operator=(ParameterCell &&);
|
||||
|
||||
explicit ParameterCell(const MSTensor &);
|
||||
ParameterCell &operator=(const MSTensor &);
|
||||
|
||||
explicit ParameterCell(MSTensor &&);
|
||||
ParameterCell &operator=(MSTensor &&);
|
||||
|
||||
MSTensor GetTensor() const { return tensor_; }
|
||||
|
||||
private:
|
||||
MSTensor tensor_;
|
||||
};
|
||||
|
||||
class MS_API OpCellBase : public CellBase {
|
||||
public:
|
||||
explicit OpCellBase(const std::string &name) : name_(name) {}
|
||||
~OpCellBase() override = default;
|
||||
const std::string &GetOpType() const { return name_; }
|
||||
|
||||
protected:
|
||||
std::string name_;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class MS_API OpCell : public OpCellBase, public std::enable_shared_from_this<T> {
|
||||
public:
|
||||
explicit OpCell(const std::string &name) : OpCellBase(name) {}
|
||||
~OpCell() override = default;
|
||||
std::shared_ptr<CellBase> Clone() const override { return std::make_shared<T>(static_cast<const T &>(*this)); }
|
||||
};
|
||||
|
||||
class MS_API GraphCell final : public Cell<GraphCell> {
|
||||
public:
|
||||
class GraphImpl;
|
||||
|
||||
GraphCell() = default;
|
||||
~GraphCell() override = default;
|
||||
|
||||
explicit GraphCell(const Graph &);
|
||||
explicit GraphCell(Graph &&);
|
||||
explicit GraphCell(const std::shared_ptr<Graph> &);
|
||||
|
||||
void SetContext(const std::shared_ptr<Context> &context);
|
||||
const std::shared_ptr<Graph> &GetGraph() const { return graph_; }
|
||||
Status Run(const std::vector<MSTensor> &inputs, std::vector<MSTensor> *outputs) override;
|
||||
std::vector<MSTensor> GetInputs();
|
||||
std::vector<MSTensor> GetOutputs();
|
||||
|
||||
private:
|
||||
friend class Model;
|
||||
friend class ModelImpl;
|
||||
Status Load(uint32_t device_id);
|
||||
|
||||
std::shared_ptr<Graph> graph_;
|
||||
std::shared_ptr<GraphImpl> executor_;
|
||||
};
|
||||
|
||||
class MS_API InputAndOutput {
|
||||
public:
|
||||
InputAndOutput();
|
||||
~InputAndOutput() = default;
|
||||
|
||||
// no explicit
|
||||
InputAndOutput(const MSTensor &); // NOLINT(runtime/explicit)
|
||||
InputAndOutput(MSTensor &&); // NOLINT(runtime/explicit)
|
||||
|
||||
InputAndOutput(const std::shared_ptr<CellBase> &, const std::vector<InputAndOutput> &, int32_t index);
|
||||
|
||||
int32_t GetIndex() const { return index_; }
|
||||
void SetIndex(int32_t index) { index_ = index; }
|
||||
|
||||
private:
|
||||
std::shared_ptr<CellBase> cell_;
|
||||
std::vector<InputAndOutput> prev_;
|
||||
int32_t index_;
|
||||
};
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_API_CELL_H
|
||||
|
|
@ -1,242 +0,0 @@
|
|||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MINDSPORE_INCLUDE_API_CONTEXT_H
|
||||
#define MINDSPORE_INCLUDE_API_CONTEXT_H
|
||||
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include "include/api/types.h"
|
||||
#include "include/api/dual_abi_helper.h"
|
||||
|
||||
namespace mindspore {
|
||||
enum DeviceType {
|
||||
kCPU = 0,
|
||||
kMaliGPU,
|
||||
kNvidiaGPU,
|
||||
kKirinNPU,
|
||||
kAscend910,
|
||||
kAscend310,
|
||||
// add new type here
|
||||
kInvalidDeviceType = 100,
|
||||
};
|
||||
|
||||
class Allocator;
|
||||
class DeviceInfoContext;
|
||||
|
||||
class MS_API Context {
|
||||
public:
|
||||
Context();
|
||||
~Context() = default;
|
||||
|
||||
void SetThreadNum(int32_t thread_num);
|
||||
int32_t GetThreadNum() const;
|
||||
|
||||
void SetAllocator(const std::shared_ptr<Allocator> &allocator);
|
||||
std::shared_ptr<Allocator> GetAllocator() const;
|
||||
|
||||
std::vector<std::shared_ptr<DeviceInfoContext>> &MutableDeviceInfo();
|
||||
|
||||
private:
|
||||
struct Data;
|
||||
std::shared_ptr<Data> data_;
|
||||
};
|
||||
|
||||
class MS_API DeviceInfoContext : public std::enable_shared_from_this<DeviceInfoContext> {
|
||||
public:
|
||||
struct Data;
|
||||
|
||||
DeviceInfoContext();
|
||||
virtual ~DeviceInfoContext() = default;
|
||||
virtual enum DeviceType GetDeviceType() const = 0;
|
||||
|
||||
template <class T>
|
||||
std::shared_ptr<T> Cast() {
|
||||
static_assert(std::is_base_of<DeviceInfoContext, T>::value, "Wrong cast type.");
|
||||
if (GetDeviceType() != T().GetDeviceType()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return std::static_pointer_cast<T>(shared_from_this());
|
||||
}
|
||||
|
||||
protected:
|
||||
std::shared_ptr<Data> data_;
|
||||
};
|
||||
|
||||
class MS_API CPUDeviceInfo : public DeviceInfoContext {
|
||||
public:
|
||||
enum DeviceType GetDeviceType() const override { return DeviceType::kCPU; };
|
||||
|
||||
/// \brief Set the thread affinity to CPU cores.
|
||||
///
|
||||
/// \param mode: 0: no affinities, 1: big cores first, 2: little cores first
|
||||
void SetThreadAffinity(int mode);
|
||||
int GetThreadAffinity() const;
|
||||
void SetEnableFP16(bool is_fp16);
|
||||
bool GetEnableFP16() const;
|
||||
};
|
||||
|
||||
class MS_API MaliGPUDeviceInfo : public DeviceInfoContext {
|
||||
public:
|
||||
enum DeviceType GetDeviceType() const override { return DeviceType::kMaliGPU; };
|
||||
|
||||
void SetEnableFP16(bool is_fp16);
|
||||
bool GetEnableFP16() const;
|
||||
};
|
||||
|
||||
class MS_API KirinNPUDeviceInfo : public DeviceInfoContext {
|
||||
public:
|
||||
enum DeviceType GetDeviceType() const override { return DeviceType::kKirinNPU; };
|
||||
|
||||
void SetFrequency(int frequency);
|
||||
int GetFrequency() const;
|
||||
};
|
||||
|
||||
class MS_API NvidiaGPUDeviceInfo : public DeviceInfoContext {
|
||||
public:
|
||||
enum DeviceType GetDeviceType() const override { return DeviceType::kNvidiaGPU; };
|
||||
|
||||
void SetDeviceID(uint32_t device_id);
|
||||
uint32_t GetDeviceID() const;
|
||||
|
||||
void SetGpuTrtInferMode(bool gpu_trt_infer_mode);
|
||||
bool GetGpuTrtInferMode() const;
|
||||
};
|
||||
|
||||
class MS_API Ascend910DeviceInfo : public DeviceInfoContext {
|
||||
public:
|
||||
enum DeviceType GetDeviceType() const override { return DeviceType::kAscend910; };
|
||||
|
||||
void SetDeviceID(uint32_t device_id);
|
||||
uint32_t GetDeviceID() const;
|
||||
};
|
||||
|
||||
class MS_API Ascend310DeviceInfo : public DeviceInfoContext {
|
||||
public:
|
||||
enum DeviceType GetDeviceType() const override { return DeviceType::kAscend310; };
|
||||
|
||||
void SetDeviceID(uint32_t device_id);
|
||||
uint32_t GetDeviceID() const;
|
||||
|
||||
inline void SetDumpConfigPath(const std::string &cfg_path);
|
||||
inline std::string GetDumpConfigPath() const;
|
||||
|
||||
// aipp config file
|
||||
inline void SetInsertOpConfigPath(const std::string &cfg_path);
|
||||
inline std::string GetInsertOpConfigPath() const;
|
||||
|
||||
// nchw or nhwc
|
||||
inline void SetInputFormat(const std::string &format);
|
||||
inline std::string GetInputFormat() const;
|
||||
|
||||
// Mandatory while dynamic batch: e.g. "input_op_name1: 1,2,3,4;input_op_name2: 4,3,2,1"
|
||||
inline void SetInputShape(const std::string &shape);
|
||||
inline std::string GetInputShape() const;
|
||||
|
||||
void SetInputShapeMap(const std::map<int, std::vector<int>> &shape);
|
||||
std::map<int, std::vector<int>> GetInputShapeMap() const;
|
||||
|
||||
void SetDynamicBatchSize(const std::vector<size_t> &dynamic_batch_size);
|
||||
inline std::string GetDynamicBatchSize() const;
|
||||
|
||||
// FP32, UINT8 or FP16, default as FP32
|
||||
void SetOutputType(enum DataType output_type);
|
||||
enum DataType GetOutputType() const;
|
||||
|
||||
// "force_fp16", "allow_fp32_to_fp16", "must_keep_origin_dtype" or "allow_mix_precision", default as "force_fp16"
|
||||
inline void SetPrecisionMode(const std::string &precision_mode);
|
||||
inline std::string GetPrecisionMode() const;
|
||||
|
||||
// Optional "high_performance" and "high_precision", "high_performance" is set as default
|
||||
inline void SetOpSelectImplMode(const std::string &op_select_impl_mode);
|
||||
inline std::string GetOpSelectImplMode() const;
|
||||
|
||||
inline void SetFusionSwitchConfigPath(const std::string &cfg_path);
|
||||
inline std::string GetFusionSwitchConfigPath() const;
|
||||
|
||||
// Optional "l1_optimize", "l2_optimize", "off_optimize" or "l1_and_l2_optimize", default as "l2_optimize"
|
||||
inline void SetBufferOptimizeMode(const std::string &buffer_optimize_mode);
|
||||
inline std::string GetBufferOptimizeMode() const;
|
||||
|
||||
private:
|
||||
void SetDumpConfigPath(const std::vector<char> &cfg_path);
|
||||
std::vector<char> GetDumpConfigPathChar() const;
|
||||
|
||||
void SetInsertOpConfigPath(const std::vector<char> &cfg_path);
|
||||
std::vector<char> GetInsertOpConfigPathChar() const;
|
||||
|
||||
void SetInputFormat(const std::vector<char> &format);
|
||||
std::vector<char> GetInputFormatChar() const;
|
||||
|
||||
void SetInputShape(const std::vector<char> &shape);
|
||||
std::vector<char> GetInputShapeChar() const;
|
||||
|
||||
std::vector<char> GetDynamicBatchSizeChar() const;
|
||||
|
||||
void SetPrecisionMode(const std::vector<char> &precision_mode);
|
||||
std::vector<char> GetPrecisionModeChar() const;
|
||||
|
||||
void SetOpSelectImplMode(const std::vector<char> &op_select_impl_mode);
|
||||
std::vector<char> GetOpSelectImplModeChar() const;
|
||||
|
||||
void SetFusionSwitchConfigPath(const std::vector<char> &cfg_path);
|
||||
std::vector<char> GetFusionSwitchConfigPathChar() const;
|
||||
|
||||
void SetBufferOptimizeMode(const std::vector<char> &buffer_optimize_mode);
|
||||
std::vector<char> GetBufferOptimizeModeChar() const;
|
||||
};
|
||||
|
||||
void Ascend310DeviceInfo::SetDumpConfigPath(const std::string &cfg_path) { SetDumpConfigPath(StringToChar(cfg_path)); }
|
||||
std::string Ascend310DeviceInfo::GetDumpConfigPath() const { return CharToString(GetDumpConfigPathChar()); }
|
||||
|
||||
void Ascend310DeviceInfo::SetInsertOpConfigPath(const std::string &cfg_path) {
|
||||
SetInsertOpConfigPath(StringToChar(cfg_path));
|
||||
}
|
||||
std::string Ascend310DeviceInfo::GetInsertOpConfigPath() const { return CharToString(GetInsertOpConfigPathChar()); }
|
||||
|
||||
void Ascend310DeviceInfo::SetInputFormat(const std::string &format) { SetInputFormat(StringToChar(format)); }
|
||||
std::string Ascend310DeviceInfo::GetInputFormat() const { return CharToString(GetInputFormatChar()); }
|
||||
|
||||
void Ascend310DeviceInfo::SetInputShape(const std::string &shape) { SetInputShape(StringToChar(shape)); }
|
||||
std::string Ascend310DeviceInfo::GetInputShape() const { return CharToString(GetInputShapeChar()); }
|
||||
|
||||
std::string Ascend310DeviceInfo::GetDynamicBatchSize() const { return CharToString(GetDynamicBatchSizeChar()); }
|
||||
|
||||
void Ascend310DeviceInfo::SetPrecisionMode(const std::string &precision_mode) {
|
||||
SetPrecisionMode(StringToChar(precision_mode));
|
||||
}
|
||||
std::string Ascend310DeviceInfo::GetPrecisionMode() const { return CharToString(GetPrecisionModeChar()); }
|
||||
|
||||
void Ascend310DeviceInfo::SetOpSelectImplMode(const std::string &op_select_impl_mode) {
|
||||
SetOpSelectImplMode(StringToChar(op_select_impl_mode));
|
||||
}
|
||||
std::string Ascend310DeviceInfo::GetOpSelectImplMode() const { return CharToString(GetOpSelectImplModeChar()); }
|
||||
|
||||
void Ascend310DeviceInfo::SetFusionSwitchConfigPath(const std::string &cfg_path) {
|
||||
SetFusionSwitchConfigPath(StringToChar(cfg_path));
|
||||
}
|
||||
std::string Ascend310DeviceInfo::GetFusionSwitchConfigPath() const {
|
||||
return CharToString(GetFusionSwitchConfigPathChar());
|
||||
}
|
||||
|
||||
void Ascend310DeviceInfo::SetBufferOptimizeMode(const std::string &buffer_optimize_mode) {
|
||||
SetBufferOptimizeMode(StringToChar(buffer_optimize_mode));
|
||||
}
|
||||
std::string Ascend310DeviceInfo::GetBufferOptimizeMode() const { return CharToString(GetBufferOptimizeModeChar()); }
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_API_CONTEXT_H
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
/**
|
||||
* Copyright 2021 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MINDSPORE_INCLUDE_API_DATA_TYPE_H_
|
||||
#define MINDSPORE_INCLUDE_API_DATA_TYPE_H_
|
||||
|
||||
namespace mindspore {
|
||||
enum class DataType : int {
|
||||
kTypeUnknown = 0,
|
||||
kObjectTypeString = 12,
|
||||
kObjectTypeList = 13,
|
||||
kObjectTypeTuple = 14,
|
||||
kObjectTypeTensorType = 17,
|
||||
kNumberTypeBool = 30,
|
||||
kNumberTypeInt8 = 32,
|
||||
kNumberTypeInt16 = 33,
|
||||
kNumberTypeInt32 = 34,
|
||||
kNumberTypeInt64 = 35,
|
||||
kNumberTypeUInt8 = 37,
|
||||
kNumberTypeUInt16 = 38,
|
||||
kNumberTypeUInt32 = 39,
|
||||
kNumberTypeUInt64 = 40,
|
||||
kNumberTypeFloat16 = 42,
|
||||
kNumberTypeFloat32 = 43,
|
||||
kNumberTypeFloat64 = 44,
|
||||
kNumberTypeEnd = 46,
|
||||
// add new enum here
|
||||
kInvalidType = INT32_MAX,
|
||||
};
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_API_DATA_TYPE_H_
|
||||
|
|
@ -1,173 +0,0 @@
|
|||
/**
|
||||
* Copyright 2021 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MINDSPORE_INCLUDE_API_DUAL_ABI_HELPER_H_
|
||||
#define MINDSPORE_INCLUDE_API_DUAL_ABI_HELPER_H_
|
||||
|
||||
#include <algorithm>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <set>
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
namespace mindspore {
|
||||
inline std::vector<char> StringToChar(const std::string &s) { return std::vector<char>(s.begin(), s.end()); }
|
||||
|
||||
inline std::string CharToString(const std::vector<char> &c) { return std::string(c.begin(), c.end()); }
|
||||
|
||||
inline std::optional<std::vector<char>> OptionalStringToChar(const std::optional<std::string> &s) {
|
||||
if (s == std::nullopt) return std::nullopt;
|
||||
std::optional<std::vector<char>> ret = std::vector<char>(s->begin(), s->end());
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::optional<std::string> OptionalCharToString(const std::optional<std::vector<char>> &c) {
|
||||
if (c == std::nullopt) return std::nullopt;
|
||||
std::optional<std::string> ret = std::string(c->begin(), c->end());
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::pair<std::vector<char>, int32_t> PairStringToChar(const std::pair<std::string, int32_t> &s) {
|
||||
return std::pair<std::vector<char>, int32_t>(std::vector<char>(s.first.begin(), s.first.end()), s.second);
|
||||
}
|
||||
|
||||
inline std::pair<std::string, int32_t> PairCharToString(const std::pair<std::vector<char>, int32_t> &c) {
|
||||
return std::pair<std::string, int32_t>(std::string(c.first.begin(), c.first.end()), c.second);
|
||||
}
|
||||
|
||||
inline std::vector<std::vector<char>> VectorStringToChar(const std::vector<std::string> &s) {
|
||||
std::vector<std::vector<char>> ret;
|
||||
std::transform(s.begin(), s.end(), std::back_inserter(ret),
|
||||
[](auto str) { return std::vector<char>(str.begin(), str.end()); });
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::vector<std::string> VectorCharToString(const std::vector<std::vector<char>> &c) {
|
||||
std::vector<std::string> ret;
|
||||
std::transform(c.begin(), c.end(), std::back_inserter(ret),
|
||||
[](auto ch) { return std::string(ch.begin(), ch.end()); });
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::set<std::vector<char>> SetStringToChar(const std::set<std::string> &s) {
|
||||
std::set<std::vector<char>> ret;
|
||||
std::transform(s.begin(), s.end(), std::inserter(ret, ret.begin()),
|
||||
[](auto str) { return std::vector<char>(str.begin(), str.end()); });
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::set<std::string> SetCharToString(const std::set<std::vector<char>> &c) {
|
||||
std::set<std::string> ret;
|
||||
std::transform(c.begin(), c.end(), std::inserter(ret, ret.begin()),
|
||||
[](auto ch) { return std::string(ch.begin(), ch.end()); });
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::map<std::vector<char>, int32_t> MapStringToChar(const std::map<std::string, int32_t> &s) {
|
||||
std::map<std::vector<char>, int32_t> ret;
|
||||
std::transform(s.begin(), s.end(), std::inserter(ret, ret.begin()), [](auto str) {
|
||||
return std::pair<std::vector<char>, int32_t>(std::vector<char>(str.first.begin(), str.first.end()), str.second);
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::map<std::string, int32_t> MapCharToString(const std::map<std::vector<char>, int32_t> &c) {
|
||||
std::map<std::string, int32_t> ret;
|
||||
std::transform(c.begin(), c.end(), std::inserter(ret, ret.begin()), [](auto ch) {
|
||||
return std::pair<std::string, int32_t>(std::string(ch.first.begin(), ch.first.end()), ch.second);
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::map<std::vector<char>, std::vector<char>> UnorderedMapStringToChar(
|
||||
const std::unordered_map<std::string, std::string> &s) {
|
||||
std::map<std::vector<char>, std::vector<char>> ret;
|
||||
std::transform(s.begin(), s.end(), std::inserter(ret, ret.begin()), [](auto str) {
|
||||
return std::pair<std::vector<char>, std::vector<char>>(std::vector<char>(str.first.begin(), str.first.end()),
|
||||
std::vector<char>(str.second.begin(), str.second.end()));
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::unordered_map<std::string, std::string> UnorderedMapCharToString(
|
||||
const std::map<std::vector<char>, std::vector<char>> &c) {
|
||||
std::unordered_map<std::string, std::string> ret;
|
||||
std::transform(c.begin(), c.end(), std::inserter(ret, ret.begin()), [](auto ch) {
|
||||
return std::pair<std::string, std::string>(std::string(ch.first.begin(), ch.first.end()),
|
||||
std::string(ch.second.begin(), ch.second.end()));
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::vector<std::pair<std::vector<char>, std::vector<int32_t>>> ClassIndexStringToChar(
|
||||
const std::vector<std::pair<std::string, std::vector<int32_t>>> &s) {
|
||||
std::vector<std::pair<std::vector<char>, std::vector<int32_t>>> ret;
|
||||
std::transform(s.begin(), s.end(), std::back_inserter(ret), [](auto str) {
|
||||
return std::pair<std::vector<char>, std::vector<int32_t>>(std::vector<char>(str.first.begin(), str.first.end()),
|
||||
str.second);
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::vector<std::pair<std::string, std::vector<int32_t>>> ClassIndexCharToString(
|
||||
const std::vector<std::pair<std::vector<char>, std::vector<int32_t>>> &c) {
|
||||
std::vector<std::pair<std::string, std::vector<int32_t>>> ret;
|
||||
std::transform(c.begin(), c.end(), std::back_inserter(ret), [](auto ch) {
|
||||
return std::pair<std::string, std::vector<int32_t>>(std::string(ch.first.begin(), ch.first.end()), ch.second);
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline std::vector<std::pair<std::vector<char>, int64_t>> PairStringInt64ToPairCharInt64(
|
||||
const std::vector<std::pair<std::string, int64_t>> &s) {
|
||||
std::vector<std::pair<std::vector<char>, int64_t>> ret;
|
||||
std::transform(s.begin(), s.end(), std::back_inserter(ret), [](auto str) {
|
||||
return std::pair<std::vector<char>, int64_t>(std::vector<char>(str.first.begin(), str.first.end()), str.second);
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline std::map<std::vector<char>, T> PadInfoStringToChar(const std::map<std::string, T> &s_pad_info) {
|
||||
std::map<std::vector<char>, T> ret;
|
||||
std::transform(s_pad_info.begin(), s_pad_info.end(), std::inserter(ret, ret.begin()), [](auto str) {
|
||||
return std::pair<std::vector<char>, T>(std::vector<char>(str.first.begin(), str.first.end()), str.second);
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline std::map<std::string, T> PadInfoCharToString(const std::map<std::vector<char>, T> &c_pad_info) {
|
||||
std::map<std::string, T> ret;
|
||||
std::transform(c_pad_info.begin(), c_pad_info.end(), std::inserter(ret, ret.begin()), [](auto ch) {
|
||||
return std::pair<std::string, T>(std::string(ch.first.begin(), ch.first.end()), ch.second);
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline void TensorMapCharToString(const std::map<std::vector<char>, T> *c, std::unordered_map<std::string, T> *s) {
|
||||
for (auto ch : *c) {
|
||||
auto key = std::string(ch.first.begin(), ch.first.end());
|
||||
auto val = ch.second;
|
||||
s->insert(std::pair<std::string, T>(key, val));
|
||||
}
|
||||
}
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_API_DUAL_ABI_HELPER_H_
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MINDSPORE_INCLUDE_API_GRAPH_H
|
||||
#define MINDSPORE_INCLUDE_API_GRAPH_H
|
||||
|
||||
#include <cstddef>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include "include/api/status.h"
|
||||
#include "include/api/types.h"
|
||||
|
||||
namespace mindspore {
|
||||
class MS_API Graph {
|
||||
public:
|
||||
class GraphData;
|
||||
Graph();
|
||||
explicit Graph(const std::shared_ptr<GraphData> &graph_data);
|
||||
explicit Graph(std::shared_ptr<GraphData> &&graph_data);
|
||||
explicit Graph(std::nullptr_t);
|
||||
~Graph();
|
||||
|
||||
enum ModelType ModelType() const;
|
||||
bool operator==(std::nullptr_t) const;
|
||||
bool operator!=(std::nullptr_t) const;
|
||||
|
||||
private:
|
||||
friend class GraphCell;
|
||||
friend class ModelImpl;
|
||||
std::shared_ptr<GraphData> graph_data_;
|
||||
};
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_API_GRAPH_H
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MINDSPORE_INCLUDE_API_MODEL_H
|
||||
#define MINDSPORE_INCLUDE_API_MODEL_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
#include "include/api/status.h"
|
||||
#include "include/api/types.h"
|
||||
#include "include/api/graph.h"
|
||||
#include "include/api/context.h"
|
||||
#include "include/api/cell.h"
|
||||
#include "include/api/dual_abi_helper.h"
|
||||
|
||||
namespace mindspore {
|
||||
class ModelImpl;
|
||||
|
||||
class MS_API Model {
|
||||
public:
|
||||
Model();
|
||||
~Model();
|
||||
Model(const Model &) = delete;
|
||||
void operator=(const Model &) = delete;
|
||||
|
||||
Status Build(GraphCell graph, const std::shared_ptr<Context> &model_context = nullptr);
|
||||
Status Resize(const std::vector<MSTensor> &inputs, const std::vector<std::vector<int64_t>> &dims);
|
||||
|
||||
Status Predict(const std::vector<MSTensor> &inputs, std::vector<MSTensor> *outputs);
|
||||
|
||||
std::vector<MSTensor> GetInputs();
|
||||
inline MSTensor GetInputByTensorName(const std::string &tensor_name);
|
||||
|
||||
std::vector<MSTensor> GetOutputs();
|
||||
inline std::vector<std::string> GetOutputTensorNames();
|
||||
inline MSTensor GetOutputByTensorName(const std::string &tensor_name);
|
||||
inline std::vector<MSTensor> GetOutputsByNodeName(const std::string &tensor_name);
|
||||
|
||||
static bool CheckModelSupport(enum DeviceType device_type, ModelType model_type);
|
||||
|
||||
private:
|
||||
// api without std::string
|
||||
MSTensor GetInputByTensorName(const std::vector<char> &tensor_name);
|
||||
std::vector<std::vector<char>> GetOutputTensorNamesChar();
|
||||
MSTensor GetOutputByTensorName(const std::vector<char> &tensor_name);
|
||||
std::vector<MSTensor> GetOutputsByNodeName(const std::vector<char> &node_name);
|
||||
|
||||
std::shared_ptr<ModelImpl> impl_;
|
||||
};
|
||||
|
||||
MSTensor Model::GetInputByTensorName(const std::string &tensor_name) {
|
||||
return GetInputByTensorName(StringToChar(tensor_name));
|
||||
}
|
||||
|
||||
std::vector<std::string> Model::GetOutputTensorNames() { return VectorCharToString(GetOutputTensorNamesChar()); }
|
||||
|
||||
MSTensor Model::GetOutputByTensorName(const std::string &tensor_name) {
|
||||
return GetOutputByTensorName(StringToChar(tensor_name));
|
||||
}
|
||||
|
||||
std::vector<MSTensor> Model::GetOutputsByNodeName(const std::string &tensor_name) {
|
||||
return GetOutputsByNodeName(StringToChar(tensor_name));
|
||||
}
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_API_MODEL_H
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MINDSPORE_INCLUDE_API_OPS_OPS_H
|
||||
#define MINDSPORE_INCLUDE_API_OPS_OPS_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include "include/api/status.h"
|
||||
#include "include/api/types.h"
|
||||
#include "include/api/cell.h"
|
||||
|
||||
namespace mindspore {
|
||||
struct MS_API Conv2D : public OpCell<Conv2D> {
|
||||
Conv2D() : OpCell("Conv2D") {}
|
||||
~Conv2D() override = default;
|
||||
std::vector<Output> Construct(const std::vector<Input> &inputs) override;
|
||||
Conv2D(int out_channel, const std::vector<int> &kernel_size, int mode = 1, const std::string &pad_mode = "valid",
|
||||
const std::vector<int> &pad = {0, 0, 0, 0}, const std::vector<int> &stride = {1, 1, 1, 1},
|
||||
const std::vector<int> &dilation = {1, 1, 1, 1}, int group = 1);
|
||||
|
||||
Output operator()(const Input &, const Input &) const;
|
||||
|
||||
int out_channel;
|
||||
std::vector<int> kernel_size;
|
||||
int mode = 1;
|
||||
std::string pad_mode = "valid";
|
||||
std::vector<int> pad = {0, 0, 0, 0};
|
||||
std::vector<int> stride = {1, 1, 1, 1};
|
||||
std::vector<int> dilation = {1, 1, 1, 1};
|
||||
int group = 1;
|
||||
};
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_API_OPS_OPS_H
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MINDSPORE_INCLUDE_API_SERIALIZATION_H
|
||||
#define MINDSPORE_INCLUDE_API_SERIALIZATION_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include "include/api/status.h"
|
||||
#include "include/api/types.h"
|
||||
#include "include/api/model.h"
|
||||
#include "include/api/graph.h"
|
||||
#include "include/api/dual_abi_helper.h"
|
||||
|
||||
namespace mindspore {
|
||||
class MS_API Serialization {
|
||||
public:
|
||||
static Status Load(const void *model_data, size_t data_size, ModelType model_type, Graph *graph);
|
||||
inline static Status Load(const std::string &file, ModelType model_type, Graph *graph);
|
||||
static Status LoadCheckPoint(const std::string &ckpt_file, std::map<std::string, Buffer> *parameters);
|
||||
static Status SetParameters(const std::map<std::string, Buffer> ¶meters, Model *model);
|
||||
static Status ExportModel(const Model &model, ModelType model_type, Buffer *model_data);
|
||||
static Status ExportModel(const Model &model, ModelType model_type, const std::string &model_file);
|
||||
|
||||
private:
|
||||
static Status Load(const std::vector<char> &file, ModelType model_type, Graph *graph);
|
||||
};
|
||||
|
||||
Status Serialization::Load(const std::string &file, ModelType model_type, Graph *graph) {
|
||||
return Load(StringToChar(file), model_type, graph);
|
||||
}
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_API_SERIALIZATION_H
|
||||
|
|
@ -1,164 +0,0 @@
|
|||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MINDSPORE_INCLUDE_API_STATUS_H
|
||||
#define MINDSPORE_INCLUDE_API_STATUS_H
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <ostream>
|
||||
#include <climits>
|
||||
#include "include/api/dual_abi_helper.h"
|
||||
#include "include/api/types.h"
|
||||
|
||||
namespace mindspore {
|
||||
enum CompCode : uint32_t {
|
||||
kCore = 0x00000000u,
|
||||
kMD = 0x10000000u,
|
||||
kME = 0x20000000u,
|
||||
kMC = 0x30000000u,
|
||||
kLite = 0xF0000000u,
|
||||
};
|
||||
|
||||
enum StatusCode : uint32_t {
|
||||
kSuccess = 0,
|
||||
// Core
|
||||
kCoreFailed = kCore | 0x1,
|
||||
|
||||
// MD
|
||||
kMDOutOfMemory = kMD | 1,
|
||||
kMDShapeMisMatch = kMD | 2,
|
||||
kMDInterrupted = kMD | 3,
|
||||
kMDNoSpace = kMD | 4,
|
||||
kMDPyFuncException = kMD | 5,
|
||||
kMDDuplicateKey = kMD | 6,
|
||||
kMDPythonInterpreterFailure = kMD | 7,
|
||||
kMDTDTPushFailure = kMD | 8,
|
||||
kMDFileNotExist = kMD | 9,
|
||||
kMDProfilingError = kMD | 10,
|
||||
kMDBoundingBoxOutOfBounds = kMD | 11,
|
||||
kMDBoundingBoxInvalidShape = kMD | 12,
|
||||
kMDSyntaxError = kMD | 13,
|
||||
kMDTimeOut = kMD | 14,
|
||||
kMDBuddySpaceFull = kMD | 15,
|
||||
kMDNetWorkError = kMD | 16,
|
||||
kMDNotImplementedYet = kMD | 17,
|
||||
// Make this error code the last one. Add new error code above it.
|
||||
kMDUnexpectedError = kMD | 127,
|
||||
|
||||
// ME
|
||||
kMEFailed = kME | 0x1,
|
||||
kMEInvalidInput = kME | 0x2,
|
||||
|
||||
// MC
|
||||
kMCFailed = kMC | 0x1,
|
||||
kMCDeviceError = kMC | 0x2,
|
||||
kMCInvalidInput = kMC | 0x3,
|
||||
kMCInvalidArgs = kMC | 0x4,
|
||||
|
||||
// Lite // Common error code, range: [-1, -100)
|
||||
kLiteError = kLite | (0x0FFFFFFF & -1), /**< Common error code. */
|
||||
kLiteNullptr = kLite | (0x0FFFFFFF & -2), /**< NULL pointer returned.*/
|
||||
kLiteParamInvalid = kLite | (0x0FFFFFFF & -3), /**< Invalid parameter.*/
|
||||
kLiteNoChange = kLite | (0x0FFFFFFF & -4), /**< No change. */
|
||||
kLiteSuccessExit = kLite | (0x0FFFFFFF & -5), /**< No error but exit. */
|
||||
kLiteMemoryFailed = kLite | (0x0FFFFFFF & -6), /**< Fail to create memory. */
|
||||
kLiteNotSupport = kLite | (0x0FFFFFFF & -7), /**< Fail to support. */
|
||||
kLiteThreadPoolError = kLite | (0x0FFFFFFF & -8), /**< Error occur in thread pool. */
|
||||
|
||||
// Executor error code, range: [-100,-200)
|
||||
kLiteOutOfTensorRange = kLite | (0x0FFFFFFF & -100), /**< Failed to check range. */
|
||||
kLiteInputTensorError = kLite | (0x0FFFFFFF & -101), /**< Failed to check input tensor. */
|
||||
kLiteReentrantError = kLite | (0x0FFFFFFF & -102), /**< Exist executor running. */
|
||||
|
||||
// Graph error code, range: [-200,-300)
|
||||
kLiteGraphFileError = kLite | (0x0FFFFFFF & -200), /**< Failed to verify graph file. */
|
||||
|
||||
// Node error code, range: [-300,-400)
|
||||
kLiteNotFindOp = kLite | (0x0FFFFFFF & -300), /**< Failed to find operator. */
|
||||
kLiteInvalidOpName = kLite | (0x0FFFFFFF & -301), /**< Invalid operator name. */
|
||||
kLiteInvalidOpAttr = kLite | (0x0FFFFFFF & -302), /**< Invalid operator attr. */
|
||||
kLiteOpExecuteFailure = kLite | (0x0FFFFFFF & -303), /**< Failed to execution operator. */
|
||||
|
||||
// Tensor error code, range: [-400,-500)
|
||||
kLiteFormatError = kLite | (0x0FFFFFFF & -400), /**< Failed to checking tensor format. */
|
||||
|
||||
// InferShape error code, range: [-500,-600)
|
||||
kLiteInferError = kLite | (0x0FFFFFFF & -500), /**< Failed to infer shape. */
|
||||
kLiteInferInvalid = kLite | (0x0FFFFFFF & -501), /**< Invalid infer shape before runtime. */
|
||||
|
||||
// User input param error code, range: [-600, 700)
|
||||
kLiteInputParamInvalid = kLite | (0x0FFFFFFF & -600), /**< Invalid input param by user. */
|
||||
};
|
||||
|
||||
class MS_API Status {
|
||||
public:
|
||||
Status();
|
||||
inline Status(enum StatusCode status_code, const std::string &status_msg = ""); // NOLINT(runtime/explicit)
|
||||
inline Status(const StatusCode code, int line_of_code, const char *file_name, const std::string &extra = "");
|
||||
|
||||
~Status() = default;
|
||||
|
||||
enum StatusCode StatusCode() const;
|
||||
inline std::string ToString() const;
|
||||
|
||||
int GetLineOfCode() const;
|
||||
inline std::string GetErrDescription() const;
|
||||
inline std::string SetErrDescription(const std::string &err_description);
|
||||
|
||||
friend std::ostream &operator<<(std::ostream &os, const Status &s);
|
||||
|
||||
bool operator==(const Status &other) const;
|
||||
bool operator==(enum StatusCode other_code) const;
|
||||
bool operator!=(const Status &other) const;
|
||||
bool operator!=(enum StatusCode other_code) const;
|
||||
|
||||
explicit operator bool() const;
|
||||
explicit operator int() const;
|
||||
|
||||
static Status OK();
|
||||
|
||||
bool IsOk() const;
|
||||
|
||||
bool IsError() const;
|
||||
|
||||
static inline std::string CodeAsString(enum StatusCode c);
|
||||
|
||||
private:
|
||||
// api without std::string
|
||||
explicit Status(enum StatusCode status_code, const std::vector<char> &status_msg);
|
||||
Status(const enum StatusCode code, int line_of_code, const char *file_name, const std::vector<char> &extra);
|
||||
std::vector<char> ToCString() const;
|
||||
std::vector<char> GetErrDescriptionChar() const;
|
||||
std::vector<char> SetErrDescription(const std::vector<char> &err_description);
|
||||
static std::vector<char> CodeAsCString(enum StatusCode c);
|
||||
|
||||
struct Data;
|
||||
std::shared_ptr<Data> data_;
|
||||
};
|
||||
|
||||
Status::Status(enum StatusCode status_code, const std::string &status_msg)
|
||||
: Status(status_code, StringToChar(status_msg)) {}
|
||||
Status::Status(const enum StatusCode code, int line_of_code, const char *file_name, const std::string &extra)
|
||||
: Status(code, line_of_code, file_name, StringToChar(extra)) {}
|
||||
std::string Status::ToString() const { return CharToString(ToCString()); }
|
||||
std::string Status::GetErrDescription() const { return CharToString(GetErrDescriptionChar()); }
|
||||
std::string Status::SetErrDescription(const std::string &err_description) {
|
||||
return CharToString(SetErrDescription(StringToChar(err_description)));
|
||||
}
|
||||
std::string Status::CodeAsString(enum StatusCode c) { return CharToString(CodeAsCString(c)); }
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_API_STATUS_H
|
||||
|
|
@ -1,137 +0,0 @@
|
|||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef MINDSPORE_INCLUDE_API_TYPES_H
|
||||
#define MINDSPORE_INCLUDE_API_TYPES_H
|
||||
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include "include/api/data_type.h"
|
||||
#include "include/api/dual_abi_helper.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#define MS_API __declspec(dllexport)
|
||||
#else
|
||||
#define MS_API __attribute__((visibility("default")))
|
||||
#endif
|
||||
|
||||
namespace mindspore {
|
||||
enum ModelType : uint32_t {
|
||||
kMindIR = 0,
|
||||
kAIR = 1,
|
||||
kOM = 2,
|
||||
kONNX = 3,
|
||||
// insert new data type here
|
||||
kUnknownType = 0xFFFFFFFF
|
||||
};
|
||||
|
||||
class MS_API MSTensor {
|
||||
public:
|
||||
class Impl;
|
||||
|
||||
static inline MSTensor *CreateTensor(const std::string &name, DataType type, const std::vector<int64_t> &shape,
|
||||
const void *data, size_t data_len) noexcept;
|
||||
static inline MSTensor *CreateRefTensor(const std::string &name, DataType type, const std::vector<int64_t> &shape,
|
||||
const void *data, size_t data_len) noexcept;
|
||||
static inline MSTensor *StringsToTensor(const std::string &name, const std::vector<std::string> &str);
|
||||
static inline std::vector<std::string> TensorToStrings(const MSTensor &tensor);
|
||||
static void DestroyTensorPtr(MSTensor *tensor) noexcept;
|
||||
|
||||
MSTensor();
|
||||
explicit MSTensor(const std::shared_ptr<Impl> &impl);
|
||||
inline MSTensor(const std::string &name, DataType type, const std::vector<int64_t> &shape, const void *data,
|
||||
size_t data_len);
|
||||
explicit MSTensor(std::nullptr_t);
|
||||
~MSTensor();
|
||||
|
||||
inline std::string Name() const;
|
||||
enum DataType DataType() const;
|
||||
const std::vector<int64_t> &Shape() const;
|
||||
int64_t ElementNum() const;
|
||||
|
||||
std::shared_ptr<const void> Data() const;
|
||||
void *MutableData();
|
||||
size_t DataSize() const;
|
||||
|
||||
bool IsDevice() const;
|
||||
|
||||
MSTensor *Clone() const;
|
||||
bool operator==(std::nullptr_t) const;
|
||||
bool operator!=(std::nullptr_t) const;
|
||||
|
||||
private:
|
||||
// api without std::string
|
||||
static MSTensor *CreateTensor(const std::vector<char> &name, enum DataType type, const std::vector<int64_t> &shape,
|
||||
const void *data, size_t data_len) noexcept;
|
||||
static MSTensor *CreateRefTensor(const std::vector<char> &name, enum DataType type, const std::vector<int64_t> &shape,
|
||||
const void *data, size_t data_len) noexcept;
|
||||
static MSTensor *CharStringsToTensor(const std::vector<char> &name, const std::vector<std::vector<char>> &str);
|
||||
static std::vector<std::vector<char>> TensorToStringChars(const MSTensor &tensor);
|
||||
|
||||
MSTensor(const std::vector<char> &name, enum DataType type, const std::vector<int64_t> &shape, const void *data,
|
||||
size_t data_len);
|
||||
std::vector<char> CharName() const;
|
||||
|
||||
friend class ModelImpl;
|
||||
std::shared_ptr<Impl> impl_;
|
||||
};
|
||||
|
||||
class MS_API Buffer {
|
||||
public:
|
||||
Buffer();
|
||||
Buffer(const void *data, size_t data_len);
|
||||
~Buffer();
|
||||
|
||||
const void *Data() const;
|
||||
void *MutableData();
|
||||
size_t DataSize() const;
|
||||
|
||||
bool ResizeData(size_t data_len);
|
||||
bool SetData(const void *data, size_t data_len);
|
||||
|
||||
Buffer Clone() const;
|
||||
|
||||
private:
|
||||
class Impl;
|
||||
std::shared_ptr<Impl> impl_;
|
||||
};
|
||||
|
||||
MSTensor *MSTensor::CreateTensor(const std::string &name, enum DataType type, const std::vector<int64_t> &shape,
|
||||
const void *data, size_t data_len) noexcept {
|
||||
return CreateTensor(StringToChar(name), type, shape, data, data_len);
|
||||
}
|
||||
|
||||
MSTensor *MSTensor::CreateRefTensor(const std::string &name, enum DataType type, const std::vector<int64_t> &shape,
|
||||
const void *data, size_t data_len) noexcept {
|
||||
return CreateRefTensor(StringToChar(name), type, shape, data, data_len);
|
||||
}
|
||||
|
||||
MSTensor *MSTensor::StringsToTensor(const std::string &name, const std::vector<std::string> &str) {
|
||||
return CharStringsToTensor(StringToChar(name), VectorStringToChar(str));
|
||||
}
|
||||
|
||||
std::vector<std::string> MSTensor::TensorToStrings(const MSTensor &tensor) {
|
||||
return VectorCharToString(TensorToStringChars(tensor));
|
||||
}
|
||||
|
||||
MSTensor::MSTensor(const std::string &name, enum DataType type, const std::vector<int64_t> &shape, const void *data,
|
||||
size_t data_len)
|
||||
: MSTensor(StringToChar(name), type, shape, data, data_len) {}
|
||||
|
||||
std::string MSTensor::Name() const { return CharToString(CharName()); }
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_API_TYPES_H
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
/**
|
||||
* Copyright 2019 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef MINDSPORE_INFERENCE_LOG_H_
|
||||
#define MINDSPORE_INFERENCE_LOG_H_
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <memory>
|
||||
#include <iostream>
|
||||
#include <chrono>
|
||||
#include <vector>
|
||||
|
||||
#ifndef ENABLE_ACL
|
||||
#include "mindspore/core/utils/log_adapter.h"
|
||||
#else // ENABLE_ACL
|
||||
#include "acl/acl.h"
|
||||
#endif
|
||||
|
||||
namespace mindspore::inference {
|
||||
|
||||
class LogStream {
|
||||
public:
|
||||
LogStream() { sstream_ = std::make_shared<std::stringstream>(); }
|
||||
~LogStream() = default;
|
||||
|
||||
template <typename T>
|
||||
LogStream &operator<<(const T &val) noexcept {
|
||||
(*sstream_) << val;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
LogStream &operator<<(const std::vector<T> &val) noexcept {
|
||||
(*sstream_) << "[";
|
||||
for (size_t i = 0; i < val.size(); i++) {
|
||||
(*this) << val[i];
|
||||
if (i + 1 < val.size()) {
|
||||
(*sstream_) << ", ";
|
||||
}
|
||||
}
|
||||
(*sstream_) << "]";
|
||||
return *this;
|
||||
}
|
||||
|
||||
LogStream &operator<<(std::ostream &func(std::ostream &os)) noexcept {
|
||||
(*sstream_) << func;
|
||||
return *this;
|
||||
}
|
||||
|
||||
friend class LogWriter;
|
||||
friend class Status;
|
||||
|
||||
private:
|
||||
std::shared_ptr<std::stringstream> sstream_;
|
||||
};
|
||||
|
||||
#ifndef ENABLE_ACL
|
||||
#define MSI_LOG(level) MS_LOG(level)
|
||||
|
||||
#define MSI_LOG_DEBUG MSI_LOG(DEBUG)
|
||||
#define MSI_LOG_INFO MSI_LOG(INFO)
|
||||
#define MSI_LOG_WARNING MSI_LOG(WARNING)
|
||||
#define MSI_LOG_ERROR MSI_LOG(ERROR)
|
||||
|
||||
#define MSI_ASSERT(item) MS_ASSERT(item)
|
||||
|
||||
#else // ENABLE_ACL
|
||||
|
||||
class LogWriter {
|
||||
public:
|
||||
LogWriter(const char *file, int line, const char *func, aclLogLevel log_level)
|
||||
: file_(file), line_(line), func_(func), log_level_(log_level) {}
|
||||
~LogWriter() = default;
|
||||
|
||||
void operator<(const LogStream &stream) const noexcept __attribute__((visibility("default"))) {
|
||||
std::ostringstream msg;
|
||||
msg << stream.sstream_->rdbuf();
|
||||
OutputLog(msg);
|
||||
}
|
||||
|
||||
private:
|
||||
void OutputLog(const std::ostringstream &msg) const { aclAppLog(log_level_, func_, file_, line_, msg.str().c_str()); }
|
||||
|
||||
const char *file_;
|
||||
int line_;
|
||||
const char *func_;
|
||||
aclLogLevel log_level_;
|
||||
};
|
||||
|
||||
#define MSILOG_IF(level) inference::LogWriter(__FILE__, __LINE__, __FUNCTION__, ACL_##level) < inference::LogStream()
|
||||
|
||||
#define MSI_LOG(level) MSI_LOG_##level
|
||||
|
||||
#define MSI_LOG_DEBUG MSILOG_IF(DEBUG)
|
||||
#define MSI_LOG_INFO MSILOG_IF(INFO)
|
||||
#define MSI_LOG_WARNING MSILOG_IF(WARNING)
|
||||
#define MSI_LOG_ERROR MSILOG_IF(ERROR)
|
||||
|
||||
#define MSI_ASSERT(item)
|
||||
|
||||
#endif // ENABLE_ACL
|
||||
|
||||
#define MSI_TIME_STAMP_START(name) auto time_start_##name = std::chrono::steady_clock::now();
|
||||
#define MSI_TIME_STAMP_END(name) \
|
||||
{ \
|
||||
auto time_end_##name = std::chrono::steady_clock::now(); \
|
||||
auto time_cost = std::chrono::duration<double, std::milli>(time_end_##name - time_start_##name).count(); \
|
||||
MSI_LOG_INFO << #name " Time Cost # " << time_cost << " ms ---------------------"; \
|
||||
}
|
||||
|
||||
#define INFER_STATUS(code) inference::Status(code) < inference::LogStream()
|
||||
#define ERROR_INFER_STATUS(status, type, msg) \
|
||||
MSI_LOG_ERROR << msg; \
|
||||
status = inference::Status(type, msg)
|
||||
|
||||
} // namespace mindspore::inference
|
||||
|
||||
#endif // MINDSPORE_INFERENCE_LOG_H_
|
||||
|
|
@ -0,0 +1,217 @@
|
|||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef MINDSPORE_INCLUDE_INFER_TENSOR_H_
|
||||
#define MINDSPORE_INCLUDE_INFER_TENSOR_H_
|
||||
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include <numeric>
|
||||
#include <map>
|
||||
#include <functional>
|
||||
|
||||
#include "securec/include/securec.h"
|
||||
#include "include/infer_log.h"
|
||||
|
||||
namespace mindspore {
|
||||
#define MS_API __attribute__((visibility("default")))
|
||||
namespace inference {
|
||||
enum DataType {
|
||||
kMSI_Unknown = 0,
|
||||
kMSI_Bool = 1,
|
||||
kMSI_Int8 = 2,
|
||||
kMSI_Int16 = 3,
|
||||
kMSI_Int32 = 4,
|
||||
kMSI_Int64 = 5,
|
||||
kMSI_Uint8 = 6,
|
||||
kMSI_Uint16 = 7,
|
||||
kMSI_Uint32 = 8,
|
||||
kMSI_Uint64 = 9,
|
||||
kMSI_Float16 = 10,
|
||||
kMSI_Float32 = 11,
|
||||
kMSI_Float64 = 12,
|
||||
};
|
||||
|
||||
class InferTensorBase {
|
||||
public:
|
||||
InferTensorBase() = default;
|
||||
virtual ~InferTensorBase() = default;
|
||||
|
||||
virtual DataType data_type() const = 0;
|
||||
virtual void set_data_type(DataType type) = 0;
|
||||
virtual std::vector<int64_t> shape() const = 0;
|
||||
virtual void set_shape(const std::vector<int64_t> &shape) = 0;
|
||||
virtual const void *data() const = 0;
|
||||
virtual size_t data_size() const = 0;
|
||||
virtual bool resize_data(size_t data_len) = 0;
|
||||
virtual void *mutable_data() = 0;
|
||||
|
||||
bool set_data(const void *data, size_t data_len) {
|
||||
resize_data(data_len);
|
||||
if (mutable_data() == nullptr) {
|
||||
MSI_LOG_ERROR << "set data failed, data len " << data_len;
|
||||
return false;
|
||||
}
|
||||
if (data_size() != data_len) {
|
||||
MSI_LOG_ERROR << "set data failed, tensor current data size " << data_size() << " not match data len "
|
||||
<< data_len;
|
||||
return false;
|
||||
}
|
||||
if (data_len == 0) {
|
||||
return true;
|
||||
}
|
||||
auto ret = memcpy_s(mutable_data(), data_size(), data, data_len);
|
||||
if (ret != 0) {
|
||||
MSI_LOG_ERROR << "Set data memcpy_s failed";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int64_t ElementNum() const {
|
||||
std::vector<int64_t> shapex = shape();
|
||||
return std::accumulate(shapex.begin(), shapex.end(), 1LL, std::multiplies<int64_t>());
|
||||
}
|
||||
|
||||
int GetTypeSize(DataType type) const {
|
||||
const std::map<DataType, size_t> type_size_map{
|
||||
{kMSI_Bool, sizeof(bool)}, {kMSI_Float64, sizeof(double)}, {kMSI_Int8, sizeof(int8_t)},
|
||||
{kMSI_Uint8, sizeof(uint8_t)}, {kMSI_Int16, sizeof(int16_t)}, {kMSI_Uint16, sizeof(uint16_t)},
|
||||
{kMSI_Int32, sizeof(int32_t)}, {kMSI_Uint32, sizeof(uint32_t)}, {kMSI_Int64, sizeof(int64_t)},
|
||||
{kMSI_Uint64, sizeof(uint64_t)}, {kMSI_Float16, sizeof(uint16_t)}, {kMSI_Float32, sizeof(float)},
|
||||
};
|
||||
auto it = type_size_map.find(type);
|
||||
if (it != type_size_map.end()) {
|
||||
return it->second;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
class InferTensor : public InferTensorBase {
|
||||
public:
|
||||
DataType type_;
|
||||
std::vector<int64_t> shape_;
|
||||
std::vector<uint8_t> data_;
|
||||
|
||||
public:
|
||||
InferTensor() = default;
|
||||
~InferTensor() = default;
|
||||
InferTensor(DataType type, std::vector<int64_t> shape, const void *data, size_t data_len) {
|
||||
set_data_type(type);
|
||||
set_shape(shape);
|
||||
set_data(data, data_len);
|
||||
}
|
||||
|
||||
void set_data_type(DataType type) override { type_ = type; }
|
||||
DataType data_type() const override { return type_; }
|
||||
|
||||
void set_shape(const std::vector<int64_t> &shape) override { shape_ = shape; }
|
||||
std::vector<int64_t> shape() const override { return shape_; }
|
||||
|
||||
const void *data() const override { return data_.data(); }
|
||||
size_t data_size() const override { return data_.size(); }
|
||||
|
||||
bool resize_data(size_t data_len) override {
|
||||
data_.resize(data_len);
|
||||
return true;
|
||||
}
|
||||
void *mutable_data() override { return data_.data(); }
|
||||
};
|
||||
|
||||
class InferImagesBase {
|
||||
public:
|
||||
InferImagesBase() = default;
|
||||
virtual ~InferImagesBase() = default;
|
||||
virtual size_t batch_size() const = 0;
|
||||
virtual bool get(size_t index, const void *&pic_buffer, uint32_t &pic_size) const = 0;
|
||||
virtual size_t input_index() const = 0; // the index of images as input in model
|
||||
};
|
||||
|
||||
class RequestBase {
|
||||
public:
|
||||
RequestBase() = default;
|
||||
virtual ~RequestBase() = default;
|
||||
virtual size_t size() const = 0;
|
||||
virtual const InferTensorBase *operator[](size_t index) const = 0;
|
||||
};
|
||||
|
||||
class ImagesRequestBase {
|
||||
public:
|
||||
ImagesRequestBase() = default;
|
||||
virtual ~ImagesRequestBase() = default;
|
||||
virtual size_t size() const = 0;
|
||||
virtual const InferImagesBase *operator[](size_t index) const = 0;
|
||||
};
|
||||
|
||||
class ReplyBase {
|
||||
public:
|
||||
ReplyBase() = default;
|
||||
virtual ~ReplyBase() = default;
|
||||
virtual size_t size() const = 0;
|
||||
virtual InferTensorBase *operator[](size_t index) = 0;
|
||||
virtual const InferTensorBase *operator[](size_t index) const = 0;
|
||||
virtual InferTensorBase *add() = 0;
|
||||
virtual void clear() = 0;
|
||||
};
|
||||
|
||||
class VectorInferTensorWrapReply : public ReplyBase {
|
||||
public:
|
||||
explicit VectorInferTensorWrapReply(std::vector<InferTensor> &tensor_list) : tensor_list_(tensor_list) {}
|
||||
~VectorInferTensorWrapReply() = default;
|
||||
|
||||
size_t size() const { return tensor_list_.size(); }
|
||||
InferTensorBase *operator[](size_t index) {
|
||||
if (index >= tensor_list_.size()) {
|
||||
MSI_LOG_ERROR << "visit invalid index " << index << " total size " << tensor_list_.size();
|
||||
return nullptr;
|
||||
}
|
||||
return &(tensor_list_[index]);
|
||||
}
|
||||
const InferTensorBase *operator[](size_t index) const {
|
||||
if (index >= tensor_list_.size()) {
|
||||
MSI_LOG_ERROR << "visit invalid index " << index << " total size " << tensor_list_.size();
|
||||
return nullptr;
|
||||
}
|
||||
return &(tensor_list_[index]);
|
||||
}
|
||||
InferTensorBase *add() {
|
||||
tensor_list_.push_back(InferTensor());
|
||||
return &(tensor_list_.back());
|
||||
}
|
||||
void clear() { tensor_list_.clear(); }
|
||||
std::vector<InferTensor> &tensor_list_;
|
||||
};
|
||||
|
||||
class VectorInferTensorWrapRequest : public RequestBase {
|
||||
public:
|
||||
explicit VectorInferTensorWrapRequest(const std::vector<InferTensor> &tensor_list) : tensor_list_(tensor_list) {}
|
||||
~VectorInferTensorWrapRequest() = default;
|
||||
|
||||
size_t size() const { return tensor_list_.size(); }
|
||||
const InferTensorBase *operator[](size_t index) const {
|
||||
if (index >= tensor_list_.size()) {
|
||||
MSI_LOG_ERROR << "visit invalid index " << index << " total size " << tensor_list_.size();
|
||||
return nullptr;
|
||||
}
|
||||
return &(tensor_list_[index]);
|
||||
}
|
||||
const std::vector<InferTensor> &tensor_list_;
|
||||
};
|
||||
} // namespace inference
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_INFER_TENSOR_H_
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef MINDSPORE_INCLUDE_MS_SESSION_H
|
||||
#define MINDSPORE_INCLUDE_MS_SESSION_H
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "include/infer_tensor.h"
|
||||
#include "include/infer_log.h"
|
||||
|
||||
namespace mindspore {
|
||||
namespace inference {
|
||||
enum StatusCode { SUCCESS = 0, FAILED, INVALID_INPUTS };
|
||||
|
||||
class Status {
|
||||
public:
|
||||
Status() : status_code_(FAILED) {}
|
||||
Status(enum StatusCode status_code, const std::string &status_msg = "")
|
||||
: status_code_(status_code), status_msg_(status_msg) {}
|
||||
~Status() = default;
|
||||
|
||||
bool IsSuccess() const { return status_code_ == SUCCESS; }
|
||||
enum StatusCode StatusCode() const { return status_code_; }
|
||||
std::string StatusMessage() const { return status_msg_; }
|
||||
bool operator==(const Status &other) const { return status_code_ == other.status_code_; }
|
||||
bool operator==(enum StatusCode other_code) const { return status_code_ == other_code; }
|
||||
bool operator!=(const Status &other) const { return status_code_ != other.status_code_; }
|
||||
bool operator!=(enum StatusCode other_code) const { return status_code_ != other_code; }
|
||||
operator bool() const = delete;
|
||||
Status &operator<(const LogStream &stream) noexcept __attribute__((visibility("default"))) {
|
||||
status_msg_ = stream.sstream_->str();
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
enum StatusCode status_code_;
|
||||
std::string status_msg_;
|
||||
};
|
||||
|
||||
class MS_API InferSession {
|
||||
public:
|
||||
InferSession() = default;
|
||||
virtual ~InferSession() = default;
|
||||
virtual Status InitEnv(const std::string &device_type, uint32_t device_id) = 0;
|
||||
virtual Status FinalizeEnv() = 0;
|
||||
virtual Status LoadModelFromFile(const std::string &file_name, uint32_t &model_id) = 0;
|
||||
virtual Status UnloadModel(uint32_t model_id) = 0;
|
||||
// override this method to avoid request/reply data copy
|
||||
virtual Status ExecuteModel(uint32_t model_id, const RequestBase &request, ReplyBase &reply) = 0;
|
||||
|
||||
virtual Status ExecuteModel(uint32_t model_id, const std::vector<InferTensor> &inputs,
|
||||
std::vector<InferTensor> &outputs) {
|
||||
VectorInferTensorWrapRequest request(inputs);
|
||||
VectorInferTensorWrapReply reply(outputs);
|
||||
return ExecuteModel(model_id, request, reply);
|
||||
}
|
||||
// default not support input data preprocess(decode, resize, crop, crop&paste, etc.)
|
||||
virtual Status ExecuteModel(uint32_t /*model_id*/,
|
||||
const ImagesRequestBase & /*images_inputs*/, // images for preprocess
|
||||
const RequestBase & /*request*/, ReplyBase & /*reply*/) {
|
||||
return FAILED;
|
||||
}
|
||||
virtual Status GetModelInputsInfo(uint32_t graph_id, std::vector<inference::InferTensor> *tensor_list) const {
|
||||
Status status(SUCCESS);
|
||||
return status;
|
||||
}
|
||||
static std::shared_ptr<InferSession> CreateSession(const std::string &device, uint32_t device_id);
|
||||
};
|
||||
} // namespace inference
|
||||
} // namespace mindspore
|
||||
#endif // MINDSPORE_INCLUDE_MS_SESSION_H
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
""".. MindSpore package."""
|
||||
|
||||
from ._check_version import check_version_and_env_config
|
||||
from . import common, train, log
|
||||
from . import common, train
|
||||
from .common import *
|
||||
from .ops import _op_impl
|
||||
from .train import *
|
||||
|
|
|
|||
|
|
@ -1,78 +0,0 @@
|
|||
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ============================================================================
|
||||
"""dependency package version check"""
|
||||
from argparse import ArgumentParser
|
||||
import sys
|
||||
|
||||
def parse_args():
|
||||
"""
|
||||
parse args .
|
||||
|
||||
Args:
|
||||
|
||||
Returns:
|
||||
args.
|
||||
|
||||
Examples:
|
||||
>>> parse_args()
|
||||
"""
|
||||
parser = ArgumentParser(description="MindSpore dependency packages version checker.")
|
||||
parser.add_argument("--mindspore_version", type=str, help="MindSpore version.")
|
||||
parser.add_argument("--supported_version", type=str, action='append', help="Supported environment version.")
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
def check_deps_version(mindspore_version, supported_version):
|
||||
"""
|
||||
check te/hccl/topi version
|
||||
|
||||
Args:
|
||||
mindspore_version (str): this mindspore package version
|
||||
supported_version (str list): supported Ascend 910 AI software package version by this mindspore package
|
||||
|
||||
Returns:
|
||||
void
|
||||
"""
|
||||
try:
|
||||
from hccl import sys_version as hccl_version
|
||||
v = hccl_version.__sys_version__
|
||||
if v not in supported_version:
|
||||
print(f"MindSpore version {mindspore_version} and \"hccl\" wheel package version {v} does not "
|
||||
"match, reference to the match info on: https://www.mindspore.cn/install")
|
||||
import te
|
||||
v = te.__version__
|
||||
if v not in supported_version:
|
||||
print(f"MindSpore version {mindspore_version} and \"te\" wheel package version {v} does not "
|
||||
"match, reference to the match info on: https://www.mindspore.cn/install")
|
||||
import topi
|
||||
v = topi.__version__
|
||||
if v not in supported_version:
|
||||
print(f"MindSpore version {mindspore_version} and \"topi\" wheel package version {v} does not "
|
||||
"match, reference to the match info on: https://www.mindspore.cn/install")
|
||||
|
||||
# pylint: disable=broad-except
|
||||
except Exception as e:
|
||||
print("CheckFailed: ", e.args)
|
||||
print("Minspore relies on the 3 whl packages of \"te\", \"topi\" and \"hccl\" in the \"fwkacllib\" "
|
||||
"folder of the Ascend 910 AI software package, please check whether they are installed "
|
||||
"correctly or not, reference to the match info on: https://www.mindspore.cn/install")
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
check_deps_version(args.mindspore_version, args.supported_version)
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.path = sys.path[1:] # avoid the impact of relative path env, only affect this process
|
||||
main()
|
||||
|
|
@ -15,10 +15,8 @@
|
|||
"""version and config check"""
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
from abc import abstractmethod, ABCMeta
|
||||
import numpy as np
|
||||
from packaging import version
|
||||
from . import log as logger
|
||||
from .version import __version__
|
||||
|
|
@ -42,125 +40,74 @@ class EnvChecker(metaclass=ABCMeta):
|
|||
|
||||
|
||||
class GPUEnvChecker(EnvChecker):
|
||||
"""GPU environment check."""
|
||||
"""gpu environment check"""
|
||||
|
||||
def __init__(self):
|
||||
self.version = ["10.1", "11.1"]
|
||||
self.lib_key_to_lib_name = {'libcu': 'libcuda.so'}
|
||||
self.version = ["10.1"]
|
||||
self.cuda_path = "/usr/local/cuda"
|
||||
if os.path.exists(self.cuda_path):
|
||||
# cuda default path
|
||||
self.cuda_bin = self.cuda_path + "/bin"
|
||||
self.cuda_lib = self.cuda_path + "/lib64"
|
||||
self.cuda_version = self.cuda_path + "/version.txt"
|
||||
else:
|
||||
# custom or unknown environment
|
||||
self.cuda_path = ""
|
||||
self.cuda_bin = ""
|
||||
self.cuda_lib = ""
|
||||
self.cuda_version = ""
|
||||
|
||||
# env
|
||||
self.path = os.getenv("PATH")
|
||||
self.ld_lib_path = os.getenv("LD_LIBRARY_PATH")
|
||||
|
||||
# check
|
||||
self.path_check = "/cuda"
|
||||
self.ld_lib_path_check = "/cuda"
|
||||
self.v = "0"
|
||||
self.cuda_lib_path = self._get_lib_path("libcu")
|
||||
self.cuda_bin_path = self._get_bin_path("cuda")
|
||||
|
||||
def check_env(self, e):
|
||||
self._check_env()
|
||||
raise e
|
||||
|
||||
def set_env(self):
|
||||
return
|
||||
if not self.cuda_bin:
|
||||
self._check_env()
|
||||
return
|
||||
|
||||
def _get_bin_path(self, bin_name):
|
||||
"""Get bin path by bin name."""
|
||||
if bin_name == "cuda":
|
||||
return self._get_cuda_bin_path()
|
||||
return []
|
||||
|
||||
def _get_cuda_bin_path(self):
|
||||
"""Get cuda bin path by lib path."""
|
||||
path_list = []
|
||||
for path in self.cuda_lib_path:
|
||||
path = os.path.abspath(path.strip()+"/bin/")
|
||||
if Path(path).is_dir():
|
||||
path_list.append(path)
|
||||
return np.unique(path_list)
|
||||
|
||||
def _get_nvcc_version(self, is_set_env):
|
||||
"""Get cuda version by nvcc command."""
|
||||
nvcc_result = subprocess.run(["nvcc --version | grep release"],
|
||||
timeout=3, text=True, capture_output=True, check=False, shell=True)
|
||||
if nvcc_result.returncode:
|
||||
if not is_set_env:
|
||||
for path in self.cuda_bin_path:
|
||||
if Path(path + "/nvcc").is_file():
|
||||
os.environ['PATH'] = path + ":" + os.environ['PATH']
|
||||
return self._get_nvcc_version(True)
|
||||
return ""
|
||||
result = nvcc_result.stdout
|
||||
for line in result.split('\n'):
|
||||
if line:
|
||||
return line.strip().split("release")[1].split(",")[0].strip()
|
||||
return ""
|
||||
if Path(self.cuda_bin).is_dir():
|
||||
os.environ['PATH'] = self.cuda_bin + ":" + os.environ['PATH']
|
||||
else:
|
||||
raise EnvironmentError(
|
||||
f"No such directory: {self.cuda_bin}, please check if cuda is installed correctly.")
|
||||
|
||||
def check_version(self):
|
||||
"""Check cuda version."""
|
||||
version_match = False
|
||||
for path in self.cuda_lib_path:
|
||||
version_file = path + "/version.txt"
|
||||
if not Path(version_file).is_file():
|
||||
continue
|
||||
if self._check_version(version_file):
|
||||
version_match = True
|
||||
break
|
||||
if not version_match:
|
||||
if self.v == "0":
|
||||
logger.warning("Cuda version file version.txt is not found, please confirm that the correct "
|
||||
"cuda version has been installed, you can refer to the "
|
||||
"installation guidelines: https://www.mindspore.cn/install")
|
||||
else:
|
||||
logger.warning(f"MindSpore version {__version__} and cuda version {self.v} does not match, "
|
||||
"please refer to the installation guide for version matching "
|
||||
"information: https://www.mindspore.cn/install")
|
||||
nvcc_version = self._get_nvcc_version(False)
|
||||
if nvcc_version and (nvcc_version not in self.version):
|
||||
logger.warning(f"MindSpore version {__version__} and nvcc(cuda bin) version {nvcc_version} "
|
||||
"does not match, please refer to the installation guide for version matching "
|
||||
"information: https://www.mindspore.cn/install")
|
||||
if not Path(self.cuda_version).is_file():
|
||||
logger.warning("Using custom cuda path, cuda version checking is skiped, please make sure "
|
||||
"cuda version is supported, you can reference to the installation guidelines "
|
||||
"https://www.mindspore.cn/install")
|
||||
return
|
||||
|
||||
def _check_version(self, version_file):
|
||||
"""Check cuda version by version.txt."""
|
||||
v = self._read_version(version_file)
|
||||
v = self._read_version(self.cuda_version)
|
||||
v = version.parse(v)
|
||||
v_str = str(v.major) + "." + str(v.minor)
|
||||
if v_str not in self.version:
|
||||
return False
|
||||
return True
|
||||
logger.warning(f"MindSpore version {__version__} and cuda version {v_str} does not match, "
|
||||
"reference to the match info on: https://www.mindspore.cn/install")
|
||||
|
||||
def _get_lib_path(self, lib_name):
|
||||
"""Get gpu lib path by ldd command."""
|
||||
path_list = []
|
||||
current_path = os.path.split(os.path.realpath(__file__))[0]
|
||||
try:
|
||||
ldd_result = subprocess.run(["ldd " + current_path + "/_c_expression*.so* | grep " + lib_name],
|
||||
timeout=10, text=True, capture_output=True, check=False, shell=True)
|
||||
if ldd_result.returncode:
|
||||
logger.error(f"{self.lib_key_to_lib_name[lib_name]} (need by mindspore-gpu) is not found, please "
|
||||
f"confirm that _c_expression.so is in directory:{current_path} and the correct cuda "
|
||||
"version has been installed, you can refer to the installation "
|
||||
"guidelines: https://www.mindspore.cn/install")
|
||||
return path_list
|
||||
result = ldd_result.stdout
|
||||
for i in result.split('\n'):
|
||||
path = i.partition("=>")[2]
|
||||
if path.lower().find("not found") > 0:
|
||||
logger.warning(f"Cuda {self.version} version(need by mindspore-gpu) is not found, please confirm "
|
||||
"that the path of cuda is set to the env LD_LIBRARY_PATH, please refer to the "
|
||||
"installation guidelines: https://www.mindspore.cn/install")
|
||||
continue
|
||||
path = path.partition(lib_name)[0]
|
||||
if path:
|
||||
path_list.append(os.path.abspath(path.strip() + "../"))
|
||||
return np.unique(path_list)
|
||||
except subprocess.TimeoutExpired:
|
||||
logger.warning("Failed to check cuda version due to the ldd command timeout, please confirm that "
|
||||
"the correct cuda version has been installed, you can refer to the "
|
||||
"installation guidelines: https://www.mindspore.cn/install")
|
||||
return path_list
|
||||
def _check_env(self):
|
||||
"""gpu cuda path check"""
|
||||
if self.path is None or self.path_check not in self.path:
|
||||
logger.warning("Can not find nvcc compiler(need by mindspore-gpu), please check if you have set env "
|
||||
"PATH, you can reference to the installation guidelines https://www.mindspore.cn/install")
|
||||
|
||||
if self.ld_lib_path is None or self.ld_lib_path_check not in self.ld_lib_path:
|
||||
logger.warning("Can not find cuda so(need by mindspore-gpu), please check if you have set env "
|
||||
"LD_LIBRARY_PATH, you can reference to the installation guidelines "
|
||||
"https://www.mindspore.cn/install")
|
||||
|
||||
def _read_version(self, file_path):
|
||||
"""Get gpu version info in version.txt."""
|
||||
"""get gpu version info"""
|
||||
with open(file_path, 'r') as f:
|
||||
all_info = f.readlines()
|
||||
for line in all_info:
|
||||
|
|
@ -174,7 +121,7 @@ class AscendEnvChecker(EnvChecker):
|
|||
"""ascend environment check"""
|
||||
|
||||
def __init__(self):
|
||||
self.version = ["1.77.22.3.220"]
|
||||
self.version = ["1.75.22.0.220"]
|
||||
atlas_nnae_version = "/usr/local/Ascend/nnae/latest/fwkacllib/version.info"
|
||||
atlas_toolkit_version = "/usr/local/Ascend/ascend-toolkit/latest/fwkacllib/version.info"
|
||||
hisi_fwk_version = "/usr/local/Ascend/fwkacllib/version.info"
|
||||
|
|
@ -201,7 +148,7 @@ class AscendEnvChecker(EnvChecker):
|
|||
self.tbe_path = self.fwk_path + "/lib64"
|
||||
self.cce_path = self.fwk_path + "/ccec_compiler/bin"
|
||||
self.fwk_version = hisi_fwk_version
|
||||
self.op_path = "/usr/local/Ascend/opp"
|
||||
self.op_path = ""
|
||||
else:
|
||||
# custom or unknown environment
|
||||
self.fwk_path = ""
|
||||
|
|
@ -218,10 +165,10 @@ class AscendEnvChecker(EnvChecker):
|
|||
self.ascend_opp_path = os.getenv("ASCEND_OPP_PATH")
|
||||
|
||||
# check content
|
||||
self.path_check = "/fwkacllib/ccec_compiler/bin"
|
||||
self.python_path_check = "opp/op_impl/built-in/ai_core/tbe"
|
||||
self.ld_lib_path_check_fwk = "/fwkacllib/lib64"
|
||||
self.ld_lib_path_check_addons = "/add-ons"
|
||||
self.path_check = "/fwkacllib/ccec_compiler/bin/"
|
||||
self.python_path_check = "opp/op_impl/built-in/ai_core/tbe/"
|
||||
self.ld_lib_path_check_fwk = "/fwkacllib/lib64/"
|
||||
self.ld_lib_path_check_addons = "/add-ons/"
|
||||
self.ascend_opp_path_check = "/op"
|
||||
self.v = ""
|
||||
|
||||
|
|
@ -231,34 +178,15 @@ class AscendEnvChecker(EnvChecker):
|
|||
|
||||
def check_version(self):
|
||||
if not Path(self.fwk_version).is_file():
|
||||
logger.warning("Using custom Ascend 910 AI software package path, package version checking is skipped, "
|
||||
logger.warning("Using custom Ascend 910 AI software package path, package version checking is skiped, "
|
||||
"please make sure Ascend 910 AI software package version is supported, you can reference to "
|
||||
"the installation guidelines https://www.mindspore.cn/install")
|
||||
return
|
||||
|
||||
v = self._read_version(self.fwk_version)
|
||||
if v not in self.version:
|
||||
v_list = str([x for x in self.version])
|
||||
logger.warning(f"MindSpore version {__version__} and Ascend 910 AI software package version {v} does not "
|
||||
f"match, the version of software package expect one of {v_list}, "
|
||||
"please reference to the match info on: https://www.mindspore.cn/install")
|
||||
|
||||
def check_deps_version(self):
|
||||
"""
|
||||
te, topi, hccl wheel package version check
|
||||
in order to update the change of 'LD_LIBRARY_PATH' env, run a sub process
|
||||
"""
|
||||
input_args = ["--mindspore_version=" + __version__]
|
||||
for v in self.version:
|
||||
input_args.append("--supported_version=" + v)
|
||||
deps_version_checker = os.path.join(os.path.split(os.path.realpath(__file__))[0], "_check_deps_version.py")
|
||||
call_cmd = [sys.executable, deps_version_checker] + input_args
|
||||
try:
|
||||
process = subprocess.run(call_cmd, timeout=3, text=True, capture_output=True, check=False)
|
||||
if process.stdout.strip() != "":
|
||||
logger.warning(process.stdout.strip())
|
||||
except subprocess.TimeoutExpired:
|
||||
logger.info("Package te, topi, hccl version check timed out, skip.")
|
||||
"match, reference to the match info on: https://www.mindspore.cn/install")
|
||||
|
||||
def set_env(self):
|
||||
if not self.tbe_path:
|
||||
|
|
@ -268,31 +196,16 @@ class AscendEnvChecker(EnvChecker):
|
|||
try:
|
||||
# pylint: disable=unused-import
|
||||
import te
|
||||
# pylint: disable=broad-except
|
||||
except Exception:
|
||||
except RuntimeError:
|
||||
if Path(self.tbe_path).is_dir():
|
||||
if os.getenv('LD_LIBRARY_PATH'):
|
||||
os.environ['LD_LIBRARY_PATH'] = self.tbe_path + ":" + os.environ['LD_LIBRARY_PATH']
|
||||
else:
|
||||
os.environ['LD_LIBRARY_PATH'] = self.tbe_path
|
||||
os.environ['LD_LIBRARY_PATH'] = self.tbe_path
|
||||
else:
|
||||
raise EnvironmentError(
|
||||
f"No such directory: {self.tbe_path}, Please check if Ascend 910 AI software package is "
|
||||
"installed correctly.")
|
||||
|
||||
# check te version after set te env
|
||||
self.check_deps_version()
|
||||
|
||||
if Path(self.op_impl_path).is_dir():
|
||||
# python path for sub process
|
||||
if os.getenv('PYTHONPATH'):
|
||||
os.environ['PYTHONPATH'] = self.op_impl_path + ":" + os.environ['PYTHONPATH']
|
||||
else:
|
||||
os.environ['PYTHONPATH'] = self.op_impl_path
|
||||
# sys path for this process
|
||||
sys.path.append(self.op_impl_path)
|
||||
|
||||
os.environ['TBE_IMPL_PATH'] = self.op_impl_path
|
||||
else:
|
||||
raise EnvironmentError(
|
||||
f"No such directory: {self.op_impl_path}, Please check if Ascend 910 AI software package is "
|
||||
|
|
@ -371,13 +284,13 @@ def check_version_and_env_config():
|
|||
def _set_pb_env():
|
||||
"""Set env variable `PROTOCOL_BUFFERS` to prevent memory overflow."""
|
||||
if os.getenv("PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION") == "cpp":
|
||||
logger.info("Current env variable `PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp`. "
|
||||
"When the checkpoint file is too large, "
|
||||
"it may cause memory limit error during load checkpoint file. "
|
||||
"This can be solved by set env `PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python`.")
|
||||
logger.warning("Current env variable `PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp`. "
|
||||
"When the checkpoint file is too large, "
|
||||
"it may cause memory limit error durning load checkpoint file. "
|
||||
"This can be solved by set env `PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python`.")
|
||||
elif os.getenv("PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION") is None:
|
||||
logger.info("Setting the env `PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python` to prevent memory overflow "
|
||||
"during save or load checkpoint file.")
|
||||
logger.warning("Setting the env `PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python` to prevent memory overflow "
|
||||
"during save or load checkpoint file.")
|
||||
os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python"
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
|
@ -37,9 +37,9 @@ class Rel(Enum):
|
|||
GE = 6 # >=
|
||||
# scalar range check
|
||||
INC_NEITHER = 7 # (), include neither
|
||||
INC_LEFT = 8 # [), include left
|
||||
INC_RIGHT = 9 # (], include right
|
||||
INC_BOTH = 10 # [], include both
|
||||
INC_LEFT = 8 # [), include left
|
||||
INC_RIGHT = 9 # (], include right
|
||||
INC_BOTH = 10 # [], include both
|
||||
# collection in, not in
|
||||
IN = 11
|
||||
NOT_IN = 12
|
||||
|
|
@ -92,59 +92,11 @@ rel_strs = {
|
|||
}
|
||||
|
||||
|
||||
def _check_3d_int_or_tuple(arg_name, arg_value, prim_name, allow_five=False, ret_five=False,
|
||||
greater_zero=True, third_one=False, three_input=False):
|
||||
"""
|
||||
Checks whether an argument is a positive int or tuple with 3 or 5(when allow_five is True) positive int elements.
|
||||
"""
|
||||
|
||||
def _raise_message(third_one_flag=False, three_input_flag=False):
|
||||
if third_one_flag:
|
||||
raise ValueError(f"For '{prim_name}' the depth of attr '{arg_name}' should be 1, but got {ret_value[-3]}")
|
||||
if three_input_flag:
|
||||
raise ValueError(f"For '{prim_name}' attr '{arg_name}' should be an positive int number or a tuple of "
|
||||
f"three positive int numbers, but got {arg_value}")
|
||||
raise ValueError(f"For '{prim_name}' attr '{arg_name}' should be an positive int number or a tuple of three "
|
||||
f"{'or five ' if allow_five else ''}positive int numbers, but got {arg_value}")
|
||||
|
||||
def _get_return_value():
|
||||
if isinstance(arg_value, int):
|
||||
ret = (1, 1, arg_value, arg_value, arg_value) if ret_five else (arg_value, arg_value, arg_value)
|
||||
elif len(arg_value) == 3:
|
||||
ret = (1, 1, arg_value[0], arg_value[1], arg_value[2]) if ret_five else arg_value
|
||||
elif len(arg_value) == 5:
|
||||
if not allow_five:
|
||||
_raise_message()
|
||||
ret = arg_value if ret_five else (arg_value[1], arg_value[2], arg_value[3])
|
||||
else:
|
||||
_raise_message()
|
||||
return ret
|
||||
|
||||
Validator.check_value_type(arg_name, arg_value, (int, tuple), prim_name)
|
||||
if three_input and isinstance(arg_value, tuple):
|
||||
if len(arg_value) != 3:
|
||||
_raise_message(three_input_flag=three_input)
|
||||
ret_value = _get_return_value()
|
||||
for item in ret_value:
|
||||
if isinstance(item, int) and not isinstance(item, bool):
|
||||
if greater_zero and item > 0:
|
||||
continue
|
||||
if not greater_zero and item >= 0:
|
||||
continue
|
||||
_raise_message()
|
||||
|
||||
if third_one:
|
||||
if ret_value[-3] != 1:
|
||||
_raise_message(third_one_flag=third_one)
|
||||
|
||||
return tuple(ret_value)
|
||||
|
||||
|
||||
def check_number(arg_value, value, rel, arg_type=int, arg_name=None, prim_name=None):
|
||||
"""
|
||||
Check argument integer.
|
||||
|
||||
Example:
|
||||
Usage:
|
||||
- number = check_int(number, 0, Rel.GE, "number", None) # number >= 0
|
||||
"""
|
||||
rel_fn = Rel.get_fns(rel)
|
||||
|
|
@ -173,7 +125,7 @@ def check_is_number(arg_value, arg_type, arg_name=None, prim_name=None):
|
|||
- number = check_is_number(number, int, "bias", "bias_class")
|
||||
"""
|
||||
prim_name = f'in \'{prim_name}\'' if prim_name else ''
|
||||
arg_name = f'\'{arg_name}\'' if arg_name else 'Input value'
|
||||
arg_name = f'\'{prim_name}\'' if arg_name else 'Input value'
|
||||
if isinstance(arg_value, arg_type) and not isinstance(arg_value, bool):
|
||||
if math.isinf(arg_value) or math.isnan(arg_value) or np.isinf(arg_value) or np.isnan(arg_value):
|
||||
raise ValueError(f'{arg_name} {prim_name} must be legal float, but got `{arg_value}`.')
|
||||
|
|
@ -440,17 +392,6 @@ class Validator:
|
|||
target, prim_name, reg, flag))
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def check_file_name_by_regular(target, reg=None, flag=re.ASCII, prim_name=None):
|
||||
"""Check whether file name is legitimate."""
|
||||
if reg is None:
|
||||
reg = r"^[0-9a-zA-Z\_\-\.\:\/\\]+$"
|
||||
if re.match(reg, target, flag) is None:
|
||||
prim_name = f'in `{prim_name}`' if prim_name else ""
|
||||
raise ValueError("'{}' {} is illegal, it should be match regular'{}' by flags'{}'".format(
|
||||
target, prim_name, reg, flag))
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def check_pad_value_by_mode(pad_mode, padding, prim_name):
|
||||
"""Validates value of padding according to pad_mode"""
|
||||
|
|
@ -459,7 +400,7 @@ class Validator:
|
|||
return padding
|
||||
|
||||
@staticmethod
|
||||
def check_subclass(arg_name, type_, template_types, prim_name, addition_error_info=None):
|
||||
def check_subclass(arg_name, type_, template_types, prim_name):
|
||||
"""Checks whether some type is subclass of another type"""
|
||||
if not isinstance(template_types, Iterable):
|
||||
template_types = (template_types,)
|
||||
|
|
@ -473,25 +414,38 @@ class Validator:
|
|||
hit = True
|
||||
break
|
||||
if not hit:
|
||||
if addition_error_info is None:
|
||||
addition_error_info = ''
|
||||
type_str = (type(type_).__name__ if isinstance(type_, (tuple, list)) else "") + str(type_)
|
||||
raise TypeError(f'For \'{prim_name}\', the type of `{arg_name}` should be subclass'
|
||||
f' of {", ".join((str(x) for x in template_types))}, but got {type_str}.'
|
||||
f' {addition_error_info}')
|
||||
raise TypeError(f'For \'{prim_name}\' the type of `{arg_name}` should be subclass'
|
||||
f' of {",".join((str(x) for x in template_types))}, but got {type_str}.')
|
||||
|
||||
@staticmethod
|
||||
def check_const_input(arg_name, arg_value, prim_name):
|
||||
"""Checks valid value."""
|
||||
if arg_value is None:
|
||||
raise ValueError(f'For \'{prim_name}\', the `{arg_name}` must be a const input, but got {arg_value}.')
|
||||
raise ValueError(f'For \'{prim_name}\' the `{arg_name}` must be a const input, but got {arg_value}.')
|
||||
return arg_value
|
||||
|
||||
@staticmethod
|
||||
def check_types_same_and_valid(args, valid_values, prim_name):
|
||||
"""Checks whether the types of inputs are the same and valid."""
|
||||
def check_type(arg_name, arg_value, valid_types):
|
||||
"""Type checking."""
|
||||
def raise_error_msg():
|
||||
"""func for raising error message when check failed"""
|
||||
raise TypeError(f'The type of `{arg_name}` should be in {valid_types}, but got {type(arg_value).__name__}.')
|
||||
|
||||
def _check_type_valid(arg):
|
||||
if isinstance(arg_value, type(mstype.tensor)):
|
||||
arg_value = arg_value.element_type()
|
||||
if isinstance(arg_value, bool) and bool not in tuple(valid_types):
|
||||
raise_error_msg()
|
||||
if arg_value in valid_types:
|
||||
return arg_value
|
||||
if isinstance(arg_value, tuple(valid_types)):
|
||||
return arg_value
|
||||
raise_error_msg()
|
||||
|
||||
@staticmethod
|
||||
def check_type_same(args, valid_values, prim_name):
|
||||
"""Checks whether the types of inputs are the same."""
|
||||
def _check_tensor_type(arg):
|
||||
arg_key, arg_val = arg
|
||||
elem_type = arg_val
|
||||
Validator.check_subclass(arg_key, elem_type, valid_values, prim_name)
|
||||
|
|
@ -501,29 +455,21 @@ class Validator:
|
|||
arg1_name, arg1_type = arg1
|
||||
arg2_name, arg2_type = arg2
|
||||
if arg1_type != arg2_type:
|
||||
raise TypeError(f'For \'{prim_name}\', type of `{arg2_name}` should be same as `{arg1_name}`,'
|
||||
raise TypeError(f'For \'{prim_name}\' type of `{arg2_name}` should be same as `{arg1_name}`,'
|
||||
f' but `{arg1_name}` with type {arg1_type} and `{arg2_name}` with type {arg2_type}.')
|
||||
return arg1
|
||||
|
||||
elem_types = map(_check_type_valid, args.items())
|
||||
elem_types = map(_check_tensor_type, args.items())
|
||||
reduce(_check_types_same, elem_types)
|
||||
|
||||
@staticmethod
|
||||
def check_tensors_dtypes_same_and_valid(args, valid_dtypes, prim_name):
|
||||
"""Checks whether the element types of input tensors are the same and valid."""
|
||||
valid_dtypes = valid_dtypes if isinstance(valid_dtypes, Iterable) else [valid_dtypes]
|
||||
tensor_types = [mstype.tensor_type(t) for t in valid_dtypes]
|
||||
Validator.check_types_same_and_valid(args, tensor_types, prim_name)
|
||||
def check_tensor_type_same(args, valid_values, prim_name):
|
||||
"""Checks whether the element types of input tensors are the same."""
|
||||
tensor_types = [mstype.tensor_type(t) for t in valid_values]
|
||||
Validator.check_type_same(args, tensor_types, prim_name)
|
||||
|
||||
@staticmethod
|
||||
def check_tensor_dtype_valid(arg_name, arg_type, valid_dtypes, prim_name):
|
||||
"""Checks whether the element types of input tensors are valid."""
|
||||
valid_dtypes = valid_dtypes if isinstance(valid_dtypes, Iterable) else [valid_dtypes]
|
||||
tensor_types = [mstype.tensor_type(t) for t in valid_dtypes]
|
||||
Validator.check_subclass(arg_name, arg_type, tensor_types, prim_name)
|
||||
|
||||
@staticmethod
|
||||
def check_scalar_or_tensor_types_same(args, valid_values, prim_name, allow_mix=False):
|
||||
def check_scalar_or_tensor_type_same(args, valid_values, prim_name, allow_mix=False):
|
||||
"""
|
||||
Checks whether the types of inputs are the same. If the input args are tensors, checks their element types.
|
||||
If `allow_mix` is True, Tensor(float32) and float32 are type compatible, otherwise an exception will be raised.
|
||||
|
|
@ -534,7 +480,7 @@ class Validator:
|
|||
if isinstance(arg_val, type(mstype.tensor)):
|
||||
arg_val = arg_val.element_type()
|
||||
if not arg_val in valid_values:
|
||||
raise TypeError(f'For \'{prim_name}\', the `{arg_key}` should be in {valid_values},'
|
||||
raise TypeError(f'For \'{prim_name}\' the `{arg_key}` should be in {valid_values},'
|
||||
f' but `{arg_key}` is {arg_val}.')
|
||||
return arg
|
||||
|
||||
|
|
@ -557,7 +503,6 @@ class Validator:
|
|||
raise TypeError(f'For \'{prim_name}\' type of `{arg2_name}` should be same as `{arg1_name}`,'
|
||||
f' but `{arg1_name}` is {arg1_type} and `{arg2_name}` is {arg2_type}.')
|
||||
return arg1
|
||||
|
||||
reduce(_check_types_same, map(_check_argument_type, args.items()))
|
||||
|
||||
@staticmethod
|
||||
|
|
@ -567,40 +512,40 @@ class Validator:
|
|||
|
||||
def raise_error_msg():
|
||||
"""func for raising error message when check failed"""
|
||||
type_names = [t.__name__ if hasattr(t, '__name__') else str(t) for t in valid_types]
|
||||
type_names = [t.__name__ for t in valid_types]
|
||||
num_types = len(valid_types)
|
||||
msg_prefix = f"For '{prim_name}', the" if prim_name else "The"
|
||||
msg_prefix = f'For \'{prim_name}\' the' if prim_name else 'The'
|
||||
raise TypeError(f'{msg_prefix} type of `{arg_name}` should be {"one of " if num_types > 1 else ""}'
|
||||
f'{type_names if num_types > 1 else type_names[0]}, '
|
||||
f'but got {arg_value} with type {type(arg_value).__name__}.')
|
||||
f'{type_names if num_types > 1 else type_names[0]}, but got {type(arg_value).__name__}.')
|
||||
|
||||
# Notice: bool is subclass of int, so `check_value_type('x', True, [int])` will check fail, and
|
||||
# `check_value_type('x', True, [bool, int])` will check pass
|
||||
if isinstance(arg_value, bool) and bool not in tuple(valid_types):
|
||||
raise_error_msg()
|
||||
if not isinstance(arg_value, tuple(valid_types)):
|
||||
raise_error_msg()
|
||||
return arg_value
|
||||
if isinstance(arg_value, tuple(valid_types)):
|
||||
return arg_value
|
||||
raise_error_msg()
|
||||
|
||||
@staticmethod
|
||||
def check_type_name(arg_name, arg_type, valid_types, prim_name):
|
||||
"""Checks whether a type in some specified types"""
|
||||
valid_types = valid_types if isinstance(valid_types, Iterable) else (valid_types,)
|
||||
|
||||
def raise_error_msg():
|
||||
"""func for raising error message when check failed"""
|
||||
type_names = [t.__name__ if hasattr(t, '__name__') else t for t in valid_types]
|
||||
num_types = len(valid_types)
|
||||
msg_prefix = f"For '{prim_name}', the" if prim_name else "The"
|
||||
raise TypeError(f"{msg_prefix} '{arg_name}' should be {'one of ' if num_types > 1 else ''}"
|
||||
f"{type_names if num_types > 1 else type_names[0]}, "
|
||||
f"but got {arg_type.__name__ if hasattr(arg_type, '__name__') else repr(arg_type)}.")
|
||||
def get_typename(t):
|
||||
return t.__name__ if hasattr(t, '__name__') else str(t)
|
||||
|
||||
if isinstance(arg_type, type(mstype.tensor)):
|
||||
arg_type = arg_type.element_type()
|
||||
if arg_type not in valid_types:
|
||||
raise_error_msg()
|
||||
return arg_type
|
||||
|
||||
if arg_type in valid_types:
|
||||
return arg_type
|
||||
type_names = [get_typename(t) for t in valid_types]
|
||||
msg_prefix = f'For \'{prim_name}\' the' if prim_name else 'The'
|
||||
if len(valid_types) == 1:
|
||||
raise TypeError(f'{msg_prefix} type of `{arg_name}` should be {type_names[0]},'
|
||||
f' but got {get_typename(arg_type)}.')
|
||||
raise TypeError(f'{msg_prefix} type of `{arg_name}` should be one of {type_names},'
|
||||
f' but got {get_typename(arg_type)}.')
|
||||
|
||||
@staticmethod
|
||||
def check_reduce_shape(ori_shape, shape, axis, prim_name):
|
||||
|
|
@ -611,123 +556,6 @@ class Validator:
|
|||
raise ValueError(f'For {prim_name}, {ori_shape} reduce on {axis} should be '
|
||||
f'{tuple(exp_shape)}, but got {shape}.')
|
||||
|
||||
@staticmethod
|
||||
def check_astype_dtype(dtype):
|
||||
"""Check whether dtype is a valid input, and convert to mstype"""
|
||||
all_types = mstype.__dtype__ + ["int", "float", "bool"]
|
||||
if isinstance(dtype, str):
|
||||
if dtype.lower() not in all_types:
|
||||
raise TypeError(f"`{dtype}` not understood.")
|
||||
dtype = mstype.pytype_to_dtype(np.dtype(dtype.lower()))
|
||||
elif isinstance(dtype, type):
|
||||
dtype = mstype.pytype_to_dtype(dtype)
|
||||
elif not dtype in mstype.number_type + (mstype.bool_,):
|
||||
raise TypeError(f"`{dtype}` not understood.")
|
||||
return dtype
|
||||
|
||||
@staticmethod
|
||||
def check_transpose_axis(axes, ndim):
|
||||
"""Check the axis argument for tensor.transpose"""
|
||||
if not axes or (len(axes) == 1 and axes[0] is None):
|
||||
return tuple(range(ndim-1, -1, -1))
|
||||
|
||||
if len(axes) == 1:
|
||||
perm = axes[0]
|
||||
# if only one argument provided, it must be tuple or list
|
||||
if isinstance(perm, list):
|
||||
perm = tuple(perm)
|
||||
else:
|
||||
if not isinstance(perm, tuple):
|
||||
raise TypeError(f"The `axes` should be a tuple/list, or series of int, but got {type(axes[0])}")
|
||||
return perm
|
||||
|
||||
# if multiple arguments provided, it must be `ndim` number of ints
|
||||
if len(axes) != ndim:
|
||||
raise ValueError("The number of axes must equal to the dimension of tensor.")
|
||||
return axes
|
||||
|
||||
@staticmethod
|
||||
def check_reshape_shp(shp):
|
||||
"""Check the shape argument for tensor.reshape"""
|
||||
|
||||
if len(shp) == 1:
|
||||
new_shape = shp[0]
|
||||
# if only one argument provided, it must be int, tuple or list
|
||||
if isinstance(new_shape, int):
|
||||
return shp
|
||||
if isinstance(new_shape, list):
|
||||
new_shape = tuple(new_shape)
|
||||
else:
|
||||
if not isinstance(new_shape, tuple):
|
||||
raise TypeError(
|
||||
f"The `shape` should be an int, or tuple/list, or series of int, but got {type(shp[0])}")
|
||||
return new_shape
|
||||
|
||||
return shp
|
||||
|
||||
@staticmethod
|
||||
def check_flatten_order(order):
|
||||
"""Check flatten function input order"""
|
||||
if not isinstance(order, str):
|
||||
raise TypeError(f"The order variable should be a string, but got {type(order)}")
|
||||
if order not in ('C', 'F'):
|
||||
raise ValueError(f"only `C` and `F` are supported as order, but got {order}")
|
||||
return order
|
||||
|
||||
@staticmethod
|
||||
def check_swapaxes_axis(axes, ndim):
|
||||
"""Check all the axes argument for tensor.swapaxes"""
|
||||
if isinstance(axes, int):
|
||||
check_axis_in_range(axes, ndim)
|
||||
return axes % ndim
|
||||
if isinstance(axes, (tuple, list)):
|
||||
for axis in axes:
|
||||
if not isinstance(axis, int):
|
||||
raise TypeError(f"axis argument should be integer, but got {type(axis)}.")
|
||||
check_axis_in_range(axis, ndim)
|
||||
axes = tuple(map(lambda x: x % ndim, axes))
|
||||
return axes
|
||||
raise TypeError(f"axes should be integer, list or tuple for check, but got {type(axes)}.")
|
||||
|
||||
@staticmethod
|
||||
def prepare_shape_for_squeeze(shape, axes):
|
||||
"""
|
||||
Creates the squeezed new shape based on the tensor and given axes.
|
||||
|
||||
Args:
|
||||
shape (tuple): the shape of the tensor
|
||||
axes Union[int, tuple(int), list(int)]: the axes with dimensions need to
|
||||
be squeezed.
|
||||
|
||||
Returns:
|
||||
new_shape(tuple): the shape with dimensions squeezed.
|
||||
"""
|
||||
new_shape = []
|
||||
ndim = len(shape)
|
||||
|
||||
# Convert to set
|
||||
if isinstance(axes, int):
|
||||
if axes >= ndim or axes < -ndim:
|
||||
raise ValueError(f"axis {axes} is out of bounds for tensor of dimension {ndim}")
|
||||
axes = {axes}
|
||||
|
||||
elif isinstance(axes, (list, tuple)):
|
||||
for axis in axes:
|
||||
if axis >= ndim or axis < -ndim:
|
||||
raise ValueError(f"axis {axis} is out of bounds for tensor of dimension {ndim}")
|
||||
axes = set(axes)
|
||||
|
||||
else:
|
||||
raise TypeError(f"only int, tuple and list are allowed for axes, but got {type(axes)}")
|
||||
|
||||
for idx, s in enumerate(shape):
|
||||
if s != 1 or (idx not in axes) and (idx - ndim not in axes):
|
||||
new_shape.append(s)
|
||||
# if an axis is selected with shape entry greater than one, an error is raised.
|
||||
if s != 1 and ((idx in axes) or (idx - ndim in axes)):
|
||||
raise ValueError(f"axis {axes} has shape entry {s} > 1, cannot be squeezed.")
|
||||
return tuple(new_shape)
|
||||
|
||||
|
||||
def check_input_format(input_param):
|
||||
"""Judge input format."""
|
||||
|
|
@ -756,47 +584,22 @@ def _expand_tuple(n_dimensions):
|
|||
return convert
|
||||
|
||||
|
||||
def check_axis_in_range(axis, ndim):
|
||||
"""Checks axes are with the bounds of ndim"""
|
||||
if -ndim <= axis < ndim:
|
||||
return True
|
||||
raise ValueError(f'axis {axis} is out of bounds for tensor of dimension {ndim}')
|
||||
|
||||
|
||||
def _check_data_type_valid(data, valid_type):
|
||||
"""Check data type valid."""
|
||||
if valid_type is None:
|
||||
return data is None
|
||||
if isinstance(data, valid_type):
|
||||
if hasattr(data, 'size') and data.size == 0:
|
||||
msg = "Please provide non-empty data."
|
||||
logger.error(msg)
|
||||
raise ValueError(msg)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def check_input_data(*data, data_class):
|
||||
"""Input data check."""
|
||||
for item in data:
|
||||
if isinstance(item, (list, tuple)):
|
||||
for v in item:
|
||||
check_input_data(v, data_class=data_class)
|
||||
elif isinstance(item, dict):
|
||||
for v in item.values():
|
||||
check_input_data(v, data_class=data_class)
|
||||
else:
|
||||
if isinstance(data_class, (tuple, list)):
|
||||
ret = True in tuple(_check_data_type_valid(item, data_type) for data_type in data_class)
|
||||
else:
|
||||
ret = _check_data_type_valid(item, data_class)
|
||||
if not ret:
|
||||
data_class_str = tuple(i.__name__ if hasattr(i, '__name__') else i for i in data_class) \
|
||||
if isinstance(data_class, (tuple, list)) else \
|
||||
(data_class if data_class is None else data_class.__name__)
|
||||
raise ValueError(f'Please provide as model inputs either a single or '
|
||||
f'a tuple or a list or a dict of {data_class_str}, '
|
||||
f'but got part data type is {item if item is None else type(item).__name__}.')
|
||||
if not isinstance(item, data_class):
|
||||
raise ValueError(f'Please provide as model inputs'
|
||||
f' either a single'
|
||||
f' or a list of {data_class.__name__},'
|
||||
f' but got part data type is {str(type(item))}.')
|
||||
if item.size() == 0:
|
||||
msg = "Please provide non-empty data."
|
||||
logger.error(msg)
|
||||
raise ValueError(msg)
|
||||
|
||||
|
||||
def check_output_data(data):
|
||||
|
|
@ -808,6 +611,65 @@ def check_output_data(data):
|
|||
once = _expand_tuple(1)
|
||||
twice = _expand_tuple(2)
|
||||
triple = _expand_tuple(3)
|
||||
valid_data_types = (int, float, np.int8, np.int16, np.int32, np.int64,
|
||||
np.uint8, np.uint16, np.uint32, np.uint64, np.float16,
|
||||
np.float32, np.float64, bool, np.bool_)
|
||||
|
||||
|
||||
def check_type(arg_name, arg_value, valid_types):
|
||||
"""Check value type."""
|
||||
# if input type is Tensor ,get element type
|
||||
if isinstance(arg_value, type(mstype.tensor)):
|
||||
arg_value = arg_value.element_type()
|
||||
|
||||
# First, check if arg_value has argvalid_types
|
||||
if isinstance(arg_value, tuple(valid_types)):
|
||||
return type(arg_value).__name__
|
||||
|
||||
# Second, wrap arg_value with numpy array so that it can be checked through numpy api
|
||||
if isinstance(arg_value, (list, tuple)):
|
||||
arg_value = np.array(arg_value)
|
||||
|
||||
# Thirdly, check the data type by numpy's dtype api
|
||||
valid = False
|
||||
if isinstance(arg_value, np.ndarray):
|
||||
valid = arg_value.dtype in valid_data_types
|
||||
|
||||
# Notice: bool is subclass of int, so `check_type('x', True, [int])` will check fail, and
|
||||
# `check_type('x', True, [bool, int])` will check pass
|
||||
if isinstance(arg_value, bool) and bool not in tuple(valid_types):
|
||||
valid = False
|
||||
|
||||
if not valid:
|
||||
type_names = [t.__name__ for t in valid_types]
|
||||
if len(valid_types) == 1:
|
||||
raise TypeError(f'The type of `{arg_name}` should be {type_names[0]},'
|
||||
f' but got {type(arg_value).__name__}.')
|
||||
raise TypeError(f'The type of `{arg_name}` should be one of {type_names},'
|
||||
f' but got {type(arg_value).__name__}.')
|
||||
|
||||
return type(arg_value).__name__
|
||||
|
||||
|
||||
def check_typename(arg_name, arg_type, valid_types):
|
||||
"""Check type name."""
|
||||
|
||||
def get_typename(t):
|
||||
return t.__name__ if hasattr(t, '__name__') else str(t)
|
||||
|
||||
if isinstance(arg_type, type(mstype.tensor)):
|
||||
arg_type = arg_type.element_type()
|
||||
|
||||
if arg_type in valid_types:
|
||||
return arg_type
|
||||
if isinstance(arg_type, tuple(valid_types)):
|
||||
return arg_type
|
||||
type_names = [get_typename(t) for t in valid_types]
|
||||
if len(valid_types) == 1:
|
||||
raise TypeError(f'The type of `{arg_name}` should be {type_names[0]},'
|
||||
f' but got {get_typename(arg_type)}.')
|
||||
raise TypeError(f'The type of `{arg_name}` should be one of {type_names},'
|
||||
f' but got {get_typename(arg_type)}.')
|
||||
|
||||
|
||||
def args_type_check(*type_args, **type_kwargs):
|
||||
|
|
@ -831,7 +693,6 @@ def args_type_check(*type_args, **type_kwargs):
|
|||
if value is not None and not isinstance(value, bound_types[name]):
|
||||
raise TypeError('Argument {} must be {}'.format(name, bound_types[name]))
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
|
||||
return type_check
|
||||
|
|
|
|||
|
|
@ -20,33 +20,32 @@ from mindspore.common.tensor import Tensor
|
|||
import mindspore.common.dtype as mstype
|
||||
from mindspore.common.dtype import dtype_to_nptype, get_py_obj_dtype
|
||||
|
||||
|
||||
def ScalarAdd(x, y):
|
||||
def scalar_add(x, y):
|
||||
"""Implement `scalar_add`."""
|
||||
return x + y
|
||||
|
||||
|
||||
def ScalarMul(x, y):
|
||||
def scalar_mul(x, y):
|
||||
"""Implement `scalar_mul`."""
|
||||
return x * y
|
||||
|
||||
|
||||
def ScalarMod(x, y):
|
||||
def scalar_mod(x, y):
|
||||
"""Implement `scalar_mul`."""
|
||||
return x % y
|
||||
|
||||
|
||||
def ScalarSub(x, y):
|
||||
def scalar_sub(x, y):
|
||||
"""Implement `scalar_sub`."""
|
||||
return x - y
|
||||
|
||||
|
||||
def ScalarUsub(x):
|
||||
def scalar_usub(x):
|
||||
"""Implement `scalar_usub`."""
|
||||
return -x
|
||||
|
||||
|
||||
def TupleGetItem(x, index):
|
||||
def tuple_getitem(x, index):
|
||||
"""Implement `tuple_getitem`."""
|
||||
if isinstance(x, Tensor):
|
||||
x = x.asnumpy()
|
||||
|
|
@ -92,7 +91,7 @@ def zeros_like_tensor(x):
|
|||
return value
|
||||
|
||||
|
||||
def Switch(c, x, y):
|
||||
def switch(c, x, y):
|
||||
"""Implement `switch`."""
|
||||
return x if c else y
|
||||
|
||||
|
|
@ -132,16 +131,6 @@ def Depend(value, expr):
|
|||
return value
|
||||
|
||||
|
||||
def UpdateState(monad, expr):
|
||||
"""Implement `UpdateState`."""
|
||||
return monad
|
||||
|
||||
|
||||
def Load(value, u=None):
|
||||
"""Implement `Load`."""
|
||||
return value
|
||||
|
||||
|
||||
# only used in PyNative mode
|
||||
def make_ref(key, value, ref):
|
||||
return value
|
||||
|
|
@ -175,9 +164,8 @@ hyper_map = C.HyperMap()
|
|||
|
||||
def mixed_precision_cast(dst_type, x):
|
||||
"""Implement `mixed_precision_cast`."""
|
||||
|
||||
def cast_inner(data):
|
||||
if isinstance(data, Tensor) and data.dtype in (mstype.float32, mstype.float16, mstype.float64):
|
||||
if isinstance(data, Tensor) and data.dtype in (mstype.float32, mstype.float16):
|
||||
return F.cast(data, dst_type)
|
||||
return data
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
|
@ -15,4 +15,3 @@
|
|||
"""init"""
|
||||
from .splitter import split_with_json
|
||||
from .expander import get_op_expander
|
||||
from .parallel_estimate import estimate_calulation_amount, estimate_ops
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
|
@ -18,46 +18,35 @@ import json.decoder as jd
|
|||
import traceback
|
||||
from mindspore import log as logger
|
||||
import mindspore._extends.graph_kernel.expanders as expanders
|
||||
from mindspore._extends.graph_kernel.model.model import GraphKernelUnsupportedException
|
||||
|
||||
|
||||
def create_expander(expand_info):
|
||||
"""Create an expander according to op name"""
|
||||
op_name = str(expand_info['name'])
|
||||
if not hasattr(expanders, op_name):
|
||||
raise GraphKernelUnsupportedException("Generator do not support op: {}".format(op_name))
|
||||
expander = getattr(expanders, op_name)
|
||||
return expander(expand_info)
|
||||
|
||||
|
||||
def extract_expand_info(kernel_info):
|
||||
"""Convert the json into a more friendly format"""
|
||||
input_desc = []
|
||||
if 'input_desc' in kernel_info and kernel_info['input_desc']:
|
||||
for desc in kernel_info['input_desc']:
|
||||
input_desc += desc
|
||||
attrs = {}
|
||||
if 'attr' in kernel_info and kernel_info['attr']:
|
||||
for attr in kernel_info["attr"]:
|
||||
attrs[attr["name"]] = attr["value"]
|
||||
expand_info = {
|
||||
"name": kernel_info["name"],
|
||||
"input_desc": input_desc,
|
||||
"output_desc": kernel_info["output_desc"],
|
||||
"attr": attrs,
|
||||
"process": kernel_info["process"],
|
||||
}
|
||||
return expand_info
|
||||
|
||||
|
||||
def get_op_expander(json_str: str):
|
||||
"""get op expander by json info"""
|
||||
try:
|
||||
kernel_info = json.loads(json_str)
|
||||
expand_info = extract_expand_info(kernel_info)
|
||||
expand_info = kernel_info['expand_info']
|
||||
|
||||
expander = create_expander(expand_info)
|
||||
graph = expander.run()
|
||||
if 'name' not in expand_info:
|
||||
logger.error("expand info have no op name")
|
||||
return None
|
||||
if 'process' not in expand_info:
|
||||
logger.error("expand info have no processor info")
|
||||
return None
|
||||
|
||||
processor = expand_info['process']
|
||||
op_name = str(expand_info['name']).lower()
|
||||
expand_op_func_name = 'expand_' + op_name
|
||||
if not hasattr(expanders, expand_op_func_name):
|
||||
logger.error("Generator do not support op: {}".format(op_name))
|
||||
return None
|
||||
expand_op_func = getattr(expanders, expand_op_func_name)
|
||||
# generate graph desc.
|
||||
graph = expand_op_func(expand_info)
|
||||
if graph is None:
|
||||
logger.error("Failed to generate graph of: {}".format(op_name))
|
||||
return None
|
||||
|
||||
graph.set_processor(processor)
|
||||
|
||||
# dump graph to json desc.
|
||||
desc = graph.dump()
|
||||
|
|
@ -67,6 +56,3 @@ def get_op_expander(json_str: str):
|
|||
logger.error("Failed to generate graph kernel op")
|
||||
logger.error(traceback.format_exc())
|
||||
return None
|
||||
except GraphKernelUnsupportedException as e:
|
||||
logger.info(e.message)
|
||||
return ""
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
|
@ -14,36 +14,9 @@
|
|||
# ============================================================================
|
||||
"""expanders init"""
|
||||
|
||||
from .assign_add import AssignAdd
|
||||
from .bias_add import BiasAdd
|
||||
from .bias_add_grad import BiasAddGrad
|
||||
from .clip_by_norm_no_div_sum import ClipByNormNoDivSum
|
||||
from .dropout_grad import DropoutGrad
|
||||
from .fused_adam import FusedAdam
|
||||
from .fused_adam_weight_decay import FusedAdamWeightDecay
|
||||
from .batchnorm import BatchNorm
|
||||
from .batchnorm_grad import BatchNormGrad
|
||||
from .gelu import GeLU
|
||||
from .gelu_grad import GeLUGrad
|
||||
from .gkdropout import GkDropout
|
||||
from .layernorm import LayerNorm
|
||||
from .layernorm_grad import LayerNormGrad
|
||||
from .logsoftmax import LogSoftmax
|
||||
from .logsoftmax_grad import LogSoftmaxGrad
|
||||
from .maximum_grad import MaximumGrad
|
||||
from .minimum_grad import MinimumGrad
|
||||
from .reduce_mean import ReduceMean
|
||||
from .relu import ReLU
|
||||
from .relu_grad import ReluGrad
|
||||
from .softmax import Softmax
|
||||
from .sigmoid import Sigmoid
|
||||
from .sigmoid_grad import SigmoidGrad
|
||||
from .sigmoid_cross_entropy_with_logits import SigmoidCrossEntropyWithLogits
|
||||
from .sigmoid_cross_entropy_with_logits_grad import SigmoidCrossEntropyWithLogitsGrad
|
||||
from .softmax_cross_entropy_with_logits import SoftmaxCrossEntropyWithLogits
|
||||
from .sqrt_grad import SqrtGrad
|
||||
from .square import Square
|
||||
from .tanh_grad import TanhGrad
|
||||
from .tile import Tile
|
||||
from .lamb_apply_optimizer_assign import LambApplyOptimizerAssign
|
||||
from .lamb_apply_weight_assign import LambApplyWeightAssign
|
||||
from .gelu import expand_gelu
|
||||
from .layernorm import expand_layernorm
|
||||
from .softmax import expand_softmax
|
||||
from .square import expand_square
|
||||
from .bias_add import expand_biasadd
|
||||
from .bias_add_grad import expand_biasaddgrad
|
||||
|
|
|
|||
|
|
@ -1,146 +0,0 @@
|
|||
# Copyright 2021 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""GraphKernel expander utils"""
|
||||
from abc import ABCMeta, abstractmethod
|
||||
from mindspore._extends.graph_kernel.model import model_builder as builder
|
||||
from mindspore._extends.graph_kernel.model.model import GraphKernelUnsupportedException as GKException
|
||||
|
||||
|
||||
class Expander:
|
||||
"""
|
||||
Expander is the base class of expanders.
|
||||
|
||||
The method `_expand` should be overridden to implement the operator detail.
|
||||
"""
|
||||
__metaclass__ = ABCMeta
|
||||
|
||||
def __init__(self, expand_info):
|
||||
self.name = expand_info["name"]
|
||||
self.inputs = expand_info["input_desc"]
|
||||
self.outputs = expand_info["output_desc"]
|
||||
self.attrs = expand_info["attr"]
|
||||
self.processor = expand_info["process"]
|
||||
|
||||
def run(self):
|
||||
"""
|
||||
Expand the operator to a graph.
|
||||
|
||||
`GraphKernelUnsupportedException` would be raised if check failed.
|
||||
"""
|
||||
self._check()
|
||||
graph_builder = builder.GraphBuilder()
|
||||
with graph_builder.graph_scope(self.name) as graph_scope:
|
||||
# transform input_desc to Tensor
|
||||
self.inputs = [graph_builder.tensor(inp['shape'], inp['data_type'], inp['format']) for inp in self.inputs]
|
||||
graph_scope.set_input(*self.inputs)
|
||||
outputs = self._expand(graph_builder)
|
||||
if isinstance(outputs, (list, tuple)):
|
||||
graph_scope.set_output(*outputs)
|
||||
else:
|
||||
graph_scope.set_output(outputs)
|
||||
|
||||
graph = graph_builder.get()[0]
|
||||
graph.set_processor(self.processor)
|
||||
return graph
|
||||
|
||||
def _check(self):
|
||||
"""Check inputs"""
|
||||
|
||||
@abstractmethod
|
||||
def _expand(self, graph_builder):
|
||||
"""Expand operator, this function should be overridden in subclass"""
|
||||
raise Exception("_expand() is not implemented in {}".format(self.__class__.__name__))
|
||||
|
||||
|
||||
class ExpanderInfoValidator:
|
||||
"""ExpanderInfoValidator is the utility class which defines the validator decorator for expanders"""
|
||||
# pylint: disable=W0211
|
||||
@staticmethod
|
||||
def _add_check_function(cls, func):
|
||||
"""
|
||||
Rewrite the function `_check` in class Expander
|
||||
to append the new `func` after the original checks.
|
||||
"""
|
||||
old_check = getattr(cls, "_check")
|
||||
|
||||
def new_check(obj):
|
||||
old_check(obj)
|
||||
func(obj)
|
||||
setattr(cls, "_check", new_check)
|
||||
|
||||
@staticmethod
|
||||
def add_format(*input_format):
|
||||
"""
|
||||
Add new supported format for the operator
|
||||
|
||||
this function will add a list `__supported_formats` into the expander,
|
||||
saving the whitelist of formats that this op supports.
|
||||
it also rewrites the `_check` function to check the formats.
|
||||
"""
|
||||
format_list_name = "__supported_formats"
|
||||
|
||||
def _check_format(obj):
|
||||
inp_formats = [inp['format'] for inp in obj.inputs]
|
||||
for formats in getattr(obj, format_list_name):
|
||||
if len(formats) != len(inp_formats):
|
||||
raise GKException("length of registered format doesn't match with the input of {}".format(obj.name))
|
||||
if all([fmt == inp for fmt, inp in zip(formats, inp_formats)]):
|
||||
return
|
||||
raise GKException("Unregistered format ({}) for op {}".format(','.join(inp_formats), obj.name))
|
||||
|
||||
def wrapper(cls):
|
||||
if not issubclass(cls, Expander):
|
||||
raise Exception("{} should be subclass of Expander.".format(cls.__name__))
|
||||
if not hasattr(cls, format_list_name):
|
||||
setattr(cls, format_list_name, list())
|
||||
ExpanderInfoValidator._add_check_function(cls, _check_format)
|
||||
getattr(cls, format_list_name).append(input_format)
|
||||
return cls
|
||||
|
||||
return wrapper
|
||||
|
||||
@staticmethod
|
||||
def check_all_formats_same(cls):
|
||||
"""Check that all formats are the same"""
|
||||
def _check_format(obj):
|
||||
inp_formats = [inp['format'] for inp in obj.inputs]
|
||||
if all([fmt == inp_formats[0] for fmt in inp_formats[1:]]):
|
||||
return
|
||||
raise GKException("[check_all_formats_same] unmatched formats ({}) for op {}".format(
|
||||
','.join(inp_formats), obj.name))
|
||||
|
||||
def wrapper(*args, **kargs):
|
||||
if not issubclass(cls, Expander):
|
||||
raise Exception("{} should be subclass of Expander.".format(cls.__name__))
|
||||
ExpanderInfoValidator._add_check_function(cls, _check_format)
|
||||
return cls(*args, **kargs)
|
||||
|
||||
return wrapper
|
||||
|
||||
@staticmethod
|
||||
def check_attrs(*args):
|
||||
"""Check the attrs exist"""
|
||||
def _check_attr(obj):
|
||||
for a in args:
|
||||
if a not in obj.attrs:
|
||||
raise GKException("attr '{}' does not exist.".format(a))
|
||||
|
||||
def wrapper(cls):
|
||||
if not issubclass(cls, Expander):
|
||||
raise Exception("{} should be subclass of Expander.".format(cls.__name__))
|
||||
ExpanderInfoValidator._add_check_function(cls, _check_attr)
|
||||
return cls
|
||||
|
||||
return wrapper
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
# Copyright 2021 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for assign_add"""
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
|
||||
|
||||
@VLD.check_all_formats_same
|
||||
class AssignAdd(Expander):
|
||||
"""AssignAdd expander"""
|
||||
|
||||
def _expand(self, graph_builder):
|
||||
param, x = self.inputs
|
||||
next_para = graph_builder.emit('Add', [param, x])
|
||||
|
||||
param_result = graph_builder.emit(
|
||||
'InplaceAssign', [param, next_para, next_para], attrs={'fake_output': True})
|
||||
|
||||
return param_result
|
||||
|
|
@ -1,132 +0,0 @@
|
|||
# Copyright 2021 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for BatchNorm"""
|
||||
from mindspore._extends.graph_kernel.model.model import DataFormat as DF
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
|
||||
|
||||
@VLD.add_format(DF.NHWC, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT)
|
||||
@VLD.add_format(DF.NCHW, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT)
|
||||
@VLD.add_format(DF.DEFAULT, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT)
|
||||
@VLD.check_attrs('is_training', 'momentum', 'epsilon')
|
||||
class BatchNorm(Expander):
|
||||
"""BatchNorm expander"""
|
||||
def _expand(self, graph_builder):
|
||||
# get op info
|
||||
input_x = self.inputs[0]
|
||||
input_scale = self.inputs[1]
|
||||
input_offset = self.inputs[2]
|
||||
input_mean = self.inputs[3]
|
||||
input_variance = self.inputs[4]
|
||||
epsilon_v = graph_builder.value(input_scale.dtype, self.attrs['epsilon'], input_scale.data_format)
|
||||
|
||||
if self.attrs['is_training']:
|
||||
reduce_axis = ()
|
||||
shape_x = input_x.shape
|
||||
if input_x.data_format == "NHWC":
|
||||
reduce_axis = (0, 1, 2)
|
||||
num = shape_x[0] * shape_x[1] * shape_x[2]
|
||||
else:
|
||||
reduce_axis = (0, 2, 3)
|
||||
num = shape_x[0] * shape_x[2] * shape_x[3]
|
||||
num_rec = 1.0 / num
|
||||
num_rec_v = graph_builder.value(input_scale.dtype, num_rec, input_scale.data_format)
|
||||
|
||||
# compute mean value of input_x
|
||||
mean_sum = graph_builder.emit(
|
||||
'ReduceSum', [input_x], attrs={'reduce_axis': reduce_axis, 'keep_dims': False})
|
||||
mean_muls = graph_builder.emit('Mul', [mean_sum, num_rec_v])
|
||||
|
||||
# compute variance of input_x
|
||||
if not input_x.data_format == "NHWC":
|
||||
mean_muls_expand = graph_builder.emit('ExpandDims', [mean_muls], attrs={'axis': 1})
|
||||
mean_muls_expand = graph_builder.emit('ExpandDims', [mean_muls_expand], attrs={'axis': 2})
|
||||
else:
|
||||
mean_muls_expand = mean_muls
|
||||
var_sub = graph_builder.emit('Sub', [input_x, mean_muls_expand])
|
||||
var_mul = graph_builder.emit('Mul', [var_sub, var_sub])
|
||||
var_sum = graph_builder.emit('ReduceSum', [var_mul], attrs={'reduce_axis': reduce_axis, 'keep_dims': False})
|
||||
var_mul = graph_builder.emit('Mul', [var_sum, num_rec_v])
|
||||
|
||||
# y_sqrt_rec means 1 / sqrt(variance + epsilon), which is calculated in backward pass
|
||||
scalar_one = 1.0
|
||||
scalar_one_v = graph_builder.value(input_scale.dtype, scalar_one, input_scale.data_format)
|
||||
y_add = graph_builder.emit('Add', [var_mul, epsilon_v])
|
||||
y_sqrt = graph_builder.emit('Sqrt', [y_add])
|
||||
y_sqrt_rec = graph_builder.emit('RealDiv', [scalar_one_v, y_sqrt])
|
||||
|
||||
# compute res_y
|
||||
tmp_sub = graph_builder.emit('Sub', [input_x, mean_muls_expand])
|
||||
if not input_x.data_format == "NHWC":
|
||||
y_sqrt_rec_expand = graph_builder.emit('ExpandDims', [y_sqrt_rec], attrs={'axis': 1})
|
||||
y_sqrt_rec_expand = graph_builder.emit('ExpandDims', [y_sqrt_rec_expand], attrs={'axis': 2})
|
||||
else:
|
||||
y_sqrt_rec_expand = y_sqrt_rec
|
||||
y_norm = graph_builder.emit('Mul', [tmp_sub, y_sqrt_rec_expand])
|
||||
if not input_x.data_format == "NHWC":
|
||||
input_scale_expand = graph_builder.emit('ExpandDims', [input_scale], attrs={'axis': 1})
|
||||
input_scale_expand = graph_builder.emit('ExpandDims', [input_scale_expand], attrs={'axis': 2})
|
||||
else:
|
||||
input_scale_expand = input_scale
|
||||
res_y_mul = graph_builder.emit('Mul', [input_scale_expand, y_norm])
|
||||
if not input_x.data_format == "NHWC":
|
||||
input_offset_expand = graph_builder.emit('ExpandDims', [input_offset], attrs={'axis': 1})
|
||||
input_offset_expand = graph_builder.emit('ExpandDims', [input_offset_expand], attrs={'axis': 2})
|
||||
else:
|
||||
input_offset_expand = input_offset
|
||||
res_y = graph_builder.emit('Add', [res_y_mul, input_offset_expand])
|
||||
|
||||
# compute mean_res
|
||||
momentum_sub = scalar_one - self.attrs['momentum']
|
||||
momentum_v_sub = graph_builder.value(input_scale.dtype, momentum_sub, input_scale.data_format)
|
||||
new_running_mean_tmp = graph_builder.emit('Mul', [momentum_v_sub, input_mean])
|
||||
momentum_v = graph_builder.value(input_scale.dtype, self.attrs['momentum'], input_scale.data_format)
|
||||
current_mean_tmp = graph_builder.emit('Mul', [momentum_v, mean_muls])
|
||||
updated_moving_mean = graph_builder.emit('Add', [new_running_mean_tmp, current_mean_tmp])
|
||||
mean_res = graph_builder.emit(
|
||||
'InplaceAssign', [input_mean, updated_moving_mean, updated_moving_mean], attrs={'fake_output': True})
|
||||
|
||||
# variance_res is calculated by sample variance, and need to multiply by num / (num - 1)
|
||||
var_num = float(num) / (num - 1)
|
||||
var_num_v = graph_builder.value(input_scale.dtype, var_num, input_scale.data_format)
|
||||
var_mul_update = graph_builder.emit('Mul', [var_num_v, var_mul])
|
||||
new_running_var_tmp = graph_builder.emit('Mul', [momentum_v_sub, input_variance])
|
||||
current_var_tmp = graph_builder.emit('Mul', [momentum_v, var_mul_update])
|
||||
updated_moving_variance = graph_builder.emit('Add', [new_running_var_tmp, current_var_tmp])
|
||||
variance_res = graph_builder.emit(
|
||||
'InplaceAssign', [input_variance, updated_moving_variance, updated_moving_variance],
|
||||
attrs={'fake_output': True})
|
||||
|
||||
# compute reverse, just return a C shape tensor
|
||||
reserve = graph_builder.emit('Add', [input_offset, scalar_one_v])
|
||||
return res_y, mean_res, variance_res, mean_muls, y_sqrt_rec, reserve
|
||||
# infer mode
|
||||
if not input_x.data_format == "NHWC":
|
||||
input_mean = graph_builder.emit('ExpandDims', [input_mean], attrs={'axis': 1})
|
||||
input_mean = graph_builder.emit('ExpandDims', [input_mean], attrs={'axis': 2})
|
||||
input_scale = graph_builder.emit('ExpandDims', [input_scale], attrs={'axis': 1})
|
||||
input_scale = graph_builder.emit('ExpandDims', [input_scale], attrs={'axis': 2})
|
||||
input_offset = graph_builder.emit('ExpandDims', [input_offset], attrs={'axis': 1})
|
||||
input_offset = graph_builder.emit('ExpandDims', [input_offset], attrs={'axis': 2})
|
||||
x_sub = graph_builder.emit('Sub', [input_x, input_mean])
|
||||
x_sub_mul = graph_builder.emit('Mul', [input_scale, x_sub])
|
||||
var_add = graph_builder.emit('Add', [epsilon_v, input_variance])
|
||||
var_add_sqrt = graph_builder.emit('Sqrt', [var_add])
|
||||
if not input_x.data_format == "NHWC":
|
||||
var_add_sqrt = graph_builder.emit('ExpandDims', [var_add_sqrt], attrs={'axis': 1})
|
||||
var_add_sqrt = graph_builder.emit('ExpandDims', [var_add_sqrt], attrs={'axis': 2})
|
||||
x_div = graph_builder.emit('RealDiv', [x_sub_mul, var_add_sqrt])
|
||||
res_y = graph_builder.emit('Add', [input_offset, x_div])
|
||||
return res_y, var_add, var_add, var_add, var_add
|
||||
|
|
@ -1,102 +0,0 @@
|
|||
# Copyright 2021 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for BatchNormGrad"""
|
||||
from mindspore._extends.graph_kernel.model.model import DataFormat as DF
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
|
||||
@VLD.add_format(DF.NHWC, DF.NHWC, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT)
|
||||
@VLD.add_format(DF.NCHW, DF.NCHW, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT)
|
||||
@VLD.add_format(DF.DEFAULT, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT, DF.DEFAULT)
|
||||
@VLD.check_attrs('is_training', 'epsilon')
|
||||
class BatchNormGrad(Expander):
|
||||
"""BatchNormGrad expander"""
|
||||
def _expand(self, graph_builder):
|
||||
# get op info
|
||||
input_dy = self.inputs[0]
|
||||
input_x = self.inputs[1]
|
||||
input_scale = self.inputs[2]
|
||||
input_save_mean = self.inputs[3]
|
||||
input_save_inv_variance = self.inputs[4]
|
||||
|
||||
reduce_axis = ()
|
||||
shape_x = input_x.shape
|
||||
if input_x.data_format == "NHWC":
|
||||
reduce_axis = (0, 1, 2)
|
||||
num = shape_x[0] * shape_x[1] * shape_x[2]
|
||||
else:
|
||||
reduce_axis = (0, 2, 3)
|
||||
num = shape_x[0] * shape_x[2] * shape_x[3]
|
||||
ori_type = input_x.dtype
|
||||
if ori_type == 'float16':
|
||||
input_x = graph_builder.emit('Cast', [input_x], attrs={'dst_type': 'float32'})
|
||||
if input_dy.dtype == 'float16':
|
||||
input_dy = graph_builder.emit('Cast', [input_dy], attrs={'dst_type': 'float32'})
|
||||
num_rec = -1.0 / num
|
||||
num_rec_v = graph_builder.value(input_scale.dtype, num_rec, input_scale.data_format)
|
||||
dbeta = graph_builder.emit('ReduceSum', [input_dy], attrs={'reduce_axis': reduce_axis, 'keep_dims': False})
|
||||
|
||||
# in training input_save_inv_variance means 1 / sqrt(variance + epsilon), which is calculated in forward pass
|
||||
if self.attrs['is_training']:
|
||||
inv_variance = input_save_inv_variance
|
||||
else:
|
||||
epsilon_v = graph_builder.value(input_scale.dtype, self.attrs['epsilon'], input_scale.data_format)
|
||||
var_add = graph_builder.emit('Add', [input_save_inv_variance, epsilon_v])
|
||||
sqrt_var_eps = graph_builder.emit('Sqrt', [var_add])
|
||||
scalar_one = 1.0
|
||||
scalar_one_v = graph_builder.value(input_scale.dtype, scalar_one, input_scale.data_format)
|
||||
inv_variance = graph_builder.emit('RealDiv', [scalar_one_v, sqrt_var_eps])
|
||||
|
||||
# compute dgamma
|
||||
if not input_x.data_format == "NHWC":
|
||||
input_save_mean = graph_builder.emit('ExpandDims', [input_save_mean], attrs={'axis': 1})
|
||||
input_save_mean = graph_builder.emit('ExpandDims', [input_save_mean], attrs={'axis': 2})
|
||||
inv_variance = graph_builder.emit('ExpandDims', [inv_variance], attrs={'axis': 1})
|
||||
inv_variance = graph_builder.emit('ExpandDims', [inv_variance], attrs={'axis': 2})
|
||||
input_scale = graph_builder.emit('ExpandDims', [input_scale], attrs={'axis': 1})
|
||||
input_scale = graph_builder.emit('ExpandDims', [input_scale], attrs={'axis': 2})
|
||||
x_sub_mean = graph_builder.emit('Sub', [input_x, input_save_mean])
|
||||
x_div = graph_builder.emit('Mul', [x_sub_mean, inv_variance])
|
||||
dgamma_param = graph_builder.emit('Mul', [input_dy, x_div])
|
||||
dgamma = graph_builder.emit(
|
||||
'ReduceSum', [dgamma_param], attrs={'reduce_axis': reduce_axis, 'keep_dims': False})
|
||||
|
||||
# compute dx
|
||||
if self.attrs['is_training']:
|
||||
tmp_b = graph_builder.emit('Mul', [num_rec_v, dbeta])
|
||||
if not input_x.data_format == "NHWC":
|
||||
dgamma_expand = graph_builder.emit('ExpandDims', [dgamma], attrs={'axis': 1})
|
||||
dgamma_expand = graph_builder.emit('ExpandDims', [dgamma_expand], attrs={'axis': 2})
|
||||
tmp_b = graph_builder.emit('ExpandDims', [tmp_b], attrs={'axis': 1})
|
||||
tmp_b = graph_builder.emit('ExpandDims', [tmp_b], attrs={'axis': 2})
|
||||
else:
|
||||
dgamma_expand = dgamma
|
||||
x_sub_mean_dgamma_mul = graph_builder.emit('Mul', [x_div, dgamma_expand])
|
||||
tmp_c = graph_builder.emit('Mul', [num_rec_v, x_sub_mean_dgamma_mul])
|
||||
tmp_ab_add = graph_builder.emit('Add', [input_dy, tmp_b])
|
||||
tmp_abc_add = graph_builder.emit('Add', [tmp_ab_add, tmp_c])
|
||||
gamma_mul = graph_builder.emit('Mul', [input_scale, tmp_abc_add])
|
||||
dx = graph_builder.emit('Mul', [inv_variance, gamma_mul])
|
||||
else:
|
||||
y_scale = graph_builder.emit('Mul', [input_scale, input_dy])
|
||||
dx = graph_builder.emit('Mul', [inv_variance, y_scale])
|
||||
if ori_type == 'float16':
|
||||
dx = graph_builder.emit('Cast', [dx], attrs={'dst_type': 'float16'})
|
||||
|
||||
# set output tensors' data_format
|
||||
dx.data_format = self.outputs[0]['format']
|
||||
dgamma.data_format = self.outputs[1]['format']
|
||||
dbeta.data_format = self.outputs[2]['format']
|
||||
|
||||
return dx, dgamma, dbeta
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
|
@ -13,34 +13,50 @@
|
|||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for bias_add"""
|
||||
from mindspore._extends.graph_kernel.model.model import DataFormat as DF
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
from mindspore._extends.graph_kernel.model import model_builder as builder
|
||||
|
||||
|
||||
@VLD.add_format(DF.DEFAULT, DF.DEFAULT)
|
||||
@VLD.add_format(DF.NCHW, DF.DEFAULT)
|
||||
@VLD.add_format(DF.NHWC, DF.DEFAULT)
|
||||
class BiasAdd(Expander):
|
||||
def expand_biasadd(expand_info):
|
||||
"""BiasAdd expander"""
|
||||
|
||||
def _expand(self, graph_builder):
|
||||
input_x, input_y = self.inputs
|
||||
|
||||
if input_x.data_format == DF.NCHW:
|
||||
input_y_expand = graph_builder.emit('ExpandDims', [input_y], attrs={'axis': 1})
|
||||
input_y_expand = graph_builder.emit('ExpandDims', [input_y_expand], attrs={'axis': 2})
|
||||
result = graph_builder.emit('Add', [input_x, input_y_expand])
|
||||
elif input_x.data_format == DF.DEFAULT:
|
||||
# get op info.
|
||||
input_desc_0 = expand_info['input_desc'][0]
|
||||
input_desc_1 = expand_info['input_desc'][1]
|
||||
graph_builder = builder.GraphBuilder()
|
||||
# generate a graph.
|
||||
with graph_builder.graph_scope('main') as graph_scope:
|
||||
# create tensor input.
|
||||
input_x = graph_builder.tensor(
|
||||
input_desc_0['shape'], input_desc_0['data_type'], input_desc_0['format'])
|
||||
input_y = graph_builder.tensor(
|
||||
input_desc_1['shape'], input_desc_1['data_type'], input_desc_1['format'])
|
||||
graph_scope.set_input(input_x, input_y)
|
||||
if input_x.data_format == "NCHW":
|
||||
input_y_expand = graph_builder.emit(
|
||||
'ExpandDims', [input_y], attrs={'axis': 1})
|
||||
input_y_expand = graph_builder.emit(
|
||||
'ExpandDims', [input_y_expand], attrs={'axis': 2})
|
||||
result = graph_builder.emit('TensorAdd', [input_x, input_y_expand])
|
||||
elif input_x.data_format == "DefaultFormat":
|
||||
if len(input_x.shape) == 2:
|
||||
result = graph_builder.emit('Add', [input_x, input_y])
|
||||
result = graph_builder.emit('TensorAdd', [input_x, input_y])
|
||||
elif len(input_x.shape) == 3:
|
||||
input_y_expand = graph_builder.emit('ExpandDims', [input_y], attrs={'axis': 1})
|
||||
result = graph_builder.emit('Add', [input_x, input_y_expand])
|
||||
else: # len == 4
|
||||
input_y_expand = graph_builder.emit('ExpandDims', [input_y], attrs={'axis': 1})
|
||||
input_y_expand = graph_builder.emit('ExpandDims', [input_y_expand], attrs={'axis': 2})
|
||||
result = graph_builder.emit('Add', [input_x, input_y_expand])
|
||||
else: # NHWC
|
||||
result = graph_builder.emit('Add', [input_x, input_y])
|
||||
input_y_expand = graph_builder.emit(
|
||||
'ExpandDims', [input_y], attrs={'axis': 1})
|
||||
result = graph_builder.emit(
|
||||
'TensorAdd', [input_x, input_y_expand])
|
||||
else:
|
||||
input_y_expand = graph_builder.emit(
|
||||
'ExpandDims', [input_y], attrs={'axis': 1})
|
||||
input_y_expand = graph_builder.emit(
|
||||
'ExpandDims', [input_y_expand], attrs={'axis': 2})
|
||||
result = graph_builder.emit(
|
||||
'TensorAdd', [input_x, input_y_expand])
|
||||
else:
|
||||
result = graph_builder.emit('TensorAdd', [input_x, input_y])
|
||||
|
||||
return result
|
||||
# set graph output.
|
||||
graph_scope.set_output(result)
|
||||
|
||||
graph = graph_builder.get()[0]
|
||||
return graph
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
|
@ -13,37 +13,36 @@
|
|||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for bias_add"""
|
||||
from mindspore._extends.graph_kernel.model.model import DataFormat as DF
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
from mindspore._extends.graph_kernel.model import model_builder as builder
|
||||
|
||||
|
||||
@VLD.add_format(DF.DEFAULT)
|
||||
@VLD.add_format(DF.NHWC)
|
||||
@VLD.add_format(DF.NCHW)
|
||||
@VLD.add_format(DF.FRAC_NZ)
|
||||
class BiasAddGrad(Expander):
|
||||
def expand_biasaddgrad(expand_info):
|
||||
"""BiasAddGrad expander"""
|
||||
|
||||
def _expand(self, graph_builder):
|
||||
x = self.inputs[0]
|
||||
|
||||
# get op info.
|
||||
input_desc_0 = expand_info['input_desc'][0]
|
||||
graph_builder = builder.GraphBuilder()
|
||||
# generate a graph.
|
||||
with graph_builder.graph_scope('main') as graph_scope:
|
||||
# create tensor input.
|
||||
input_x = graph_builder.tensor(
|
||||
input_desc_0['shape'], input_desc_0['data_type'], input_desc_0['format'])
|
||||
graph_scope.set_input(input_x)
|
||||
reduce_axis = ()
|
||||
if x.data_format == DF.NHWC:
|
||||
if input_x.data_format == 'NHWC':
|
||||
reduce_axis = (0, 1, 2)
|
||||
elif x.data_format == DF.NCHW:
|
||||
elif input_x.data_format == 'NCHW':
|
||||
reduce_axis = (0, 2, 3)
|
||||
elif x.data_format == DF.FRAC_NZ:
|
||||
reduce_axis = (-2, -3)
|
||||
# Default format shape's length maybe equal 2 to 4, so different shape's length reduce axis are differnet
|
||||
else:
|
||||
# DefaultFormat shape's length should be from 2 to 4
|
||||
if len(x.shape) == 2:
|
||||
if len(input_x.shape) == 2:
|
||||
reduce_axis = (0,)
|
||||
elif len(x.shape) == 3:
|
||||
elif len(input_x.shape) == 3:
|
||||
reduce_axis = (0, 1)
|
||||
else:
|
||||
reduce_axis = (0, 2, 3)
|
||||
result = graph_builder.emit('ReduceSum', [x], attrs={'reduce_axis': reduce_axis, 'keep_dims': False})
|
||||
if x.data_format == DF.FRAC_NZ:
|
||||
out_shape = x.shape[:-4] + [x.shape[-1] * x.shape[-4]]
|
||||
result = graph_builder.emit('Reshape', [result], attrs={'shape': out_shape})
|
||||
return result
|
||||
result = graph_builder.emit('ReduceSum', [input_x], attrs={'reduce_axis': reduce_axis, 'keep_dims': False})
|
||||
# set graph output.
|
||||
graph_scope.set_output(result)
|
||||
|
||||
graph = graph_builder.get()[0]
|
||||
return graph
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for ClipByNormNoDivSum"""
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
|
||||
|
||||
@VLD.check_all_formats_same
|
||||
class ClipByNormNoDivSum(Expander):
|
||||
"""ClipByNormNoDivSum expander"""
|
||||
|
||||
def _expand(self, graph_builder):
|
||||
input_x0, input_x1, input_x2, input_x3 = self.inputs
|
||||
|
||||
# cal result
|
||||
greater_res = graph_builder.emit('Greater', [input_x0, input_x1])
|
||||
select_res0 = graph_builder.emit('Select', [greater_res, input_x0, input_x2])
|
||||
sqrt_res = graph_builder.emit('Sqrt', [select_res0])
|
||||
select_res1 = graph_builder.emit('Select', [greater_res, sqrt_res, input_x0])
|
||||
result = graph_builder.emit('Maximum', [select_res1, input_x3])
|
||||
|
||||
return result
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for DropoutGrad"""
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
|
||||
|
||||
@VLD.check_all_formats_same
|
||||
@VLD.check_attrs('keep_prob')
|
||||
class DropoutGrad(Expander):
|
||||
"""DropoutGrad expander"""
|
||||
|
||||
def _expand(self, graph_builder):
|
||||
input_dy, input_mask = self.inputs
|
||||
keep_prob = self.attrs['keep_prob']
|
||||
r_keep_prob = graph_builder.value(input_dy.dtype, 1.0 / keep_prob)
|
||||
result = graph_builder.emit('Mul', [input_dy, r_keep_prob])
|
||||
result = graph_builder.emit('Mul', [result, input_mask])
|
||||
return result
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for fused_adam"""
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
|
||||
|
||||
@VLD.check_all_formats_same
|
||||
class FusedAdam(Expander):
|
||||
"""FusedAdam expander"""
|
||||
|
||||
def _expand(self, graph_builder):
|
||||
beta_1, one_sub_beta_1, beta_2, one_sub_beta_2, eps, lr, param, m, v, gradient = self.inputs
|
||||
|
||||
beta_1_mul_m = graph_builder.emit('Mul', [beta_1, m])
|
||||
one_sub_beta_1_mul_grad = graph_builder.emit('Mul', [one_sub_beta_1, gradient])
|
||||
next_m = graph_builder.emit('Add', [beta_1_mul_m, one_sub_beta_1_mul_grad])
|
||||
beta_2_mul_v = graph_builder.emit('Mul', [beta_2, v])
|
||||
grad_square = graph_builder.emit('Mul', [gradient, gradient])
|
||||
one_sub_beta_2_mul_grad_square = graph_builder.emit('Mul', [one_sub_beta_2, grad_square])
|
||||
next_v = graph_builder.emit('Add', [beta_2_mul_v, one_sub_beta_2_mul_grad_square])
|
||||
sqrt_next_v = graph_builder.emit('Sqrt', [next_v])
|
||||
sqrt_next_v_add_eps = graph_builder.emit('Add', [sqrt_next_v, eps])
|
||||
update = graph_builder.emit('RealDiv', [next_m, sqrt_next_v_add_eps])
|
||||
update_with_lr = graph_builder.emit('Mul', [lr, update])
|
||||
next_para = graph_builder.emit('Sub', [param, update_with_lr])
|
||||
|
||||
param_result = graph_builder.emit(
|
||||
'InplaceAssign', [param, next_para, next_para], attrs={'fake_output': True})
|
||||
param_result = graph_builder.emit('InplaceAssign', [m, next_m, param_result], attrs={'fake_output': True})
|
||||
param_result = graph_builder.emit('InplaceAssign', [v, next_v, param_result], attrs={'fake_output': True})
|
||||
|
||||
return param_result
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for fused_adam_weight_decay"""
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
|
||||
|
||||
@VLD.check_all_formats_same
|
||||
class FusedAdamWeightDecay(Expander):
|
||||
"""FusedAdamWeightDecay expander"""
|
||||
|
||||
def _expand(self, graph_builder):
|
||||
beta_1, one_sub_beta_1, beta_2, one_sub_beta_2, eps, lr, param, m, v, gradient, weight_decay = self.inputs
|
||||
|
||||
# compute result
|
||||
beta_1_mul_m = graph_builder.emit('Mul', [beta_1, m])
|
||||
one_sub_beta_1_mul_grad = graph_builder.emit('Mul', [one_sub_beta_1, gradient])
|
||||
next_m = graph_builder.emit('Add', [beta_1_mul_m, one_sub_beta_1_mul_grad])
|
||||
beta_2_mul_v = graph_builder.emit('Mul', [beta_2, v])
|
||||
grad_square = graph_builder.emit('Mul', [gradient, gradient])
|
||||
one_sub_beta_2_mul_grad_square = graph_builder.emit('Mul', [one_sub_beta_2, grad_square])
|
||||
next_v = graph_builder.emit('Add', [beta_2_mul_v, one_sub_beta_2_mul_grad_square])
|
||||
sqrt_next_v = graph_builder.emit('Sqrt', [next_v])
|
||||
sqrt_next_v_add_eps = graph_builder.emit('Add', [sqrt_next_v, eps])
|
||||
update = graph_builder.emit('RealDiv', [next_m, sqrt_next_v_add_eps])
|
||||
param_with_weight_decay = graph_builder.emit('Mul', [weight_decay, param])
|
||||
update = graph_builder.emit('Add', [update, param_with_weight_decay])
|
||||
update_with_lr = graph_builder.emit('Mul', [lr, update])
|
||||
next_para = graph_builder.emit('Sub', [param, update_with_lr])
|
||||
|
||||
para_result = graph_builder.emit(
|
||||
'InplaceAssign', [param, next_para, next_para], attrs={'fake_output': True})
|
||||
para_result = graph_builder.emit('InplaceAssign', [m, next_m, para_result], attrs={'fake_output': True})
|
||||
para_result = graph_builder.emit('InplaceAssign', [v, next_v, para_result], attrs={'fake_output': True})
|
||||
|
||||
return para_result
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
# Copyright 2020 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
|
@ -13,36 +13,56 @@
|
|||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for gelu"""
|
||||
from ._utils import Expander
|
||||
from mindspore._extends.graph_kernel.model import model_builder as builder
|
||||
|
||||
CSVALUE = 0.044715
|
||||
CSVALUE_A = 1.5957691 # 2*np.sqrt(2/np.pi)
|
||||
|
||||
|
||||
class GeLU(Expander):
|
||||
"""GeLU expander"""
|
||||
CSVALUE = 0.044715
|
||||
CSVALUE_SQRT_TWO_DIV_PI = 0.7978845608028564 # np.sqrt(2/np.pi)
|
||||
def expand_gelu(expand_info):
|
||||
"""Gelu expander"""
|
||||
|
||||
def _expand(self, graph_builder):
|
||||
# cal formula are:
|
||||
# gelu(x) is 0.5 * x * (1.0 + tanh(y))
|
||||
# y is sqrt(2.0 / pi) * (x + 0.044715 * x * x * x)
|
||||
# get op info.
|
||||
input_desc = expand_info['input_desc'][0]
|
||||
graph_builder = builder.GraphBuilder()
|
||||
|
||||
input_x = self.inputs[0]
|
||||
# generate a graph.
|
||||
with graph_builder.graph_scope('main') as graph_scope:
|
||||
# create tensor input.
|
||||
input_x = graph_builder.tensor(input_desc['shape'], input_desc['data_type'], input_desc['format'])
|
||||
dtype = input_x.dtype
|
||||
if dtype == 'float16':
|
||||
input_x = graph_builder.emit('Cast', [input_x], attrs={'dst_type': 'float32'})
|
||||
|
||||
# cal y
|
||||
# cal tanh.
|
||||
mul_0 = graph_builder.emit('Mul', [input_x, input_x])
|
||||
pow_0 = graph_builder.emit('Mul', [mul_0, input_x])
|
||||
const_csvalue = graph_builder.value(pow_0.dtype, self.CSVALUE)
|
||||
const_csvalue = graph_builder.value(pow_0.dtype, CSVALUE, input_desc['format'])
|
||||
mul_1 = graph_builder.emit('Mul', [pow_0, const_csvalue])
|
||||
tanh_res = graph_builder.emit('Add', [input_x, mul_1])
|
||||
const_csvalue_sqrt_two_div_pi = graph_builder.value(tanh_res.dtype, self.CSVALUE_SQRT_TWO_DIV_PI)
|
||||
y = graph_builder.emit('Mul', [tanh_res, const_csvalue_sqrt_two_div_pi])
|
||||
tanh_res = graph_builder.emit('TensorAdd', [input_x, mul_1])
|
||||
|
||||
# cal gelu(x)
|
||||
tanh_y = graph_builder.emit('Tanh', [y])
|
||||
const_one = graph_builder.value(tanh_y.dtype, 1)
|
||||
const_half = graph_builder.value(tanh_y.dtype, 0.5)
|
||||
tanh_y_add_one = graph_builder.emit('Add', [tanh_y, const_one])
|
||||
mul_x = graph_builder.emit('Mul', [input_x, tanh_y_add_one])
|
||||
result = graph_builder.emit('Mul', [const_half, mul_x])
|
||||
const_csvalue_a = graph_builder.value(tanh_res.dtype, CSVALUE_A, input_desc['format'])
|
||||
mul_0 = graph_builder.emit('Mul', [tanh_res, const_csvalue_a])
|
||||
|
||||
return result
|
||||
const_zero = graph_builder.value(mul_0.dtype, 0.0, input_desc['format'])
|
||||
mul_0_min = graph_builder.emit('Minimum', [mul_0, const_zero])
|
||||
right_mul = graph_builder.emit('Exp', [mul_0_min])
|
||||
|
||||
mul_0_abs = graph_builder.emit('Abs', [mul_0])
|
||||
const_neg_one = graph_builder.value(mul_0_abs.dtype, -1.0, input_desc['format'])
|
||||
mul_0_abs_neg = graph_builder.emit('Mul', [mul_0_abs, const_neg_one])
|
||||
|
||||
mul_0_abs_neg_exp = graph_builder.emit('Exp', [mul_0_abs_neg])
|
||||
|
||||
const_one = graph_builder.value(mul_0_abs_neg_exp.dtype, 1.0, input_desc['format'])
|
||||
mul_0_abs_neg_exp_add = graph_builder.emit('TensorAdd', [mul_0_abs_neg_exp, const_one])
|
||||
left_mul = graph_builder.emit('RealDiv', [input_x, mul_0_abs_neg_exp_add])
|
||||
|
||||
result = graph_builder.emit('Mul', [left_mul, right_mul])
|
||||
if dtype == 'float16':
|
||||
result = graph_builder.emit('Cast', [result], attrs={'dst_type': 'float16'})
|
||||
# set graph output.
|
||||
graph_scope.set_output(result)
|
||||
|
||||
graph = graph_builder.get()[0]
|
||||
return graph
|
||||
|
|
|
|||
|
|
@ -1,70 +0,0 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for gelugrad"""
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
|
||||
|
||||
@VLD.check_all_formats_same
|
||||
class GeLUGrad(Expander):
|
||||
"""GeLUGrad expander"""
|
||||
CSVALUE = 0.044715
|
||||
CSVALUE_SQRT_TWO_DIV_PI = 0.7978845608028564 # np.sqrt(2/np.pi)
|
||||
CSVALUE_TRI = 0.134141 # CSVALUE * 3
|
||||
|
||||
def _expand(self, graph_builder):
|
||||
# cal formula are:
|
||||
# gelu_grad(dy, x) is dy * y'
|
||||
# y' is 0.5 * (1.0 + tanh(tanh_para)) + 0.5 * x * (1.0 - tanh(tanh_para) * tanh(para)) * mul_right
|
||||
# tanh_para is sqrt(2.0 / pi) * (x + 0.044715 * x * x * x)
|
||||
# mul_right is sqrt(2.0 / pi) * (1 + 3 * 0.044715 * x * x)
|
||||
|
||||
input_dy, input_x, _ = self.inputs
|
||||
|
||||
# create some const var
|
||||
const_csvalue = graph_builder.value(input_dy.dtype, self.CSVALUE)
|
||||
const_csvalue_sqrt_two_div_pi = graph_builder.value(input_dy.dtype, self.CSVALUE_SQRT_TWO_DIV_PI)
|
||||
const_csvalue_tri = graph_builder.value(input_dy.dtype, self.CSVALUE_TRI)
|
||||
const_one = graph_builder.value(input_dy.dtype, 1)
|
||||
const_half = graph_builder.value(input_dy.dtype, 0.5)
|
||||
|
||||
# cal mul_right
|
||||
mul_double = graph_builder.emit('Mul', [input_x, input_x])
|
||||
mul_double_mul_tri = graph_builder.emit('Mul', [const_csvalue_tri, mul_double])
|
||||
mul_add_one = graph_builder.emit('Add', [const_one, mul_double_mul_tri])
|
||||
mul_right = graph_builder.emit('Mul', [const_csvalue_sqrt_two_div_pi, mul_add_one])
|
||||
|
||||
# cal tanh_para
|
||||
mul_triple = graph_builder.emit('Mul', [input_x, mul_double])
|
||||
mul_triple_mul_csvalue = graph_builder.emit('Mul', [const_csvalue, mul_triple])
|
||||
mul_add_x = graph_builder.emit('Add', [input_x, mul_triple_mul_csvalue])
|
||||
tanh_para = graph_builder.emit('Mul', [const_csvalue_sqrt_two_div_pi, mul_add_x])
|
||||
|
||||
# cal 0.5 * (1.0 + tanh(tahn_para))
|
||||
tanh_res = graph_builder.emit('Tanh', [tanh_para])
|
||||
tanh_res_add_one = graph_builder.emit('Add', [const_one, tanh_res])
|
||||
half_mul_tanh_res_add_one = graph_builder.emit('Mul', [const_half, tanh_res_add_one])
|
||||
|
||||
# cal 0.5 * x * (1.0 - tanh(tanh_para) * tanh(tanh_para)) * mul_right
|
||||
tan_res_double = graph_builder.emit('Mul', [tanh_res, tanh_res])
|
||||
one_sub_tan_res_double = graph_builder.emit('Sub', [const_one, tan_res_double])
|
||||
half_mul_x = graph_builder.emit('Mul', [const_half, input_x])
|
||||
mul_tmp = graph_builder.emit('Mul', [half_mul_x, one_sub_tan_res_double])
|
||||
mul_final = graph_builder.emit('Mul', [mul_tmp, mul_right])
|
||||
|
||||
# cal result
|
||||
result_tmp = graph_builder.emit('Add', [half_mul_tanh_res_add_one, mul_final])
|
||||
result = graph_builder.emit('Mul', [input_dy, result_tmp])
|
||||
|
||||
return result
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
# Copyright 2020-2021 Huawei Technologies Co., Ltd
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ===========================================================================
|
||||
"""generate json desc for GkDropout"""
|
||||
from ._utils import Expander, ExpanderInfoValidator as VLD
|
||||
|
||||
|
||||
@VLD.check_all_formats_same
|
||||
@VLD.check_attrs('keep_prob')
|
||||
class GkDropout(Expander):
|
||||
"""GkDropout expander"""
|
||||
|
||||
def _expand(self, graph_builder):
|
||||
input_x, input_mask = self.inputs
|
||||
keep_prob = self.attrs['keep_prob']
|
||||
|
||||
r_keep_prob = graph_builder.value(input_x.dtype, 1.0 / keep_prob)
|
||||
keep_prob = graph_builder.value(input_x.dtype, keep_prob)
|
||||
|
||||
if input_mask.dtype != input_x.dtype:
|
||||
input_mask = graph_builder.emit('Cast', [input_mask], attrs={'dst_type': input_x.dtype})
|
||||
mask = graph_builder.emit('LessEqual', [input_mask, keep_prob]) # output is bool type
|
||||
mask = graph_builder.emit('Cast', [mask], attrs={'dst_type': input_x.dtype})
|
||||
|
||||
# compute result
|
||||
result = graph_builder.emit('Mul', [r_keep_prob, input_x])
|
||||
result = graph_builder.emit('Mul', [result, mask])
|
||||
|
||||
return result, mask
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue