From ca351939e81c9d75a9688df56b022d11de8f56f1 Mon Sep 17 00:00:00 2001 From: yeyunpeng Date: Wed, 14 Oct 2020 15:47:38 +0800 Subject: [PATCH 01/21] add mindspore lite java english docs --- docs/api_java/source_en/class_list.md | 12 +- docs/api_java/source_en/index.rst | 6 +- docs/api_java/source_en/lite_session.md | 188 ++++++++++++++++++++++++ docs/api_java/source_en/model.md | 64 ++++++++ docs/api_java/source_en/msconfig.md | 82 +++++++++++ docs/api_java/source_en/mstensor.md | 148 +++++++++++++++++++ docs/api_java/source_zh_cn/model.md | 2 +- 7 files changed, 499 insertions(+), 3 deletions(-) create mode 100644 docs/api_java/source_en/lite_session.md create mode 100644 docs/api_java/source_en/model.md create mode 100644 docs/api_java/source_en/msconfig.md create mode 100644 docs/api_java/source_en/mstensor.md diff --git a/docs/api_java/source_en/class_list.md b/docs/api_java/source_en/class_list.md index befeea5d38..5244b02ce5 100644 --- a/docs/api_java/source_en/class_list.md +++ b/docs/api_java/source_en/class_list.md @@ -1,3 +1,13 @@ # Class List -Java API is being translated, will be released soon. +| Package | Class Name | Description | +| ------------------------- | -------------- | ------------------------------------------------------------ | +| com.mindspore.lite.config | MSConfig | MSConfig defines for holding environment variables during runtime. | +| com.mindspore.lite.config | CpuBindMode | CpuBindMode defines the CPU binding mode. | +| com.mindspore.lite.config | DeviceType | DeviceType defines the back-end device type. | +| com.mindspore.lite | LiteSession | LiteSession defines session in MindSpore Lite for compiling Model and forwarding model. | +| com.mindspore.lite | Model | Model defines the model in MindSpore Lite for managing graph. | +| com.mindspore.lite | MSTensor | MSTensor defines the tensor in MindSpore Lite. | +| com.mindspore.lite | DataType | DataType defines the supported data types. | +| com.mindspore.lite | Version | Version is used to obtain the version information of MindSpore Lite. | + diff --git a/docs/api_java/source_en/index.rst b/docs/api_java/source_en/index.rst index f8e7fd507a..935aa0a5d2 100644 --- a/docs/api_java/source_en/index.rst +++ b/docs/api_java/source_en/index.rst @@ -10,4 +10,8 @@ MindSpore Java API :glob: :maxdepth: 1 - class_list \ No newline at end of file + class_list + lite_session + model + msconfig + mstensor \ No newline at end of file diff --git a/docs/api_java/source_en/lite_session.md b/docs/api_java/source_en/lite_session.md new file mode 100644 index 0000000000..8b71869df7 --- /dev/null +++ b/docs/api_java/source_en/lite_session.md @@ -0,0 +1,188 @@ +# LiteSession + +```java +import com.mindspore.lite.LiteSession; +``` + +LiteSession defines session in MindSpore Lite for compiling Model and forwarding model. + +## Public Member Functions + +| function | +| ------------------------------------------------------------ | +| [boolean init(MSConfig config)](#init) | +| [void bindThread(boolean if_bind)](#bindthread) | +| [boolean compileGraph(Model model)](#compilegraph) | +| [boolean runGraph()](#rungraph) | +| [List\ getInputs()](#getinputs) | +| [List\ getInputsByName(String nodeName)](#getinputsbyname) | +| [List\ getOutputsByNodeName(String nodeName)](#getoutputsbynodename) | +| [Map\ getOutputMapByTensor()](#getoutputmapbytensor) | +| [List\ getOutputTensorNames()](#getoutputtensornames) | +| [MSTensor getOutputByTensorName(String tensorName)](#getoutputbytensorname) | +| [boolean resize(List\ inputs, int[][] dims](#resize) | +| [void free()](#free) | + +## init + +```java +public boolean init(MSConfig config) +``` + +Initialize LiteSession. + +- Parameters + + - `MSConfig`: MSConfig class. + +- Returns + + Whether the initialization is successful. + +## bindThread + +```java +public void bindThread(boolean if_bind) +``` + +Attempt to bind or unbind threads in the thread pool to or from the specified cpu core. + +- Parameters + - `if_bind`: Define whether to bind or unbind threads. + +## compileGraph + +```java +public boolean compileGraph(Model model) +``` + +Compile MindSpore Lite model. + +- Parameters + + - `Model`: Define the model to be compiled. + +- Returns + + Whether the compilation is successful. + +## runGraph + +```java +public boolean runGraph() +``` + +Run the session for inference. + +- Returns + + Whether the inference is successful. + +## getInputs + +```java +public List getInputs() +``` + +Get the MSTensors input of MindSpore Lite model. + +- Returns + + The vector of MindSpore Lite MSTensor. + +## getInputsByName + +```java +public List getInputsByName(String nodeName) +``` + +Get the MSTensors input of MindSpore Lite model by the node name. + +- Parameters + + - `nodeName`: Define the node name. + +- Returns + + The vector of MindSpore Lite MSTensor. + +## getOutputsByNodeName + +```java +public List getOutputsByNodeName(String nodeName) +``` + +Get the MSTensors output of MindSpore Lite model by the node name. + +- Parameters + + - `nodeName`: Define the node name. + +- Returns + + The vector of MindSpore Lite MSTensor. + +## getOutputMapByTensor + +```java +public Map getOutputMapByTensor() +``` + +Get the MSTensors output of the MindSpore Lite model associated with the tensor name. + +- Returns + + The map of output tensor name and MindSpore Lite MSTensor. + +## getOutputTensorNames + +```java +public List getOutputTensorNames() +``` + +Get the name of output tensors of the model compiled by this session. + +- Returns + + The vector of string as output tensor names in order. + +## getOutputByTensorName + +```java +public MSTensor getOutputByTensorName(String tensorName) +``` + +Get the MSTensors output of MindSpore Lite model by the tensor name. + +- Parameters + + - `tensorName`: Define the tensor name. + +- Returns + + Pointer of MindSpore Lite MSTensor. + +## resize + +```java +public boolean resize(List inputs, int[][] dims) +``` + +Resize inputs shape. + +- Parameters + + - `inputs`: Model inputs. + - `dims`: Define the new inputs shape. + +- Returns + + Whether the resize is successful. + +## free + +```java +public void free() +``` + +Free LiteSession. diff --git a/docs/api_java/source_en/model.md b/docs/api_java/source_en/model.md new file mode 100644 index 0000000000..1017502388 --- /dev/null +++ b/docs/api_java/source_en/model.md @@ -0,0 +1,64 @@ +# Model + +```java +import com.mindspore.lite.Model; +``` + +Model defines model in MindSpore Lite for managing graph. + +## Public Member Functions + +| function | +| ------------------------------------------------------------ | +| [boolean loadModel(Context context, String modelName)](#loadmodel) | +| [boolean loadModel(String modelPath)](#loadmodel) | +| [void freeBuffer()](#freebuffer) | +| [void free()](#free) | + +## loadModel + +```java +public boolean loadModel(Context context, String modelName) +``` + +Load the MindSpore Lite model from Assets. + +- Parameters + + - `context`: Context in Android. + - `modelName`: Model file name. + +- Returns + + Whether the load is successful. + +```java +public boolean loadModel(String modelPath) +``` + +Load the MindSpore Lite model from path. + +- Parameters + + - `modelPath`: Model file path. + +- Returns + + Whether the load is successful. + +## freeBuffer + +```java +public void freeBuffer() +``` + +Free MetaGraph in MindSpore Lite Model to reduce memory usage during inference. + +## free + +```java +public void free() +``` + +Free all temporary memory in MindSpore Lite Model. + diff --git a/docs/api_java/source_en/msconfig.md b/docs/api_java/source_en/msconfig.md new file mode 100644 index 0000000000..1d0feff298 --- /dev/null +++ b/docs/api_java/source_en/msconfig.md @@ -0,0 +1,82 @@ +# MSConfig + +```java +import com.mindspore.lite.config.MSConfig; +``` + +MSConfig is defined for holding environment variables during runtime. + +## Public Member Functions + +| function | +| ------------------------------------------------------------ | +| [boolean init(int deviceType, int threadNum, int cpuBindMode)](#init) | +| [boolean init(int deviceType, int threadNum)](#init) | +| [boolean init(int deviceType)](#init) | +| [boolean init()](#init) | +| [void free()](#free) | + +## init + +```java +public boolean init(int deviceType, int threadNum, int cpuBindMode) +``` + +Initialize MSConfig. + +- Parameters + + - `deviceType`: A [**DeviceType**](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/DeviceType.java) **enum** type. + - `threadNum`: Thread number config for thread pool. + - `cpuBindMode`: A [**CpuBindMode**](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/CpuBindMode.java) **enum** variable. + +- Returns + + Whether the initialization is successful. + +```java +public boolean init(int deviceType, int threadNum) +``` + +Initialize MSConfig, `cpuBindMode` defaults to `CpuBindMode.MID_CPU`. + +- Parameters + + - `deviceType`: A [**DeviceType**](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/DeviceType.java) **enum** type. + - `threadNum`: Thread number config for thread pool. + +- Returns + + Whether the initialization is successful. + +```java +public boolean init(int deviceType) +``` + +Initialize MSConfig,`cpuBindMode` defaults to `CpuBindMode.MID_CPU`, `threadNum` defaults to `2`. + +- Parameters + + - `deviceType`: A [**DeviceType**](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/DeviceType.java) **enum** type. + +- Returns + + Whether the initialization is successful. + +```java +public boolean init() +``` + +Initialize MSConfig,`deviceType` defaults to `DeviceType.DT_CPU`,`cpuBindMode` defaults to`CpuBindMode.MID_CPU`,`threadNum` defaults to `2`. + +- Returns + + Whether the initialization is successful. + +## free + +```java +public void free() +``` + +Free all temporary memory in MindSpore Lite MSConfig. \ No newline at end of file diff --git a/docs/api_java/source_en/mstensor.md b/docs/api_java/source_en/mstensor.md new file mode 100644 index 0000000000..69bdaa6341 --- /dev/null +++ b/docs/api_java/source_en/mstensor.md @@ -0,0 +1,148 @@ +# MSTensor + +```java +import com.mindspore.lite.MSTensor; +``` + +MSTensor defined tensor in MindSpore Lite. + +## Public Member Functions + +| function | +| ------------------------------------------ | +| [int[] getShape()](#getshape) | +| [int getDataType()](#getdatatype) | +| [byte[] getByteData()](#getbytedata) | +| [float[] getFloatData()](#getfloatdata) | +| [int[] getIntData()](#getintdata) | +| [long[] getLongData()](#getlongdata) | +| [void setData(byte[] data)](#setdata) | +| [void setData(ByteBuffer data)](#setdata) | +| [long size()](#size) | +| [int elementsNum()](#elementsnum) | +| [void free()](#free) | + +## getShape + +```java +public int[] getShape() +``` + +Get the shape of the MindSpore Lite MSTensor. + +- Returns + + A array of int as the shape of the MindSpore Lite MSTensor. + +## getDataType + +```java +public int getDataType() +``` + +> DataType is defined in [com.mindspore.lite.DataType](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/DataType.java). + +- Returns + + The MindSpore Lite data type of the MindSpore Lite MSTensor class. + +## getByteData + +```java +public byte[] getByteData() +``` + +Get output data of MSTensor, the data type is byte. + +- Returns + + The byte array containing all MSTensor output data. + +## getFloatData + +```java +public float[] getFloatData() +``` + +Get output data of MSTensor, the data type is float. + +- Returns + + The float array containing all MSTensor output data. + +## getIntData + +```java +public int[] getIntData() +``` + +Get output data of MSTensor, the data type is int. + +- Returns + + The int array containing all MSTensor output data. + +## getLongData + +```java +public long[] getLongData() +``` + +Get output data of MSTensor, the data type is long. + +- Returns + + The long array containing all MSTensor output data. + +## setData + +```java +public void setData(byte[] data) +``` + +Set the input data of MSTensor. + +- Parameters + - `data`: Input data of byte[] type. + +```java +public void setData(ByteBuffer data) +``` + +Set the input data of MSTensor. + +- Parameters + - `data`: Input data of ByteBuffer type. + +## size + +```java +public long size() +``` + +Get the size of the data in MSTensor in bytes. + +- Returns + + The size of the data in MSTensor in bytes. + +## elementsNum + +```java +public int elementsNum() +``` + +Get the number of elements in MSTensor. + +- Returns + + The number of elements in MSTensor. + +## free + +```java +public void free() +``` + +Free all temporary memory in MindSpore Lite MSTensor. + diff --git a/docs/api_java/source_zh_cn/model.md b/docs/api_java/source_zh_cn/model.md index f5230efd6a..054bcf7068 100644 --- a/docs/api_java/source_zh_cn/model.md +++ b/docs/api_java/source_zh_cn/model.md @@ -6,7 +6,7 @@ import com.mindspore.lite.Model; Model定义了MindSpore Lite中的模型,便于计算图管理。 -# 公有成员函数 +## 公有成员函数 | function | | ------------------------------------------------------------ | -- Gitee From 7b5c8a1741ff1786d60d0ce037bf90e62f15be67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E9=9B=B7?= Date: Fri, 16 Oct 2020 10:47:26 +0800 Subject: [PATCH 02/21] add dtype and tensor notebook file --- docs/programming_guide/source_zh_cn/dtype.md | 2 + .../source_zh_cn/operator.md | 31 +--- docs/programming_guide/source_zh_cn/tensor.md | 2 + .../notebook/programming_guide/dtype.ipynb | 111 +++++++++++++ .../notebook/programming_guide/tensor.ipynb | 149 ++++++++++++++++++ 5 files changed, 265 insertions(+), 30 deletions(-) create mode 100644 tutorials/notebook/programming_guide/dtype.ipynb create mode 100644 tutorials/notebook/programming_guide/tensor.ipynb diff --git a/docs/programming_guide/source_zh_cn/dtype.md b/docs/programming_guide/source_zh_cn/dtype.md index 5fc7d208e6..1cbdbdee84 100644 --- a/docs/programming_guide/source_zh_cn/dtype.md +++ b/docs/programming_guide/source_zh_cn/dtype.md @@ -9,6 +9,8 @@ +   + ## 概述 diff --git a/docs/programming_guide/source_zh_cn/operator.md b/docs/programming_guide/source_zh_cn/operator.md index 588d3a4314..514f1c8b69 100644 --- a/docs/programming_guide/source_zh_cn/operator.md +++ b/docs/programming_guide/source_zh_cn/operator.md @@ -16,7 +16,6 @@ - [求三角函数](#求三角函数) - [向量运算](#向量运算) - [Squeeze](#squeeze) - - [求Sparse2Dense](#求sparse2dense) - [矩阵运算](#矩阵运算) - [矩阵乘法](#矩阵乘法) - [广播机制](#广播机制) @@ -187,7 +186,7 @@ scalar 3 import numpy as np import mindspore from mindspore import Tensor -import mindspore.ops.operations as P + input_x = mindspore.Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float32) input_y = 3.0 print(input_x**input_y) @@ -277,30 +276,6 @@ print(output) [1. 1.] [1. 1.]] ``` -#### 求Sparse2Dense - -以下代码实现了对Sparse2Dense示例: -```python -import numpy as np -import mindspore as ms -from mindspore import Tensor -import mindspore.ops.operations as P - -indices = Tensor([[0, 1], [1, 2]]) -values = Tensor([1, 2], dtype=ms.float32) -dense_shape = (3, 4) -out = P.SparseToDense()(indices, values, dense_shape) - -print(out) -``` - -输出如下: -``` -[[0, 1, 0, 0], - [0, 0, 2, 0], - [0, 0, 0, 0]] -``` - ### 矩阵运算 矩阵运算包括矩阵乘法、矩阵范数、矩阵行列式、矩阵求特征值、矩阵分解等运算。 @@ -453,8 +428,6 @@ print(res) #### LossFunction - L1Loss - 以下代码实现了L1 loss function: ```python from mindspore import Tensor @@ -476,8 +449,6 @@ print(res) #### 优化算法 - SGD - 以下代码实现了SGD梯度下降算法的具体实现,输出是result: ```python from mindspore import Tensor diff --git a/docs/programming_guide/source_zh_cn/tensor.md b/docs/programming_guide/source_zh_cn/tensor.md index b7a6196404..1d8b36f592 100644 --- a/docs/programming_guide/source_zh_cn/tensor.md +++ b/docs/programming_guide/source_zh_cn/tensor.md @@ -12,6 +12,8 @@ +   + ## 概述 diff --git a/tutorials/notebook/programming_guide/dtype.ipynb b/tutorials/notebook/programming_guide/dtype.ipynb new file mode 100644 index 0000000000..3a4d47dcde --- /dev/null +++ b/tutorials/notebook/programming_guide/dtype.ipynb @@ -0,0 +1,111 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# dtype" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 概述\n", + "\n", + "MindSpore张量支持不同的数据类型,包含`int8`、`int16`、`int32`、`int64`、`uint8`、`uint16`、`uint32`、`uint64`、`float16`、`float32`、`float64`、`bool_`,与NumPy的数据类型一一对应。\n", + "\n", + "在MindSpore的运算处理流程中,Python中的`int`数会被转换为定义的`int64`类型,`float`数会被转换为定义的`float32`类型。\n", + "\n", + "详细的类型支持情况请参考https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.html#mindspore.dtype。\n", + "\n", + "以下代码,打印MindSpore的数据类型int32。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Int32\n" + ] + } + ], + "source": [ + "from mindspore import dtype as mstype\n", + "\n", + "data_type = mstype.int32\n", + "print(data_type)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 数据类型转换接口\n", + "\n", + "MindSpore提供了以下几个接口,实现与NumPy数据类型和Python内置的数据类型间的转换。\n", + "\n", + " * `dtype_to_nptype`:将MindSpore的数据类型转换为NumPy对应的数据类型。\n", + "\n", + " * `dtype_to_pytype`:将MindSpore的数据类型转换为Python对应的内置数据类型。\n", + "\n", + " * `pytype_to_dtype`:将Python内置的数据类型转换为MindSpore对应的数据类型。\n", + "\n", + "以下代码实现了不同数据类型间的转换,并打印转换后的类型。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64\n", + "\n" + ] + } + ], + "source": [ + "from mindspore import dtype as mstype\n", + "\n", + "np_type = mstype.dtype_to_nptype(mstype.int32)\n", + "ms_type = mstype.pytype_to_dtype(int)\n", + "py_type = mstype.dtype_to_pytype(mstype.float64)\n", + "\n", + "print(np_type)\n", + "print(ms_type)\n", + "print(py_type)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/tutorials/notebook/programming_guide/tensor.ipynb b/tutorials/notebook/programming_guide/tensor.ipynb new file mode 100644 index 0000000000..fc4e13fb3d --- /dev/null +++ b/tutorials/notebook/programming_guide/tensor.ipynb @@ -0,0 +1,149 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tensor" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 概述\n", + "\n", + "张量(Tensor)是MindSpore网络运算中的基本数据结构。张量中的数据类型可参考[dtype](https://www.mindspore.cn/doc/programming_guide/zh-CN/master/dtype.html)。\n", + "\n", + "不同维度的张量分别表示不同的数据,0维张量表示标量,1维张量表示向量,2维张量表示矩阵,3维张量可以表示彩色图像的RGB三通道等等。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 本文中的所有示例,支持在PyNative模式下运行,暂不支持CPU。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 张量构造\n", + "\n", + "构造张量时,支持传入`Tensor`、`float`、`int`、`bool`、`tuple`、`list`和`NumPy.array`类型。\n", + "\n", + "`Tensor`作为初始值时,可指定dtype,如果没有指定dtype,`int`、`float`、`bool`分别对应`int32`、`float32`、`bool_`,`tuple`和`list`生成的1维`Tensor`数据类型与`tuple`和`list`里存放数据的类型相对应。\n", + "\n", + "代码样例如下:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 2]\n", + " [3 4]] \n", + "\n", + " 1 \n", + "\n", + " 2 \n", + "\n", + " True \n", + "\n", + " [1 2 3] \n", + "\n", + " [4. 5. 6.]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from mindspore import Tensor\n", + "from mindspore.common import dtype as mstype\n", + "\n", + "x = Tensor(np.array([[1, 2], [3, 4]]), mstype.int32)\n", + "y = Tensor(1.0, mstype.int32)\n", + "z = Tensor(2, mstype.int32)\n", + "m = Tensor(True, mstype.bool_)\n", + "n = Tensor((1, 2, 3), mstype.int16)\n", + "p = Tensor([4.0, 5.0, 6.0], mstype.float64)\n", + "\n", + "print(x, \"\\n\\n\", y, \"\\n\\n\", z, \"\\n\\n\", m, \"\\n\\n\", n, \"\\n\\n\", p)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 张量的属性" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 属性\n", + "\n", + "张量的属性包括形状(shape)和数据类型(dtype)。\n", + "\n", + " * 形状:`Tensor`的shape,是一个tuple。\n", + "\n", + " * 数据类型:`Tensor`的dtype,是MindSpore的一个数据类型。\n", + "\n", + "代码样例如下:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(2, 2) Int32\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from mindspore import Tensor\n", + "from mindspore.common import dtype as mstype\n", + "\n", + "x = Tensor(np.array([[1, 2], [3, 4]]), mstype.int32)\n", + "x_shape = x.shape\n", + "x_dtype = x.dtype\n", + "\n", + "print(x_shape, x_dtype)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} -- Gitee From 83c8f9633e1e5f6a3c6cef0c5d63c21476f6960d Mon Sep 17 00:00:00 2001 From: xuxinyu Date: Thu, 15 Oct 2020 10:39:54 +0800 Subject: [PATCH 03/21] update FAQ zh-cn --- docs/faq/source_zh_cn/faq.md | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/docs/faq/source_zh_cn/faq.md b/docs/faq/source_zh_cn/faq.md index c698b8e990..67250b2d6b 100644 --- a/docs/faq/source_zh_cn/faq.md +++ b/docs/faq/source_zh_cn/faq.md @@ -121,6 +121,19 @@ A:CPU硬件平台安装MindSpore后测试是否安装成功,只需要执行命 ## 算子支持 +Q:`nn.Embedding`层与PyTorch相比缺少了`Padding`操作,有其余的算子可以实现吗? + +A:在PyTorch中`padding_idx`的作用是将embedding矩阵中`padding_idx`位置的词向量置为0,并且反向传播时不会更新`padding_idx`位置的词向量。在MindSpore中,可以手动将embedding的`padding_idx`位置对应的权重初始化为0,并且在训练时通过`mask`的操作,过滤掉`padding_idx`位置对应的`Loss`。 + +
+ +Q:Operations中`Tile`算子执行到`__infer__`时`value`值为`None`,丢失了数值是怎么回事? + +A:`Tile`算子的`multiples input`必须是一个常量(该值不能直接或间接来自于图的输入)。否则构图的时候会拿到一个`None`的数据,因为图的输入是在图执行的时候才传下去的,构图的时候拿不到图的输入数据。 +相关的资料可以看[相关文档](https://www.mindspore.cn/doc/note/zh-CN/master/constraints_on_network_construction.html)的“其他约束”。 + +
+ Q:官网的LSTM示例在Ascend上跑不通 A:目前LSTM只支持在GPU和CPU上运行,暂不支持硬件环境,您可以[点击这里](https://www.mindspore.cn/doc/note/zh-CN/master/operator_list_ms.html)查看算子支持情况。 @@ -135,6 +148,12 @@ A:这是TBE这个算子的限制,x的width必须大于kernel的width。CPU ## 网络模型 +Q:如何不将数据处理为MindRecord格式,直接进行训练呢? + +A:可以使用自定义的数据加载方式 `GeneratorDataset`,具体可以参考[数据集加载](https://www.mindspore.cn/doc/programming_guide/zh-CN/master/dataset_loading.html)文档中的自定义数据集加载。 + +
+ Q:MindSpore现支持直接读取哪些其他框架的模型和哪些格式呢?比如PyTorch下训练得到的pth模型可以加载到MindSpore框架下使用吗? A: MindSpore采用protbuf存储训练参数,无法直接读取其他框架的模型。对于模型文件本质保存的就是参数和对应的值,可以用其他框架的API将参数读取出来之后,拿到参数的键值对,然后再加载到MindSpore中使用。比如想用其他框架训练好的ckpt文件,可以先把参数读取出来,再调用MindSpore的`save_checkpoint`接口,就可以保存成MindSpore可以读取的ckpt文件格式了。 @@ -211,6 +230,29 @@ A:MindSpore CPU版本已经支持在Windows 10系统中安装,具体安装 ## 后端运行 +Q:MindSpore如何实现早停功能? + +A:可以自定义`callback`方法实现早停功能。 +例子:当loss降到一定数值后,停止训练。 +```python +class EarlyStop(Callback): + def __init__(self, control_loss=1): + super(EarlyStep, self).__init__() + self._control_loss = control_loss + + def step_end(self, run_context): + cb_params = run_context.original_args() + loss = cb_params.net_outputs + if loss.asnumpy() < self._control_loss: + # Stop training + run_context._stop_requested = True + +stop_cb = EarlyStop(control_loss=1) +model.train(epoch_size, ds_train, callbacks=[stop_cb]) +``` + +
+ Q:请问自己制作的黑底白字`28*28`的数字图片,使用MindSpore训练出来的模型做预测,报错提示`wrong shape of image`是怎么回事? A:首先MindSpore训练使用的灰度图MNIST数据集。所以模型使用时对数据是有要求的,需要设置为`28*28`的灰度图,就是单通道才可以。 @@ -275,6 +317,12 @@ A:MindSpore目前支持Python扩展,针对C++、Rust、Julia等语言的支 ## 特性支持 +Q:MindSpore有量化推理工具么? + +A:[MindSpore Lite](https://www.mindspore.cn/lite)支持云侧量化感知训练的量化模型的推理,MindSpore Lite converter工具提供训练后量化以及权重量化功能,且功能在持续加强完善中。 + +
+ Q:MindSpore并行模型训练的优势和特色有哪些? A:MindSpore分布式训练除了支持数据并行,还支持算子级模型并行,可以对算子输入tensor进行切分并行。在此基础上支持自动并行,用户只需要写单卡脚本,就能自动切分到多个节点并行执行。 -- Gitee From d6534b8d1fb006b2113e77739c33a5c5e7fa8a84 Mon Sep 17 00:00:00 2001 From: yingchen Date: Fri, 16 Oct 2020 14:43:03 +0800 Subject: [PATCH 04/21] fix error for 5 files --- CONTRIBUTING_DOC.md | 68 ++++++++++++------------ CONTRIBUTING_DOC_CN.md | 66 +++++++++++------------ docs/api_cpp/source_en/dataset.md | 68 ++++++++++++------------ docs/api_cpp/source_en/lite.md | 88 +++++++++++++++++++------------ docs/api_cpp/source_en/session.md | 74 ++++++++++++++++---------- 5 files changed, 201 insertions(+), 163 deletions(-) diff --git a/CONTRIBUTING_DOC.md b/CONTRIBUTING_DOC.md index 53a1a63281..171f94d5ab 100644 --- a/CONTRIBUTING_DOC.md +++ b/CONTRIBUTING_DOC.md @@ -25,7 +25,7 @@ The procedure for submitting the modification is the same as that for submitting - The title supports only the ATX style. The title and context must be separated by a blank line. - ``` + ```markdown # Heading 1 ## Heading 2 @@ -35,7 +35,7 @@ The procedure for submitting the modification is the same as that for submitting - If the list title and content need to be displayed in different lines, add a blank line between the title and content. Otherwise, the line breaks may not be implemented. - ``` + ```markdown - Title Content @@ -45,13 +45,13 @@ The procedure for submitting the modification is the same as that for submitting - Precautions are marked with a right angle bracket (>). - ``` + ```markdown > Precautions ``` - References should be listed at the end of the document and marked in the document. - ``` + ```markdown Add a [number] after the referenced text or image description. ## References @@ -63,12 +63,12 @@ The procedure for submitting the modification is the same as that for submitting - Comments in the sample code must comply with the following requirements: - - Comments are written in English. - - Use ```"""``` to comment out Python functions, methods, and classes. - - Use ```#``` to comment out other Python code. - - Use ```//``` to comment out C++ code. + - Comments are written in English. + - Use ```"""``` to comment out Python functions, methods, and classes. + - Use ```#``` to comment out other Python code. + - Use ```//``` to comment out C++ code. - ``` + ```markdown """ Comments on Python functions, methods, and classes """ @@ -81,7 +81,7 @@ The procedure for submitting the modification is the same as that for submitting - A blank line must be added before and after an image and an image title. Otherwise, the typesetting will be abnormal. For example as correctly: - ``` + ```markdown Example: ![](./xxx.png) @@ -93,7 +93,7 @@ The procedure for submitting the modification is the same as that for submitting - A blank line must be added before and after a table. Otherwise, the typesetting will be abnormal. Tables are not supported in ordered or unordered lists. For example as correctly: - ``` + ```markdown ## Title | Header1 | Header2 @@ -103,43 +103,43 @@ The procedure for submitting the modification is the same as that for submitting The following content. ``` - + - Mark the reference interface, path name, file name in the tutorial and document with "\` \`". If it's a function or method, don't use parentheses at the end. For example: - - - Reference method - - ``` + + - Reference method + + ```markdown Use the `map` method. ``` - - - Reference code - - ``` + + - Reference code + + ```markdown `batch_size`: number of data in each group. ``` - - - Reference path - - ``` + + - Reference path + + ```markdown Decompress the dataset and store it in `./MNIST_Data`. ``` - - Reference file name - - ``` + - Reference file name + + ```markdown Other dependencies is described in `requirements.txt`. ``` - In tutorials and documents, the contents that need to be replaced need additional annotation. In the body, a "*" should be added before and after the content. In the code snippet, the content should be annotated with "{}". For example: - - - In body - ``` - Need to replace your local path *your_ path*. + - In body + + ```markdown + Need to replace your local path *your_ path*. ``` - - In code snippet + - In code snippet - ``` + ```markdown conda activate {your_env_name} - ``` \ No newline at end of file + ``` diff --git a/CONTRIBUTING_DOC_CN.md b/CONTRIBUTING_DOC_CN.md index 2ed49dbd37..b349f753b1 100644 --- a/CONTRIBUTING_DOC_CN.md +++ b/CONTRIBUTING_DOC_CN.md @@ -25,7 +25,7 @@ - 标题仅支持Atx风格,标题与上下文需用空行隔开。 - ``` + ```markdown # 一级标题 ## 二级标题 @@ -35,7 +35,7 @@ - 列表标题和内容如需换行显示,标题和内容间需增加一个空行,否则无法实现换行。 - ``` + ```markdown - 标题 内容。 @@ -45,30 +45,30 @@ - 注意事项使用“>”标识。 - ``` + ```markdown > 注意事项内容。 ``` - 参考文献需列举在文末,并在文中标注。 - - ``` + + ```markdown 引用文字或图片说明后,增加标注[编号]。 ## 参考文献 [1] 作者. [有链接的文献名](http://xxx). - + [2] 作者. 没有链接的文献名. ``` - 示例代码注释需遵循如下要求: - - 注释用英文写作; - - Python函数、方法、类的注释使用```"""```; - - Python其他代码注释使用```#```; - - C++代码注释使用```//```。 + - 注释用英文写作; + - Python函数、方法、类的注释使用```"""```; + - Python其他代码注释使用```#```; + - C++代码注释使用```//```。 - ``` + ```markdown """ Python函数、方法、类的注释 """ @@ -81,7 +81,7 @@ - 图和图标题前后需增加一个空行,否则会导致排版异常。正确举例如下: - ``` + ```markdown 如下图所示: ![](./xxx.png) @@ -93,7 +93,7 @@ - 表格前后需增加一个空行,否则会导致排版异常。有序或无序列表内不支持表格。正确举例如下: - ``` + ```markdown ## 文章标题 | 表头1 | 表头2 @@ -105,41 +105,41 @@ ``` - 教程、文档中引用接口、路径名、文件名等使用“\` \`”标注,如果是函数或方法,最后不加括号。举例如下: - - - 引用方法 - - ``` + + - 引用方法 + + ```markdown 使用映射 `map` 方法。 ``` - - - 引用代码 - - ``` + + - 引用代码 + + ```markdown `batch_size`:每组包含的数据个数。 ``` - - 引用路径 - - ``` + - 引用路径 + + ```markdown 将数据集解压存放到工作区`./MNIST_Data`路径下。 ``` - - 引用文件名 - - ``` + - 引用文件名 + + ```markdown 其他依赖项在`requirements.txt`中有详细描述。 ``` - 教程、文档中待用户替换的内容需要额外标注,在正文中,使用“*”包围需要替换内容,在代码片段中,使用“{}”包围替换内容。举例如下: - - - 正文中 - ``` + - 正文中 + + ```markdown 需要替换你的本地路径*your_path*。 ``` - - - 代码片段中 - ``` + - 代码片段中 + + ```markdown conda activate {your_env_name} ``` diff --git a/docs/api_cpp/source_en/dataset.md b/docs/api_cpp/source_en/dataset.md index 607e3eaf4f..df6c8a3f8e 100644 --- a/docs/api_cpp/source_en/dataset.md +++ b/docs/api_cpp/source_en/dataset.md @@ -1,14 +1,14 @@ # mindspore::dataset -#include <[lite_mat.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/lite_mat.h)> -#include <[image_process.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/image_process.h)> +\#include <[lite_mat.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/lite_mat.h)> +\#include <[image_process.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/image_process.h)> -## Functions of image_process.h +## Functions of image_process.h ### ResizeBilinear -``` +```cpp bool ResizeBilinear(LiteMat &src, LiteMat &dst, int dst_w, int dst_h) ``` @@ -26,7 +26,7 @@ Resize image by bilinear algorithm, currently the data type only supports uint8, ### InitFromPixel -``` +```cpp bool InitFromPixel(const unsigned char *data, LPixelType pixel_type, LDataType data_type, int w, int h, LiteMat &m) ``` @@ -46,7 +46,7 @@ Initialize LiteMat from pixel, currently the conversion supports rbgaTorgb and r ### ConvertTo -``` +```cpp bool ConvertTo(LiteMat &src, LiteMat &dst, double scale = 1.0) ``` @@ -64,7 +64,7 @@ Convert the data type, currently it supports converting the data type from uint8 ### Crop -``` +```cpp bool Crop(LiteMat &src, LiteMat &dst, int x, int y, int w, int h) ``` @@ -84,7 +84,7 @@ Crop image, the channel supports is 3 and 1. ### SubStractMeanNormalize -``` +```cpp bool SubStractMeanNormalize(const LiteMat &src, LiteMat &dst, const std::vector &mean, const std::vector &std) ``` @@ -102,7 +102,7 @@ Normalize image, currently the supports data type is float. ### Pad -``` +```cpp bool Pad(const LiteMat &src, LiteMat &dst, int top, int bottom, int left, int right, PaddBorderType pad_type, uint8_t fill_b_or_gray, uint8_t fill_g, uint8_t fill_r) ``` @@ -126,7 +126,7 @@ Pad image, the channel supports is 3 and 1. ### Affine -``` +```cpp void Affine(LiteMat &src, LiteMat &out_img, double M[6], std::vector dsize, UINT8_C1 borderValue) ``` @@ -140,7 +140,7 @@ Apply affine transformation for 1 channel image. - `dsize`: The size of the output image. - `borderValue`: The pixel value is used for filing after the image is captured. -``` +```cpp void Affine(LiteMat &src, LiteMat &out_img, double M[6], std::vector dsize, UINT8_C3 borderValue) ``` @@ -156,7 +156,7 @@ Apply affine transformation for 3 channel image. ### GetDefaultBoxes -``` +```cpp std::vector> GetDefaultBoxes(BoxesConfig config) ``` @@ -172,7 +172,7 @@ Get default anchor boxes for Faster R-CNN, SSD, YOLO etc. ### ConvertBoxes -``` +```cpp void ConvertBoxes(std::vector> &boxes, std::vector> &default_boxes, BoxesConfig config) ``` @@ -186,7 +186,7 @@ Convert the prediction boxes to the actual boxes with (y, x, h, w). ### ApplyNms -``` +```cpp std::vector ApplyNms(std::vector> &all_boxes, std::vector &all_scores, float thres, int max_boxes) ``` @@ -208,11 +208,11 @@ Real-size box non-maximum suppression. Class that represents a lite Mat of a Image. -**Constructors & Destructors** +### Constructors & Destructors -### LiteMat +#### LiteMat -``` +```cpp LiteMat() LiteMat(int width, LDataType data_type = LDataType::UINT8) @@ -224,17 +224,17 @@ LiteMat(int width, int height, int channel, LDataType data_type = LDataType::UIN Constructor of MindSpore dataset LiteMat using default value of parameters. -``` +```cpp ~LiteMat(); ``` Destructor of MindSpore dataset LiteMat. -**Public Member Functions** +### Public Member Functions -### Init +#### Init -``` +```cpp void Init(int width, LDataType data_type = LDataType::UINT8) void Init(int width, int height, LDataType data_type = LDataType::UINT8) @@ -244,9 +244,9 @@ void Init(int width, int height, int channel, LDataType data_type = LDataType::U The function to initialize the channel, width and height of the image, but the parameters are different. -### IsEmpty +#### IsEmpty -``` +```cpp bool IsEmpty() const ``` @@ -256,19 +256,19 @@ A function to determine whether the object is empty. Return True or False. -### Release +#### Release -``` +```cpp void Release() ``` A function to release memory. -**Private Member Functions** +### Private Member Functions -### AlignMalloc +#### AlignMalloc -``` +```cpp void *AlignMalloc(unsigned int size) ``` @@ -282,15 +282,15 @@ Apply for memory alignment. Return the size of a pointer. -### AlignFree +#### AlignFree -``` +```cpp void AlignFree(void *ptr) ``` A function to release pointer memory. -``` +```cpp void InitElemSize(LDataType data_type) ``` @@ -300,9 +300,9 @@ Initialize the value of elem_size_ by data_type. - `data_type`: Type of data. -### addRef +#### addRef -``` +```cpp int addRef(int *p, int value) ``` @@ -311,4 +311,4 @@ A function to count the number of times the function is referenced. - Parameters - `p`: Point to the referenced object. - - `value`: Value added when quoted. \ No newline at end of file + - `value`: Value added when quoted. diff --git a/docs/api_cpp/source_en/lite.md b/docs/api_cpp/source_en/lite.md index 6c6ef9d0d7..26458a38eb 100644 --- a/docs/api_cpp/source_en/lite.md +++ b/docs/api_cpp/source_en/lite.md @@ -1,11 +1,10 @@ # mindspore::lite -#include <[context.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/context.h)> +\#include <[context.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/context.h)> -#include <[model.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/model.h)> - -#include <[version.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/version.h)> +\#include <[model.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/model.h)> +\#include <[version.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/version.h)> ## Allocator @@ -15,135 +14,156 @@ Allocator defines a memory pool for dynamic memory malloc and memory free. Context is defined for holding environment variables during runtime. -**Constructors & Destructors** +### Constructors & Destructors -``` +```cpp Context() ``` Constructor of MindSpore Lite Context using default value for parameters. -``` +```cpp ~Context() ``` + Destructor of MindSpore Lite Context. -**Public Attributes** +### Public Attributes -``` +```cpp float16_priority ``` + A **bool** value. Defaults to **false**. Prior enable float16 inference. > Enabling float16 inference may cause low precision inference,because some variables may exceed the range of float16 during forwarding. -``` +```cpp device_type ``` + A [**DeviceType**](https://www.mindspore.cn/doc/api_cpp/en/master/lite.html#devicetype) **enum** type. Defaults to **DT_CPU**. Using to specify the device. -``` +```cpp thread_num_ ``` An **int** value. Defaults to **2**. Thread number config for thread pool. -``` +```cpp allocator ``` A **pointer** pointing to [**Allocator**](https://www.mindspore.cn/doc/api_cpp/en/master/lite.html#allocator). -``` -cpu_bind_mode_ +```cpp +cpu_bind_mode_ ``` -A [**CpuBindMode**](https://www.mindspore.cn/doc/api_cpp/en/master/lite.html#cpubindmode) **enum** variable. Defaults to **MID_CPU**. +A [**CpuBindMode**](https://www.mindspore.cn/doc/api_cpp/en/master/lite.html#cpubindmode) **enum** variable. Defaults to **MID_CPU**. ## PrimitiveC + Primitive is defined as prototype of operator. ## Model + Model defines model in MindSpore Lite for managing graph. -**Destructors** +### Destructors -``` +```cpp virtual ~Model() ``` Destructor of MindSpore Lite Model. -**Public Member Functions** +### Public Member Functions -``` +```cpp void Free() ``` + Free MetaGraph in MindSpore Lite Model to reduce memory usage during inference. -``` +```cpp void Destroy() ``` + Destroy all temporary memory in MindSpore Lite Model. -**Static Public Member Functions** -``` +### Static Public Member Functions + +```cpp static Model *Import(const char *model_buf, size_t size) ``` + Static method to create a Model pointer. -- Parameters +- Parameters - - `model_buf`: Define the buffer read from a model file. + - `model_buf`: Define the buffer read from a model file. - `size`: variable. Define bytes number of model buffer. - Returns Pointer of MindSpore Lite Model. - + ## CpuBindMode + An **enum** type. CpuBindMode defined for holding bind cpu strategy argument. -**Attributes** +### Attributes -``` +```cpp MID_CPU = -1 ``` + Bind middle cpu first. -``` +```cpp HIGHER_CPU = 1 ``` + Bind higher cpu first. -``` +```cpp NO_BIND = 0 ``` + No bind. + ## DeviceType + An **enum** type. DeviceType defined for holding user's preferred backend. -**Attributes** -``` +### Attributes + +```cpp DT_CPU = -1 ``` + CPU device type. -``` +```cpp DT_GPU = 1 ``` + GPU device type. -``` +```cpp DT_NPU = 0 ``` + NPU device type, not supported yet. + ## Version -``` +```cpp std::string Version() ``` + Global method to get a version string. - Returns diff --git a/docs/api_cpp/source_en/session.md b/docs/api_cpp/source_en/session.md index 74216a06f9..80e6168574 100644 --- a/docs/api_cpp/source_en/session.md +++ b/docs/api_cpp/source_en/session.md @@ -1,37 +1,42 @@ -# mindspore::session - -#include <[lite_session.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/lite_session.h)> +# mindspore::session +\#include <[lite_session.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/lite_session.h)> ## LiteSession LiteSession defines session in MindSpore Lite for compiling Model and forwarding model. -**Constructors & Destructors** +### Constructors & Destructors -``` +```cpp LiteSession() ``` + Constructor of MindSpore Lite LiteSession using default value for parameters. -``` + +```cpp ~LiteSession() ``` + Destructor of MindSpore Lite LiteSession. -**Public Member Functions** -``` +### Public Member Functions + +```cpp virtual void BindThread(bool if_bind) ``` + Attempt to bind or unbind threads in the thread pool to or from the specified cpu core. - Parameters - `if_bind`: Define whether to bind or unbind threads. -``` +```cpp virtual int CompileGraph(lite::Model *model) ``` -Compile MindSpore Lite model. + +Compile MindSpore Lite model. > CompileGraph should be called before RunGraph. @@ -43,18 +48,20 @@ Compile MindSpore Lite model. STATUS as an error code of compiling graph, STATUS is defined in [errorcode.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/errorcode.h). -``` +```cpp virtual std::vector GetInputs() const ``` + Get input MindSpore Lite MSTensors of model. - Returns The vector of MindSpore Lite MSTensor. -``` +```cpp mindspore::tensor::MSTensor *GetInputsByName(const std::string &name) const ``` + Get input MindSpore Lite MSTensors of model by tensor name. - Parameters @@ -64,11 +71,12 @@ Get input MindSpore Lite MSTensors of model by tensor name. - Returns MindSpore Lite MSTensor. - -``` + +```cpp virtual int RunGraph(const KernelCallBack &before = nullptr, const KernelCallBack &after = nullptr) ``` -Run session with callback. + +Run session with callback. > RunGraph should be called after CompileGraph. - Parameters @@ -81,9 +89,10 @@ Run session with callback. STATUS as an error code of running graph, STATUS is defined in [errorcode.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/errorcode.h). -``` +```cpp virtual std::vector GetOutputsByNodeName(const std::string &node_name) const ``` + Get output MindSpore Lite MSTensors of model by node name. - Parameters @@ -94,27 +103,30 @@ Get output MindSpore Lite MSTensors of model by node name. The vector of MindSpore Lite MSTensor. -``` +```cpp virtual std::unordered_map GetOutputs() const ``` + Get output MindSpore Lite MSTensors of model mapped by tensor name. - Returns The map of output tensor name and MindSpore Lite MSTensor. -``` +```cpp virtual std::vector GetOutputTensorNames() const ``` + Get name of output tensors of model compiled by this session. - Returns The vector of string as output tensor names in order. -``` +```cpp virtual mindspore::tensor::MSTensor *GetOutputByTensorName(const std::string &tensor_name) const ``` + Get output MindSpore Lite MSTensors of model by tensor name. - Parameters @@ -125,11 +137,12 @@ Get output MindSpore Lite MSTensors of model by tensor name. Pointer of MindSpore Lite MSTensor. -``` +```cpp virtual mindspore::tensor::MSTensor *GetOutputByTensorName(const std::string &tensor_name) const ``` + Get output MindSpore Lite MSTensors of model by tensor name. - + - Parameters - `tensor_name`: Define tensor name. @@ -138,10 +151,11 @@ Get output MindSpore Lite MSTensors of model by tensor name. Pointer of MindSpore Lite MSTensor. -``` +```cpp virtual int Resize(const std::vector &inputs, const std::vector> &dims) ``` + Resize inputs shape. - Parameters @@ -153,11 +167,12 @@ Resize inputs shape. STATUS as an error code of resize inputs, STATUS is defined in [errorcode.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/errorcode.h). -**Static Public Member Functions** +### Static Public Member Functions -``` +```cpp static LiteSession *CreateSession(lite::Context *context) ``` + Static method to create a LiteSession pointer. - Parameters @@ -167,9 +182,10 @@ Static method to create a LiteSession pointer. - Returns Pointer of MindSpore Lite LiteSession. + ## KernelCallBack -``` +```cpp using KernelCallBack = std::function inputs, std::vector outputs, const CallBackParam &opInfo)> ``` @@ -179,14 +195,16 @@ A function wrapper. KernelCallBack defined the function pointer for callback. A **struct**. CallBackParam defines input arguments for callback function. -**Attributes** +### Attributes -``` +```cpp name_callback_param ``` + A **string** variable. Node name argument. -``` +```cpp type_callback_param ``` + A **string** variable. Node type argument. -- Gitee From 5846ead012dfe815dfac6a9127d5ceeace49ce34 Mon Sep 17 00:00:00 2001 From: SebastianHan Date: Fri, 16 Oct 2020 16:26:05 +0800 Subject: [PATCH 05/21] add infer video --- .../source_zh_cn/quick_start/quick_video.md | 24 +++++++++++++++++++ .../quick_start/quick_video/inference.md | 9 +++++++ 2 files changed, 33 insertions(+) create mode 100644 tutorials/training/source_zh_cn/quick_start/quick_video/inference.md diff --git a/tutorials/training/source_zh_cn/quick_start/quick_video.md b/tutorials/training/source_zh_cn/quick_start/quick_video.md index 75c15f0c82..df206f136c 100644 --- a/tutorials/training/source_zh_cn/quick_start/quick_video.md +++ b/tutorials/training/source_zh_cn/quick_start/quick_video.md @@ -209,6 +209,30 @@ + diff --git a/tutorials/training/source_zh_cn/quick_start/quick_video/inference.md b/tutorials/training/source_zh_cn/quick_start/quick_video/inference.md new file mode 100644 index 0000000000..9bccf47458 --- /dev/null +++ b/tutorials/training/source_zh_cn/quick_start/quick_video/inference.md @@ -0,0 +1,9 @@ +# 多平台推理 + +[comment]: <> (本文档中包含手把手系列视频,码云Gitee不支持展示,请于官方网站对应教程中查看) + + + +**更多内容**: \ No newline at end of file -- Gitee From a6ca71918e2bfc5815d6d5883d285108d837e944 Mon Sep 17 00:00:00 2001 From: CaoJian Date: Fri, 16 Oct 2020 16:06:16 +0800 Subject: [PATCH 06/21] update LSTM support info --- docs/note/source_en/operator_list_ms.md | 3 ++- docs/note/source_zh_cn/operator_list_ms.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/note/source_en/operator_list_ms.md b/docs/note/source_en/operator_list_ms.md index 40e7bcb8e4..fee523856d 100644 --- a/docs/note/source_en/operator_list_ms.md +++ b/docs/note/source_en/operator_list_ms.md @@ -51,7 +51,8 @@ | [mindspore.nn.SSIM](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.SSIM) | Supported | Supported | Doing |layer/image | [mindspore.nn.PSNR](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.PSNR) | Supported |Supported | Doing |layer/image | [mindspore.nn.CentralCrop](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.CentralCrop) | Supported |Supported | Doing |layer/image -| [mindspore.nn.LSTM](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.LSTM) | Doing | Supported | Supported |layer/lstm +| [mindspore.nn.LSTM](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.LSTM) | Doing | Supported | Doing |layer/lstm +| [mindspore.nn.LSTMCell](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.LSTMCell) | Doing | Supported | Supported |layer/lstm | [mindspore.nn.GlobalBatchNorm](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.GlobalBatchNorm) | Supported |Doing | Doing |layer/normalization | [mindspore.nn.BatchNorm1d](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.BatchNorm1d) | Supported |Doing | Doing |layer/normalization | [mindspore.nn.BatchNorm2d](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.BatchNorm2d) | Supported | Supported | Doing |layer/normalization diff --git a/docs/note/source_zh_cn/operator_list_ms.md b/docs/note/source_zh_cn/operator_list_ms.md index f18271b91f..3fae2a6691 100644 --- a/docs/note/source_zh_cn/operator_list_ms.md +++ b/docs/note/source_zh_cn/operator_list_ms.md @@ -46,7 +46,8 @@ | [mindspore.nn.SSIM](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.SSIM) | Supported | Supported | Doing |layer/image | [mindspore.nn.PSNR](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.PSNR) | Supported |Supported | Doing |layer/image | [mindspore.nn.CentralCrop](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.CentralCrop) | Supported |Supported | Doing |layer/image -| [mindspore.nn.LSTM](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.LSTM) | Doing | Supported | Supported |layer/lstm +| [mindspore.nn.LSTM](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.LSTM) | Doing | Supported | Doing |layer/lstm +| [mindspore.nn.LSTMCell](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.LSTMCell) | Doing | Supported | Supported |layer/lstm | [mindspore.nn.GlobalBatchNorm](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.GlobalBatchNorm) | Supported |Doing | Doing |layer/normalization | [mindspore.nn.BatchNorm1d](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.BatchNorm1d) | Supported |Doing | Doing |layer/normalization | [mindspore.nn.BatchNorm2d](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.BatchNorm2d) | Supported | Supported | Doing |layer/normalization -- Gitee From c9a800741e7fa119dfb501676dee239e0576a928 Mon Sep 17 00:00:00 2001 From: yingchen Date: Fri, 16 Oct 2020 17:16:30 +0800 Subject: [PATCH 07/21] update docs error part2 --- .../source_en/errorcode_and_metatype.md | 2 +- docs/api_cpp/source_en/tensor.md | 30 ++++---- docs/api_cpp/source_zh_cn/dataset.md | 68 +++++++++-------- docs/api_cpp/source_zh_cn/lite.md | 74 ++++++++++--------- docs/api_cpp/source_zh_cn/session.md | 59 +++++++++------ docs/api_cpp/source_zh_cn/tensor.md | 35 +++++---- docs/api_java/source_zh_cn/lite_session.md | 10 +-- docs/api_java/source_zh_cn/model.md | 7 +- docs/api_java/source_zh_cn/msconfig.md | 14 ++-- docs/api_java/source_zh_cn/mstensor.md | 5 +- 10 files changed, 163 insertions(+), 141 deletions(-) diff --git a/docs/api_cpp/source_en/errorcode_and_metatype.md b/docs/api_cpp/source_en/errorcode_and_metatype.md index 2cebba704d..6d725cb19d 100644 --- a/docs/api_cpp/source_en/errorcode_and_metatype.md +++ b/docs/api_cpp/source_en/errorcode_and_metatype.md @@ -28,6 +28,7 @@ Description of error code and meta type supported in MindSpore Lite. | RET_INPUT_PARAM_INVALID | -600 | Invalid input param by user. | ## MetaType + An **enum** type. | Type Definition | Value | Description | @@ -49,4 +50,3 @@ An **enum** type. |kNumberTypeFloat32| 43 | Indicating a data type of float32. | |kNumberTypeFloat64| 44 | Indicating a data type of float64.| |kNumberTypeEnd| 45 | The end of number type. | - diff --git a/docs/api_cpp/source_en/tensor.md b/docs/api_cpp/source_en/tensor.md index 14171fd1d8..4d10116efd 100644 --- a/docs/api_cpp/source_en/tensor.md +++ b/docs/api_cpp/source_en/tensor.md @@ -1,33 +1,35 @@ # mindspore::tensor -#include <[ms_tensor.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/ms_tensor.h)> - +\#include <[ms_tensor.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/ms_tensor.h)> ## MSTensor MSTensor defined tensor in MindSpore Lite. -**Constructors & Destructors** -``` +### Constructors & Destructors + +```cpp MSTensor() ``` + Constructor of MindSpore Lite MSTensor. - Returns Instance of MindSpore Lite MSTensor. - -``` + +```cpp virtual ~MSTensor() ``` Destructor of MindSpore Lite Model. -**Public Member Functions** +### Public Member Functions -``` +```cpp virtual TypeId data_type() const ``` + Get data type of the MindSpore Lite MSTensor. > TypeId is defined in [mindspore/mindspore/core/ir/dtype/type_id.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/core/ir/dtype/type_id.h). Only number types in TypeId enum are suitable for MSTensor. @@ -36,7 +38,7 @@ Get data type of the MindSpore Lite MSTensor. MindSpore Lite TypeId of the MindSpore Lite MSTensor. -``` +```cpp virtual std::vector shape() const ``` @@ -46,7 +48,7 @@ Get shape of the MindSpore Lite MSTensor. A vector of int as the shape of the MindSpore Lite MSTensor. -``` +```cpp virtual int DimensionSize(size_t index) const ``` @@ -60,7 +62,7 @@ Get size of the dimension of the MindSpore Lite MSTensor index by the parameter Size of dimension of the MindSpore Lite MSTensor. -``` +```cpp virtual int ElementsNum() const ``` @@ -70,7 +72,7 @@ Get number of element in MSTensor. Number of element in MSTensor. -``` +```cpp virtual size_t Size() const ``` @@ -79,15 +81,13 @@ Get byte size of data in MSTensor. - Returns Byte size of data in MSTensor. - -``` +```cpp virtual void *MutableData() const ``` Get the pointer of data in MSTensor. - > The data pointer can be used to both write and read data in MSTensor. - Returns diff --git a/docs/api_cpp/source_zh_cn/dataset.md b/docs/api_cpp/source_zh_cn/dataset.md index 5170585149..1811c7d1ca 100644 --- a/docs/api_cpp/source_zh_cn/dataset.md +++ b/docs/api_cpp/source_zh_cn/dataset.md @@ -1,14 +1,13 @@ # mindspore::dataset -#include <[lite_mat.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/lite_mat.h)> -#include <[image_process.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/image_process.h)> - +\#include <[lite_mat.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/lite_mat.h)> +\#include <[image_process.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/image_process.h)> ## image_process.h文件的函数 ### ResizeBilinear -``` +```cpp bool ResizeBilinear(LiteMat &src, LiteMat &dst, int dst_w, int dst_h) ``` @@ -26,7 +25,7 @@ bool ResizeBilinear(LiteMat &src, LiteMat &dst, int dst_w, int dst_h) ### InitFromPixel -``` +```cpp bool InitFromPixel(const unsigned char *data, LPixelType pixel_type, LDataType data_type, int w, int h, LiteMat &m) ``` @@ -46,7 +45,7 @@ bool InitFromPixel(const unsigned char *data, LPixelType pixel_type, LDataType d ### ConvertTo -``` +```cpp bool ConvertTo(LiteMat &src, LiteMat &dst, double scale = 1.0) ``` @@ -64,7 +63,7 @@ bool ConvertTo(LiteMat &src, LiteMat &dst, double scale = 1.0) ### Crop -``` +```cpp bool Crop(LiteMat &src, LiteMat &dst, int x, int y, int w, int h) ``` @@ -84,7 +83,7 @@ bool Crop(LiteMat &src, LiteMat &dst, int x, int y, int w, int h) ### SubStractMeanNormalize -``` +```cpp bool SubStractMeanNormalize(const LiteMat &src, LiteMat &dst, const std::vector &mean, const std::vector &std) ``` @@ -102,7 +101,7 @@ bool SubStractMeanNormalize(const LiteMat &src, LiteMat &dst, const std::vector< ### Pad -``` +```cpp bool Pad(const LiteMat &src, LiteMat &dst, int top, int bottom, int left, int right, PaddBorderType pad_type, uint8_t fill_b_or_gray, uint8_t fill_g, uint8_t fill_r) ``` @@ -126,7 +125,7 @@ bool Pad(const LiteMat &src, LiteMat &dst, int top, int bottom, int left, int ri ### Affine -``` +```cpp void Affine(LiteMat &src, LiteMat &out_img, double M[6], std::vector dsize, UINT8_C1 borderValue) ``` @@ -140,7 +139,7 @@ void Affine(LiteMat &src, LiteMat &out_img, double M[6], std::vector dsi - `dsize`: 输出图像的大小。 - `borderValue`: 采图之后用于填充的像素值。 -``` +```cpp void Affine(LiteMat &src, LiteMat &out_img, double M[6], std::vector dsize, UINT8_C3 borderValue) ``` @@ -156,7 +155,7 @@ void Affine(LiteMat &src, LiteMat &out_img, double M[6], std::vector dsi ### GetDefaultBoxes -``` +```cpp std::vector> GetDefaultBoxes(BoxesConfig config) ``` @@ -172,7 +171,7 @@ std::vector> GetDefaultBoxes(BoxesConfig config) ### ConvertBoxes -``` +```cpp void ConvertBoxes(std::vector> &boxes, std::vector> &default_boxes, BoxesConfig config) ``` @@ -186,7 +185,7 @@ void ConvertBoxes(std::vector> &boxes, std::vector ApplyNms(std::vector> &all_boxes, std::vector &all_scores, float thres, int max_boxes) ``` @@ -208,11 +207,11 @@ std::vector ApplyNms(std::vector> &all_boxes, std::vecto LiteMat是一个处理图像的类。 -**构造函数和析构函数** +### 构造函数和析构函数 -### LiteMat +#### LiteMat -``` +```cpp LiteMat() LiteMat(int width, LDataType data_type = LDataType::UINT8) @@ -224,17 +223,17 @@ LiteMat(int width, int height, int channel, LDataType data_type = LDataType::UIN MindSpore中dataset模块下LiteMat的构造方法,使用参数的默认值。 -``` +```cpp ~LiteMat(); ``` MindSpore dataset LiteMat的析构函数。 -**公有成员函数** +### 公有成员函数 -### Init +#### Init -``` +```cpp void Init(int width, LDataType data_type = LDataType::UINT8) void Init(int width, int height, LDataType data_type = LDataType::UINT8) @@ -244,9 +243,9 @@ void Init(int width, int height, int channel, LDataType data_type = LDataType::U 该函数用于初始化图像的通道,宽度和高度,参数不同。 -### IsEmpty +#### IsEmpty -``` +```cpp bool IsEmpty() const ``` @@ -256,19 +255,19 @@ bool IsEmpty() const 返回True或者False。 -### Release +#### Release -``` +```cpp void Release() ``` 释放内存的函数。 -**私有成员函数** +### 私有成员函数 -### AlignMalloc +#### AlignMalloc -``` +```cpp void *AlignMalloc(unsigned int size) ``` @@ -282,18 +281,17 @@ void *AlignMalloc(unsigned int size) 返回指针的大小。 -### AlignFree +#### AlignFree -``` +```cpp void AlignFree(void *ptr) ``` 释放指针内存大小的方法。 +#### InitElemSize -### InitElemSize - -``` +```cpp void InitElemSize(LDataType data_type) ``` @@ -303,7 +301,7 @@ void InitElemSize(LDataType data_type) - `data_type`: 数据的类型。 -``` +```cpp int addRef(int *p, int value) ``` @@ -312,4 +310,4 @@ void InitElemSize(LDataType data_type) - 参数 - `p`: 指向引用的对象。 - - `value`: 引用时所加的值。 \ No newline at end of file + - `value`: 引用时所加的值。 diff --git a/docs/api_cpp/source_zh_cn/lite.md b/docs/api_cpp/source_zh_cn/lite.md index b3aaa5909c..034c3bd22e 100644 --- a/docs/api_cpp/source_zh_cn/lite.md +++ b/docs/api_cpp/source_zh_cn/lite.md @@ -1,11 +1,10 @@ # mindspore::lite -#include <[context.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/context.h)> +\#include <[context.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/context.h)> -#include <[model.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/model.h)> - -#include <[version.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/version.h)> +\#include <[model.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/model.h)> +\#include <[version.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/version.h)> ## Allocator @@ -15,23 +14,23 @@ Allocator类定义了一个内存池,用于动态地分配和释放内存。 Context类用于保存执行中的环境变量。 -**构造函数和析构函数** +### 构造函数和析构函数 -``` +```cpp Context() ``` 用默认参数构造MindSpore Lite Context 对象。 -``` +```cpp ~Context() ``` MindSpore Lite Context 的析构函数。 -**公有属性** +### 公有属性 -``` +```cpp float16_priority ``` @@ -39,29 +38,29 @@ float16_priority > 使能float16推理可能会导致模型推理精度下降,因为在模型推理的中间过程中,有些变量可能会超出float16的数值范围。 -``` +```cpp device_type ``` [**DeviceType**](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/lite.html#devicetype)枚举类型。默认为**DT_CPU**,用于设置设备信息。 -``` +```cpp thread_num_ ``` **int** 值,默认为**2**,设置线程数。 -``` +```cpp allocator ``` 指针类型,指向内存分配器[**Allocator**](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/lite.html#allocator)的指针。 -``` -cpu_bind_mode_ +```cpp +cpu_bind_mode_ ``` -[**CpuBindMode**](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/lite.html#cpubindmode)枚举类型,默认为**MID_CPU**。 +[**CpuBindMode**](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/lite.html#cpubindmode)枚举类型,默认为**MID_CPU**。 ## PrimitiveC @@ -71,87 +70,89 @@ PrimitiveC定义为算子的原型。 Model定义了MindSpore Lite中的模型,便于计算图管理。 -**析构函数** +### 析构函数 -``` +```cpp ~Model() ``` MindSpore Lite Model的析构函数。 -**公有成员函数** +### 公有成员函数 -``` +```cpp void Destroy() ``` 释放Model内的所有过程中动态分配的内存。 -``` +```cpp void Free() ``` 释放MindSpore Lite Model中的MetaGraph,用于减小运行时的内存。 -**静态公有成员函数** +### 静态公有成员函数 -``` +```cpp static Model *Import(const char *model_buf, size_t size) ``` 创建Model指针的静态方法。 -- 参数 +- 参数 - - `model_buf`: 定义了读取模型文件的缓存区。 + - `model_buf`: 定义了读取模型文件的缓存区。 - - `size`: 定义了模型缓存区的字节数。 + - `size`: 定义了模型缓存区的字节数。 - 返回值 指向MindSpore Lite的Model的指针。 - + ## CpuBindMode + 枚举类型,设置cpu绑定策略。 -**属性** +### 属性 -``` +```cpp MID_CPU = -1 ``` 优先中等CPU绑定策略。 -``` +```cpp HIGHER_CPU = 1 ``` 优先高级CPU绑定策略。 -``` +```cpp NO_BIND = 0 ``` 不绑定。 ## DeviceType + 枚举类型,设置设备类型。 -**属性** +### 属性 -``` +```cpp DT_CPU = -1 ``` 设备为CPU。 -``` +```cpp DT_GPU = 1 ``` 设备为GPU。 -``` +```cpp DT_NPU = 0 ``` @@ -159,11 +160,12 @@ DT_NPU = 0 ## Version -``` +```cpp std::string Version() ``` + 全局方法,用于获取版本的字符串。 - 返回值 - MindSpore Lite版本的字符串。 \ No newline at end of file + MindSpore Lite版本的字符串。 diff --git a/docs/api_cpp/source_zh_cn/session.md b/docs/api_cpp/source_zh_cn/session.md index adfc159b68..58f3a86018 100644 --- a/docs/api_cpp/source_zh_cn/session.md +++ b/docs/api_cpp/source_zh_cn/session.md @@ -1,36 +1,41 @@ # mindspore::session -#include <[lite_session.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/lite_session.h)> - +\#include <[lite_session.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/lite_session.h)> ## LiteSession LiteSession定义了MindSpore Lite中的会话,用于进行Model的编译和前向推理。 -**构造函数和析构函数** +### 构造函数和析构函数 -``` +```cpp LiteSession() ``` + MindSpore Lite LiteSession的构造函数,使用默认参数。 -``` + +```cpp ~LiteSession() ``` + MindSpore Lite LiteSession的析构函数。 -**公有成员函数** -``` +### 公有成员函数 + +```cpp virtual void BindThread(bool if_bind) ``` + 尝试将线程池中的线程绑定到指定的cpu内核,或从指定的cpu内核进行解绑。 - 参数 - `if_bind`: 定义了对线程进行绑定或解绑。 -``` +```cpp virtual int CompileGraph(lite::Model *model) ``` + 编译MindSpore Lite模型。 > CompileGraph必须在RunGraph方法之前调用。 @@ -43,18 +48,20 @@ virtual int CompileGraph(lite::Model *model) STATUS ,即编译图的错误码。STATUS在[errorcode.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/errorcode.h)中定义。 -``` +```cpp virtual std::vector GetInputs() const ``` + 获取MindSpore Lite模型的MSTensors输入。 - 返回值 MindSpore Lite MSTensor向量。 -``` +```cpp mindspore::tensor::MSTensor *GetInputsByName(const std::string &name) const ``` + 通过tensor名获取MindSpore Lite模型的MSTensors输入。 - 参数 @@ -65,9 +72,10 @@ mindspore::tensor::MSTensor *GetInputsByName(const std::string &name) const MindSpore Lite MSTensor。 -``` +```cpp virtual int RunGraph(const KernelCallBack &before = nullptr, const KernelCallBack &after = nullptr) ``` + 运行带有回调函数的会话。 > RunGraph必须在CompileGraph方法之后调用。 @@ -81,9 +89,10 @@ virtual int RunGraph(const KernelCallBack &before = nullptr, const KernelCallBac STATUS ,即编译图的错误码。STATUS在[errorcode.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/errorcode.h)中定义。 -``` +```cpp virtual std::vector GetOutputsByNodeName(const std::string &node_name) const ``` + 通过节点名获取MindSpore Lite模型的MSTensors输出。 - 参数 @@ -94,27 +103,30 @@ virtual std::vector GetOutputsByNodeName(const std::string MindSpore Lite MSTensor向量。 -``` +```cpp virtual std::unordered_map GetOutputs() const ``` + 获取与张量名相关联的MindSpore Lite模型的MSTensors输出。 - 返回值 包含输出张量名和MindSpore Lite MSTensor的容器类型变量。 -``` +```cpp virtual std::vector GetOutputTensorNames() const ``` + 获取由当前会话所编译的模型的输出张量名。 - 返回值 字符串向量,其中包含了按顺序排列的输出张量名。 -``` +```cpp virtual mindspore::tensor::MSTensor *GetOutputByTensorName(const std::string &tensor_name) const ``` + 通过张量名获取MindSpore Lite模型的MSTensors输出。 - 参数 @@ -125,9 +137,10 @@ virtual mindspore::tensor::MSTensor *GetOutputByTensorName(const std::string &te 指向MindSpore Lite MSTensor的指针。 -``` +```cpp virtual int Resize(const std::vector &inputs, const std::vector> &dims) ``` + 调整输入的形状。 - 参数 @@ -139,11 +152,12 @@ virtual int Resize(const std::vector &inputs, const std::ve STATUS ,即编译图的错误码。STATUS在[errorcode.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/errorcode.h)中定义。 -**静态公有成员函数** +### 静态公有成员函数 -``` +```cpp static LiteSession *CreateSession(lite::Context *context) ``` + 用于创建一个LiteSession指针的静态方法。 - 参数 @@ -153,9 +167,10 @@ static LiteSession *CreateSession(lite::Context *context) - 返回值 指向MindSpore Lite LiteSession的指针。 + ## KernelCallBack -``` +```cpp using KernelCallBack = std::function inputs, std::vector outputs, const CallBackParam &opInfo)> ``` @@ -166,12 +181,14 @@ using KernelCallBack = std::function inputs 一个结构体。CallBackParam定义了回调函数的输入参数。 **属性** -``` +```cpp name_callback_param ``` + **string** 类型变量。节点名参数。 -``` +```cpp type_callback_param ``` + **string** 类型变量。节点类型参数。 diff --git a/docs/api_cpp/source_zh_cn/tensor.md b/docs/api_cpp/source_zh_cn/tensor.md index 50e7c294b1..0d2e7e219a 100644 --- a/docs/api_cpp/source_zh_cn/tensor.md +++ b/docs/api_cpp/source_zh_cn/tensor.md @@ -1,32 +1,35 @@ # mindspore::tensor -#include <[ms_tensor.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/ms_tensor.h)> - +\#include <[ms_tensor.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/include/ms_tensor.h)> ## MSTensor MSTensor定义了MindSpore Lite中的张量。 -**构造函数和析构函数** -``` +### 构造函数和析构函数 + +```cpp MSTensor() ``` + MindSpore Lite MSTensor的构造函数。 - 返回值 MindSpore Lite MSTensor的实例。 - -``` + +```cpp virtual ~MSTensor() ``` + MindSpore Lite Model的析构函数。 -**公有成员函数** +### 公有成员函数 -``` +```cpp virtual TypeId data_type() const ``` + 获取MindSpore Lite MSTensor的数据类型。 > TypeId在[mindspore/mindspore/core/ir/dtype/type_id\.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/core/ir/dtype/type_id.h)中定义。只有TypeId枚举中的数字类型可用于MSTensor。 @@ -35,18 +38,20 @@ virtual TypeId data_type() const MindSpore Lite MSTensor类的MindSpore Lite TypeId。 -``` +```cpp virtual std::vector shape() const ``` + 获取MindSpore Lite MSTensor的形状。 - 返回值 一个包含MindSpore Lite MSTensor形状数值的整型向量。 -``` +```cpp virtual int DimensionSize(size_t index) const ``` + 通过参数索引获取MindSpore Lite MSTensor的维度的大小。 - 参数 @@ -57,28 +62,30 @@ virtual int DimensionSize(size_t index) const MindSpore Lite MSTensor的维度的大小。 -``` +```cpp virtual int ElementsNum() const ``` + 获取MSTensor中的元素个数。 - 返回值 MSTensor中的元素个数 -``` +```cpp virtual size_t Size() const ``` + 获取MSTensor中的数据的字节数大小。 - 返回值 MSTensor中的数据的字节数大小。 - -``` +```cpp virtual void *MutableData() const ``` + 获取MSTensor中的数据的指针。 > 该数据指针可用于对MSTensor中的数据进行读取和写入。 diff --git a/docs/api_java/source_zh_cn/lite_session.md b/docs/api_java/source_zh_cn/lite_session.md index c008d0eab9..9ed5bc8e9a 100644 --- a/docs/api_java/source_zh_cn/lite_session.md +++ b/docs/api_java/source_zh_cn/lite_session.md @@ -33,7 +33,7 @@ public boolean init(MSConfig config) - 参数 - - `MSConfig`: MSConfig类。 + - `MSConfig`: MSConfig类。 - 返回值 @@ -48,7 +48,7 @@ public void bindThread(boolean if_bind) 尝试将线程池中的线程绑定到指定的CPU内核,或从指定的CPU内核进行解绑。 - 参数 - - `if_bind`: 是否对线程进行绑定或解绑。 + - `if_bind`: 是否对线程进行绑定或解绑。 ## compileGraph @@ -156,7 +156,7 @@ public MSTensor getOutputByTensorName(String tensorName) - 参数 - - `tensorName`: 张量名。 + - `tensorName`: 张量名。 - 返回值 @@ -172,8 +172,8 @@ public boolean resize(List inputs, int[][] dims) - 参数 - - `inputs`: 模型对应的所有输入。 - - `dims`: 输入对应的新的shape,顺序注意要与inputs一致。 + - `inputs`: 模型对应的所有输入。 + - `dims`: 输入对应的新的shape,顺序注意要与inputs一致。 - 返回值 diff --git a/docs/api_java/source_zh_cn/model.md b/docs/api_java/source_zh_cn/model.md index 054bcf7068..c6081a8db8 100644 --- a/docs/api_java/source_zh_cn/model.md +++ b/docs/api_java/source_zh_cn/model.md @@ -25,8 +25,8 @@ public boolean loadModel(Context context, String modelName) - 参数 - - `context`: Android中的Context上下文 - - `modelName`: 模型文件名称 + - `context`: Android中的Context上下文 + - `modelName`: 模型文件名称 - 返回值 @@ -40,7 +40,7 @@ public boolean loadModel(String modelPath) - 参数 - - `modelPath`: 模型文件路径 + - `modelPath`: 模型文件路径 - 返回值 @@ -61,4 +61,3 @@ public void free() ``` 释放Model运行过程中动态分配的内存。 - diff --git a/docs/api_java/source_zh_cn/msconfig.md b/docs/api_java/source_zh_cn/msconfig.md index 7e868a60f1..c60019b8c6 100644 --- a/docs/api_java/source_zh_cn/msconfig.md +++ b/docs/api_java/source_zh_cn/msconfig.md @@ -26,9 +26,9 @@ public boolean init(int deviceType, int threadNum, int cpuBindMode) - 参数 - - `deviceType`: 设备类型,`deviceType`在[com.mindspore.lite.config.DeviceType](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/DeviceType.java)中定义。 - - `threadNum`: 线程数 - - `cpuBindMode`: CPU绑定模式,`cpuBindMode`在[com.mindspore.lite.config.CpuBindMode](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/CpuBindMode.java)中定义。 + - `deviceType`: 设备类型,`deviceType`在[com.mindspore.lite.config.DeviceType](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/DeviceType.java)中定义。 + - `threadNum`: 线程数 + - `cpuBindMode`: CPU绑定模式,`cpuBindMode`在[com.mindspore.lite.config.CpuBindMode](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/CpuBindMode.java)中定义。 - 返回值 @@ -42,8 +42,8 @@ public boolean init(int deviceType, int threadNum) - 参数 - - `deviceType`: 设备类型,`deviceType`在[com.mindspore.lite.config.DeviceType](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/DeviceType.java)中定义。 - - `threadNum`: 线程数。 + - `deviceType`: 设备类型,`deviceType`在[com.mindspore.lite.config.DeviceType](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/DeviceType.java)中定义。 + - `threadNum`: 线程数。 - 返回值 @@ -57,7 +57,7 @@ public boolean init(int deviceType) - 参数 - - `deviceType`: 设备类型,`deviceType`在[com.mindspore.lite.config.DeviceType](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/DeviceType.java)中定义。 + - `deviceType`: 设备类型,`deviceType`在[com.mindspore.lite.config.DeviceType](https://gitee.com/mindspore/mindspore/blob/master/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/config/DeviceType.java)中定义。 - 返回值 @@ -79,4 +79,4 @@ public boolean init() public void free() ``` -释放MSConfig运行过程中动态分配的内存。LiteSession init之后即可释放。 \ No newline at end of file +释放MSConfig运行过程中动态分配的内存。LiteSession init之后即可释放。 diff --git a/docs/api_java/source_zh_cn/mstensor.md b/docs/api_java/source_zh_cn/mstensor.md index b6e582f38f..ce7db9822c 100644 --- a/docs/api_java/source_zh_cn/mstensor.md +++ b/docs/api_java/source_zh_cn/mstensor.md @@ -103,7 +103,7 @@ public void setData(byte[] data) 设定MSTensor的输入数据。 - 参数 - - `data`: byte[]类型的输入数据。 + - `data`: byte[]类型的输入数据。 ```java public void setData(ByteBuffer data) @@ -112,7 +112,7 @@ public void setData(ByteBuffer data) 设定MSTensor的输入数据。 - 参数 - - `data`: ByteBuffer类型的输入数据。 + - `data`: ByteBuffer类型的输入数据。 ## size @@ -145,4 +145,3 @@ public void free() ``` 释放MSTensor运行过程中动态分配的内存。 - -- Gitee From 48e654e9f4e0bd8614a79a74a078bfdd6ab4689e Mon Sep 17 00:00:00 2001 From: lihongkang <[lihongkang1@huawei.com]> Date: Sat, 17 Oct 2020 14:43:35 +0800 Subject: [PATCH 08/21] update op list --- docs/note/source_en/operator_list_ms.md | 7 ++++++- docs/note/source_zh_cn/operator_list_ms.md | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/note/source_en/operator_list_ms.md b/docs/note/source_en/operator_list_ms.md index fee523856d..87bc091f8f 100644 --- a/docs/note/source_en/operator_list_ms.md +++ b/docs/note/source_en/operator_list_ms.md @@ -110,6 +110,8 @@ | [mindspore.nn.LGamma](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.LGamma) |Supported | Doing | Doing |layer/math | [mindspore.nn.ReduceLogSumExp](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.ReduceLogSumExp) |Supported | Supported | Doing |layer/math | [mindspore.nn.MSSSIM](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.MSSSIM) | Supported |Doing | Doing |layer/image +| [mindspore.nn.AvgPool1d](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.AvgPool1d) | Supported | Doing | Doing |layer/pooling +| [mindspore.nn.Unfold](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.Unfold) |Supported | Doing | Doing |layer/basic ## mindspore.ops @@ -273,7 +275,7 @@ | [mindspore.ops.GatherV2](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.GatherV2) | Supported | Supported | Supported | array_ops | [mindspore.ops.Split](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.Split) | Supported | Supported | Doing | array_ops | [mindspore.ops.Rank](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.Rank) | Supported | Supported | Supported | array_ops -| [mindspore.ops.TruncatedNormal](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.TruncatedNormal) | Supported | Supported | Supported | array_ops +| [mindspore.ops.TruncatedNormal](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.TruncatedNormal) | Doing | Supported | Supported | array_ops | [mindspore.ops.Size](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.Size) | Supported | Supported | Supported | array_ops | [mindspore.ops.Fill](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.Fill) | Supported | Supported | Supported | array_ops | [mindspore.ops.OnesLike](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.OnesLike) | Supported | Supported | Doing | array_ops @@ -371,6 +373,9 @@ | [mindspore.ops.IFMR](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.IFMR) | Supported | Doing | Doing | math_ops | [mindspore.ops.DynamicShape](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.DynamicShape) | Supported | Supported | Supported | array_ops | [mindspore.ops.Unique](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.Unique) | Doing | Doing | Doing | array_ops +| [mindspore.ops.ReduceAny](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.ReduceAny) | Supported | Doing | Doing | math_ops +| [mindspore.ops.SparseToDense](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.SparseToDense) | Doing | Doing | Doing | sparse_ops +| [mindspore.ops.CTCGreedyDecoder](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.CTCGreedyDecoder) | Doing | Doing | Doing | nn_ops ## mindspore.ops.functional diff --git a/docs/note/source_zh_cn/operator_list_ms.md b/docs/note/source_zh_cn/operator_list_ms.md index 3fae2a6691..6a299dbe98 100644 --- a/docs/note/source_zh_cn/operator_list_ms.md +++ b/docs/note/source_zh_cn/operator_list_ms.md @@ -105,6 +105,8 @@ | [mindspore.nn.LGamma](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.LGamma) |Supported | Doing | Doing |layer/math | [mindspore.nn.ReduceLogSumExp](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.ReduceLogSumExp) |Supported | Supported | Doing |layer/math | [mindspore.nn.MSSSIM](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.MSSSIM) | Supported |Doing | Doing |layer/image +| [mindspore.nn.AvgPool1d](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.AvgPool1d) | Supported | Doing | Doing |layer/pooling +| [mindspore.nn.Unfold](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.Unfold) |Supported | Doing | Doing |layer/basic ## mindspore.ops.operations @@ -268,7 +270,7 @@ | [mindspore.ops.GatherV2](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.GatherV2) | Supported | Supported | Supported | array_ops | [mindspore.ops.Split](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Split) | Supported | Supported | Doing | array_ops | [mindspore.ops.Rank](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Rank) | Supported | Supported | Supported | array_ops -| [mindspore.ops.TruncatedNormal](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.TruncatedNormal) | Supported | Supported | Supported | array_ops +| [mindspore.ops.TruncatedNormal](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.TruncatedNormal) | Doing | Supported | Supported | array_ops | [mindspore.ops.Size](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Size) | Supported | Supported | Supported | array_ops | [mindspore.ops.Fill](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Fill) | Supported | Supported | Supported | array_ops | [mindspore.ops.OnesLike](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.OnesLike) | Supported | Supported | Doing | array_ops @@ -366,6 +368,9 @@ | [mindspore.ops.IFMR](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.IFMR) | Supported | Doing | Doing | math_ops | [mindspore.ops.DynamicShape](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.DynamicShape) | Supported | Supported | Supported | array_ops | [mindspore.ops.Unique](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Unique) | Doing | Doing | Doing | array_ops +| [mindspore.ops.ReduceAny](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ReduceAny) | Supported | Doing | Doing | math_ops +| [mindspore.ops.SparseToDense](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.SparseToDense) | Doing | Doing | Doing | sparse_ops +| [mindspore.ops.CTCGreedyDecoder](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.CTCGreedyDecoder) | Doing | Doing | Doing | nn_ops ## mindspore.ops.functional -- Gitee From 7902f2d8c0368a55a59493ed14499788d1cbd0df Mon Sep 17 00:00:00 2001 From: zhaodezan Date: Sat, 17 Oct 2020 02:28:58 -0400 Subject: [PATCH 09/21] bind core api change --- docs/api_cpp/source_en/lite.md | 2 +- docs/api_cpp/source_zh_cn/lite.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api_cpp/source_en/lite.md b/docs/api_cpp/source_en/lite.md index 26458a38eb..61ee990133 100644 --- a/docs/api_cpp/source_en/lite.md +++ b/docs/api_cpp/source_en/lite.md @@ -117,7 +117,7 @@ An **enum** type. CpuBindMode defined for holding bind cpu strategy argument. ### Attributes ```cpp -MID_CPU = -1 +MID_CPU = 2 ``` Bind middle cpu first. diff --git a/docs/api_cpp/source_zh_cn/lite.md b/docs/api_cpp/source_zh_cn/lite.md index 034c3bd22e..978178fabc 100644 --- a/docs/api_cpp/source_zh_cn/lite.md +++ b/docs/api_cpp/source_zh_cn/lite.md @@ -117,7 +117,7 @@ static Model *Import(const char *model_buf, size_t size) ### 属性 ```cpp -MID_CPU = -1 +MID_CPU = 2 ``` 优先中等CPU绑定策略。 -- Gitee From 4fba06ac5c4cbafa349a449e082ad18ee63e9386 Mon Sep 17 00:00:00 2001 From: chenfei Date: Fri, 16 Oct 2020 17:28:50 +0800 Subject: [PATCH 10/21] fix shape constraints --- docs/note/source_en/constraints_on_network_construction.md | 2 +- docs/note/source_zh_cn/constraints_on_network_construction.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/note/source_en/constraints_on_network_construction.md b/docs/note/source_en/constraints_on_network_construction.md index 0c0a4f2cba..156623a4a2 100644 --- a/docs/note/source_en/constraints_on_network_construction.md +++ b/docs/note/source_en/constraints_on_network_construction.md @@ -165,7 +165,7 @@ The index value operation of tuple and list type, we need to focus on the index The grammar has the following constraints: * Only the index value operation of tuple or list whose element type is `nn.Cell` is supported. * The index is a scalar `Tensor` of type `int32`, with a value range of `[-n, n)`, where `n` is the size of the tuple, and the maximum supported tuple size is 1000. -* The number, type and shape of the input data of the `Construct` function of each Cell element in the tuple are the same, and the number of data output after the `Construct` function runs, the type and shape are also the same. +* The number, type and shape size of the input data of the `Construct` function of each Cell element in the tuple are the same, and the number of data output after the `Construct` function runs, the type and shape size are also the same. * Each element in the tuple needs to be defined before the tuple is defined. * This syntax does not support running branches as if, while, for and other control flow, except if the control condition of the control flow is constant. for example: - Supported example: diff --git a/docs/note/source_zh_cn/constraints_on_network_construction.md b/docs/note/source_zh_cn/constraints_on_network_construction.md index 7fa4b65d34..72347abf1a 100644 --- a/docs/note/source_zh_cn/constraints_on_network_construction.md +++ b/docs/note/source_zh_cn/constraints_on_network_construction.md @@ -164,7 +164,7 @@ tuple和list类型的索引取值操作,需要重点介绍一下元素类型 同时该语法有以下几个约束: * 只支持元素类型为`nn.Cell`的tuple或list的索引取值操作。 * 索引值index的类型为`int32`的Tensor标量,取值范围为`[-n, n)`, 其中`n`为tuple的size,支持的tuple的size的最大值为1000。 -* tuple中的每个Cell元素的Construct函数的输入数据的数目,类型和shape要求相同,且Construct函数运行后输出的数据的数目,类型和shape也要求相同。 +* tuple中的每个Cell元素的Construct函数的输入数据的数目,类型和shape维度要求相同,且Construct函数运行后输出的数据的数目,类型和shape维度也要求相同。 * tuple中的每个Cell元素,需要在tuple定义之前完成定义。 * 该语法不支持做为if、while、for等控制流的运行分支,如果控制流的控制条件为常量除外。举例说明: - 支持的写法: -- Gitee From 42f4f1c3561770afef942808ea5764a62b6e7123 Mon Sep 17 00:00:00 2001 From: Jiaqi Date: Mon, 19 Oct 2020 11:04:27 +0800 Subject: [PATCH 11/21] remove .cell --- tutorials/notebook/quick_start.ipynb | 2 +- tutorials/training/source_en/quick_start/quick_start.md | 2 +- tutorials/training/source_zh_cn/quick_start/quick_start.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorials/notebook/quick_start.ipynb b/tutorials/notebook/quick_start.ipynb index 6110b8aeda..4180ec9e87 100644 --- a/tutorials/notebook/quick_start.ipynb +++ b/tutorials/notebook/quick_start.ipynb @@ -525,7 +525,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "使用MindSpore定义神经网络需要继承`mindspore.nn.cell.Cell`,`Cell`是所有神经网络(`Conv2d`等)的基类。\n", + "使用MindSpore定义神经网络需要继承`mindspore.nn.Cell`,`Cell`是所有神经网络(`Conv2d`等)的基类。\n", "\n", "神经网络的各层需要预先在`__init__`方法中定义,然后通过定义`construct`方法来完成神经网络的前向构造,按照LeNet5的网络结构,定义网络各层如下:" ] diff --git a/tutorials/training/source_en/quick_start/quick_start.md b/tutorials/training/source_en/quick_start/quick_start.md index b7bad45c0f..36aecb34c5 100644 --- a/tutorials/training/source_en/quick_start/quick_start.md +++ b/tutorials/training/source_en/quick_start/quick_start.md @@ -195,7 +195,7 @@ You can initialize the full connection layers and convolutional layers by `Norma MindSpore supports multiple parameter initialization methods, such as `TruncatedNormal`, `Normal`, and `Uniform`, default value is `Normal`. For details, see the description of the `mindspore.common.initializer` module in the MindSpore API. -To use MindSpore for neural network definition, inherit `mindspore.nn.cell.Cell`. `Cell` is the base class of all neural networks (such as `Conv2d`). +To use MindSpore for neural network definition, inherit `mindspore.nn.Cell`. `Cell` is the base class of all neural networks (such as `Conv2d`). Define each layer of a neural network in the `__init__` method in advance, and then define the `construct` method to complete the forward construction of the neural network. According to the structure of the LeNet network, define the network layers as follows: diff --git a/tutorials/training/source_zh_cn/quick_start/quick_start.md b/tutorials/training/source_zh_cn/quick_start/quick_start.md index b9d211561f..761d5a1d82 100644 --- a/tutorials/training/source_zh_cn/quick_start/quick_start.md +++ b/tutorials/training/source_zh_cn/quick_start/quick_start.md @@ -200,7 +200,7 @@ def create_dataset(data_path, batch_size=32, repeat_size=1, MindSpore支持`TruncatedNormal`、`Normal`、`Uniform`等多种参数初始化方法,默认采用`Normal`。具体可以参考MindSpore API的`mindspore.common.initializer`模块说明。 -使用MindSpore定义神经网络需要继承`mindspore.nn.cell.Cell`。`Cell`是所有神经网络(`Conv2d`等)的基类。 +使用MindSpore定义神经网络需要继承`mindspore.nn.Cell`。`Cell`是所有神经网络(`Conv2d`等)的基类。 神经网络的各层需要预先在`__init__`方法中定义,然后通过定义`construct`方法来完成神经网络的前向构造。按照LeNet的网络结构,定义网络各层如下: -- Gitee From 76f73e3f51c5e44a29f4329fc2b7677444d1ba48 Mon Sep 17 00:00:00 2001 From: lvmingfu Date: Mon, 19 Oct 2020 10:19:28 +0800 Subject: [PATCH 12/21] modify markdown file format in docs --- README.md | 24 ++++-- README_CN.md | 24 ++++-- docs/programming_guide/source_zh_cn/run.md | 23 +++-- .../programming_guide/source_zh_cn/sampler.md | 12 +-- .../source_zh_cn/security_and_privacy.md | 5 +- docs/programming_guide/source_zh_cn/tensor.md | 16 ++-- .../source_zh_cn/tokenizer.md | 12 +-- docs/programming_guide/source_zh_cn/train.md | 16 +++- resource/release/release_list_zh_cn.md | 35 +++++++- tools/link_detection/README_CN.md | 17 ++-- tools/pic_detection/README_CN.md | 16 ++-- .../source_en/multi_platform_inference.md | 15 ++-- .../multi_platform_inference_ascend_310.md | 1 - .../multi_platform_inference_ascend_910.md | 12 ++- .../source_en/multi_platform_inference_cpu.md | 3 +- .../source_en/multi_platform_inference_gpu.md | 1 - tutorials/inference/source_en/serving.md | 79 ++++++++++++------ .../source_zh_cn/multi_platform_inference.md | 15 ++-- .../multi_platform_inference_ascend_310.md | 2 +- .../multi_platform_inference_ascend_910.md | 14 +++- .../multi_platform_inference_cpu.md | 2 + .../multi_platform_inference_gpu.md | 2 +- tutorials/inference/source_zh_cn/serving.md | 78 +++++++++++------ .../lite/source_en/quick_start/quick_start.md | 67 ++++++++------- .../lite/source_en/use/benchmark_tool.md | 17 ++-- tutorials/lite/source_en/use/build.md | 83 +++++++++++-------- .../lite/source_en/use/converter_tool.md | 66 ++++++++++----- .../lite/source_en/use/image_processing.md | 34 ++++---- .../use/post_training_quantization.md | 4 +- tutorials/lite/source_en/use/runtime_cpp.md | 8 +- .../source_zh_cn/quick_start/quick_start.md | 64 +++++++------- .../lite/source_zh_cn/use/benchmark_tool.md | 17 ++-- tutorials/lite/source_zh_cn/use/build.md | 79 ++++++++++-------- .../lite/source_zh_cn/use/converter_tool.md | 67 +++++++++------ 34 files changed, 573 insertions(+), 357 deletions(-) diff --git a/README.md b/README.md index 499d288a55..b79bbd2d9b 100644 --- a/README.md +++ b/README.md @@ -16,20 +16,20 @@ If you have any comments or suggestions on the documents, submit them in Issues. ## Directory Structure Description -``` +```text docs ├───docs // Technical documents about architecture, network list, operator list, programming guide and so on. Configuration files for API generation. -│ +│ ├───install // Installation guide. -│ +│ ├───lite // Summary of all documents related to mindspore lite and their links. -│ +│ ├───resource // Resource-related documents. -│ +│ ├───tools // Automation tool. -│ +│ ├───tutorials // Tutorial-related documents. -│ +│ └───README_CN.md // Docs repository description. ``` @@ -38,21 +38,27 @@ docs MindSpore tutorials and API documents can be generated by [Sphinx](https://www.sphinx-doc.org/en/master/). The following uses the Python API document as an example to describe the procedure, and ensure that MindSpore, MindSpore Hub and MindArmour have been installed. 1. Download code of the MindSpore Docs repository. + ```shell git clone https://gitee.com/mindspore/docs.git ``` + 2. Go to the api_python directory and install the dependency items in the `requirements.txt` file. + ```shell cd docs/api_python pip install -r requirements.txt ``` + 3. Run the following command in the api_python directory to create the `build_zh_cn/html` directory that stores the generated document web page. You can open `build_zh_cn/html/index.html` to view the API document. - ``` + + ```shell make html ``` + > If you only need to generate the MindSpore API, please modify the `source_zh_cn/conf.py` file, comment the `import mindspore_hub` and `import mindarmour` statements, and then perform this step. ## License - [Apache License 2.0](LICENSE) -- [Creative Commons License version 4.0](LICENSE-CC-BY-4.0) \ No newline at end of file +- [Creative Commons License version 4.0](LICENSE-CC-BY-4.0) diff --git a/README_CN.md b/README_CN.md index 8a4de7e8af..ac420699c9 100644 --- a/README_CN.md +++ b/README_CN.md @@ -16,20 +16,20 @@ ## 目录结构说明 -``` +```text docs ├───docs // 架构、网络和算子支持、编程指南等技术文档以及用于生成API的相关配置文件 -│ +│ ├───install // 安装指南 -│ +│ ├───lite // MindSpore Lite相关所有文档汇总及其链接 -│ +│ ├───resource // 资源相关文档 -│ +│ ├───tools // 自动化工具 -│ +│ ├───tutorials // 教程相关文档 -│ +│ └───README_CN.md // Docs仓说明 ``` @@ -38,19 +38,25 @@ docs MindSpore的教程和API文档均可由[Sphinx](https://www.sphinx-doc.org/en/master/)工具生成。下面以Python API文档为例介绍具体步骤,操作前需完成MindSpore、MindSpore Hub和MindArmour的安装。 1. 下载MindSpore Docs仓代码。 + ```shell git clone https://gitee.com/mindspore/docs.git ``` + 2. 进入api_python目录,安装该目录下`requirements.txt`文件中的依赖项。 + ```shell cd docs/api_python pip install -r requirements.txt ``` + 3. 在api_python目录下执行如下命令,完成后会新建`build_zh_cn/html`目录,该目录中存放了生成后的文档网页,打开`build_zh_cn/html/index.html`即可查看API文档内容。 - ``` + + ```shell make html ``` - > 如仅需生成MindSpore API,请先修改`source_zh_cn/conf.py`文件,注释`import mindspore_hub`和`import mindarmour`语句后,再执行此步骤。 + + > 如仅需生成MindSpore API,请先修改`source_zh_cn/conf.py`文件,注释`import mindspore_hub`和`import mindarmour`语句后,再执行此步骤。 ## 版权 diff --git a/docs/programming_guide/source_zh_cn/run.md b/docs/programming_guide/source_zh_cn/run.md index 3b3138b054..6281328a1d 100644 --- a/docs/programming_guide/source_zh_cn/run.md +++ b/docs/programming_guide/source_zh_cn/run.md @@ -15,14 +15,15 @@ ## 概述 -执行主要有三种方式:单算子、普通函数和网络训练模型。 +执行主要有三种方式:单算子、普通函数和网络训练模型。 ## 执行单算子 执行单个算子,并打印相关结果。 代码样例如下: + ```python import numpy as np import mindspore.nn as nn @@ -37,6 +38,7 @@ print(output.asnumpy()) ``` 输出如下: + ```python [[[[ 0.06022915 0.06149777 0.06149777 0.06149777 0.01145121] [ 0.06402162 0.05889071 0.05889071 0.05889071 -0.00933781] @@ -63,12 +65,12 @@ print(output.asnumpy()) [ 0.01015155 0.00781826 0.00781826 0.00781826 -0.02884173]]]] ``` - ## 执行普通函数 将若干算子组合成一个函数,然后直接通过函数调用的方式执行这些算子,并打印相关结果,如下例所示。 代码样例如下: + ```python import numpy as np from mindspore import context, Tensor @@ -88,6 +90,7 @@ print(output.asnumpy()) ``` 输出如下: + ```python [[3. 3. 3.] [3. 3. 3.] @@ -95,14 +98,17 @@ print(output.asnumpy()) ``` ## 执行网络模型 + MindSpore的Model接口是用于训练和验证的高级接口。可以将有训练或推理功能的layers组合成一个对象,通过调用train、eval、predict接口可以分别实现训练、推理和预测功能。 用户可以根据实际需要传入网络、损失函数和优化器等初始化Model接口,还可以通过配置amp_level实现混合精度,配置metrics实现模型评估。 ### 执行训练模型 + 通过调用Model的train接口可以实现训练。 代码样例如下: + ```python import os @@ -180,7 +186,7 @@ def weight_variable(): class LeNet5(nn.Cell): - """ + """ Lenet network Args: @@ -231,6 +237,7 @@ if __name__ == "__main__": > 示例中用到的MNIST数据集的获取方法,可以参照[实现一个图片分类应用](https://www.mindspore.cn/tutorial/training/zh-CN/master/quick_start/quick_start.html)的下载数据集部分,下同。 输出如下: + ```python epoch: 1 step: 1, loss is 2.300784 epoch: 1 step: 2, loss is 2.3076947 @@ -244,23 +251,26 @@ epoch: 1 step: 1875, loss is 0.017264696 > 使用PyNative模式调试, 请参考[使用PyNative模式调试](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/debug_in_pynative_mode.html), 包括单算子、普通函数和网络训练模型的执行。 ### 执行推理模型 + 通过调用Model的train接口可以实现推理。为了方便评估模型的好坏,可以在Model接口初始化的时候设置评估指标Metric。 Metric是用于评估模型好坏的指标。常见的主要有Accuracy、Fbeta、Precision、Recall和TopKCategoricalAccuracy等,通常情况下,一种模型指标无法全面的评估模型的好坏,一般会结合多个指标共同作用对模型进行评估。 常用的内置评估指标: + - `Accuracy`(准确率):是一个用于评估分类模型的指标。通俗来说,准确率是指我们的模型预测正确的结果所占的比例。 公式:$$Accuracy = (TP+TN)/(TP+TN+FP+FN)$$ - `Precision`(精确率):在被识别为正类别的样本中,确实为正类别的比例。公式:$$Precision = TP/(TP+FP)$$ - `Recall`(召回率):在所有正类别样本中,被正确识别为正类别的比例。 公式:$$Recall = TP/(TP+FN)$$ -- `Fbeta`(调和均值):综合考虑precision和recall的调和均值。 +- `Fbeta`(调和均值):综合考虑precision和recall的调和均值。 公式:$$F_\beta = (1 + \beta^2) \cdot \frac{precisiont \cdot recall}{(\beta^2 \cdot precision) + recall}$$ - `TopKCategoricalAccuracy`(多分类TopK准确率):计算TopK分类准确率。 代码样例如下: + ```python import os @@ -278,7 +288,7 @@ from mindspore.train.serialization import load_checkpoint, load_param_into_net class LeNet5(nn.Cell): - """ + """ Lenet network Args: @@ -375,7 +385,8 @@ if __name__ == "__main__": > `checkpoint_lenet-1_1875.ckpt`文件的保存方法,可以参考[实现一个图片分类应用](https://www.mindspore.cn/tutorial/training/zh-CN/master/quick_start/quick_start.html)的训练网络部分。 输出如下: + ```python ============== {'Accuracy': 0.96875, 'Precision': array([0.97782258, 0.99451052, 0.98031496, 0.92723881, 0.98352214, 0.97165533, 0.98726115, 0.9472196 , 0.9394551 , 0.98236515])} ============== -``` \ No newline at end of file +``` diff --git a/docs/programming_guide/source_zh_cn/sampler.md b/docs/programming_guide/source_zh_cn/sampler.md index 295805463f..5a546c5769 100644 --- a/docs/programming_guide/source_zh_cn/sampler.md +++ b/docs/programming_guide/source_zh_cn/sampler.md @@ -65,7 +65,7 @@ for data in dataset2.create_dict_iterator(): 输出结果如下: -``` +```text Image shape: (32, 32, 3) , Label: 0 Image shape: (32, 32, 3) , Label: 2 Image shape: (32, 32, 3) , Label: 6 @@ -102,7 +102,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text Image shape: (32, 32, 3) , Label: 1 Image shape: (32, 32, 3) , Label: 1 Image shape: (32, 32, 3) , Label: 0 @@ -134,7 +134,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text Image shape: (32, 32, 3) , Label: 5 Image shape: (32, 32, 3) , Label: 0 Image shape: (32, 32, 3) , Label: 3 @@ -162,7 +162,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text Image shape: (32, 32, 3) , Label: 0 Image shape: (32, 32, 3) , Label: 0 Image shape: (32, 32, 3) , Label: 1 @@ -206,7 +206,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text {'data': Tensor(shape=[], dtype=Int64, value= 0)} {'data': Tensor(shape=[], dtype=Int64, value= 3)} {'data': Tensor(shape=[], dtype=Int64, value= 6)} @@ -236,7 +236,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text Image shape: (32, 32, 3) , Label: 0 Image shape: (32, 32, 3) , Label: 2 Image shape: (32, 32, 3) , Label: 4 diff --git a/docs/programming_guide/source_zh_cn/security_and_privacy.md b/docs/programming_guide/source_zh_cn/security_and_privacy.md index ec46866350..06dda16570 100644 --- a/docs/programming_guide/source_zh_cn/security_and_privacy.md +++ b/docs/programming_guide/source_zh_cn/security_and_privacy.md @@ -26,19 +26,22 @@ ## 对抗鲁棒性 ### Attack + `Attack`基类定义了对抗样本生成的使用接口,其子类实现了各种具体的生成算法,支持安全工作人员快速高效地生成对抗样本,用于攻击AI模型,以评估模型的鲁棒性。 ### Defense + `Defense`基类定义了对抗训练的使用接口,其子类实现了各种具体的对抗训练算法,增强模型的对抗鲁棒性。 ### Detector + `Detector`基类定义了对抗样本检测的使用借口,其子类实现了各种具体的检测算法,增强模型的对抗鲁棒性。 详细内容,请参考[对抗鲁棒性官网教程](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/improve_model_security_nad.html)。 ## 模型安全测试 -### Fuzzer +### Fuzzer `Fuzzer`类基于神经元覆盖率增益控制fuzzing流程,采用自然扰动和对抗样本生成方法作为变异策略,激活更多的神经元,从而探索不同类型的模型输出结果、错误行为,指导用户增强模型鲁棒性。 diff --git a/docs/programming_guide/source_zh_cn/tensor.md b/docs/programming_guide/source_zh_cn/tensor.md index 1d8b36f592..0ed0d4273e 100644 --- a/docs/programming_guide/source_zh_cn/tensor.md +++ b/docs/programming_guide/source_zh_cn/tensor.md @@ -31,7 +31,7 @@ 代码样例如下: -``` +```python import numpy as np from mindspore import Tensor from mindspore.common import dtype as mstype @@ -48,7 +48,7 @@ print(x, "\n\n", y, "\n\n", z, "\n\n", m, "\n\n", n, "\n\n", p) 输出如下: -``` +```text [[1 2] [3 4]] @@ -68,12 +68,13 @@ True ### 属性 张量的属性包括形状(shape)和数据类型(dtype)。 + - 形状:`Tensor`的shape,是一个tuple。 - 数据类型:`Tensor`的dtype,是MindSpore的一个数据类型。 代码样例如下: -``` +```python import numpy as np from mindspore import Tensor from mindspore.common import dtype as mstype @@ -87,20 +88,21 @@ print(x_shape, x_dtype) 输出如下: -``` +```text (2, 2) Int32 ``` - + ### 方法 张量的方法包括`all`、`any`和`asnumpy`,`all`和`any`方法目前只支持Ascend。 + - `all(axis, keep_dims)`:在指定维度上通过`and`操作进行归约,`axis`代表归约维度,`keep_dims`表示是否保留归约后的维度。 - `any(axis, keep_dims)`:在指定维度上通过`or`操作进行归约,参数含义同`all`。 - `asnumpy()`:将`Tensor`转换为NumPy的array。 代码样例如下: -``` +```python import numpy as np from mindspore import Tensor from mindspore.common import dtype as mstype @@ -115,7 +117,7 @@ print(x_all, "\n\n", x_any, "\n\n", x_array) 输出如下: -``` +```text False True diff --git a/docs/programming_guide/source_zh_cn/tokenizer.md b/docs/programming_guide/source_zh_cn/tokenizer.md index 66c447d1c3..cb00c06cd1 100644 --- a/docs/programming_guide/source_zh_cn/tokenizer.md +++ b/docs/programming_guide/source_zh_cn/tokenizer.md @@ -79,7 +79,7 @@ for i in dataset.create_dict_iterator(num_epochs=1, output_numpy=True): 输出结果如下: -``` +```text ------------------------before tokenization---------------------------- 床前明月光 疑是地上霜 @@ -130,7 +130,7 @@ for i in dataset.create_dict_iterator(num_epochs=1, output_numpy=True): 输出结果如下: -``` +```text ------------------------before tokenization---------------------------- 今天天气太好了我们一起去外面玩吧 ------------------------after tokenization----------------------------- @@ -167,7 +167,7 @@ for i in dataset.create_dict_iterator(num_epochs=1, output_numpy=True): 输出结果如下: -``` +```text ------------------------before tokenization---------------------------- I saw a girl with a telescope. ------------------------after tokenization----------------------------- @@ -203,7 +203,7 @@ for i in dataset.create_dict_iterator(num_epochs=1, output_numpy=True): 输出结果如下: -``` +```text ------------------------before tokenization---------------------------- Welcome to Beijing! 北京欢迎您! @@ -243,7 +243,7 @@ for i in dataset.create_dict_iterator(num_epochs=1, output_numpy=True): 输出结果如下: -``` +```text ------------------------before tokenization---------------------------- Welcome to Beijing! 北京欢迎您! @@ -285,7 +285,7 @@ for i in dataset.create_dict_iterator(num_epochs=1, output_numpy=True): 输出结果如下: -``` +```text ------------------------before tokenization---------------------------- my favorite diff --git a/docs/programming_guide/source_zh_cn/train.md b/docs/programming_guide/source_zh_cn/train.md index 57c313a78f..12182a926c 100644 --- a/docs/programming_guide/source_zh_cn/train.md +++ b/docs/programming_guide/source_zh_cn/train.md @@ -16,9 +16,11 @@ ## 概述 + MindSpore在Model_zoo也已经提供了大量的目标检测、自然语言处理等多种网络模型,供用户直接使用,但是对于某些高级用户而言可能想要自行设计网络或者自定义训练循环,下面就对自定义训练网络、自定义训练循环和边训练边推理三种场景进行介绍,另外对On device执行方式进行详细介绍。 ## 自定义训练网络 + 在自定义训练网络前,需要先了解下MindSpore的网络支持、Python源码构造网络约束和算子支持情况。 - 网络支持:当前MindSpore已经支持多种网络,按类型分为计算机视觉、自然语言处理、推荐和图神经网络,可以通过[网络支持](https://www.mindspore.cn/doc/note/zh-CN/master/network_list.html)查看具体支持的网络情况。如果现有网络无法满足用户需求,用户可以根据实际需要定义自己的网络。 @@ -30,6 +32,7 @@ MindSpore在Model_zoo也已经提供了大量的目标检测、自然语言处 > 当开发网络遇到内置算子不足以满足需求时,用户也可以参考[自定义算子](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/custom_operator_ascend.html),方便快捷地扩展昇腾AI处理器的自定义算子。 代码样例如下: + ```python import numpy as np @@ -74,15 +77,18 @@ if __name__ == "__main__": ``` 输出如下: + ```python -------loss------ [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] ``` ## 自定义训练循环 + 用户如果不想使用MindSpore提供的Model接口,可以将模仿Model的train接口自由控制循环的迭代次数和每个epoch的step数量。 代码样例如下: + ```python import os @@ -244,6 +250,7 @@ if __name__ == "__main__": > 示例中用到的MNIST数据集的获取方法,可以参照[实现一个图片分类应用](https://www.mindspore.cn/tutorial/training/zh-CN/master/quick_start/quick_start.html)的下载数据集部分,下同。 输出如下: + ```python epoch: 1/10, losses: 2.294034719467163 epoch: 2/10, losses: 2.3150298595428467 @@ -260,9 +267,11 @@ epoch: 10/10, losses: 1.4282708168029785 > 典型的使用场景是梯度累积,详细查看[梯度累积](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/apply_gradient_accumulation.html)。 ## 边训练边推理 + 对于某些数据量较大、训练时间较长的复杂网络,为了能掌握训练的不同阶段模型精度的指标变化情况,可以通过边训练边推理的方式跟踪精度的变化情况。具体可以参考[同步训练和验证模型](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/evaluate_the_model_during_training.html)。 ## on-device执行 + 当前MindSpore支持的后端包括Ascend、GPU、CPU,所谓On Device中的Device通常指Ascend(昇腾)AI处理器。 昇腾芯片上集成了AICORE、AICPU和CPU。其中,AICORE负责大型Tensor Vector运算,AICPU负责标量运算,CPU负责逻辑控制和任务分发。 @@ -270,12 +279,14 @@ epoch: 10/10, losses: 1.4282708168029785 Host侧CPU负责将图或算子下发到昇腾芯片。昇腾芯片由于具备了运算、逻辑控制和任务分发的功能,所以不需要与Host侧的CPU进行频繁的交互,只需要将计算完的最终结果返回给Host侧,实现整图下沉到Device执行,避免Host-Device频繁交互,减小了开销。 以下是Device的主要组成结构: + - 片上32G内存:5G(parameter) + 26G(feature map) + 1G(HCCL) - 多流水线并行:6条流水线 - AICORE&带宽:32Cores、读写带宽128GBps - 通信协议:HCCS、PCIe4.0、RoCEv2 ### 计算图下沉 + 计算图整图下沉到Device上执行,减少Host-Device交互开销。可以结合循环下沉实现多个Step下沉,进一步减少Host和Device的交互次数。 循环下沉是在On Device执行的基础上的优化,目的是进一步减少Host侧和Device侧之间的交互次数。通常情况下,每个step都返回一个结果,循环下沉是控制每隔多少个step返回一次结果。 @@ -285,6 +296,7 @@ Host侧CPU负责将图或算子下发到昇腾芯片。昇腾芯片由于具备 也可以结合`train`接口的`dataset_sink_mode`和`sink_size`控制每个epoch的下沉数据量。 ### 数据下沉 + `Model`的`train`接口参数`dataset_sink_mode`可以控制数据是否下沉。`dataset_sink_mode`为True表示数据下沉,否则为非下沉。所谓下沉即数据通过通道直接传送到Device上。 dataset_sink_mode参数可以配合`sink_size`控制每个`epoch`下沉的数据量大小。当`dataset_sink_mode`设置为True,即数据下沉模式时: @@ -296,6 +308,7 @@ dataset_sink_mode参数可以配合`sink_size`控制每个`epoch`下沉的数据 下沉的总数据量由`epoch`和`sink_size`两个变量共同控制,即总数据量=`epoch`*`sink_size`。 代码样例如下: + ```python import os @@ -428,6 +441,7 @@ if __name__ == "__main__": `batch_size`为32的情况下,数据集的大小为1875,当`sink_size`设置为1000时,表示每个`epoch`下沉1000个batch的数据,下沉次数为`epoch`=10,下沉的总数据量为:`epoch`*`sink_size`=10000。 输出如下: + ```python epoch: 1 step: 1000, loss is 0.5399815 epoch: 2 step: 1000, loss is 0.033433747 @@ -441,4 +455,4 @@ epoch: 9 step: 1000, loss is 0.00017951085 epoch: 10 step: 1000, loss is 0.01490275 ``` -> `dataset_sink_mode`为False时,`sink_size`参数设置无效。 \ No newline at end of file +> `dataset_sink_mode`为False时,`sink_size`参数设置无效。 diff --git a/resource/release/release_list_zh_cn.md b/resource/release/release_list_zh_cn.md index 88e820a5fb..8c6df5cdfc 100644 --- a/resource/release/release_list_zh_cn.md +++ b/resource/release/release_list_zh_cn.md @@ -53,11 +53,13 @@ ## 1.0.0 + ### 版本说明 ### 下载地址 + | 组件 | 硬件平台 | 操作系统 | 链接 | SHA-256 | | --- | --- | --- | --- | --- | | MindSpore | Ascend910 | Ubuntu-x86 | | 4682be18cffdf86346bdb286ccd9e05f33be4138415dbc7db1650d029510ee44 | @@ -97,11 +99,13 @@ | 文档 | 编程指南
Python API
C++ API
FAQ
其他说明 | ## 0.7.0-beta + ### 版本说明 ### 下载地址 + | 组件 | 硬件平台 | 操作系统 | 链接 | SHA-256 | | --- | --- | --- | --- | --- | | MindSpore | Ascend910 | Ubuntu-x86 | | 522b80e84de1b414d3800a27d01e40f75332000e5246b24cc1aea7d9e5566ce5 | @@ -130,11 +134,13 @@ | 文档 | | | ## 0.6.0-beta + ### 版本说明 ### 下载地址 + | 组件 | 硬件平台 | 操作系统 | 链接 | SHA-256 | | --- | --- | --- | --- | --- | | MindSpore | Ascend910 | Ubuntu-x86 | | afea66c19beff797b99bf06bc0ed897a83fdb510d62e03663cef55a68e0f278f | @@ -154,21 +160,25 @@ | | GPU CUDA 10.1/CPU | Ubuntu-x86 | | 18f245bdff972414010c9f53de402d790cdef9a74f94ac41e5b6341e778e93b3 | ### 教程 + ### API + ### 文档 - + ## 0.5.2-beta + ### 版本说明 ### 下载地址 + | 组件 | 硬件平台 | 操作系统 | 链接 | SHA-256 | | --- | --- | --- | --- | --- | | MindSpore | Ascend910 | Ubuntu-x86 | | ec4bdb6c96d9ffd2d1e465bd07ac4a8a9c0633512b4fffe9217590ad1a576ea6 | @@ -188,20 +198,25 @@ | | GPU CUDA 10.1/CPU | Ubuntu-x86 | | 09aa2887b0acbe9b31d07fb8d740c0bceefd6b8751aebdddd533f752f7564efc | ### 教程 + ### API + ### 文档 + ## 0.5.0-beta + ### 版本说明 ### 下载地址 + | 组件 | 硬件平台 | 操作系统 | 链接 | SHA-256 | | --- | --- | --- | --- | --- | | MindSpore | Ascend910 | Ubuntu-x86 | | f20adcdb696316361e13fcd624d7188598b7248f77c7efc535cf193afc26f1c2 | @@ -221,20 +236,25 @@ | | GPU CUDA 10.1/CPU | Ubuntu-x86 | | 09aa2887b0acbe9b31d07fb8d740c0bceefd6b8751aebdddd533f752f7564efc | ### 教程 + ### API + ### 文档 + ## 0.3.0-alpha + ### 版本说明 ### 下载地址 + | 组件 | 硬件平台 | 操作系统 | 链接 | SHA-256 | | --- | --- | --- | --- | --- | | MindSpore | Ascend910 | Ubuntu-x86 | | 7756a50ca3af82d06eaf456db4d062fa647a8352724ef85da6569426a6393918 | @@ -255,20 +275,25 @@ | | GPU CUDA 9.2/GPU CUDA 10.1/CPU | Ubuntu-x86 | | 7a2bd6174be9e5a47e8ae6bcdd592ecdafc6e53e6f1cd5f0261fcb8337b5b337 | ### 教程 + ### API + ### 文档 + ## 0.2.0-alpha + ### 版本说明 ### 下载地址 + | 组件 | 硬件平台 | 操作系统 | 链接 | SHA-256 | | --- | --- | --- | --- | --- | | MindSpore | Ascend910 | Ubuntu-x86 | | aa1225665d05263b17bb7ec1d51dd4f933254c818bee126b6c5dac4513532a14 | @@ -288,20 +313,25 @@ | | GPU CUDA 9.2/GPU CUDA 10.1/CPU | Ubuntu-x86 | | 4146790bc73a5846e92b943dfd3febb6c62052b217eeb45b6c48aa82b51e7cc3 | ### 教程 + ### API + ### 文档 + ## 0.1.0-alpha + ### 版本说明 ### 下载地址 + | 组件 | 硬件平台 | 操作系统 | 链接 | SHA-256 | | --- | --- | --- | --- | --- | | MindSpore | Ascend910 | Ubuntu-x86 | | a76df4e96c4cb69b10580fcde2d4ef46b5d426be6d47a3d8fd379c97c3e66638 | @@ -319,12 +349,15 @@ | | GPU CUDA 9.2/GPU CUDA 10.1/CPU | Ubuntu-x86 | | 7796b6c114ee4962ce605da59a9bc47390c8910acbac318ecc0598829aad6e8c | ### 教程 + ### API + ### 文档 + ## master(unstable) diff --git a/tools/link_detection/README_CN.md b/tools/link_detection/README_CN.md index 442726a409..c2be9e6e40 100644 --- a/tools/link_detection/README_CN.md +++ b/tools/link_detection/README_CN.md @@ -3,29 +3,32 @@ ## 简介 此工具可以检查用户指定目录里所有文件的链接,将所有链接分为三类,并且将检查结果分别写入三个文件,如下所示: + 1. 响应的状态码不是200的链接,写入`400.txt`文件中。 2. 脚本执行过程中请求出现异常的链接,写入`exception.txt`文件中。 3. 对于安装包的链接,因为请求非常耗时,所以不发请求,直接写入`slow.txt`文件中。 - ## 使用说明 该工具所依赖的操作系统为Windows操作系统,执行环境为Python环境,具体使用步骤如下所示: 1. 打开Git Bash,下载MindSpore Docs仓代码。 - ``` + + ```shell git clone https://gitee.com/mindspore/docs.git ``` + 2. 进入`tools/link_detection`目录,安装执行所需的第三方库。 - ``` + + ```shell cd tools/link_detection pip install requests ``` + 3. 在`link_detection`目录下执行如下命令,在输入需要检测目录的绝对路径后,开始进行检测,完成后会在当前目录下新建`404.txt`、`exception.txt`、`slow.txt`三个文件。 - ``` + + ```shell python link_detection.py ``` - > 检测目录的绝对路径全使用英文,并且使用Linux的绝对路径方式,例如:`/d/master/docs`。 - - + > 检测目录的绝对路径全使用英文,并且使用Linux的绝对路径方式,例如:`/d/master/docs`。 diff --git a/tools/pic_detection/README_CN.md b/tools/pic_detection/README_CN.md index c217d51929..a3cf658bc4 100644 --- a/tools/pic_detection/README_CN.md +++ b/tools/pic_detection/README_CN.md @@ -4,24 +4,26 @@ 此工具可以检查用户指定目录里所有图片的使用情况,会检查出没有使用的图片,并且将没有使用的图片删除。 - ## 使用说明 该工具所依赖的操作系统为Windows操作系统,执行环境为Python环境,具体使用步骤如下所示: 1. 打开Git Bash,下载MindSpore Docs仓代码。 - ``` + + ```shell git clone https://gitee.com/mindspore/docs.git ``` + 2. 进入`tools/pic_detection`目录。 - ``` + + ```shell cd tools/pic_detection ``` + 3. 在`pic_detection`目录下执行如下命令,在输入需要检测目录的绝对路径后,开始进行检测,最后将没有使用的图片删除。 - ``` + + ```shell python pic_detection.py ``` - > 检测目录的绝对路径全使用英文,并且使用Linux的绝对路径方式,例如:`/d/master/docs`。 - - + > 检测目录的绝对路径全使用英文,并且使用Linux的绝对路径方式,例如:`/d/master/docs`。 diff --git a/tutorials/inference/source_en/multi_platform_inference.md b/tutorials/inference/source_en/multi_platform_inference.md index ab1a6bf9cb..da8121d4e3 100644 --- a/tutorials/inference/source_en/multi_platform_inference.md +++ b/tutorials/inference/source_en/multi_platform_inference.md @@ -13,6 +13,7 @@ Models trained by MindSpore support the inference on different hardware platforms. This document describes the inference process on each platform. The inference can be performed in either of the following methods based on different principles: + - Use a checkpoint file for inference. That is, use the inference API to load data and the checkpoint file for inference in the MindSpore training environment. - Convert the checkpiont file into a common model format, such as ONNX or AIR, for inference. The inference environment does not depend on MindSpore. In this way, inference can be performed across hardware platforms as long as the platform supports ONNX or AIR inference. For example, models trained on the Ascend 910 AI processor can be inferred on the GPU or CPU. @@ -27,12 +28,8 @@ MindSpore supports the following inference scenarios based on the hardware platf | CPU | Checkpoint | The training environment dependency is the same as that of MindSpore. | | CPU | ONNX | Supports ONNX Runtime or SDK, for example, TensorRT. | -> Open Neural Network Exchange (ONNX) is an open file format designed for machine learning. It is used to store trained models. It enables different AI frameworks (such as PyTorch and MXNet) to store model data in the same format and interact with each other. For details, visit the ONNX official website . - -> Ascend Intermediate Representation (AIR) is an open file format defined by Huawei for machine learning and can better adapt to the Ascend AI processor. It is similar to ONNX. - -> Ascend Computer Language (ACL) provides C++ API libraries for users to develop deep neural network applications, including device management, context management, stream management, memory management, model loading and execution, operator loading and execution, and media data processing. It matches the Ascend AI processor and enables hardware running management and resource management. - -> Offline Model (OM) is supported by the Huawei Ascend AI processor. It implements preprocessing functions that can be completed without devices, such as operator scheduling optimization, weight data rearrangement and compression, and memory usage optimization. - -> NVIDIA TensorRT is an SDK for high-performance deep learning inference. It includes a deep learning inference optimizer and runtime to improve the inference speed of the deep learning model on edge devices. For details, see . +> - Open Neural Network Exchange (ONNX) is an open file format designed for machine learning. It is used to store trained models. It enables different AI frameworks (such as PyTorch and MXNet) to store model data in the same format and interact with each other. For details, visit the ONNX official website . +> - Ascend Intermediate Representation (AIR) is an open file format defined by Huawei for machine learning and can better adapt to the Ascend AI processor. It is similar to ONNX. +> - Ascend Computer Language (ACL) provides C++ API libraries for users to develop deep neural network applications, including device management, context management, stream management, memory management, model loading and execution, operator loading and execution, and media data processing. It matches the Ascend AI processor and enables hardware running management and resource management. +> - Offline Model (OM) is supported by the Huawei Ascend AI processor. It implements preprocessing functions that can be completed without devices, such as operator scheduling optimization, weight data rearrangement and compression, and memory usage optimization. +> - NVIDIA TensorRT is an SDK for high-performance deep learning inference. It includes a deep learning inference optimizer and runtime to improve the inference speed of the deep learning model on edge devices. For details, see . diff --git a/tutorials/inference/source_en/multi_platform_inference_ascend_310.md b/tutorials/inference/source_en/multi_platform_inference_ascend_310.md index 359b4d91d9..ebbb52fa1a 100644 --- a/tutorials/inference/source_en/multi_platform_inference_ascend_310.md +++ b/tutorials/inference/source_en/multi_platform_inference_ascend_310.md @@ -11,7 +11,6 @@ - ## Inference Using an ONNX or AIR File The Ascend 310 AI processor is equipped with the ACL framework and supports the OM format which needs to be converted from the model in ONNX or AIR format. For inference on the Ascend 310 AI processor, perform the following steps: diff --git a/tutorials/inference/source_en/multi_platform_inference_ascend_910.md b/tutorials/inference/source_en/multi_platform_inference_ascend_910.md index 05217b6249..bd536f4e30 100644 --- a/tutorials/inference/source_en/multi_platform_inference_ascend_910.md +++ b/tutorials/inference/source_en/multi_platform_inference_ascend_910.md @@ -13,7 +13,7 @@ ## Inference Using a Checkpoint File -1. Use the `model.eval` interface for model validation. +1. Use the `model.eval` interface for model validation. 1.1 Local Storage @@ -34,12 +34,13 @@ acc = model.eval(dataset, dataset_sink_mode=args.dataset_sink_mode) print("============== {} ==============".format(acc)) ``` + In the preceding information: `model.eval` is an API for model validation. For details about the API, see . > Inference sample code: . 1.2 Remote Storage - + When the pre-trained models are saved remotely, the steps of performing inference on validation dataset are as follows: firstly determine which model to be used, then loading model and parameters using `mindspore_hub.load`, and finally performing inference on validation dataset once created. The processing method of the validation dataset is the same as that of the training dataset. ```python @@ -55,14 +56,17 @@ 1) acc = model.eval(dataset, dataset_sink_mode=args.dataset_sink_mode) print("============== {} ==============".format(acc)) - ``` + ``` + In the preceding information: - + `mindpsore_hub.load` is an API for loading model parameters. PLease check the details in . 2. Use the `model.predict` API to perform inference. + ```python model.predict(input_data) ``` + In the preceding information: `model.predict` is an API for inference. For details about the API, see . diff --git a/tutorials/inference/source_en/multi_platform_inference_cpu.md b/tutorials/inference/source_en/multi_platform_inference_cpu.md index 82424de89d..8d00afd56a 100644 --- a/tutorials/inference/source_en/multi_platform_inference_cpu.md +++ b/tutorials/inference/source_en/multi_platform_inference_cpu.md @@ -12,11 +12,12 @@ - ## Inference Using a Checkpoint File + The inference is the same as that on the Ascend 910 AI processor. ## Inference Using an ONNX File + Similar to the inference on a GPU, the following steps are required: 1. Generate a model in ONNX format on the training platform. For details, see [Export ONNX Model](https://www.mindspore.cn/tutorial/training/en/master/use/save_model.html#export-onnx-model). diff --git a/tutorials/inference/source_en/multi_platform_inference_gpu.md b/tutorials/inference/source_en/multi_platform_inference_gpu.md index d42a2ffe25..0c3de8af6b 100644 --- a/tutorials/inference/source_en/multi_platform_inference_gpu.md +++ b/tutorials/inference/source_en/multi_platform_inference_gpu.md @@ -12,7 +12,6 @@ - ## Inference Using a Checkpoint File The inference is the same as that on the Ascend 910 AI processor. diff --git a/tutorials/inference/source_en/serving.md b/tutorials/inference/source_en/serving.md index 589857362d..18266ebe7a 100644 --- a/tutorials/inference/source_en/serving.md +++ b/tutorials/inference/source_en/serving.md @@ -23,12 +23,15 @@ MindSpore Serving is a lightweight and high-performance service module that helps MindSpore developers efficiently deploy online inference services in the production environment. After completing model training using MindSpore, you can export the MindSpore model and use MindSpore Serving to create an inference service for the model. Currently, only Ascend 910 is supported. ## Starting Serving + After MindSpore is installed using `pip`, the Serving executable program is stored in `/{your python path}/lib/python3.7/site-packages/mindspore/ms_serving`. Run the following command to start Serving: -```bash -ms_serving [--help] [--model_path=] [--model_name=] [--port=] + +```bash +ms_serving [--help] [--model_path=] [--model_name=] [--port=] [--rest_api_port=] [--device_id=] ``` + Parameters are described as follows: |Parameter|Attribute|Function|Parameter Type|Default Value|Value Range| @@ -41,69 +44,84 @@ Parameters are described as follows: |`--device_id=`|Optional|Specifies device ID to be used.|Integer|0|0 to 7| > Before running the startup command, add the path `/{your python path}/lib:/{your python path}/lib/python3.7/site-packages/mindspore/lib` to the environment variable `LD_LIBRARY_PATH`. - > port and rest_ api_port cannot be the same. + > port and rest_api_port cannot be the same. ## Application Example + The following uses a simple network as an example to describe how to use MindSpore Serving. ### Exporting Model + > Before exporting the model, you need to configure MindSpore [base environment](https://www.mindspore.cn/install/en). Use [add_model.py](https://gitee.com/mindspore/mindspore/blob/master/serving/example/export_model/add_model.py) to build a network with only the Add operator and export the MindSpore inference deployment model. -```python +```shell python add_model.py ``` + Execute the script to generate the `tensor_add.mindir` file. The input of the model is two one-dimensional tensors with shape [2,2], and the output is the sum of the two input tensors. ### Starting Serving Inference + ```bash ms_serving --model_path={model directory} --model_name=tensor_add.mindir ``` + If the server prints the `MS Serving Listening on 0.0.0.0:5500` log, the Serving has loaded the inference model. ### Client Samples + #### Python Client Sample + > Before running the client sample, add the path `/{your python path}/lib/python3.7/site-packages/mindspore/` to the environment variable `PYTHONPATH`. Obtain [ms_client.py](https://gitee.com/mindspore/mindspore/blob/master/serving/example/python_client/ms_client.py) and start the Python client. + ```bash python ms_client.py ``` If the following information is displayed, the Serving has correctly executed the inference of the Add network. -``` + +```text ms client received: [[2. 2.] [2. 2.]] ``` #### C++ Client Sample + 1. Obtain an executable client sample program. Download the [MindSpore source code](https://gitee.com/mindspore/mindspore). You can use either of the following methods to compile and obtain the client sample program: - + When MindSpore is compiled using the source code, the Serving C++ client sample program is generated. You can find the `ms_client` executable program in the `build/mindspore/serving/example/cpp_client` directory. - + Independent compilation + - When MindSpore is compiled using the source code, the Serving C++ client sample program is generated. You can find the `ms_client` executable program in the `build/mindspore/serving/example/cpp_client` directory. + - Independent compilation Preinstall [gRPC](https://gRPC.io). Run the following command in the MindSpore source code path to compile a client sample program: + ```bash cd mindspore/serving/example/cpp_client mkdir build && cd build cmake -D GRPC_PATH={grpc_install_dir} .. make ``` + In the preceding command, `{grpc_install_dir}` indicates the gRPC installation path. Replace it with the actual gRPC installation path. 2. Start the client. Execute `ms_client` to send an inference request to the Serving. + ```bash ./ms_client --target=localhost:5500 ``` + If the following information is displayed, the Serving has correctly executed the inference of the Add network. - ``` + + ```text Compute [[1, 2], [3, 4]] + [[1, 2], [3, 4]] Add result is 2 4 6 8 client received: RPC OK @@ -112,69 +130,82 @@ ms client received: The client code consists of the following parts: 1. Implement the client based on MSService::Stub and create a client instance. - ``` + + ```cpp class MSClient { public: explicit MSClient(std::shared_ptr channel) : stub_(MSService::NewStub(channel)) {} private: std::unique_ptr stub_; }; - + MSClient client(grpc::CreateChannel(target_str, grpc::InsecureChannelCredentials())); - + ``` + 2. Build the request input parameter `Request`, output parameter `Reply`, and gRPC client `Context` based on the actual network input. - ``` + + ```cpp PredictRequest request; PredictReply reply; ClientContext context; - + //construct tensor Tensor data; - + //set shape TensorShape shape; shape.add_dims(4); *data.mutable_tensor_shape() = shape; - + //set type data.set_tensor_type(ms_serving::MS_FLOAT32); std::vector input_data{1, 2, 3, 4}; - + //set datas data.set_data(input_data.data(), input_data.size()); - + //add tensor to request *request.add_data() = data; *request.add_data() = data; ``` + 3. Call the gRPC API to communicate with the Serving that has been started, and obtain the return value. - ``` + + ```cpp Status status = stub_->Predict(&context, request, &reply); ``` -For details about the complete code, see [ms_client](https://gitee.com/mindspore/mindspore/blob/master/serving/example/cpp_client/ms_client.cc). +For details about the complete code, see [ms_client](https://gitee.com/mindspore/mindspore/blob/master/serving/example/cpp_client/ms_client.cc). ### REST API Client Sample + 1. Send data in the form of `data`: `data` field: flatten each input data of network model into one-dimensional data. Suppose the network model has n inputs, and the final data structure is a two-dimensional list of 1 * n. As in this example, flatten the model input data `[[1.0, 2.0], [3.0, 4.0]]` and `[[1.0, 2.0], [3.0, 4.0]]` to form `[[1.0, 2.0, 3.0, 4.0], [1.0, 2.0, 3.0, 4.0]]`. - ``` + + ```shell curl -X POST -d '{"data": [[1.0, 2.0, 3.0, 4.0], [1.0, 2.0, 3.0, 4.0]]}' http://127.0.0.1:5501 ``` + The following return values are displayed, indicating that the serving service has correctly executed the reasoning of the add network, and the output data structure is similar to that of the input: - ``` + + ```text {"data":[[2.0,4.0,6.0,8.0]]} ``` 2. Send data in the form of `tensor`: `tensor` field: composed of each input of the network model, keeping the original shape of input. As in this example, the model input data `[[1.0, 2.0], [3.0, 4.0]]` and `[[1.0, 2.0], [3.0, 4.0]]` are combined into `[[[1.0, 2.0], [3.0, 4.0]], [[1.0, 2.0], [3.0, 4.0]]]`. - ``` + + ```shell curl -X POST -d '{"tensor": [[[1.0, 2.0], [3.0, 4.0]], [[1.0, 2.0], [3.0, 4.0]]]}' http://127.0.0.1:5501 ``` + The following return values are displayed, indicating that the serving service has correctly executed the reasoning of the add network, and the output data structure is similar to that of the input: - ``` + + ```text {"tensor":[[2.0,4.0], [6.0,8.0]]} ``` - > REST APICurrently only int32 and fp32 are supported as inputs. \ No newline at end of file + + > REST APICurrently only int32 and fp32 are supported as inputs. diff --git a/tutorials/inference/source_zh_cn/multi_platform_inference.md b/tutorials/inference/source_zh_cn/multi_platform_inference.md index 22402d3102..e5ee1902d3 100644 --- a/tutorials/inference/source_zh_cn/multi_platform_inference.md +++ b/tutorials/inference/source_zh_cn/multi_platform_inference.md @@ -13,6 +13,7 @@ 基于MindSpore训练后的模型,支持在不同的硬件平台上执行推理。本文介绍各平台上的推理流程。 按照原理不同,推理可以有两种方式: + - 直接使用checkpiont文件进行推理,即在MindSpore训练环境下,使用推理接口加载数据及checkpoint文件进行推理。 - 将checkpiont文件转化为通用的模型格式,如ONNX、AIR格式模型文件进行推理,推理环境不需要依赖MindSpore。这样的好处是可以跨硬件平台,只要支持ONNX/AIR推理的硬件平台即可进行推理。譬如在Ascend 910 AI处理器上训练的模型,可以在GPU/CPU上进行推理。 @@ -27,12 +28,8 @@ GPU | ONNX格式 | 支持ONNX推理的runtime/SDK,如TensorRT。 CPU | checkpoint格式 | 与MindSpore训练环境依赖一致。 CPU | ONNX格式 | 支持ONNX推理的runtime/SDK,如TensorRT。 -> ONNX,全称Open Neural Network Exchange,是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如PyTorch, MXNet)可以采用相同格式存储模型数据并交互。详细了解,请参见ONNX官网。 - -> AIR,全称Ascend Intermediate Representation,类似ONNX,是华为定义的针对机器学习所设计的开放式的文件格式,能更好地适配Ascend AI处理器。 - -> ACL,全称Ascend Computer Language,提供Device管理、Context管理、Stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等C++ API库,供用户开发深度神经网络应用。它匹配Ascend AI处理器,使能硬件的运行管理、资源管理能力。 - -> OM,全称Offline Model,华为Ascend AI处理器支持的离线模型,实现算子调度的优化,权值数据重排、压缩,内存使用优化等可以脱离设备完成的预处理功能。 - -> TensorRT,NVIDIA 推出的高性能深度学习推理的SDK,包括深度推理优化器和runtime,提高深度学习模型在边缘设备上的推断速度。详细请参见。 \ No newline at end of file +> - ONNX,全称Open Neural Network Exchange,是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如PyTorch, MXNet)可以采用相同格式存储模型数据并交互。详细了解,请参见ONNX官网。 +> - AIR,全称Ascend Intermediate Representation,类似ONNX,是华为定义的针对机器学习所设计的开放式的文件格式,能更好地适配Ascend AI处理器。 +> - ACL,全称Ascend Computer Language,提供Device管理、Context管理、Stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等C++ API库,供用户开发深度神经网络应用。它匹配Ascend AI处理器,使能硬件的运行管理、资源管理能力。 +> - OM,全称Offline Model,华为Ascend AI处理器支持的离线模型,实现算子调度的优化,权值数据重排、压缩,内存使用优化等可以脱离设备完成的预处理功能。 +> - TensorRT,NVIDIA 推出的高性能深度学习推理的SDK,包括深度推理优化器和runtime,提高深度学习模型在边缘设备上的推断速度。详细请参见。 diff --git a/tutorials/inference/source_zh_cn/multi_platform_inference_ascend_310.md b/tutorials/inference/source_zh_cn/multi_platform_inference_ascend_310.md index f99df969c5..29cc91251f 100644 --- a/tutorials/inference/source_zh_cn/multi_platform_inference_ascend_310.md +++ b/tutorials/inference/source_zh_cn/multi_platform_inference_ascend_310.md @@ -19,4 +19,4 @@ Ascend 310 AI处理器上搭载了ACL框架,他支持OM格式,而OM格式需 2. 将ONNX/AIR格式模型文件,转化为OM格式模型,并进行推理。 - 云上(ModelArt环境),请参考[Ascend910训练和Ascend310推理的样例](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_10_0026.html)完成推理操作。 - - 本地的裸机环境(对比云上环境,即本地有Ascend 310 AI 处理器),请参考Ascend 310 AI处理器配套软件包的说明文档。 \ No newline at end of file + - 本地的裸机环境(对比云上环境,即本地有Ascend 310 AI 处理器),请参考Ascend 310 AI处理器配套软件包的说明文档。 diff --git a/tutorials/inference/source_zh_cn/multi_platform_inference_ascend_910.md b/tutorials/inference/source_zh_cn/multi_platform_inference_ascend_910.md index 2f54f93e87..c726609e2e 100644 --- a/tutorials/inference/source_zh_cn/multi_platform_inference_ascend_910.md +++ b/tutorials/inference/source_zh_cn/multi_platform_inference_ascend_910.md @@ -13,11 +13,12 @@ ## 使用checkpoint格式文件推理 -1. 使用`model.eval`接口来进行模型验证。 +1. 使用`model.eval`接口来进行模型验证。 1.1 模型已保存在本地 首先构建模型,然后使用`mindspore.train.serialization`模块的`load_checkpoint`和`load_param_into_net`从本地加载模型与参数,传入验证数据集后即可进行模型推理,验证数据集的处理方式与训练数据集相同。 + ```python network = LeNet5(cfg.num_classes) net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean") @@ -33,13 +34,15 @@ acc = model.eval(dataset, dataset_sink_mode=args.dataset_sink_mode) print("============== {} ==============".format(acc)) ``` + 其中, `model.eval`为模型验证接口,对应接口说明:。 > 推理样例代码:。 1.2 使用MindSpore Hub从华为云加载模型 - + 首先构建模型,然后使用`mindspore_hub.load`从云端加载模型参数,传入验证数据集后即可进行推理,验证数据集的处理方式与训练数据集相同。 + ```python model_uid = "mindspore/ascend/0.7/googlenet_v1_cifar10" # using GoogleNet as an example. network = mindspore_hub.load(model_uid, num_classes=10) @@ -53,13 +56,16 @@ 1) acc = model.eval(dataset, dataset_sink_mode=args.dataset_sink_mode) print("============== {} ==============".format(acc)) - ``` + ``` + 其中, `mindspore_hub.load`为加载模型参数接口,对应接口说明:。 2. 使用`model.predict`接口来进行推理操作。 + ```python model.predict(input_data) ``` + 其中, - `model.predict`为推理接口,对应接口说明:。 \ No newline at end of file + `model.predict`为推理接口,对应接口说明:。 diff --git a/tutorials/inference/source_zh_cn/multi_platform_inference_cpu.md b/tutorials/inference/source_zh_cn/multi_platform_inference_cpu.md index 676ec679bd..82d7141468 100644 --- a/tutorials/inference/source_zh_cn/multi_platform_inference_cpu.md +++ b/tutorials/inference/source_zh_cn/multi_platform_inference_cpu.md @@ -13,9 +13,11 @@ ## 使用checkpoint格式文件推理 + 与在Ascend 910 AI处理器上推理一样。 ## 使用ONNX格式文件推理 + 与在GPU上进行推理类似,需要以下几个步骤: 1. 在训练平台上生成ONNX格式模型,具体步骤请参考[导出ONNX格式文件](https://www.mindspore.cn/tutorial/training/zh-CN/master/use/save_model.html#onnx)。 diff --git a/tutorials/inference/source_zh_cn/multi_platform_inference_gpu.md b/tutorials/inference/source_zh_cn/multi_platform_inference_gpu.md index abd1173cf5..ea96a12c1c 100644 --- a/tutorials/inference/source_zh_cn/multi_platform_inference_gpu.md +++ b/tutorials/inference/source_zh_cn/multi_platform_inference_gpu.md @@ -20,4 +20,4 @@ 1. 在训练平台上生成ONNX格式模型,具体步骤请参考[导出ONNX格式文件](https://www.mindspore.cn/tutorial/training/zh-CN/master/use/save_model.html#onnx)。 -2. 在GPU上进行推理,具体可以参考推理使用runtime/SDK的文档。如在Nvidia GPU上进行推理,使用常用的TensorRT,可参考[TensorRT backend for ONNX](https://github.com/onnx/onnx-tensorrt)。 \ No newline at end of file +2. 在GPU上进行推理,具体可以参考推理使用runtime/SDK的文档。如在Nvidia GPU上进行推理,使用常用的TensorRT,可参考[TensorRT backend for ONNX](https://github.com/onnx/onnx-tensorrt)。 diff --git a/tutorials/inference/source_zh_cn/serving.md b/tutorials/inference/source_zh_cn/serving.md index 4f7f3ba689..9288da7d9c 100644 --- a/tutorials/inference/source_zh_cn/serving.md +++ b/tutorials/inference/source_zh_cn/serving.md @@ -18,18 +18,20 @@ - ## 概述 MindSpore Serving是一个轻量级、高性能的服务模块,旨在帮助MindSpore开发者在生产环境中高效部署在线推理服务。当用户使用MindSpore完成模型训练后,导出MindSpore模型,即可使用MindSpore Serving创建该模型的推理服务。当前Serving仅支持Ascend 910。 ## 启动Serving服务 + 通过pip安装MindSpore后,Serving可执行程序位于`/{your python path}/lib/python3.7/site-packages/mindspore/ms_serving`。 启动Serving服务命令如下 -```bash -ms_serving [--help] [--model_path=] [--model_name=] [--port=] + +```bash +ms_serving [--help] [--model_path=] [--model_name=] [--port=] [--rest_api_port=] [--device_id=] ``` + 参数含义如下 |参数名|属性|功能描述|参数类型|默认值|取值范围| @@ -45,21 +47,24 @@ ms_serving [--help] [--model_path=] [--model_name=] [--p > port与rest_api_port不可相同。 ## 应用示例 + 下面以一个简单的网络为例,演示MindSpore Serving如何使用。 ### 导出模型 + > 导出模型之前,需要配置MindSpore[基础环境](https://www.mindspore.cn/install)。 使用[add_model.py](https://gitee.com/mindspore/mindspore/blob/master/serving/example/export_model/add_model.py),构造一个只有Add算子的网络,并导出MindSpore推理部署模型。 -```python +```python python add_model.py ``` 执行脚本,生成`tensor_add.mindir`文件,该模型的输入为两个shape为[2,2]的二维Tensor,输出结果是两个输入Tensor之和。 ### 启动Serving推理服务 -```bash + +```bash ms_serving --model_path={model directory} --model_name=tensor_add.mindir ``` @@ -67,15 +72,19 @@ ms_serving --model_path={model directory} --model_name=tensor_add.mindir 当服务端打印日志`MS Serving RESTful start, listening on 0.0.0.0:5501`时,表示Serving REST服务已加载推理模型完毕。 ### gRPC客户端示例 + #### Python客户端示例 + > 执行客户端前,需将`/{your python path}/lib/python3.7/site-packages/mindspore`对应的路径添加到环境变量PYTHONPATH中。 获取[ms_client.py](https://gitee.com/mindspore/mindspore/blob/master/serving/example/python_client/ms_client.py),启动Python客户端。 + ```bash python ms_client.py ``` 显示如下返回值说明Serving服务已正确执行Add网络的推理。 + ```bash ms client received: [[2. 2.] @@ -83,31 +92,37 @@ ms client received: ``` #### C++客户端示例 + 1. 获取客户端示例执行程序 首先需要下载[MindSpore源码](https://gitee.com/mindspore/mindspore)。有两种方式编译并获取客户端示例程序: - + 从源码编译MindSpore时候,将会编译产生Serving C++客户端示例程序,可在`build/mindspore/serving/example/cpp_client`目录下找到`ms_client`可执行程序。 - + 独立编译: + - 从源码编译MindSpore时候,将会编译产生Serving C++客户端示例程序,可在`build/mindspore/serving/example/cpp_client`目录下找到`ms_client`可执行程序。 + - 独立编译: 需要先预装[gRPC](https://gRPC.io)。 然后,在MindSpore源码路径中执行如下命令,编译一个客户端示例程序。 + ```bash cd mindspore/serving/example/cpp_client mkdir build && cd build cmake -D GRPC_PATH={grpc_install_dir} .. make ``` + 其中`{grpc_install_dir}`为gRPC安装时的路径,请替换为实际gRPC安装路径。 2. 启动gRPC客户端 执行ms_client,向Serving服务发送推理请求: + ```bash ./ms_client --target=localhost:5500 ``` + 显示如下返回值说明Serving服务已正确执行Add网络的推理。 - ``` + + ```text Compute [[1, 2], [3, 4]] + [[1, 2], [3, 4]] Add result is 2 4 6 8 client received: RPC OK @@ -116,75 +131,84 @@ ms client received: 客户端代码主要包含以下几个部分: 1. 基于MSService::Stub实现Client,并创建Client实例。 - ``` + + ```cpp class MSClient { public: explicit MSClient(std::shared_ptr channel) : stub_(MSService::NewStub(channel)) {} private: std::unique_ptr stub_; }; - + MSClient client(grpc::CreateChannel(target_str, grpc::InsecureChannelCredentials())); - + ``` + 2. 根据网络的实际输入构造请求的入参Request、出参Reply和gRPC的客户端Context。 - ``` + + ```cpp PredictRequest request; PredictReply reply; ClientContext context; - + //construct tensor Tensor data; - + //set shape TensorShape shape; shape.add_dims(2); shape.add_dims(2); *data.mutable_tensor_shape() = shape; - + //set type data.set_tensor_type(ms_serving::MS_FLOAT32); std::vector input_data{1, 2, 3, 4}; - + //set datas data.set_data(input_data.data(), input_data.size()); - + //add tensor to request *request.add_data() = data; *request.add_data() = data; ``` + 3. 调用gRPC接口和已经启动的Serving服务通信,并取回返回值。 ```Status status = stub_->Predict(&context, request, &reply);``` -完整代码参考[ms_client](https://gitee.com/mindspore/mindspore/blob/master/serving/example/cpp_client/ms_client.cc)。 +完整代码参考[ms_client](https://gitee.com/mindspore/mindspore/blob/master/serving/example/cpp_client/ms_client.cc)。 ### REST API客户端示例 + 1. `data`形式发送数据: data字段:将网络模型每个输入数据展平成一维数据,假设网络模型有n个输入,最后data数据结构为1*n的二维list。 - + 如本例中,将模型输入数据`[[1.0, 2.0], [3.0, 4.0]]`和`[[1.0, 2.0], [3.0, 4.0]]`展平后组合成data形式的数据`[[1.0, 2.0, 3.0, 4.0], [1.0, 2.0, 3.0, 4.0]]` - - ``` + + ```bash curl -X POST -d '{"data": [[1.0, 2.0, 3.0, 4.0], [1.0, 2.0, 3.0, 4.0]]}' http://127.0.0.1:5501 ``` - + 显示如下返回值,说明Serving服务已正确执行Add网络的推理,输出数据结构同输入类似: - ``` + + ```text {"data":[[2.0,4.0,6.0,8.0]]} ``` 2. `tensor`形式发送数据: tensor字段:由网络模型每个输入组合而成,保持输入的原始shape。 - + 如本例中,将模型输入数据`[[1.0, 2.0], [3.0, 4.0]]`和`[[1.0, 2.0], [3.0, 4.0]]`组合成tensor形式的数据`[[[1.0, 2.0], [3.0, 4.0]], [[1.0, 2.0], [3.0, 4.0]]]` - ``` + + ```bash curl -X POST -d '{"tensor": [[[1.0, 2.0], [3.0, 4.0]], [[1.0, 2.0], [3.0, 4.0]]]}' http://127.0.0.1:5501 ``` + 显示如下返回值,说明Serving服务已正确执行Add网络的推理,输出数据结构同输入类似: - ``` + + ```text {"tensor":[[2.0,4.0], [6.0,8.0]]} ``` - > REST API当前只支持int32和fp32数据输入。 + > REST API当前只支持int32和fp32数据输入。 diff --git a/tutorials/lite/source_en/quick_start/quick_start.md b/tutorials/lite/source_en/quick_start/quick_start.md index 5af499aa7a..1d3dd029c0 100644 --- a/tutorials/lite/source_en/quick_start/quick_start.md +++ b/tutorials/lite/source_en/quick_start/quick_start.md @@ -22,26 +22,27 @@ ## Overview It is recommended that you start from the image classification demo on the Android device to understand how to build the MindSpore Lite application project, configure dependencies, and use related APIs. - + This tutorial demonstrates the on-device deployment process based on the image classification sample program on the Android device provided by the MindSpore team. 1. Select an image classification model. 2. Convert the model into a MindSpore Lite model. 3. Use the MindSpore Lite inference model on the device. The following describes how to use the MindSpore Lite C++ APIs (Android JNIs) and MindSpore Lite image classification models to perform on-device inference, classify the content captured by a device camera, and display the most possible classification result on the application's image preview screen. - + > Click to find [Android image classification models](https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite) and [sample code](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/lite/image_classification). ## Selecting a Model The MindSpore team provides a series of preset device models that you can use in your application. Click [here](https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite/mobilenetv2.ms) to download image classification models in MindSpore ModelZoo. -In addition, you can use the preset model to perform migration learning to implement your image classification tasks. +In addition, you can use the preset model to perform migration learning to implement your image classification tasks. ## Converting a Model After you retrain a model provided by MindSpore, export the model in the [.mindir format](https://www.mindspore.cn/tutorial/training/en/master/use/save_model.html#export-mindir-model). Use the MindSpore Lite [model conversion tool](https://www.mindspore.cn/tutorial/lite/en/master/use/converter_tool.html) to convert the .mindir model to a .ms model. Take the mobilenetv2 model as an example. Execute the following script to convert a model into a MindSpore Lite model for on-device inference. + ```bash ./converter_lite --fmk=MINDIR --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2.ms ``` @@ -60,7 +61,7 @@ The following section describes how to build and execute an on-device image clas ### Building and Running -1. Load the sample source code to Android Studio and install the corresponding SDK. (After the SDK version is specified, Android Studio automatically installs the SDK.) +1. Load the sample source code to Android Studio and install the corresponding SDK. (After the SDK version is specified, Android Studio automatically installs the SDK.) ![start_home](../images/lite_quick_start_home.png) @@ -86,7 +87,6 @@ The following section describes how to build and execute an on-device image clas ![result](../images/lite_quick_start_app_result.png) - ## Detailed Description of the Sample Program This image classification sample program on the Android device includes a Java layer and a JNI layer. At the Java layer, the Android Camera 2 API is used to enable a camera to obtain image frames and process images. At the JNI layer, the model inference process is completed in [Runtime](https://www.mindspore.cn/tutorial/lite/en/master/use/runtime.html). @@ -95,7 +95,7 @@ This image classification sample program on the Android device includes a Java l ### Sample Program Structure -``` +```text app │ ├── src/main @@ -109,12 +109,12 @@ app │ | └── MindSporeNetnative.h # header file │ | │ ├── java # application code at the Java layer -│ │ └── com.mindspore.himindsporedemo +│ │ └── com.mindspore.himindsporedemo │ │ ├── gallery.classify # implementation related to image processing and MindSpore JNI calling │ │ │ └── ... │ │ └── widget # implementation related to camera enabling and drawing │ │ └── ... -│ │ +│ │ │ ├── res # resource files related to Android │ └── AndroidManifest.xml # Android configuration file │ @@ -135,7 +135,7 @@ Note: if the automatic download fails, please manually download the relevant lib mindspore-lite-1.0.0-minddata-arm64-cpu.tar.gz [Download link](https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.0.0/lite/android_aarch64/mindspore-lite-1.0.0-minddata-arm64-cpu.tar.gz) -``` +```text android{ defaultConfig{ externalNativeBuild{ @@ -144,7 +144,7 @@ android{ } } - ndk{ + ndk{ abiFilters'armeabi-v7a', 'arm64-v8a' } } @@ -153,7 +153,7 @@ android{ Create a link to the `.so` library file in the `app/CMakeLists.txt` file: -``` +```text # ============== Set MindSpore Dependencies. ============= include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp) include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/third_party/flatbuffers/include) @@ -171,7 +171,7 @@ set_target_properties(minddata-lite PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/lib/libminddata-lite.so) # --------------- MindSpore Lite set End. -------------------- -# Link target library. +# Link target library. target_link_libraries( ... # --- mindspore --- @@ -193,34 +193,37 @@ mobilenetv2.ms [mobilenetv2.ms]( https://download.mindspore.cn/model_zoo/officia Call MindSpore Lite C++ APIs at the JNI layer to implement on-device inference. -The inference code process is as follows. For details about the complete code, see `src/cpp/MindSporeNetnative.cpp`. +The inference code process is as follows. For details about the complete code, see `src/cpp/MindSporeNetnative.cpp`. 1. Load the MindSpore Lite model file and build the context, session, and computational graph for inference. - Load a model file. Create and configure the context for model inference. + ```cpp // Buffer is the model data passed in by the Java layer jlong bufferLen = env->GetDirectBufferCapacity(buffer); char *modelBuffer = CreateLocalModelBuffer(env, buffer); ``` - + - Create a session. + ```cpp void **labelEnv = new void *; MSNetWork *labelNet = new MSNetWork; *labelEnv = labelNet; - + // Create context. mindspore::lite::Context *context = new mindspore::lite::Context; context->thread_num_ = num_thread; - + // Create the mindspore session. labelNet->CreateSessionMS(modelBuffer, bufferLen, "device label", context); delete(context); - + ``` - + - Load the model file and build a computational graph for inference. + ```cpp void MSNetWork::CreateSessionMS(char* modelBuffer, size_t bufferLen, std::string name, mindspore::lite::Context* ctx) { @@ -230,8 +233,8 @@ The inference code process is as follows. For details about the complete code, s int ret = session->CompileGraph(model); } ``` - -2. Convert the input image into the Tensor format of the MindSpore model. + +2. Convert the input image into the Tensor format of the MindSpore model. Convert the image data to be detected into the Tensor format of the MindSpore model. @@ -241,7 +244,7 @@ The inference code process is as follows. For details about the complete code, s // Processing such as zooming the picture size. matImgPreprocessed = PreProcessImageData(matImageSrc); - ImgDims inputDims; + ImgDims inputDims; inputDims.channel = matImgPreprocessed.channels(); inputDims.width = matImgPreprocessed.cols; inputDims.height = matImgPreprocessed.rows; @@ -261,7 +264,7 @@ The inference code process is as follows. For details about the complete code, s inputDims.channel * inputDims.width * inputDims.height * sizeof(float)); delete[] (dataHWC); ``` - + 3. Preprocessing the input data. ```cpp @@ -293,7 +296,7 @@ The inference code process is as follows. For details about the complete code, s } ``` -4. Perform inference on the input tensor based on the model, obtain the output tensor, and perform post-processing. +4. Perform inference on the input tensor based on the model, obtain the output tensor, and perform post-processing. - Perform graph execution and on-device inference. @@ -303,6 +306,7 @@ The inference code process is as follows. For details about the complete code, s ``` - Obtain the output data. + ```cpp auto names = mSession->GetOutputTensorNames(); std::unordered_map msOutputs; @@ -312,22 +316,23 @@ The inference code process is as follows. For details about the complete code, s } std::string retStr = ProcessRunnetResult(msOutputs, ret); ``` - + - Perform post-processing of the output data. + ```cpp std::string ProcessRunnetResult(std::unordered_map msOutputs, int runnetRet) { - + std::unordered_map::iterator iter; iter = msOutputs.begin(); - + // The mobilenetv2.ms model output just one branch. auto outputTensor = iter->second; int tensorNum = outputTensor->ElementsNum(); - + // Get a pointer to the first score. float *temp_scores = static_cast(outputTensor->MutableData()); - + float scores[RET_CATEGORY_SUM]; for (int i = 0; i < RET_CATEGORY_SUM; ++i) { if (temp_scores[i] > 0.5) { @@ -335,7 +340,7 @@ The inference code process is as follows. For details about the complete code, s } scores[i] = temp_scores[i]; } - + // Score for each category. // Converted to text information that needs to be displayed in the APP. std::string categoryScore = ""; @@ -347,5 +352,5 @@ The inference code process is as follows. For details about the complete code, s categoryScore += ";"; } return categoryScore; - } - ``` \ No newline at end of file + } + ``` diff --git a/tutorials/lite/source_en/use/benchmark_tool.md b/tutorials/lite/source_en/use/benchmark_tool.md index 5bf91d33c6..60f8b6a5d8 100644 --- a/tutorials/lite/source_en/use/benchmark_tool.md +++ b/tutorials/lite/source_en/use/benchmark_tool.md @@ -40,7 +40,7 @@ The main test indicator of the performance test performed by the Benchmark tool This command uses a random input, and other parameters use default values. After this command is executed, the following statistics are displayed. The statistics include the minimum duration, maximum duration, and average duration of a single inference after the tested model runs for the specified number of inference rounds. -``` +```text Model = test_benchmark.ms, numThreads = 2, MinRunTime = 72.228996 ms, MaxRuntime = 73.094002 ms, AvgRunTime = 72.556000 ms ``` @@ -50,7 +50,7 @@ Model = test_benchmark.ms, numThreads = 2, MinRunTime = 72.228996 ms, MaxRuntime This command uses a random input, sets the parameter `timeProfiling` as true, and other parameters use default values. After this command is executed, the statistics on the running time of the model at the network layer will be displayed as follows. In this case, the statistics are displayed by`opName` and `optype`. `opName` indicates the operator name, `optype` indicates the operator type, and `avg` indicates the average running time of the operator per single run, `percent` indicates the ratio of the operator running time to the total operator running time, `calledTimess` indicates the number of times that the operator is run, and `opTotalTime` indicates the total time that the operator is run for a specified number of times. Finally, `total time` and `kernel cost` show the average time consumed by a single inference operation of the model and the sum of the average time consumed by all operators in the model inference, respectively. -``` +```text ----------------------------------------------------------------------------------------- opName avg(ms) percent calledTimess opTotalTime conv2d_1/convolution 2.264800 0.824012 10 22.648003 @@ -98,7 +98,7 @@ The accuracy test performed by the Benchmark tool is to verify the accuracy of t This command specifies the input data and benchmark data of the tested model, specifies that the model inference program runs on the CPU, and sets the accuracy threshold to 3%. After this command is executed, the following statistics are displayed, including the single input data of the tested model, output result and average deviation rate of the output node, and average deviation rate of all nodes. -``` +```text InData0: 139.947 182.373 153.705 138.945 108.032 164.703 111.585 227.402 245.734 97.7776 201.89 134.868 144.851 236.027 18.1142 22.218 5.15569 212.318 198.43 221.853 ================ Comparing Output data ================ Data of node age_out : 5.94584e-08 6.3317e-08 1.94726e-07 1.91809e-07 8.39805e-08 7.66035e-08 1.69285e-07 1.46246e-07 6.03796e-07 1.77631e-07 1.54343e-07 2.04623e-07 8.89609e-07 3.63487e-06 4.86876e-06 1.23939e-05 3.09981e-05 3.37098e-05 0.000107102 0.000213932 0.000533579 0.00062465 0.00296401 0.00993984 0.038227 0.0695085 0.162854 0.123199 0.24272 0.135048 0.169159 0.0221256 0.013892 0.00502971 0.00134921 0.00135701 0.000383242 0.000163475 0.000136294 9.77864e-05 8.00793e-05 5.73874e-05 3.53858e-05 2.18535e-05 2.04467e-05 1.85286e-05 1.05075e-05 9.34751e-06 6.12732e-06 4.55476e-06 @@ -108,6 +108,7 @@ Mean bias of all nodes: 0% ``` To set specified input shapes(such as 1,32,32,1), use command as follows: + ```bash ./benchmark --modelFile=./models/test_benchmark.ms --inDataFile=./input/test_benchmark.bin --inputShapes=1,32,32,1 --device=CPU --accuracyThreshold=3 --benchmarkDataFile=./output/test_benchmark.out ``` @@ -118,11 +119,11 @@ The command used for benchmark testing based on the compiled Benchmark tool is a ```bash ./benchmark [--modelFile=] [--accuracyThreshold=] - [--benchmarkDataFile=] [--benchmarkDataType=] - [--cpuBindMode=] [--device=] [--help] - [--inDataFile=] [--loopCount=] - [--numThreads=] [--warmUpLoopCount=] - [--enableFp16=] [--timeProfiling=] + [--benchmarkDataFile=] [--benchmarkDataType=] + [--cpuBindMode=] [--device=] [--help] + [--inDataFile=] [--loopCount=] + [--numThreads=] [--warmUpLoopCount=] + [--enableFp16=] [--timeProfiling=] [--inputShapes=] ``` diff --git a/tutorials/lite/source_en/use/build.md b/tutorials/lite/source_en/use/build.md index 74b3d08a1b..b429ae3052 100644 --- a/tutorials/lite/source_en/use/build.md +++ b/tutorials/lite/source_en/use/build.md @@ -32,33 +32,33 @@ This chapter introduces how to quickly compile MindSpore Lite, which includes th - The compilation environment supports Linux x86_64 only. Ubuntu 18.04.02 LTS is recommended. - Compilation dependencies of runtime(cpp), benchmark: - - [CMake](https://cmake.org/download/) >= 3.14.1 - - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 - - [Android_NDK r20b](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) - - [Git](https://git-scm.com/downloads) >= 2.28.0 + - [CMake](https://cmake.org/download/) >= 3.14.1 + - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 + - [Android_NDK r20b](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) + - [Git](https://git-scm.com/downloads) >= 2.28.0 - Compilation dependencies of converter: - - [CMake](https://cmake.org/download/) >= 3.14.1 - - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 - - [Android_NDK r20b](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) - - [Git](https://git-scm.com/downloads) >= 2.28.0 - - [Autoconf](http://ftp.gnu.org/gnu/autoconf/) >= 2.69 - - [Libtool](https://www.gnu.org/software/libtool/) >= 2.4.6 - - [LibreSSL](http://www.libressl.org/) >= 3.1.3 - - [Automake](https://www.gnu.org/software/automake/) >= 1.11.6 - - [Libevent](https://libevent.org) >= 2.0 - - [M4](https://www.gnu.org/software/m4/m4.html) >= 1.4.18 - - [OpenSSL](https://www.openssl.org/) >= 1.1.1 - - [Python](https://www.python.org/) >= 3.7.5 + - [CMake](https://cmake.org/download/) >= 3.14.1 + - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 + - [Android_NDK r20b](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) + - [Git](https://git-scm.com/downloads) >= 2.28.0 + - [Autoconf](http://ftp.gnu.org/gnu/autoconf/) >= 2.69 + - [Libtool](https://www.gnu.org/software/libtool/) >= 2.4.6 + - [LibreSSL](http://www.libressl.org/) >= 3.1.3 + - [Automake](https://www.gnu.org/software/automake/) >= 1.11.6 + - [Libevent](https://libevent.org) >= 2.0 + - [M4](https://www.gnu.org/software/m4/m4.html) >= 1.4.18 + - [OpenSSL](https://www.openssl.org/) >= 1.1.1 + - [Python](https://www.python.org/) >= 3.7.5 - Compilation dependencies of runtime(java) - - [CMake](https://cmake.org/download/) >= 3.14.1 - - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 - - [Android_NDK](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) >= r20 - - [Git](https://git-scm.com/downloads) >= 2.28.0 - - [Android_SDK](https://developer.android.com/studio/releases/platform-tools?hl=zh-cn#downloads) >= 30 - - [Gradle](https://gradle.org/releases/) >= 6.6.1 - - [JDK](https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html) >= 1.8 + - [CMake](https://cmake.org/download/) >= 3.14.1 + - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 + - [Android_NDK](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) >= r20 + - [Git](https://git-scm.com/downloads) >= 2.28.0 + - [Android_SDK](https://developer.android.com/studio/releases/platform-tools?hl=zh-cn#downloads) >= 30 + - [Gradle](https://gradle.org/releases/) >= 6.6.1 + - [JDK](https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html) >= 1.8 > - To install and use `Android_NDK`, you need to configure environment variables. The command example is `export ANDROID_NDK={$NDK_PATH}/android-ndk-r20b`. > - Android SDK Tools need install Android SDK Build Tools. @@ -95,30 +95,37 @@ git clone https://gitee.com/mindspore/mindspore.git Then, run the following commands in the root directory of the source code to compile MindSpore Lite of different versions: - Debug version of the x86_64 architecture: + ```bash bash build.sh -I x86_64 -d ``` - Release version of the x86_64 architecture, with the number of threads set: + ```bash bash build.sh -I x86_64 -j32 ``` - Release version of the Arm 64-bit architecture in incremental compilation mode, with the number of threads set: + ```bash bash build.sh -I arm64 -i -j32 ``` - Release version of the Arm 64-bit architecture in incremental compilation mode, with the built-in GPU operator compiled: + ```bash bash build.sh -I arm64 -e gpu ``` - Compile ARM64 with image preprocessing module: + ```bash bash build.sh -I arm64 -n lite_cv ``` + - Compile MindSpore Lite AAR in incremental compilation mode: + ```bash bash build.sh -A java -i ``` @@ -128,6 +135,7 @@ Then, run the following commands in the root directory of the source code to com ### Output Description After the compilation is complete, go to the `mindspore/output` directory of the source code to view the file generated after compilation. The file is divided into three parts. + - `mindspore-lite-{version}-converter-{os}.tar.gz`: Contains model conversion tool. - `mindspore-lite-{version}-runtime-{os}-{device}.tar.gz`: Contains model inference framework, benchmarking tool and performance analysis tool. - `mindspore-lite-{version}-minddata-{os}-{device}.tar.gz`: Contains image processing library ImageProcess. @@ -146,13 +154,14 @@ tar -xvf mindspore-lite-{version}-runtime-{os}-{device}.tar.gz tar -xvf mindspore-lite-{version}-minddata-{os}-{device}.tar.gz unzip mindspore-lite-maven-{version}.zip ``` + #### Description of Converter's Directory Structure The conversion tool is only available under the `-I x86_64` compilation option, and the content includes the following parts: -``` +```text | -├── mindspore-lite-{version}-converter-{os} +├── mindspore-lite-{version}-converter-{os} │ └── converter # Model conversion Ttool │ └── lib # The dynamic link library that converter depends │ └── third_party # Header files and libraries of third party libraries @@ -164,9 +173,10 @@ The conversion tool is only available under the `-I x86_64` compilation option, The inference framework can be obtained under `-I x86_64`, `-I arm64` and `-I arm32` compilation options, and the content includes the following parts: - When the compilation option is `-I x86_64`: - ``` + + ```text | - ├── mindspore-lite-{version}-runtime-x86-cpu + ├── mindspore-lite-{version}-runtime-x86-cpu │ └── benchmark # Benchmarking Tool │ └── lib # Inference framework dynamic library │ ├── libmindspore-lite.so # Dynamic library of infernece framework in MindSpore Lite @@ -176,7 +186,8 @@ The inference framework can be obtained under `-I x86_64`, `-I arm64` and `-I ar ``` - When the compilation option is `-I arm64`: - ``` + + ```text | ├── mindspore-lite-{version}-runtime-arm64-cpu │ └── benchmark # Benchmarking Tool @@ -190,7 +201,8 @@ The inference framework can be obtained under `-I x86_64`, `-I arm64` and `-I ar ``` - When the compilation option is `-I arm32`: - ``` + + ```text | ├── mindspore-lite-{version}-runtime-arm32-cpu │ └── benchmark # Benchmarking Tool @@ -220,24 +232,23 @@ export LD_LIBRARY_PATH= ./output/mindspore-lite-{version}-runtime-x86-cpu/lib:${ - When the compilation option is `-A java`: - ``` + ```text | ├── mindspore-lite-maven-{version} │ └── mindspore - │ └── mindspore-lite - | └── {version}-SNAPSHOT - │ ├── mindspore-lite-{version}-{timestamp}-{versionCode}.aar # MindSpore Lite runtime aar + │ └── mindspore-lite + | └── {version}-SNAPSHOT + │ ├── mindspore-lite-{version}-{timestamp}-{versionCode}.aar # MindSpore Lite runtime aar ``` - #### Description of Imageprocess's Directory Structure The image processing library is only available under the `-I arm64 -n lite_cv` compilation option, and the content includes the following parts: -``` +```text | ├── mindspore-lite-{version}-minddata-{os}-{device} -│ └── benchmark # Benchmarking Tool +│ └── benchmark # Benchmarking Tool │ └── include # Head file(Only show files related to image processing) │ ├── lite_cv # Image processing library header file │ ├── image_process.h # Image processing function header file diff --git a/tutorials/lite/source_en/use/converter_tool.md b/tutorials/lite/source_en/use/converter_tool.md index 388896527d..0d64d1e740 100644 --- a/tutorials/lite/source_en/use/converter_tool.md +++ b/tutorials/lite/source_en/use/converter_tool.md @@ -36,9 +36,11 @@ To use the MindSpore Lite model conversion tool, you need to prepare the environ ### Example First, in the root directory of the source code, run the following command to perform compilation. For details, see `compile.md`. + ```bash bash build.sh -I x86_64 ``` + > Currently, the model conversion tool supports only the x86_64 architecture. The following describes how to use the conversion command by using several common examples. @@ -52,42 +54,51 @@ The following describes how to use the conversion command by using several commo In this example, the Caffe model is used. Therefore, the model structure and model weight files are required. Two more parameters `fmk` and `outputFile` are also required. The output is as follows: - ``` + + ```text CONVERTER RESULT SUCCESS:0 ``` + This indicates that the Caffe model is successfully converted into the MindSpore Lite model and the new file `lenet.ms` is generated. - + - The following uses the MindSpore, TensorFlow Lite, ONNX and perception quantization models as examples to describe how to run the conversion command. - - MindSpore model `model.mindir` + - MindSpore model `model.mindir` + ```bash ./converter_lite --fmk=MINDIR --modelFile=model.mindir --outputFile=model ``` - - - TensorFlow Lite model `model.tflite` + + - TensorFlow Lite model `model.tflite` + ```bash ./converter_lite --fmk=TFLITE --modelFile=model.tflite --outputFile=model ``` - - - ONNX model `model.onnx` + + - ONNX model `model.onnx` + ```bash ./converter_lite --fmk=ONNX --modelFile=model.onnx --outputFile=model ``` - - TensorFlow Lite aware quantization model `model_quant.tflite` + - TensorFlow Lite aware quantization model `model_quant.tflite` + ```bash ./converter_lite --fmk=TFLITE --modelFile=model.tflite --outputFile=model --quantType=AwareTraining ``` - - - TensorFlow Lite aware quantization model `model_quant.tflite` set the input and output data type to be float + + - TensorFlow Lite aware quantization model `model_quant.tflite` set the input and output data type to be float + ```bash ./converter_lite --fmk=TFLITE --modelFile=model.tflite --outputFile=model --quantType=AwareTraining --inferenceType=FLOAT ``` In the preceding scenarios, the following information is displayed, indicating that the conversion is successful. In addition, the target file `model.ms` is obtained. - ``` + + ```text CONVERTER RESULT SUCCESS:0 ``` + - If fail to run the conversion command, an [errorcode](https://www.mindspore.cn/doc/api_cpp/en/master/errorcode_and_metatype.html) will be output. ### Parameter Description @@ -97,7 +108,6 @@ You can enter `./converter_lite --help` to obtain help information in real time. The following describes the parameters in detail. - | Parameter | Mandatory or Not | Parameter Description | Value Range | Default Value | | -------- | ------- | ----- | --- | ---- | | `--help` | No | Prints all help information. | - | - | @@ -106,7 +116,7 @@ The following describes the parameters in detail. | `--outputFile=` | Yes | Path of the output model. (If the path does not exist, a directory will be automatically created.) The suffix `.ms` can be automatically generated. | - | - | | `--weightFile=` | Yes (for Caffe models only) | Path of the weight file of the input model. | - | - | | `--quantType=` | No | Sets the quant type of the model. | PostTraining: quantization after training
AwareTraining: perceptual quantization
WeightQuant: only do weight quantization after training | - | -| `--inferenceType= `| No(supported by aware quant models only) | Sets the input and output data type of the converted model. If the types are different from the origin model, the convert tool will insert data type convert op in the inputs and outputs of the model to make sure the data types are same as origin model. | UINT8, FLOAT or INT8 | FLOAT | +| `--inferenceType=`| No(supported by aware quant models only) | Sets the input and output data type of the converted model. If the types are different from the origin model, the convert tool will insert data type convert op in the inputs and outputs of the model to make sure the data types are same as origin model. | UINT8, FLOAT or INT8 | FLOAT | | `--bitNum=` | No | Sets the quantization bitNum when quantType is set as WeightQuant,now only support 8 bits. | 8 | 8 | | `--quantWeightSize=` | No | Sets a size threshold of convolution filter when quantType is set as WeightQuant.If size is bigger than this value,it will trigger weight quantization | (0, +∞) | 0 | | `--quantWeightChannel=` | No | Sets a channel num threshold of convolution filter when quantType is set as WeightQuant.If num is bigger than this,it will trigger weight quantization | (0, +∞) | 16 | @@ -130,9 +140,11 @@ Reference description Linux environment model conversion tool [parameter descrip ### Example Set the log printing level to INFO. + ```bash set GLOG_v=1 ``` + > Log level: 0 is DEBUG, 1 is INFO, 2 is WARNING, 3 is ERROR. Several common examples are selected below to illustrate the use of conversion commands. @@ -146,35 +158,43 @@ Several common examples are selected below to illustrate the use of conversion c In this example, because the Caffe model is used, two input files of model structure and model weight are required. Then plus fmk type and output path two parameters which are required, you can successfully execute. The result is shown as: - ``` + + ```text CONVERTER RESULT SUCCESS:0 ``` + This means that the Caffe model has been successfully converted to the MindSpore Lite model and the new file `lenet.ms` has been obtained. - + - Take MindSpore, TensorFlow Lite, ONNX model format and perceptual quantization model as examples to execute conversion commands. - - MindSpore model `model.mindir` + - MindSpore model `model.mindir` + ```bash call converter_lite --fmk=MINDIR --modelFile=model.mindir --outputFile=model ``` - - - TensorFlow Lite model`model.tflite` + + - TensorFlow Lite model`model.tflite` + ```bash call converter_lite --fmk=TFLITE --modelFile=model.tflite --outputFile=model ``` - - - ONNX model`model.onnx` + + - ONNX model`model.onnx` + ```bash call converter_lite --fmk=ONNX --modelFile=model.onnx --outputFile=model ``` - - TensorFlow Lite awaring quant model `model_quant.tflite` + - TensorFlow Lite awaring quant model `model_quant.tflite` + ```bash call converter_lite --fmk=TFLITE --modelFile=model_quant.tflite --outputFile=model --quantType=AwareTraining ``` In the above cases, the following conversion success prompt is displayed, and the `model.ms` target file is obtained at the same time. - ``` + + ```text CONVERTER RESULT SUCCESS:0 - ``` + ``` + - If fail to run the conversion command, an [errorcode](https://www.mindspore.cn/doc/api_cpp/en/master/errorcode_and_metatype.html) will be output. diff --git a/tutorials/lite/source_en/use/image_processing.md b/tutorials/lite/source_en/use/image_processing.md index f893ad41b3..06780e3461 100644 --- a/tutorials/lite/source_en/use/image_processing.md +++ b/tutorials/lite/source_en/use/image_processing.md @@ -7,15 +7,15 @@ - [Import image preprocessing function library](#import-image-preprocessing-function-library) - [Initialize the image](#initialize-the-image) - [Usage example](#usage-example) - - [Optional image preprocessing operator](#optional-image-preprocessing-operator) + - [Optional image preprocessing operator](#optional-image-preprocessing-operator) - [Resize image](#resize-image) - - [Usage example](#usage-example-1) + - [Usage example](#usage-example-1) - [Convert the image data type](#convert-the-image-data-type) - - [Usage example](#usage-example-2) + - [Usage example](#usage-example-2) - [Crop image data](#crop-image-data) - - [Usage example](#usage-example-3) + - [Usage example](#usage-example-3) - [Normalize image data](#normalize-image-data) - - [Usage example](#usage-example-4) + - [Usage example](#usage-example-4) @@ -29,7 +29,7 @@ The process is as follows: ## Import image preprocessing function library -``` +```cpp #include "lite_cv/lite_mat.h" #include "lite_cv/image_process.h" ``` @@ -38,13 +38,13 @@ The process is as follows: Here, the [InitFromPixel](https://www.mindspore.cn/doc/api_cpp/en/master/dataset.html#initfrompixel) function in the `image_process.h` file is used to initialize the image. -``` +```cpp bool InitFromPixel(const unsigned char *data, LPixelType pixel_type, LDataType data_type, int w, int h, LiteMat &m) ``` ### Usage example -``` +```cpp // Create the data object of the LiteMat object. LiteMat lite_mat_bgr; @@ -61,13 +61,13 @@ The image processing operators here can be used in any combination according to Here we use the [ResizeBilinear](https://www.mindspore.cn/doc/api_cpp/en/master/dataset.html#resizebilinear) function in `image_process.h` to resize the image through a bilinear algorithm. Currently, the supported data type is unit8, the supported channels are 3 and 1. -``` +```cpp bool ResizeBilinear(const LiteMat &src, LiteMat &dst, int dst_w, int dst_h) ``` #### Usage example -``` +```cpp // Initialize the image data. LiteMat lite_mat_bgr; InitFromPixel(rgba_mat.data, LPixelType::RGBA2BGR, LDataType::UINT8, rgba_mat.cols, rgba_mat.rows, lite_mat_bgr); @@ -83,13 +83,13 @@ ResizeBilinear(lite_mat_bgr, lite_mat_resize, 256, 256); Here we use the [ConvertTo](https://www.mindspore.cn/doc/api_cpp/en/master/dataset.html#convertto) function in `image_process.h` to convert the image data type. Currently, the supported conversion is to convert uint8 to float. -``` +```cpp bool ConvertTo(const LiteMat &src, LiteMat &dst, double scale = 1.0) ``` #### Usage example -``` +```cpp // Initialize the image data. LiteMat lite_mat_bgr; InitFromPixel(rgba_mat.data, LPixelType::RGBA2BGR, LDataType::UINT8, rgba_mat.cols, rgba_mat.rows, lite_mat_bgr); @@ -105,13 +105,13 @@ ConvertTo(lite_mat_bgr, lite_mat_convert_float); Here we use the [Crop](https://www.mindspore.cn/doc/api_cpp/en/master/dataset.html#crop) function in `image_process.h` to crop the image. Currently, channels 3 and 1 are supported. -``` +```cpp bool Crop(const LiteMat &src, LiteMat &dst, int x, int y, int w, int h) ``` #### Usage example -``` +```cpp // Initialize the image data. LiteMat lite_mat_bgr; InitFromPixel(rgba_mat.data, LPixelType::RGBA2BGR, LDataType::UINT8, rgba_mat.cols, rgba_mat.rows, lite_mat_bgr); @@ -127,13 +127,13 @@ Crop(lite_mat_bgr, lite_mat_cut, 16, 16, 224, 224); In order to eliminate the dimensional influence among the data indicators, and solve the comparability problem among the data indicators through standardization processing, here is the use of the [SubStractMeanNormalize](https://www.mindspore.cn/doc/api_cpp/en/master/dataset.html#substractmeannormalize) function in `image_process.h` to normalize the image data. -``` +```cpp bool SubStractMeanNormalize(const LiteMat &src, LiteMat &dst, const std::vector &mean, const std::vector &std) ``` #### Usage example -``` +```cpp // Initialize the image data. LiteMat lite_mat_bgr; InitFromPixel(rgba_mat.data, LPixelType::RGBA2BGR, LDataType::UINT8, rgba_mat.cols, rgba_mat.rows, lite_mat_bgr); @@ -148,4 +148,4 @@ LiteMat lite_mat_bgr_norm; // The image data is normalized by the mean value and variance of the image data. SubStractMeanNormalize(lite_mat_bgr, lite_mat_bgr_norm, means, stds); -``` \ No newline at end of file +``` diff --git a/tutorials/lite/source_en/use/post_training_quantization.md b/tutorials/lite/source_en/use/post_training_quantization.md index d5cb08563b..544255096c 100644 --- a/tutorials/lite/source_en/use/post_training_quantization.md +++ b/tutorials/lite/source_en/use/post_training_quantization.md @@ -1,3 +1,3 @@ -# Converting to the MindSpore Lite Model (Post Training Quantization) +# Converting to the MindSpore Lite Model (Post Training Quantization) -Post training quantization is being translated, will be released soon. \ No newline at end of file +Post training quantization is being translated, will be released soon. diff --git a/tutorials/lite/source_en/use/runtime_cpp.md b/tutorials/lite/source_en/use/runtime_cpp.md index f763ba52b2..6b91c732b6 100644 --- a/tutorials/lite/source_en/use/runtime_cpp.md +++ b/tutorials/lite/source_en/use/runtime_cpp.md @@ -35,7 +35,6 @@ - ## Overview @@ -47,6 +46,7 @@ The procedure for using Runtime is shown in the following figure: ![img](../images/side_infer_process.png) Its components and their functions are described as follows: + - `Model`: model used by MindSpore Lite, which instantiates the list of operator prototypes through image composition or direct network loading. - `Lite Session`: provides the graph compilation function and calls the graph executor for inference. - `Scheduler`: operator heterogeneous scheduler. It can select a proper kernel for each operator based on the heterogeneous scheduling policy, construct a kernel list, and split a graph into subgraphs. @@ -252,6 +252,7 @@ memcpy(in_data, input_buf, data_size); ``` Note: + - The data layout in the model input tensors of MindSpore Lite must be NHWC. - The model input `input_buf` is read from disks. After it is copied to model input tensors, you need to release `input_buf`. - Vectors returned by using the `GetInputs` and `GetInputsByTensorName` methods do not need to be released by users. @@ -299,6 +300,7 @@ session->BindThread(false); ### Callback Running MindSpore Lite can transfer two `KernelCallBack` function pointers to call back the inference model when calling `RunGraph`. Compared with common graph execution, callback running can obtain extra information during the running process to help developers analyze performance and fix bugs. The extra information includes: + - Name of the running node - Input and output tensors before inference of the current node - Input and output tensors after inference of the current node @@ -380,6 +382,7 @@ delete (model); After performing inference, MindSpore Lite can obtain the model inference result. MindSpore Lite provides the following methods to obtain the model output `MSTensor`. + 1. Use the `GetOutputsByNodeName` method to obtain vectors of the model output `MSTensor` that is connected to the model output node based on the node name. ```cpp @@ -515,11 +518,13 @@ std::string version = mindspore::lite::Version(); ``` ## Session parallel launch + MindSpore Lite supports multiple `LiteSession` parallel inferences, but does not support multiple threads calling the `RunGraph` interface of a single `LiteSession` at the same time. ### Single Session parallel launch MindSpore Lite does not support multi-threaded parallel calling of the inference interface of a single `LiteSession`, otherwise we will get the following error message: + ```cpp ERROR [mindspore/lite/src/lite_session.cc:297] RunGraph] 10 Not support multi-threading ``` @@ -531,6 +536,7 @@ MindSpore Lite supports multiple `LiteSession` in doing inference in parallel. T ### Example The following code shows how to create multiple `LiteSession` and do inference in parallel: + ```cpp #include #include "src/common/file_utils.h" diff --git a/tutorials/lite/source_zh_cn/quick_start/quick_start.md b/tutorials/lite/source_zh_cn/quick_start/quick_start.md index 2a8050f6ab..15deccdde6 100644 --- a/tutorials/lite/source_zh_cn/quick_start/quick_start.md +++ b/tutorials/lite/source_zh_cn/quick_start/quick_start.md @@ -22,12 +22,13 @@ ## 概述 我们推荐你从端侧Android图像分类demo入手,了解MindSpore Lite应用工程的构建、依赖项配置以及相关API的使用。 - + 本教程基于MindSpore团队提供的Android“端侧图像分类”示例程序,演示了端侧部署的流程。 + 1. 选择图像分类模型。 2. 将模型转换成MindSpore Lite模型格式。 3. 在端侧使用MindSpore Lite推理模型。详细说明如何在端侧利用MindSpore Lite C++ API(Android JNI)和MindSpore Lite图像分类模型完成端侧推理,实现对设备摄像头捕获的内容进行分类,并在APP图像预览界面中,显示出最可能的分类结果。 - + > 你可以在这里找到[Android图像分类模型](https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite)和[示例代码](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/lite/image_classification)。 ## 选择模型 @@ -41,6 +42,7 @@ MindSpore Model Zoo中图像分类模型可[在此下载](https://download.minds 如果预置模型已经满足你要求,请跳过本章节。 如果你需要对MindSpore提供的模型进行重训,重训完成后,需要将模型导出为[.mindir格式](https://www.mindspore.cn/tutorial/training/zh-CN/master/use/save_model.html#mindir)。然后使用MindSpore Lite[模型转换工具](https://www.mindspore.cn/tutorial/lite/zh-CN/master/use/converter_tool.html)将.mindir模型转换成.ms格式。 以mobilenetv2模型为例,如下脚本将其转换为MindSpore Lite模型用于端侧推理。 + ```bash ./converter_lite --fmk=MINDIR --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2.ms ``` @@ -59,7 +61,7 @@ MindSpore Model Zoo中图像分类模型可[在此下载](https://download.minds ### 构建与运行 -1. 在Android Studio中加载本示例源码,并安装相应的SDK(指定SDK版本后,由Android Studio自动安装)。 +1. 在Android Studio中加载本示例源码,并安装相应的SDK(指定SDK版本后,由Android Studio自动安装)。 ![start_home](../images/lite_quick_start_home.png) @@ -85,13 +87,10 @@ MindSpore Model Zoo中图像分类模型可[在此下载](https://download.minds ![install](../images/lite_quick_start_install.png) - - 识别结果如下图所示。 ![result](../images/lite_quick_start_app_result.png) - ## 示例程序详细说明 本端侧图像分类Android示例程序分为JAVA层和JNI层,其中,JAVA层主要通过Android Camera 2 API实现摄像头获取图像帧,以及相应的图像处理等功能;JNI层在[Runtime](https://www.mindspore.cn/tutorial/lite/zh-CN/master/use/runtime.html)中完成模型推理的过程。 @@ -100,7 +99,7 @@ MindSpore Model Zoo中图像分类模型可[在此下载](https://download.minds ### 示例程序结构 -``` +```text app ├── src/main │ ├── assets # 资源文件 @@ -119,7 +118,7 @@ app │ │ │ └── ... │ │ └── widget # 开启摄像头及绘制相关实现 │ │ └── ... -│ │ +│ │ │ ├── res # 存放Android相关的资源文件 │ └── AndroidManifest.xml # Android配置文件 │ @@ -146,7 +145,7 @@ Android JNI层调用MindSpore C++ API时,需要相关库文件支持。可通 mindspore-lite-1.0.0-minddata-arm64-cpu.tar.gz [下载链接](https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.0.0/lite/android_aarch64/mindspore-lite-1.0.0-minddata-arm64-cpu.tar.gz) -``` +```text android{ defaultConfig{ externalNativeBuild{ @@ -155,7 +154,7 @@ android{ } } - ndk{ + ndk{ abiFilters'armeabi-v7a', 'arm64-v8a' } } @@ -164,7 +163,7 @@ android{ 在`app/CMakeLists.txt`文件中建立`.so`库文件链接,如下所示。 -``` +```text # ============== Set MindSpore Dependencies. ============= include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp) include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/third_party/flatbuffers/include) @@ -182,7 +181,7 @@ set_target_properties(minddata-lite PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/lib/libminddata-lite.so) # --------------- MindSpore Lite set End. -------------------- -# Link target library. +# Link target library. target_link_libraries( ... # --- mindspore --- @@ -202,34 +201,37 @@ target_link_libraries( 在JNI层调用MindSpore Lite C++ API实现端测推理。 -推理代码流程如下,完整代码请参见`src/cpp/MindSporeNetnative.cpp`。 +推理代码流程如下,完整代码请参见`src/cpp/MindSporeNetnative.cpp`。 1. 加载MindSpore Lite模型文件,构建上下文、会话以及用于推理的计算图。 - 加载模型文件:创建并配置用于模型推理的上下文 + ```cpp // Buffer is the model data passed in by the Java layer jlong bufferLen = env->GetDirectBufferCapacity(buffer); char *modelBuffer = CreateLocalModelBuffer(env, buffer); ``` - + - 创建会话 + ```cpp void **labelEnv = new void *; MSNetWork *labelNet = new MSNetWork; *labelEnv = labelNet; - + // Create context. mindspore::lite::Context *context = new mindspore::lite::Context; context->thread_num_ = num_thread; - + // Create the mindspore session. labelNet->CreateSessionMS(modelBuffer, bufferLen, context); delete (context); - + ``` - + - 加载模型文件并构建用于推理的计算图 + ```cpp void MSNetWork::CreateSessionMS(char* modelBuffer, size_t bufferLen, std::string name, mindspore::lite::Context* ctx) { @@ -239,8 +241,8 @@ target_link_libraries( int ret = session->CompileGraph(model); } ``` - -2. 将输入图片转换为传入MindSpore模型的Tensor格式。 + +2. 将输入图片转换为传入MindSpore模型的Tensor格式。 将待检测图片数据转换为输入MindSpore模型的Tensor。 @@ -250,7 +252,7 @@ target_link_libraries( // Processing such as zooming the picture size. matImgPreprocessed = PreProcessImageData(matImageSrc); - ImgDims inputDims; + ImgDims inputDims; inputDims.channel = matImgPreprocessed.channels(); inputDims.width = matImgPreprocessed.cols; inputDims.height = matImgPreprocessed.rows; @@ -270,7 +272,7 @@ target_link_libraries( inputDims.channel * inputDims.width * inputDims.height * sizeof(float)); delete[] (dataHWC); ``` - + 3. 对输入数据进行处理。 ```cpp @@ -302,7 +304,7 @@ target_link_libraries( } ``` -4. 对输入Tensor按照模型进行推理,获取输出Tensor,并进行后处理。 +4. 对输入Tensor按照模型进行推理,获取输出Tensor,并进行后处理。 - 图执行,端测推理。 @@ -312,6 +314,7 @@ target_link_libraries( ``` - 获取输出数据。 + ```cpp auto names = mSession->GetOutputTensorNames(); std::unordered_map msOutputs; @@ -321,22 +324,23 @@ target_link_libraries( } std::string retStr = ProcessRunnetResult(msOutputs, ret); ``` - + - 输出数据的后续处理。 + ```cpp std::string ProcessRunnetResult(std::unordered_map msOutputs, int runnetRet) { - + std::unordered_map::iterator iter; iter = msOutputs.begin(); - + // The mobilenetv2.ms model output just one branch. auto outputTensor = iter->second; int tensorNum = outputTensor->ElementsNum(); - + // Get a pointer to the first score. float *temp_scores = static_cast(outputTensor->MutableData()); - + float scores[RET_CATEGORY_SUM]; for (int i = 0; i < RET_CATEGORY_SUM; ++i) { if (temp_scores[i] > 0.5) { @@ -344,7 +348,7 @@ target_link_libraries( } scores[i] = temp_scores[i]; } - + // Score for each category. // Converted to text information that needs to be displayed in the APP. std::string categoryScore = ""; @@ -356,5 +360,5 @@ target_link_libraries( categoryScore += ";"; } return categoryScore; - } + } ``` diff --git a/tutorials/lite/source_zh_cn/use/benchmark_tool.md b/tutorials/lite/source_zh_cn/use/benchmark_tool.md index d411e48fc9..5b0c12be39 100644 --- a/tutorials/lite/source_zh_cn/use/benchmark_tool.md +++ b/tutorials/lite/source_zh_cn/use/benchmark_tool.md @@ -40,7 +40,7 @@ Benchmark工具进行的性能测试主要的测试指标为模型单次前向 这条命令使用随机输入,其他参数使用默认值。该命令执行后会输出如下统计信息,该信息显示了测试模型在运行指定推理轮数后所统计出的单次推理最短耗时、单次推理最长耗时和平均推理耗时。 -``` +```text Model = test_benchmark.ms, numThreads = 2, MinRunTime = 72.228996 ms, MaxRuntime = 73.094002 ms, AvgRunTime = 72.556000 ms ``` @@ -50,7 +50,7 @@ Model = test_benchmark.ms, numThreads = 2, MinRunTime = 72.228996 ms, MaxRuntime 这条命令使用随机输入,并且输出模型网络层的耗时信息,其他参数使用默认值。该命令执行后,模型网络层的耗时会输出如下统计信息,在该例中,该统计信息按照`opName`和`optype`两种划分方式分别显示,`opName`表示算子名,`optype`表示算子类别,`avg`表示该算子的平均单次运行时间,`percent`表示该算子运行耗时占所有算子运行总耗时的比例,`calledTimess`表示该算子的运行次数,`opTotalTime`表示该算子运行指定次数的总耗时。最后,`total time`和`kernel cost`分别显示了该模型单次推理的平均耗时和模型推理中所有算子的平均耗时之和。 -``` +```text ----------------------------------------------------------------------------------------- opName avg(ms) percent calledTimess opTotalTime conv2d_1/convolution 2.264800 0.824012 10 22.648003 @@ -98,7 +98,7 @@ Benchmark工具进行的精度测试主要是通过设置标杆数据来对比 这条命令指定了测试模型的输入数据、标杆数据(默认的输入及标杆数据类型均为float32),同时指定了模型推理程序在CPU上运行,并指定了准确度阈值为3%。该命令执行后会输出如下统计信息,该信息显示了测试模型的单条输入数据、输出节点的输出结果和平均偏差率以及所有节点的平均偏差率。 -``` +```text InData0: 139.947 182.373 153.705 138.945 108.032 164.703 111.585 227.402 245.734 97.7776 201.89 134.868 144.851 236.027 18.1142 22.218 5.15569 212.318 198.43 221.853 ================ Comparing Output data ================ Data of node age_out : 5.94584e-08 6.3317e-08 1.94726e-07 1.91809e-07 8.39805e-08 7.66035e-08 1.69285e-07 1.46246e-07 6.03796e-07 1.77631e-07 1.54343e-07 2.04623e-07 8.89609e-07 3.63487e-06 4.86876e-06 1.23939e-05 3.09981e-05 3.37098e-05 0.000107102 0.000213932 0.000533579 0.00062465 0.00296401 0.00993984 0.038227 0.0695085 0.162854 0.123199 0.24272 0.135048 0.169159 0.0221256 0.013892 0.00502971 0.00134921 0.00135701 0.000383242 0.000163475 0.000136294 9.77864e-05 8.00793e-05 5.73874e-05 3.53858e-05 2.18535e-05 2.04467e-05 1.85286e-05 1.05075e-05 9.34751e-06 6.12732e-06 4.55476e-06 @@ -108,6 +108,7 @@ Mean bias of all nodes: 0% ``` 如果需要指定输入数据的维度(例如输入维度为1,32,32,1),使用如下命令: + ```bash ./benchmark --modelFile=./models/test_benchmark.ms --inDataFile=./input/test_benchmark.bin --inputShapes=1,32,32,1 --device=CPU --accuracyThreshold=3 --benchmarkDataFile=./output/test_benchmark.out ``` @@ -118,11 +119,11 @@ Mean bias of all nodes: 0% ```bash ./benchmark [--modelFile=] [--accuracyThreshold=] - [--benchmarkDataFile=] [--benchmarkDataType=] - [--cpuBindMode=] [--device=] [--help] - [--inDataFile=] [--loopCount=] - [--numThreads=] [--warmUpLoopCount=] - [--enableFp16=] [--timeProfiling=] + [--benchmarkDataFile=] [--benchmarkDataType=] + [--cpuBindMode=] [--device=] [--help] + [--inDataFile=] [--loopCount=] + [--numThreads=] [--warmUpLoopCount=] + [--enableFp16=] [--timeProfiling=] [--inputShapes=] ``` diff --git a/tutorials/lite/source_zh_cn/use/build.md b/tutorials/lite/source_zh_cn/use/build.md index eebe9a0f59..09fdccb0d0 100644 --- a/tutorials/lite/source_zh_cn/use/build.md +++ b/tutorials/lite/source_zh_cn/use/build.md @@ -31,31 +31,31 @@ - 系统环境:Linux x86_64,推荐使用Ubuntu 18.04.02LTS - runtime(cpp)、benchmark编译依赖 - - [CMake](https://cmake.org/download/) >= 3.14.1 - - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 - - [Android_NDK](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) >= r20 - - [Git](https://git-scm.com/downloads) >= 2.28.0 + - [CMake](https://cmake.org/download/) >= 3.14.1 + - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 + - [Android_NDK](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) >= r20 + - [Git](https://git-scm.com/downloads) >= 2.28.0 - converter编译依赖 - - [CMake](https://cmake.org/download/) >= 3.14.1 - - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 - - [Android_NDK](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) >= r20 - - [Git](https://git-scm.com/downloads) >= 2.28.0 - - [Autoconf](http://ftp.gnu.org/gnu/autoconf/) >= 2.69 - - [Libtool](https://www.gnu.org/software/libtool/) >= 2.4.6 - - [LibreSSL](http://www.libressl.org/) >= 3.1.3 - - [Automake](https://www.gnu.org/software/automake/) >= 1.11.6 - - [Libevent](https://libevent.org) >= 2.0 - - [M4](https://www.gnu.org/software/m4/m4.html) >= 1.4.18 - - [OpenSSL](https://www.openssl.org/) >= 1.1.1 - - [Python](https://www.python.org/) >= 3.7.5 + - [CMake](https://cmake.org/download/) >= 3.14.1 + - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 + - [Android_NDK](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) >= r20 + - [Git](https://git-scm.com/downloads) >= 2.28.0 + - [Autoconf](http://ftp.gnu.org/gnu/autoconf/) >= 2.69 + - [Libtool](https://www.gnu.org/software/libtool/) >= 2.4.6 + - [LibreSSL](http://www.libressl.org/) >= 3.1.3 + - [Automake](https://www.gnu.org/software/automake/) >= 1.11.6 + - [Libevent](https://libevent.org) >= 2.0 + - [M4](https://www.gnu.org/software/m4/m4.html) >= 1.4.18 + - [OpenSSL](https://www.openssl.org/) >= 1.1.1 + - [Python](https://www.python.org/) >= 3.7.5 - runtime(java)编译依赖 - - [CMake](https://cmake.org/download/) >= 3.14.1 - - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 - - [Android_NDK](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) >= r20 - - [Git](https://git-scm.com/downloads) >= 2.28.0 - - [Android_SDK](https://developer.android.com/studio/releases/platform-tools?hl=zh-cn#downloads) >= 30 - - [Gradle](https://gradle.org/releases/) >= 6.6.1 - - [JDK](https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html) >= 1.8 + - [CMake](https://cmake.org/download/) >= 3.14.1 + - [GCC](https://gcc.gnu.org/releases.html) >= 7.3.0 + - [Android_NDK](https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip) >= r20 + - [Git](https://git-scm.com/downloads) >= 2.28.0 + - [Android_SDK](https://developer.android.com/studio/releases/platform-tools?hl=zh-cn#downloads) >= 30 + - [Gradle](https://gradle.org/releases/) >= 6.6.1 + - [JDK](https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html) >= 1.8 > - 当安装完依赖项Android_NDK后,需配置环境变量:`export ANDROID_NDK={$NDK_PATH}/android-ndk-r20b`。 > - Android SDK组件需要安装Android SDK Build Tools。 @@ -92,31 +92,37 @@ git clone https://gitee.com/mindspore/mindspore.git 然后,在源码根目录下执行如下命令,可编译不同版本的MindSpore Lite。 - 编译x86_64架构Debug版本。 + ```bash bash build.sh -I x86_64 -d ``` - 编译x86_64架构Release版本,同时设定线程数。 + ```bash bash build.sh -I x86_64 -j32 ``` - 增量编译ARM64架构Release版本,同时设定线程数。 + ```bash bash build.sh -I arm64 -i -j32 ``` - 编译ARM64架构Release版本,同时编译内置的GPU算子。 + ```bash bash build.sh -I arm64 -e gpu ``` - 编译ARM64带图像预处理模块。 + ```bash bash build.sh -I arm64 -n lite_cv ``` - 增量编译MindSpore Lite AAR。 + ```bash bash build.sh -A java -i ``` @@ -150,9 +156,9 @@ unzip mindspore-lite-maven-{version}.zip 转换工具仅在`-I x86_64`编译选项下获得,内容包括以下几部分: -``` +```text | -├── mindspore-lite-{version}-converter-{os} +├── mindspore-lite-{version}-converter-{os} │ └── converter # 模型转换工具 │ └── lib # 转换工具依赖的动态库 │ └── third_party # 第三方库头文件和库 @@ -164,9 +170,10 @@ unzip mindspore-lite-maven-{version}.zip 推理框架可在`-I x86_64`、`-I arm64`、`-I arm32`和`-A java`编译选项下获得,内容包括以下几部分: - 当编译选项为`-I x86_64`时: - ``` + + ```text | - ├── mindspore-lite-{version}-runtime-x86-cpu + ├── mindspore-lite-{version}-runtime-x86-cpu │ └── benchmark # 基准测试工具 │ └── lib # 推理框架动态库 │ ├── libmindspore-lite.so # MindSpore Lite推理框架的动态库 @@ -176,7 +183,8 @@ unzip mindspore-lite-maven-{version}.zip ``` - 当编译选项为`-I arm64`时: - ``` + + ```text | ├── mindspore-lite-{version}-runtime-arm64-cpu │ └── benchmark # 基准测试工具 @@ -190,7 +198,8 @@ unzip mindspore-lite-maven-{version}.zip ``` - 当编译选项为`-I arm32`时: - ``` + + ```text | ├── mindspore-lite-{version}-runtime-arm32-cpu │ └── benchmark # 基准测试工具 @@ -220,23 +229,23 @@ export LD_LIBRARY_PATH=./output/mindspore-lite-{version}-runtime-x86-cpu/lib:${L - 当编译选项为`-A java`时: - ``` + ```text | ├── mindspore-lite-maven-{version} │ └── mindspore - │ └── mindspore-lite - | └── {version}-SNAPSHOT - │ ├── mindspore-lite-{version}-{timestamp}-{versionCode}.aar # MindSpore Lite推理框架aar包 + │ └── mindspore-lite + | └── {version}-SNAPSHOT + │ ├── mindspore-lite-{version}-{timestamp}-{versionCode}.aar # MindSpore Lite推理框架aar包 ``` #### 图像处理库目录结构说明 图像处理库在`-I arm64 -n lite_cv`编译选项下获得,内容包括以下几部分: -``` +```text | ├── mindspore-lite-{version}-minddata-{os}-{device} -│ └── benchmark # 基准测试工具 +│ └── benchmark # 基准测试工具 │ └── include # 头文件(此处只展示和图像处理相关的文件) │ ├── lite_cv # 图像处理库头文件 │ ├── image_process.h # 图像处理函数头文件 diff --git a/tutorials/lite/source_zh_cn/use/converter_tool.md b/tutorials/lite/source_zh_cn/use/converter_tool.md index 157d3e7758..57c8002b60 100644 --- a/tutorials/lite/source_zh_cn/use/converter_tool.md +++ b/tutorials/lite/source_zh_cn/use/converter_tool.md @@ -36,9 +36,11 @@ MindSpore Lite提供离线转换模型功能的工具,支持多种类型的模 ### 使用示例 首先,在源码根目录下,输入命令进行编译,可参考`build.md`。 + ```bash bash build.sh -I x86_64 ``` + > 目前模型转换工具仅支持x86_64架构。 下面选取了几个常用示例,说明转换命令的使用方法。 @@ -52,43 +54,51 @@ bash build.sh -I x86_64 本例中,因为采用了Caffe模型,所以需要模型结构、模型权值两个输入文件。再加上其他必需的fmk类型和输出路径两个参数,即可成功执行。 结果显示为: - ``` + + ```text CONVERTER RESULT SUCCESS:0 ``` + 这表示已经成功将Caffe模型转化为MindSpore Lite模型,获得新文件`lenet.ms`。 - + - 以MindSpore、TensorFlow Lite、ONNX模型格式和感知量化模型为例,执行转换命令。 - - MindSpore模型`model.mindir` + - MindSpore模型`model.mindir` + ```bash ./converter_lite --fmk=MINDIR --modelFile=model.mindir --outputFile=model ``` - - - TensorFlow Lite模型`model.tflite` + + - TensorFlow Lite模型`model.tflite` + ```bash ./converter_lite --fmk=TFLITE --modelFile=model.tflite --outputFile=model ``` - - - ONNX模型`model.onnx` + + - ONNX模型`model.onnx` + ```bash ./converter_lite --fmk=ONNX --modelFile=model.onnx --outputFile=model ``` - - TensorFlow Lite感知量化模型`model_quant.tflite` + - TensorFlow Lite感知量化模型`model_quant.tflite` + ```bash ./converter_lite --fmk=TFLITE --modelFile=model_quant.tflite --outputFile=model --quantType=AwareTraining ``` - - 感知量化模型输入输出类型设置为float - + - 感知量化模型输入输出类型设置为float + ```bash ./converter_lite --fmk=TFLITE --modelFile=model_quant.tflite --outputFile=model --quantType=AwareTraining --inferenceType=FLOAT ``` + 以上几种情况下,均显示如下转换成功提示,且同时获得`model.ms`目标文件。 - - ``` + + ```text CONVERTER RESULT SUCCESS:0 ``` + - 如果转换命令执行失败,程序会返回一个[错误码](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/errorcode_and_metatype.html)。 > 训练后量化示例请参考。 @@ -107,13 +117,12 @@ MindSpore Lite模型转换工具提供了多种参数设置,用户可根据需 | `--outputFile=` | 是 | 输出模型的路径(不存在时将自动创建目录),不需加后缀,可自动生成`.ms`后缀。 | - | - | | `--weightFile=` | 转换Caffe模型时必选 | 输入模型weight文件的路径。 | - | - | | `--quantType=` | 否 | 设置模型的量化类型。 | WeightQuant:训练后量化(权重量化)
PostTraining:训练后量化(全量化)
AwareTraining:感知量化 | - | -|` --inferenceType=` | 否 | 设置感知量化模型输入输出数据类型,如果和原模型不一致则转换工具会在模型前后插转换算子,使得转换后的模型输入输出类型和inferenceType保持一致。 | UINT8、FLOAT、INT8 | FLOAT | +|`--inferenceType=` | 否 | 设置感知量化模型输入输出数据类型,如果和原模型不一致则转换工具会在模型前后插转换算子,使得转换后的模型输入输出类型和inferenceType保持一致。 | UINT8、FLOAT、INT8 | FLOAT | | `--bitNum=` | 否 | 设定训练后量化(权重量化)的比特数,目前仅支持8bit量化 | 8 | 8 | | `--quantWeightSize=` | 否 | 设定参与训练后量化(权重量化)的卷积核尺寸阈值,若卷积核尺寸大于该值,则对此权重进行量化 | (0,+∞) | 0 | | `--quantWeightChannel=` | 否 | 设定参与训练后量化(权重量化)的卷积通道数阈值,若卷积通道数大于该值,则对此权重进行量化 | (0,+∞) | 16 | | `--configFile=` | 否 | 训练后量化(全量化)校准数据集配置文件路径 | - | - | - > - 参数名和参数值之间用等号连接,中间不能有空格。 > - Caffe模型一般分为两个文件:`*.prototxt`模型结构,对应`--modelFile`参数;`*.caffemodel`模型权值,对应`--weightFile`参数。 @@ -132,9 +141,11 @@ MindSpore Lite模型转换工具提供了多种参数设置,用户可根据需 ### 使用示例 设置日志打印级别为INFO。 + ```bash set GLOG_v=1 ``` + > 日志级别:0代表DEBUG,1代表INFO,2代表WARNING,3代表ERROR。 下面选取了几个常用示例,说明转换命令的使用方法。 @@ -148,35 +159,43 @@ set GLOG_v=1 本例中,因为采用了Caffe模型,所以需要模型结构、模型权值两个输入文件。再加上其他必需的fmk类型和输出路径两个参数,即可成功执行。 结果显示为: - ``` + + ```text CONVERTER RESULT SUCCESS:0 ``` + 这表示已经成功将Caffe模型转化为MindSpore Lite模型,获得新文件`lenet.ms`。 - + - 以MindSpore、TensorFlow Lite、ONNX模型格式和感知量化模型为例,执行转换命令。 - - MindSpore模型`model.mindir` + - MindSpore模型`model.mindir` + ```bash call converter_lite --fmk=MINDIR --modelFile=model.mindir --outputFile=model ``` - - - TensorFlow Lite模型`model.tflite` + + - TensorFlow Lite模型`model.tflite` + ```bash call converter_lite --fmk=TFLITE --modelFile=model.tflite --outputFile=model ``` - - - ONNX模型`model.onnx` + + - ONNX模型`model.onnx` + ```bash call converter_lite --fmk=ONNX --modelFile=model.onnx --outputFile=model ``` - - TensorFlow Lite感知量化模型`model_quant.tflite` + - TensorFlow Lite感知量化模型`model_quant.tflite` + ```bash call converter_lite --fmk=TFLITE --modelFile=model_quant.tflite --outputFile=model --quantType=AwareTraining ``` 以上几种情况下,均显示如下转换成功提示,且同时获得`model.ms`目标文件。 - ``` + + ```text CONVERTER RESULT SUCCESS:0 - ``` + ``` + - 如果转换命令执行失败,程序会返回一个[错误码](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/errorcode_and_metatype.html)。 -- Gitee From ed30559f6312f5a05d9c75945df9e6a0cfc6ac02 Mon Sep 17 00:00:00 2001 From: yingchen Date: Mon, 19 Oct 2020 11:57:35 +0800 Subject: [PATCH 13/21] fix docs error final --- docs/faq/source_en/faq.md | 5 +- docs/faq/source_zh_cn/faq.md | 4 +- docs/note/source_en/benchmark.md | 16 +- .../constraints_on_network_construction.md | 213 ++++++++++-------- .../mindarmour/differential_privacy_design.md | 23 +- .../design/mindarmour/fuzzer_design.md | 3 +- .../design/mindinsight/graph_visual_design.md | 8 +- .../mindinsight/tensor_visual_design.md | 12 +- .../mindinsight/training_visual_design.md | 24 +- .../design/mindspore/architecture_lite.md | 6 +- .../mindspore/distributed_training_design.md | 16 +- .../note/source_en/design/mindspore/mindir.md | 41 +++- .../design/mindspore/profiler_design.md | 19 +- docs/note/source_en/glossary.md | 2 +- docs/note/source_en/help_seeking_path.md | 22 +- docs/note/source_en/network_list_ms.md | 2 +- docs/note/source_en/object_detection_lite.md | 1 - docs/note/source_en/operator_list_implicit.md | 27 +-- docs/note/source_en/operator_list_lite.md | 2 +- docs/note/source_en/operator_list_ms.md | 16 +- docs/note/source_en/roadmap.md | 90 ++++---- docs/note/source_zh_cn/benchmark.md | 12 +- 22 files changed, 310 insertions(+), 254 deletions(-) diff --git a/docs/faq/source_en/faq.md b/docs/faq/source_en/faq.md index 3162c71c3a..3f9e7dc728 100644 --- a/docs/faq/source_en/faq.md +++ b/docs/faq/source_en/faq.md @@ -98,6 +98,7 @@ A: You can write the frequently-used environment settings to `~/.bash_profile` o ### Verifying the Installation Q: After MindSpore is installed on a CPU of a PC, an error message `the pointer[session] is null` is displayed during code verification. The specific code is as follows. How do I verify whether MindSpore is successfully installed? + ```python import numpy as np from mindspore import Tensor @@ -194,7 +195,7 @@ A: The MindSpore CPU version can be installed on Windows 10. For details about t Q: What can I do if an error message `wrong shape of image` is displayed when I use a model trained by MindSpore to perform prediction on a `28 x 28` digital image with white text on a black background? -A: The MNIST gray scale image dataset is used for MindSpore training. Therefore, when the model is used, the data must be set to a `28 x 28 `gray scale image, that is, a single channel. +A: The MNIST gray scale image dataset is used for MindSpore training. Therefore, when the model is used, the data must be set to a `28 x 28` gray scale image, that is, a single channel.
@@ -291,4 +292,4 @@ A: For details about script or model migration, please visit the [MindSpore offi Q: Does MindSpore provide open-source e-commerce datasets? -A: No. Please stay tuned for updates on the [MindSpore official website](https://www.mindspore.cn/en). \ No newline at end of file +A: No. Please stay tuned for updates on the [MindSpore official website](https://www.mindspore.cn/en). diff --git a/docs/faq/source_zh_cn/faq.md b/docs/faq/source_zh_cn/faq.md index 67250b2d6b..4637908446 100644 --- a/docs/faq/source_zh_cn/faq.md +++ b/docs/faq/source_zh_cn/faq.md @@ -103,6 +103,7 @@ A:常用的环境变量设置写入到`~/.bash_profile` 或 `~/.bashrc`中, ### 安装验证 Q:个人电脑CPU环境安装MindSpore后验证代码时报错:`the pointer[session] is null`,具体代码如下,该如何验证是否安装成功呢? + ```python import numpy as np from mindspore import Tensor @@ -234,6 +235,7 @@ Q:MindSpore如何实现早停功能? A:可以自定义`callback`方法实现早停功能。 例子:当loss降到一定数值后,停止训练。 + ```python class EarlyStop(Callback): def __init__(self, control_loss=1): @@ -373,4 +375,4 @@ A:关于脚本或者模型迁移,可以查询MindSpore官网中关于[网络 Q:MindSpore是否附带开源电商类数据集? -A:暂时还没有,可以持续关注[MindSpore官网](https://www.mindspore.cn)。 \ No newline at end of file +A:暂时还没有,可以持续关注[MindSpore官网](https://www.mindspore.cn)。 diff --git a/docs/note/source_en/benchmark.md b/docs/note/source_en/benchmark.md index 72779fa5d8..9a715e46ce 100644 --- a/docs/note/source_en/benchmark.md +++ b/docs/note/source_en/benchmark.md @@ -15,7 +15,7 @@ -This document describes the MindSpore benchmarks. +This document describes the MindSpore benchmarks. For details about the MindSpore networks, see [Model Zoo](https://gitee.com/mindspore/mindspore/tree/master/model_zoo). ## Training Performance @@ -28,17 +28,17 @@ For details about the MindSpore networks, see [Model Zoo](https://gitee.com/mind | | | | | Ascend: 8 * Ascend 910
CPU: 192 Cores | Mixed | 256 | 16600 images/sec | 0.98 | | | | | | Ascend: 16 * Ascend 910
CPU: 384 Cores | Mixed | 256 | 32768 images/sec | 0.96 | -1. The preceding performance is obtained based on ModelArts, the HUAWEI CLOUD AI development platform. It is the average performance obtained by the Ascend 910 AI processor during the overall training process. +1. The preceding performance is obtained based on ModelArts, the HUAWEI CLOUD AI development platform. It is the average performance obtained by the Ascend 910 AI processor during the overall training process. 2. For details about other open source frameworks, see [ResNet-50 v1.5 for TensorFlow](https://github.com/NVIDIA/DeepLearningExamples/tree/master/TensorFlow/Classification/ConvNets/resnet50v1.5). ### BERT -| Network | Network Type | Dataset | MindSpore Version | Resource                 | Precision | Batch Size | Throughput | Speedup | +| Network | Network Type | Dataset | MindSpore Version | Resource                 | Precision | Batch Size | Throughput | Speedup | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | BERT-Large | Attention | zhwiki | 0.5.0-beta | Ascend: 1 * Ascend 910
CPU: 24 Cores | Mixed | 96 | 269 sentences/sec | - | | | | | | Ascend: 8 * Ascend 910
CPU: 192 Cores | Mixed | 96 | 2069 sentences/sec | 0.96 | -1. The preceding performance is obtained based on ModelArts, the HUAWEI CLOUD AI development platform. The network contains 24 hidden layers, the sequence length is 128 tokens, and the vocabulary contains 21128 tokens. +1. The preceding performance is obtained based on ModelArts, the HUAWEI CLOUD AI development platform. The network contains 24 hidden layers, the sequence length is 128 tokens, and the vocabulary contains 21128 tokens. 2. For details about other open source frameworks, see [BERT For TensorFlow](https://github.com/NVIDIA/DeepLearningExamples/tree/master/TensorFlow/LanguageModeling/BERT). ### Wide & Deep (data parallel) @@ -46,7 +46,7 @@ For details about the MindSpore networks, see [Model Zoo](https://gitee.com/mind | Network | Network Type | Dataset | MindSpore Version | Resource                 | Precision | Batch Size | Throughput | Speedup | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Wide & Deep | Recommend | Criteo | 0.6.0-beta | Ascend: 1 * Ascend 910
CPU: 24 Cores | Mixed | 16000 | 796892 samples/sec | - | -| | | | | Ascend: 8 * Ascend 910
CPU: 192 Cores | Mixed | 16000*8 | 4872849 samples/sec | 0.76 | +| | | | | Ascend: 8 \* Ascend 910
CPU: 192 Cores | Mixed | 16000*8 | 4872849 samples/sec | 0.76 | 1. The preceding performance is obtained based on Atlas 800, and the model is data parallel. 2. For details about other open source frameworks, see [Wide & Deep For TensorFlow](https://github.com/NVIDIA/DeepLearningExamples/tree/master/TensorFlow/Recommendation/WideAndDeep). @@ -56,9 +56,9 @@ For details about the MindSpore networks, see [Model Zoo](https://gitee.com/mind | Network | Network Type | Dataset | MindSpore Version | Resource                 | Precision | Batch Size | Throughput | Speedup | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Wide & Deep | Recommend | Criteo | 0.6.0-beta | Ascend: 1 * Ascend 910
CPU: 24 Cores | Mixed | 1000 | 68715 samples/sec | - | -| | | | | Ascend: 8 * Ascend 910
CPU: 192 Cores | Mixed | 8000*8 | 283830 samples/sec | 0.51 | -| | | | | Ascend: 16 * Ascend 910
CPU: 384 Cores | Mixed | 8000*16 | 377848 samples/sec | 0.34 | -| | | | | Ascend: 32 * Ascend 910
CPU: 768 Cores | Mixed | 8000*32 | 433423 samples/sec | 0.20 | +| | | | | Ascend: 8 \* Ascend 910
CPU: 192 Cores | Mixed | 8000*8 | 283830 samples/sec | 0.51 | +| | | | | Ascend: 16 \* Ascend 910
CPU: 384 Cores | Mixed | 8000*16 | 377848 samples/sec | 0.34 | +| | | | | Ascend: 32 \* Ascend 910
CPU: 768 Cores | Mixed | 8000*32 | 433423 samples/sec | 0.20 | 1. The preceding performance is obtained based on Atlas 800, and the model is model parallel. 2. For details about other open source frameworks, see [Wide & Deep For TensorFlow](https://github.com/NVIDIA/DeepLearningExamples/tree/master/TensorFlow/Recommendation/WideAndDeep). diff --git a/docs/note/source_en/constraints_on_network_construction.md b/docs/note/source_en/constraints_on_network_construction.md index 156623a4a2..5936a2cf35 100644 --- a/docs/note/source_en/constraints_on_network_construction.md +++ b/docs/note/source_en/constraints_on_network_construction.md @@ -1,7 +1,7 @@ # Constraints on Network Construction Using Python `Linux` `Ascend` `GPU` `CPU` `Model Development` `Beginner` `Intermediate` `Expert` - + - [Constraints on Network Construction Using Python](#constraints-on-network-construction-using-python) @@ -28,21 +28,26 @@ ## Overview + MindSpore can compile user source code based on the Python syntax into computational graphs, and can convert common functions or instances inherited from nn.Cell into computational graphs. Currently, MindSpore does not support conversion of any Python source code into computational graphs. Therefore, there are constraints on source code compilation, including syntax constraints and network definition constraints. As MindSpore evolves, the constraints may change. ## Syntax Constraints + ### Supported Python Data Types -* Number: supports `int`, `float`, and `bool`. Complex numbers are not supported. -* String -* List: supports the append method only. Updating a list will generate a new list. -* Tuple -* Dictionary: The type of key should be String. + +- Number: supports `int`, `float`, and `bool`. Complex numbers are not supported. +- String +- List: supports the append method only. Updating a list will generate a new list. +- Tuple +- Dictionary: The type of key should be String. + ### MindSpore Extended Data Type -* Tensor: Tensor variables must be defined instances. + +- Tensor: Tensor variables must be defined instances. ### Expression Types -| Operation | Description +| Operation | Description | :----------- |:-------- | Unary operator |`+`,`-`, and`not`. The operator `+` supports only scalars. | Binary operator |`+`, `-`, `*`, `/`, `%`, `**` and `//`. @@ -81,10 +86,11 @@ | `isinstance` | The usage principle is consistent with Python, but the second input parameter can only be the type defined by mindspore. ### Function Parameters -* Default parameter value: The data types `int`, `float`, `bool`, `None`, `str`, `tuple`, `list`, and `dict` are supported, whereas `Tensor` is not supported. -* Variable parameter: Functions with variable arguments is supported for training and inference. -* Key-value pair parameter: Functions with key-value pair parameters cannot be used for backward propagation on computational graphs. -* Variable key-value pair parameter: Functions with variable key-value pairs cannot be used for backward propagation on computational graphs. + +- Default parameter value: The data types `int`, `float`, `bool`, `None`, `str`, `tuple`, `list`, and `dict` are supported, whereas `Tensor` is not supported. +- Variable parameter: Functions with variable arguments is supported for training and inference. +- Key-value pair parameter: Functions with key-value pair parameters cannot be used for backward propagation on computational graphs. +- Variable key-value pair parameter: Functions with variable key-value pairs cannot be used for backward propagation on computational graphs. ### Operators @@ -101,55 +107,56 @@ ### Index operation -The index operation includes `tuple` and` Tensor`. The following focuses on the index value assignment and assignment operation of `Tensor`. The value takes` tensor_x [index] `as an example, and the assignment takes` tensor_x [index] = u` as an example for detailed description. Among them, tensor_x is a `Tensor`, which is sliced; index means the index, u means the assigned value, which can be` scalar` or `Tensor (size = 1)`. The index types are as follows: +The index operation includes `tuple` and `Tensor`. The following focuses on the index value assignment and assignment operation of `Tensor`. The value takes` tensor_x [index] `as an example, and the assignment takes`tensor_x [index] = u` as an example for detailed description. Among them, tensor_x is a `Tensor`, which is sliced; index means the index, u means the assigned value, which can be`scalar` or `Tensor (size = 1)`. The index types are as follows: - Slice index: index is `slice` - - Value: `tensor_x[start: stop: step]`, where Slice (start: stop: step) has the same syntax as Python, and will not be repeated here. - - Assignment: `tensor_x[start: stop: step] = u`. + - Value: `tensor_x[start: stop: step]`, where Slice (start: stop: step) has the same syntax as Python, and will not be repeated here. + - Assignment: `tensor_x[start: stop: step] = u`. - Ellipsis index: index is `ellipsis` - - Value: `tensor_x [...]`. - - Assignment: `tensor_x [...] = u`. + - Value: `tensor_x [...]`. + - Assignment: `tensor_x [...] = u`. - Boolean constant index: index is `True`, index is `False` is not supported temporarily. - - Value: `tensor_x[True]`. - - Assignment: Not supported yet. + - Value: `tensor_x[True]`. + - Assignment: Not supported yet. - Tensor index: index is `Tensor` - - Value: `tensor_x [index]`, `index` must be `Tensor` of data type `int32` or `int64`, + - Value: `tensor_x [index]`, `index` must be `Tensor` of data type `int32` or `int64`, the element value range is `[0, tensor_x.shape[0])`. - - Assignment: `tensor_x [index] = U`. - - `tensor_x` data type must be one of the following: `float16`, `float32`, `int8`, `uint8`. - - `index` must be `Tensor` of data type `int32`, the element value range is `[0, tensor_x.shape [0])`. - - `U` can be `Number`, `Tensor`, `Tuple` only containing `Number`, `Tuple` only containing `Tensor`. - - Single `Number` or every `Number` in `Tuple` must be the same type as `tensor_x`, ie + - Assignment: `tensor_x [index] = U`. + - `tensor_x` data type must be one of the following: `float16`, `float32`, `int8`, `uint8`. + - `index` must be `Tensor` of data type `int32`, the element value range is `[0, tensor_x.shape [0])`. + - `U` can be `Number`, `Tensor`, `Tuple` only containing `Number`, `Tuple` only containing `Tensor`. + - Single `Number` or every `Number` in `Tuple` must be the same type as `tensor_x`, ie When the data type of `tensor_x` is `uint8` or `int8`, the `Number` type should be `int`; When the data type of `tensor_x` is `float16` or `float32`, the `Number` type should be `float`. - - Single `Tensor` or every `Tensor in Tuple` must be consistent with the data type of `tensor_x`, + - Single `Tensor` or every `Tensor in Tuple` must be consistent with the data type of `tensor_x`, when single `Tensor`, the `shape` should be equal to or broadcast as `index.shape + tensor_x.shape [1:]`. - - `Tuple` containing `Number` must meet requirement: + - `Tuple` containing `Number` must meet requirement: `len (Tuple) = (index.shape + tensor_x.shape [1:]) [-1]`. - - `Tuple` containing `Tensor` must meet requirements: + - `Tuple` containing `Tensor` must meet requirements: the `shape` of each `Tensor` should be the same, `(len (Tuple),) + Tensor.shape` should be equal to or broadcast as `index.shape + tensor_x.shape [1:]`. - None constant index: index is `None` - - Value: `tensor_x[None]`, results are consistent with numpy. - - Assignment: Not supported yet. + - Value: `tensor_x[None]`, results are consistent with numpy. + - Assignment: Not supported yet. - tuple index: index is `tuple` - - The tuple element is a slice: - - Value: for example `tensor_x[::,: 4, 3: 0: -1]`. - - Assignment: for example `tensor_x[::,: 4, 3: 0: -1] = u`. - - The tuple element is Number: - - Value: for example `tensor_x[2,1]`. - - Assignment: for example `tensor_x[1,4] = u`. - - The tuple element is a mixture of slice and ellipsis: - - Value: for example `tensor_x[..., ::, 1:]`. - - Assignment: for example `tensor_x[..., ::, 1:] = u`. - - Not supported in other situations + - The tuple element is a slice: + - Value: for example `tensor_x[::,: 4, 3: 0: -1]`. + - Assignment: for example `tensor_x[::,: 4, 3: 0: -1] = u`. + - The tuple element is Number: + - Value: for example `tensor_x[2,1]`. + - Assignment: for example `tensor_x[1,4] = u`. + - The tuple element is a mixture of slice and ellipsis: + - Value: for example `tensor_x[..., ::, 1:]`. + - Assignment: for example `tensor_x[..., ::, 1:] = u`. + - Not supported in other situations The index value operation of tuple and list type, we need to focus on the index value operation of tuple or list whose element type is `nn.Cell`. This operation is currently only supported by the GPU backend in Graph mode, and its syntax format is like `layers[index](*inputs)`, the example code is as follows: + ```python class Net(nn.Cell): def __init__(self): @@ -162,60 +169,68 @@ The index value operation of tuple and list type, we need to focus on the index x = self.layers[index](x) return x ``` + The grammar has the following constraints: -* Only the index value operation of tuple or list whose element type is `nn.Cell` is supported. -* The index is a scalar `Tensor` of type `int32`, with a value range of `[-n, n)`, where `n` is the size of the tuple, and the maximum supported tuple size is 1000. -* The number, type and shape size of the input data of the `Construct` function of each Cell element in the tuple are the same, and the number of data output after the `Construct` function runs, the type and shape size are also the same. -* Each element in the tuple needs to be defined before the tuple is defined. -* This syntax does not support running branches as if, while, for and other control flow, except if the control condition of the control flow is constant. for example: - - Supported example: - ```python - class Net(nn.Cell): - def __init__(self, flag=True): - super(Net, self).__init__() - self.flag = flag - self.relu = nn.ReLU() - self.softmax = nn.Softmax() - self.layers = (self.relu, self.softmax) - def construct(self, x, index): - if self.flag: - x = self.layers[index](x) - return x - ``` - - Unsupported example: - ```python - class Net(nn.Cell): - def __init__(self): - super(Net, self).__init__() - self.relu = nn.ReLU() - self.softmax = nn.Softmax() - self.layers = (self.relu, self.softmax) +- Only the index value operation of tuple or list whose element type is `nn.Cell` is supported. +- The index is a scalar `Tensor` of type `int32`, with a value range of `[-n, n)`, where `n` is the size of the tuple, and the maximum supported tuple size is 1000. +- The number, type and shape size of the input data of the `Construct` function of each Cell element in the tuple are the same, and the number of data output after the `Construct` function runs, the type and shape size are also the same. +- Each element in the tuple needs to be defined before the tuple is defined. +- This syntax does not support running branches as if, while, for and other control flow, except if the control condition of the control flow is constant. for example: + - Supported example: - def construct(self, x, index, flag): - if flag: - x = self.layers[index](x) - return x - ``` + ```python + class Net(nn.Cell): + def __init__(self, flag=True): + super(Net, self).__init__() + self.flag = flag + self.relu = nn.ReLU() + self.softmax = nn.Softmax() + self.layers = (self.relu, self.softmax) + + def construct(self, x, index): + if self.flag: + x = self.layers[index](x) + return x + ``` + + - Unsupported example: + + ```python + class Net(nn.Cell): + def __init__(self): + super(Net, self).__init__() + self.relu = nn.ReLU() + self.softmax = nn.Softmax() + self.layers = (self.relu, self.softmax) + + def construct(self, x, index, flag): + if flag: + x = self.layers[index](x) + return x + ``` Tuple also support slice value operations, but do not support slice type as Tensor, support `tuple_x [start: stop: step]`, which has the same effect as Python, and will not be repeated here. ### Unsupported Syntax -Currently, the following syntax is not supported in network constructors: +Currently, the following syntax is not supported in network constructors: `raise`, `yield`, `async for`, `with`, `async with`, `assert`, `import`, and `await`. ## Network Definition Constraints ### Instance Types on the Entire Network -* Common Python function with the [@ms_function](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.html#mindspore.ms_function) decorator. -* Cell subclass inherited from [nn.Cell](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.Cell). + +- Common Python function with the [@ms_function](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.html#mindspore.ms_function) decorator. +- Cell subclass inherited from [nn.Cell](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.nn.html#mindspore.nn.Cell). ### Network Input Type -* The training data input parameters of the entire network must be of the Tensor type. -* The generated ANF diagram cannot contain the following constant nodes: string constants, constants with nested tuples, and constants with nested lists. + +- The training data input parameters of the entire network must be of the Tensor type. +- The generated ANF diagram cannot contain the following constant nodes: string constants, constants with nested tuples, and constants with nested lists. ### Network Graph Optimization + During graph optimization at the ME frontend, the dataclass, dictionary, list, and key-value pair types are converted to tuple types, and the corresponding operations are converted to tuple operations. ### Network Construction Components @@ -230,33 +245,36 @@ Currently, the following syntax is not supported in network constructors: | Composite operator |[mindspore/ops/composite/*](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html). | Operator generated by constexpr |Uses the value generated by [@constexpr](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.constexpr) to calculate operators. - ### Other Constraints + 1. Input parameters of the `construct` function on the entire network and parameters of functions modified by the `ms_function` decorator are generalized during the graph compilation and cannot be passed to operators as constant input. Therefore, in graph mode, the parameter passed to the entry network can only be `Tensor`. As shown in the following example: - - * The following is an example of incorrect input: + + - The following is an example of incorrect input: + ```python class ExpandDimsTest(Cell): def __init__(self): super(ExpandDimsTest, self).__init__() self.expandDims = P.ExpandDims() - + def construct(self, input_x, input_axis): return self.expandDims(input_x, input_axis) expand_dim = ExpandDimsTest() input_x = Tensor(np.random.randn(2,2,2,2).astype(np.float32)) expand_dim(input_x, 0) ``` + In the example, `ExpandDimsTest` is a single-operator network with two inputs: `input_x` and `input_axis`. The second input of the `ExpandDims` operator must be a constant. This is because `input_axis` is required when the output dimension of the `ExpandDims` operator is deduced during graph compilation. As the network parameter input, the value of `input_axis` is generalized into a variable and cannot be determined. As a result, the output dimension of the operator cannot be deduced, causing the graph compilation failure. Therefore, the input required by deduction in the graph compilation phase must be a constant. In the API, the parameters of this type of operator that require constant input will be explained, marked `const input is needed`. - - * Directly enter the needed value or a member variable in a class for the constant input of the operator in the construct function. The following is an example of correct input: + + - Directly enter the needed value or a member variable in a class for the constant input of the operator in the construct function. The following is an example of correct input: + ```python class ExpandDimsTest(Cell): def __init__(self, axis): super(ExpandDimsTest, self).__init__() self.expandDims = P.ExpandDims() self.axis = axis - + def construct(self, input_x): return self.expandDims(input_x, self.axis) axis = 0 @@ -264,52 +282,56 @@ Currently, the following syntax is not supported in network constructors: input_x = Tensor(np.random.randn(2,2,2,2).astype(np.float32)) expand_dim(input_x) ``` - + 2. It is not allowed to modify `non-Parameter` type data members of the network. Examples are as follows: - ``` + ```python class Net(Cell): def __init__(self): super(Net, self).__init__() self.num = 2 self.par = Parameter(Tensor(np.ones((2, 3, 4))), name="par") - + def construct(self, x, y): return x + y ``` + In the network defined above, `self.num` is not a `Parameter` and cannot be modified, but `self.par` is a `Parameter` and can be modified. 3. When an undefined class member is used in the `construct` function, it will be treated as `None` instead of throwing `AttributeError` like the Python interpreter. Examples are as follows: - - ``` + + ```python class Net(Cell): def __init__(self): super(Net, self).__init__() - + def construct(self, x): return x + self.y ``` + In the network defined above, the undefined class member `self.y` is used in `construct`, and `self.y` will be treated as `None`. 4. When using the control flow of `if-else` in the `construct` function, the data types returned by `if` and `else` or the data types of the same variable after being updated must be the same. Examples are as follows: - ``` + + ```python class NetReturn(Cell): def __init__(self): super(NetReturn, self).__init__() - + def construct(self, x, y, m, n): if x > y: return m else: return n ``` + In the network `NetReturn` defined above, the `if-else` control flow is used in `construct`, then the data type of `m` returned by the `if` branch and the data type of `n` returned by the `else` branch must be consistent. - - ``` + + ```python class NetAssign(Cell): def __init__(self): super(NetAssign, self).__init__() - + def construct(self, x, y, m, n): if x > y: out = m @@ -317,4 +339,5 @@ Currently, the following syntax is not supported in network constructors: out = n return out ``` + In the network `NetAssign` defined above, the `if-else` control flow is used in the `construct`, then the data types of the `out` after the update of the `if` branch and the update of the `else` branch must be consistent. diff --git a/docs/note/source_en/design/mindarmour/differential_privacy_design.md b/docs/note/source_en/design/mindarmour/differential_privacy_design.md index c57af833f1..7038864e65 100644 --- a/docs/note/source_en/design/mindarmour/differential_privacy_design.md +++ b/docs/note/source_en/design/mindarmour/differential_privacy_design.md @@ -26,14 +26,13 @@ The Differential-Privacy module of MindArmour implements the differential privac Figure 1 shows an overall design of differential privacy training, and mainly including differential privacy noise mechanisms (DP mechanisms), a differential privacy optimizer (DP optimizer), and a privacy monitor. - ### DP Optimizer DP optimizer inherits capabilities of the MindSpore optimizer and uses the DP mechanisms to scramble and protect gradients. Currently, MindArmour provides three types of DP optimizers: constant Gaussian optimizer, adaptive Gaussian optimizer, and adaptive clipping optimizer. Each type of DP optimizer adds differential privacy protection capabilities to common optimizers such as SGD and Momentum from different perspectives. -* Constant Gaussian optimizer is a DP optimizer for non-adaptive Gaussian noise. The advantage is that the differential privacy budget ϵ can be strictly controlled. The disadvantage is that in the model training process, the noise amount added in each step is fixed. If the number of training steps is too large, the noise in the later phase of training makes the model convergence difficult, or even causes the performance to deteriorate greatly and the model availability to be poor. -* Adaptive Gaussian optimizer adaptively adjusts the standard deviation to adjust the Gaussian distribution noise. In the initial phase of model training, a large amount of noise is added. As the model gradually converges, the noise amount gradually decreases, and the impact of the noise on the model availability is reduced. A disadvantage of the adaptive Gaussian noise is that a differential privacy budget cannot be strictly controlled. -* Adaptive clipping optimizer is a DP optimizer that adaptively adjusts a clipping granularity. Gradient clipping is an important operation in differential privacy training. The adaptive clipping optimizer can control a ratio of gradient clipping to fluctuate within a given range and control the gradient clipping granularity during training steps. +- Constant Gaussian optimizer is a DP optimizer for non-adaptive Gaussian noise. The advantage is that the differential privacy budget ϵ can be strictly controlled. The disadvantage is that in the model training process, the noise amount added in each step is fixed. If the number of training steps is too large, the noise in the later phase of training makes the model convergence difficult, or even causes the performance to deteriorate greatly and the model availability to be poor. +- Adaptive Gaussian optimizer adaptively adjusts the standard deviation to adjust the Gaussian distribution noise. In the initial phase of model training, a large amount of noise is added. As the model gradually converges, the noise amount gradually decreases, and the impact of the noise on the model availability is reduced. A disadvantage of the adaptive Gaussian noise is that a differential privacy budget cannot be strictly controlled. +- Adaptive clipping optimizer is a DP optimizer that adaptively adjusts a clipping granularity. Gradient clipping is an important operation in differential privacy training. The adaptive clipping optimizer can control a ratio of gradient clipping to fluctuate within a given range and control the gradient clipping granularity during training steps. ### DP Mechanisms @@ -41,26 +40,24 @@ The noise mechanism is a basis for building a differential privacy training capa ### Monitor -Monitor provides callback functions such as Rényi differential privacy (RDP) and zero-concentrated differential privacy (ZCDP) to monitor the differential privacy budget of the model. +Monitor provides callback functions such as Rényi differential privacy (RDP) and zero-concentrated differential privacy (ZCDP) to monitor the differential privacy budget of the model. -* ZCDP[2] +- ZCDP[2] ZCDP is a loose differential privacy definition. It uses the Rényi divergence to measure the distribution difference of random functions on adjacent datasets. -* RDP[3] +- RDP[3] RDP is a more general differential privacy definition based on the Rényi divergence. It uses the Rényi divergence to measure the distribution difference between two adjacent datasets. - Compared with traditional differential privacy, ZCDP and RDP provide stricter privacy budget upper bound guarantee. - ## Code Implementation -* [mechanisms.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/mechanisms/mechanisms.py): implements the noise generation mechanism required by differential privacy training, including simple Gaussian noise, adaptive Gaussian noise, and adaptive clipping Gaussian noise. -* [optimizer.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/optimizer/optimizer.py): implements the fundamental logic of using the noise generation mechanism to add noise during backward propagation. -* [monitor.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/monitor/monitor.py): implements the callback function for computing the differential privacy budget. During model training, the current differential privacy budget is returned. -* [model.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/train/model.py): implements the logic of computing the loss and gradient as well as the gradient truncation logic of differential privacy training, which is the entry for users to use the differential privacy training capability. +- [mechanisms.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/mechanisms/mechanisms.py): implements the noise generation mechanism required by differential privacy training, including simple Gaussian noise, adaptive Gaussian noise, and adaptive clipping Gaussian noise. +- [optimizer.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/optimizer/optimizer.py): implements the fundamental logic of using the noise generation mechanism to add noise during backward propagation. +- [monitor.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/monitor/monitor.py): implements the callback function for computing the differential privacy budget. During model training, the current differential privacy budget is returned. +- [model.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/train/model.py): implements the logic of computing the loss and gradient as well as the gradient truncation logic of differential privacy training, which is the entry for users to use the differential privacy training capability. ## References diff --git a/docs/note/source_en/design/mindarmour/fuzzer_design.md b/docs/note/source_en/design/mindarmour/fuzzer_design.md index dbb4feeb0a..34cfc563dc 100644 --- a/docs/note/source_en/design/mindarmour/fuzzer_design.md +++ b/docs/note/source_en/design/mindarmour/fuzzer_design.md @@ -2,7 +2,6 @@ `Linux` `Ascend` `GPU` `CPU` `Data Preparation` `Model Development` `Model Training` `Model Optimization` `Enterprise` `Expert` - - [AI Model Security Testing](#ai-model-security-testing) @@ -71,4 +70,4 @@ Through multiple rounds of mutations, you can obtain a series of variant data in [1] Pei K, Cao Y, Yang J, et al. Deepxplore: Automated whitebox testing of deep learning systems[C]//Proceedings of the 26th Symposium on Operating Systems Principles. ACM, 2017: 1-18. -[2] Ma L, Juefei-Xu F, Zhang F, et al. Deepgauge: Multi-granularity testing criteria for deep learning systems[C]//Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering. ACM, 2018: 120-131. \ No newline at end of file +[2] Ma L, Juefei-Xu F, Zhang F, et al. Deepgauge: Multi-granularity testing criteria for deep learning systems[C]//Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering. ACM, 2018: 120-131. diff --git a/docs/note/source_en/design/mindinsight/graph_visual_design.md b/docs/note/source_en/design/mindinsight/graph_visual_design.md index a0e0c8918f..8633d64951 100644 --- a/docs/note/source_en/design/mindinsight/graph_visual_design.md +++ b/docs/note/source_en/design/mindinsight/graph_visual_design.md @@ -21,9 +21,9 @@ The computational graph visualization function is mainly used in the following scenarios: - - View a data flow direction of operators and a model structure when programming a deep learning neural network. - - View the input and output nodes of a specified node and attributes of a queried node. - - Trace data, including data dimension and type changes when debugging a network. +- View a data flow direction of operators and a model structure when programming a deep learning neural network. +- View the input and output nodes of a specified node and attributes of a queried node. +- Trace data, including data dimension and type changes when debugging a network. ## Overall Design @@ -71,4 +71,4 @@ RESTful API is used for data interaction between the MindInsight frontend and ba #### File API Design Data interaction between MindSpore and MindInsight uses the data format defined by [Protocol Buffer](https://developers.google.cn/protocol-buffers/docs/pythontutorial). -The main entry is the [summary.proto file](https://gitee.com/mindspore/mindinsight/blob/master/mindinsight/datavisual/proto_files/mindinsight_summary.proto). A message object of a computational graph is defined as `GraphProto`. For details about `GraphProto`, see the [anf_ir.proto file](https://gitee.com/mindspore/mindinsight/blob/master/mindinsight/datavisual/proto_files/mindinsight_anf_ir.proto). \ No newline at end of file +The main entry is the [summary.proto file](https://gitee.com/mindspore/mindinsight/blob/master/mindinsight/datavisual/proto_files/mindinsight_summary.proto). A message object of a computational graph is defined as `GraphProto`. For details about `GraphProto`, see the [anf_ir.proto file](https://gitee.com/mindspore/mindinsight/blob/master/mindinsight/datavisual/proto_files/mindinsight_anf_ir.proto). diff --git a/docs/note/source_en/design/mindinsight/tensor_visual_design.md b/docs/note/source_en/design/mindinsight/tensor_visual_design.md index f21b670f1f..86a364148c 100644 --- a/docs/note/source_en/design/mindinsight/tensor_visual_design.md +++ b/docs/note/source_en/design/mindinsight/tensor_visual_design.md @@ -60,7 +60,8 @@ In tensor visualization, there are file API and RESTful API. The file API is the #### File API Design The `summary.proto` file is the main entry. TensorProto data is stored in the summary value, as shown in the following: -``` + +```cpp { message Summary { message Image { @@ -69,7 +70,7 @@ The `summary.proto` file is the main entry. TensorProto data is stored in the su required int32 width = 2; ... } - + message Histogram { message bucket{ // Counting number of values fallen in [left, left + width). @@ -78,7 +79,7 @@ The `summary.proto` file is the main entry. TensorProto data is stored in the su required double width = 2; required int64 count = 3; } - + repeated bucket buckets = 1; ... } @@ -86,7 +87,7 @@ The `summary.proto` file is the main entry. TensorProto data is stored in the su message Value { // Tag name for the data. required string tag = 1; - + // Value associated with the tag. oneof value { float scalar_value = 3; @@ -100,4 +101,5 @@ The `summary.proto` file is the main entry. TensorProto data is stored in the su repeated Value value = 1; } ``` -TensorProto is defined in the [anf_ir.proto](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/utils/anf_ir.proto) file. \ No newline at end of file + +TensorProto is defined in the [anf_ir.proto](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/utils/anf_ir.proto) file. diff --git a/docs/note/source_en/design/mindinsight/training_visual_design.md b/docs/note/source_en/design/mindinsight/training_visual_design.md index 86451518c8..05cadfe220 100644 --- a/docs/note/source_en/design/mindinsight/training_visual_design.md +++ b/docs/note/source_en/design/mindinsight/training_visual_design.md @@ -5,16 +5,16 @@ - [Overall Design of Training Visualization](#overall-design-of-training-visualization) - - [Logical Architecture of Training Visualization](#logical-architecture-of-training-visualization) - - [Architecture of Training Information Collection](#architecture-of-training-information-collection) - - [Architecture of Training Information Analysis and Display](#architecture-of-training-information-analysis-and-display) - - [Code Organization](#code-organization) - - [Training Visualization Data Model](#training-visualization-data-model) - - [Training Information Data Flow](#training-information-data-flow) - - [Data Model](#data-model) - - [Training Job](#training-job) - - [Lineage Data](#lineage-data) - - [Training Process Data](#training-process-data) + - [Logical Architecture of Training Visualization](#logical-architecture-of-training-visualization) + - [Architecture of Training Information Collection](#architecture-of-training-information-collection) + - [Architecture of Training Information Analysis and Display](#architecture-of-training-information-analysis-and-display) + - [Code Organization](#code-organization) + - [Training Visualization Data Model](#training-visualization-data-model) + - [Training Information Data Flow](#training-information-data-flow) + - [Data Model](#data-model) + - [Training Job](#training-job) + - [Lineage Data](#lineage-data) + - [Training Process Data](#training-process-data) @@ -105,7 +105,7 @@ MindInsight uses directories to distinguish different training jobs. To distingu In MindInsight code, a training job is called a TrainJob. A TrainJob ID is the name of the directory where the training log is located, for example, ./train_my_lenet_1. -During a training process, a lineage data file (whose name ends with _lineage) and a training process data file (whose name ends with _MS) are generated. The lineage data mainly describes an invariant attribute of the training from a global perspective, for example, a dataset path used for training, an optimizer used for training, and user-defined lineage information. The most prominent feature of the lineage data file is that it does not change during the training process. The training process data mainly describes a change status of the training, for example, a loss value, parameter distribution, and image data sent to the model in a step. The most prominent feature of the training process data file is that each step changes. +During a training process, a lineage data file (whose name ends with _lineage) and a training process data file (whose name ends with_MS) are generated. The lineage data mainly describes an invariant attribute of the training from a global perspective, for example, a dataset path used for training, an optimizer used for training, and user-defined lineage information. The most prominent feature of the lineage data file is that it does not change during the training process. The training process data mainly describes a change status of the training, for example, a loss value, parameter distribution, and image data sent to the model in a step. The most prominent feature of the training process data file is that each step changes. It should be noted that the classification about whether the training information changes is not absolute. For example, the training process data file contains computational graph data, which is determined when the training starts. @@ -129,4 +129,4 @@ The lineage data describes the invariant attribute of a training from a global p - Data Query and Display - When displaying data, you might want to see how the data under a tag changes with the training process. Therefore, when querying data, you do not need to specify the step number. Instead, you can specify the training job, plugin name, and tag to query data of all steps under the tag. \ No newline at end of file + When displaying data, you might want to see how the data under a tag changes with the training process. Therefore, when querying data, you do not need to specify the step number. Instead, you can specify the training job, plugin name, and tag to query data of all steps under the tag. diff --git a/docs/note/source_en/design/mindspore/architecture_lite.md b/docs/note/source_en/design/mindspore/architecture_lite.md index d78fc89147..05c69cede3 100644 --- a/docs/note/source_en/design/mindspore/architecture_lite.md +++ b/docs/note/source_en/design/mindspore/architecture_lite.md @@ -1,7 +1,7 @@ # Overall Architecture (Lite) `Linux` `Windows` `On Device` `Inference Application` `Intermediate` `Expert` `Contributor` - + The overall architecture of MindSpore Lite is as follows: @@ -14,8 +14,8 @@ The overall architecture of MindSpore Lite is as follows: - **Backend:** optimizes graphs based on IR, including graph high level optimization (GHLO), graph low level optimization (GLLO), and quantization. GHLO is responsible for hardware-independent optimization, such as operator fusion and constant folding. GLLO is responsible for hardware-related optimization. Quantizer supports quantization methods after training, such as weight quantization and activation value quantization. -- **Runtime:** inference runtime of intelligent devices. Sessions are responsible for session management and provide external APIs. The thread pool and parallel primitives are responsible for managing the thread pool used for graph execution. Memory allocation is responsible for memory overcommitment of each operator during graph execution. The operator library provides the CPU and GPU operators. +- **Runtime:** inference runtime of intelligent devices. Sessions are responsible for session management and provide external APIs. The thread pool and parallel primitives are responsible for managing the thread pool used for graph execution. Memory allocation is responsible for memory overcommitment of each operator during graph execution. The operator library provides the CPU and GPU operators. - **Micro:** runtime of IoT devices, including the model generation .c file, thread pool, memory overcommitment, and operator library. -Runtime and Micro share the underlying infrastructure layers, such as the operator library, memory allocation, thread pool, and parallel primitives. +Runtime and Micro share the underlying infrastructure layers, such as the operator library, memory allocation, thread pool, and parallel primitives. diff --git a/docs/note/source_en/design/mindspore/distributed_training_design.md b/docs/note/source_en/design/mindspore/distributed_training_design.md index 79de486296..cf963d8a9f 100644 --- a/docs/note/source_en/design/mindspore/distributed_training_design.md +++ b/docs/note/source_en/design/mindspore/distributed_training_design.md @@ -24,7 +24,6 @@ With the rapid development of deep learning, the number of datasets and parameters are growing exponentially to improve the accuracy and generalization capability of neural networks. Parallel distributed training has become a development trend to resolve the performance bottleneck of ultra-large scale networks. MindSpore supports the mainstream distributed training paradigm and develops an automatic hybrid parallel solution. The following describes the design principles of several parallel training modes and provides guidance for users to perform custom development. - ## Concepts ### Collective Communication @@ -74,7 +73,6 @@ This section describes how the data parallel mode `ParallelMode.DATA_PARALLEL` w - [grad_reducer.py](https://gitee.com/mindspore/mindspore/blob/master/mindspore/nn/wrap/grad_reducer.py): This file implements the gradient aggregation process. After the input parameter `grads` is expanded by using `HyperMap`, the `AllReduce` operator is inserted. The global communication group is used. You can also perform custom development by referring to this section based on your network requirements. In MindSpore, standalone and distributed execution shares a set of network encapsulation APIs. In the `Cell`, `ParallelMode` is used to determine whether to perform gradient aggregation. For details about the network encapsulation APIs, see the `TrainOneStepCell` code implementation. - ## Automatic Parallelism As a key feature of MindSpore, automatic parallelism is used to implement hybrid parallel training that combines automatic data parallelism and model parallelism. It aims to help users express the parallel algorithm logic using standalone scripts, reduce the difficulty of distributed training, improve the algorithm R&D efficiency, and maintain the high performance of training. This section describes how the automatic parallel mode `ParallelMode.AUTO_PARALLEL` and semi-automatic parallel mode `ParallelMode.SEMI_AUTO_PARALLEL` work in MindSpore. @@ -86,19 +84,19 @@ As a key feature of MindSpore, automatic parallelism is used to implement hybrid 1. Distributed operator and tensor layout As shown in the preceding figure, the automatic parallel process traverses the standalone forward ANF graphs and performs shard modeling on tensors in the unit of distributed operator, indicating how the input and output tensors of an operator are distributed to each device of the cluster, that is, the tensor layout. Users do not need to know which device runs which slice of a model. The framework automatically schedules and allocates model slices. - + To obtain the tensor layout model, each operator has a shard strategy, which indicates the shard status of each input of the operator in the corresponding dimension. Generally, tensors can be sharded in any dimension as long as the value is a multiple of 2, and the even distribution principle is met. The following figure shows an example of the three-dimensional `BatchMatmul` operation. The parallel strategy consists of two tuples, indicating the sharding of `input` and `weight`, respectively. Elements in a tuple correspond to tensor dimensions one by one. `2^N` indicates the shard unit, and `1` indicates that the tuple is not sharded. If you want to express a parallel data shard strategy, that is, only data in the `batch` dimension of `input` is sharded, and data in other dimensions are not sharded, you can use `strategy=((2^N, 1, 1),(1, 1, 1))`. If you want to express a parallel model shard strategy, that is, only model in the non-`batch` dimension of `weight` is sharded, for example, only the `channel` dimension is sharded, you can use `strategy=((1, 1, 1),(1, 1, 2^N))`. If you want to express a hybrid parallel shard strategy, one of which is `strategy=((2^N, 1, 1),(1, 1, 2^N))`. ![Operator Sharding Definition](./images/operator_split.png) - - Based on the shard strategy of an operator, the framework automatically derives the distribution model of input tensors and output tensors of the operator. This distribution model consists of `device_matrix`, `tensor_shape`, and `tensor map`, which indicate the device matrix shape, tensor shape, and mapping between devices and tensor dimensions, respectively. Based on the tensor layout model, distributed operator determines whether to insert extra computation and communication operations in the graph to ensure that the operator computing logic is correct. + + Based on the shard strategy of an operator, the framework automatically derives the distribution model of input tensors and output tensors of the operator. This distribution model consists of `device_matrix`, `tensor_shape`, and `tensor map`, which indicate the device matrix shape, tensor shape, and mapping between devices and tensor dimensions, respectively. Based on the tensor layout model, distributed operator determines whether to insert extra computation and communication operations in the graph to ensure that the operator computing logic is correct. 2. Tensor Redistribution When the output tensor model of an operator is inconsistent with the input tensor model of the next operator, computation and communication operations need to be introduced to implement the change between tensor layouts. The automatic parallel process introduces the tensor redistribution algorithm, which can be used to derive the communication conversion operations between random tensor layouts. The following three examples represent a parallel computing process of the formula `Z=(X×W)×V`, that is, a `MatMul` operation of two two-dimensional matrices, and show how to perform conversion between different parallel modes. - + In example 1, the output of the first data parallel matrix multiplication is sharded in the row rection, and the input of the second model parallel matrix multiplication requires full tensors. The framework automatically inserts the `AllGather` operator to implement redistribution. - + ![Tensor Redistribution](./images/tensor_redistribution1.png) In example 2, the output of parallel matrix multiplication of the first model is sharded in the column direction, and the input of parallel matrix multiplication of the second model is sharded in the row direction. The framework automatically inserts a communication operator equivalent to the `AlltoAll` operation in collective communication to implement redistribution. @@ -114,9 +112,8 @@ As a key feature of MindSpore, automatic parallelism is used to implement hybrid 3. Efficient parallel strategy search algorithm The `SEMI_AUTO_PARALLEL` semi-automatic parallel mode indicates that you manually configure the parallel strategy for operators when you are familiar with the operator sharding representation. This mode is helpful for manual optimization, with certain commissioning difficulty. You need to master the parallel principle and obtain a high-performance parallel solution based on the network structure and cluster topology. To further help users accelerate the parallel network training process, the automatic parallel mode `AUTO_PARALLEL` introduces the automatic search feature of the parallel strategy on the basis of the semi-automatic parallel mode. Automatic parallelism builds cost models based on the hardware platform, and calculates the computation cost, memory cost, and communication cost of a certain amount of data and specific operators based on different parallel strategies Then, by using the dynamic programming algorithm or recursive programming algorithm and taking the memory upper limit of a single device as a constraint condition, a parallel strategy with optimal performance is efficiently searched out. - - Strategy search replaces manual model sharding and provides a high-performance sharding solution within a short period of time, greatly reducing the threshold for parallel training. + Strategy search replaces manual model sharding and provides a high-performance sharding solution within a short period of time, greatly reducing the threshold for parallel training. 4. Convenient distributed automatic differentiation @@ -139,6 +136,5 @@ As a key feature of MindSpore, automatic parallelism is used to implement hybrid 5. Entire graph sharding - [step_auto_parallel.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/frontend/parallel/step_auto_parallel.h), and [step_parallel.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/frontend/parallel/step_parallel.h): The two files contain the core implementation of the automatic parallel process. `step_auto_parallel.h` calls the strategy search process and generates the `OperatorInfo` of the distributed operator. Then in `step_parallel.h`, processes such as operator sharding and tensor redistribution are processed to reconstruct the standalone computing graph in distributed mode. - 6. Backward propagation of communication operators - [grad_comm_ops.py](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ops/_grad/grad_comm_ops.py): This file defines the backward propagation of communication operators, such as `AllReduce` and `AllGather`. diff --git a/docs/note/source_en/design/mindspore/mindir.md b/docs/note/source_en/design/mindspore/mindir.md index 7d3ba3385c..59f55e3195 100644 --- a/docs/note/source_en/design/mindspore/mindir.md +++ b/docs/note/source_en/design/mindspore/mindir.md @@ -21,13 +21,16 @@ ## Overview + An intermediate representation (IR) is a representation of a program between the source and target languages, which facilitates program analysis and optimization for the compiler. Therefore, the IR design needs to consider the difficulty in converting the source language to the target language, as well as the ease-of-use and performance of program analysis and optimization. MindSpore IR (MindIR) is a function-style IR based on graph representation. Its core purpose is to serve automatic differential transformation. Automatic differentiation uses the transformation method based on the function-style programming framework. Therefore, IR uses the semantics close to that of the ANF function. In addition, a manner of representation based on an explicit dependency graph is used by referring to excellent designs of Sea of Nodes[1] and Thorin[2]. ## Syntax + ANF is a simple IR commonly used during functional programming. The ANF syntax is defined as follows: -``` + +```python ::= NUMBER | STRING | VAR | BOOLEAN | PRIMOP | (lambda (VAR …) ) ::= ( …) @@ -35,17 +38,20 @@ ANF is a simple IR commonly used during functional programming. The ANF syntax i ::= (let ([VAR ]) ) | | ``` + Expressions in the ANF are classified into atomic expressions (aexp) and compound expressions (cexp). An atomic expression indicates a constant value, a variable, or an anonymous function. A compound expression consists of multiple atomic expressions, indicating that an anonymous function or primitive function call. The first input expression of a compound expression is the called function, and the other input expressions are the called parameters. The syntax of MindIR is inherited from the ANF and is defined as follows: -``` + +```python ::= | ::= Parameter ::= Scalar | Named | Tensor | Type | Shape - | Primitive | MetaFuncGraph | FuncGraph + | Primitive | MetaFuncGraph | FuncGraph ::= ( …) ::= | ``` + ANode in a MindIR corresponds to the atomic expression of ANF. ANode has two subclasses: ValueNode and ParameterNode. ValueNode refers to a constant node, which can carry a constant value (such as a scalar, symbol, tensor, type, and dimension), a primitive function (Primitive), a metafunction (MetaFuncGraph), or a common function (FuncGraph). In functional programming, the function definition itself is a value. ParameterNode refers to a parameter node, which indicates the formal parameter of a function. CNode in a MindIR corresponds to the compound expression of ANF, indicating a function call. @@ -53,7 +59,9 @@ CNode in a MindIR corresponds to the compound expression of ANF, indicating a fu During automatic differentiation of MindSpore, the gradient contribution of ParameterNode and CNode are calculated, and the final gradient of ParameterNode is returned. The gradient of ValueNode is not calculated. ## Example + The following uses a program code segment as an example to help you understand MindIR. + ```python def func(x, y): return x / y @@ -65,8 +73,10 @@ def test_f(x, y): c = b * func(a, b) return c ``` + The ANF corresponding to the Python code is as follows: -``` + +```python lambda (x, y) let a = x - 1 in let b = a + y in @@ -77,26 +87,31 @@ lambda (x, y) let c = b * %1 in c end ``` + The corresponding MindIR is [ir.dot](https://gitee.com/mindspore/docs/blob/master/docs/note/source_en/design/mindspore/images/ir/ir.dot). -![](./images/ir/ir.png) +![image](./images/ir/ir.png) In a MindIR, a function graph (FuncGraph) indicates the definition of a common function. A directed acyclic graph (DAG) usually consists of ParameterNode, ValueNode, and CNode, which clearly shows the calculation process from parameters to return values. As shown in the preceding figure, the `test_f` and `func` functions in the Python code are converted into two function graphs. The `x` and `y` parameters are converted into ParameterNode in the function graphs, and each expression is converted into a CNode. The first input of CNode links to the called functions, for example, `add`, `func`, and `return` in the figure. It should be noted that these nodes are all `ValueNode` because they are considered as constant function values. Other input of CNode links to the called parameters. The parameter values can be obtained from the ParameterNode, ValueNode, and other CNode. In the ANF, each expression is bound as a variable by using the let expression, and the dependency on the expression output is represented by referencing the variable. In the MindIR, each expression is bound as a node, and the dependency is represented by using the directed edges between nodes. ## Saving IR + `context.set_context(save_graphs=True)` is used to save the intermediate code in each compilation phase. The intermediate code can be saved in two formats. One is the text format with the suffix `.ir`, and the other is the graphical format with the suffix `.dot`. When the network scale is small, you are advised to use the graphical format that is more intuitive. When the network scale is large, you are advised to use the text format that is more efficient. You can run the graphviz command to convert a .dot file to the picture format. For example, you can run the `dot -Tpng *.dot -o *.png` command to convert a .dot file to a .png file. ## Function-style Semantics + Compared with traditional computational graphs, MindIR can not only express data dependency between operators, but also express rich function-style semantics. + ### Higher-Order Functions + In a MindIR, a function is defined by a subgraph. However, the function itself can be transferred as the input or output of other higher-order functions. In the following simple example, the `f` function is transferred as a parameter into the `g` function. Therefore, the `g` function is a higher-order function that receives function input, and the actual call site of the `f` function is inside the `g` function. -``` +```python @ms_function def hof(x): def f(x): @@ -108,14 +123,16 @@ def hof(x): ``` The corresponding MindIR is [hof.dot](https://gitee.com/mindspore/docs/blob/master/docs/note/source_en/design/mindspore/images/ir/hof.dot). -![](./images/ir/hof.png) +![image](./images/ir/hof.png) In the actual network training scripts, the automatic derivation generic function `GradOperation` and `Partial` and `HyperMap` that are commonly used in the optimizer are typical high-order functions. Higher-order semantics greatly improve the flexibility and simplicity of MindSpore representations. ### Control Flows + In a MindIR, control flows are expressed in the form of high-order function selection and calling. This form transforms a control flow into a data flow of higher-order functions, making the automatic differential algorithm more powerful. It not only supports automatic differentiation of data flows, but also supports automatic differentiation of control flows such as conditional jumps, loops, and recursion. The following uses a simple Fibonacci instance as an example. + ```python @ms_function def fibonacci(n): @@ -128,15 +145,16 @@ def fibonacci(n): ``` The corresponding MindIR is [cf.dot](https://gitee.com/mindspore/docs/blob/master/docs/note/source_en/design/mindspore/images/ir/cf.dot). -![](./images/ir/cf.png) +![image](./images/ir/cf.png) `fibonacci` is a top-level function graph. Two function graphs at the top level are selected and called by `switch`. `✓fibonacci` is the True branch of the first `if`, and `✗fibonacci` is the False branch of the first `if`. `✓✗fibonacci` called in `✗fibonacci` is the True branch of `elif`, and `✗✗fibonacci` is the False branch of `elif`. The key is, in a MindIR, conditional jumps and recursion are represented in the form of higher-order control flows. For example, `✓✗fibonacci` and `✗fibonacci` are transferred in as parameters of the `switch` operator. `switch` selects a function as the return value based on the condition parameter. In this way, `switch` performs a binary selection operation on the input functions as common values and does not call the functions. The real function call is completed on CNode following `switch`. - ### Free Variables and Closures + Closure is a programming language feature that refers to the combination of code blocks and scope environment. A free variable refers to a variable in the scope environment referenced in a code block instead of a local variable. In a MindIR, a code block is represented as a function graph. The scope environment can be considered as the context where the function is called. The capture method of free variables is value copy instead of reference. A typical closure instance is as follows: + ```python @ms_function def func_outer(a, b): @@ -153,14 +171,15 @@ def ms_closure(): ``` The corresponding MindIR is [closure.dot](https://gitee.com/mindspore/docs/blob/master/docs/note/source_en/design/mindspore/images/ir/closure.dot). -![](./images/ir/closure.png) +![image](./images/ir/closure.png) In the example, `a` and `b` are free variables because the variables `a` and `b` in `func_inner` are parameters defined in the referenced parent graph `func_outer`. The variable `closure` is a closure, which is the combination of the function `func_inner` and its context `func_outer(1, 2)`. Therefore, the result of `out1` is 4, which is equivalent to `1+2+1`, and the result of `out2` is 5, which is equivalent to `1+2+2`. ## References + [1] C. Click and M. Paleczny. A simple graph-based intermediate representation. SIGPLAN Not., 30:35–49, March 1995. [2] Roland Leißa, Marcel Köster, and Sebastian Hack. A graph-based higher-order intermediate representation. In Proceedings of the 13th Annual IEEE/ACM International Symposium on -Code Generation and Optimization, pages 202–212. IEEE Computer Society, 2015. \ No newline at end of file +Code Generation and Optimization, pages 202–212. IEEE Computer Society, 2015. diff --git a/docs/note/source_en/design/mindspore/profiler_design.md b/docs/note/source_en/design/mindspore/profiler_design.md index 9acb50afb7..e8dd67c9ff 100644 --- a/docs/note/source_en/design/mindspore/profiler_design.md +++ b/docs/note/source_en/design/mindspore/profiler_design.md @@ -33,6 +33,7 @@ To support model development and performance debugging in MindSpore, an easy-to-use profile tool is required to intuitively display the performance information of each dimension of a network model, provide users with easy-to-use and abundant profiling functions, and help users quickly locate network performance faults. ## Profiler Architecture Design + The Profiler architecture design is introduced from the following three aspects: the overall context interaction relationship of Profiler; the internal structure of Profiler, including the module structure and module layers; the interactive calling relationship between modules. ### Context @@ -50,6 +51,7 @@ As shown in the preceding figure, the interaction between the Profiler and other 2. MindSpore Profiler parses the original data in the user script and generates the intermediate data results in the specified folder. 3. MindInsight Profiler connects to the intermediate data and provides the visualized Profiler function for users. + ### Module Structure Modules are classified into the following layers: @@ -58,8 +60,8 @@ Modules are classified into the following layers: Figure 2 Relationships between modules at different layers - Module functions are as follows: + 1. ProfilerAPI is a calling entry provided by code, including the performance collection startup API and analysis API. 2. Controller is a module at a layer lower than that of ProfilerAPI. It is called by the startup API of ProfilerAPI to start or stop the performance collection function. The original data is written to a fixed position by ada. 3. Parser is a module for parsing original performance data which is collected on the device and cannot be directly understood by users. Parser parses, combines, and converts the data to generate intermediate results that can be understood by users and analyzed by upper layers. @@ -67,6 +69,7 @@ Module functions are as follows: 5. RESTful is used to call the common API provided by the backend Analyser to obtain objective data and use RESTful to connect to the frontend. ### Internal Module Interaction + Users can use API or RESTful to complete internal module interaction process. The following uses the API as an example: ![time_order_profiler.png](./images/time_order_profiler.png) @@ -82,20 +85,22 @@ The interaction process of each module is as follows: 3. Profiler API analysis API uses the Parser module to parse performance data, generates intermediate results, calls the Aalayser module to analyze the results, and returns various information to users. ## Sub-Module Design + ### ProfilerAPI and Controller #### Description + ProfilerAPI provides an entry API in the training script for users to start performance collection and analyze performance data. ProfilerAPI delivers commands through Controller to control the startup of ada. #### Design + ProfilerAPI belongs to the API layer of upper-layer application and is integrated by the training script. The function is divided into two parts: - Before training, call the bottom-layer Controller API to deliver a command to start a profiling task. - After training, call the bottom-layer Controller API to deliver commands to stop the profiling task, call the Analyser and Parser APIs to parse data files and generate result data such as operator performance statistics and training trace statistics. - Controller provides an API for the upper layer, calls API of the lower-layer performance collection module, and delivers commands for starting and stopping performance collection. The generated original performance data includes: @@ -106,9 +111,13 @@ The generated original performance data includes: - `training_trace.46.dev.profiler_default_tag` file: stores the start and end time of each step and time of step interval, forward and backward propagation, and step tail. ### Parser + #### Description + Parser is a module for parsing original performance data which is collected on the device and cannot be directly understood by users. Parser parses, combines, and converts the data to generate intermediate results that can be understood by users and analyzed by upper layers. + #### Design + ![parser_module_profiler.png](./images/parser_module_profiler.png) Figure 4 Parser module @@ -123,6 +132,7 @@ As shown in the preceding figure, there are HWTS Parser, AI CPU Parser, Framewor ### Analyser #### Description + Analyzer is used to filter, sort, query, and page the intermediate results generated at the parsing stage. #### Design @@ -142,9 +152,10 @@ Currently, there are two types of analyzers for operator information: To hide the internal implementation of Analyser and facilitate calling, the simple factory mode is used to obtain the specified Analyser through AnalyserFactory. - ### Proposer + #### Description + Proposer is a Profiler performance optimization suggestion module. Proposer calls the Analyser module to obtain performance data, analyzes the performance data based on optimization rules, and displays optimization suggestions for users through the UI and API. #### Design @@ -172,4 +183,4 @@ Figure 7 Proposer class As shown in the preceding figure: - Proposers of various types inherit the abstract class Proposer and implement the analyze methods. -- API and CLI call the ProposerFactory to obtain the Proposer and call the Proposer.analyze function to obtain the optimization suggestions of each type of Proposer. \ No newline at end of file +- API and CLI call the ProposerFactory to obtain the Proposer and call the Proposer.analyze function to obtain the optimization suggestions of each type of Proposer. diff --git a/docs/note/source_en/glossary.md b/docs/note/source_en/glossary.md index 852afab1c8..6ec11c85d3 100644 --- a/docs/note/source_en/glossary.md +++ b/docs/note/source_en/glossary.md @@ -4,7 +4,7 @@ -| Acronym and Abbreviation | Description | +| Acronym and Abbreviation | Description | | ----- | ----- | | ACL | Ascend Computer Language, for users to develop deep neural network applications, which provides the C++ API library including device management, context management, stream management, memory management, model loading and execution, operator loading and execution, media data processing, etc. | | Ascend | Name of Huawei Ascend series chips. | diff --git a/docs/note/source_en/help_seeking_path.md b/docs/note/source_en/help_seeking_path.md index ecaa964ae6..9ac8c6bb6d 100644 --- a/docs/note/source_en/help_seeking_path.md +++ b/docs/note/source_en/help_seeking_path.md @@ -10,22 +10,20 @@ This document describes how to seek help and support when you encounter problems - Website search - - Go to the [official search page](https://www.mindspore.cn/search/en). - - When encountering a problem, search on the official website first, which is simple and efficient. - - Enter a keyword in the search box and click the search icon. The related content is displayed. - - Resolve the problem based on the search result. - + - Go to the [official search page](https://www.mindspore.cn/search/en). + - When encountering a problem, search on the official website first, which is simple and efficient. + - Enter a keyword in the search box and click the search icon. The related content is displayed. + - Resolve the problem based on the search result. - User group consultation - - If you cannot solve the problem using the website search method and want a quick consultation. Get support by joining the [Slack group](https://mindspore.slack.com/join/shared_invite/zt-dgk65rli-3ex4xvS4wHX7UDmsQmfu8w#/ ) and start a conversation with our members. - - Resolve the problem by asking experts or communicating with other users. - + - If you cannot solve the problem using the website search method and want a quick consultation. Get support by joining the [Slack group](https://mindspore.slack.com/join/shared_invite/zt-dgk65rli-3ex4xvS4wHX7UDmsQmfu8w#/ ) and start a conversation with our members. + - Resolve the problem by asking experts or communicating with other users. - Forum Help-Seeking - - If you want a detailed solution, start a help post on the [Ascend forum](https://forum.huawei.com/enterprise/en/forum-100504.html). - - After the post is sent, a forum moderator collects the question and contacts technical experts to answer the question. The question will be resolved within three working days. - - Resolve the problem by referring to solutions provided by technical experts. + - If you want a detailed solution, start a help post on the [Ascend forum](https://forum.huawei.com/enterprise/en/forum-100504.html). + - After the post is sent, a forum moderator collects the question and contacts technical experts to answer the question. The question will be resolved within three working days. + - Resolve the problem by referring to solutions provided by technical experts. - If the expert test result shows that the MindSpore function needs to be improved, you are advised to submit an issue in the [MindSpore repository](https://gitee.com/mindspore). Issues will be resolved in later versions. \ No newline at end of file + If the expert test result shows that the MindSpore function needs to be improved, you are advised to submit an issue in the [MindSpore repository](https://gitee.com/mindspore). Issues will be resolved in later versions. diff --git a/docs/note/source_en/network_list_ms.md b/docs/note/source_en/network_list_ms.md index 8cbf3ba980..169d2137cc 100644 --- a/docs/note/source_en/network_list_ms.md +++ b/docs/note/source_en/network_list_ms.md @@ -13,7 +13,7 @@ ## Model Zoo -| Domain | Sub Domain | Network | Ascend(Graph) | Ascend(PyNative) | GPU(Graph) | GPU(PyNative)| CPU(Graph) +| Domain | Sub Domain | Network | Ascend(Graph) | Ascend(PyNative) | GPU(Graph) | GPU(PyNative)| CPU(Graph) |:------ |:------| :----------- |:------ |:------ |:------ |:------ |:----- |Computer Vision (CV) | Image Classification | [AlexNet](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/alexnet/src/alexnet.py) | Supported | Supported | Supported | Supported | Doing | Computer Vision (CV) | Image Classification | [GoogleNet](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/googlenet/src/googlenet.py) | Supported | Supported | Supported | Supported | Doing diff --git a/docs/note/source_en/object_detection_lite.md b/docs/note/source_en/object_detection_lite.md index 6e02865426..10089f2a80 100644 --- a/docs/note/source_en/object_detection_lite.md +++ b/docs/note/source_en/object_detection_lite.md @@ -23,4 +23,3 @@ The following table shows the data of some object detection models using MindSpo | Model name | Size | mAP(IoU=0.50:0.95) | CPU 4 thread delay (ms) | |-----------------------| :----------: | :----------: | :-----------: | | [MobileNetv2-SSD](https://download.mindspore.cn/model_zoo/official/lite/ssd_mobilenetv2_lite/ssd.ms) | 16.7 | 0.22 | 25.4 | - diff --git a/docs/note/source_en/operator_list_implicit.md b/docs/note/source_en/operator_list_implicit.md index 955ea0a2fe..5eb631df80 100644 --- a/docs/note/source_en/operator_list_implicit.md +++ b/docs/note/source_en/operator_list_implicit.md @@ -17,24 +17,26 @@ ## Implicit Type Conversion ### conversion rules -* Scalar and Tensor operations: during operation, the scalar is automatically converted to Tensor, and the data type is consistent with the Tensor data type involved in the operation; + +- Scalar and Tensor operations: during operation, the scalar is automatically converted to Tensor, and the data type is consistent with the Tensor data type involved in the operation; when Tensor is bool data type and the scalar is int or float, both the scalar and Tensor are converted to the Tensor with the data type of int32 or float32; when Tensor is int or uint data type and the scalar is float, both the scalar and Tensor are converted to the Tensor with the data type of float32. -* Tensor operation of different data types: the priority of data type is bool < uint8 < int8 < int16 < int32 < int64 < float16 < float32 - + 本文介绍MindSpore的基准性能。MindSpore网络定义可参考[Model Zoo](https://gitee.com/mindspore/mindspore/tree/master/model_zoo)。 @@ -32,7 +32,7 @@ ### BERT -| Network | Network Type | Dataset | MindSpore Version | Resource                 | Precision | Batch Size | Throughput | Speedup | +| Network | Network Type | Dataset | MindSpore Version | Resource                 | Precision | Batch Size | Throughput | Speedup | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | BERT-Large | Attention | zhwiki | 0.5.0-beta | Ascend: 1 * Ascend 910
CPU:24 Cores | Mixed | 96 | 269 sentences/sec | - | | | | | | Ascend: 8 * Ascend 910
CPU:192 Cores | Mixed | 96 | 2069 sentences/sec | 0.96 | @@ -45,7 +45,7 @@ | Network | Network Type | Dataset | MindSpore Version | Resource                 | Precision | Batch Size | Throughput | Speedup | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Wide & Deep | Recommend | Criteo | 0.6.0-beta | Ascend: 1 * Ascend 910
CPU:24 Cores | Mixed | 16000 | 796892 samples/sec | - | -| | | | | Ascend: 8 * Ascend 910
CPU:192 Cores | Mixed | 16000*8 | 4872849 samples/sec | 0.76 | +| | | | | Ascend: 8 \* Ascend 910
CPU:192 Cores | Mixed | 16000*8 | 4872849 samples/sec | 0.76 | 1. 以上数据基于Atlas 800测试获得,且网络模型为数据并行。 2. 业界其他开源框架数据可参考:[Wide & Deep For TensorFlow](https://github.com/NVIDIA/DeepLearningExamples/tree/master/TensorFlow/Recommendation/WideAndDeep)。 @@ -55,9 +55,9 @@ | Network | Network Type | Dataset | MindSpore Version | Resource                 | Precision | Batch Size | Throughput | Speedup | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Wide & Deep | Recommend | Criteo | 0.6.0-beta | Ascend: 1 * Ascend 910
CPU:24 Cores | Mixed | 8000 | 68715 samples/sec | - | -| | | | | Ascend: 8 * Ascend 910
CPU:192 Cores | Mixed | 8000*8 | 283830 samples/sec | 0.51 | -| | | | | Ascend: 16 * Ascend 910
CPU:384 Cores | Mixed | 8000*16 | 377848 samples/sec | 0.34 | -| | | | | Ascend: 32 * Ascend 910
CPU:768 Cores | Mixed | 8000*32 | 433423 samples/sec | 0.20 | +| | | | | Ascend: 8 \* Ascend 910
CPU:192 Cores | Mixed | 8000*8 | 283830 samples/sec | 0.51 | +| | | | | Ascend: 16 \* Ascend 910
CPU:384 Cores | Mixed | 8000*16 | 377848 samples/sec | 0.34 | +| | | | | Ascend: 32 \* Ascend 910
CPU:768 Cores | Mixed | 8000*32 | 433423 samples/sec | 0.20 | 1. 以上数据基于Atlas 800测试获得,且网络模型为模型并行。 2. 业界其他开源框架数据可参考:[Wide & Deep For TensorFlow](https://github.com/NVIDIA/DeepLearningExamples/tree/master/TensorFlow/Recommendation/WideAndDeep)。 -- Gitee From e722afef972f4b183ee55f0951460cd50ed64615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E9=9B=B7?= Date: Fri, 16 Oct 2020 17:01:23 +0800 Subject: [PATCH 14/21] mod md files --- .../apply_deep_probability_programming.md | 158 ++++++++++------ .../apply_gradient_accumulation.md | 17 +- .../apply_host_device_training.md | 10 +- .../apply_parameter_server_training.md | 16 +- .../apply_quantization_aware_training.md | 39 ++-- .../advanced_use/convert_dataset.md | 7 +- .../advanced_use/custom_debugging_info.md | 33 ++-- .../advanced_use/custom_operator_ascend.md | 23 ++- .../advanced_use/cv_mobilenetv2_fine_tune.md | 126 ++++++------- .../source_zh_cn/advanced_use/cv_resnet50.md | 15 +- .../cv_resnet50_second_order_optimizer.md | 72 +++++--- .../advanced_use/debug_in_pynative_mode.md | 34 ++-- .../source_zh_cn/advanced_use/debugger.md | 14 +- .../distributed_training_ascend.md | 17 +- .../advanced_use/distributed_training_gpu.md | 7 +- .../advanced_use/enable_mixed_precision.md | 5 +- .../evaluate_the_model_during_training.md | 18 +- .../improve_model_security_nad.md | 33 ++-- .../lineage_and_scalars_comparision.md | 1 + .../advanced_use/migrate_3rd_scripts.md | 11 +- .../migrate_3rd_scripts_mindconverter.md | 14 +- .../advanced_use/nlp_bert_poetry.md | 50 +++--- .../advanced_use/nlp_sentimentnet.md | 48 +++-- .../advanced_use/optimize_data_processing.md | 21 ++- .../advanced_use/performance_profiling.md | 22 ++- .../advanced_use/performance_profiling_gpu.md | 14 +- ..._user_privacy_with_differential_privacy.md | 9 +- .../save_load_model_hybrid_parallel.md | 169 +++++++++--------- .../advanced_use/summary_record.md | 35 ++-- .../test_model_security_fuzzing.md | 12 +- ...est_model_security_membership_inference.md | 47 ++--- .../advanced_use/use_on_the_cloud.md | 10 +- .../quick_start/linear_regression.md | 54 ++---- .../source_zh_cn/quick_start/quick_start.md | 36 ++-- .../source_zh_cn/quick_start/quick_video.md | 4 +- .../load_model_for_inference_and_transfer.md | 15 +- .../source_zh_cn/use/publish_model.md | 15 +- .../training/source_zh_cn/use/save_model.md | 3 +- .../README.md | 8 +- 39 files changed, 696 insertions(+), 546 deletions(-) diff --git a/tutorials/training/source_zh_cn/advanced_use/apply_deep_probability_programming.md b/tutorials/training/source_zh_cn/advanced_use/apply_deep_probability_programming.md index da0cbc368b..9c03363c1a 100644 --- a/tutorials/training/source_zh_cn/advanced_use/apply_deep_probability_programming.md +++ b/tutorials/training/source_zh_cn/advanced_use/apply_deep_probability_programming.md @@ -1,4 +1,5 @@ # 深度概率编程 + `Ascend` `GPU` `全流程` `初级` `中级` `高级` @@ -29,16 +30,20 @@ ## 概述 + 深度学习模型具有强大的拟合能力,而贝叶斯理论具有很好的可解释能力。MindSpore深度概率编程(MindSpore Deep Probabilistic Programming, MDP)将深度学习和贝叶斯学习结合,通过设置网络权重为分布、引入隐空间分布等,可以对分布进行采样前向传播,由此引入了不确定性,从而增强了模型的鲁棒性和可解释性。MDP不仅包含通用、专业的概率学习编程语言,适用于“专业”用户,而且支持使用开发深度学习模型的逻辑进行概率编程,让初学者轻松上手;此外,还提供深度概率学习的工具箱,拓展贝叶斯应用功能。 本章将详细介绍深度概率编程在MindSpore上的应用。在动手进行实践之前,确保,你已经正确安装了MindSpore 0.7.0-beta及其以上版本。本章的具体内容如下: + 1. 介绍如何使用[bnn_layers模块](https://gitee.com/mindspore/mindspore/tree/master/mindspore/nn/probability/bnn_layers)实现贝叶斯神经网(Bayesian Neural Network, BNN); 2. 介绍如何使用[variational模块](https://gitee.com/mindspore/mindspore/tree/master/mindspore/nn/probability/infer/variational)和[dpn模块](https://gitee.com/mindspore/mindspore/tree/master/mindspore/nn/probability/dpn)实现变分自编码器(Variational AutoEncoder, VAE); 3. 介绍如何使用[transforms模块](https://gitee.com/mindspore/mindspore/tree/master/mindspore/nn/probability/transforms)实现DNN(Deep Neural Network, DNN)一键转BNN; 4. 介绍如何使用[toolbox模块](https://gitee.com/mindspore/mindspore/blob/master/mindspore/nn/probability/toolbox/uncertainty_evaluation.py)实现不确定性估计。 ## 使用贝叶斯神经网络 + 贝叶斯神经网络是由概率模型和神经网络组成的基本模型,它的权重不再是一个确定的值,而是一个分布。本例介绍了如何使用MDP中的bnn_layers模块实现贝叶斯神经网络,并利用贝叶斯神经网络实现一个简单的图片分类功能,整体流程如下: + 1. 处理MNIST数据集; 2. 定义贝叶斯LeNet网络; 3. 定义损失函数和优化器; @@ -47,12 +52,14 @@ > 本例面向GPU或Ascend 910 AI处理器平台,你可以在这里下载完整的样例代码: ### 处理数据集 + 本例子使用的是MNIST数据集,数据处理过程与教程中的[实现一个图片分类应用](https://www.mindspore.cn/tutorial/training/zh-CN/master/quick_start/quick_start.html)一致。 ### 定义贝叶斯神经网络 + 本例使用的是Bayesian LeNet。利用bnn_layers模块构建贝叶斯神经网络的方法与构建普通的神经网络相同。值得注意的是,`bnn_layers`和普通的神经网络层可以互相组合。 -``` +```python import mindspore.nn as nn from mindspore.nn.probability import bnn_layers import mindspore.ops.operations as P @@ -98,7 +105,9 @@ class BNNLeNet5(nn.Cell): x = self.fc3(x) return x ``` + ### 定义损失函数和优化器 + 接下来需要定义损失函数(Loss)和优化器(Optimizer)。损失函数是深度学习的训练目标,也叫目标函数,可以理解为神经网络的输出(Logits)和标签(Labels)之间的距离,是一个标量数据。 常见的损失函数包括均方误差、L2损失、Hinge损失、交叉熵等等。图像分类应用通常采用交叉熵损失(CrossEntropy)。 @@ -107,7 +116,7 @@ class BNNLeNet5(nn.Cell): MindSpore中定义损失函数和优化器的代码样例如下: -``` +```python # loss function definition criterion = SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean") @@ -116,9 +125,10 @@ optimizer = AdamWeightDecay(params=network.trainable_params(), learning_rate=0.0 ``` ### 训练网络 + 贝叶斯神经网络的训练过程与DNN基本相同,唯一不同的是将`WithLossCell`替换为适用于BNN的`WithBNNLossCell`。除了`backbone`和`loss_fn`两个参数之外,`WithBNNLossCell`增加了`dnn_factor`和`bnn_factor`两个参数。`dnn_factor`是由损失函数计算得到的网络整体损失的系数,`bnn_factor`是每个贝叶斯层的KL散度的系数,这两个参数是用来平衡网络整体损失和贝叶斯层的KL散度的,防止KL散度的值过大掩盖了网络整体损失。 -``` +```python net_with_loss = bnn_layers.WithBNNLossCell(network, criterion, dnn_factor=60000, bnn_factor=0.000001) train_bnn_network = TrainOneStepCell(net_with_loss, optimizer) train_bnn_network.set_train() @@ -136,9 +146,10 @@ for i in range(epoch): print('Epoch: {} \tTraining Loss: {:.4f} \tTraining Accuracy: {:.4f} \tvalidation Accuracy: {:.4f}'. format(i, train_loss, train_acc, valid_acc)) ``` + 其中,`train_model`和`validate_model`在MindSpore中的代码样例如下: -``` +```python def train_model(train_net, net, dataset): accs = [] loss_sum = 0 @@ -172,17 +183,22 @@ def validate_model(net, dataset): ``` ## 使用变分自编码器 + 接下来介绍如何使用MDP中的variational模块和dpn模块实现变分自编码器。变分自编码器是经典的应用了变分推断的深度概率模型,用来学习潜在变量的表示,通过该模型,不仅可以压缩输入数据,还可以生成该类型的新图像。本例的整体流程如下: + 1. 定义变分自编码器; 2. 定义损失函数和优化器; 3. 处理数据; 4. 训练网络; 5. 生成新样本或重构输入样本。 + > 本例面向GPU或Ascend 910 AI处理器平台,你可以在这里下载完整的样例代码: + ### 定义变分自编码器 + 使用dpn模块来构造变分自编码器尤为简单,你只需要自定义编码器和解码器(DNN模型),调用`VAE`接口即可。 -``` +```python class Encoder(nn.Cell): def __init__(self): super(Encoder, self).__init__() @@ -218,11 +234,13 @@ encoder = Encoder() decoder = Decoder() vae = VAE(encoder, decoder, hidden_size=400, latent_size=20) ``` + ### 定义损失函数和优化器 + 接下来需要定义损失函数(Loss)和优化器(Optimizer)。本例使用的损失函数是`ELBO`,`ELBO`是变分推断专用的损失函数;本例使用的优化器是`Adam`。 MindSpore中定义损失函数和优化器的代码样例如下: -``` +```python # loss function definition net_loss = ELBO(latent_prior='Normal', output_prior='Normal') @@ -231,24 +249,30 @@ optimizer = nn.Adam(params=vae.trainable_params(), learning_rate=0.001) net_with_loss = nn.WithLossCell(vae, net_loss) ``` + ### 处理数据 + 本例使用的是MNIST数据集,数据处理过程与教程中的[实现一个图片分类应用](https://www.mindspore.cn/tutorial/training/zh-CN/master/quick_start/quick_start.html)一致。 ### 训练网络 + 使用variational模块中的`SVI`接口对VAE网络进行训练。 -``` +```python from mindspore.nn.probability.infer import SVI vi = SVI(net_with_loss=net_with_loss, optimizer=optimizer) vae = vi.run(train_dataset=ds_train, epochs=10) trained_loss = vi.get_train_loss() ``` + 通过`vi.run`可以得到训练好的网络,使用`vi.get_train_loss`可以得到训练之后的损失。 + ### 生成新样本或重构输入样本 + 利用训练好的VAE网络,我们可以生成新的样本或重构输入样本。 -``` +```python IMAGE_SHAPE = (-1, 1, 32, 32) generated_sample = vae.generate_sample(64, IMAGE_SHAPE) for sample in ds_train.create_dict_iterator(): @@ -257,16 +281,21 @@ for sample in ds_train.create_dict_iterator(): ``` ## DNN一键转换成BNN + 对于不熟悉贝叶斯模型的DNN研究人员,MDP提供了高级API`TransformToBNN`,支持DNN模型一键转换成BNN模型。目前在LeNet,ResNet,MobileNet,VGG等模型上验证了API的通用性。本例将会介绍如何使用transforms模块中的`TransformToBNN`API实现DNN一键转换成BNN,整体流程如下: + 1. 定义DNN模型; 2. 定义损失函数和优化器; 3. 实现功能一:转换整个模型; 4. 实现功能二:转换指定类型的层。 + > 本例面向GPU或Ascend 910 AI处理器平台,你可以在这里下载完整的样例代码: + ### 定义DNN模型 + 本例使用的DNN模型是LeNet。 -``` +```python from mindspore.common.initializer import TruncatedNormal import mindspore.nn as nn import mindspore.ops.operations as P @@ -332,9 +361,10 @@ class LeNet5(nn.Cell): x = self.fc3(x) return x ``` + LeNet的网络结构如下: -``` +```text LeNet5 (conv1) Conv2dinput_channels=1, output_channels=6, kernel_size=(5, 5),stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False (conv2) Conv2dinput_channels=6, output_channels=16, kernel_size=(5, 5),stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False @@ -347,9 +377,10 @@ LeNet5 ``` ### 定义损失函数和优化器 + 接下来需要定义损失函数(Loss)和优化器(Optimizer)。本例使用交叉熵损失作为损失函数,`Adam`作为优化器。 -``` +```python network = LeNet5() # loss function definition @@ -361,10 +392,12 @@ optimizer = AdamWeightDecay(params=network.trainable_params(), learning_rate=0.0 net_with_loss = WithLossCell(network, criterion) train_network = TrainOneStepCell(net_with_loss, optimizer) ``` + ### 实例化TransformToBNN + `TransformToBNN`的`__init__`函数定义如下: -``` +```python class TransformToBNN: def __init__(self, trainable_dnn, dnn_factor=1, bnn_factor=1): net_with_loss = trainable_dnn.network @@ -375,18 +408,21 @@ class TransformToBNN: self.bnn_factor = bnn_factor self.bnn_loss_file = None ``` + 参数`trainable_bnn`是经过`TrainOneStepCell`包装的可训练DNN模型,`dnn_factor`和`bnn_factor`分别为由损失函数计算得到的网络整体损失的系数和每个贝叶斯层的KL散度的系数。 MindSpore中实例化`TransformToBNN`的代码如下: -``` +```python from mindspore.nn.probability import transforms bnn_transformer = transforms.TransformToBNN(train_network, 60000, 0.000001) ``` + ### 实现功能一:转换整个模型 + `transform_to_bnn_model`方法可以将整个DNN模型转换为BNN模型。其定义如下: -``` +```python def transform_to_bnn_model(self, get_dense_args=lambda dp: {"in_channels": dp.in_channels, "has_bias": dp.has_bias, "out_channels": dp.out_channels, "activation": dp.activation}, @@ -413,90 +449,94 @@ bnn_transformer = transforms.TransformToBNN(train_network, 60000, 0.000001) Cell, a trainable BNN model wrapped by TrainOneStepCell. """ ``` + 参数`get_dense_args`指定从DNN模型的全连接层中获取哪些参数,`get_conv_args`指定从DNN模型的卷积层中获取哪些参数,参数`add_dense_args`和`add_conv_args`分别指定了要为BNN层指定哪些新的参数值。需要注意的是,`add_dense_args`中的参数不能与`get_dense_args`重复,`add_conv_args`和`get_conv_args`也是如此。 在MindSpore中将整个DNN模型转换成BNN模型的代码如下: -``` +```python train_bnn_network = bnn_transformer.transform_to_bnn_model() ``` + 整个模型转换后的结构如下: -``` +```text LeNet5 (conv1) ConvReparam in_channels=1, out_channels=6, kernel_size=(5, 5), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, weight_mean=Parameter (name=conv1.weight_posterior.mean), weight_std=Parameter (name=conv1.weight_posterior.untransformed_std), has_bias=False (weight_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (weight_posterior) NormalPosterior (normal) Normalbatch_shape = None - - + + (conv2) ConvReparam in_channels=6, out_channels=16, kernel_size=(5, 5), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, weight_mean=Parameter (name=conv2.weight_posterior.mean), weight_std=Parameter (name=conv2.weight_posterior.untransformed_std), has_bias=False (weight_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (weight_posterior) NormalPosterior (normal) Normalbatch_shape = None - - + + (fc1) DenseReparam in_channels=400, out_channels=120, weight_mean=Parameter (name=fc1.weight_posterior.mean), weight_std=Parameter (name=fc1.weight_posterior.untransformed_std), has_bias=True, bias_mean=Parameter (name=fc1.bias_posterior.mean), bias_std=Parameter (name=fc1.bias_posterior.untransformed_std) (weight_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (weight_posterior) NormalPosterior (normal) Normalbatch_shape = None - + (bias_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (bias_posterior) NormalPosterior (normal) Normalbatch_shape = None - - + + (fc2) DenseReparam in_channels=120, out_channels=84, weight_mean=Parameter (name=fc2.weight_posterior.mean), weight_std=Parameter (name=fc2.weight_posterior.untransformed_std), has_bias=True, bias_mean=Parameter (name=fc2.bias_posterior.mean), bias_std=Parameter (name=fc2.bias_posterior.untransformed_std) (weight_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (weight_posterior) NormalPosterior (normal) Normalbatch_shape = None - + (bias_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (bias_posterior) NormalPosterior (normal) Normalbatch_shape = None - - + + (fc3) DenseReparam in_channels=84, out_channels=10, weight_mean=Parameter (name=fc3.weight_posterior.mean), weight_std=Parameter (name=fc3.weight_posterior.untransformed_std), has_bias=True, bias_mean=Parameter (name=fc3.bias_posterior.mean), bias_std=Parameter (name=fc3.bias_posterior.untransformed_std) (weight_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (weight_posterior) NormalPosterior (normal) Normalbatch_shape = None - + (bias_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (bias_posterior) NormalPosterior (normal) Normalbatch_shape = None - - + + (relu) ReLU (max_pool2d) MaxPool2dkernel_size=2, stride=2, pad_mode=VALID (flatten) Flatten ``` + 可以看到,整个LeNet网络中的卷积层和全连接层都转变成了相应的贝叶斯层。 ### 实现功能二:转换指定类型的层 + `transform_to_bnn_layer`方法可以将DNN模型中指定类型的层(nn.Dense或者nn.Conv2d)转换为对应的贝叶斯层。其定义如下: -``` +```python def transform_to_bnn_layer(self, dnn_layer, bnn_layer, get_args=None, add_args=None): r""" Transform a specific type of layers in DNN model to corresponding BNN layer. @@ -513,16 +553,18 @@ LeNet5 Cell, a trainable model wrapped by TrainOneStepCell, whose sprcific type of layer is transformed to the corresponding bayesian layer. """ ``` + 参数`dnn_layer`指定将哪个类型的DNN层转换成BNN层,`bnn_layer`指定DNN层将转换成哪个类型的BNN层,`get_args`和`add_args`分别指定从DNN层中获取哪些参数和要为BNN层的哪些参数重新赋值。 在MindSpore中将DNN模型中的Dense层转换成相应贝叶斯层`DenseReparam`的代码如下: -``` +```python train_bnn_network = bnn_transformer.transform_to_bnn_layer(nn.Dense, bnn_layers.DenseReparam) ``` + 转换后网络的结构如下: -``` +```text LeNet5 (conv1) Conv2dinput_channels=1, output_channels=6, kernel_size=(5, 5),stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False (conv2) Conv2dinput_channels=6, output_channels=16, kernel_size=(5, 5),stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False @@ -530,55 +572,58 @@ LeNet5 in_channels=400, out_channels=120, weight_mean=Parameter (name=fc1.weight_posterior.mean), weight_std=Parameter (name=fc1.weight_posterior.untransformed_std), has_bias=True, bias_mean=Parameter (name=fc1.bias_posterior.mean), bias_std=Parameter (name=fc1.bias_posterior.untransformed_std) (weight_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (weight_posterior) NormalPosterior (normal) Normalbatch_shape = None - + (bias_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (bias_posterior) NormalPosterior (normal) Normalbatch_shape = None - - + + (fc2) DenseReparam in_channels=120, out_channels=84, weight_mean=Parameter (name=fc2.weight_posterior.mean), weight_std=Parameter (name=fc2.weight_posterior.untransformed_std), has_bias=True, bias_mean=Parameter (name=fc2.bias_posterior.mean), bias_std=Parameter (name=fc2.bias_posterior.untransformed_std) (weight_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (weight_posterior) NormalPosterior (normal) Normalbatch_shape = None - + (bias_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (bias_posterior) NormalPosterior (normal) Normalbatch_shape = None - - + + (fc3) DenseReparam in_channels=84, out_channels=10, weight_mean=Parameter (name=fc3.weight_posterior.mean), weight_std=Parameter (name=fc3.weight_posterior.untransformed_std), has_bias=True, bias_mean=Parameter (name=fc3.bias_posterior.mean), bias_std=Parameter (name=fc3.bias_posterior.untransformed_std) (weight_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (weight_posterior) NormalPosterior (normal) Normalbatch_shape = None - + (bias_prior) NormalPrior (normal) Normalmean = 0.0, standard deviation = 0.1 - + (bias_posterior) NormalPosterior (normal) Normalbatch_shape = None - - + + (relu) ReLU (max_pool2d) MaxPool2dkernel_size=2, stride=2, pad_mode=VALID (flatten) Flatten ``` + 可以看到,LeNet网络中的卷积层保持不变,全连接层变成了对应的贝叶斯层`DenseReparam`。 ## 使用不确定性估计工具箱 + 贝叶斯神经网络的优势之一就是可以获取不确定性,MDP在上层提供了不确定性估计的工具箱,用户可以很方便地使用该工具箱计算不确定性。不确定性意味着深度学习模型对预测结果的不确定程度。目前,大多数深度学习算法只能给出预测结果,而不能判断预测结果的可靠性。不确定性主要有两种类型:偶然不确定性和认知不确定性。 + - 偶然不确定性(Aleatoric Uncertainty):描述数据中的内在噪声,即无法避免的误差,这个现象不能通过增加采样数据来削弱。 - 认知不确定性(Epistemic Uncertainty):模型自身对输入数据的估计可能因为训练不佳、训练数据不够等原因而不准确,可以通过增加训练数据等方式来缓解。 @@ -587,7 +632,7 @@ LeNet5 以分类任务为例,本例中使用的模型是LeNet,数据集为MNIST,数据处理过程与教程中的[实现一个图片分类应用](https://www.mindspore.cn/tutorial/training/zh-CN/master/quick_start/quick_start.html)一致。为了评估测试示例的不确定性,使用工具箱的方法如下: -``` +```python from mindspore.nn.probability.toolbox.uncertainty_evaluation import UncertaintyEvaluation from mindspore.train.serialization import load_checkpoint, load_param_into_net @@ -610,4 +655,3 @@ for eval_data in ds_eval.create_dict_iterator(): epistemic_uncertainty = evaluation.eval_epistemic_uncertainty(eval_data) aleatoric_uncertainty = evaluation.eval_aleatoric_uncertainty(eval_data) ``` - diff --git a/tutorials/training/source_zh_cn/advanced_use/apply_gradient_accumulation.md b/tutorials/training/source_zh_cn/advanced_use/apply_gradient_accumulation.md index 96eccdf538..1210741557 100644 --- a/tutorials/training/source_zh_cn/advanced_use/apply_gradient_accumulation.md +++ b/tutorials/training/source_zh_cn/advanced_use/apply_gradient_accumulation.md @@ -36,6 +36,7 @@ 以MNIST作为示范数据集,自定义简单模型实现梯度累积。 ### 导入需要的库文件 + 下列是我们所需要的公共模块及MindSpore的模块及库文件。 ```python @@ -65,7 +66,9 @@ from model_zoo.official.cv.lenet.src.lenet import LeNet5 这里以LeNet网络为例进行介绍,当然也可以使用其它的网络,如ResNet-50、BERT等, 此部分代码由`model_zoo`中`lenet`目录下的[lenet.py]()导入。 ### 定义训练模型 + 将训练流程拆分为正向反向训练、参数更新和累积梯度清理三个部分: + - `TrainForwardBackward`计算loss和梯度,利用grad_sum实现梯度累加。 - `TrainOptim`实现参数更新。 - `TrainClear`实现对梯度累加变量grad_sum清零。 @@ -134,6 +137,7 @@ class TrainClear(Cell): ``` ### 定义训练过程 + 每个Mini-batch通过正反向训练计算loss和梯度,通过mini_steps控制每次更新参数前的累加次数。达到累加次数后进行参数更新和 累加梯度变量清零。 @@ -202,6 +206,7 @@ class GradientAccumulation: ``` ### 训练并保存模型 + 调用网络、优化器及损失函数,然后自定义`GradientAccumulation`的`train_process`接口,进行模型训练。 ```python @@ -226,13 +231,15 @@ if __name__ == "__main__": ``` ## 实验结果 + 在经历了10轮epoch之后,在测试集上的精度约为96.31%。 -**执行训练** +**执行训练**: + 1. 运行训练代码,查看运行结果。 ```shell - $ python train.py --data_path=./MNIST_Data + python train.py --data_path=./MNIST_Data ``` 输出如下,可以看到loss值随着训练逐步降低: @@ -247,17 +254,17 @@ if __name__ == "__main__": epoch: 10 step: 448 loss is 0.06443884 epoch: 10 step: 449 loss is 0.0067842817 ``` - + 2. 查看保存的CheckPoint文件。 训练过程中保存了CheckPoint文件`gradient_accumulation.ckpt`,即模型文件。 -**验证模型** +**验证模型**: 通过`model_zoo`中`lenet`目录下的[eval.py](),使用保存的CheckPoint文件,加载验证数据集,进行验证。 ```shell -$ python eval.py --data_path=./MNIST_Data --ckpt_path=./gradient_accumulation.ckpt --device_target=GPU +python eval.py --data_path=./MNIST_Data --ckpt_path=./gradient_accumulation.ckpt --device_target=GPU ``` 输出如下,可以看到使用验证的数据集,正确率在96.31%左右,与batch_size为32的验证结果一致。 diff --git a/tutorials/training/source_zh_cn/advanced_use/apply_host_device_training.md b/tutorials/training/source_zh_cn/advanced_use/apply_host_device_training.md index 6e8b3ebc39..521ffc5b22 100644 --- a/tutorials/training/source_zh_cn/advanced_use/apply_host_device_training.md +++ b/tutorials/training/source_zh_cn/advanced_use/apply_host_device_training.md @@ -47,16 +47,20 @@ ## 配置混合执行 1. 配置混合训练标识。在`src/config.py`文件中,设置`argparse_init`函数中的`host_device_mix`默认值为`1`,设置`WideDeepConfig`类的`__init__`函数中`self.host_device_mix`为`1`: + ```python self.host_device_mix = 1 ``` 2. 检查必要算子和优化器的执行位置。在`src/wide_and_deep.py`的`WideDeepModel`类中,检查`EmbeddingLookup`为主机端执行: + ```python self.deep_embeddinglookup = nn.EmbeddingLookup() self.wide_embeddinglookup = nn.EmbeddingLookup() ``` + 在`src/wide_and_deep.py`文件的`class TrainStepWrap(nn.Cell)`中,检查两个优化器主机端执行的属性。 + ```python self.optimizer_w.sparse_opt.add_prim_attr("primitive_target", "CPU") self.optimizer_d.sparse_opt.add_prim_attr("primitive_target", "CPU") @@ -69,7 +73,7 @@ 运行日志保存在`device_0`目录下,其中`loss.log`保存一个epoch内中多个loss值,其值类似如下: -``` +```text epoch: 1 step: 1, wide_loss is 0.6873926, deep_loss is 0.8878349 epoch: 1 step: 2, wide_loss is 0.6442529, deep_loss is 0.8342661 epoch: 1 step: 3, wide_loss is 0.6227323, deep_loss is 0.80273706 @@ -84,7 +88,7 @@ epoch: 1 step: 10, wide_loss is 0.566089, deep_loss is 0.6884129 `test_deep0.log`保存pytest进程输出的详细的运行时日志(需要将日志级别设置为INFO,且在MindSpore编译时加上-p on选项),搜索关键字`EmbeddingLookup`,可找到如下信息: -``` +```text [INFO] DEVICE(109904,python3.7):2020-06-27-12:42:34.928.275 [mindspore/ccsrc/device/cpu/cpu_kernel_runtime.cc:324] Run] cpu kernel: Default/network-VirtualDatasetCellTriple/_backbone-NetWithLossClass/network-WideDeepModel/EmbeddingLookup-op297 costs 3066 us. [INFO] DEVICE(109904,python3.7):2020-06-27-12:42:34.943.896 [mindspore/ccsrc/device/cpu/cpu_kernel_runtime.cc:324] Run] cpu kernel: Default/network-VirtualDatasetCellTriple/_backbone-NetWithLossClass/network-WideDeepModel/EmbeddingLookup-op298 costs 15521 us. ``` @@ -92,7 +96,7 @@ epoch: 1 step: 10, wide_loss is 0.566089, deep_loss is 0.6884129 表示`EmbeddingLookup`在主机端的执行时间。 继续在`test_deep0.log`搜索关键字`FusedSparseFtrl`和`FusedSparseLazyAdam`,可找到如下信息: -``` +```text [INFO] DEVICE(109904,python3.7):2020-06-27-12:42:35.422.963 [mindspore/ccsrc/device/cpu/cpu_kernel_runtime.cc:324] Run] cpu kernel: Default/optimizer_w-FTRL/FusedSparseFtrl-op299 costs 54492 us. [INFO] DEVICE(109904,python3.7):2020-06-27-12:42:35.565.953 [mindspore/ccsrc/device/cpu/cpu_kernel_runtime.cc:324] Run] cpu kernel: Default/optimizer_d-LazyAdam/FusedSparseLazyAdam-op300 costs 142865 us. ``` diff --git a/tutorials/training/source_zh_cn/advanced_use/apply_parameter_server_training.md b/tutorials/training/source_zh_cn/advanced_use/apply_parameter_server_training.md index 6fab9ad461..e586363322 100644 --- a/tutorials/training/source_zh_cn/advanced_use/apply_parameter_server_training.md +++ b/tutorials/training/source_zh_cn/advanced_use/apply_parameter_server_training.md @@ -17,6 +17,7 @@ ## 概述 + Parameter Server(参数服务器)是分布式训练中一种广泛使用的架构,相较于同步的AllReduce训练方法,Parameter Server具有更好的灵活性、可扩展性以及节点容灾的能力。具体来讲,参数服务器既支持同步SGD,也支持异步SGD的训练算法;在扩展性上,将模型的计算与模型的更新分别部署在Worker和Server两类进程中,使得Worker和Server的资源可以独立地横向扩缩;另外,在大规模数据中心的环境下,计算设备、网络以及存储经常会出现各种故障而导致部分节点异常,而在参数服务器的架构下,能够较为容易地处理此类的故障而不会对训练中的任务产生影响。 在MindSpore的参数服务器实现中,采用了开源的[ps-lite](https://github.com/dmlc/ps-lite)作为基础架构,基于其提供的远程通信能力以及抽象的Push/Pull原语,实现了同步SGD的分布式训练算法,另外结合Ascend和GPU中的高性能集合通信库(HCCL和NCCL),MindSpore还提供了Parameter Server和AllReduce的混合训练模式,支持将部分权重通过参数服务器进行存储和更新,其余权重仍然通过AllReduce算法进行训练。 @@ -30,6 +31,7 @@ Parameter Server(参数服务器)是分布式训练中一种广泛使用的架 - Scheduler:用于建立Server和Worker的通信关系。 ## 准备工作 + 以LeNet在Ascend 910上使用Parameter Server训练为例: ### 训练脚本准备 @@ -51,6 +53,7 @@ Parameter Server(参数服务器)是分布式训练中一种广泛使用的架 - 被设置为通过Parameter Server更新的单个权重大小不得超过INT_MAX(2^31 - 1)字节。 3. 在[原训练脚本](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/lenet/train.py)基础上,设置LeNet模型所有权重通过Parameter Server训练: + ```python context.set_ps_context(enable_ps=True) network = LeNet5(cfg.num_classes) @@ -61,7 +64,7 @@ Parameter Server(参数服务器)是分布式训练中一种广泛使用的架 MindSpore通过读取环境变量,控制Parameter Server训练,环境变量包括以下选项(其中`MS_SCHED_HOST`及`MS_SCHED_PORT`所有脚本需保持一致): -``` +```text export PS_VERBOSE=1 # Print ps-lite log export MS_SERVER_NUM=1 # Server number export MS_WORKER_NUM=1 # Worker number @@ -90,6 +93,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre ``` `Server.sh`: + ```bash #!/bin/bash export PS_VERBOSE=1 @@ -102,6 +106,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre ``` `Worker.sh`: + ```bash #!/bin/bash export PS_VERBOSE=1 @@ -114,26 +119,31 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre ``` 最后分别执行: + ```bash sh Scheduler.sh > scheduler.log 2>&1 & sh Server.sh > server.log 2>&1 & sh Worker.sh > worker.log 2>&1 & ``` + 启动训练 2. 查看结果 查看`scheduler.log`中Server与Worker通信日志: - ``` + + ```text Bind to role=scheduler, id=1, ip=XXX.XXX.XXX.XXX, port=XXXX Assign rank=8 to node role=server, ip=XXX.XXX.XXX.XXX, port=XXXX Assign rank=9 to node role=worker, ip=XXX.XXX.XXX.XXX, port=XXXX the scheduler is connected to 1 workers and 1 servers ``` + 说明Server、Worker与Scheduler通信建立成功。 查看`worker.log`中训练结果: - ``` + + ```text epoch: 1 step: 1, loss is 2.302287 epoch: 1 step: 2, loss is 2.304071 epoch: 1 step: 3, loss is 2.308778 diff --git a/tutorials/training/source_zh_cn/advanced_use/apply_quantization_aware_training.md b/tutorials/training/source_zh_cn/advanced_use/apply_quantization_aware_training.md index d9a6c653a7..14183e2221 100644 --- a/tutorials/training/source_zh_cn/advanced_use/apply_quantization_aware_training.md +++ b/tutorials/training/source_zh_cn/advanced_use/apply_quantization_aware_training.md @@ -39,6 +39,7 @@ ### 伪量化节点 伪量化节点,是指感知量化训练中插入的节点,用以寻找网络数据分布,并反馈损失精度,具体作用如下: + - 找到网络数据的分布,即找到待量化参数的最大值和最小值; - 模拟量化为低比特时的精度损失,把该损失作用到网络模型中,传递给损失函数,让优化器在训练过程中对该损失值进行优化。 @@ -59,12 +60,12 @@ MindSpore的感知量化训练是在训练基础上,使用低精度数据替 感知量化训练模型与一般训练步骤一致,在定义网络和最后生成模型阶段后,需要进行额外的操作,完整流程如下: -1. 数据处理加载数据集。 -2. 定义原始非量化网络。 -3. 定义融合网络。在完成定义原始非量化网络后,替换指定的算子,完成融合网络的定义。 -4. 定义优化器和损失函数。 -5. 转化量化网络。基于融合网络,使用转化接口在融合网络中插入伪量化节点,生成量化网络。 -6. 进行量化训练。基于量化网络训练,生成量化模型。 +1. 数据处理加载数据集。 +2. 定义原始非量化网络。 +3. 定义融合网络。在完成定义原始非量化网络后,替换指定的算子,完成融合网络的定义。 +4. 定义优化器和损失函数。 +5. 转化量化网络。基于融合网络,使用转化接口在融合网络中插入伪量化节点,生成量化网络。 +6. 进行量化训练。基于量化网络训练,生成量化模型。 在上面流程中,第3、5、6步是感知量化训练区别普通训练需要额外进行的步骤。 @@ -99,7 +100,7 @@ class LeNet5(nn.Cell): Tensor, output tensor Examples: >>> LeNet(num_class=10, num_channel=1) - + """ def __init__(self, num_class=10, num_channel=1): super(LeNet5, self).__init__() @@ -129,10 +130,10 @@ class LeNet5(nn.Cell): def __init__(self, num_class=10): super(LeNet5, self).__init__() self.num_class = num_class - + self.conv1 = nn.Conv2dBnAct(1, 6, kernel_size=5, activation='relu') self.conv2 = nn.Conv2dBnAct(6, 16, kernel_size=5, activation='relu') - + self.fc1 = nn.DenseBnAct(16 * 5 * 5, 120, activation='relu') self.fc2 = nn.DenseBnAct(120, 84, activation='relu') self.fc3 = nn.DenseBnAct(84, self.num_class) @@ -164,13 +165,13 @@ net = quant.convert_quant_network(network, quant_delay=900, bn_fold=False, per_c 上面介绍了从零开始进行感知量化训练。更常见情况是已有一个模型文件,希望生成量化模型,这时已有正常网络模型训练得到的模型文件及训练脚本,进行感知量化训练。这里使用checkpoint文件重新训练的功能,详细步骤为: - 1. 数据处理加载数据集。 - 2. 定义原始非量化网络。 - 3. 训练原始网络生成非量化模型。 - 4. 定义融合网络。 - 5. 定义优化器和损失函数。 - 6. 基于融合网络转化生成量化网络。 - 7. 加载模型文件重训。加载已有非量化模型文件,基于量化网络重新训练生成量化模型。详细模型重载训练,请参见。 + 1. 数据处理加载数据集。 + 2. 定义原始非量化网络。 + 3. 训练原始网络生成非量化模型。 + 4. 定义融合网络。 + 5. 定义优化器和损失函数。 + 6. 基于融合网络转化生成量化网络。 + 7. 加载模型文件重训。加载已有非量化模型文件,基于量化网络重新训练生成量化模型。详细模型重载训练,请参见。 ### 进行推理 @@ -180,11 +181,11 @@ net = quant.convert_quant_network(network, quant_delay=900, bn_fold=False, per_c - 使用感知量化训练后得到的checkpoint文件进行推理: - 1. 加载量化模型。 - 2. 推理。 + 1. 加载量化模型。 + 2. 推理。 - 转化为ONNX等通用格式进行推理(暂不支持,开发完善后补充)。 - + ## 参考文献 [1] Jacob B, Kligys S, Chen B, et al. Quantization and training of neural networks for efficient integer-arithmetic-only inference[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 2704-2713. diff --git a/tutorials/training/source_zh_cn/advanced_use/convert_dataset.md b/tutorials/training/source_zh_cn/advanced_use/convert_dataset.md index b025f48e70..1e60f89a8c 100644 --- a/tutorials/training/source_zh_cn/advanced_use/convert_dataset.md +++ b/tutorials/training/source_zh_cn/advanced_use/convert_dataset.md @@ -16,9 +16,10 @@ ## 概述 -用户可以将非标准的数据集和常用的数据集转换为MindSpore数据格式,即MindRecord,从而方便地加载到MindSpore中进行训练。同时,MindSpore在部分场景做了性能优化,使用MindSpore数据格式可以获得更好的性能。 +用户可以将非标准的数据集和常用的数据集转换为MindSpore数据格式,即MindRecord,从而方便地加载到MindSpore中进行训练。同时,MindSpore在部分场景做了性能优化,使用MindSpore数据格式可以获得更好的性能。 MindSpore数据格式具备的特征如下: + 1. 实现多变的用户数据统一存储、访问,训练数据读取更简便; 2. 数据聚合存储,高效读取,且方便管理、移动; 3. 高效数据编解码操作,对用户透明、无感知; @@ -96,7 +97,7 @@ MindSpore数据格式的目标是归一化用户的数据集,并进一步通 5. 创建`FileWriter`对象,传入文件名及分片数量,然后添加Schema文件及索引,调用`write_raw_data`接口写入数据,最后调用`commit`接口生成本地数据文件。 - ```python + ```python writer = FileWriter(file_name="test.mindrecord", shard_num=4) writer.add_schema(cv_schema_json, "test_schema") writer.add_index(indexes) @@ -141,7 +142,7 @@ MindSpore数据格式的目标是归一化用户的数据集,并进一步通 输出结果如下: - ``` + ```text sample: {'data': array([175, 175, 85, 60, 184, 124, 54, 189, 125, 193, 153, 91, 234, 106, 43, 143, 132, 211, 204, 160, 44, 105, 187, 185, 45, 205, 122, 236, 112, 123, 84, 177, 219], dtype=uint8), 'file_name': array(b'3.jpg', dtype='|S5'), 'label': array(99, dtype=int32)} diff --git a/tutorials/training/source_zh_cn/advanced_use/custom_debugging_info.md b/tutorials/training/source_zh_cn/advanced_use/custom_debugging_info.md index 0d933a30b9..9a9584f176 100644 --- a/tutorials/training/source_zh_cn/advanced_use/custom_debugging_info.md +++ b/tutorials/training/source_zh_cn/advanced_use/custom_debugging_info.md @@ -41,7 +41,7 @@ MindSpore提供`Callback`能力,支持用户在训练/推理的特定阶段, 使用方法:在`model.train`方法中传入`Callback`对象,它可以是一个`Callback`列表,例: ```python -ckpt_cb = ModelCheckpoint() +ckpt_cb = ModelCheckpoint() loss_cb = LossMonitor() summary_cb = SummaryCollector(summary_dir='./summary_dir') model.train(epoch, dataset, callbacks=[ckpt_cb, loss_cb, summary_cb]) @@ -60,7 +60,7 @@ model.train(epoch, dataset, callbacks=[ckpt_cb, loss_cb, summary_cb]) ```python class Callback(): - """Callback base class""" + """Callback base class""" def begin(self, run_context): """Called once before the network executing.""" pass @@ -70,11 +70,11 @@ class Callback(): pass def epoch_end(self, run_context): - """Called after each epoch finished.""" + """Called after each epoch finished.""" pass def step_begin(self, run_context): - """Called before each epoch beginning.""" + """Called before each epoch beginning.""" pass def step_end(self, run_context): @@ -131,7 +131,7 @@ class Callback(): 输出: - ``` + ```text epoch: 20 step: 32 loss: 2.298344373703003 ``` @@ -172,7 +172,6 @@ class Callback(): 具体实现逻辑为:定义一个`Callback`对象,初始化对象接收`model`对象和`ds_eval`(验证数据集)。在`step_end`阶段验证模型的精度,当精度为当前最高时,手动触发保存checkpoint方法,保存当前的参数。 - ## MindSpore metrics功能介绍 当训练结束后,可以使用metrics评估训练结果的好坏。 @@ -224,13 +223,17 @@ print('Accuracy is ', accuracy) ``` 输出: -``` + +```text Accuracy is 0.6667 ``` + ## Print算子功能介绍 + MindSpore的自研`Print`算子可以将用户输入的Tensor或字符串信息打印出来,支持多字符串输入,多Tensor输入和字符串与Tensor的混合输入,输入参数以逗号隔开。 `Print`算子使用方法与其他算子相同,在网络中的`__init__`声明算子并在`construct`进行调用,具体使用实例及输出结果如下: + ```python import numpy as np from mindspore import Tensor @@ -254,8 +257,10 @@ y = Tensor(np.ones([2, 2]).astype(np.int32)) net = PrintDemo() output = net(x, y) ``` + 输出: -``` + +```text print Tensor x and Tensor y: Tensor shape:[[const vector][2, 1]]Int32 val:[[1] @@ -315,7 +320,7 @@ val:[[1 1] 3. 执行用例Dump数据。 可以在训练脚本中设置`context.set_context(reserve_class_name_in_scope=False)`,避免Dump文件名称过长导致Dump数据文件生成失败。 4. 解析Dump数据。 - + 通过`numpy.fromfile`读取Dump数据文件即可解析。 ### 异步Dump功能介绍 @@ -372,6 +377,7 @@ val:[[1 1] ``` ## 日志相关的环境变量和配置 + MindSpore采用glog来输出日志,常用的几个环境变量如下: - `GLOG_v` @@ -379,13 +385,13 @@ MindSpore采用glog来输出日志,常用的几个环境变量如下: 该环境变量控制日志的级别。 该环境变量默认值为2,即WARNING级别,对应关系如下:0-DEBUG、1-INFO、2-WARNING、3-ERROR。 -- `GLOG_logtostderr` +- `GLOG_logtostderr` 该环境变量控制日志的输出方式。 该环境变量的值设置为1时,日志输出到屏幕;值设置为0时,日志输出到文件。默认值为1。 -- `GLOG_log_dir` - +- `GLOG_log_dir` + 该环境变量指定日志输出的路径。 若`GLOG_logtostderr`的值为0,则必须设置此变量。 若指定了`GLOG_log_dir`且`GLOG_logtostderr`的值为1时,则日志输出到屏幕,不输出到文件。 @@ -428,6 +434,3 @@ MindSpore子模块按照目录划分如下: | mindspore/core/ | CORE | > glog不支持日志文件的绕接,如果需要控制日志文件对磁盘空间的占用,可选用操作系统提供的日志文件管理工具,例如:Linux的logrotate。 - - - diff --git a/tutorials/training/source_zh_cn/advanced_use/custom_operator_ascend.md b/tutorials/training/source_zh_cn/advanced_use/custom_operator_ascend.md index ed1a76fb97..6bd704a066 100644 --- a/tutorials/training/source_zh_cn/advanced_use/custom_operator_ascend.md +++ b/tutorials/training/source_zh_cn/advanced_use/custom_operator_ascend.md @@ -25,6 +25,7 @@ 添加一个自定义算子,需要完成算子原语注册、算子实现、算子信息注册三部分工作。 其中: + - 算子原语:定义了算子在网络中的前端接口原型,也是组成网络模型的基础单元,主要包括算子的名称、属性(可选)、输入输出名称、输出shape推理方法、输出dtype推理方法等信息。 - 算子实现:通过TBE(Tensor Boost Engine)提供的特性语言接口,描述算子内部计算逻辑的实现。TBE提供了开发昇腾AI芯片自定义算子的能力。你可以在页面申请公测。 - 算子信息:描述TBE算子的基本信息,如算子名称、支持的输入输出类型等。它是后端做算子选择和映射时的依据。 @@ -38,6 +39,7 @@ 每个算子的原语是一个继承于`PrimitiveWithInfer`的子类,其类型名称即是算子名称。 自定义算子原语与内置算子原语的接口定义完全一致: + - 属性由构造函数`__init__`的入参定义。本用例的算子没有属性,因此`__init__`没有额外的入参。带属性的用例可参考MindSpore源码中的[custom add3](https://gitee.com/mindspore/mindspore/blob/master/tests/st/ops/custom_ops_tbe/cus_add3.py)用例。 - 输入输出的名称通过`init_prim_io_names`函数定义。 - 输出Tensor的shape推理方法在`infer_shape`函数中定义,输出Tensor的dtype推理方法在`infer_dtype`函数中定义。 @@ -75,10 +77,12 @@ class CusSquare(PrimitiveWithInfer): 算子的计算函数主要用来封装算子的计算逻辑供主函数调用,其内部通过调用TBE的API接口组合实现算子的计算逻辑。 算子的入口函数描述了编译算子的内部过程,一般分为如下几步: + 1. 准备输入的placeholder,placeholder是一个占位符,返回一个Tensor对象,表示一组输入数据。 2. 调用计算函数,计算函数使用TBE提供的API接口描述了算子内部的计算逻辑。 3. 调用Schedule调度模块,调度模块对算子中的数据按照调度模块的调度描述进行切分,同时指定好数据的搬运流程,确保在硬件上的执行达到最优。默认可以采用自动调度模块(`auto_schedule`)。 4. 调用`cce_build_code`编译生成算子二进制。 + > 入口函数的输入参数有特殊要求,需要依次为:算子每个输入的信息、算子每个输出的信息、算子属性(可选)和`kernel_name`(生成算子二进制的名称)。输入和输出的信息用字典封装传入,其中包含该算子在网络中被调用时传入的实际输入和输出的shape和dtype。 更多关于使用TBE开发算子的内容请参考[TBE文档](https://support.huaweicloud.com/odevg-A800_3000_3010/atlaste_10_0063.html),关于TBE算子的调试和性能优化请参考[MindStudio文档](https://support.huaweicloud.com/usermanual-mindstudioc73/atlasmindstudio_02_0043.html)。 @@ -92,7 +96,7 @@ class CusSquare(PrimitiveWithInfer): ### 示例 -下面以`Square`算子的TBE实现`square_impl.py`为例进行介绍。`square_compute`是算子实现的计算函数,通过调用`te.lang.cce`提供的API描述了`x * x`的计算逻辑。`cus_square_op_info `是算子信息,通过`TBERegOp`来定义。 +下面以`Square`算子的TBE实现`square_impl.py`为例进行介绍。`square_compute`是算子实现的计算函数,通过调用`te.lang.cce`提供的API描述了`x * x`的计算逻辑。`cus_square_op_info`是算子信息,通过`TBERegOp`来定义。 `TBERegOp`的设置需要注意以下几点: @@ -128,7 +132,7 @@ cus_square_op_info = TBERegOp("CusSquare") \ .output(0, "y", False, "required", "all") \ .dtype_format(DataType.F32_Default, DataType.F32_Default) \ .dtype_format(DataType.F16_Default, DataType.F16_Default) \ - .get_op_info() + .get_op_info() # Binding kernel info with the kernel implementation. @op_info_register(cus_square_op_info) @@ -185,17 +189,20 @@ def test_net(): ``` 执行用例: -``` + +```bash pytest -s tests/st/ops/custom_ops_tbe/test_square.py::test_net ``` 执行结果: -``` + +```text x: [1. 4. 9.] output: [1. 16. 81.] ``` ## 定义算子反向传播函数 + 如果算子要支持自动微分,需要在其原语中定义其反向传播函数(bprop)。你需要在bprop中描述利用正向输入、正向输出和输出梯度得到输入梯度的反向计算逻辑。反向计算逻辑可以使用内置算子或自定义反向算子构成。 定义算子反向传播函数时需注意以下几点: @@ -204,6 +211,7 @@ output: [1. 16. 81.] - bprop函数的返回值形式约定为输入梯度组成的元组,元组中元素的顺序与正向输入参数顺序一致。即使只有一个输入梯度,返回值也要求是元组的形式。 例如,增加bprop后的`CusSquare`原语为: + ```python class CusSquare(PrimitiveWithInfer): @prim_attr_register @@ -228,6 +236,7 @@ class CusSquare(PrimitiveWithInfer): ``` 在`test_square.py`文件中定义反向用例。 + ```python from mindspore.ops import composite as C def test_grad_net(): @@ -241,12 +250,14 @@ def test_grad_net(): ``` 执行用例: -``` + +```bash pytest -s tests/st/ops/custom_ops_tbe/test_square.py::test_grad_net ``` 执行结果: -``` + +```text x: [1. 4. 9.] dx: [2. 8. 18.] ``` diff --git a/tutorials/training/source_zh_cn/advanced_use/cv_mobilenetv2_fine_tune.md b/tutorials/training/source_zh_cn/advanced_use/cv_mobilenetv2_fine_tune.md index e206515f68..1743089f80 100644 --- a/tutorials/training/source_zh_cn/advanced_use/cv_mobilenetv2_fine_tune.md +++ b/tutorials/training/source_zh_cn/advanced_use/cv_mobilenetv2_fine_tune.md @@ -293,26 +293,26 @@ Windows系统输出信息到交互式命令行,Linux系统环境下运行`run_ - 开始增量训练 - - 使用样例1:通过Python文件调用1个GPU处理器。 + - 使用样例1:通过Python文件调用1个GPU处理器。 - ```bash - # Windows or Linux with Python - python train.py --platform GPU --dataset_path [TRAIN_DATASET_PATH] --pretrain_ckpt ./pretrain_checkpoint/mobilenetv2_cpu_gpu.ckpt --freeze_layer backbone - ``` + ```bash + # Windows or Linux with Python + python train.py --platform GPU --dataset_path [TRAIN_DATASET_PATH] --pretrain_ckpt ./pretrain_checkpoint/mobilenetv2_cpu_gpu.ckpt --freeze_layer backbone + ``` - - 使用样例2:通过Shell脚本调用1个GPU处理器,设备ID为`“0”`。 + - 使用样例2:通过Shell脚本调用1个GPU处理器,设备ID为`“0”`。 - ```bash - # Linux with Shell - sh run_train.sh GPU 1 0 [TRAIN_DATASET_PATH] ../pretrain_checkpoint/mobilenetv2_cpu_gpu.ckpt backbone - ``` + ```bash + # Linux with Shell + sh run_train.sh GPU 1 0 [TRAIN_DATASET_PATH] ../pretrain_checkpoint/mobilenetv2_cpu_gpu.ckpt backbone + ``` - - 使用样例3:通过Shell脚本调用8个GPU处理器,设备ID为`“0,1,2,3,4,5,6,7”`。 + - 使用样例3:通过Shell脚本调用8个GPU处理器,设备ID为`“0,1,2,3,4,5,6,7”`。 - ```bash - # Linux with Shell - sh run_train.sh GPU 8 0,1,2,3,4,5,6,7 [TRAIN_DATASET_PATH] ../pretrain_checkpoint/mobilenetv2_cpu_gpu.ckpt backbone - ``` + ```bash + # Linux with Shell + sh run_train.sh GPU 8 0,1,2,3,4,5,6,7 [TRAIN_DATASET_PATH] ../pretrain_checkpoint/mobilenetv2_cpu_gpu.ckpt backbone + ``` ### Ascend加载训练 @@ -322,68 +322,68 @@ Windows系统输出信息到交互式命令行,Linux系统环境下运行`run_ - 开始增量训练 - - 使用样例1:通过Python文件调用1个Ascend处理器。 + - 使用样例1:通过Python文件调用1个Ascend处理器。 - ```bash - # Windows or Linux with Python - python train.py --platform Ascend --dataset_path [TRAIN_DATASET_PATH] --pretrain_ckpt ./pretrain_checkpoint mobilenetv2_ascend.ckpt --freeze_layer backbone - ``` + ```bash + # Windows or Linux with Python + python train.py --platform Ascend --dataset_path [TRAIN_DATASET_PATH] --pretrain_ckpt ./pretrain_checkpoint mobilenetv2_ascend.ckpt --freeze_layer backbone + ``` - - 使用样例2:通过Shell脚本调用1个Ascend AI处理器,设备ID为“0”。 + - 使用样例2:通过Shell脚本调用1个Ascend AI处理器,设备ID为“0”。 - ```bash - # Linux with Shell - sh run_train.sh Ascend 1 0 ~/rank_table.json [TRAIN_DATASET_PATH] ../pretrain_checkpoint/mobilenetv2_ascend.ckpt backbone - ``` + ```bash + # Linux with Shell + sh run_train.sh Ascend 1 0 ~/rank_table.json [TRAIN_DATASET_PATH] ../pretrain_checkpoint/mobilenetv2_ascend.ckpt backbone + ``` - - 使用样例3:通过Shell脚本调用8个Ascend AI处理器,设备ID为”0,1,2,3,4,5,6,7“。 + - 使用样例3:通过Shell脚本调用8个Ascend AI处理器,设备ID为”0,1,2,3,4,5,6,7“。 - ```bash - # Linux with Shell - sh run_train.sh Ascend 8 0,1,2,3,4,5,6,7 ~/rank_table.json [TRAIN_DATASET_PATH] ../pretrain_checkpoint/mobilenetv2_ascend.ckpt backbone - ``` + ```bash + # Linux with Shell + sh run_train.sh Ascend 8 0,1,2,3,4,5,6,7 ~/rank_table.json [TRAIN_DATASET_PATH] ../pretrain_checkpoint/mobilenetv2_ascend.ckpt backbone + ``` ### 微调训练结果 - 查看运行结果。 - - 运行Python文件时在交互式命令行中查看打印信息,`Linux`上运行Shell脚本运行后使用`cat ./train/rank0/log0.log`中查看打印信息,输出结果如下: + - 运行Python文件时在交互式命令行中查看打印信息,`Linux`上运行Shell脚本运行后使用`cat ./train/rank0/log0.log`中查看打印信息,输出结果如下: - ```bash - train args: Namespace(dataset_path='./dataset/train', platform='CPU', \ - pretrain_ckpt='./pretrain_checkpoint/mobilenetv2_cpu_gpu.ckpt', freeze_layer='backbone') - cfg: {'num_classes': 26, 'image_height': 224, 'image_width': 224, 'batch_size': 150, \ - 'epoch_size': 200, 'warmup_epochs': 0, 'lr_max': 0.03, 'lr_end': 0.03, 'momentum': 0.9, \ - 'weight_decay': 4e-05, 'label_smooth': 0.1, 'loss_scale': 1024, 'save_checkpoint': True, \ - 'save_checkpoint_epochs': 1, 'keep_checkpoint_max': 20, 'save_checkpoint_path': './', \ - 'platform': 'CPU'} - Processing batch: 16: 100%|███████████████████████████████████████████ █████████████████████| 16/16 [00:00 本例面向Ascend 910 AI处理器硬件平台,你可以在这里下载完整的样例代码: 下面对任务流程中各个环节及代码关键片段进行解释说明。 - ## 下载CIFAR-10数据集 + 先从[CIFAR-10数据集官网](https://www.cs.toronto.edu/~kriz/cifar.html)上下载CIFAR-10数据集。本例中采用binary格式的数据,Linux环境可以通过下面的命令下载: ```shell @@ -81,7 +80,6 @@ wget https://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz tar -zvxf cifar-10-binary.tar.gz ``` - ## 数据预加载和预处理 1. 加载数据集 @@ -89,10 +87,8 @@ tar -zvxf cifar-10-binary.tar.gz 数据加载可以通过内置数据集格式`Cifar10Dataset`接口完成。 > `Cifar10Dataset`,读取类型为随机读取,内置CIFAR-10数据集,包含图像和标签,图像格式默认为uint8,标签数据格式默认为uint32。更多说明请查看API中`Cifar10Dataset`接口说明。 - 数据加载代码如下,其中`data_home`为数据存储位置: - ```python cifar_ds = ds.Cifar10Dataset(data_home) ``` @@ -141,7 +137,6 @@ tar -zvxf cifar-10-binary.tar.gz cifar_ds = cifar_ds.repeat(repeat_num) ``` - ## 定义卷积神经网络 卷积神经网络已经是图像分类任务的标准算法了。卷积神经网络采用分层的结构对图片进行特征提取,由一系列的网络层堆叠而成,比如卷积层、池化层、激活层等等。 @@ -156,7 +151,6 @@ network = resnet50(class_num=10) 更多ResNet的介绍请参考:[ResNet论文](https://arxiv.org/abs/1512.03385) - ## 定义损失函数和优化器 接下来需要定义损失函数(Loss)和优化器(Optimizer)。损失函数是深度学习的训练目标,也叫目标函数,可以理解为神经网络的输出(Logits)和标签(Labels)之间的距离,是一个标量数据。 @@ -175,7 +169,6 @@ ls = SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean") opt = Momentum(filter(lambda x: x.requires_grad, net.get_parameters()), 0.01, 0.9) ``` - ## 调用`Model`高阶API进行训练和保存模型文件 完成数据预处理、网络定义、损失函数和优化器定义之后,就可以进行模型训练了。模型训练包含两层迭代,数据集的多轮迭代(`epoch`)和一轮数据集内按分组(`batch`)大小进行的单步迭代。其中,单步迭代指的是按分组从数据集中抽取数据,输入到网络中计算得到损失函数,然后通过优化器计算和更新训练参数的梯度。 @@ -214,4 +207,4 @@ print("result: ", res) ## 参考文献 -[1] https://www.cs.toronto.edu/~kriz/cifar.html +[1] diff --git a/tutorials/training/source_zh_cn/advanced_use/cv_resnet50_second_order_optimizer.md b/tutorials/training/source_zh_cn/advanced_use/cv_resnet50_second_order_optimizer.md index 855cb086c5..3c0c523802 100644 --- a/tutorials/training/source_zh_cn/advanced_use/cv_resnet50_second_order_optimizer.md +++ b/tutorials/training/source_zh_cn/advanced_use/cv_resnet50_second_order_optimizer.md @@ -37,7 +37,6 @@ MindSpore开发团队在现有的自然梯度算法的基础上,对FIM矩阵采用近似、切分等优化加速手段,极大的降低了逆矩阵的计算复杂度,开发出了可用的二阶优化器THOR。使用8块Ascend 910 AI处理器,THOR可以在72min内完成ResNet50-v1.5网络和ImageNet数据集的训练,相比于SGD+Momentum速度提升了近一倍。 - 本篇教程将主要介绍如何在Ascend 910 以及GPU上,使用MindSpore提供的二阶优化器THOR训练ResNet50-v1.5网络和ImageNet数据集。 > 你可以在这里下载完整的示例代码: 。 @@ -47,12 +46,12 @@ MindSpore开发团队在现有的自然梯度算法的基础上,对FIM矩阵 ```shell ├── resnet_thor ├── README.md - ├── scripts + ├── scripts ├── run_distribute_train.sh # launch distributed training for Ascend 910 └── run_eval.sh # launch inference for Ascend 910 ├── run_distribute_train_gpu.sh # launch distributed training for GPU └── run_eval_gpu.sh # launch inference for GPU - ├── src + ├── src ├── crossentropy.py # CrossEntropy loss function ├── config.py # parameter configuration ├── dataset_helper.py # dataset helper for minddata dataset @@ -61,20 +60,20 @@ MindSpore开发团队在现有的自然梯度算法的基础上,对FIM矩阵 ├── resnet_thor.py # resnet50_thor backone ├── thor.py # thor optimizer ├── thor_layer.py # thor layer - └── dataset.py # data preprocessing + └── dataset.py # data preprocessing ├── eval.py # infer script └── train.py # train script - + ``` 整体执行流程如下: + 1. 准备ImageNet数据集,处理需要的数据集; 2. 定义ResNet50网络; 3. 定义损失函数和THOR优化器; 4. 加载数据集并进行训练,训练完成后,查看结果及保存模型文件; 5. 加载保存的模型,进行推理。 - ## 准备环节 实践前,确保已经正确安装MindSpore。如果没有,可以通过[MindSpore安装页面](https://www.mindspore.cn/install)安装MindSpore。 @@ -85,7 +84,7 @@ MindSpore开发团队在现有的自然梯度算法的基础上,对FIM矩阵 目录结构如下: -``` +```text └─ImageNet2012 ├─ilsvrc │ n03676483 @@ -99,17 +98,21 @@ MindSpore开发团队在现有的自然梯度算法的基础上,对FIM矩阵 │ ...... ``` + ### 配置分布式环境变量 + #### Ascend 910 + Ascend 910 AI处理器的分布式环境变量配置参考[分布式并行训练 (Ascend)](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/distributed_training_ascend.html#id4)。 #### GPU -GPU的分布式环境配置参考[分布式并行训练 (GPU)](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/distributed_training_gpu.html#id4)。 +GPU的分布式环境配置参考[分布式并行训练 (GPU)](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/distributed_training_gpu.html#id4)。 ## 加载处理数据集 分布式训练时,通过并行的方式加载数据集,同时通过MindSpore提供的数据增强接口对数据集进行处理。加载处理数据集的脚本在源码的`src/dataset.py`脚本中。 + ```python import os import mindspore.common.dtype as mstype @@ -165,17 +168,18 @@ def create_dataset(dataset_path, do_train, repeat_num=1, batch_size=32, target=" > MindSpore支持进行多种数据处理和增强的操作,各种操作往往组合使用,具体可以参考[数据处理](https://www.mindspore.cn/doc/programming_guide/zh-CN/master/pipeline.html)和[数据增强](https://www.mindspore.cn/doc/programming_guide/zh-CN/master/augmentation.html)章节。 - ## 定义网络 + 本示例中使用的网络模型为ResNet50-v1.5,先定义[ResNet50网络](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/resnet/src/resnet.py),然后使用二阶优化器自定义的算子替换`Conv2d`和 和`Dense`算子。定义好的网络模型在在源码`src/resnet_thor.py`脚本中,自定义的算子`Conv2d_thor`和`Dense_thor`在`src/thor_layer.py`脚本中。 -- 使用`Conv2d_thor`替换原网络模型中的`Conv2d` -- 使用`Dense_thor`替换原网络模型中的`Dense` +- 使用`Conv2d_thor`替换原网络模型中的`Conv2d` +- 使用`Dense_thor`替换原网络模型中的`Dense` > 使用THOR自定义的算子`Conv2d_thor`和`Dense_thor`是为了保存模型训练中的二阶矩阵信息,新定义的网络与原网络模型的backbone一致。 网络构建完成以后,在`__main__`函数中调用定义好的ResNet50: + ```python ... from src.resnet_thor import resnet50 @@ -188,15 +192,14 @@ if __name__ == "__main__": ... ``` - ## 定义损失函数及THOR优化器 - ### 定义损失函数 MindSpore支持的损失函数有`SoftmaxCrossEntropyWithLogits`、`L1Loss`、`MSELoss`等。THOR优化器需要使用`SoftmaxCrossEntropyWithLogits`损失函数。 损失函数的实现步骤在`src/crossentropy.py`脚本中。这里使用了深度网络模型训练中的一个常用trick:label smoothing,通过对真实标签做平滑处理,提高模型对分类错误标签的容忍度,从而可以增加模型的泛化能力。 + ```python class CrossEntropy(_Loss): """CrossEntropy""" @@ -214,6 +217,7 @@ class CrossEntropy(_Loss): loss = self.mean(loss, 0) return loss ``` + 在`__main__`函数中调用定义好的损失函数: ```python @@ -236,6 +240,7 @@ THOR优化器的参数更新公式如下: $$ \theta^{t+1} = \theta^t + \alpha F^{-1}\nabla E$$ 参数更新公式中各参数的含义如下: + - $\theta$:网络中的可训参数; - $t$:迭代次数; - $\alpha$:学习率值,参数的更新步长; @@ -296,7 +301,6 @@ if __name__ == "__main__": 通过MindSpore提供的`model.train`接口可以方便地进行网络的训练。THOR优化器通过降低二阶矩阵更新频率,来减少计算量,提升计算速度,故重新定义一个Model_Thor类,继承MindSpore提供的Model类。在Model_Thor类中增加二阶矩阵更新频率控制参数,用户可以通过调整该参数,优化整体的性能。 - ```python ... from mindspore.train.loss_scale_manager import FixedLossScaleManager @@ -316,15 +320,21 @@ if __name__ == "__main__": ``` ### 运行脚本 + 训练脚本定义完成之后,调`scripts`目录下的shell脚本,启动分布式训练进程。 + #### Ascend 910 + 目前MindSpore分布式在Ascend上执行采用单卡单进程运行方式,即每张卡上运行1个进程,进程数量与使用的卡的数量一致。其中,0卡在前台执行,其他卡放在后台执行。每个进程创建1个目录,目录名称为`train_parallel`+ `device_id`,用来保存日志信息,算子编译信息以及训练的checkpoint文件。下面以使用8张卡的分布式训练脚本为例,演示如何运行脚本: 使用以下命令运行脚本: -``` + +```bash sh run_distribute_train.sh [RANK_TABLE_FILE] [DATASET_PATH] [DEVICE_NUM] ``` + 脚本需要传入变量`RANK_TABLE_FILE`、`DATASET_PATH`和`DEVICE_NUM`,其中: + - `RANK_TABLE_FILE`:组网信息文件的路径。 - `DATASET_PATH`:训练数据集路径。 - `DEVICE_NUM`:实际的运行卡数。 @@ -361,17 +371,22 @@ epoch: 42 step: 5004, loss is 1.6453942 `*.ckpt`:指保存的模型参数文件。checkpoint文件名称具体含义:*网络名称*-*epoch数*_*step数*.ckpt。 #### GPU + 在GPU硬件平台上,MindSpore采用OpenMPI的`mpirun`进行分布式训练,进程创建1个目录,目录名称为`train_parallel`,用来保存日志信息和训练的checkpoint文件。下面以使用8张卡的分布式训练脚本为例,演示如何运行脚本: -``` + +```bash sh run_distribute_train_gpu.sh [DATASET_PATH] [DEVICE_NUM] ``` + 脚本需要传入变量`DATASET_PATH`和`DEVICE_NUM`,其中: + - `DATASET_PATH`:训练数据集路径。 - `DEVICE_NUM`:实际的运行卡数。 在GPU训练时,无需设置`DEVICE_ID`环境变量,因此在主训练脚本中不需要调用`int(os.getenv('DEVICE_ID'))`来获取卡的物理序号,同时`context`中也无需传入`device_id`。我们需要将device_target设置为GPU,并需要调用`init()`来使能NCCL。 训练过程中loss打印示例如下: + ```bash ... epoch: 1 step: 5004, loss is 4.2546034 @@ -391,7 +406,7 @@ epoch: 36 step: 5004, loss is 1.645802 ├─ckpt_0 ├─resnet-1_5004.ckpt ├─resnet-2_5004.ckpt - │ ...... + │ ...... ├─resnet-36_5004.ckpt │ ...... ...... @@ -436,40 +451,53 @@ if __name__ == "__main__": # define model model = Model(net, loss_fn=loss, metrics={'top_1_accuracy', 'top_5_accuracy'}) - + # eval model res = model.eval(dataset) print("result:", res, "ckpt=", args_opt.checkpoint_path) ``` ### 执行推理 + 推理网络定义完成之后,调用`scripts`目录下的shell脚本,进行推理。 + #### Ascend 910 + 在Ascend 910硬件平台上,推理的执行命令如下: -``` + +```bash sh run_eval.sh [DATASET_PATH] [CHECKPOINT_PATH] ``` + 脚本需要传入变量`DATASET_PATH`和`CHECKPOINT_PATH`,其中: + - `DATASET_PATH`:推理数据集路径。 - `CHECKPOINT_PATH`:保存的checkpoint路径。 目前推理使用的是单卡(默认device 0)进行推理,推理的结果如下: -``` + +```text result: {'top_5_accuracy': 0.9295574583866837, 'top_1_accuracy': 0.761443661971831} ckpt=train_parallel0/resnet-42_5004.ckpt ``` + - `top_5_accuracy`:对于一个输入图片,如果预测概率排名前五的标签中包含真实标签,即认为分类正确; - `top_1_accuracy`:对于一个输入图片,如果预测概率最大的标签与真实标签相同,即认为分类正确。 + #### GPU 在GPU硬件平台上,推理的执行命令如下: -``` + +```bash sh run_eval_gpu.sh [DATASET_PATH] [CHECKPOINT_PATH] ``` + 脚本需要传入变量`DATASET_PATH`和`CHECKPOINT_PATH`,其中: + - `DATASET_PATH`:推理数据集路径。 - `CHECKPOINT_PATH`:保存的checkpoint路径。 推理的结果如下: -``` + +```text result: {'top_5_accuracy': 0.9287972151088348, 'top_1_accuracy': 0.7597031049935979} ckpt=train_parallel/resnet-36_5004.ckpt ``` diff --git a/tutorials/training/source_zh_cn/advanced_use/debug_in_pynative_mode.md b/tutorials/training/source_zh_cn/advanced_use/debug_in_pynative_mode.md index 3879fbfa69..bb33f21cfd 100644 --- a/tutorials/training/source_zh_cn/advanced_use/debug_in_pynative_mode.md +++ b/tutorials/training/source_zh_cn/advanced_use/debug_in_pynative_mode.md @@ -75,12 +75,12 @@ print(output.asnumpy()) [ 0.05016355 0.03958241 0.03958241 0.03958241 0.03443141]]]] ``` - ## 执行普通函数 将若干算子组合成一个函数,然后直接通过函数调用的方式执行这些算子,并打印相关结果,如下例所示。 -**示例代码** +**示例代码**: + ```python import numpy as np from mindspore import context, Tensor @@ -99,7 +99,7 @@ output = tensor_add_func(x, y) print(output.asnumpy()) ``` -**输出** +**输出**: ```python [[3. 3. 3.] @@ -109,7 +109,6 @@ print(output.asnumpy()) > PyNative不支持并行执行和summary功能,图模式的并行和summary相关算子不能使用。 - ### 提升PyNative性能 为了提高PyNative模式下的前向计算任务执行速度,MindSpore提供了Staging功能,该功能可以在PyNative模式下将Python函数或者Python类的方法编译成计算图,通过图优化等技术提高运行速度,如下例所示。 @@ -142,7 +141,8 @@ tensor_add = P.TensorAdd() res = tensor_add(x, z) # PyNative mode print(res.asnumpy()) ``` -**输出** + +**输出**: ```python [[3. 3. 3. 3.] @@ -155,7 +155,7 @@ print(res.asnumpy()) 需要说明的是,加装了`ms_function`装饰器的函数中,如果包含不需要进行参数训练的算子(如`pooling`、`tensor_add`等算子),则这些算子可以在被装饰的函数中直接调用,如下例所示。 -**示例代码** +**示例代码**: ```python import numpy as np @@ -178,7 +178,8 @@ y = Tensor(np.ones([4, 4]).astype(np.float32)) z = tensor_add_fn(x, y) print(z.asnumpy()) ``` -**输出** + +**输出**: ```shell [[2. 2. 2. 2.] @@ -189,7 +190,7 @@ print(z.asnumpy()) 如果被装饰的函数中包含了需要进行参数训练的算子(如`Convolution`、`BatchNorm`等算子),则这些算子必须在被装饰等函数之外完成实例化操作,如下例所示。 -**示例代码** +**示例代码**: ```python import numpy as np @@ -211,7 +212,7 @@ z = conv_fn(Tensor(input_data)) print(z.asnumpy()) ``` -**输出** +**输出**: ```shell [[[[ 0.10377571 -0.0182163 -0.05221086] @@ -247,12 +248,11 @@ print(z.asnumpy()) [ 0.0377498 -0.06117418 0.00546303]]]] ``` - ## 调试网络训练模型 PyNative模式下,还可以支持单独求梯度的操作。如下例所示,可通过`GradOperation`求该函数或者网络所有的输入梯度。需要注意,输入类型仅支持Tensor。 -**示例代码** +**示例代码**: ```python from mindspore.ops import composite as C @@ -269,7 +269,7 @@ def mainf(x, y): print(mainf(Tensor(1, mstype.int32), Tensor(2, mstype.int32))) ``` -**输出** +**输出**: ```python (2, 1) @@ -277,7 +277,7 @@ print(mainf(Tensor(1, mstype.int32), Tensor(2, mstype.int32))) 在进行网络训练时,求得梯度然后调用优化器对参数进行优化(暂不支持在反向计算梯度的过程中设置断点),然后再利用前向计算loss,从而实现在PyNative模式下进行网络训练。 -**完整LeNet示例代码** +**完整LeNet示例代码**: ```python import numpy as np @@ -314,7 +314,7 @@ class LeNet5(nn.Cell): Lenet network Args: num_class (int): Num classes. Default: 10. - + Returns: Tensor, output tensor @@ -348,8 +348,8 @@ class LeNet5(nn.Cell): x = self.relu(x) x = self.fc3(x) return x - - + + class GradWrap(nn.Cell): """ GradWrap definition """ def __init__(self, network): @@ -378,7 +378,7 @@ loss = loss_output.asnumpy() print(loss) ``` -**输出** +**输出**: ```python 2.3050091 diff --git a/tutorials/training/source_zh_cn/advanced_use/debugger.md b/tutorials/training/source_zh_cn/advanced_use/debugger.md index 35214c624c..6652fe3ca6 100644 --- a/tutorials/training/source_zh_cn/advanced_use/debugger.md +++ b/tutorials/training/source_zh_cn/advanced_use/debugger.md @@ -22,6 +22,7 @@ ## 概述 + MindSpore调试器是为图模式训练提供的调试工具,可以用来查看并分析计算图节点的中间结果。 在MindSpore图模式的训练过程中,用户无法从Python层获取到计算图中间节点的结果,使得训练调试变得很困难。使用MindSpore调试器,用户可以: @@ -37,6 +38,7 @@ MindSpore调试器是为图模式训练提供的调试工具,可以用来查 - 在MindInsight调试器界面分析训练执行情况。 ## 调试器环境准备 + 开始训练前,请先安装MindInsight,并以调试模式启动。调试模式下,MindSpore会将训练信息发送给MindInsight调试服务,用户可在MindInsight调试器界面进行查看和分析。 MindInsight调试服务启动命令: @@ -72,6 +74,7 @@ mindinsight start --port {PORT} --enable-debugger True --debugger-port {DEBUGGER 图1: 调试器初始页面 ### 计算图 + 调试器将优化后的最终执行图展示在UI的中上位置,用户可以双击打开图上的方框 (代表一个`scope`) 将计算图进一步展开,查看`scope`中的节点信息。 面板的最上方展示了`训练端地址`(训练脚本所在进程的地址和端口),训练使用的`卡号`, 训练的`当前轮次`等元信息。 @@ -119,11 +122,12 @@ mindinsight start --port {PORT} --enable-debugger True --debugger-port {DEBUGGER 图6: 查看触发的条件断点 -图6展示了条件断点触发后的展示页面,该页面和`节点列表`所在位置相同。触发的节点以及监控条件会按照节点的执行序排列,用户点击某一行,会在计算图中跳转到对应节点,可以进一步查看节点信息分析INF等异常结果出现的原因。 +图6展示了条件断点触发后的展示页面,该页面和`节点列表`所在位置相同。触发的节点以及监控条件会按照节点的执行序排列,用户点击某一行,会在计算图中跳转到对应节点,可以进一步查看节点信息分析INF等异常结果出现的原因。 ### 训练控制 监测点设置面板的下方是训练控制面板,该面板展示了调试器的训练控制功能,有`继续`、`暂停`、`结束`、`确定`四个按钮。 + - `确定`代表训练向前执行若干个`轮次`,需要用户在上方的输入框内指定执行的`轮次`数目,直到条件断点触发、或`轮次`执行完毕后暂停; - `继续`代表训练一直执行,直到条件断点触发后暂停、或运行至训练结束; - `暂停`代表训练暂停; @@ -134,20 +138,20 @@ mindinsight start --port {PORT} --enable-debugger True --debugger-port {DEBUGGER 1. 在调试器环境准备完成后,打开调试器界面,如下图所示: ![debugger_waiting](./images/debugger_waiting.png) - + 图7: 调试器等待训练连接 - + 此时,调试器处于等待训练启动和连接的状态。 2. 运行训练脚本,稍后可以看到计算图显示在调试器界面,见图1。 3. 设置条件断点,见图5。 - + 图5中,选中检测条件,并勾选了部分节点,代表监控这些节点在计算过程是否存在满足监控条件的输出。 设置完条件断点后,可以在控制面板选择设置轮次点击`确定`或者`继续`继续训练。 4. 条件断点触发,见图6。 - + 条件断点触发后,用户查看对应的节点信息,找出异常原因后修改脚本,解掉bug。 ## 注意事项 diff --git a/tutorials/training/source_zh_cn/advanced_use/distributed_training_ascend.md b/tutorials/training/source_zh_cn/advanced_use/distributed_training_ascend.md index f0752c2b06..ef42b56e03 100644 --- a/tutorials/training/source_zh_cn/advanced_use/distributed_training_ascend.md +++ b/tutorials/training/source_zh_cn/advanced_use/distributed_training_ascend.md @@ -81,11 +81,11 @@ - `device_ip`表示集成网卡的IP地址,可以在当前机器执行指令`cat /etc/hccn.conf`,`address_x`的键值就是网卡IP地址。 - `rank_id`表示卡逻辑序号,固定从0开始编号。 - ### 调用集合通信库 MindSpore分布式并行训练的通信使用了华为集合通信库`Huawei Collective Communication Library`(以下简称HCCL),可以在Ascend AI处理器配套的软件包中找到。同时`mindspore.communication.management`中封装了HCCL提供的集合通信接口,方便用户配置分布式信息。 > HCCL实现了基于Ascend AI处理器的多机多卡通信,有一些使用限制,我们列出使用分布式服务常见的,详细的可以查看HCCL对应的使用文档。 +> > - 单机场景下支持1、2、4、8卡设备集群,多机场景下支持8*n卡设备集群。 > - 每台机器的0-3卡和4-7卡各为1个组网,2卡和4卡训练时卡必须相连且不支持跨组网创建集群。 > - 服务器硬件架构及操作系统需要是SMP(Symmetrical Multi-Processing,对称多处理器)处理模式。 @@ -100,10 +100,11 @@ from mindspore.communication.management import init if __name__ == "__main__": context.set_context(mode=context.GRAPH_MODE, device_target="Ascend", device_id=int(os.environ["DEVICE_ID"])) init() - ... + ... ``` 其中, + - `mode=context.GRAPH_MODE`:使用分布式训练需要指定运行模式为图模式(PyNative模式不支持并行)。 - `device_id`:卡的物理序号,即卡所在机器中的实际序号。 - `init`:使能HCCL通信,并完成分布式训练初始化操作。 @@ -112,7 +113,6 @@ if __name__ == "__main__": 分布式训练时,数据是以数据并行的方式导入的。下面我们以CIFAR-10数据集为例,介绍以数据并行方式导入CIFAR-10数据集的方法,`data_path`是指数据集的路径,即`cifar-10-batches-bin`文件夹的路径。 - ```python import mindspore.common.dtype as mstype import mindspore.dataset as ds @@ -158,7 +158,9 @@ def create_dataset(data_path, repeat_num=1, batch_size=32, rank_id=0, rank_size= return data_set ``` + 其中,与单机不同的是,在数据集接口需要传入`num_shards`和`shard_id`参数,分别对应卡的数量和逻辑序号,建议通过HCCL接口获取: + - `get_rank`:获取当前设备在集群中的ID。 - `get_group_size`:获取集群数量。 @@ -255,7 +257,9 @@ def test_train_cifar(epoch_size=10): model = Model(net, loss_fn=loss, optimizer=opt) model.train(epoch_size, dataset, callbacks=[loss_cb], dataset_sink_mode=True) ``` + 其中, + - `dataset_sink_mode=True`:表示采用数据集的下沉模式,即训练的计算下沉到硬件平台中执行。 - `LossMonitor`:能够通过回调函数返回Loss值,用于监控损失函数。 @@ -322,6 +326,7 @@ cd ../ 脚本需要传入变量`DATA_PATH`和`RANK_SIZE`,分别表示数据集的路径和卡的数量。 其中必要的环境变量有, + - `RANK_TABLE_FILE`:组网信息文件的路径。 - `DEVICE_ID`:当前卡在机器上的实际序号。 - `RANK_ID`:当前卡的逻辑序号。 @@ -331,7 +336,7 @@ cd ../ 日志文件保存`device`目录下,`env.log`中记录了环境变量的相关信息,关于Loss部分结果保存在`train.log`中,示例如下: -``` +```text epoch: 1 step: 156, loss is 2.0084016 epoch: 2 step: 156, loss is 1.6407638 epoch: 3 step: 156, loss is 1.6164391 @@ -485,7 +490,7 @@ context.reset_auto_parallel_context() # set parallel mode, data parallel mode is selected for training and model saving. If you want to choose auto parallel # mode, you can simply change the value of parallel_mode parameter to ParallelMode.AUTO_PARALLEL. context.set_auto_parallel_context(parallel_mode=ParallelMode.SEMI_AUTO_PARALLEL, - strategy_ckpt_save_file='./rank_{}_ckpt/strategy.txt'.format(get_rank)) + strategy_ckpt_save_file='./rank_{}_ckpt/strategy.txt'.format(get_rank)) ``` 然后根据需要设置checkpoint保存策略,以及设置优化器和损失函数等,代码如下: @@ -514,12 +519,14 @@ context.reset_auto_parallel_context() 只需要改动设置checkpoint保存策略的代码,将`CheckpointConfig`中的`integrated_save`参数设置为Fasle,便可实现每张卡上只保存本卡的checkpoint文件,具体改动如下: 将checkpoint配置策略由 + ```python # config checkpoint ckpt_config = CheckpointConfig(keep_checkpoint_max=1) ``` 改为 + ```python # config checkpoint ckpt_config = CheckpointConfig(keep_checkpoint_max=1, integrated_save=False) diff --git a/tutorials/training/source_zh_cn/advanced_use/distributed_training_gpu.md b/tutorials/training/source_zh_cn/advanced_use/distributed_training_gpu.md index c1d5cb03a3..0b2f4a1eeb 100644 --- a/tutorials/training/source_zh_cn/advanced_use/distributed_training_gpu.md +++ b/tutorials/training/source_zh_cn/advanced_use/distributed_training_gpu.md @@ -70,7 +70,7 @@ from mindspore.communication.management import init if __name__ == "__main__": context.set_context(mode=context.GRAPH_MODE, device_target="GPU") init("nccl") - ... + ... ``` 其中, @@ -110,7 +110,7 @@ mpirun -n 8 pytest -s -v ./resnet50_distributed_training.py > train.log 2>&1 & 脚本需要传入变量`DATA_PATH`,表示数据集的路径。此外,我们需要修改下`resnet50_distributed_training.py`文件,由于在GPU上,我们无需设置`DEVICE_ID`环境变量,因此,在脚本中不需要调用`int(os.getenv('DEVICE_ID'))`来获取卡的物理序号,同时`context`中也无需传入`device_id`。我们需要将`device_target`设置为`GPU`,并调用`init("nccl")`来使能NCCL。日志文件保存到device目录下,关于Loss部分结果保存在train.log中。将loss值grep出来后,示例如下: -``` +```text epoch: 1 step: 1, loss is 2.3025854 epoch: 1 step: 1, loss is 2.3025854 epoch: 1 step: 1, loss is 2.3025854 @@ -124,6 +124,7 @@ epoch: 1 step: 1, loss is 2.3025854 ## 运行多机脚本 若训练涉及多机,则需要额外在`mpirun`命令中设置多机配置。你可以直接在`mpirun`命令中用`-H`选项进行设置,比如`mpirun -n 16 -H DEVICE1_IP:8,DEVICE2_IP:8 python hello.py`,表示在ip为DEVICE1_IP和DEVICE2_IP的机器上分别起8个进程运行程序;或者也可以构造一个如下这样的hostfile文件,并将其路径传给`mpirun`的`--hostfile`的选项。hostfile文件每一行格式为`[hostname] slots=[slotnum]`,hostname可以是ip或者主机名。 + ```bash DEVICE1 slots=8 DEVICE2 slots=8 @@ -145,4 +146,4 @@ echo "start training" mpirun -n 16 --hostfile $HOSTFILE -x DATA_PATH=$DATA_PATH -x PATH -mca pml ob1 pytest -s -v ./resnet50_distributed_training.py > train.log 2>&1 & ``` -在GPU上进行分布式训练时,模型参数的保存和加载可参考[分布式训练模型参数保存和加载](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/distributed_training_ascend.html#id12) \ No newline at end of file +在GPU上进行分布式训练时,模型参数的保存和加载可参考[分布式训练模型参数保存和加载](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/distributed_training_ascend.html#id12) diff --git a/tutorials/training/source_zh_cn/advanced_use/enable_mixed_precision.md b/tutorials/training/source_zh_cn/advanced_use/enable_mixed_precision.md index 7181afe3cc..9f52c1ac96 100644 --- a/tutorials/training/source_zh_cn/advanced_use/enable_mixed_precision.md +++ b/tutorials/training/source_zh_cn/advanced_use/enable_mixed_precision.md @@ -42,6 +42,7 @@ MindSpore混合精度典型的计算流程如下图所示: 使用自动混合精度,需要调用相应的接口,将待训练网络和优化器作为输入传进去;该接口会将整张网络的算子转换成FP16算子(除`BatchNorm`算子和Loss涉及到的算子外)。可以使用`amp`接口和`Model`接口两种方式实现混合精度。 使用`amp`接口具体的实现步骤为: + 1. 引入MindSpore的混合精度的接口`amp`; 2. 定义网络:该步骤和普通的网络定义没有区别(无需手动配置某个算子的精度); @@ -93,6 +94,7 @@ output = train_network(predict, label) ``` 使用`Model`接口具体的实现步骤为: + 1. 引入MindSpore的模型训练接口`Model`; 2. 定义网络:该步骤和普通的网络定义没有区别(无需手动配置某个算子的精度); @@ -169,6 +171,7 @@ model.train(epoch=10, train_dataset=ds_train) MindSpore还支持手动混合精度。假定在网络中只有一个Dense Layer要用FP32计算,其他Layer都用FP16计算。混合精度配置以Cell为粒度,Cell默认是FP32类型。 以下是一个手动混合精度的实现步骤: + 1. 定义网络:该步骤与自动混合精度中的步骤2类似; 2. 配置混合精度:通过`net.to_float(mstype.float16)`,把该Cell及其子Cell中所有的算子都配置成FP16;然后,将模型中的dense算子手动配置成FP32; @@ -220,4 +223,4 @@ train_network.set_train() # Run training output = train_network(predict, label) -``` \ No newline at end of file +``` diff --git a/tutorials/training/source_zh_cn/advanced_use/evaluate_the_model_during_training.md b/tutorials/training/source_zh_cn/advanced_use/evaluate_the_model_during_training.md index ce8172c623..ca8e2c5150 100644 --- a/tutorials/training/source_zh_cn/advanced_use/evaluate_the_model_during_training.md +++ b/tutorials/training/source_zh_cn/advanced_use/evaluate_the_model_during_training.md @@ -22,6 +22,7 @@ 在面对复杂网络时,往往需要进行几十甚至几百次的epoch训练。在训练之前,很难掌握在训练到第几个epoch时,模型的精度能达到满足要求的程度,所以经常会采用一边训练的同时,在相隔固定epoch的位置对模型进行精度验证,并保存相应的模型,等训练完毕后,通过查看对应模型精度的变化就能迅速地挑选出相对最优的模型,本文将采用这种方法,以LeNet网络为样本,进行示例。 流程如下: + 1. 定义回调函数EvalCallBack,实现同步进行训练和验证。 2. 定义训练网络并执行。 3. 将不同epoch下的模型精度绘制出折线图并挑选最优模型。 @@ -54,7 +55,7 @@ class EvalCallBack(Callback): self.eval_dataset = eval_dataset self.eval_per_epoch = eval_per_epoch self.epoch_per_eval = epoch_per_eval - + def epoch_end(self, run_context): cb_param = run_context.original_args() cur_epoch = cb_param.cur_epoch_num @@ -92,21 +93,21 @@ if __name__ == "__main__": eval_per_epoch = 2 ... ... - + # need to calculate how many steps are in each epoch,in this example, 1875 steps per epoch config_ck = CheckpointConfig(save_checkpoint_steps=eval_per_epoch*1875, keep_checkpoint_max=15) ckpoint_cb = ModelCheckpoint(prefix="checkpoint_lenet",directory=ckpt_save_dir, config=config_ck) model = Model(network, net_loss, net_opt, metrics={"Accuracy": Accuracy()}) - + epoch_per_eval = {"epoch": [], "acc": []} eval_cb = EvalCallBack(model, eval_data, eval_per_epoch, epoch_per_eval) - + model.train(epoch_size, train_data, callbacks=[ckpoint_cb, LossMonitor(375), eval_cb], dataset_sink_mode=True) ``` 输出结果: - + ```text epoch: 1 step: 375, loss is 2.298612 epoch: 1 step: 750, loss is 2.075152 epoch: 1 step: 1125, loss is 0.39205977 @@ -118,9 +119,7 @@ if __name__ == "__main__": epoch: 2 step: 1500, loss is 0.067035824 epoch: 2 step: 1875, loss is 0.0050643035 {'Accuracy': 0.9763621794871795} - ... ... - epoch: 9 step: 375, loss is 0.021227183 epoch: 9 step: 750, loss is 0.005586236 epoch: 9 step: 1125, loss is 0.029125651 @@ -133,10 +132,9 @@ if __name__ == "__main__": epoch: 10 step: 1875, loss is 0.10563098 {'Accuracy': 0.979667467948718} - 在同一目录找到`lenet_ckpt`文件夹,文件夹中保存了5个模型,和一个计算图相关数据,其结构如下: -``` +```text lenet_ckpt ├── checkpoint_lenet-10_1875.ckpt ├── checkpoint_lenet-2_1875.ckpt @@ -150,7 +148,6 @@ lenet_ckpt 定义绘图函数`eval_show`,将`epoch_per_eval`载入到`eval_show`中,绘制出不同`epoch`下模型的验证精度折线图。 - ```python import matplotlib.pyplot as plt @@ -168,7 +165,6 @@ eval_show(epoch_per_eval) ![png](./images/evaluate_the_model_during_training.png) - 从上图可以一目了然地挑选出需要的最优模型。 ## 总结 diff --git a/tutorials/training/source_zh_cn/advanced_use/improve_model_security_nad.md b/tutorials/training/source_zh_cn/advanced_use/improve_model_security_nad.md index 68020090ef..ed4b2d5b3f 100644 --- a/tutorials/training/source_zh_cn/advanced_use/improve_model_security_nad.md +++ b/tutorials/training/source_zh_cn/advanced_use/improve_model_security_nad.md @@ -25,6 +25,7 @@ 本教程介绍MindArmour提供的模型安全防护手段,引导您快速使用MindArmour,为您的AI模型提供一定的安全防护能力。 AI算法设计之初普遍未考虑相关的安全威胁,使得AI算法的判断结果容易被恶意攻击者影响,导致AI系统判断失准。攻击者在原始样本处加入人类不易察觉的微小扰动,导致深度学习模型误判,称为对抗样本攻击。MindArmour模型安全提供对抗样本生成、对抗样本检测、模型防御、攻防效果评估等功能,为AI模型安全研究和AI应用安全提供重要支撑。 + - 对抗样本生成模块支持安全工程师快速高效地生成对抗样本,用于攻击AI模型。 - 对抗样本检测、防御模块支持用户检测过滤对抗样本、增强AI模型对于对抗样本的鲁棒性。 - 评估模块提供多种指标全面评估对抗样本攻防性能。 @@ -32,6 +33,7 @@ AI算法设计之初普遍未考虑相关的安全威胁,使得AI算法的判 这里通过图像分类任务上的对抗性攻防,以攻击算法FGSM和防御算法NAD为例,介绍MindArmour在对抗攻防上的使用方法。 > 本例面向CPU、GPU、Ascend 910 AI处理器,你可以在这里下载完整的样例代码: +> > - `mnist_attack_fgsm.py`:包含攻击代码。 > - `mnist_defense_nad.py`:包含防御代码。 @@ -132,18 +134,18 @@ def generate_mnist_dataset(data_path, batch_size=32, repeat_size=1, return nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size, stride=stride, padding=padding, weight_init=weight, has_bias=False, pad_mode="valid") - - + + def fc_with_initialize(input_channels, out_channels): weight = weight_variable() bias = weight_variable() return nn.Dense(input_channels, out_channels, weight, bias) - - + + def weight_variable(): return TruncatedNormal(0.02) - - + + class LeNet5(nn.Cell): """ Lenet network @@ -158,7 +160,7 @@ def generate_mnist_dataset(data_path, batch_size=32, repeat_size=1, self.relu = nn.ReLU() self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) self.flatten = nn.Flatten() - + def construct(self, x): x = self.conv1(x) x = self.relu(x) @@ -190,7 +192,7 @@ def generate_mnist_dataset(data_path, batch_size=32, repeat_size=1, model = Model(net, loss, opt, metrics=None) model.train(10, ds_train, callbacks=[LossMonitor()], dataset_sink_mode=False) - + # 2. get test data ds_test = generate_mnist_dataset(os.path.join(mnist_path, "test"), batch_size=batch_size, repeat_size=1, @@ -203,7 +205,7 @@ def generate_mnist_dataset(data_path, batch_size=32, repeat_size=1, test_inputs = np.concatenate(inputs) test_labels = np.concatenate(labels) ``` - + 3. 测试模型。 ```python @@ -217,15 +219,15 @@ def generate_mnist_dataset(data_path, batch_size=32, repeat_size=1, logits = net(Tensor(batch_inputs)).asnumpy() test_logits.append(logits) test_logits = np.concatenate(test_logits) - + tmp = np.argmax(test_logits, axis=1) == np.argmax(test_labels, axis=1) accuracy = np.mean(tmp) LOGGER.info(TAG, 'prediction accuracy before attacking is : %s', accuracy) ``` - + 测试结果中分类精度达到了98%。 - - ```python + + ```python prediction accuracy before attacking is : 0.9895833333333334 ``` @@ -272,7 +274,7 @@ LOGGER.info(TAG, 'The average structural similarity between original ' 攻击结果如下: -``` +```text prediction accuracy after attacking is : 0.052083 mis-classification rate of adversaries is : 0.947917 The average confidence of adversarial class is : 0.803375 @@ -349,7 +351,7 @@ LOGGER.info(TAG, 'The average confidence of true class is : %s', ### 防御效果 -``` +```text accuracy of TEST data on defensed model is : 0.974259 accuracy of adv data on defensed model is : 0.856370 defense mis-classification rate of adversaries is : 0.143629 @@ -358,4 +360,3 @@ The average confidence of true class is : 0.177374 ``` 使用NAD进行对抗样本防御后,模型对于对抗样本的误分类率从95%降至14%,模型有效地防御了对抗样本。同时,模型对于原来测试数据集的分类精度达97%。 - diff --git a/tutorials/training/source_zh_cn/advanced_use/lineage_and_scalars_comparision.md b/tutorials/training/source_zh_cn/advanced_use/lineage_and_scalars_comparision.md index f7a55d1c79..555ef0fee8 100644 --- a/tutorials/training/source_zh_cn/advanced_use/lineage_and_scalars_comparision.md +++ b/tutorials/training/source_zh_cn/advanced_use/lineage_and_scalars_comparision.md @@ -106,6 +106,7 @@ MindInsight中的模型溯源、数据溯源和对比看板同训练看板一样 ## 注意事项 出于性能上的考虑,MindInsight对比看板使用缓存机制加载训练的标量曲线数据,并进行以下限制: + - 对比看板只支持在缓存中的训练进行比较标量曲线对比。 - 缓存最多保留最新(按修改时间排列)的15个训练。 - 用户最多同时对比5个训练的标量曲线。 diff --git a/tutorials/training/source_zh_cn/advanced_use/migrate_3rd_scripts.md b/tutorials/training/source_zh_cn/advanced_use/migrate_3rd_scripts.md index 7b94469d21..d382670fc2 100644 --- a/tutorials/training/source_zh_cn/advanced_use/migrate_3rd_scripts.md +++ b/tutorials/training/source_zh_cn/advanced_use/migrate_3rd_scripts.md @@ -36,10 +36,12 @@ 以ResNet-50为例,[Conv](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.Conv2d)和[BatchNorm](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.BatchNorm2d)是其中最主要的两个算子,它们已在MindSpore支持的算子列表中。 如果发现没有对应算子,建议: + - 使用其他算子替换:分析算子实现公式,审视是否可以采用MindSpore现有算子叠加达到预期目标。 - 临时替代方案:比如不支持某个Loss,是否可以替换为同类已支持的Loss算子;又比如当前的网络结构,是否可以替换为其他同类主流网络等。 如果发现支持的算子存在功能不全,建议: + - 非必要功能:可删除。 - 必要功能:寻找替代方案。 @@ -68,7 +70,7 @@ MindSpore与TensorFlow、PyTorch在网络结构组织方式上,存在一定差 2. 加载数据集和预处理。 使用MindSpore构造你需要使用的数据集。目前MindSpore已支持常见数据集,你可以通过原始格式、`MindRecord`、`TFRecord`等多种接口调用,同时还支持数据处理以及数据增强等相关功能,具体用法可参考[准备数据教程](https://www.mindspore.cn/tutorial/training/zh-CN/master/use/data_preparation.html)。 - + 本例中加载了Cifar-10数据集,可同时支持单卡和多卡的场景。 ```python @@ -78,7 +80,7 @@ MindSpore与TensorFlow、PyTorch在网络结构组织方式上,存在一定差 ds = de.Cifar10Dataset(dataset_path, num_parallel_workers=4, shuffle=True, num_shards=device_num, shard_id=rank_id) ``` - + 然后对数据进行了数据增强、数据清洗和批处理等操作。代码详见。 3. 构建网络。 @@ -234,13 +236,13 @@ MindSpore与TensorFlow、PyTorch在网络结构组织方式上,存在一定差 ``` 如果希望使用`Model`内置的评估方法,则可以使用[metrics](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/custom_debugging_info.html#mindspore-metrics)属性设置希望使用的评估方法。 - + ```python model = Model(net, loss_fn=loss, optimizer=opt, loss_scale_manager=loss_scale, metrics={'acc'}) ``` 类似于TensorFlow的`estimator.train`,可以通过调用`model.train`接口来进行训练。CheckPoint和中间结果打印等功能,可通过`Callback`的方式定义到`model.train`接口上。 - + ```python time_cb = TimeMonitor(data_size=step_size) loss_cb = LossMonitor() @@ -256,6 +258,7 @@ MindSpore与TensorFlow、PyTorch在网络结构组织方式上,存在一定差 #### 精度调试 精度调优过程建议如下两点: + 1. 单卡精度验证时,建议先采用小数据集进行训练。验证达标后,多卡精度验证时,再采用全量数据集。这样可以帮助提升调试效率。 2. 首先删减脚本中的不必要技巧(如优化器中的增强配置、动态Loss Scale等),验证达标后,在此基础上逐个叠加新增功能,待当前新增功能确认正常后,再叠加下一个功能。这样可以帮助快速定位问题。 diff --git a/tutorials/training/source_zh_cn/advanced_use/migrate_3rd_scripts_mindconverter.md b/tutorials/training/source_zh_cn/advanced_use/migrate_3rd_scripts_mindconverter.md index 4128c54a2c..6cf61899c7 100644 --- a/tutorials/training/source_zh_cn/advanced_use/migrate_3rd_scripts_mindconverter.md +++ b/tutorials/training/source_zh_cn/advanced_use/migrate_3rd_scripts_mindconverter.md @@ -22,14 +22,10 @@ MindConverter是一款将PyTorch模型脚本转换至MindSpore的脚本迁移工具。结合转换报告的提示信息,用户对转换后脚本进行微小改动,即可快速将PyTorch模型脚本迁移至MindSpore。 - - ## 安装 此工具为MindInsight的子模块,安装MindInsight后,即可使用MindConverter,MindInsight安装请参考该[安装文档](https://www.mindspore.cn/install/)。 - - ## 用法 MindConverter提供命令行(Command-line interface, CLI)的使用方式,命令如下。 @@ -79,15 +75,13 @@ optional arguments: 另外,当使用基于图结构的脚本生成方案时,请确保原PyTorch项目已在Python包搜索路径中,可通过CLI进入Python交互式命令行,通过import的方式判断是否已满足;若未加入,可通过`--project_path`命令手动将项目路径传入,以确保MindConverter可引用到原PyTorch脚本。 - > 假设用户项目目录为`/home/user/project/model_training`,用户可通过如下命令手动项目添加至包搜索路径中:`export PYTHONPATH=/home/user/project/model_training:$PYTHONPATH` - > 此处MindConverter需要引用原PyTorch脚本,是因为PyTorch模型反向序列化过程中会引用原脚本。 - ## 使用场景 MindConverter提供两种技术方案,以应对不同脚本迁移场景: + 1. 用户希望迁移后脚本保持原有PyTorch脚本结构(包括变量、函数、类命名等与原脚本保持一致); 2. 用户希望迁移后脚本保持较高的转换率,尽量少的修改、甚至不需要修改,即可实现迁移后模型脚本的执行。 @@ -101,7 +95,6 @@ MindConverter提供两种技术方案,以应对不同脚本迁移场景: > 2. 基于图结构的脚本生成方案,由于要基于推理模式加载PyTorch模型,会导致转换后网络中Dropout算子丢失,需要用户手动补齐; > 3. 基于图结构的脚本生成方案持续优化中。 - ## 使用示例 ### 基于AST的脚本转换示例 @@ -121,6 +114,7 @@ line x:y: [UnConvert] 'operator' didn't convert. ... ``` 转换报告示例如下所示: + ```text [Start Convert] [Insert] 'import mindspore.ops.operations as P' is inserted to the converted file. @@ -133,7 +127,6 @@ line x:y: [UnConvert] 'operator' didn't convert. ... 对于部分未成功转换的算子,报告中会提供修改建议,如`line 157:23`,MindConverter建议将`torch.nn.AdaptiveAvgPool2d`替换为`mindspore.ops.operations.ReduceMean`。 - ### 基于图结构的脚本生成示例 若用户已将PyTorch模型保存为.pth格式,假设模型绝对路径为`/home/user/model.pth`,该模型期望的输入样本shape为(3, 224, 224),原PyTorch脚本位于`/home/user/project/model_training`,希望将脚本输出至`/home/user/output`,转换报告输出至`/home/user/output/report`,则脚本生成命令为: @@ -147,10 +140,8 @@ mindconverter --model_file /home/user/model.pth --shape 3,224,224 \ 执行该命令,MindSpore代码文件、转换报告生成至相应目录。 - 基于图结构的脚本生成方案产生的转换报告格式与AST方案相同。然而,由于基于图结构方案属于生成式方法,转换过程中未参考原PyTorch脚本,因此生成的转换报告中涉及的代码行、列号均指生成后脚本。 - 另外对于未成功转换的算子,在代码中会相应的标识该节点输入、输出Tensor的shape(以`input_shape`, `output_shape`标识),便于用户手动修改。以Reshape算子为例(暂不支持Reshape),将生成如下代码: ```python @@ -194,7 +185,6 @@ class Classifier(nn.Cell): ``` - > 其中`--output`与`--report`参数可省略,若省略,该命令将在当前工作目录(Working directory)下自动创建`output`目录,将生成的脚本、转换报告输出至该目录。 ## 注意事项 diff --git a/tutorials/training/source_zh_cn/advanced_use/nlp_bert_poetry.md b/tutorials/training/source_zh_cn/advanced_use/nlp_bert_poetry.md index d595dbef53..27cbdb6297 100644 --- a/tutorials/training/source_zh_cn/advanced_use/nlp_bert_poetry.md +++ b/tutorials/training/source_zh_cn/advanced_use/nlp_bert_poetry.md @@ -87,7 +87,7 @@ BERT采用了Encoder结构,`attention_mask`为全1的向量,即每个token 样例代码可[点击下载](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com:443/DemoCode/bert_poetry_c.rar),可直接运行体验实现写诗效果,代码结构如下: -``` +```text └─bert_poetry ├── src ├── bert_for_pre_training.py # 封装BERT-Base正反向网络类 @@ -107,7 +107,7 @@ BERT采用了Encoder结构,`attention_mask`为全1的向量,即每个token ├── poetry_client.py # 客户端代码 ├── ms_service_pb2_grpc.py # 定义了grpc相关函数供bert_flask.py使用 └── ms_service_pb2.py # 定义了protocol buffer相关函数供bert_flask.py使用 - + ``` ## 实现步骤 @@ -118,7 +118,6 @@ BERT采用了Encoder结构,`attention_mask`为全1的向量,即每个token ### 数据准备 - 数据集为43030首诗词:可[下载](https://github.com/AaronJny/DeepLearningExamples/tree/master/keras-bert-poetry-generator)其中的`poetry.txt`。 BERT-Base模型的预训练ckpt:可在[MindSpore官网](http://download.mindspore.cn/model_zoo/official/nlp/bert/bert_base_ascend_0.5.0_cn-wiki_official_nlp_20200720.tar.gz)下载。 @@ -127,7 +126,7 @@ BERT-Base模型的预训练ckpt:可在[MindSpore官网](http://download.mindsp 在`src/finetune_config.py`中修改`pre_training_ckpt`路径,加载预训练的ckpt,修改`batch_size`为bs,修改`dataset_path`为存放诗词的路径,默认的`BertConfig`为Base模型。 -``` +```python 'dataset_path': '/your/path/to/poetry.txt', 'batch_size': bs, 'pre_training_ckpt': '/your/path/to/pre_training_ckpt', @@ -135,7 +134,7 @@ BERT-Base模型的预训练ckpt:可在[MindSpore官网](http://download.mindsp 执行训练指令 -``` +```bash python poetry.py ``` @@ -145,19 +144,20 @@ python poetry.py `generate_random_poetry`函数实现随机生成和续写诗句的功能,如果入参`s`为空则代表随机生成,`s`不为空则为续写诗句。 -``` +```python output = generate_random_poetry(poetrymodel, s='') #随机生成 output = generate_random_poetry(poetrymodel, s='天下为公') #续写诗句 ``` `generate_hidden`函数实现生成藏头诗的功能,入参`head`为隐藏的头部语句。 -``` + +```python output = generate_hidden(poetrymodel, head="人工智能") #藏头诗 ``` 执行推理指令 -``` +```bash python poetry.py --train=False --ckpt_path=/your/ckpt/path ``` @@ -165,7 +165,7 @@ python poetry.py --train=False --ckpt_path=/your/ckpt/path 随机生成: -``` +```text 大堤柳暗, 春深树根。 东望一望, @@ -178,7 +178,7 @@ python poetry.py --train=False --ckpt_path=/your/ckpt/path 续写 【天下为公】: -``` +```text 天下为公少, 唯君北向西。 远山无路见, @@ -191,7 +191,7 @@ python poetry.py --train=False --ckpt_path=/your/ckpt/path 藏头诗 【人工智能】: -``` +```text 人君离别难堪望, 工部张机自少年。 智士不知身没处, @@ -206,7 +206,7 @@ python poetry.py --train=False --ckpt_path=/your/ckpt/path 在使用Serving部署服务前,需要导出模型文件,在`poetry.py`中提供了`export_net`函数负责导出MINDIR模型,执行命令: - ``` + ```bash python poetry.py --export=True --ckpt_path=/your/ckpt/path ``` @@ -216,7 +216,7 @@ python poetry.py --train=False --ckpt_path=/your/ckpt/path 在服务器侧启动Serving服务,并加载导出的MINDIR文件`poetry.pb`。 - ``` + ```bash cd serving ./ms_serving --model_path=/path/to/your/MINDIR_file --model_name=your_mindir.pb ``` @@ -225,7 +225,7 @@ python poetry.py --train=False --ckpt_path=/your/ckpt/path 预处理及后处理通过Flask框架来快速实现,在服务器侧运行`bert_flask.py`文件,启动Flask服务。 - ``` + ```bash python bert_flask.py ``` @@ -235,36 +235,38 @@ python poetry.py --train=False --ckpt_path=/your/ckpt/path 可用电脑作为客户端,修改`poetry_client.py`中的url请求地址为推理服务启动的服务器IP,并确保端口与服务端`bert_flask.py`中的端口一致,例如: - ``` + ```python url = 'http://10.155.170.71:8080/' ``` 运行`poetry_client.py`文件 - ``` + ```bash python poetry_client.py ``` 此时在客户端输入指令,即可在远端服务器进行推理,返回生成的诗句。 - ``` + ```text 选择模式:0-随机生成,1:续写,2:藏头诗 0 ``` - ``` + + ```text 一朵黄花叶, 千竿绿树枝。 含香待夏晚, 澹浩长风时。 ``` - ``` + ```text 选择模式:0-随机生成,1:续写,2:藏头诗 1 输入首句诗 明月 ``` - ``` + + ```text 明月照三峡, 长空一片云。 秋风与雨过, @@ -275,13 +277,14 @@ python poetry.py --train=False --ckpt_path=/your/ckpt/path 何道逐风君。 ``` - ``` + ```text 选择模式:0-随机生成,1:续写,2:藏头诗 2 输入藏头诗 人工智能 ``` - ``` + + ```text 人生事太远, 工部与神期。 智者岂无识, @@ -290,10 +293,8 @@ python poetry.py --train=False --ckpt_path=/your/ckpt/path 细读鉴赏一下,平仄、押韵、意味均有体现,AI诗人已然成形。 - > 友情提醒,修改其他类型数据集,也可以完成其他简单的生成类任务,如对春联,简单聊天机器人等,用户可尝试体验实现。 - ## 参考文献 [1] [BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805) @@ -301,4 +302,3 @@ python poetry.py --train=False --ckpt_path=/your/ckpt/path [2] [https://github.com/AaronJny/DeepLearningExamples/](https://github.com/AaronJny/DeepLearningExamples/) [3] [https://github.com/bojone/bert4keras](https://github.com/bojone/bert4keras) - diff --git a/tutorials/training/source_zh_cn/advanced_use/nlp_sentimentnet.md b/tutorials/training/source_zh_cn/advanced_use/nlp_sentimentnet.md index 9dcc7157ae..e73bbcaf3b 100644 --- a/tutorials/training/source_zh_cn/advanced_use/nlp_sentimentnet.md +++ b/tutorials/training/source_zh_cn/advanced_use/nlp_sentimentnet.md @@ -48,6 +48,7 @@ $垂直极性词 = 通用极性词 + 领域特有极性词$ 按照处理文本的粒度不同,情感分析可分为词语级、短语级、句子级、段落级以及篇章级等几个研究层次。这里以“段落级”为例,输入为一个段落,输出为影评是正面还是负面的信息。 ## 准备及设计 + ### 下载数据集 采用IMDb影评数据集作为实验数据。 @@ -55,15 +56,17 @@ $垂直极性词 = 通用极性词 + 领域特有极性词$ 以下是负面影评(Negative)和正面影评(Positive)的案例。 -| Review | Label | +| Review | Label | |---|---| | "Quitting" may be as much about exiting a pre-ordained identity as about drug withdrawal. As a rural guy coming to Beijing, class and success must have struck this young artist face on as an appeal to separate from his roots and far surpass his peasant parents' acting success. Troubles arise, however, when the new man is too new, when it demands too big a departure from family, history, nature, and personal identity. The ensuing splits, and confusion between the imaginary and the real and the dissonance between the ordinary and the heroic are the stuff of a gut check on the one hand or a complete escape from self on the other. | Negative | | This movie is amazing because the fact that the real people portray themselves and their real life experience and do such a good job it's like they're almost living the past over again. Jia Hongsheng plays himself an actor who quit everything except music and drugs struggling with depression and searching for the meaning of life while being angry at everyone especially the people who care for him most. | Positive | 同时,我们要下载GloVe文件,并在文件开头处添加新的一行,意思是总共读取400000个单词,每个单词用300纬度的词向量表示。 -``` + +```text 400000 300 ``` + GloVe文件下载地址:。 ### 确定评价标准 @@ -74,22 +77,23 @@ $精度(Accuracy)= 分类正确的样本数目 / 总样本数目$ $精准度(Precision)= 真阳性样本数目 / 所有预测类别为阳性的样本数目$ -$召回率(Recall)= 真阳性样本数目 / 所有真实类别为阳性的样本数目$ +$召回率(Recall)= 真阳性样本数目 / 所有真实类别为阳性的样本数目$ -$F1分数 = (2 * Precision * Recall) / (Precision + Recall)$ +$F1分数 = (2 \* Precision \* Recall) / (Precision + Recall)$ 在IMDb这个数据集中,正负样本数差别不大,可以简单地用精度(accuracy)作为分类器的衡量标准。 - ### 确定网络及流程 我们使用基于LSTM构建的SentimentNet网络进行自然语言处理。 + 1. 加载使用的数据集,并进行必要的数据处理。 2. 使用基于LSTM构建的SentimentNet网络训练数据,生成模型。 > LSTM(Long short-term memory,长短期记忆)网络是一种时间循环神经网络,适合于处理和预测时间序列中间隔和延迟非常长的重要事件。具体介绍可参考网上资料,在此不再赘述。 3. 得到模型之后,使用验证数据集,查看模型精度情况。 > 本例面向GPU或CPU硬件平台,你可以在这里下载完整的样例代码: +> > - `src/config.py`:网络中的一些配置,包括`batch size`、进行几次epoch训练等。 > - `src/dataset.py`:数据集相关,包括转换成MindRecord文件,数据预处理等。 > - `src/imdb.py`: 解析IMDb数据集的工具。 @@ -98,8 +102,11 @@ $F1分数 = (2 * Precision * Recall) / (Precision + Recall)$ > - `eval.py`:模型的推理脚本。 ## 实现阶段 + ### 导入需要的库文件 + 下列是我们所需要的公共模块及MindSpore的模块及库文件。 + ```python import argparse import os @@ -119,6 +126,7 @@ from mindspore.train.serialization import load_param_into_net, load_checkpoint ### 配置环境信息 1. 使用`parser`模块,传入运行必要的信息,如数据集存放路径,GloVe存放路径,这样的好处是,对于经常变化的配置,可以在运行代码时输入,使用更加灵活。 + ```python parser = argparse.ArgumentParser(description='MindSpore LSTM Example') parser.add_argument('--preprocess', type=str, default='false', choices=['true', 'false'], @@ -139,12 +147,14 @@ from mindspore.train.serialization import load_param_into_net, load_checkpoint ``` 2. 实现代码前,需要配置必要的信息,包括环境信息、执行的模式、后端信息及硬件信息。 + ```python context.set_context( mode=context.GRAPH_MODE, save_graphs=False, device_target=args.device_target) ``` + 详细的接口配置信息,请参见`context.set_context`接口说明。 ### 预处理数据集 @@ -156,15 +166,14 @@ if args.preprocess == "true": print("============== Starting Data Pre-processing ==============") convert_to_mindrecord(cfg.embed_size, args.aclimdb_path, args.preprocess_path, args.glove_path) ``` -> 转换成功后会在`preprocess_path`路径下生成`mindrecord`文件; 通常该操作在数据集不变的情况下,无需每次训练都执行。 +> 转换成功后会在`preprocess_path`路径下生成`mindrecord`文件; 通常该操作在数据集不变的情况下,无需每次训练都执行。 > `convert_to_mindrecord`函数的具体实现请参考 - > 其中包含两大步骤: +> > 1. 解析文本数据集,包括编码、分词、对齐、处理GloVe原始数据,使之能够适应网络结构。 > 2. 转换并保存为MindRecord格式数据集。 - ### 定义网络 ```python @@ -178,11 +187,13 @@ network = SentimentNet(vocab_size=embedding_table.shape[0], weight=Tensor(embedding_table), batch_size=cfg.batch_size) ``` + > `SentimentNet`网络结构的具体实现请参考 ### 预训练模型 通过参数`pre_trained`指定预加载CheckPoint文件来进行预训练,默认该参数为空。 + ```python if args.pre_trained: load_param_into_net(network, load_checkpoint(args.pre_trained)) @@ -217,6 +228,7 @@ else: model.train(cfg.num_epochs, ds_train, callbacks=[time_cb, ckpoint_cb, loss_cb]) print("============== Training Success ==============") ``` + > `lstm_create_dataset`函数的具体实现请参考 ### 模型验证 @@ -238,12 +250,15 @@ print("============== {} ==============".format(acc)) ``` ## 实验结果 + 在经历了20轮epoch之后,在测试集上的精度约为84.19%。 -**执行训练** +### 执行训练 + 1. 运行训练代码,查看运行结果。 + ```shell - $ python train.py --preprocess=true --ckpt_path=./ --device_target=GPU + python train.py --preprocess=true --ckpt_path=./ --device_target=GPU ``` 输出如下,可以看到loss值随着训练逐步降低,最后达到0.2855左右: @@ -261,13 +276,13 @@ print("============== {} ==============".format(acc)) epoch: 20 step: 389, loss is 0.1354 epoch: 20 step: 390, loss is 0.2855 ``` - + 2. 查看保存的CheckPoint文件。 - + 训练过程中保存了CheckPoint文件,即模型文件,我们可以查看文件保存的路径下的所有保存文件。 ```shell - $ ls ./*.ckpt + ls ./*.ckpt ``` 输出如下: @@ -276,12 +291,12 @@ print("============== {} ==============".format(acc)) lstm-11_390.ckpt lstm-12_390.ckpt lstm-13_390.ckpt lstm-14_390.ckpt lstm-15_390.ckpt lstm-16_390.ckpt lstm-17_390.ckpt lstm-18_390.ckpt lstm-19_390.ckpt lstm-20_390.ckpt ``` -**验证模型** +### 验证模型 使用最后保存的CheckPoint文件,加载验证数据集,进行验证。 ```shell -$ python eval.py --ckpt_path=./lstm-20_390.ckpt --device_target=GPU +python eval.py --ckpt_path=./lstm-20_390.ckpt --device_target=GPU ``` 输出如下,可以看到使用验证的数据集,对文本的情感分析正确率在84.19%左右,达到一个基本满意的结果。 @@ -290,6 +305,3 @@ $ python eval.py --ckpt_path=./lstm-20_390.ckpt --device_target=GPU ============== Starting Testing ============== ============== {'acc': 0.8419471153846154} ============== ``` - - - diff --git a/tutorials/training/source_zh_cn/advanced_use/optimize_data_processing.md b/tutorials/training/source_zh_cn/advanced_use/optimize_data_processing.md index 30c79d1cbc..256a17af7d 100644 --- a/tutorials/training/source_zh_cn/advanced_use/optimize_data_processing.md +++ b/tutorials/training/source_zh_cn/advanced_use/optimize_data_processing.md @@ -54,7 +54,7 @@ import numpy as np 目录结构如下所示: -``` +```text dataset/Cifar10Data ├── cifar-10-batches-bin │   ├── batches.meta.txt @@ -77,6 +77,7 @@ dataset/Cifar10Data ``` 其中: + - `cifar-10-batches-bin`目录为CIFAR-10二进制格式数据集目录。 - `cifar-10-batches-py`目录为CIFAR-10 Python文件格式数据集目录。 @@ -94,6 +95,7 @@ MindSpore为用户提供了多种数据加载方式,其中包括常用数据 ![title](./images/data_loading_performance_scheme.png) 数据加载性能优化建议如下: + - 已经支持的数据集格式优选内置加载算子,具体内容请参考[内置加载算子](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.dataset.html),如果性能仍无法满足需求,则可采取多线程并发方案,请参考本文[多线程优化方案](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/optimize_data_processing.html#id16)。 - 不支持的数据集格式,优选转换为MindSpore数据格式后再使用`MindDataset`类进行加载,具体内容请参考[MindSpore数据格式转换](https://www.mindspore.cn/doc/programming_guide/zh-CN/master/dataset_conversion.html),如果性能仍无法满足需求,则可采取多线程并发方案,请参考本文[多线程优化方案](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/optimize_data_processing.html#id16)。 - 不支持的数据集格式,算法快速验证场景,优选用户自定义`GeneratorDataset`类实现,如果性能仍无法满足需求,则可采取多进程并发方案,请参考本文[多进程优化方案](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/optimize_data_processing.html#id17)。 @@ -115,7 +117,7 @@ MindSpore为用户提供了多种数据加载方式,其中包括常用数据 输出: - ``` + ```text {'image': Tensor(shape=[32, 32, 3], dtype=UInt8, value= [[[235, 235, 235], [230, 230, 230], @@ -150,7 +152,7 @@ MindSpore为用户提供了多种数据加载方式,其中包括常用数据 输出: - ``` + ```text {'data': Tensor(shape=[1431], dtype=UInt8, value= [255, 216, 255, ..., 63, 255, 217]), 'id': Tensor(shape=[], dtype=Int64, value= 30474), 'label': Tensor(shape=[], dtype=Int64, value= 2)} @@ -171,7 +173,7 @@ MindSpore为用户提供了多种数据加载方式,其中包括常用数据 输出: - ``` + ```text {'data': Tensor(shape=[1], dtype=Int64, value= [0])} ``` @@ -184,6 +186,7 @@ shuffle操作主要是对有序的数据集或者进行过repeat的数据集进 ![title](./images/shuffle_performance_scheme.png) shuffle性能优化建议如下: + - 直接使用内置加载算子的`shuffle`参数进行数据的混洗。 - 如果使用的是`shuffle`函数,当性能仍无法满足需求,可通过调整`buffer_size`参数的值来优化提升性能。 @@ -204,7 +207,7 @@ shuffle性能优化建议如下: 输出: - ``` + ```text {'image': Tensor(shape=[32, 32, 3], dtype=UInt8, value= [[[254, 254, 254], [255, 255, 254], @@ -239,7 +242,7 @@ shuffle性能优化建议如下: 输出: - ``` + ```text before shuffle: [0 1 2 3 4] [1 2 3 4 5] @@ -257,6 +260,7 @@ shuffle性能优化建议如下: ## 数据增强性能优化 在图片分类的训练中,尤其是当数据集比较小的时候,用户可以使用数据增强的方式来预处理图片,从而丰富数据集。MindSpore为用户提供了多种数据增强的方式,其中包括: + - 使用内置C算子(`c_transforms`模块)进行数据增强。 - 使用内置Python算子(`py_transforms`模块)进行数据增强。 - 用户可根据自己的需求,自定义Python函数进行数据增强。 @@ -273,6 +277,7 @@ shuffle性能优化建议如下: ![title](./images/data_enhancement_performance_scheme.png) 数据增强性能优化建议如下: + - 优先使用`c_transforms`模块进行数据增强,因为性能最高,如果性能仍无法满足需求,可采取[多线程优化方案](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/optimize_data_processing.html#id16)、[Compose优化方案](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/optimize_data_processing.html#compose)或者[算子融合优化方案](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/optimize_data_processing.html#id18)。 - 如果使用了`py_transforms`模块进行数据增强,当性能仍无法满足需求,可采取[多线程优化方案](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/optimize_data_processing.html#id16)、[多进程优化方案](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/optimize_data_processing.html#id17)、[Compose优化方案](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/optimize_data_processing.html#compose)或者[算子融合优化方案](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/optimize_data_processing.html#id18)。 - `c_transforms`模块是在C++内维护buffer管理,`py_transforms`模块是在Python内维护buffer管理。因为Python和C++切换的性能成本,建议不要混用算子。 @@ -326,7 +331,7 @@ shuffle性能优化建议如下: 输出: - ``` + ```text before map: [0 1 2 3 4] [1 2 3 4 5] @@ -394,6 +399,7 @@ shuffle性能优化建议如下: ### 多线程优化方案 在数据pipeline过程中,相关算子一般都有线程数设置参数,来提升处理并发度,提升性能,例如: + - 在数据加载的过程中,内置数据加载类有`num_parallel_workers`参数用来设置线程数。 - 在数据增强的过程中,`map`函数有`num_parallel_workers`参数用来设置线程数。 - 在Batch的过程中,`batch`函数有`num_parallel_workers`参数用来设置线程数。 @@ -403,6 +409,7 @@ shuffle性能优化建议如下: ### 多进程优化方案 数据处理中Python实现的算子均支持多进程的模式,例如: + - `GeneratorDataset`这个类默认是多进程模式,它的`num_parallel_workers`参数表示的是开启的进程数,默认为1,具体内容请参考[GeneratorDataset](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.dataset.html#mindspore.dataset.GeneratorDataset)。 - 如果使用Python自定义函数或者`py_transforms`模块进行数据增强的时候,当`map`函数的参数`python_multiprocessing`设置为True时,此时参数`num_parallel_workers`表示的是进程数,参数`python_multiprocessing`默认为False,此时参数`num_parallel_workers`表示的是线程数,具体的内容请参考[内置加载算子](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.dataset.html)。 diff --git a/tutorials/training/source_zh_cn/advanced_use/performance_profiling.md b/tutorials/training/source_zh_cn/advanced_use/performance_profiling.md index cea56ee54d..c603d41641 100644 --- a/tutorials/training/source_zh_cn/advanced_use/performance_profiling.md +++ b/tutorials/training/source_zh_cn/advanced_use/performance_profiling.md @@ -22,6 +22,7 @@ ## 概述 + 将训练过程中的算子耗时等信息记录到文件中,通过可视化界面供用户查看分析,帮助用户更高效地调试神经网络性能。 ## 操作流程 @@ -31,11 +32,13 @@ - 在训练列表找到对应训练,点击性能分析,即可在页面中查看训练性能数据。 ## 环境准备 + 在使用性能分析工具之前,要确保后台工具进程(ada)正确启动,要求用户使用HwHiAiUser用户组的用户或root启动ada进程,并使用同用户跑训练脚本,启动命令为:`/usr/local/Ascend/driver/tools/ada`。 ## 准备训练脚本 为了收集神经网络的性能数据,需要在训练脚本中添加MindSpore Profiler相关接口。 + - `set_context`之后,初始化网络和HCCL之前,需要初始化MindSpore `Profiler`对象。 > Profiler支持的参数可以参考: @@ -54,10 +57,10 @@ from mindspore import Model, nn, context def test_profiler(): # Init context env context.set_context(mode=context.GRAPH_MODE, device_target='Ascend', device_id=int(os.environ["DEVICE_ID"])) - + # Init Profiler profiler = Profiler() - + # Init hyperparameter epoch = 2 # Init network and Model @@ -69,7 +72,7 @@ def test_profiler(): train_ds = create_mindrecord_dataset_for_training() # Model Train model.train(epoch, train_ds) - + # Profiler end profiler.analyse() ``` @@ -78,7 +81,6 @@ def test_profiler(): 启动命令请参考[MindInsight相关命令](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/mindinsight_commands.html)。 - ### 性能分析 用户从训练列表中选择指定的训练,点击性能调试,可以查看该次训练的性能数据。 @@ -88,6 +90,7 @@ def test_profiler(): 图1:性能数据总览 图1展示了性能数据总览页面,包含了迭代轨迹(Step Trace)、算子性能、MindData性能和Timeline等组件的数据总体呈现。各组件展示的数据如下: + - 迭代轨迹:将训练step划分为几个阶段,统计每个阶段的耗时,按时间线进行展示;总览页展示了迭代轨迹图。 - 算子性能:统计单算子以及各算子类型的执行时间,进行排序展示;总览页中展示了各算子类型时间占比的饼状图。 - MindData性能:统计训练数据准备各阶段的性能情况;总览页中展示了各阶段性能可能存在瓶颈的step数目。 @@ -108,6 +111,7 @@ def test_profiler(): 迭代轨迹在做阶段划分时,需要识别前向计算开始的算子和反向计算结束的算子。为了降低用户使用Profiler的门槛,MindSpore会对这两个算子做自动识别,方法为: 前向计算开始的算子指定为`get_next`算子之后连接的第一个算子,反向计算结束的算子指定为最后一次all reduce之前连接的算子。**Profiler不保证在所有情况下自动识别的结果和用户的预期一致,用户可以根据网络的特点自行调整**,调整方法如下: + - 设置`FP_POINT`环境变量指定前向计算开始的算子,如`export FP_POINT=fp32_vars/conv2d/BatchNorm`。 - 设置`BP_POINT`环境变量指定反向计算结束的算子,如`export BP_POINT=loss_scale/gradients/AddN_70`。 @@ -120,6 +124,7 @@ def test_profiler(): 图3:算子类别统计分析 图3展示了按算子类别进行统计分析的结果,包含以下内容: + - 可以选择饼图/柱状图展示各算子类别的时间占比,每个算子类别的执行时间会统计属于该类别的算子执行时间总和。 - 统计前20个占比时间最长的算子类别,展示其时间所占的百分比以及具体的执行时间(毫秒)。 @@ -128,6 +133,7 @@ def test_profiler(): 图4:算子统计分析 图4展示了算子性能统计表,包含以下内容: + - 选择全部:按单个算子的统计结果进行排序展示,展示维度包括算子名称、算子类型、算子执行时间、算子全scope名称、算子信息等;默认按算子执行时间排序。 - 选择分类:按算子类别的统计结果进行排序展示,展示维度包括算子分类名称、算子类别执行时间、执行频次、占总时间的比例等。点击每个算子类别,可以进一步查看该类别下所有单个算子的统计信息。 - 搜索:在右侧搜索框中输入字符串,支持对算子名称/类别进行模糊搜索。 @@ -143,6 +149,7 @@ def test_profiler(): 图5展示了MindData性能分析页面,包含迭代间隙和数据处理两个TAB页面。 迭代间隙TAB页主要用来分析数据准备三个阶段是否存在性能瓶颈,数据队列图是分析判断的重要依据: + - 数据队列Size代表Device侧从队列取数据时队列的长度,如果数据队列Size为0,则训练会一直等待,直到队列中有数据才会开始某个step的训练;如果数据队列Size大于0,则训练可以快速取到数据,MindData不是该step的瓶颈所在。 - 主机队列Size可以推断出数据处理和发送速度,如果主机队列Size为0,表示数据处理速度慢而数据发送速度快,需要加快数据处理。 - 如果主机队列Size一直较大,而数据队列的Size持续很小,则数据发送有可能存在性能瓶颈。 @@ -154,20 +161,22 @@ def test_profiler(): 图6展示了数据处理TAB页面,可以对数据处理pipeline做进一步分析。不同的数据算子之间使用队列进行数据交换,队列的长度可以反映出算子处理数据的快慢,进而推断出pipeline中的瓶颈算子所在。 算子队列的平均使用率代表队列中已有数据Size除以队列最大数据Size的平均值,使用率越高说明队列中数据积累越多。算子队列关系展示了数据处理pipeline中的算子以及它们之间的连接情况,点击某个队列可以在下方查看该队列中数据Size随着时间的变化曲线,以及与数据队列连接的算子信息等。对数据处理pipeline的分析有如下建议: + - 当算子左边连接的Queue使用率都比较高,右边连接的Queue使用率比较低,该算子可能是性能瓶颈。 - 对于最左侧的算子,如果其右边所有Queue的使用率都比较低,该算子可能是性能瓶颈。 - 对于最右侧的算子,如果其左边所有Queue的使用率都比较高,该算子可能是性能瓶颈。 对于不同的类型的MindData算子,有如下优化建议: + - 如果Dataset算子是性能瓶颈,建议增加`num_parallel_workers`。 - 如果GeneratorOp类型的算子是性能瓶颈,建议增加`num_parallel_workers`,并尝试将其替换为`MindRecordDataset`。 - 如果MapOp类型的算子是性能瓶颈,建议增加`num_parallel_workers`,如果该算子为Python算子,可以尝试优化脚本。 - 如果BatchOp类型的算子是性能瓶颈,建议调整`prefetch_size`的大小。 - #### Timeline分析 Timeline组件可以展示: + - 算子分配到哪个设备(AICPU、AICore等)执行。 - MindSpore对该网络的流切分策略。 - 算子在Device上的执行序列和执行时长。 @@ -175,6 +184,7 @@ Timeline组件可以展示: 通过分析Timeline,用户可以对训练过程进行细粒度分析:从High Level层面,可以分析流切分方法是否合理、迭代间隙和拖尾时间是否过长等;从Low Level层面,可以分析算子执行时间等。 用户可以点击总览页面Timeline部分的下载按钮,将Timeline数据文件 (json格式) 保存至本地,再通过工具查看Timeline的详细信息。推荐使用 `chrome://tracing` 或者 [Perfetto](https://ui.perfetto.dev/#!viewer) 做Timeline展示。 + - Chrome tracing:点击左上角"load"加载文件。 - Perfetto:点击左侧"Open trace file"加载文件。 @@ -183,12 +193,12 @@ Timeline组件可以展示: 图7:Timeline分析 Timeline主要包含如下几个部分: + - Device及其stream list:包含Device上的stream列表,每个stream由task执行序列组成,一个task是其中的一个小方块,大小代表执行时间长短。 - 算子信息:选中某个task后,可以显示该task对应算子的信息,包括名称、type等。 可以使用W/A/S/D来放大、缩小地查看Timeline图信息。 - ## 规格 - 为了控制性能测试时生成数据的大小,大型网络建议性能调试的step数目限制在10以内。 diff --git a/tutorials/training/source_zh_cn/advanced_use/performance_profiling_gpu.md b/tutorials/training/source_zh_cn/advanced_use/performance_profiling_gpu.md index 6b98ea73a5..5ebda9c4bb 100644 --- a/tutorials/training/source_zh_cn/advanced_use/performance_profiling_gpu.md +++ b/tutorials/training/source_zh_cn/advanced_use/performance_profiling_gpu.md @@ -18,6 +18,7 @@ ## 概述 + 将训练过程中的算子耗时等信息记录到文件中,通过可视化界面供用户查看分析,帮助用户更高效地调试神经网络性能。 ## 操作流程 @@ -25,7 +26,6 @@ > 操作流程可以参考Ascend 910上profiler的操作: > > - > 普通用户默认情况下无权访问目标设备上的NVIDIA GPU性能计数器。如果普通用户需要在训练脚本中使用profiler性能统计能力,则需参考以下网址的说明进行权限配置。 > > @@ -33,6 +33,7 @@ ## 准备训练脚本 为了收集神经网络的性能数据,需要在训练脚本中添加MindSpore Profiler相关接口。 + - `set_context`之后,需要初始化MindSpore `Profiler`对象,GPU场景下初始化Profiler对象时只有output_path参数有效。 - 在训练结束后,调用`Profiler.analyse`停止性能数据收集并生成性能分析结果。 @@ -49,7 +50,7 @@ class StopAtStep(Callback): self.start_step = start_step self.stop_step = stop_step self.already_analysed = False - + def step_begin(self, run_context): cb_params = run_context.original_args() step_num = cb_params.cur_step_num @@ -62,7 +63,7 @@ class StopAtStep(Callback): if step_num == self.stop_step and not self.already_analysed: self.profiler.analyse() self.already_analysed = True - + def end(self, run_context): if not self.already_analysed: self.profiler.analyse() @@ -74,7 +75,6 @@ class StopAtStep(Callback): 启动命令请参考[MindInsight相关命令](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/mindinsight_commands.html)。 - ### 性能分析 用户从训练列表中选择指定的训练,点击性能调试,可以查看该次训练的性能数据(目前GPU场景只支持算子耗时排名统计和Timeline功能,其他功能敬请期待)。 @@ -84,6 +84,7 @@ class StopAtStep(Callback): 图1:性能数据总览 图1展示了性能数据总览页面,包含了迭代轨迹(Step Trace)、算子性能、MindData性能和Timeline等组件的数据总体呈现: + - 算子性能:统计单算子以及各算子类型的执行时间,进行排序展示;总览页中展示了各算子类型平均执行时间占比的饼状图。 - Timeline:统计了算子以及CUDA activity,在时间轴排列展示;总览页展示了Timeline中执行情况汇总。 @@ -98,10 +99,12 @@ class StopAtStep(Callback): 图2:算子类别统计分析 图2展示了按算子类别进行统计分析的结果,包含以下内容: + - 可以选择饼图/柱状图展示各算子类别的时间占比,每个算子类别的执行时间会统计属于该类别的算子执行时间总和以及平均执行时间。 - 统计前20个平均执行时间最长的算子类别。 图2下半部分展示了算子性能统计表,包含以下内容: + - 选择全部:按单个算子的统计结果进行排序展示,展示维度包括算子位置(Device/Host)、算子类型、算子执行时间、算子全名等;默认按算子平均执行时间排序。 - 选择分类:按算子类别的统计结果进行排序展示,展示维度包括算子分类名称、算子类别执行时间、执行频次、执行总时间的比例、平均执行时间。点击每个算子类别,可以进一步查看该类别下所有单个算子的统计信息。 - 搜索:在右侧搜索框中输入字符串,支持对算子名称/类别进行模糊搜索。 @@ -120,7 +123,6 @@ class StopAtStep(Callback): GPU场景下,Timeline分析的使用方法和Ascend场景相同,不同之处是,GPU Timeline展示的是算子信息和CUDA activity的信息。使用方法参考: -> 样例代码与Ascend使用方式一致可以参考: +> 样例代码与Ascend使用方式一致可以参考: > > - diff --git a/tutorials/training/source_zh_cn/advanced_use/protect_user_privacy_with_differential_privacy.md b/tutorials/training/source_zh_cn/advanced_use/protect_user_privacy_with_differential_privacy.md index 827919e43e..d936ee4d96 100644 --- a/tutorials/training/source_zh_cn/advanced_use/protect_user_privacy_with_differential_privacy.md +++ b/tutorials/training/source_zh_cn/advanced_use/protect_user_privacy_with_differential_privacy.md @@ -22,7 +22,7 @@ 差分隐私是一种保护用户数据隐私的机制。什么是隐私,隐私指的是单个用户的某些属性,一群用户的某一些属性可以不看做隐私。例如:“抽烟的人有更高的几率会得肺癌”,这个不泄露隐私,但是“张三抽烟,得了肺癌”,这个就泄露了张三的隐私。如果我们知道A医院,今天就诊的100个病人,其中有10个肺癌,并且我们知道了其中99个人的患病信息,就可以推测剩下一个人是否患有肺癌。这种窃取隐私的行为叫做差分攻击。差分隐私是防止差分攻击的方法,通过添加噪声,使得差别只有一条记录的两个数据集,通过模型推理获得相同结果的概率非常接近。也就是说,用了差分隐私后,攻击者知道的100个人的患病信息和99个人的患病信息几乎是一样的,从而无法推测出剩下1个人的患病情况。 -**机器学习中的差分隐私** +### 机器学习中的差分隐私 机器学习算法一般是用大量数据并更新模型参数,学习数据特征。在理想情况下,这些算法学习到一些泛化性较好的模型,例如“吸烟患者更容易得肺癌”,而不是特定的个体特征,例如“张三是个吸烟者,患有肺癌”。然而,机器学习算法并不会区分通用特征还是个体特征。当我们用机器学习来完成某个重要的任务,例如肺癌诊断,发布的机器学习模型,可能在无意中透露训练集中的个体特征,恶意攻击者可能从发布的模型获得关于张三的隐私信息,因此使用差分隐私技术来保护机器学习模型是十分必要的。 @@ -32,14 +32,14 @@ $Pr[\mathcal{K}(D)\in S] \le e^{\epsilon} Pr[\mathcal{K}(D') \in S]+\delta$ 对于两个差别只有一条记录的数据集$D, D'$,通过随机算法$\mathcal{K}$,输出为结果集合$S$子集的概率满足上面公式,$\epsilon$为差分隐私预算,$\delta$ 为扰动,$\epsilon, \delta$越小,$\mathcal{K}$在$D, D'$上输出的数据分布越接近。 -**差分隐私的度量** +### 差分隐私的度量 差分隐私可以用$\epsilon, \delta$ 度量。 - $\epsilon$:数据集中增加或者减少一条记录,引起的输出概率可以改变的上限。我们通常希望$\epsilon$是一个较小的常数,值越小表示差分隐私条件越严格。 - $\delta$:用于限制模型行为任意改变的概率,通常设置为一个小的常数,推荐设置小于训练数据集大小的倒数。 -**MindArmour实现的差分隐私** +### MindArmour实现的差分隐私 MindArmour的差分隐私模块Differential-Privacy,实现了差分隐私优化器。目前支持基于高斯机制的差分隐私SGD、Momentum、Adam优化器。其中,高斯噪声机制支持固定标准差的非自适应高斯噪声和随着时间或者迭代步数变化而变化的自适应高斯噪声,使用非自适应高斯噪声的优势在于可以严格控制差分隐私预算$\epsilon$,缺点是在模型训练过程中,每个Step添加的噪声量固定,在训练后期,较大的噪声使得模型收敛困难,甚至导致性能大幅下跌,模型可用性差。自适应噪声很好的解决了这个问题,在模型训练初期,添加的噪声量较大,随着模型逐渐收敛,噪声量逐渐减小,噪声对于模型可用性的影响减小。自适应噪声的缺点是不能严格控制差分隐私预算,在同样的初始值下,自适应差分隐私的$\epsilon$比非自适应的大。同时还提供RDP(R’enyi differential privacy)[2]用于监测差分隐私预算。 @@ -336,7 +336,8 @@ ds_train = generate_mnist_dataset(os.path.join(cfg.data_path, "train"), 5. 结果展示。 不加差分隐私的LeNet模型精度稳定在99%,加了Gaussian噪声,自适应Clip的差分隐私LeNet模型收敛,精度稳定在95%左右。 - ``` + + ```text ============== Starting Training ============== ... ============== Starting Testing ============== diff --git a/tutorials/training/source_zh_cn/advanced_use/save_load_model_hybrid_parallel.md b/tutorials/training/source_zh_cn/advanced_use/save_load_model_hybrid_parallel.md index b72b90fcf2..da08c93963 100644 --- a/tutorials/training/source_zh_cn/advanced_use/save_load_model_hybrid_parallel.md +++ b/tutorials/training/source_zh_cn/advanced_use/save_load_model_hybrid_parallel.md @@ -72,9 +72,6 @@ MindSpore模型并行场景下,每个实例进程只保存有本节点对应 4. 执行阶段二训练。 - - - ## 对保存的CheckPoint文件做合并处理 ### 整体流程 @@ -85,18 +82,19 @@ MindSpore模型并行场景下,每个实例进程只保存有本节点对应 最后,将更新之后的参数列表,通过MindSpore提供的API保存到文件,生成新的CheckPoint文件。对应下图中的Step4。 -![img](./images/checkpoint_integration_process.jpg) +![img](./images/checkpoint_integration_process.jpg) ### 准备工作 #### 按逻辑顺序导入CheckPoint文件 定义网络,调用`load_checkpoint`、`load_param_into_net`接口,按逻辑顺序将CheckPoint文件导入网络,之后调用`parameters_and_names`接口获取网络里所有的参数数据。 -``` -net = Net() + +```python +net = Net() opt = Momentum(learning_rate=0.01, momentum=0.9, params=net.get_parameters()) net = TrainOneStepCell(net, opt) -param_dicts = [] +param_dicts = [] for i in range(rank_size): file_name = os.path.join("./node"+str(i), "CKP_1-4_32.ckpt") # checkpoint file name of current node param_dict = load_checkpoint(file_name) @@ -116,7 +114,8 @@ for i in range(rank_size): #### 获取模型参数切分策略 调用`build_searched_strategy`接口,得到模型各个参数的切分策略。 -``` + +```python strategy = build_searched_strategy("./strategy_train.cpkt") ``` @@ -130,45 +129,48 @@ strategy = build_searched_strategy("./strategy_train.cpkt") 参数名称为"model_parallel_weight",切分逻辑为4卡场景。 -1. 针对涉及模型并行的参数,获取所有节点上的参数数据。 +1. 针对涉及模型并行的参数,获取所有节点上的参数数据。 - ``` + ```python sliced_parameters = [] for i in range(4): parameter = param_dicts[i].get("model_parallel_weight") sliced_parameters.append(parameter) ``` + > 如果要保证参数更新速度不变,需要对优化器中保存的参数,如“moments.model_parallel_weight”,同样做合并处理。 2. 调用`merge_sliced_parameter`接口进行参数合并。 - ``` - merged_parameter = merge_sliced_parameter(sliced_parameters, strategy) + ```python + merged_parameter = merge_sliced_parameter(sliced_parameters, strategy) ``` > 如果存在多个模型并行的参数,则需要重复步骤1到步骤2循环逐个处理。 ### 保存数据生成新的CheckPoint文件 -1. 将`param_dict`转换为list类型数据。 +1. 将`param_dict`转换为list类型数据。 - ``` + ```python param_list = [] for (key, value) in param_dict.items(): - each_param = {} - each_param["name"] = key - if isinstance(value.data, Tensor): - param_data = value.data - else: - param_data = Tensor(value.data) - each_param["data"] = param_data + each_param = {} + each_param["name"] = key + if isinstance(value.data, Tensor): + param_data = value.data + else: + param_data = Tensor(value.data) + each_param["data"] = param_data param_list.append(each_param) ``` 2. 调用`save_checkpoint`接口,将参数数据写入文件,生成新的CheckPoint文件。 - ``` + + ```python save_checkpoint(param_list, “./CKP-Integrated_1-4_32.ckpt”) ``` + 其中, - `save_checkpoint`: 通过该接口将网络模型参数信息存入文件。 - `CKP-Integrated_1-4_32.ckpt`: 新生成的CheckPoint模型参数文件名称。 @@ -185,7 +187,7 @@ strategy = build_searched_strategy("./strategy_train.cpkt") 调用`load_checkpoint`接口,从CheckPoint文件中加载模型参数数据。 -``` +```python param_dict = load_checkpoint("./CKP-Integrated_1-4_32.ckpt") ``` @@ -204,7 +206,8 @@ param_dict = load_checkpoint("./CKP-Integrated_1-4_32.ckpt") 1. 对模型参数数据做切分。 如下代码示例,在维度0上,将数据切分为两个切片。 - ``` + + ```python new_param = parameter_dict[“model_parallel_weight”] slice_list = np.split(new_param.data.asnumpy(), 2, axis=0) new_param_moments = parameter_dict[“moments.model_parallel_weight”] @@ -212,25 +215,27 @@ param_dict = load_checkpoint("./CKP-Integrated_1-4_32.ckpt") ``` 切分后的数据情况: - - slice_list[0] --- [1, 2, 3, 4] 对应device0 - slice_list[1] --- [5, 6, 7, 8] 对应device1 + ```text + slice_list[0] --- [1, 2, 3, 4] 对应device0 + slice_list[1] --- [5, 6, 7, 8] 对应device1 与`slice_list`类似,`slice_moments_list` 也被切分为两个shape为[1, 4]的Tensor。 -2. 在每个节点分别加载对应的数据切片。 +2. 在每个节点分别加载对应的数据切片。 获取本节点的rank_id,根据rank_id加载数据。 - ``` + + ```python rank = get_rank() tensor_slice = Tensor(slice_list[rank]) tensor_slice_moments = Tensor(slice_moments_list[rank]) ``` - - `get_rank`:获取当前设备在集群中的ID。 -3. 修改模型参数数据值。 + - `get_rank`:获取当前设备在集群中的ID。 - ``` +3. 修改模型参数数据值。 + + ```python new_param.set_data(tensor_slice, True) new_param_moments.set_data(tensor_slice_moments, True) ``` @@ -240,8 +245,9 @@ param_dict = load_checkpoint("./CKP-Integrated_1-4_32.ckpt") ### 步骤3:将修改后的参数数据加载到网络中 调用`load_param_into_net`接口,将模型参数数据加载到网络中。 -``` -net = Net() + +```python +net = Net() opt = Momentum(learning_rate=0.01, momentum=0.9, params=parallel_net.get_parameters()) load_param_into_net(net, param_dict) load_param_into_net(opt, param_dict) @@ -266,43 +272,44 @@ load_param_into_net(opt, param_dict) > > 本文档附上对CheckPoint文件做合并处理以及分布式训练前加载CheckPoint文件的示例代码,仅作为参考,实际请参考具体情况实现。 -### 示例代码 +### 示例代码 1. 执行脚本对CheckPoint文件做合并处理。 - 脚本执行命令: - ``` + 脚本执行命令: + + ```bash python ./integrate_checkpoint.py "待合并的CheckPoint文件名称" "合并生成的CheckPoint文件路径&名称" "策略文件路径&名称" "节点数" ``` integrate_checkpoint.py: - ``` + ```python import numpy as np import os import mindspore.nn as nn from mindspore import Tensor, Parameter from mindspore.ops import operations as P from mindspore.train.serialization import save_checkpoint, load_checkpoint, build_searched_strategy, merge_sliced_parameter - + class Net(nn.Cell): def __init__(self,weight_init): super(Net, self).__init__() self.weight = Parameter(Tensor(weight_init), "model_parallel_weight", layerwise_parallel=True) self.fc = P.MatMul(transpose_b=True) - + def construct(self, x): x = self.fc(x, self.weight1) return x - + def integrate_ckpt_file(old_ckpt_file, new_ckpt_file, strategy_file, rank_size): weight = np.ones([2, 8]).astype(np.float32) net = Net(weight) opt = Momentum(learning_rate=0.01, momentum=0.9, params=net.get_parameters()) net = TrainOneStepCell(net, opt) - + # load CheckPoint into net in rank id order - param_dicts = [] + param_dicts = [] for i in range(rank_size): file_name = os.path.join("./node"+str(i), old_ckpt_file) param_dict = load_checkpoint(file_name) @@ -311,21 +318,21 @@ load_param_into_net(opt, param_dict) for _, param in net.parameters_and_names(): param_dict[param.name] = param param_dicts.append(param_dict) - + strategy = build_searched_strategy(strategy_file) param_dict = {} - + for paramname in ["model_parallel_weight", "moments.model_parallel_weight"]: # get layer wise model parallel parameter sliced_parameters = [] for i in range(rank_size): parameter = param_dicts[i].get(paramname) sliced_parameters.append(parameter) - + # merge the parallel parameters of the model - merged_parameter = merge_sliced_parameter(sliced_parameters, strategy) + merged_parameter = merge_sliced_parameter(sliced_parameters, strategy) param_dict[paramname] = merged_parameter - + # convert param_dict to list type data param_list = [] for (key, value) in param_dict.items(): @@ -335,14 +342,14 @@ load_param_into_net(opt, param_dict) param_data = value.data else: param_data = Tensor(value.data) - each_param["data"] = param_data - param_list.append(each_param) - + each_param["data"] = param_data + param_list.append(each_param) + # call the API to generate a new CheckPoint file save_checkpoint(param_list, new_ckpt_file) - + return - + if __name__ == "__main__": try: old_ckpt_file = sys.argv[1] @@ -354,14 +361,15 @@ load_param_into_net(opt, param_dict) print("Fail to integrate checkpoint file) sys.exit(-1) ``` - + 执行结果: 脚本执行前,CheckPoint文件中参数值: - ``` + + ```text device0: name is model_parallel_weight - value is + value is [[0.87537426 1.0448935 0.86736983 0.8836905 0.77354026 0.69588304 0.9183654 0.7792076] [0.87224025 0.8726848 0.771446 0.81967723 0.88974726 0.7988162 0.72919345 0.7677011]] name is learning_rate @@ -372,10 +380,10 @@ load_param_into_net(opt, param_dict) value is [[0.2567724 -0.07485991 0.282002 0.2456022 0.454939 0.619168 0.18964815 0.45714882] [0.25946522 0.24344791 0.45677605 0.3611395 0.23378398 0.41439137 0.5312468 0.4696194]] - + device1: name is model_parallel_weight - value is + value is [[0.9210751 0.9050457 0.9827775 0.920396 0.9240526 0.9750359 1.0275179 1.0819869] [0.73605865 0.84631145 0.9746683 0.9386582 0.82902765 0.83565056 0.9702136 1.0514659]] name is learning_rate @@ -385,11 +393,11 @@ load_param_into_net(opt, param_dict) name is moments.model_weight value is [[0.2417504 0.28193963 0.06713893 0.21510397 0.23380603 0.11424308 0.0218009 -0.11969765] - [0.45955992 0.22664294 0.01990281 0.0731914 0.27125207 0.27298513 -0.01716102 -0.15327111]] - + [0.45955992 0.22664294 0.01990281 0.0731914 0.27125207 0.27298513 -0.01716102 -0.15327111]] + device2: name is model_parallel_weight - value is + value is [[1.0108461 0.8689414 0.91719437 0.8805056 0.7994629 0.8999671 0.7585804 1.0287056 ] [0.90653455 0.60146594 0.7206475 0.8306303 0.8364681 0.89625114 0.7354735 0.8447268]] name is learning_rate @@ -397,10 +405,10 @@ load_param_into_net(opt, param_dict) name is momentum value is [0.9] name is moments.model_weight - value is + value is [[0.03440702 0.41419312 0.24817684 0.30765256 0.48516113 0.24904746 0.57791173 0.00955463] [0.13458519 0.6690533 0.49259356 0.28319967 0.25951773 0.16777472 0.45696738 0.24933104]] - + device3: name is model_parallel_weight value is @@ -411,16 +419,16 @@ load_param_into_net(opt, param_dict) name is momentum value is [0.9] name is moments.model_parallel_weight - value is + value is [[0.14152306 0.5040985 0.24455397 0.10907605 0.11319532 0.19538902 0.01208619 0.40430856] [-0.7773164 -0.47611716 -0.6041424 -0.6144473 -0.2651842 -0.31909415 -0.4510405 -0.12860501]] ``` 脚本执行后,CheckPoint文件中参数值: - ``` + ```text name is model_parallel_weight - value is + value is [[1.1138763 1.0962057 1.3516843 1.0812817 1.1579804 1.1078343 1.0906502 1.3207073] [0.916671 1.0781671 1.0368758 0.9680898 1.1735439 1.0628364 0.9960786 1.0135143] [0.8828271 0.7963984 0.90675324 0.9830291 0.89010954 0.897052 0.7890109 0.89784735] @@ -434,7 +442,7 @@ load_param_into_net(opt, param_dict) name is momentum value is [0.9] name is moments.model_parallel_weight - value is + value is [[0.2567724 -0.07485991 0.282002 0.2456022 0.454939 0.619168 0.18964815 0.45714882] [0.25946522 0.24344791 0.45677605 0.3611395 0.23378398 0.41439137 0.5312468 0.4696194 ] [0.2417504 0.28193963 0.06713893 0.21510397 0.23380603 0.11424308 0.0218009 -0.11969765] @@ -446,10 +454,9 @@ load_param_into_net(opt, param_dict) -0.12860501]] ``` - 2. 执行阶段2训练,训练前加载CheckPoint文件。其中训练代码部分,需要根据实际情况补充。 - ``` + ```python import numpy as np import os import mindspore.nn as nn @@ -458,24 +465,24 @@ load_param_into_net(opt, param_dict) from mindspore import Tensor, Parameter from mindspore.ops import operations as P from mindspore.train.serialization import load_checkpoint, load_param_into_net - + from mindspore.communication.management import init devid = int(os.getenv('DEVICE_ID')) context.set_context(mode=context.GRAPH_MODE,device_target='Ascend',save_graphs=True, device_id=devid) init() - + class Net(nn.Cell): def __init__(self,weight_init): super(Net, self).__init__() self.weight = Parameter(Tensor(weight_init), "model_parallel_weight", layerwise_parallel=True) self.fc = P.MatMul(transpose_b=True) - + def construct(self, x): x = self.fc(x, self.weight1) return x def train_mindspore_impl_fc(input, label, ckpt_file): param_dict = load_checkpoint(ckpt_file) - + for paramname in ["model_parallel_weight", "moments.model_parallel_weight"]: # get layer wise model parallel parameter new_param = parameter_dict[paramname] @@ -486,23 +493,23 @@ load_param_into_net(opt, param_dict) tensor_slice = Tensor(slice_list[rank]) # modify model parameter data values new_param.set_data(tensor_slice, True) - + # load the modified parameter data into the network weight = np.ones([4, 8]).astype(np.float32) net = Net(weight) load_param_into_net(net, param_dict) opt = Momentum(learning_rate=0.01, momentum=0.9, params=parallel_net.get_parameters()) load_param_into_net(opt, param_dict) - # train code + # train code ... - + if __name__ == "__main__": input = np.random.random((4, 8)).astype(np.float32) print("mean = ", np.mean(input,axis=1, keepdims=True)) label = np.random.random((4, 4)).astype(np.float32) train_mindspore_impl_fc(input, label, weight1) ``` - + 其中, - `mode=context.GRAPH_MODE`:使用分布式训练需要指定运行模式为图模式(PyNative模式不支持并行)。 @@ -511,10 +518,10 @@ load_param_into_net(opt, param_dict) 加载后的参数值: - ``` + ```text device0: name is model_parallel_weight - value is + value is [[0.87537426 1.0448935 0.86736983 0.8836905 0.77354026 0.69588304 0.9183654 0.7792076] [0.87224025 0.8726848 0.771446 0.81967723 0.88974726 0.7988162 0.72919345 0.7677011] [0.8828271 0.7963984 0.90675324 0.9830291 0.89010954 0.897052 0.7890109 0.89784735] @@ -532,7 +539,7 @@ load_param_into_net(opt, param_dict) device1: name is model_parallel_weight - value is + value is [[1.0053468 0.98402303 0.99762845 0.97587246 1.0259694 1.0055295 0.99420834 0.9496847] [1.0851002 1.0295962 1.0999886 1.0958165 0.9765328 1.146529 1.0970603 1.1388365] [0.7147005 0.9168278 0.80178416 0.6258351 0.8413766 0.5909515 0.696347 0.71359116] @@ -546,5 +553,5 @@ load_param_into_net(opt, param_dict) [[0.03440702 0.41419312 0.24817684 0.30765256 0.48516113 0.24904746 0.57791173 0.00955463] [0.13458519 0.6690533 0.49259356 0.28319967 0.25951773 0.16777472 0.45696738 0.24933104] [0.14152306 0.5040985 0.24455397 0.10907605 0.11319532 0.19538902 0.01208619 0.40430856] - [-0.7773164 -0.47611716 -0.6041424 -0.6144473 -0.2651842 -0.31909415 -0.4510405 -0.12860501]] + [-0.7773164 -0.47611716 -0.6041424 -0.6144473 -0.2651842 -0.31909415 -0.4510405 -0.12860501]] ``` diff --git a/tutorials/training/source_zh_cn/advanced_use/summary_record.md b/tutorials/training/source_zh_cn/advanced_use/summary_record.md index 40d9a9fde9..1744dc51d1 100644 --- a/tutorials/training/source_zh_cn/advanced_use/summary_record.md +++ b/tutorials/training/source_zh_cn/advanced_use/summary_record.md @@ -43,6 +43,7 @@ MindSpore目前支持三种方式将数据记录到summary日志文件中。 即可自动收集一些常见信息。`SummaryCollector` 详细的用法可以参考 `API` 文档中 `mindspore.train.callback.SummaryCollector`。 样例代码如下: + ```python import mindspore import mindspore.nn as nn @@ -131,6 +132,7 @@ model.eval(ds_eval, callbacks=[summary_collector]) MindSpore除了提供 `SummaryCollector` 能够自动收集一些常见数据,还提供了Summary算子,支持在网络中自定义收集其他的数据,比如每一个卷积层的输入,或在损失函数中的损失值等。 当前支持的Summary算子: + - [ScalarSummary](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ScalarSummary):记录标量数据 - [TensorSummary](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.TensorSummary):记录张量数据 - [ImageSummary](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ImageSummary):记录图片数据 @@ -254,18 +256,18 @@ MindSpore支持自定义Callback, 并允许在自定义Callback中将数据记 样例代码如下: -``` +```python from mindspore.train.callback import Callback from mindspore.train.summary import SummaryRecord class ConfusionMatrixCallback(Callback): def __init__(self, summary_dir): self._summary_dir = summary_dir - + def __enter__(self): # init you summary record in here, when the train script run, it will be inited before training self.summary_record = SummaryRecord(summary_dir) - + def __exit__(self, *exc_args): # Note: you must close the summary record, it will release the process pool resource # else your training script will not exit from training. @@ -276,7 +278,7 @@ class ConfusionMatrixCallback(Callback): cb_params = run_context.run_context.original_args() # create a confusion matric image, and record it to summary file - confusion_martrix = create_confusion_matrix(cb_params) + confusion_martrix = create_confusion_matrix(cb_params) self.summary_record.add_value('image', 'confusion_matrix', confusion_matric) self.summary_record.record(cb_params.cur_step) @@ -288,31 +290,34 @@ model.train(cnn_network, train_dataset=train_ds, callbacks=[confusion_martrix]) ``` 上面的三种方式,支持记录计算图, 损失值等多种数据。除此以外,MindSpore还支持保存训练中其他阶段的计算图,通过 -将训练脚本中 `context.set_context` 的 `save_graphs` 选项设置为 `True`, 可以记录其他阶段的计算图,其中包括算子融合后的计算图。 +将训练脚本中 `context.set_context` 的 `save_graphs` 选项设置为 `True`, 可以记录其他阶段的计算图,其中包括算子融合后的计算图。 在保存的文件中,`ms_output_after_hwopt.pb` 即为算子融合后的计算图,可以使用可视化页面对其进行查看。 ## 运行MindInsight + 按照上面教程完成数据收集后,启动MindInsight,即可可视化收集到的数据。启动MindInsight时, 需要通过 `--summary-base-dir` 参数指定summary日志文件目录。 其中指定的summary日志文件目录可以是一次训练的输出目录,也可以是多次训练输出目录的父目录。 - 一次训练的输出目录结构如下: -``` + +```text └─summary_dir events.out.events.summary.1596869898.hostname_MS events.out.events.summary.1596869898.hostname_lineage ``` 启动命令: + ```Bash mindinsight start --summary-base-dir ./summary_dir ``` 多次训练的输出目录结构如下: -``` + +```text └─summary ├─summary_dir1 │ events.out.events.summary.1596869898.hostname_MS @@ -324,6 +329,7 @@ mindinsight start --summary-base-dir ./summary_dir ``` 启动命令: + ```Bash mindinsight start --summary-base-dir ./summary ``` @@ -331,13 +337,13 @@ mindinsight start --summary-base-dir ./summary 启动成功后,通过浏览器访问 `http://127.0.0.1:8080` 地址,即可查看可视化页面。 停止MindInsight命令: + ```Bash mindinsight stop ``` 更多参数设置,请点击查看[MindInsight相关命令](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/mindinsight_commands.html)页面。 - ## 注意事项 1. 为了控制列出summary文件目录的用时,MindInsight最多支持发现999个summary文件目录。 @@ -349,7 +355,8 @@ mindinsight stop 自定义callback中如果使用 `SummaryRecord`,则其不能和 `SummaryCollector` 同时使用。 正确代码: - ``` + + ```python ... summary_collector = SummaryCollector('./summary_dir') model.train(2, train_dataset, callbacks=[summary_collector]) @@ -359,7 +366,8 @@ mindinsight stop ``` 错误代码: - ``` + + ```python ... summary_collector1 = SummaryCollector('./summary_dir1') summary_collector2 = SummaryCollector('./summary_dir2') @@ -367,7 +375,8 @@ mindinsight stop ``` 错误代码: - ``` + + ```python ... # Note: the 'ConfusionMatrixCallback' is user-defined, and it uses SummaryRecord to record data. confusion_callback = ConfusionMatrixCallback('./summary_dir1') @@ -377,4 +386,4 @@ mindinsight stop 3. 每个summary日志文件目录中,应该只放置一次训练的数据。一个summary日志目录中如果存放了多次训练的summary数据,MindInsight在可视化数据时会将这些训练的summary数据进行叠加展示,可能会与预期可视化效果不相符。 -4. 当前 `SummaryCollector` 和 `SummaryRecord` 不支持GPU多卡运行的场景。 \ No newline at end of file +4. 当前 `SummaryCollector` 和 `SummaryRecord` 不支持GPU多卡运行的场景。 diff --git a/tutorials/training/source_zh_cn/advanced_use/test_model_security_fuzzing.md b/tutorials/training/source_zh_cn/advanced_use/test_model_security_fuzzing.md index dde3f397c4..148399f8fd 100644 --- a/tutorials/training/source_zh_cn/advanced_use/test_model_security_fuzzing.md +++ b/tutorials/training/source_zh_cn/advanced_use/test_model_security_fuzzing.md @@ -10,7 +10,7 @@ - [导入需要的库文件](#导入需要的库文件) - [参数配置](#参数配置) - [运用Fuzz Testing](#运用fuzz-testing) - +    @@ -75,7 +75,7 @@ context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") images = data[0].asnumpy().astype(np.float32) train_images.append(images) train_images = np.concatenate(train_images, axis=0) - + # get test data data_list = "../common/dataset/MNIST/test" batch_size = 32 @@ -105,7 +105,7 @@ context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") 中对应的类方法。算法随机选择参数,则`params`设置为`'auto_param': [True]`,参数将在推荐范围内随机生成。 基于对抗攻击方法的参数配置请参考对应的攻击方法类。 - + 下面时变异方法及其参数配置的一个例子: ```python @@ -174,12 +174,12 @@ context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") ``` 6. 实验结果。 - + fuzzing的返回结果中包含了5个数据:fuzz生成的样本fuzz_samples、生成样本的真实标签true_labels、被测模型对于生成样本的预测值fuzz_preds、 生成样本使用的变异方法fuzz_strategies、fuzz testing的评估报告metrics_report。用户可使用这些返回结果进一步的分析模型的鲁棒性。这里只展开metrics_report,查看fuzz testing后的各个评估指标。 ```python if metrics: - for key in metrics: + for key in metrics: LOGGER.info(TAG, key + ': %s', metrics[key]) ``` @@ -199,4 +199,4 @@ context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") ​ Fuzz生成的变异图片: - ![fuzz_res](./images/fuzz_res.png) \ No newline at end of file + ![fuzz_res](./images/fuzz_res.png) diff --git a/tutorials/training/source_zh_cn/advanced_use/test_model_security_membership_inference.md b/tutorials/training/source_zh_cn/advanced_use/test_model_security_membership_inference.md index a5057865f5..559e1faf21 100644 --- a/tutorials/training/source_zh_cn/advanced_use/test_model_security_membership_inference.md +++ b/tutorials/training/source_zh_cn/advanced_use/test_model_security_membership_inference.md @@ -10,7 +10,6 @@ - [建立模型](#建立模型) - [运用MembershipInference进行隐私安全评估](#运用membershipinference进行隐私安全评估) - [参考文献](#参考文献) -    @@ -30,7 +29,9 @@ ## 实现阶段 ### 导入需要的库文件 + #### 引入相关包 + 下面是我们需要的公共模块、MindSpore相关模块和MembershipInference特性模块,以及配置日志标签和日志等级。 ```python @@ -57,9 +58,11 @@ LOGGER = LogUtil.get_instance() TAG = "MembershipInference_test" LOGGER.set_level("INFO") ``` + ### 加载数据集 这里采用的是CIFAR-100数据集,您也可以采用自己的数据集,但要保证传入的数据仅有两项属性"image"和"label"。 + ```python # Generate CIFAR-100 data. def vgg_create_dataset100(data_home, image_size, batch_size, rank_id=0, rank_size=1, repeat_num=1, @@ -111,9 +114,11 @@ def vgg_create_dataset100(data_home, image_size, batch_size, rank_id=0, rank_siz return data_set ``` + ### 建立模型 这里以VGG16模型为例,您也可以替换为自己的模型。 + ```python def _make_layer(base, args, batch_norm): """Make stage network of VGG.""" @@ -178,10 +183,11 @@ def vgg16(num_classes=1000, args=None, phase="train"): ``` ### 运用MembershipInference进行隐私安全评估 + 1. 构建VGG16模型并加载参数文件。 - + 这里直接加载预训练完成的VGG16参数配置,您也可以使用如上的网络自行训练。 - + ```python ... # load parameter @@ -195,8 +201,8 @@ def vgg16(num_classes=1000, args=None, phase="train"): args.padding = 0 args.pad_mode = "same" args.weight_decay = 5e-4 - args.loss_scale = 1.0 - + args.loss_scale = 1.0 + # Load the pretrained model. net = vgg16(num_classes=100, args=args) loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True) @@ -205,7 +211,7 @@ def vgg16(num_classes=1000, args=None, phase="train"): load_param_into_net(net, load_checkpoint(args.pre_trained)) model = Model(network=net, loss_fn=loss, optimizer=opt) ``` - + 2. 加载CIFAR-100数据集,按8:2分割为成员推理模型的训练集和测试集。 ```python @@ -221,9 +227,9 @@ def vgg16(num_classes=1000, args=None, phase="train"): ``` 3. 配置推理参数和评估参数 - + 设置用于成员推理的方法和参数。目前支持的推理方法有:KNN、LR、MLPClassifier和RandomForestClassifier。推理参数数据类型使用list,各个方法使用key为"method"和"params"的字典表示。 - + ```python config = [ { @@ -232,7 +238,7 @@ def vgg16(num_classes=1000, args=None, phase="train"): "C": np.logspace(-4, 2, 10) } }, - { + { "method": "knn", "params": { "n_neighbors": [3, 5, 7] @@ -258,13 +264,13 @@ def vgg16(num_classes=1000, args=None, phase="train"): } ] ``` - + 我们约定标签为数据集的是正类,标签为测试集的是负类。设置评价指标,目前支持3种评价指标。包括: - * 准确率:accuracy,正确推理的数量占全体样本中的比例。 - * 精确率:precision,正确推理的正类样本占所有推理为正类中的比例。 - * 召回率:recall,正确推理的正类样本占全体正类样本的比例。 + - 准确率:accuracy,正确推理的数量占全体样本中的比例。 + - 精确率:precision,正确推理的正类样本占所有推理为正类中的比例。 + - 召回率:recall,正确推理的正类样本占全体正类样本的比例。 在样本数量足够大时,如果上述指标均大于0.6,我们认为目标模型就存在隐私泄露的风险。 - + ```python metrics = ["precision", "accuracy", "recall"] ``` @@ -273,11 +279,11 @@ def vgg16(num_classes=1000, args=None, phase="train"): ```python inference = MembershipInference(model) # Get inference model. - + inference.train(train_train, train_test, config) # Train inference model. msg = "Membership inference model training completed." LOGGER.info(TAG, msg) - + result = inference.eval(eval_train, eval_test, metrics) # Eval metrics. count = len(config) for i in range(count): @@ -286,16 +292,16 @@ def vgg16(num_classes=1000, args=None, phase="train"): 5. 实验结果。 执行如下指令,开始成员推理训练和评估: - - ``` + + ```bash python example_vgg_cifar.py --data_path ./cifar-100-binary/ --pre_trained ./VGG16-100_781.ckpt ``` 成员推理的指标如下所示,各数值均保留至小数点后四位。 以第一行结果为例:在使用lr(逻辑回归分类)进行成员推理时,推理的准确率(accuracy)为0.7132,推理精确率(precision)为0.6596,正类样本召回率为0.8810,说明lr有71.32%的概率能正确分辨一个数据样本是否属于目标模型的训练数据集。在二分类任务下,指标表明成员推理是有效的,即该模型存在隐私泄露的风险。 - - ``` + + ```text Method: lr, {'recall': 0.8810,'precision': 0.6596,'accuracy': 0.7132} Method: knn, {'recall': 0.7082,'precision': 0.5613,'accuracy': 0.5774} Method: mlp, {'recall': 0.6729,'precision': 0.6462,'accuracy': 0.6522} @@ -303,4 +309,5 @@ def vgg16(num_classes=1000, args=None, phase="train"): ``` ## 参考文献 + [1] [Shokri R , Stronati M , Song C , et al. Membership Inference Attacks against Machine Learning Models[J].](https://arxiv.org/abs/1610.05820v2) diff --git a/tutorials/training/source_zh_cn/advanced_use/use_on_the_cloud.md b/tutorials/training/source_zh_cn/advanced_use/use_on_the_cloud.md index 47680705b2..bf3dfd79ce 100644 --- a/tutorials/training/source_zh_cn/advanced_use/use_on_the_cloud.md +++ b/tutorials/training/source_zh_cn/advanced_use/use_on_the_cloud.md @@ -53,7 +53,7 @@ ModelArts使用对象存储服务(Object Storage Service,简称OBS)进行 2. 新建一个自己的OBS桶(例如:ms-dataset),在桶中创建数据目录(例如:cifar-10),将CIFAR-10数据按照如下结构上传至数据目录。 - ``` + ```text └─对象存储/ms-dataset/cifar-10 ├─train │ data_batch_1.bin @@ -73,7 +73,7 @@ ModelArts使用对象存储服务(Object Storage Service,简称OBS)进行 为了方便后续创建训练作业,先创建训练输出目录和日志输出目录,本示例创建的目录结构如下: -``` +```text └─对象存储/resnet50-train ├─resnet50_cifar10_train │ dataset.py @@ -87,7 +87,7 @@ ModelArts使用对象存储服务(Object Storage Service,简称OBS)进行 “执行脚本准备”章节提供的脚本可以直接运行在ModelArts,想要快速体验ResNet-50训练CIFAR-10可以跳过本章节。如果需要将自定义MindSpore脚本或更多MindSpore示例代码在ModelArts运行起来,需要参考本章节对MindSpore代码进行简单适配。 -### 适配脚本参数 +### 适配脚本参数 1. 在ModelArts运行的脚本必须配置`data_url`和`train_url`,分别对应数据存储路径(OBS路径)和训练输出路径(OBS路径)。 @@ -125,13 +125,14 @@ MindSpore暂时没有提供直接访问OBS数据的接口,需要通过MoXing ``` ### 适配8卡训练任务 + 如果需要将脚本运行在`8*Ascend`规格的环境上,需要对创建数据集的代码和本地数据路径进行适配,并配置分布式策略。通过获取`DEVICE_ID`和`RANK_SIZE`两个环境变量,用户可以构建适用于`1*Ascend`和`8*Ascend`两种不同规格的训练脚本。 1. 本地路径适配。 ```python import os - + device_num = int(os.getenv('RANK_SIZE')) device_id = int(os.getenv('DEVICE_ID')) # define local data path @@ -311,7 +312,6 @@ ModelArts教程 - ## 概述 回归问题算法通常是利用一系列属性来预测一个值,预测的值是连续的。例如给出一套房子的一些特征数据,如面积、卧室数等等来预测房价,利用最近一周的气温变化和卫星云图来预测未来的气温情况等。如果一套房子实际价格为500万元,通过回归分析的预测值为499万元,则认为这是一个比较好的回归分析。在机器学习问题中,常见的回归分析有线性回归、多项式回归、逻辑回归等。本例子介绍线性回归算法,并通过MindSpore进行线性回归AI训练体验。 @@ -47,7 +46,6 @@ 设置MindSpore运行配置 - ```python from mindspore import context @@ -66,7 +64,6 @@ context.set_context(mode=context.GRAPH_MODE, device_target="CPU") `get_data`用于生成训练数据集和测试数据集。由于拟合的是线性数据,假定要拟合的目标函数为:$f(x)=2x+3$,那么我们需要的训练数据集应随机分布于函数周边,这里采用了$f(x)=2x+3+noise$的方式生成,其中`noise`为遵循标准正态分布规律的随机数值。 - ```python import numpy as np @@ -80,7 +77,6 @@ def get_data(num, w=2.0, b=3.0): 使用`get_data`生成50组测试数据,可视化展示。 - ```python import matplotlib.pyplot as plt @@ -97,10 +93,8 @@ plt.show() 输出结果: - ![png](./images/linear_regression_eval_datasets.png) - 上图中绿色线条部分为目标函数,红点部分为验证数据`eval_data`。 ### 定义数据增强函数 @@ -111,7 +105,6 @@ plt.show() - `batch`:将`batch_size`个数据组合成一个batch。 - `repeat`:将数据集数量倍增。 - ```python from mindspore import dataset as ds @@ -124,13 +117,12 @@ def create_dataset(num_data, batch_size=16, repeat_size=1): 使用数据集增强函数生成训练数据,并查看训练数据的格式。 - ```python num_data = 1600 batch_size = 16 repeat_size = 1 -ds_train = create_dataset(num_data, batch_size=batch_size, repeat_size=repeat_size) +ds_train = create_dataset(num_data, batch_size=batch_size, repeat_size=repeat_size) print("The dataset size of ds_train:", ds_train.get_dataset_size()) dict_datasets = ds_train.create_dict_iterator().get_next() @@ -141,11 +133,12 @@ print("The y label value shape:", dict_datasets["label"].shape) 输出结果: - The dataset size of ds_train: 100 - dict_keys(['data', 'label']) - The x label value shape: (16, 1) - The y label value shape: (16, 1) - +```text +The dataset size of ds_train: 100 +dict_keys(['data', 'label']) +The x label value shape: (16, 1) +The y label value shape: (16, 1) +``` 通过定义的`create_dataset`将生成的1600个数据增强为了100组shape为16x1的数据集。 @@ -157,7 +150,6 @@ $$f(x)=wx+b\tag{1}$$ 并使用Normal算子随机初始化权重$w$和$b$。 - ```python from mindspore.common.initializer import Normal from mindspore import nn @@ -174,7 +166,6 @@ class LinearNet(nn.Cell): 调用网络查看初始化的模型参数。 - ```python net = LinearNet() model_params = net.trainable_params() @@ -183,18 +174,18 @@ print(model_params) 输出结果: - [Parameter (name=fc.weight, value=Tensor(shape=[1, 1], dtype=Float32, - [[-7.35660456e-003]])), Parameter (name=fc.bias, value=Tensor(shape=[1], dtype=Float32, [-7.35660456e-003]))] - +```text +[Parameter (name=fc.weight, value=Tensor(shape=[1, 1], dtype=Float32, +[[-7.35660456e-003]])), Parameter (name=fc.bias, value=Tensor(shape=[1], dtype=Float32, [-7.35660456e-003]))] +``` 初始化网络模型后,接下来将初始化的网络函数和训练数据集进行可视化,了解拟合前的模型函数情况。 - ```python from mindspore import Tensor x_model_label = np.array([-10, 10, 0.1]) -y_model_label = (x_model_label * Tensor(model_params[0]).asnumpy()[0][0] + +y_model_label = (x_model_label * Tensor(model_params[0]).asnumpy()[0][0] + Tensor(model_params[1]).asnumpy()[0]) plt.scatter(x_eval_label, y_eval_label, color="red", s=5) @@ -205,10 +196,8 @@ plt.show() 输出结果: - ![png](./images/model_net_and_eval_datasets.png) - 从上图中可以看出,蓝色线条的初始化模型函数与绿色线条的目标函数还是有较大的差别的。 ## 定义前向传播网络与反向传播网络并关联 @@ -236,7 +225,6 @@ $$J(w)=\frac{1}{2m}\sum_{i=1}^m(h(x_i)-y^{(i)})^2\tag{2}$$ 在MindSpore中使用如下方式实现。 - ```python net = LinearNet() net_loss = nn.loss.MSELoss() @@ -257,7 +245,6 @@ $$w_{t}=w_{t-1}-\alpha\frac{\partial{J(w_{t-1})}}{\partial{w}}\tag{3}$$ 函数中所有的权重值更新完成后,将值传入到模型函数中,这个过程就是反向传播过程,实现此过程需要使用MindSpore中的优化器函数,如下: - ```python opt = nn.Momentum(net.trainable_params(), learning_rate=0.005, momentum=0.9) ``` @@ -266,7 +253,6 @@ opt = nn.Momentum(net.trainable_params(), learning_rate=0.005, momentum=0.9) 定义完成前向传播和反向传播后,在MindSpore中需要调用`Model`函数,将前面定义的网络,损失函数,优化器函数关联起来,使之变成完整的计算网络。 - ```python from mindspore.train import Model @@ -279,7 +265,6 @@ model = Model(net, net_loss, opt) 为了使得整个训练过程更容易理解,需要将训练过程的测试数据、目标函数和模型网络进行可视化,这里定义了可视化函数,将在每个step训练结束后调用,展示模型网络的拟合过程。 - ```python import matplotlib.pyplot as plt import time @@ -292,7 +277,7 @@ def plot_model_and_datasets(net, eval_data): x1, y1 = zip(*eval_data) x_target = x y_target = x_target * 2 + 3 - + plt.axis([-11, 11, -20, 25]) plt.scatter(x1, y1, color="red", s=5) plt.plot(x, y, color="blue") @@ -305,7 +290,6 @@ def plot_model_and_datasets(net, eval_data): MindSpore提供的工具,可对模型训练过程进行自定义控制,这里在`step_end`中调用可视化函数,展示拟合过程。更多的使用可参考[官网说明]()。 - ```python from IPython import display from mindspore.train.callback import Callback @@ -314,7 +298,7 @@ class ImageShowCallback(Callback): def __init__(self, net, eval_data): self.net = net self.eval_data = eval_data - + def step_end(self, run_context): plot_model_and_datasets(self.net, self.eval_data) display.clear_output(wait=True) @@ -329,7 +313,6 @@ class ImageShowCallback(Callback): - `callbacks`:训练过程中需要调用的回调函数。 - `dataset_sink_model`:数据集下沉模式,支持Ascend、GPU计算平台,本例为CPU计算平台设置为False。 - ```python from mindspore.train.callback import LossMonitor @@ -344,13 +327,12 @@ print(net.trainable_params()[0], "\n%s" % net.trainable_params()[1]) 输出结果: - ![gif](./images/linear_regression.gif) - - Parameter (name=fc.weight, value=[[2.0065749]]) - Parameter (name=fc.bias, value=[3.0089042]) - +```text +Parameter (name=fc.weight, value=[[2.0065749]]) +Parameter (name=fc.bias, value=[3.0089042]) +``` 训练完成后打印出最终模型的权重参数,其中weight接近于2.0,bias接近于3.0,模型训练完成,符合预期。 diff --git a/tutorials/training/source_zh_cn/quick_start/quick_start.md b/tutorials/training/source_zh_cn/quick_start/quick_start.md index 761d5a1d82..10cbb10ec9 100644 --- a/tutorials/training/source_zh_cn/quick_start/quick_start.md +++ b/tutorials/training/source_zh_cn/quick_start/quick_start.md @@ -36,6 +36,7 @@ 下面我们通过一个实际样例,带领大家体验MindSpore基础的功能,对于一般的用户而言,完成整个样例实践会持续20~30分钟。 本例子会实现一个简单的图片分类的功能,整体流程如下: + 1. 处理需要的数据集,这里使用了MNIST数据集。 2. 定义一个网络,这里我们使用LeNet网络。 3. 定义损失函数和优化器。 @@ -45,7 +46,6 @@ > 你可以在这里找到完整可运行的样例代码: 。 - 这是简单、基础的应用流程,其他高级、复杂的应用可以基于这个基本流程进行扩展。 ## 准备环节 @@ -66,7 +66,7 @@ 目录结构如下: -``` +```text └─MNIST_Data ├─test │ t10k-images.idx3-ubyte @@ -76,6 +76,7 @@ train-images.idx3-ubyte train-labels.idx1-ubyte ``` + > 为了方便样例使用,我们在样例脚本中添加了自动下载数据集的功能。 ### 导入Python库&模块 @@ -83,8 +84,7 @@ 在使用前,需要导入需要的Python库。 目前使用到`os`库,为方便理解,其他需要的库,我们在具体使用到时再说明。 - - + ```python import os ``` @@ -161,7 +161,7 @@ def create_dataset(data_path, batch_size=32, repeat_size=1, rescale_op = CV.Rescale(rescale, shift) # rescale images hwc2chw_op = CV.HWC2CHW() # change shape from (height, width, channel) to (channel, height, width) to fit network. type_cast_op = C.TypeCast(mstype.int32) # change data type of label to int32 to fit network - + # apply map operations on images mnist_ds = mnist_ds.map(operations=type_cast_op, input_columns="label", num_parallel_workers=num_parallel_workers) mnist_ds = mnist_ds.map(operations=resize_op, input_columns="image", num_parallel_workers=num_parallel_workers) @@ -187,7 +187,6 @@ def create_dataset(data_path, batch_size=32, repeat_size=1, > MindSpore支持进行多种数据处理和增强的操作,各种操作往往组合使用,具体可以参考[数据处理](https://www.mindspore.cn/doc/programming_guide/zh-CN/master/pipeline.html)和与[数据增强](https://www.mindspore.cn/doc/programming_guide/zh-CN/master/augmentation.html)章节。 - ## 定义网络 我们选择相对简单的LeNet网络。LeNet网络不包括输入层的情况下,共有7层:2个卷积层、2个下采样层(池化层)、3个全连接层。每层都包含不同数量的训练参数,如下图所示: @@ -196,7 +195,7 @@ def create_dataset(data_path, batch_size=32, repeat_size=1, > 更多的LeNet网络的介绍不在此赘述,希望详细了解LeNet网络,可以查询。 -我们对全连接层以及卷积层采用`Normal`进行参数初始化。 +我们对全连接层以及卷积层采用`Normal`进行参数初始化。 MindSpore支持`TruncatedNormal`、`Normal`、`Uniform`等多种参数初始化方法,默认采用`Normal`。具体可以参考MindSpore API的`mindspore.common.initializer`模块说明。 @@ -242,7 +241,7 @@ class LeNet5(nn.Cell): 在进行定义之前,先简单介绍损失函数及优化器的概念。 - 损失函数:又叫目标函数,用于衡量预测值与实际值差异的程度。深度学习通过不停地迭代来缩小损失函数的值。定义一个好的损失函数,可以有效提高模型的性能。 -- 优化器:用于最小化损失函数,从而在训练过程中改进模型。 +- 优化器:用于最小化损失函数,从而在训练过程中改进模型。 定义了损失函数后,可以得到损失函数关于权重的梯度。梯度用于指示优化器优化权重的方向,以提高模型性能。 @@ -296,9 +295,9 @@ from mindspore.train.callback import ModelCheckpoint, CheckpointConfig if __name__ == "__main__": ... # set parameters of check point - config_ck = CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10) + config_ck = CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10) # apply parameters of check point - ckpoint_cb = ModelCheckpoint(prefix="checkpoint_lenet", config=config_ck) + ckpoint_cb = ModelCheckpoint(prefix="checkpoint_lenet", config=config_ck) ... ``` @@ -307,7 +306,6 @@ if __name__ == "__main__": 通过MindSpore提供的`model.train`接口可以方便地进行网络的训练。`LossMonitor`可以监控训练过程中`loss`值的变化。 这里把`epoch_size`设置为1,对数据集进行1个迭代的训练。 - ```python from mindspore.nn.metrics import Accuracy from mindspore.train.callback import LossMonitor @@ -324,23 +322,26 @@ def train_net(args, model, epoch_size, mnist_path, repeat_size, ckpoint_cb, sink if __name__ == "__main__": ... - - epoch_size = 1 + + epoch_size = 1 mnist_path = "./MNIST_Data" repeat_size = 1 model = Model(network, net_loss, net_opt, metrics={"Accuracy": Accuracy()}) train_net(args, model, epoch_size, mnist_path, repeat_size, ckpoint_cb, dataset_sink_mode) ... ``` + 其中, 在`train_net`方法中,我们加载了之前下载的训练数据集,`mnist_path`是MNIST数据集路径。 ## 运行并查看结果 使用以下命令运行脚本: -``` + +```bash python lenet.py --device_target=CPU ``` + 其中, `lenet.py`:为你根据教程编写的脚本文件。 `--device_target CPU`:指定运行硬件平台,参数为`CPU`、`GPU`或者`Ascend`,根据你的实际运行硬件平台来指定。 @@ -402,23 +403,24 @@ if __name__ == "__main__": test_net(network, model, mnist_path) ``` -其中, +其中, `load_checkpoint`:通过该接口加载CheckPoint模型参数文件,返回一个参数字典。 `checkpoint_lenet-1_1875.ckpt`:之前保存的CheckPoint模型文件名称。 `load_param_into_net`:通过该接口把参数加载到网络中。 - 使用运行命令,运行你的代码脚本。 + ```bash python lenet.py --device_target=CPU ``` + 其中, `lenet.py`:为你根据教程编写的脚本文件。 `--device_target CPU`:指定运行硬件平台,参数为`CPU`、`GPU`或者`Ascend`,根据你的实际运行硬件平台来指定。 运行结果示例如下: -``` +```text ... ============== Starting Testing ============== ============== Accuracy:{'Accuracy': 0.9663477564102564} ============== diff --git a/tutorials/training/source_zh_cn/quick_start/quick_video.md b/tutorials/training/source_zh_cn/quick_start/quick_video.md index df206f136c..8da94f547a 100644 --- a/tutorials/training/source_zh_cn/quick_start/quick_video.md +++ b/tutorials/training/source_zh_cn/quick_start/quick_video.md @@ -108,7 +108,6 @@ - ## 体验MindSpore @@ -237,7 +236,6 @@ - ## 使用可视化组件MindInsight @@ -450,4 +448,4 @@ - \ No newline at end of file + diff --git a/tutorials/training/source_zh_cn/use/load_model_for_inference_and_transfer.md b/tutorials/training/source_zh_cn/use/load_model_for_inference_and_transfer.md index a5e79747ed..c38c101917 100644 --- a/tutorials/training/source_zh_cn/use/load_model_for_inference_and_transfer.md +++ b/tutorials/training/source_zh_cn/use/load_model_for_inference_and_transfer.md @@ -48,6 +48,7 @@ acc = model.eval(dataset_eval) 针对任务中断再训练及微调(Fine Tune)场景,可以加载网络参数和优化器参数到模型中。 示例代码如下: + ```python # return a parameter dict for model param_dict = load_checkpoint("resnet50-2_32.ckpt") @@ -103,7 +104,7 @@ model.train(epoch, dataset) ### 用于迁移学习 -通过`mindspore_hub.load`完成模型加载后,可以增加一个额外的参数项只加载神经网络的特征提取部分,这样我们就能很容易地在之后增加一些新的层进行迁移学习。*当模型开发者将额外的参数(例如 `include_top`)添加到模型构造中时,可以在模型的详情页中找到这个功能。`include_top`取值为True或者False,表示是否保留顶层的全连接网络。* +通过`mindspore_hub.load`完成模型加载后,可以增加一个额外的参数项只加载神经网络的特征提取部分,这样我们就能很容易地在之后增加一些新的层进行迁移学习。*当模型开发者将额外的参数(例如 `include_top`)添加到模型构造中时,可以在模型的详情页中找到这个功能。`include_top`取值为True或者False,表示是否保留顶层的全连接网络。* 下面我们以GoogleNet为例,说明如何加载一个基于ImageNet的预训练模型,并在特定的子任务数据集上进行迁移学习(重训练)。主要的步骤如下: @@ -140,7 +141,7 @@ model.train(epoch, dataset) super(ReduceMeanFlatten, self).__init__() self.mean = P.ReduceMean(keep_dims=True) self.flatten = nn.Flatten() - + def construct(self, x): x = self.mean(x, (2, 3)) x = self.flatten(x) @@ -180,10 +181,10 @@ model.train(epoch, dataset) optim = Momentum(filter(lambda x: x.requires_grad, loss_net.get_parameters()), Tensor(lr), 0.9, 4e-5) train_net = nn.TrainOneStepCell(loss_net, optim) ``` - + 5. 构建数据集,开始重训练。 - 如下所示,进行微调任务的数据集为垃圾分类数据集,存储位置为`/ssd/data/garbage/train`。 + 如下所示,进行微调任务的数据集为垃圾分类数据集,存储位置为`/ssd/data/garbage/train`。 ```python dataset = create_dataset("/ssd/data/garbage/train", @@ -197,7 +198,7 @@ model.train(epoch, dataset) data, label = items data = mindspore.Tensor(data) label = mindspore.Tensor(label) - + loss = train_net(data, label) print(f"epoch: {epoch}/{epoch_size}, loss: {loss}") # Save the ckpt file for each epoch. @@ -218,7 +219,7 @@ model.train(epoch, dataset) classification_layer = nn.Dense(last_channel, num_classes) classification_layer.set_train(False) softmax = nn.Softmax() - network = nn.SequentialCell([network, reducemean_flatten, + network = nn.SequentialCell([network, reducemean_flatten, classification_layer, softmax]) # Load a pre-trained ckpt file. @@ -237,4 +238,4 @@ model.train(epoch, dataset) res = model.eval(eval_dataset) print("result:", res, "ckpt=", ckpt_path) - ``` \ No newline at end of file + ``` diff --git a/tutorials/training/source_zh_cn/use/publish_model.md b/tutorials/training/source_zh_cn/use/publish_model.md index 9d3aadc667..5177885125 100644 --- a/tutorials/training/source_zh_cn/use/publish_model.md +++ b/tutorials/training/source_zh_cn/use/publish_model.md @@ -24,9 +24,9 @@ 1. 将你的预训练模型托管在可以访问的存储位置。 -2. 参照[模板](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/googlenet/mindspore_hub_conf.py),在你自己的代码仓中添加模型生成文件`mindspore_hub_conf.py`,文件放置的位置如下: +2. 参照[模板](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/googlenet/mindspore_hub_conf.py),在你自己的代码仓中添加模型生成文件`mindspore_hub_conf.py`,文件放置的位置如下: - ```shell + ```bash googlenet ├── src │   ├── googlenet.py @@ -39,7 +39,7 @@ 3. 参照[模板](https://gitee.com/mindspore/hub/blob/master/mshub_res/assets/mindspore/ascend/0.7/googlenet_v1_cifar10.md#),在`hub/mshub_res/assets/mindspore/ascend/0.7`文件夹下创建`{model_name}_{model_version}_{dataset}.md`文件,其中`ascend`为模型运行的硬件平台,`0.7`为MindSpore的版本号,`hub/mshub_res`的目录结构为: - ```shell + ```bash hub ├── mshub_res │   ├── assets @@ -47,19 +47,20 @@ | ├── gpu | ├── 0.7 | ├── ascend - | ├── 0.7 + | ├── 0.7 | ├── googlenet_v1_cifar10.md │   ├── tools | ├── md_validator.py - | └── md_validator.py + | └── md_validator.py ``` + 注意,`{model_name}_{model_version}_{dataset}.md`文件中需要补充如下所示的`file-format`、`asset-link` 和 `asset-sha256`信息,它们分别表示模型文件格式、模型存储位置(步骤1所得)和模型哈希值。 - ```shell + ```bash file-format: ckpt asset-link: https://download.mindspore.cn/model_zoo/official/cv/googlenet/goolenet_ascend_0.2.0_cifar10_official_classification_20200713/googlenet.ckpt asset-sha256: 114e5acc31dad444fa8ed2aafa02ca34734419f602b9299f3b53013dfc71b0f7 - ``` + ``` 其中,MindSpore Hub支持的模型文件格式有: - [MindSpore CKPT](https://www.mindspore.cn/tutorial/training/zh-CN/master/use/save_model.html#checkpoint) diff --git a/tutorials/training/source_zh_cn/use/save_model.md b/tutorials/training/source_zh_cn/use/save_model.md index 0a2312e851..0e5e9a3c11 100644 --- a/tutorials/training/source_zh_cn/use/save_model.md +++ b/tutorials/training/source_zh_cn/use/save_model.md @@ -34,6 +34,7 @@ 通过`CheckpointConfig`对象可以设置CheckPoint的保存策略。保存的参数分为网络参数和优化器参数。 `ModelCheckpoint`提供默认配置策略,方便用户快速上手。具体用法如下: + ```python from mindspore.train.callback import ModelCheckpoint ckpoint_cb = ModelCheckpoint() @@ -60,7 +61,7 @@ model.train(epoch_num, dataset, callbacks=ckpoint_cb) 生成的CheckPoint文件如下: -``` +```text resnet50-graph.meta # 编译后的计算图 resnet50-1_32.ckpt # CheckPoint文件后缀名为'.ckpt' resnet50-2_32.ckpt # 文件的命名方式表示保存参数所在的epoch和step数 diff --git a/tutorials/tutorial_code/evaluate_the_model_during_training/README.md b/tutorials/tutorial_code/evaluate_the_model_during_training/README.md index 19b9474a55..acd60348ea 100644 --- a/tutorials/tutorial_code/evaluate_the_model_during_training/README.md +++ b/tutorials/tutorial_code/evaluate_the_model_during_training/README.md @@ -1,7 +1,9 @@ -使用数据集: [MNIST](http://yann.lecun.com/exdb/mnist/) +# README + +使用数据集: [MNIST](http://yann.lecun.com/exdb/mnist/) 下载后按照下述结构放置: -``` +```text ├─evaluate_the_model_during_training.py │ └─MNIST_Data @@ -14,4 +16,4 @@ train-labels.idx1-ubyte ``` -使用命令`python evaluate_the_model_during_training.py >train.log 2>&1 &`运行(过程较长,大约需要3分钟),运行结果会记录在`log.txt`文件中。 \ No newline at end of file +使用命令`python evaluate_the_model_during_training.py >train.log 2>&1 &`运行(过程较长,大约需要3分钟),运行结果会记录在`log.txt`文件中。 -- Gitee From 6b9f5e24867ecc8a5a56ebc4e8937ce280b8bb71 Mon Sep 17 00:00:00 2001 From: SebastianHan Date: Mon, 19 Oct 2020 16:25:26 +0800 Subject: [PATCH 15/21] add profiling video en --- .../source_en/quick_start/quick_video.md | 32 +++++++++++++++++++ .../mindInsight_performance_profiling.md | 13 ++++++++ 2 files changed, 45 insertions(+) create mode 100644 tutorials/training/source_en/quick_start/quick_video/mindInsight_performance_profiling.md diff --git a/tutorials/training/source_en/quick_start/quick_video.md b/tutorials/training/source_en/quick_start/quick_video.md index 05fdbb0749..4891f7dafa 100644 --- a/tutorials/training/source_en/quick_start/quick_video.md +++ b/tutorials/training/source_en/quick_start/quick_video.md @@ -209,6 +209,14 @@ Provides video tutorials from installation to try-on, helping you quickly use Mi + + + + +## Training Process Visualization-MindInsight + + + diff --git a/tutorials/training/source_en/quick_start/quick_video/mindInsight_performance_profiling.md b/tutorials/training/source_en/quick_start/quick_video/mindInsight_performance_profiling.md new file mode 100644 index 0000000000..953ca88443 --- /dev/null +++ b/tutorials/training/source_en/quick_start/quick_video/mindInsight_performance_profiling.md @@ -0,0 +1,13 @@ +# MindInsight Performance Profiling + +[comment]: <> (This document contains Hands-on Tutorial Series. Gitee does not support display. Please check tutorials on the official website) + + + +**See more**: + + + + \ No newline at end of file -- Gitee From 120eebe98c1af5b7815a89b412187a6cd8211abe Mon Sep 17 00:00:00 2001 From: zhangyi Date: Mon, 19 Oct 2020 18:54:57 +0800 Subject: [PATCH 16/21] Fix error format of markdown file --- .../lite/source_zh_cn/use/image_processing.md | 34 +++--- .../use/post_training_quantization.md | 32 +++-- .../lite/source_zh_cn/use/runtime_cpp.md | 11 ++ .../lite/source_zh_cn/use/runtime_java.md | 13 +- tutorials/notebook/README.md | 32 +++-- .../apply_gradient_accumulation.md | 26 ++-- .../apply_host_device_training.md | 15 ++- .../apply_parameter_server_training.md | 34 ++++-- .../apply_quantization_aware_training.md | 25 ++-- .../source_en/advanced_use/convert_dataset.md | 13 +- .../advanced_use/custom_debugging_info.md | 52 ++++---- .../advanced_use/custom_operator_ascend.md | 25 ++-- .../source_en/advanced_use/cv_resnet50.md | 16 +-- .../cv_resnet50_second_order_optimizer.md | 77 ++++++++---- .../source_en/advanced_use/dashboard.md | 5 +- .../advanced_use/debug_in_pynative_mode.md | 48 ++++---- .../source_en/advanced_use/debugger.md | 31 ++--- .../distributed_training_ascend.md | 31 +++-- .../advanced_use/distributed_training_gpu.md | 7 +- .../enable_graph_kernel_fusion.md | 1 - .../advanced_use/enable_mixed_precision.md | 7 +- .../evaluate_the_model_during_training.md | 66 +++++------ .../improve_model_security_nad.md | 32 ++--- .../lineage_and_scalars_comparision.md | 3 +- .../advanced_use/migrate_3rd_scripts.md | 1 - .../migrate_3rd_scripts_mindconverter.md | 20 +--- .../advanced_use/nlp_sentimentnet.md | 41 ++++--- .../advanced_use/optimize_data_processing.md | 22 ++-- .../advanced_use/performance_profiling.md | 37 +++--- .../advanced_use/performance_profiling_gpu.md | 14 +-- ..._user_privacy_with_differential_privacy.md | 26 ++-- .../save_load_model_hybrid_parallel.md | 112 +++++++++--------- .../source_en/advanced_use/summary_record.md | 37 ++++-- .../test_model_security_fuzzing.md | 12 +- .../quick_start/linear_regression.md | 54 +++------ .../source_en/quick_start/quick_start.md | 43 +++---- .../source_en/quick_start/quick_video.md | 3 +- ..._the_dataset_and_converting_data_format.md | 1 - .../quick_video/mindInsight_dashboard.md | 2 +- ...nsight_installation_and_common_commands.md | 2 +- ...Insight_lineage_and_scalars_comparision.md | 2 +- .../quick_video/quick_start_video.md | 2 +- .../saving_and_loading_model_parameters.md | 2 +- .../source_en/use/load_dataset_image.md | 2 +- .../source_en/use/load_dataset_text.md | 14 +-- .../load_model_for_inference_and_transfer.md | 17 +-- .../training/source_en/use/publish_model.md | 16 +-- .../training/source_en/use/save_model.md | 6 +- 48 files changed, 620 insertions(+), 504 deletions(-) diff --git a/tutorials/lite/source_zh_cn/use/image_processing.md b/tutorials/lite/source_zh_cn/use/image_processing.md index c99badd225..b328bb056a 100644 --- a/tutorials/lite/source_zh_cn/use/image_processing.md +++ b/tutorials/lite/source_zh_cn/use/image_processing.md @@ -7,15 +7,15 @@ - [导入图像预处理函数的库](#导入图像预处理函数的库) - [对图像进行初始化](#对图像进行初始化) - [使用示例](#使用示例) - - [可选的图像预处理算子](#可选的图像预处理算子) + - [可选的图像预处理算子](#可选的图像预处理算子) - [对图像进行缩放操作](#对图像进行缩放操作) - - [使用示例](#使用示例-1) + - [使用示例](#使用示例-1) - [对图像数据类型进行转换](#对图像数据类型进行转换) - - [使用示例](#使用示例-2) + - [使用示例](#使用示例-2) - [对图像数据进行裁剪](#对图像数据进行裁剪) - - [使用示例](#使用示例-3) + - [使用示例](#使用示例-3) - [对图像数据进行归一化处理](#对图像数据进行归一化处理) - - [使用示例](#使用示例-4) + - [使用示例](#使用示例-4) @@ -29,7 +29,7 @@ ## 导入图像预处理函数的库 -``` +```cpp #include "lite_cv/lite_mat.h" #include "lite_cv/image_process.h" ``` @@ -38,13 +38,13 @@ 这边使用的是`image_process.h`文件中的[InitFromPixel](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/dataset.html#initfrompixel)函数对图像进行初始化操作。 -``` +```cpp bool InitFromPixel(const unsigned char *data, LPixelType pixel_type, LDataType data_type, int w, int h, LiteMat &m) ``` ### 使用示例 -``` +```cpp // Create the data object of the LiteMat object. LiteMat lite_mat_bgr; @@ -61,13 +61,13 @@ InitFromPixel(pixel_ptr, LPixelType::RGBA2GRAY, LDataType::UINT8, rgba_mat.cols, 这边利用的是`image_process.h`中的[ResizeBilinear](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/dataset.html#resizebilinear)函数通过双线性算法调整图像大小,当前仅支持的数据类型为uint8,当前支持的通道为3和1。 -``` +```cpp bool ResizeBilinear(const LiteMat &src, LiteMat &dst, int dst_w, int dst_h) ``` #### 使用示例 -``` +```cpp // Initialize the image data. LiteMat lite_mat_bgr; InitFromPixel(rgba_mat.data, LPixelType::RGBA2BGR, LDataType::UINT8, rgba_mat.cols, rgba_mat.rows, lite_mat_bgr); @@ -83,13 +83,13 @@ ResizeBilinear(lite_mat_bgr, lite_mat_resize, 256, 256); 这边利用的是`image_process.h`中的[ConvertTo](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/dataset.html#convertto)函数对图像数据类型进行转换,目前支持的转换是将uint8转换为float。 -``` +```cpp bool ConvertTo(const LiteMat &src, LiteMat &dst, double scale = 1.0) ``` #### 使用示例 -``` +```cpp // Initialize the image data. LiteMat lite_mat_bgr; InitFromPixel(rgba_mat.data, LPixelType::RGBA2BGR, LDataType::UINT8, rgba_mat.cols, rgba_mat.rows, lite_mat_bgr); @@ -105,13 +105,13 @@ ConvertTo(lite_mat_bgr, lite_mat_convert_float); 这边利用的是`image_process.h`中的[Crop](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/dataset.html#crop)函数对图像进行裁剪,目前支持通道3和1。 -``` +```cpp bool Crop(const LiteMat &src, LiteMat &dst, int x, int y, int w, int h) ``` #### 使用示例 -``` +```cpp // Initialize the image data. LiteMat lite_mat_bgr; InitFromPixel(rgba_mat.data, LPixelType::RGBA2BGR, LDataType::UINT8, rgba_mat.cols, rgba_mat.rows, lite_mat_bgr); @@ -127,13 +127,13 @@ Crop(lite_mat_bgr, lite_mat_cut, 16, 16, 224, 224); 为了消除数据指标之间的量纲影响,通过标准化处理来解决数据指标之间的可比性问题,这边利用的是`image_process.h`中的[SubStractMeanNormalize](https://www.mindspore.cn/doc/api_cpp/zh-CN/master/dataset.html#substractmeannormalize)函数对图像数据进行归一化处理。 -``` +```cpp bool SubStractMeanNormalize(const LiteMat &src, LiteMat &dst, const std::vector &mean, const std::vector &std) ``` #### 使用示例 -``` +```cpp // Initialize the image data. LiteMat lite_mat_bgr; InitFromPixel(rgba_mat.data, LPixelType::RGBA2BGR, LDataType::UINT8, rgba_mat.cols, rgba_mat.rows, lite_mat_bgr); @@ -148,4 +148,4 @@ LiteMat lite_mat_bgr_norm; // The image data is normalized by the mean value and variance of the image data. SubStractMeanNormalize(lite_mat_bgr, lite_mat_bgr_norm, means, stds); -``` \ No newline at end of file +``` diff --git a/tutorials/lite/source_zh_cn/use/post_training_quantization.md b/tutorials/lite/source_zh_cn/use/post_training_quantization.md index a1b9875ab1..1e10f8ab39 100644 --- a/tutorials/lite/source_zh_cn/use/post_training_quantization.md +++ b/tutorials/lite/source_zh_cn/use/post_training_quantization.md @@ -23,6 +23,7 @@ 目前训练后量化属于alpha阶段(支持部分网络,不支持多输入模型),正在持续完善中。 MindSpore Lite训练后量化分为两类: + 1. 权重量化:单独对模型的权值进行量化; 2. 全量化:对模型的权值、激活值、bias值统一进行量化。 @@ -35,13 +36,15 @@ MindSpore Lite训练后量化分为两类: ### 参数说明 权重量化转换命令的一般形式为: -``` + +```bash ./converter_lite --fmk=ModelType --modelFile=ModelFilePath --outputFile=ConvertedModelPath --quantType=WeightQuant --bitNum=BitNumValue --quantSize=QuantizationSizeThresholdValue --convWeightQuantChannelThreshold=ConvWeightQuantChannelThresholdValue ``` + 下面对此命令的量化相关参数进行说明: | 参数 | 属性 | 功能描述 | 参数类型 | 默认值 | 取值范围 | -| -------- | ------- | ----- | ----- |----- | ----- | +| -------- | ------- | ----- | ----- |----- | ----- | | `--quantType=` | 必选 | 设置为WeightQuant,启用权重量化 | String | - | 必须设置为WeightQuant | | `--bitNum=` | 可选 | 设定权重量化的比特数,目前仅支持8bit量化 | Integer | 8 | 8 | | `--quantSize=` | 可选 | 设定参与权重量化的卷积核尺寸阈值,若卷积核尺寸大于该值,则对此权重进行量化;建议设置为500 | Integer | 0 | (0,+∞) | @@ -49,21 +52,22 @@ MindSpore Lite训练后量化分为两类: 用户可根据模型及自身需要对权重量化的参数作出调整。 - ### 使用步骤 1. 正确编译出`converter_lite`可执行文件。该部分可参考构建文档[编译MindSpore Lite](https://www.mindspore.cn/tutorial/lite/zh-CN/master/use/build.html),获得`converter_lite`工具,并配置环境变量。 2. 以TensorFlow Lite模型为例,执行权重量化模型转换命令: - ``` + + ```bash ./converter_lite --fmk=TFLITE --modelFile=Inception_v3.tflite --outputFile=Inception_v3.tflite --quantType=WeightQuant --bitNum=8 --quantSize=0 --convWeightQuantChannelThreshold=0 ``` + 3. 上述命令执行成功后,便可得到量化后的模型`Inception_v3.tflite.ms`,量化后的模型大小通常会下降到FP32模型的1/4。 ### 部分模型精度结果 - | 模型 | 测试数据集 | FP32模型精度 | 权重量化精度 | - | -------- | ------- | ----- | ----- | - | [Inception_V3](https://storage.googleapis.com/download.tensorflow.org/models/tflite/model_zoo/upload_20180427/inception_v3_2018_04_27.tgz) | [ImageNet](http://image-net.org/) | 77.92% | 77.84% | + | 模型 | 测试数据集 | FP32模型精度 | 权重量化精度 | + | -------- | ------- | ----- | ----- | + | [Inception_V3](https://storage.googleapis.com/download.tensorflow.org/models/tflite/model_zoo/upload_20180427/inception_v3_2018_04_27.tgz) | [ImageNet](http://image-net.org/) | 77.92% | 77.84% | | [Mobilenet_V1_1.0_224](https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224.tgz) | [ImageNet](http://image-net.org/) | 70.96% | 70.56% | > 以上所有结果均在x86环境上测得。 @@ -75,13 +79,15 @@ MindSpore Lite训练后量化分为两类: ### 参数说明 全量化转换命令的一般形式为: -``` + +```bash ./converter_lite --fmk=ModelType --modelFile=ModelFilePath --outputFile=ConvertedModelPath --quantType=PostTraining --config_file=config.cfg ``` + 下面对此命令的量化相关参数进行说明: | 参数 | 属性 | 功能描述 | 参数类型 | 默认值 | 取值范围 | -| -------- | ------- | ----- | ----- |----- | ----- | +| -------- | ------- | ----- | ----- |----- | ----- | | `--quantType=` | 必选 | 设置为PostTraining,启用全量化 | String | - | 必须设置为PostTraining | | `--config_file=` | 必选 | 校准数据集配置文件路径 | String | - | - | @@ -99,17 +105,21 @@ MindSpore Lite训练后量化分为两类: 1. 正确编译出`converter_lite`可执行文件。 2. 准备校准数据集,假设存放在`/dir/images`目录,编写配置文件`config.cfg`,内容如下: - ``` + + ```python image_path=/dir/images batch_count=100 method_x=MAX_MIN thread_num=1 ``` + 校准数据集可以选择测试数据集的子集,要求`/dir/images`目录下存放的每个文件均是预处理好的输入数据,每个文件都可以直接用于推理的输入。 3. 以MindSpore模型为例,执行全量化的模型转换命令: - ``` + + ```bash ./converter_lite --fmk=MINDIR --modelFile=lenet.mindir --outputFile=lenet_quant --quantType=PostTraining --config_file=config.cfg ``` + 4. 上述命令执行成功后,便可得到量化后的模型`lenet_quant.ms`,通常量化后的模型大小会下降到FP32模型的1/4。 ### 部分模型精度结果 diff --git a/tutorials/lite/source_zh_cn/use/runtime_cpp.md b/tutorials/lite/source_zh_cn/use/runtime_cpp.md index 029b1c99f9..70753fd478 100644 --- a/tutorials/lite/source_zh_cn/use/runtime_cpp.md +++ b/tutorials/lite/source_zh_cn/use/runtime_cpp.md @@ -46,6 +46,7 @@ Runtime总体使用流程如下图所示: ![img](../images/side_infer_process.png) 包含的组件及功能如下所述: + - `Model`:MindSpore Lite使用的模型,通过用户构图或直接加载网络,来实例化算子原型的列表。 - `Lite Session`:提供图编译的功能,并调用图执行器进行推理。 - `Scheduler`:算子异构调度器,根据异构调度策略,为每一个算子选择合适的kernel,构造kernel list,并切分子图。 @@ -132,6 +133,7 @@ if (session2 == nullptr) { ### 使用示例 下面代码演示如何对MindSpore Lite的输入进行Resize: + ```cpp // Assume we have created a LiteSession instance named session. auto inputs = session->GetInputs(); @@ -160,6 +162,7 @@ virtual int CompileGraph(lite::Model *model) = 0; ### 使用示例 下面代码演示如何进行图编译: + ```cpp // Assume we have created a LiteSession instance named session and a Model instance named model before. // The methods of creating model and session can refer to "Import Model" and "Create Session" two sections. @@ -249,6 +252,7 @@ memcpy(in_data, input_buf, data_size); ``` 需要注意的是: + - MindSpore Lite的模型输入Tensor中的数据排布必须是NHWC。 - 模型的输入`input_buf`是用户从磁盘读取的,当拷贝给模型输入Tensor以后,用户需要自行释放`input_buf`。 - `GetInputs`和`GetInputsByTensorName`方法返回的vector不需要用户释放。 @@ -296,6 +300,7 @@ session->BindThread(false); ### 回调运行 Mindspore Lite可以在调用`RunGraph`时,传入两个`KernelCallBack`函数指针来回调推理模型,相比于一般的图执行,回调运行可以在运行过程中获取额外的信息,帮助开发者进行性能分析、Bug调试等。额外的信息包括: + - 当前运行的节点名称 - 推理当前节点前的输入输出Tensor - 推理当前节点后的输入输出Tensor @@ -377,6 +382,7 @@ delete (model); MindSpore Lite在执行完推理后,就可以获取模型的推理结果。 MindSpore Lite提供四种方法来获取模型的输出`MSTensor`。 + 1. 使用`GetOutputsByNodeName`方法,根据模型输出节点的名称来获取模型输出`MSTensor`中连接到该节点的Tensor的vector。 ```cpp @@ -501,22 +507,26 @@ for (auto tensor_name : tensor_names) { ``` ## 获取版本号 + MindSpore Lite提供了`Version`方法可以获取版本号,包含在`include/version.h`头文件中,调用该方法可以得到版本号字符串。 ### 使用示例 下面代码演示如何获取MindSpore Lite的版本号: + ```cpp #include "include/version.h" std::string version = mindspore::lite::Version(); ``` ## Session并行 + MindSpore Lite支持多个`LiteSession`并行推理,但不支持多个线程同时调用单个`LiteSession`的`RunGraph`接口。 ### 单Session并行 MindSpore Lite不支持多线程并行执行单个`LiteSession`的推理,否则会得到以下错误信息: + ```cpp ERROR [mindspore/lite/src/lite_session.cc:297] RunGraph] 10 Not support multi-threading ``` @@ -528,6 +538,7 @@ MindSpore Lite支持多个`LiteSession`同时进行推理的场景,每个`Lite ### 使用示例 下面代码演示了如何创建多个`LiteSession`,并且并行执行推理的过程: + ```cpp #include #include "src/common/file_utils.h" diff --git a/tutorials/lite/source_zh_cn/use/runtime_java.md b/tutorials/lite/source_zh_cn/use/runtime_java.md index 2ff2a9396f..99407b051b 100644 --- a/tutorials/lite/source_zh_cn/use/runtime_java.md +++ b/tutorials/lite/source_zh_cn/use/runtime_java.md @@ -40,14 +40,14 @@ private boolean init(Context context) { Log.e("MS_LITE", "Load Model failed"); return false; } - + // Create and init config. MSConfig msConfig = new MSConfig(); if (!msConfig.init(DeviceType.DT_CPU, 2, CpuBindMode.MID_CPU)) { Log.e("MS_LITE", "Init context failed"); return false; } - + // Create the mindspore lite session. session = new LiteSession(); if (!session.init(msConfig)) { @@ -56,14 +56,14 @@ private boolean init(Context context) { return false; } msConfig.free(); - + // Complile graph. if (!session.compileGraph(model)) { Log.e("MS_LITE", "Compile graph failed"); model.freeBuffer(); return false; } - + // Note: when use model.freeBuffer(), the model can not be complile graph again. model.freeBuffer(); @@ -79,7 +79,7 @@ private void DoInference(Context context) { } byte[] inData = readFileFromAssets(context, "model_inputs.bin"); inTensor.setData(inData); - + // Run graph to infer results. if (!session.runGraph()) { Log.e("MS_LITE", "Run graph failed"); @@ -97,7 +97,7 @@ private void DoInference(Context context) { return; } float[] results = output.getFloatData(); - + // Apply infer results. …… } @@ -109,4 +109,3 @@ private void free() { model.free(); } ``` - diff --git a/tutorials/notebook/README.md b/tutorials/notebook/README.md index cd78a0dd6a..56052a8107 100644 --- a/tutorials/notebook/README.md +++ b/tutorials/notebook/README.md @@ -1,6 +1,7 @@ # MindSpore的教程体验 ## 环境配置 + ### Windows和Linux系统配置方法 - 系统版本:Windows 10,Ubuntu 16.04及以上 @@ -11,17 +12,18 @@ - MindSpore 下载地址:[MindSpore官网下载](https://www.mindspore.cn/versions),使用Windows系统用户选择Windows-X86版本,使用Linux系统用户选择Ubuntu-X86版本 -> MindSpore的[具体安装教程](https://www.mindspore.cn/install/) - +> MindSpore的[具体安装教程](https://www.mindspore.cn/install/) ### Jupyter Notebook切换conda环境(Kernel Change)的配置方法 - 首先,增加Jupyter Notebook切换conda环境功能(Kernel Change) 启动Anaconda Prompt,输入命令: - ``` + + ```bash conda install nb_conda ``` + > 建议在base环境操作上述命令。 执行完毕,重启Jupyter Notebook即可完成功能添加。 @@ -29,19 +31,25 @@ - 然后,添加conda环境到Jypyter Notebook的Kernel Change中。 1. 新建一个conda环境,启动Anaconda Prompt,输入命令: - ``` + + ```bash conda create -n {env_name} python=3.7.5 ``` + > env_name可以按照自己想要的环境名称自行命名。 2. 激活新环境,输入命令: - ``` + + ```bash conda activate {env_name} ``` + 3. 安装ipykernel,输入命令: - ``` + + ```bash conda install -n {env_name} ipykernel ``` + > 如果添加已有环境,只需执行安装ipykernel操作即可。 执行完毕后,刷新Jupyter notebook页面点击Kernel下拉,选择Kernel Change,就能选择新添加的conda环境。 @@ -49,20 +57,20 @@ ## notebook说明 | 教  程  名  称 | 文  件  名  称 | 教  程  类  别 | 内  容  描  述 -| :----------- | :----------- | :------- |:------ +| :----------- | :----------- | :------- |:------ | 手写数字分类识别入门体验教程 | [quick_start.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/quick_start.ipynb) | 快速入门 | - CPU平台下从数据集到模型验证的全过程解读
- 体验教程中各功能模块的使用说明
- 数据集图形化展示
- 了解LeNet5具体结构和参数作用
- 学习使用自定义回调函数
- loss值与训练步数的变化图
- 模型精度与训练步数的变化图
- 使用模型应用到手写图片的预测与分类上 | 线性拟合 | [linear_regression.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/linear_regression.ipynb) | 快速入门 | - 了解线性拟合的算法原理
- 了解在MindSpore中如何实现线性拟合的算法原理
- 学习使用MindSpore实现AI训练中的正向传播和方向传播
- 可视化线性函数拟合数据的全过程。 -| 加载数据集 | [loading_dataset.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/loading_dataset.ipynb) | 使用指南 | - 学习MindSpore中加载数据集的方法
- 展示加载常用数据集的方法
- 展示加载MindRecord格式数据集的方法
- 展示加载自定义格式数据集的方法 +| 加载数据集 | [loading_dataset.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/loading_dataset.ipynb) | 使用指南 | - 学习MindSpore中加载数据集的方法
- 展示加载常用数据集的方法
- 展示加载MindRecord格式数据集的方法
- 展示加载自定义格式数据集的方法 | 将数据集转换为MindSpore数据格式 | [convert_dataset_to_mindspore_data_format.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/convert_dataset_to_mindspore_data_format/convert_dataset_to_mindspore_data_format.ipynb) | 使用指南 | - 展示将MNIST数据集转换为MindSpore数据格式
- 展示将CSV数据集转换为MindSpore数据格式
- 展示将CIFAR-10数据集转换为MindSpore数据格式
- 展示将CIFAR-100数据集转换为MindSpore数据格式
- 展示将ImageNet数据集转换为MindSpore数据格式
- 展示用户自定义生成MindSpore数据格式 | 数据处理与数据增强 | [data_loading_enhancement.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/data_loading_enhance/data_loading_enhancement.ipynb) | 使用指南 | - 学习MindSpore中数据处理和增强的方法
- 展示数据处理、增强方法的实际操作
- 对比展示数据处理前和处理后的效果
- 表述在数据处理、增强后的意义 -| 自然语言处理应用 | [nlp_application.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/nlp_application.ipynb) | 应用实践 | - 展示MindSpore在自然语言处理的应用
- 展示自然语言处理中数据集特定的预处理方法
- 展示如何定义基于LSTM的SentimentNet网络 +| 自然语言处理应用 | [nlp_application.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/nlp_application.ipynb) | 应用实践 | - 展示MindSpore在自然语言处理的应用
- 展示自然语言处理中数据集特定的预处理方法
- 展示如何定义基于LSTM的SentimentNet网络 | 计算机视觉应用 | [computer_vision_application.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/computer_vision_application.ipynb) | 应用实践 | - 学习MindSpore卷积神经网络在计算机视觉应用的过程
- 学习下载CIFAR-10数据集,搭建运行环境
- 学习使用ResNet-50构建卷积神经网络
- 学习使用Momentum和SoftmaxCrossEntropyWithLogits构建优化器和损失函数
- 学习调试参数训练模型,判断模型精度 -| 模型的训练及验证同步方法 | [evaluate_the_model_during_training.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/evaluate_the_model_during_training.ipynb) | 应用实践 | - 了解模型训练和验证同步进行的方法
- 学习同步训练和验证中参数设置方法
- 利用绘图函数从保存的模型中挑选出最优模型 +| 模型的训练及验证同步方法 | [evaluate_the_model_during_training.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/evaluate_the_model_during_training.ipynb) | 应用实践 | - 了解模型训练和验证同步进行的方法
- 学习同步训练和验证中参数设置方法
- 利用绘图函数从保存的模型中挑选出最优模型 | 优化数据准备的性能 | [optimize_the_performance_of_data_preparation.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/optimize_the_performance_of_data_preparation/optimize_the_performance_of_data_preparation.ipynb) | 应用实践 | - 数据加载性能优化
- shuffle性能优化
- 数据增强性能优化
- 性能优化方案总结 | 使用PyNative进行神经网络的训练调试体验 | [debugging_in_pynative_mode.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/debugging_in_pynative_mode.ipynb) | 模型调优 | - GPU平台下从数据集获取单个数据进行单个step训练的数据变化全过程解读
- 了解PyNative模式下的调试方法
- 图片数据在训练过程中的变化情况的图形展示
- 了解构建权重梯度计算函数的方法
- 展示1个step过程中权重的变化及数据展示 | 自定义调试信息体验文档 | [custom_debugging_info.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/custom_debugging_info.ipynb) | 模型调优 | - 了解MindSpore的自定义调试算子
- 学习使用自定义调试算子Callback设置定时训练
- 学习设置metrics算子输出相对应的模型精度信息
- 学习设置日志环境变量来控制glog输出日志 | MindInsight的溯源分析和对比分析 | [lineage_and_scalars_comparision.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/lineage_and_scalars_comparision.ipynb) | 模型调优 | - 了解MindSpore中训练数据的采集及展示
- 学习使用回调函数SummaryCollector进行数据采集
- 使用MindInsight进行数据可视化
- 了解数据溯源和模型溯源的使用方法
- 了解对比分析的使用方法 -| 计算图和数据图可视化 | [calculate_and_datagraphic.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb) | 模型调优 | - 了解MindSpore中新增可视化功能
- 学习使用MindInsight可视化看板
- 学习使用查看计算图可视化图的信息的方法
- 学习使用查看数据图中展示的信息的方法 +| 计算图和数据图可视化 | [calculate_and_datagraphic.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb) | 模型调优 | - 了解MindSpore中新增可视化功能
- 学习使用MindInsight可视化看板
- 学习使用查看计算图可视化图的信息的方法
- 学习使用查看数据图中展示的信息的方法 | 标量、直方图、图像和张量可视化 | [mindinsight_image_histogram_scalar_tensor.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/mindinsight_image_histogram_scalar_tensor.ipynb) | 模型调优 | - 了解完整的MindSpore深度学习及MindInsight可视化展示的过程
- 学习使用MindInsight对训练过程中标量、直方图、图像和张量信息进行可视化展示
- 学习使用Summary算子记录标量、直方图、图像和张量信息
- 学习单独对标量、直方图、图像和张量信息进行记录并可视化展示的方法 -| 混合精度 | [mixed_precision.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mixed_precision.ipynb) | 性能优化 | - 了解混合精度训练的原理
- 学习在MindSpore中使用混合精度训练
- 对比单精度训练和混合精度训练的对模型训练的影响 +| 混合精度 | [mixed_precision.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mixed_precision.ipynb) | 性能优化 | - 了解混合精度训练的原理
- 学习在MindSpore中使用混合精度训练
- 对比单精度训练和混合精度训练的对模型训练的影响 | 模型安全 | [model_security.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/model_security.ipynb) | AI安全和隐私 | - 了解AI算法的安全威胁的概念和影响
- 介绍MindArmour提供的模型安全防护手段
- 学习如何模拟攻击训练模型
- 学习针对被攻击模型进行对抗性防御 diff --git a/tutorials/training/source_en/advanced_use/apply_gradient_accumulation.md b/tutorials/training/source_en/advanced_use/apply_gradient_accumulation.md index 76012d6196..0ee7673c66 100644 --- a/tutorials/training/source_en/advanced_use/apply_gradient_accumulation.md +++ b/tutorials/training/source_en/advanced_use/apply_gradient_accumulation.md @@ -36,6 +36,7 @@ The ultimate objective is to achieve the same effect as training with N x mini-b The MNIST dataset is used as an example to describe how to customize a simple model to implement gradient accumulation. ### Importing Library Files + The following are the required public modules and MindSpore modules and library files. ```python @@ -65,7 +66,9 @@ Use the `MnistDataset` API provided by the dataset of MindSpore to load the MNIS The following uses the LeNet network as an example. You can also use other networks, such as ResNet-50 and BERT. The code is imported from [lenet.py]() in the lenet directory of model_zoo. ### Defining the Training Model + The training process is divided into three parts: forward and backward training, parameter update, and accumulated gradient clearance. + - `TrainForwardBackward` calculates the loss and gradient, and uses grad_sum to implement gradient accumulation. - `TrainOptim` updates parameters. - `TrainClear` clears the gradient accumulation variable grad_sum. @@ -134,8 +137,8 @@ class TrainClear(Cell): ``` ### Defining the Training Process -Each mini-batch calculates the loss and gradient through forward and backward training, and uses mini_steps to control the accumulated times before each parameter update. After the number of accumulation times is reached, the parameter is updated and the accumulated gradient variable is cleared. +Each mini-batch calculates the loss and gradient through forward and backward training, and uses mini_steps to control the accumulated times before each parameter update. After the number of accumulation times is reached, the parameter is updated and the accumulated gradient variable is cleared. ```python class GradientAccumulation: @@ -202,6 +205,7 @@ class GradientAccumulation: ``` ### Training and Saving the Model + Call the network, optimizer, and loss function, and then customize the `train_process` API of `GradientAccumulation` to train the model. ```python @@ -226,18 +230,20 @@ if __name__ == "__main__": ``` ## Experiment Result + After 10 epochs, the accuracy on the test set is about 96.31%. -**Training Execution** +**Training Execution:** + 1. Run the training code and view the running result. - ```shell - $ python train.py --data_path=./MNIST_Data + ```bash + python train.py --data_path=./MNIST_Data ``` The output is as follows. The loss value decreases during training. - ```shell + ```text epoch: 1 step: 27 loss is 0.3660637 epoch: 1 step: 28 loss is 0.25238192 ... @@ -252,17 +258,17 @@ After 10 epochs, the accuracy on the test set is about 96.31%. The model file `gradient_accumulation.ckpt` is saved during training. -**Model Validation** +**Model Validation:** Use the saved checkpoint file to load the validation dataset through [eval.py]() in the lenet directory of model_zoo. -```shell -$ python eval.py --data_path=./MNIST_Data --ckpt_path=./gradient_accumulation.ckpt --device_target=GPU +```bash +python eval.py --data_path=./MNIST_Data --ckpt_path=./gradient_accumulation.ckpt --device_target=GPU ``` The output is as follows. The accuracy of the validation dataset is about 96.31%, which is the same as the result when the value of batch_size is 32. -```shell +```text ============== Starting Testing ============== ============== {'Accuracy': 0.9631730769230769} ============== -``` \ No newline at end of file +``` diff --git a/tutorials/training/source_en/advanced_use/apply_host_device_training.md b/tutorials/training/source_en/advanced_use/apply_host_device_training.md index 1dfbfa88e4..6874086a85 100644 --- a/tutorials/training/source_en/advanced_use/apply_host_device_training.md +++ b/tutorials/training/source_en/advanced_use/apply_host_device_training.md @@ -18,13 +18,14 @@ In deep learning, one usually has to deal with the huge model problem, in which the total size of parameters in the model is beyond the device memory capacity. To efficiently train a huge model, one solution is to employ homogenous accelerators (*e.g.*, Ascend 910 AI Accelerator and GPU) for distributed training. When the size of a model is hundreds of GBs or several TBs, the number of required accelerators is too overwhelming for people to access, resulting in this solution inapplicable. One alternative is Host+Device hybrid training. This solution simultaneously leveraging the huge memory in hosts and fast computation in accelerators, is a promisingly -efficient method for addressing huge model problem. +efficient method for addressing huge model problem. In MindSpore, users can easily implement hybrid training by configuring trainable parameters and necessary operators to run on hosts, and other operators to run on accelerators. This tutorial introduces how to train [Wide&Deep](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/recommend/wide_and_deep) in the Host+Ascend 910 AI Accelerator mode. + ## Preliminaries -1. Prepare the model. The Wide&Deep code can be found at: , in which `train_and_eval_auto_parallel.py` is the main function for training, +1. Prepare the model. The Wide&Deep code can be found at: , in which `train_and_eval_auto_parallel.py` is the main function for training, `src/` directory contains the model definition, data processing and configuration files, `script/` directory contains the launch scripts in different modes. 2. Prepare the dataset. The dataset can be found at: . Use the script `src/preprocess_data.py` to transform dataset into MindRecord format. @@ -50,16 +51,20 @@ This tutorial introduces how to train [Wide&Deep](https://gitee.com/mindspore/mi ## Configuring for Hybrid Training 1. Configure the flag of hybrid training. In the function `argparse_init` of file `src/config.py`, change the default value of `host_device_mix` to be `1`; change `self.host_device_mix` in function `__init__` of `class WideDeepConfig` to be `1`: + ```python self.host_device_mix = 1 ``` 2. Check placement of necessary operators and optimizers. In class `WideDeepModel` of file `src/wide_and_deep.py`, check the placement of `EmbeddingLookup` is at host: + ```python self.deep_embeddinglookup = nn.EmbeddingLookup() self.wide_embeddinglookup = nn.EmbeddingLookup() ``` + In `class TrainStepWrap(nn.Cell)` of file `src/wide_and_deep.py`, check two optimizer are also at host: + ```python self.optimizer_w.sparse_opt.add_prim_attr("primitive_target", "CPU") self.optimizer_d.sparse_opt.add_prim_attr("primitive_target", "CPU") @@ -73,7 +78,7 @@ and `RANK_TABLE_FILE` is the path of the above `rank_table_1p_0.json` file. The running log is in the directory of `device_0`, where `loss.log` contains every loss value of every step in the epoch. Here is an example: -``` +```text epoch: 1 step: 1, wide_loss is 0.6873926, deep_loss is 0.8878349 epoch: 1 step: 2, wide_loss is 0.6442529, deep_loss is 0.8342661 epoch: 1 step: 3, wide_loss is 0.6227323, deep_loss is 0.80273706 @@ -90,7 +95,7 @@ epoch: 1 step: 10, wide_loss is 0.566089, deep_loss is 0.6884129 `test_deep0.log` contains the runtime log (This needs to adjust the log level to INFO, and add the `-p on` option when compiling MindSpore). Search `EmbeddingLookup` in `test_deep0.log`, the following can be found: -``` +```text [INFO] DEVICE(109904,python3.7):2020-06-27-12:42:34.928.275 [mindspore/ccsrc/device/cpu/cpu_kernel_runtime.cc:324] Run] cpu kernel: Default/network-VirtualDatasetCellTriple/_backbone-NetWithLossClass/network-WideDeepModel/EmbeddingLookup-op297 costs 3066 us. [INFO] DEVICE(109904,python3.7):2020-06-27-12:42:34.943.896 [mindspore/ccsrc/device/cpu/cpu_kernel_runtime.cc:324] Run] cpu kernel: Default/network-VirtualDatasetCellTriple/_backbone-NetWithLossClass/network-WideDeepModel/EmbeddingLookup-op298 costs 15521 us. ``` @@ -99,7 +104,7 @@ showing the running time of `EmbeddingLookup` on the host. Search `FusedSparseFtrl` and `FusedSparseLazyAdam` in `test_deep0.log`, the following can be found: -``` +```text [INFO] DEVICE(109904,python3.7):2020-06-27-12:42:35.422.963 [mindspore/ccsrc/device/cpu/cpu_kernel_runtime.cc:324] Run] cpu kernel: Default/optimizer_w-FTRL/FusedSparseFtrl-op299 costs 54492 us. [INFO] DEVICE(109904,python3.7):2020-06-27-12:42:35.565.953 [mindspore/ccsrc/device/cpu/cpu_kernel_runtime.cc:324] Run] cpu kernel: Default/optimizer_d-LazyAdam/FusedSparseLazyAdam-op300 costs 142865 us. ``` diff --git a/tutorials/training/source_en/advanced_use/apply_parameter_server_training.md b/tutorials/training/source_en/advanced_use/apply_parameter_server_training.md index 50acc0f46e..1161cf1fd0 100644 --- a/tutorials/training/source_en/advanced_use/apply_parameter_server_training.md +++ b/tutorials/training/source_en/advanced_use/apply_parameter_server_training.md @@ -1,4 +1,4 @@ -# Training with Parameter Server +# Training with Parameter Server `Linux` `Ascend` `GPU` `Model Training` `Intermediate` `Expert` @@ -17,20 +17,21 @@ ## Overview + A parameter server is a widely used architecture in distributed training. Compared with the synchronous AllReduce training method, a parameter server has better flexibility, scalability, and node failover capabilities. Specifically, the parameter server supports both synchronous and asynchronous SGD training algorithms. In terms of scalability, model computing and update are separately deployed in the worker and server processes, so that resources of the worker and server can be independently scaled out and in horizontally. In addition, in an environment of a large-scale data center, various failures often occur in a computing device, a network, and a storage device, and consequently some nodes are abnormal. However, in an architecture of a parameter server, such a failure can be relatively easily handled without affecting a training job. In the parameter server implementation of MindSpore, the open-source [ps-lite](https://github.com/dmlc/ps-lite) is used as the basic architecture. Based on the remote communication capability provided by the [ps-lite](https://github.com/dmlc/ps-lite) and abstract Push/Pull primitives, the distributed training algorithm of the synchronous SGD is implemented. In addition, with the high-performance collective communication library in Ascend and GPU(HCCL and NCCL), MindSpore also provides the hybrid training mode of parameter server and AllReduce. Some weights can be stored and updated through the parameter server, and other weights are still trained through the AllReduce algorithm. The ps-lite architecture consists of three independent components: server, worker, and scheduler. Their functions are as follows: -- Server: saves model weights and backward computation gradients, and updates the model using gradients pushed by workers. +- Server: saves model weights and backward computation gradients, and updates the model using gradients pushed by workers. - Worker: performs forward and backward computation on the network. The gradient value for backward computation is uploaded to a server through the `Push` API, and the model updated by the server is downloaded to the worker through the `Pull` API. - Scheduler: establishes the communication relationship between the server and worker. - ## Preparations + The following describes how to use parameter server to train LeNet on Ascend 910: ### Training Script Preparation @@ -41,17 +42,18 @@ Learn how to train a LeNet using the [MNIST dataset](http://yann.lecun.com/exdb/ 1. First of all, Use `mindspore.context.set_ps_context(enable_ps=True)` to enable Parameter Server training mode. -- This method should be called before `mindspore.communication.management.init()`. -- If you don't call this method, the [Environment Variable Setting](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/apply_parameter_server_training.html#environment-variable-setting) below will not take effect. -- Use `mindspore.context.reset_ps_context()` to disable Parameter Server training mode. + - This method should be called before `mindspore.communication.management.init()`. + - If you don't call this method, the [Environment Variable Setting](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/apply_parameter_server_training.html#environment-variable-setting) below will not take effect. + - Use `mindspore.context.reset_ps_context()` to disable Parameter Server training mode. 2. In this training mode, you can use either of the following methods to control whether the training parameters are updated by the Parameter Server: -- Use `mindspore.nn.Cell.set_param_ps()` to set all weight recursions of `nn.Cell`. -- Use `mindspore.common.Parameter.set_param_ps()` to set the weight. -- The size of the weight which is updated by Parameter Server should not exceed INT_MAX(2^31 - 1) bytes. + - Use `mindspore.nn.Cell.set_param_ps()` to set all weight recursions of `nn.Cell`. + - Use `mindspore.common.Parameter.set_param_ps()` to set the weight. + - The size of the weight which is updated by Parameter Server should not exceed INT_MAX(2^31 - 1) bytes. 3. On the basis of the [original training script](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/lenet/train.py), set all LeNet model weights to be trained on the parameter server: + ```python context.set_ps_context(enable_ps=True) network = LeNet5(cfg.num_classes) @@ -62,7 +64,7 @@ network.set_param_ps() MindSpore reads environment variables to control parameter server training. The environment variables include the following options (all scripts of `MS_SCHED_HOST` and `MS_SCHED_PORT` must be consistent): -``` +```bash export PS_VERBOSE=1 # Print ps-lite log export MS_SERVER_NUM=1 # Server number export MS_WORKER_NUM=1 # Worker number @@ -78,6 +80,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre Provide the shell scripts corresponding to the worker, server, and scheduler roles to start training: `Scheduler.sh`: + ```bash #!/bin/bash export PS_VERBOSE=1 @@ -90,6 +93,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre ``` `Server.sh`: + ```bash #!/bin/bash export PS_VERBOSE=1 @@ -102,6 +106,7 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre ``` `Worker.sh`: + ```bash #!/bin/bash export PS_VERBOSE=1 @@ -114,26 +119,31 @@ export MS_ROLE=MS_SCHED # The role of this process: MS_SCHED repre ``` Run the following commands separately: + ```bash sh Scheduler.sh > scheduler.log 2>&1 & sh Server.sh > server.log 2>&1 & sh Worker.sh > worker.log 2>&1 & ``` + Start training. 2. Viewing result Run the following command to view the communication logs between the server and worker in the `scheduler.log` file: - ``` + + ```text Bind to role=scheduler, id=1, ip=XXX.XXX.XXX.XXX, port=XXXX Assign rank=8 to node role=server, ip=XXX.XXX.XXX.XXX, port=XXXX Assign rank=9 to node role=worker, ip=XXX.XXX.XXX.XXX, port=XXXX the scheduler is connected to 1 workers and 1 servers ``` + The preceding information indicates that the communication between the server, worker, and scheduler is established successfully. Check the training result in the `worker.log` file: - ``` + + ```text epoch: 1 step: 1, loss is 2.302287 epoch: 1 step: 2, loss is 2.304071 epoch: 1 step: 3, loss is 2.308778 diff --git a/tutorials/training/source_en/advanced_use/apply_quantization_aware_training.md b/tutorials/training/source_en/advanced_use/apply_quantization_aware_training.md index 6868003cbb..1e18ce380d 100644 --- a/tutorials/training/source_en/advanced_use/apply_quantization_aware_training.md +++ b/tutorials/training/source_en/advanced_use/apply_quantization_aware_training.md @@ -39,6 +39,7 @@ Currently, there are two types of quantization solutions in the industry: quanti ### Fake Quantization Node A fake quantization node is a node inserted during quantization aware training, and is used to search for network data distribution and feed back a lost accuracy. The specific functions are as follows: + - Find the distribution of network data, that is, find the maximum and minimum values of the parameters to be quantized. - Simulate the accuracy loss of low-bit quantization, apply the loss to the network model, and transfer the loss to the loss function, so that the optimizer optimizes the loss value during training. @@ -99,7 +100,7 @@ class LeNet5(nn.Cell): Tensor, output tensor Examples: >>> LeNet(num_class=10, num_channel=1) - + """ def __init__(self, num_class=10, num_channel=1): super(LeNet5, self).__init__() @@ -129,10 +130,10 @@ class LeNet5(nn.Cell): def __init__(self, num_class=10): super(LeNet5, self).__init__() self.num_class = num_class - + self.conv1 = nn.Conv2dBnAct(1, 6, kernel_size=5, activation='relu') self.conv2 = nn.Conv2dBnAct(6, 16, kernel_size=5, activation='relu') - + self.fc1 = nn.DenseBnAct(16 * 5 * 5, 120, activation='relu') self.fc2 = nn.DenseBnAct(120, 84, activation='relu') self.fc3 = nn.DenseBnAct(84, self.num_class) @@ -164,17 +165,17 @@ net = quant.convert_quant_network(network, quant_delay=900, bn_fold=False, per_c The preceding describes the quantization aware training from scratch. A more common case is that an existing model file needs to be converted to a quantization model. The model file and training script obtained through common network model training are available for quantization aware training. To use a checkpoint file for retraining, perform the following steps: - 1. Process data and load datasets. - 2. Define an original unquantative network. - 3. Train the original network to generate a unquantative model. - 4. Define a fusion network. - 5. Define an optimizer and loss function. - 6. Generate a quantative network based on the fusion network. - 7. Load a model file and retrain the model. Load the unquantative model file generated in step 3 and retrain the quantative model based on the quantative network to generate a quantative model. For details, see . + 1. Process data and load datasets. + 2. Define an original unquantative network. + 3. Train the original network to generate a unquantative model. + 4. Define a fusion network. + 5. Define an optimizer and loss function. + 6. Generate a quantative network based on the fusion network. + 7. Load a model file and retrain the model. Load the unquantative model file generated in step 3 and retrain the quantative model based on the quantative network to generate a quantative model. For details, see . ### Inference -The inference using a quantization model is the same the common model inference. The inference can be performed by directly using the checkpoint file or converting the checkpoint file into a common model format (such as AIR or MINDIR). +The inference using a quantization model is the same the common model inference. The inference can be performed by directly using the checkpoint file or converting the checkpoint file into a common model format (such as AIR or MINDIR). For details, see . @@ -183,7 +184,7 @@ For details, see - [Converting Dataset to MindRecord](#converting-dataset-to-mindrecord) - - [Overview](#overview) - - [Basic Concepts](#basic-concepts) - - [Converting Dataset to MindRecord](#converting-dataset-to-mindrecord-1) - - [Loading MindRecord Dataset](#loading-mindrecord-dataset) + - [Overview](#overview) + - [Basic Concepts](#basic-concepts) + - [Converting Dataset to MindRecord](#converting-dataset-to-mindrecord-1) + - [Loading MindRecord Dataset](#loading-mindrecord-dataset) @@ -19,6 +19,7 @@ Users can convert non-standard datasets and common datasets into the MindSpore data format, MindRecord, so that they can be easily loaded to MindSpore for training. In addition, the performance of MindSpore in some scenarios is optimized, which delivers better user experience when you use datasets in the MindSpore data format. The MindSpore data format has the following features: + 1. Unified storage and access of user data are implemented, simplifying training data loading. 2. Data is aggregated for storage, which can be efficiently read, managed and moved. 3. Data encoding and decoding are efficient and transparent to users. @@ -96,7 +97,7 @@ The following tutorial demonstrates how to convert image data and its annotation 5. Create a `FileWriter` object, transfer the file name and number of slices, add the schema and index, call the `write_raw_data` API to write data, and call the `commit` API to generate a local data file. - ```python + ```python writer = FileWriter(file_name="test.mindrecord", shard_num=4) writer.add_schema(cv_schema_json, "test_schema") writer.add_index(indexes) @@ -141,7 +142,7 @@ The following tutorial briefly demonstrates how to load the MindRecord dataset u The output is as follows: - ``` + ```text sample: {'data': array([175, 175, 85, 60, 184, 124, 54, 189, 125, 193, 153, 91, 234, 106, 43, 143, 132, 211, 204, 160, 44, 105, 187, 185, 45, 205, 122, 236, 112, 123, 84, 177, 219], dtype=uint8), 'file_name': array(b'3.jpg', dtype='|S5'), 'label': array(99, dtype=int32)} diff --git a/tutorials/training/source_en/advanced_use/custom_debugging_info.md b/tutorials/training/source_en/advanced_use/custom_debugging_info.md index 201968f580..96331030f2 100644 --- a/tutorials/training/source_en/advanced_use/custom_debugging_info.md +++ b/tutorials/training/source_en/advanced_use/custom_debugging_info.md @@ -24,7 +24,7 @@ This section describes how to use the customized capabilities provided by MindSpore, such as `callback`, `metrics`, `Print` operators and log printing, to help you quickly debug the training network. -## Introduction to Callback +## Introduction to Callback Here, callback is not a function but a class. You can use callback to observe the internal status and related information of the network during training or perform specific actions in a specific period. For example, you can monitor the loss, save model parameters, dynamically adjust parameters, and terminate training tasks in advance. @@ -39,7 +39,7 @@ MindSpore provides the callback capabilities to allow users to insert customized Usage: Transfer the callback object in the `model.train` method. The callback object can be a list, for example: ```python -ckpt_cb = ModelCheckpoint() +ckpt_cb = ModelCheckpoint() loss_cb = LossMonitor() summary_cb = SummaryCollector(summary_dir='./summary_dir') model.train(epoch, dataset, callbacks=[ckpt_cb, loss_cb, summary_cb]) @@ -58,7 +58,7 @@ The callback base class is defined as follows: ```python class Callback(): - """Callback base class""" + """Callback base class""" def begin(self, run_context): """Called once before the network executing.""" pass @@ -68,11 +68,11 @@ class Callback(): pass def epoch_end(self, run_context): - """Called after each epoch finished.""" + """Called after each epoch finished.""" pass def step_begin(self, run_context): - """Called before each epoch beginning.""" + """Called before each epoch beginning.""" pass def step_end(self, run_context): @@ -129,7 +129,7 @@ Here are two examples to further explain the usage of custom Callback. The output is as follows: - ``` + ```text epoch: 20 step: 32 loss: 2.298344373703003 ``` @@ -221,12 +221,16 @@ print('Accuracy is ', accuracy) ``` The output is as follows: -``` + +```text Accuracy is 0.6667 ``` + ## MindSpore Print Operator -MindSpore-developed `Print` operator is used to print the tensors or character strings input by users. Multiple strings, multiple tensors, and a combination of tensors and strings are supported, which are separated by comma (,). -The method of using the MindSpore `Print` operator is the same as using other operators. You need to assert MindSpore `Print` operator in `__init__` and invoke it using `construct`. The following is an example. + +MindSpore-developed `Print` operator is used to print the tensors or character strings input by users. Multiple strings, multiple tensors, and a combination of tensors and strings are supported, which are separated by comma (,). +The method of using the MindSpore `Print` operator is the same as using other operators. You need to assert MindSpore `Print` operator in `__init__` and invoke it using `construct`. The following is an example. + ```python import numpy as np from mindspore import Tensor @@ -250,8 +254,10 @@ y = Tensor(np.ones([2, 2]).astype(np.int32)) net = PrintDemo() output = net(x, y) ``` + The output is as follows: -``` + +```text print Tensor x and Tensor y: Tensor shape:[[const vector][2, 1]]Int32 val:[[1] @@ -313,7 +319,7 @@ The input and output of the operator can be saved for debugging through the data You can set `context.set_context(reserve_class_name_in_scope=False)` in your training script to avoid dump failure because of file name is too long. 4. Parse the Dump file. - + Call `numpy.fromfile` to parse dump data file. ### Asynchronous Dump @@ -321,6 +327,7 @@ The input and output of the operator can be saved for debugging through the data 1. Create dump json file:`data_dump.json`. The name and location of the JSON file can be customized. + ```json { "common_dump_settings": { @@ -369,30 +376,31 @@ The input and output of the operator can be saved for debugging through the data ``` ## Log-related Environment Variables and Configurations + MindSpore uses glog to output logs. The following environment variables are commonly used: - `GLOG_v` - - The environment variable specifies the log level. + + The environment variable specifies the log level. The default value is 2, indicating the WARNING level. The values are as follows: 0: DEBUG; 1: INFO; 2: WARNING; 3: ERROR. -- `GLOG_logtostderr` +- `GLOG_logtostderr` The environment variable specifies the log output mode. When `GLOG_logtostderr` is set to 1, logs are output to the screen. If the value is set to 0, logs are output to a file. The default value is 1. - `GLOG_log_dir` - - The environment variable specifies the log output path. - If `GLOG_logtostderr` is set to 0, value of this variable must be specified. - If `GLOG_log_dir` is specified and the value of `GLOG_logtostderr` is 1, logs are output to the screen but not to a file. + + The environment variable specifies the log output path. + If `GLOG_logtostderr` is set to 0, value of this variable must be specified. + If `GLOG_log_dir` is specified and the value of `GLOG_logtostderr` is 1, logs are output to the screen but not to a file. Logs of C++ and Python will be output to different files. The file name of C++ log complies with the naming rule of `GLOG` log file. Here, the name is `mindspore.MachineName.UserName.log.LogLevel.Timestamp`. The file name of Python log is `mindspore.log`. -- `MS_SUBMODULE_LOG_v` +- `MS_SUBMODULE_LOG_v` The environment variable specifies log levels of C++ sub modules of MindSpore. - The environment variable is assigned as: `MS_SUBMODULE_LOG_v="{SubModule1:LogLevel1,SubModule2:LogLevel2,...}"`. - The specified sub module log level will overwrite the global log level. The meaning of sub module log level is the same as `GLOG_v`, the sub modules of MindSpore are categorized by source directory is shown in the below table. + The environment variable is assigned as: `MS_SUBMODULE_LOG_v="{SubModule1:LogLevel1,SubModule2:LogLevel2,...}"`. + The specified sub module log level will overwrite the global log level. The meaning of sub module log level is the same as `GLOG_v`, the sub modules of MindSpore are categorized by source directory is shown in the below table. E.g. when set `GLOG_v=1 MS_SUBMODULE_LOG_v="{PARSER:2,ANALYZER:2}"` then log levels of `PARSER` and `ANALYZER` are WARNING, other modules' log levels are INFO. Sub modules of MindSpore grouped by source directory: @@ -424,4 +432,4 @@ Sub modules of MindSpore grouped by source directory: | mindspore/core/gvar | COMMON | | mindspore/core/ | CORE | -> The glog does not support log rotate. To control the disk space occupied by log files, use the log file management tool provided by the operating system, such as: logrotate of Linux. \ No newline at end of file +> The glog does not support log rotate. To control the disk space occupied by log files, use the log file management tool provided by the operating system, such as: logrotate of Linux. diff --git a/tutorials/training/source_en/advanced_use/custom_operator_ascend.md b/tutorials/training/source_en/advanced_use/custom_operator_ascend.md index c205cff59a..ec197f4a58 100644 --- a/tutorials/training/source_en/advanced_use/custom_operator_ascend.md +++ b/tutorials/training/source_en/advanced_use/custom_operator_ascend.md @@ -25,6 +25,7 @@ When built-in operators cannot meet requirements during network development, you To add a custom operator, you need to register the operator primitive, implement the operator, and register the operator information. The related concepts are as follows: + - Operator primitive: defines the frontend API prototype of an operator on the network. It is the basic unit for forming a network model and includes the operator name, attribute (optional), input and output names, output shape inference method, and output dtype inference method. - Operator implementation: describes the implementation of the internal computation logic for an operator through the DSL API provided by the Tensor Boost Engine (TBE). The TBE supports the development of custom operators based on the Ascend AI chip. You can apply for Open Beta Tests (OBTs) by visiting . - Operator information: describes basic information about a TBE operator, such as the operator name and supported input and output types. It is the basis for the backend to select and map operators. @@ -38,6 +39,7 @@ This section takes a Square operator as an example to describe how to customize The primitive of an operator is a subclass inherited from `PrimitiveWithInfer`. The type name of the subclass is the operator name. The definition of the custom operator primitive is the same as that of the built-in operator primitive. + - The attribute is defined by the input parameter of the constructor function `__init__`. The operator in this test case has no attribute. Therefore, `__init__` has only one input parameter. For details about test cases in which operators have attributes, see [custom add3](https://gitee.com/mindspore/mindspore/blob/master/tests/st/ops/custom_ops_tbe/cus_add3.py) in the MindSpore source code. - The input and output names are defined by the `init_prim_io_names` function. - The shape inference method of the output tensor is defined in the `infer_shape` function, and the dtype inference method of the output tensor is defined in the `infer_dtype` function. @@ -75,10 +77,12 @@ To compile an operator implementation, you need to compile a computable function The computable function of an operator is mainly used to encapsulate the computation logic of the operator for the main function to call. The computation logic is implemented by calling the combined API of the TBE. The entry function of an operator describes the internal process of compiling the operator. The process is as follows: + 1. Prepare placeholders to be input. A placeholder will return a tensor object that represents a group of input data. 2. Call the computable function. The computable function uses the API provided by the TBE to describe the computation logic of the operator. 3. Call the scheduling module. The model tiles the operator data based on the scheduling description and specifies the data transfer process to ensure optimal hardware execution. By default, the automatic scheduling module (`auto_schedule`) can be used. 4. Call `cce_build_code` to compile and generate an operator binary file. + > The input parameters of the entry function require the input information of each operator, output information of each operator, operator attributes (optional), and `kernel_name` (name of the generated operator binary file). The input and output information is encapsulated in dictionaries, including the input and output shape and dtype when the operator is called on the network. For details about TBE operator development, visit the [TBE website](https://support.huaweicloud.com/odevg-A800_3000_3010/atlaste_10_0063.html). For details about how to debug and optimize the TBE operator, visit the [Mind Studio website](https://support.huaweicloud.com/usermanual-mindstudioc73/atlasmindstudio_02_0043.html). @@ -88,12 +92,12 @@ For details about TBE operator development, visit the [TBE website](https://supp The operator information is key for the backend to select the operator implementation and guides the backend to insert appropriate type and format conversion operators. It uses the `TBERegOp` API for definition and uses the `op_info_register` decorator to bind the operator information to the entry function of the operator implementation. When the .py operator implementation file is imported, the `op_info_register` decorator registers the operator information to the operator information library at the backend. For details about how to use the operator information, see comments for the member method of `TBERegOp`. > The numbers and sequences of the input and output information defined in the operator information must be the same as those in the parameters of the entry function of the operator implementation and those listed in the operator primitive. - +> > If an operator has attributes, use `attr` to describe the attribute information in the operator information. The attribute names must be the same as those in the operator primitive definition. ### Example -The following takes the TBE implementation `square_impl.py` of the `Square` operator as an example. `square_compute` is a computable function of the operator implementation. It describes the computation logic of `x * x` by calling the API provided by `te.lang.cce`. `cus_square_op_info ` is the operator information, which is defined by `TBERegOp`. For the specific field meaning of the operator information, visit the [TBE website](https://support.huaweicloud.com/odevg-A800_3000_3010/atlaste_10_0096.html). +The following takes the TBE implementation `square_impl.py` of the `Square` operator as an example. `square_compute` is a computable function of the operator implementation. It describes the computation logic of `x * x` by calling the API provided by `te.lang.cce`. `cus_square_op_info` is the operator information, which is defined by `TBERegOp`. For the specific field meaning of the operator information, visit the [TBE website](https://support.huaweicloud.com/odevg-A800_3000_3010/atlaste_10_0096.html). Note the following parameters when setting `TBERegOp`: @@ -128,7 +132,7 @@ cus_square_op_info = TBERegOp("CusSquare") \ .output(0, "y", False, "required", "all") \ .dtype_format(DataType.F32_Default, DataType.F32_Default) \ .dtype_format(DataType.F16_Default, DataType.F16_Default) \ - .get_op_info() + .get_op_info() # Binding kernel info with the kernel implementation. @op_info_register(cus_square_op_info) @@ -185,17 +189,20 @@ def test_net(): ``` Execute the test case. -``` + +```bash pytest -s tests/st/ops/custom_ops_tbe/test_square.py::test_net ``` The execution result is as follows: -``` + +```text x: [1. 4. 9.] output: [1. 16. 81.] ``` ## Defining the bprop Function for an Operator + If an operator needs to support automatic differentiation, the bprop function needs to be defined in the primitive of the operator. In the bprop function, you need to describe the backward computation logic that uses the forward input, forward output, and output gradients to obtain the input gradients. The backward computation logic can be composed of built-in operators or custom backward operators. Note the following points when defining the bprop function: @@ -204,6 +211,7 @@ Note the following points when defining the bprop function: - The return value of the bprop function is tuples consisting of input gradients. The sequence of elements in a tuple is the same as that of the forward input parameters. Even if there is only one input gradient, the return value must be a tuple. For example, the `CusSquare` primitive after the bprop function is added is as follows: + ```python class CusSquare(PrimitiveWithInfer): @prim_attr_register @@ -228,6 +236,7 @@ class CusSquare(PrimitiveWithInfer): ``` Define backward cases in the `test_square.py` file. + ```python from mindspore.ops import composite as C def test_grad_net(): @@ -241,12 +250,14 @@ def test_grad_net(): ``` Execute the test case. -``` + +```bash pytest -s tests/st/ops/custom_ops_tbe/test_square.py::test_grad_net ``` The execution result is as follows: -``` + +```text x: [1. 4. 9.] dx: [2. 8. 18.] ``` diff --git a/tutorials/training/source_en/advanced_use/cv_resnet50.md b/tutorials/training/source_en/advanced_use/cv_resnet50.md index 6c59dcbbcf..a4b8060207 100644 --- a/tutorials/training/source_en/advanced_use/cv_resnet50.md +++ b/tutorials/training/source_en/advanced_use/cv_resnet50.md @@ -26,8 +26,8 @@ Computer vision is one of the most widely researched and mature technology field This chapter describes how to apply MindSpore to computer vision scenarios based on image classification tasks. - ## Image Classification + Image classification is one of the most basic computer vision applications and belongs to the supervised learning category. For example, determine the class of a digital image, such as cat, dog, airplane, or car. The function is as follows: ```python @@ -42,7 +42,6 @@ MindSpore presets a typical CNN, developer can visit [model_zoo](https://gitee.c MindSpore supports the following image classification networks: LeNet, AlexNet, and ResNet. - ## Task Description and Preparation ![cifar10](images/cifar10.jpg) @@ -54,6 +53,7 @@ The CIFAR-10 dataset contains 10 classes of 60,000 images. Each class contains 6 Generally, a training indicator of image classification is accuracy, that is, a ratio of the quantity of accurately predicted examples to the total quantity of predicted examples. Next, let's use MindSpore to solve the image classification task. The overall process is as follows: + 1. Download the CIFAR-10 dataset. 2. Load and preprocess data. 3. Define a convolutional neural network. In this example, the ResNet-50 network is used. @@ -66,6 +66,7 @@ Next, let's use MindSpore to solve the image classification task. The overall pr The key parts of the task process code are explained below. ### Downloading the CIFAR-10 Dataset + CIFAR-10 dataset download address: [the website of Cifar-10 Dataset](https://www.cs.toronto.edu/~kriz/cifar.html). In this example, the data is in binary format. In the Linux environment, run the following command to download the dataset: ```shell @@ -78,7 +79,6 @@ Run the following command to decompress the dataset: tar -zvxf cifar-10-binary.tar.gz ``` - ### Data Preloading and Preprocessing 1. Load the dataset. @@ -86,10 +86,8 @@ tar -zvxf cifar-10-binary.tar.gz Data can be loaded through the built-in dataset format `Cifar10Dataset` API. > `Cifar10Dataset`: The read type is random read. The built-in CIFAR-10 dataset contains images and labels. The default image format is uint8, and the default label data format is uint32. For details, see the description of the `Cifar10Dataset` API. - The data loading code is as follows, where `data_home` indicates the data storage location: - ```python cifar_ds = ds.Cifar10Dataset(data_home) ``` @@ -138,7 +136,6 @@ tar -zvxf cifar-10-binary.tar.gz cifar_ds = cifar_ds.repeat(repeat_num) ``` - ### Defining the CNN CNN is a standard algorithm for image classification tasks. CNN uses a layered structure to perform feature extraction on an image, and is formed by stacking a series of network layers, such as a convolutional layer, a pooling layer, and an activation layer. @@ -153,10 +150,8 @@ network = resnet50(class_num=10) For more information about ResNet, see [ResNet Paper](https://arxiv.org/abs/1512.03385). - ### Defining the Loss Function and Optimizer - A loss function and an optimizer need to be defined. The loss function is a training objective of the deep learning, and is also referred to as an objective function. The loss function indicates the distance between a logit of a neural network and a label, and is scalar data. Common loss functions include mean square error, L2 loss, Hinge loss, and cross entropy. Cross entropy is usually used for image classification. @@ -173,7 +168,6 @@ ls = SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean") opt = Momentum(filter(lambda x: x.requires_grad, net.get_parameters()), 0.01, 0.9) ``` - ### Calling the High-level `Model` API To Train and Save the Model File After data preprocessing, network definition, and loss function and optimizer definition are complete, model training can be performed. Model training involves two iterations: multi-round iteration (`epoch`) of datasets and single-step iteration based on the batch size of datasets. The single-step iteration refers to extracting data from a dataset by `batch`, inputting the data to a network to calculate a loss function, and then calculating and updating a gradient of training parameters by using an optimizer. @@ -210,8 +204,6 @@ res = model.eval(eval_dataset) print("result: ", res) ``` - - ## References -[1] https://www.cs.toronto.edu/~kriz/cifar.html +[1] diff --git a/tutorials/training/source_en/advanced_use/cv_resnet50_second_order_optimizer.md b/tutorials/training/source_en/advanced_use/cv_resnet50_second_order_optimizer.md index b91878138c..8f2919d643 100644 --- a/tutorials/training/source_en/advanced_use/cv_resnet50_second_order_optimizer.md +++ b/tutorials/training/source_en/advanced_use/cv_resnet50_second_order_optimizer.md @@ -37,7 +37,6 @@ Common optimization algorithms are classified into the first-order and the secon Based on the existing natural gradient algorithm, MindSpore development team uses optimized acceleration methods such as approximation and sharding for the FIM, greatly reducing the computation complexity of the inverse matrix and developing the available second-order optimizer THOR. With eight Ascend 910 AI processors, THOR can complete the training of ResNet-50 v1.5 network and ImageNet dataset within 72 minutes, which is nearly twice the speed of SGD+Momentum. - This tutorial describes how to use the second-order optimizer THOR provided by MindSpore to train the ResNet-50 v1.5 network and ImageNet dataset on Ascend 910 and GPU. > Download address of the complete code example: @@ -47,12 +46,12 @@ Directory Structure of Code Examples ```shell ├── resnet_thor ├── README.md - ├── scripts + ├── scripts ├── run_distribute_train.sh # launch distributed training for Ascend 910 └── run_eval.sh # launch inference for Ascend 910 ├── run_distribute_train_gpu.sh # launch distributed training for GPU └── run_eval_gpu.sh # launch inference for GPU - ├── src + ├── src ├── crossentropy.py # CrossEntropy loss function ├── config.py # parameter configuration ├── dataset_helper.py # dataset helper for minddata dataset @@ -61,20 +60,19 @@ Directory Structure of Code Examples ├── resnet_thor.py # resnet50_thor backone ├── thor.py # thor optimizer ├── thor_layer.py # thor layer - └── dataset.py # data preprocessing + └── dataset.py # data preprocessing ├── eval.py # infer script └── train.py # train script - ``` The overall execution process is as follows: + 1. Prepare the ImageNet dataset and process the required dataset. 2. Define the ResNet-50 network. 3. Define the loss function and the optimizer THOR. 4. Load the dataset and perform training. After the training is complete, check the result and save the model file. 5. Load the saved model for inference. - ## Preparation Ensure that MindSpore has been correctly installed. If not, install it by referring to [Install](https://www.mindspore.cn/install/en). @@ -85,7 +83,7 @@ Download the complete ImageNet2012 dataset, decompress the dataset, and save it The directory structure is as follows: -``` +```text └─ImageNet2012 ├─ilsvrc │ n03676483 @@ -97,19 +95,22 @@ The directory structure is as follows: │ n02504013 │ n07871810 │ ...... - ``` + ### Configuring Distributed Environment Variables + #### Ascend 910 + For details about how to configure the distributed environment variables of Ascend 910 AI processors, see [Parallel Distributed Training (Ascend)](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/distributed_training_ascend.html#configuring-distributed-environment-variables). #### GPU -For details about how to configure the distributed environment of GPUs, see [Parallel Distributed Training (GPU)](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/distributed_training_gpu.html#configuring-distributed-environment-variables). +For details about how to configure the distributed environment of GPUs, see [Parallel Distributed Training (GPU)](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/distributed_training_gpu.html#configuring-distributed-environment-variables). ## Loading the Dataset During distributed training, load the dataset in parallel mode and process it through the data argumentation API provided by MindSpore. The `src/dataset.py` script in the source code is for loading and processing the dataset. + ```python import os import mindspore.common.dtype as mstype @@ -165,17 +166,18 @@ def create_dataset(dataset_path, do_train, repeat_num=1, batch_size=32, target=" > MindSpore supports multiple data processing and augmentation operations, which are usually combined. For details, see [Data Processing](https://www.mindspore.cn/tutorial/training/en/master/use/data_preparation.html). - ## Defining the Network + Use the ResNet-50 v1.5 network model as an example. Define the [ResNet-50 network](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/resnet/src/resnet.py), and replace the `Conv2d` and `Dense` operators with the operators customized by the second-order optimizer. The defined network model stores in the `src/resnet_thor.py` script in the source code, and the customized operators `Conv2d_thor` and `Dense_thor` store in the `src/thor_layer.py` script. -- Use `Conv2d_thor` to replace `Conv2d` in the original network model. -- Use `Dense_thor` to replace `Dense` in the original network model. +- Use `Conv2d_thor` to replace `Conv2d` in the original network model. +- Use `Dense_thor` to replace `Dense` in the original network model. > The `Conv2d_thor` and `Dense_thor` operators customized by THOR are used to save the second-order matrix information in model training. The backbone of the newly defined network is the same as that of the original network model. After the network is built, call the defined ResNet-50 in the `__main__` function. + ```python ... from src.resnet_thor import resnet50 @@ -188,15 +190,14 @@ if __name__ == "__main__": ... ``` - ## Defining the Loss Function and Optimizer THOR - ### Defining the Loss Function Loss functions supported by MindSpore include `SoftmaxCrossEntropyWithLogits`, `L1Loss`, and `MSELoss`. The `SoftmaxCrossEntropyWithLogits` loss function is required by THOR. The implementation procedure of the loss function is in the `src/crossentropy.py` script. A common trick in deep network model training, label smoothing, is used to improve the model tolerance to error label classification by smoothing real labels, thereby improving the model generalization capability. + ```python class CrossEntropy(_Loss): """CrossEntropy""" @@ -214,6 +215,7 @@ class CrossEntropy(_Loss): loss = self.mean(loss, 0) return loss ``` + Call the defined loss function in the `__main__` function. ```python @@ -236,6 +238,7 @@ The parameter update formula of THOR is as follows: $$ \theta^{t+1} = \theta^t + \alpha F^{-1}\nabla E$$ The meanings of parameters in the formula are as follows: + - $\theta$: trainable parameters on the network - $t$: number of training steps - $\alpha$: learning rate, which is the parameter update value per step @@ -296,7 +299,6 @@ if __name__ == "__main__": Use the `model.train` API provided by MindSpore to easily train the network. THOR reduces the computation workload and improves the computation speed by reducing the frequency of updating the second-order matrix. Therefore, the Model_Thor class is redefined to inherit the Model class provided by MindSpore. The parameter for controlling the frequency of updating the second-order matrix is added to the Model_Thor class. You can adjust this parameter to optimize the overall performance. - ```python ... from mindspore.train.loss_scale_manager import FixedLossScaleManager @@ -316,15 +318,21 @@ if __name__ == "__main__": ``` ### Running the Script + After the training script is defined, call the shell script in the `scripts` directory to start the distributed training process. + #### Ascend 910 + Currently, MindSpore distributed execution on Ascend uses the single-device single-process running mode. That is, one process runs on a device, and the number of total processes is the same as the number of devices that are being used. For device 0, the corresponding process is executed in the foreground. For other devices, the corresponding processes are executed in the background. Create a directory named `train_parallel`+`device_id` for each process to store log information, operator compilation information, and training checkpoint files. The following takes the distributed training script for eight devices as an example to describe how to run the script: Run the script. -``` + +```bash sh run_distribute_train.sh [RANK_TABLE_FILE] [DATASET_PATH] [DEVICE_NUM] ``` + Variables `RANK_TABLE_FILE`, `DATASET_PATH`, and `DEVICE_NUM` need to be transferred to the script. The meanings of variables are as follows: + - `RANK_TABLE_FILE`: path for storing the networking information file - `DATASET_PATH`: training dataset path - `DEVICE_NUM`: the actual number of running devices. @@ -361,17 +369,22 @@ In the preceding information, `*.ckpt` indicates the saved model parameter file. The name of a checkpoint file is in the following format: *Network name*-*Number of epochs*_*Number of steps*.ckpt. #### GPU + On the GPU hardware platform, MindSpore uses `mpirun` of OpenMPI to perform distributed training. The process creates a directory named `train_parallel` to store log information and training checkpoint files. The following takes the distributed training script for eight devices as an example to describe how to run the script: -``` + +```bash sh run_distribute_train_gpu.sh [DATASET_PATH] [DEVICE_NUM] ``` + Variables `DATASET_PATH` and `DEVICE_NUM` need to be transferred to the script. The meanings of variables are as follows: + - `DATASET_PATH`: training dataset path - `DEVICE_NUM`: the actual number of running devices During GPU-based training, the `DEVICE_ID` environment variable is not required. Therefore, you do not need to call `int(os.getenv('DEVICE_ID'))` in the main training script to obtain the device ID or transfer `device_id` to `context`. You need to set `device_target` to `GPU` and call `init()` to enable the NCCL. The following is an example of loss values output during training: + ```bash ... epoch: 1 step: 5004, loss is 4.2546034 @@ -391,7 +404,7 @@ The following is an example of model files saved after training: ├─ckpt_0 ├─resnet-1_5004.ckpt ├─resnet-2_5004.ckpt - │ ...... + │ ...... ├─resnet-36_5004.ckpt │ ...... ...... @@ -435,40 +448,54 @@ if __name__ == "__main__": # define model model = Model(net, loss_fn=loss, metrics={'top_1_accuracy', 'top_5_accuracy'}) - + # eval model res = model.eval(dataset) print("result:", res, "ckpt=", args_opt.checkpoint_path) ``` ### Inference + After the inference network is defined, the shell script in the `scripts` directory is called for inference. + #### Ascend 910 + On the Ascend 910 hardware platform, run the following inference command: -``` + +```bash sh run_eval.sh [DATASET_PATH] [CHECKPOINT_PATH] ``` + Variables `DATASET_PATH` and `CHECKPOINT_PATH` need to be transferred to the script. The meanings of variables are as follows: + - `DATASET_PATH`: inference dataset path - `CHECKPOINT_PATH`: path for storing the checkpoint file Currently, a single device (device 0 by default) is used for inference. The inference result is as follows: -``` + +```text result: {'top_5_accuracy': 0.9295574583866837, 'top_1_accuracy': 0.761443661971831} ckpt=train_parallel0/resnet-42_5004.ckpt ``` + - `top_5_accuracy`: For an input image, if the labels whose prediction probability ranks top 5 contain actual labels, the classification is correct. -- `top_1_accuracy`: For an input image, if the label with the highest prediction probability is the same as the actual label, the classification is correct. +- `top_1_accuracy`: For an input image, if the label with the highest prediction probability is the same as the actual label, the +classification is correct. + #### GPU On the GPU hardware platform, run the following inference command: -``` + +```bash sh run_eval_gpu.sh [DATASET_PATH] [CHECKPOINT_PATH] ``` + Variables `DATASET_PATH` and `CHECKPOINT_PATH` need to be transferred to the script. The meanings of variables are as follows: + - `DATASET_PATH`: inference dataset path - `CHECKPOINT_PATH`: path for storing the checkpoint file The inference result is as follows: -``` + +```text result: {'top_5_accuracy': 0.9287972151088348, 'top_1_accuracy': 0.7597031049935979} ckpt=train_parallel/resnet-36_5004.ckpt -``` \ No newline at end of file +``` diff --git a/tutorials/training/source_en/advanced_use/dashboard.md b/tutorials/training/source_en/advanced_use/dashboard.md index 739e117a16..c2709a946a 100644 --- a/tutorials/training/source_en/advanced_use/dashboard.md +++ b/tutorials/training/source_en/advanced_use/dashboard.md @@ -170,7 +170,6 @@ Figure 13 shows tensors recorded by a user in a form of a histogram. Click the u ## Notices - 1. Currently MindSpore supports recording computational graph after operator fusion for Ascend 910 AI processor only. 2. When using the Summary operator to collect data in training, 'HistogramSummary' operator will affect performance, so please use as few as possible. @@ -196,6 +195,6 @@ Figure 13 shows tensors recorded by a user in a form of a histogram. Click the u Remarks: The method of estimating the space usage of `TensorSummary` is as follows: - The size of a `TensorSummary` data = the number of values in the tensor * 4 bytes. Assuming that the size of the tensor recorded by `TensorSummary` is 32 * 1 * 256 * 256, then a `TensorSummary` data needs about 32 * 1 * 256 * 256 * 4 bytes = 8,388,608 bytes = 8MiB. `TensorSummary` will record data of 20 steps by default. Then the required space when recording these 20 sets of data is about 20 * 8 MiB = 160MiB. It should be noted that due to the overhead of data structure and other factors, the actual storage space used will be slightly larger than 160MiB. + The size of a `TensorSummary` data = the number of values in the tensor \* 4 bytes. Assuming that the size of the tensor recorded by `TensorSummary` is 32 \* 1 \* 256 \* 256, then a `TensorSummary` data needs about 32 \* 1 \* 256 \* 256 \* 4 bytes = 8,388,608 bytes = 8MiB. `TensorSummary` will record data of 20 steps by default. Then the required space when recording these 20 sets of data is about 20 * 8 MiB = 160MiB. It should be noted that due to the overhead of data structure and other factors, the actual storage space used will be slightly larger than 160MiB. -6. The training log file is large when using `TensorSummary` because the complete tensor data is recorded. MindInsight needs more time to parse the training log file, please be patient. \ No newline at end of file +6. The training log file is large when using `TensorSummary` because the complete tensor data is recorded. MindInsight needs more time to parse the training log file, please be patient. diff --git a/tutorials/training/source_en/advanced_use/debug_in_pynative_mode.md b/tutorials/training/source_en/advanced_use/debug_in_pynative_mode.md index c705b21fc8..063c565e79 100644 --- a/tutorials/training/source_en/advanced_use/debug_in_pynative_mode.md +++ b/tutorials/training/source_en/advanced_use/debug_in_pynative_mode.md @@ -26,7 +26,7 @@ By default, MindSpore is in PyNative mode. You can switch it to the graph mode b In PyNative mode, single operators, common functions, network inference, and separated gradient calculation can be executed. The following describes the usage and precautions. -> In PyNative mode, operators are executed asynchronously on the device to improve performance. Therefore, when an error occurs during operator excution, the error information may be displayed after the program is executed. +> In PyNative mode, operators are executed asynchronously on the device to improve performance. Therefore, when an error occurs during operator excution, the error information may be displayed after the program is executed. ## Executing a Single Operator @@ -73,12 +73,12 @@ Output: [ 0.05016355 0.03958241 0.03958241 0.03958241 0.03443141]]]] ``` - ## Executing a Common Function Combine multiple operators into a function, call the function to execute the operators, and output the result, as shown in the following example: -**Example Code** +**Example Code:** + ```python import numpy as np from mindspore import context, Tensor @@ -97,9 +97,9 @@ output = tensor_add_func(x, y) print(output.asnumpy()) ``` -**Output** +**Output:** -```python +```text [[3. 3. 3.] [3. 3. 3.] [3. 3. 3.]] @@ -107,7 +107,6 @@ print(output.asnumpy()) > Parallel execution and summary are not supported in PyNative mode, so parallel and summary related operators cannot be used. - ### Improving PyNative Performance MindSpore provides the Staging function to improve the execution speed of inference tasks in PyNative mode. This function compiles Python functions or Python class methods into computational graphs in PyNative mode and improves the execution speed by using graph optimization technologies, as shown in the following example: @@ -140,9 +139,10 @@ tensor_add = P.TensorAdd() res = tensor_add(x, z) # PyNative mode print(res.asnumpy()) ``` -**Output** -```python +**Output:** + +```text [[3. 3. 3. 3.] [3. 3. 3. 3.] [3. 3. 3. 3.] @@ -153,7 +153,7 @@ In the preceding code, the `ms_function` decorator is added before `construct` o It should be noted that, in a function to which the `ms_function` decorator is added, if an operator (such as `pooling` or `tensor_add`) that does not need parameter training is included, the operator can be directly called in the decorated function, as shown in the following example: -**Example Code** +**Example Code:** ```python import numpy as np @@ -176,9 +176,10 @@ y = Tensor(np.ones([4, 4]).astype(np.float32)) z = tensor_add_fn(x, y) print(z.asnumpy()) ``` -**Output** -```shell +**Output:** + +```text [[2. 2. 2. 2.] [2. 2. 2. 2.] [2. 2. 2. 2.] @@ -187,7 +188,7 @@ print(z.asnumpy()) If the decorated function contains operators (such as `Convolution` and `BatchNorm`) that require parameter training, these operators must be instantiated before the decorated function is called, as shown in the following example: -**Example Code** +**Example Code:** ```python import numpy as np @@ -209,9 +210,9 @@ z = conv_fn(Tensor(input_data)) print(z.asnumpy()) ``` -**Output** +**Output:** -```shell +```text [[[[ 0.10377571 -0.0182163 -0.05221086] [ 0.1428334 -0.01216263 0.03171652] [-0.00673915 -0.01216291 0.02872104]] @@ -245,12 +246,11 @@ print(z.asnumpy()) [ 0.0377498 -0.06117418 0.00546303]]]] ``` - ## Debugging Network Train Model In PyNative mode, the gradient can be calculated separately. As shown in the following example, `GradOperation` is used to calculate all input gradients of the function or the network. Note that the inputs have to be Tensor. -**Example Code** +**Example Code:** ```python from mindspore.ops import composite as C @@ -267,15 +267,15 @@ def mainf(x, y): print(mainf(Tensor(1, mstype.int32), Tensor(2, mstype.int32))) ``` -**Output** +**Output:** -```python +```text (2, 1) ``` During network training, obtain the gradient, call the optimizer to optimize parameters (the breakpoint cannot be set during the reverse gradient calculation), and calculate the loss values. Then, network training is implemented in PyNative mode. -**Complete LeNet Sample Code** +**Complete LeNet Sample Code:** ```python import numpy as np @@ -312,7 +312,7 @@ class LeNet5(nn.Cell): Lenet network Args: num_class (int): Num classes. Default: 10. - + Returns: Tensor, output tensor @@ -346,8 +346,8 @@ class LeNet5(nn.Cell): x = self.relu(x) x = self.fc3(x) return x - - + + class GradWrap(nn.Cell): """ GradWrap definition """ def __init__(self, network): @@ -376,9 +376,9 @@ loss = loss_output.asnumpy() print(loss) ``` -**Output** +**Output:** -```python +```text 2.3050091 ``` diff --git a/tutorials/training/source_en/advanced_use/debugger.md b/tutorials/training/source_en/advanced_use/debugger.md index 13528eb1f1..2000412df4 100644 --- a/tutorials/training/source_en/advanced_use/debugger.md +++ b/tutorials/training/source_en/advanced_use/debugger.md @@ -29,19 +29,19 @@ In `Graph Mode` training, the computation results of intermediate nodes in the c - Visualize the computational graph on the UI and analyze the output of the graph node; - Set a conditional breakpoint to monitor training exceptions (such as INF), if the condition is met, users can track the cause of the bug when an exception occurs; -- Visualize and analyze the change of parameters, such as weights. +- Visualize and analyze the change of parameters, such as weights. ## Operation Process - Launch MindInsight in debugger mode, and set Debugger environment variables for the training; - At the beginning of the training, set conditional breakpoints; -- Analyze the training progress on MindInsight Debugger UI. +- Analyze the training progress on MindInsight Debugger UI. ## Debugger Environment Preparation At first, install MindInsight and launch it in debugger mode. MindSpore will send training information to MindInsight Debugger Server in debugger mode, users can analyze the information on MindInsight UI. -The command to launch MindInsight in debugger mode is as follows: +The command to launch MindInsight in debugger mode is as follows: ```shell mindinsight start --port {PORT} --enable-debugger True --debugger-port {DEBUGGER_PORT} @@ -67,7 +67,7 @@ Besides, do not use dataset sink mode (Set the parameter `dataset_sink_mode` in ## Debugger UI Introduction -After the Debugger environment preparation, users can run the training script. +After the Debugger environment preparation, users can run the training script. Before the execution of the computational graph, the MindInsight Debugger UI will show the information of the optimized computational graph. The following are the Debugger UI components. @@ -103,22 +103,22 @@ Figure 2: The Graph Node Details When choosing one node on the graph, the details of this node will be displayed at the bottom. The `Tensor Value Overview` area will show the input nodes and the outputs of this node. The `Type`, `Shape` and `Value` of the `Tensor` can also be viewed. -For GPU environment, after selecting an executable node on the graph, right-click to select `Continue to` on this node, -which means running the training script to the selected node within one step. +For GPU environment, after selecting an executable node on the graph, right-click to select `Continue to` on this node, +which means running the training script to the selected node within one step. After left-click `Continue to`, the training script will be executed and paused after running to this node. ![debugger_tensor_value](./images/debugger_tensor_value.png) Figure 3: `Tensor` Value Visualization -Some outputs of the node contain too many dimensions. +Some outputs of the node contain too many dimensions. For these `Tensors`, users can click the `View` link and visualize the `Tensor` in the new panel, which is shown in Figure 3. ![debugger_tensor_compare](./images/debugger_tensor_compare.png) Figure 4: Previous Step Value Compare For Parameter Nodes -In addition, the output of the parameter nodes can be compared with their output in the previous step. +In addition, the output of the parameter nodes can be compared with their output in the previous step. Click the `Compare with Previous Step` button to enter the comparison interface, as shown in Figure 4. ### Conditional Breakpoint @@ -127,13 +127,14 @@ Click the `Compare with Previous Step` button to enter the comparison interface, Figure 5: Set Conditional Breakpoint (Watch Point) -In order to monitor the training and find out the bugs, users can set conditional breakpoints (called `Watch Point List` on UI) to analyze the outputs of the +In order to monitor the training and find out the bugs, users can set conditional breakpoints (called `Watch Point List` on UI) to analyze the outputs of the specified nodes automatically. Figure 5 displays how to set a `Watch Point`: + - At first, click the `+` button on the upper right corner, and then choose a watch condition; - Select the nodes to be watched in the `Node List`, tick the boxes in the front of the chosen nodes; - Click the `OK` button to add this `Watch Point`. -The outputs of the watched nodes will be checked by the corresponding conditions. Once the condition is satisfied, the training will pause, and users can analyze +The outputs of the watched nodes will be checked by the corresponding conditions. Once the condition is satisfied, the training will pause, and users can analyze the triggered `Watch Point List` on the Debugger UI. ![debugger_watch_point_hit](./images/debugger_watch_point_hit.png) @@ -146,7 +147,7 @@ Users can further trace the reason of the bug by analyzing the node details. ### Training Control -At the bottom of the watchpoint setting panel is the training control panel, which shows the training control functions of the debugger, +At the bottom of the watchpoint setting panel is the training control panel, which shows the training control functions of the debugger, with four buttons: `CONTINUE`, `PAUSE`, `TERMINATE` and `OK`: - `OK` stands for executing the training for several steps, the number of the `step` can be specified in the above bar. @@ -160,20 +161,20 @@ The training will be paused until the `Watch Point List` is triggered, or the nu 1. Prepare the debugger environment, and open the MindInsight Debugger UI. ![debugger_waiting](./images/debugger_waiting.png) - + Figure 7: Debugger Start and Waiting for the Training - + The Debugger server is launched and waiting for the training to connect. 2. Run the training script, after a while, the computational graph will be displayed on Debugger UI, as shown in Figure 1. 3. Set conditional breakpoints for the training, as shown in Figure 5. - + In Figure 5, the conditions are selected, and some nodes are watched, which means whether there is any output meeting the conditions in the training process of these nodes. After setting the conditional breakpoint, users can set steps in the control panel and click `OK` or `CONTINUE` to continue training. 4. The conditional breakpoints are triggered, as shown in Figure 6. - + When the conditional breakpoints are triggered, users can analyze the corresponding node details to find out the reason of the bug. ## Notices diff --git a/tutorials/training/source_en/advanced_use/distributed_training_ascend.md b/tutorials/training/source_en/advanced_use/distributed_training_ascend.md index 6e3bc78be0..085bbdca6c 100644 --- a/tutorials/training/source_en/advanced_use/distributed_training_ascend.md +++ b/tutorials/training/source_en/advanced_use/distributed_training_ascend.md @@ -70,6 +70,7 @@ The following uses the Ascend 910 AI processor as an example. The JSON configura "status": "completed" } ``` + The following parameters need to be modified based on the actual training environment: - `server_count`: number of hosts. @@ -78,11 +79,11 @@ The following parameters need to be modified based on the actual training enviro - `device_ip`: IP address of the integrated NIC. You can run the `cat /etc/hccn.conf` command on the current host. The key value of `address_x` is the IP address of the NIC. - `rank_id`: logical sequence number of a device, which starts from 0. - ### Calling the Collective Communication Library The Huawei Collective Communication Library (HCCL) is used for the communication of MindSpore parallel distributed training and can be found in the Ascend 310 AI processor software package. In addition, `mindspore.communication.management` encapsulates the collective communication API provided by the HCCL to help users configure distributed information. > HCCL implements multi-device multi-node communication based on the Ascend AI processor. The common restrictions on using the distributed service are as follows. For details, see the HCCL documentation. +> > - In a single-node system, a cluster of 1, 2, 4, or 8 devices is supported. In a multi-node system, a cluster of 8 x N devices is supported. > - Each host has four devices numbered 0 to 3 and four devices numbered 4 to 7 deployed on two different networks. During training of 2 or 4 devices, the devices must be connected and clusters cannot be created across networks. > - The server hardware architecture and operating system require the symmetrical multi-processing (SMP) mode. @@ -97,10 +98,11 @@ from mindspore.communication.management import init if __name__ == "__main__": context.set_context(mode=context.GRAPH_MODE, device_target="Ascend", device_id=int(os.environ["DEVICE_ID"])) init() - ... + ... ``` In the preceding code: + - `mode=context.GRAPH_MODE`: sets the running mode to graph mode for distributed training. (The PyNative mode does not support parallel running.) - `device_id`: physical sequence number of a device, that is, the actual sequence number of the device on the corresponding host. - `init`: enables HCCL communication and completes the distributed training initialization. @@ -109,7 +111,6 @@ In the preceding code: During distributed training, data is imported in data parallel mode. The following takes the CIFAR-10 dataset as an example to describe how to import the CIFAR-10 dataset in data parallel mode. `data_path` indicates the dataset path, which is also the path of the `cifar-10-batches-bin` folder. - ```python import mindspore.common.dtype as mstype import mindspore.dataset as ds @@ -122,12 +123,12 @@ def create_dataset(data_path, repeat_num=1, batch_size=32, rank_id=0, rank_size= resize_width = 224 rescale = 1.0 / 255.0 shift = 0.0 - + # get rank_id and rank_size rank_id = get_rank() rank_size = get_group_size() data_set = ds.Cifar10Dataset(data_path, num_shards=rank_size, shard_id=rank_id) - + # define map operations random_crop_op = vision.RandomCrop((32, 32), (4, 4, 4, 4)) random_horizontal_op = vision.RandomHorizontalFlip() @@ -155,7 +156,9 @@ def create_dataset(data_path, repeat_num=1, batch_size=32, rank_id=0, rank_size= return data_set ``` + Different from the single-node system, the multi-node system needs to transfer the `num_shards` and `shard_id` parameters to the dataset API. The two parameters correspond to the number of devices and logical sequence numbers of devices, respectively. You are advised to obtain the parameters through the HCCL API. + - `get_rank`: obtains the ID of the current device in the cluster. - `get_group_size`: obtains the number of devices. @@ -195,7 +198,7 @@ class SoftmaxCrossEntropyExpand(nn.Cell): self.sparse = sparse self.max = P.ReduceMax(keep_dims=True) self.sub = P.Sub() - + def construct(self, logit, label): logit_max = self.max(logit, -1) exp = self.exp(self.sub(logit, logit_max)) @@ -252,11 +255,14 @@ def test_train_cifar(epoch_size=10): model = Model(net, loss_fn=loss, optimizer=opt) model.train(epoch_size, dataset, callbacks=[loss_cb], dataset_sink_mode=True) ``` + In the preceding code: + - `dataset_sink_mode=True`: uses the dataset sink mode. That is, the training computing is sunk to the hardware platform for execution. - `LossMonitor`: returns the loss value through the callback function to monitor the loss function. ## Running the Script + After the script required for training is edited, run the corresponding command to call the script. Currently, MindSpore distributed execution uses the single-device single-process running mode. That is, one process runs on each device, and the number of total processes is the same as the number of devices that are being used. For device 0, the corresponding process is executed in the foreground. For other devices, the corresponding processes are executed in the background. You need to create a directory for each process to store log information and operator compilation information. The following takes the distributed training script for eight devices as an example to describe how to run the script: @@ -318,6 +324,7 @@ cd ../ The variables `DATA_PATH` and `RANK_SIZE` need to be transferred to the script, which indicate the path of the dataset and the number of devices, respectively. The necessary environment variables are as follows: + - `RANK_TABLE_FILE`: path for storing the networking information file. - `DEVICE_ID`: actual sequence number of the current device on the corresponding host. - `RANK_ID`: logical sequence number of the current device. @@ -327,7 +334,7 @@ The running time is about 5 minutes, which is mainly occupied by operator compil Log files are saved in the `device` directory. The `env.log` file records environment variable information. The `train.log` file records the loss function information. The following is an example: -``` +```text epoch: 1 step: 156, loss is 2.0084016 epoch: 2 step: 156, loss is 1.6407638 epoch: 3 step: 156, loss is 1.6164391 @@ -417,7 +424,7 @@ strategy = ((1, 1), (1, 8)) net = DataParallelNet(strategy=strategy) # reset parallel mode context.reset_auto_parallel_context() -# set parallel mode, data parallel mode is selected for training and model saving. If you want to choose auto parallel +# set parallel mode, data parallel mode is selected for training and model saving. If you want to choose auto parallel # mode, you can simply change the value of parallel_mode parameter to ParallelMode.AUTO_PARALLEL. context.set_auto_parallel_context(parallel_mode=ParallelMode.DATA_PARALLEL, device_num=8) ``` @@ -478,10 +485,10 @@ strategy = ((1, 1), (1, 8)) net = SemiAutoParallelNet(strategy=strategy, strategy2=strategy) # reset parallel mode context.reset_auto_parallel_context() -# set parallel mode, data parallel mode is selected for training and model saving. If you want to choose auto parallel +# set parallel mode, data parallel mode is selected for training and model saving. If you want to choose auto parallel # mode, you can simply change the value of parallel_mode parameter to ParallelMode.AUTO_PARALLEL. context.set_auto_parallel_context(parallel_mode=ParallelMode.SEMI_AUTO_PARALLEL, - strategy_ckpt_save_file='./rank_{}_ckpt/strategy.txt'.format(get_rank)) + strategy_ckpt_save_file='./rank_{}_ckpt/strategy.txt'.format(get_rank)) ``` Then set the checkpoint saving policy, optimizer and loss function as required. The code is as follows: @@ -510,12 +517,14 @@ For the three parallel training modes described above, the checkpoint file is sa Only by changing the code that sets the checkpoint saving policy, the checkpoint file of each card can be saved on itself. The specific changes are as follows: Change the checkpoint configuration policy from: + ```python # config checkpoint ckpt_config = CheckpointConfig(keep_checkpoint_max=1) ``` to: + ```python # config checkpoint ckpt_config = CheckpointConfig(keep_checkpoint_max=1, integrated_save=False) @@ -525,4 +534,4 @@ It should be noted that if users chooses this checkpoint saving policy, users ne ### Hybrid Parallel Mode -For model parameter saving and loading in Hybrid Parallel Mode, please refer to [Saving and Loading Model Parameters in the Hybrid Parallel Scenario](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/save_load_model_hybrid_parallel.html). \ No newline at end of file +For model parameter saving and loading in Hybrid Parallel Mode, please refer to [Saving and Loading Model Parameters in the Hybrid Parallel Scenario](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/save_load_model_hybrid_parallel.html). diff --git a/tutorials/training/source_en/advanced_use/distributed_training_gpu.md b/tutorials/training/source_en/advanced_use/distributed_training_gpu.md index 49bd34a74a..69d9e0fcc2 100644 --- a/tutorials/training/source_en/advanced_use/distributed_training_gpu.md +++ b/tutorials/training/source_en/advanced_use/distributed_training_gpu.md @@ -1,6 +1,6 @@ # Distributed Parallel Training (GPU) -`Linux` `GPU` `Model Training` `Intermediate` `Expert` +`Linux` `GPU` `Model Training` `Intermediate` `Expert` @@ -70,7 +70,7 @@ from mindspore.communication.management import init if __name__ == "__main__": context.set_context(mode=context.GRAPH_MODE, device_target="GPU") init("nccl") - ... + ... ``` In the preceding information, @@ -110,7 +110,7 @@ mpirun -n 8 pytest -s -v ./resnet50_distributed_training.py > train.log 2>&1 & The script requires the variable `DATA_PATH`, which indicates the path of the dataset. In addition, you need to modify the `resnet50_distributed_training.py` file. Since the `DEVICE_ID` environment variable does not need to be set on the GPU, you do not need to call `int(os.getenv('DEVICE_ID'))` in the script to obtain the physical sequence number of the device, and `context` does not require `device_id`. You need to set `device_target` to `GPU` and call `init("nccl")` to enable the NCCL. The log file is saved in the device directory, and the loss result is saved in train.log. The output loss values of the grep command are as follows: -``` +```text epoch: 1 step: 1, loss is 2.3025854 epoch: 1 step: 1, loss is 2.3025854 epoch: 1 step: 1, loss is 2.3025854 @@ -124,6 +124,7 @@ epoch: 1 step: 1, loss is 2.3025854 ## Running the Multi-Host Script If multiple hosts are involved in the training, you need to set the multi-host configuration in the `mpirun` command. You can use the `-H` option in the `mpirun` command. For example, `mpirun -n 16 -H DEVICE1_IP:8,DEVICE2_IP:8 python hello.py` indicates that eight processes are started on the host whose IP addresses are DEVICE1_IP and DEVICE2_IP, respectively. Alternatively, you can create a hostfile similar to the following and transfer its path to the `--hostfile` option of `mpirun`. Each line in the hostfile is in the format of `[hostname] slots=[slotnum]`, where hostname can be an IP address or a host name. + ```bash DEVICE1 slots=8 DEVICE2 slots=8 diff --git a/tutorials/training/source_en/advanced_use/enable_graph_kernel_fusion.md b/tutorials/training/source_en/advanced_use/enable_graph_kernel_fusion.md index 6ef3b5c375..c18de80d68 100644 --- a/tutorials/training/source_en/advanced_use/enable_graph_kernel_fusion.md +++ b/tutorials/training/source_en/advanced_use/enable_graph_kernel_fusion.md @@ -100,7 +100,6 @@ context.set_context(enable_graph_kernel=True) 2. `BERT-large` training network Take the training model of the `BERT-large` network as an example. For details about the dataset and training script, see . You only need to modify the `context` parameter. - ## Effect Evaluation diff --git a/tutorials/training/source_en/advanced_use/enable_mixed_precision.md b/tutorials/training/source_en/advanced_use/enable_mixed_precision.md index 8a031c231e..1ca25936cb 100644 --- a/tutorials/training/source_en/advanced_use/enable_mixed_precision.md +++ b/tutorials/training/source_en/advanced_use/enable_mixed_precision.md @@ -16,7 +16,7 @@ ## Overview -The mixed precision training method accelerates the deep learning neural network training process by using both the single-precision and half-precision data formats, and maintains the network precision achieved by the single-precision training at the same time. +The mixed precision training method accelerates the deep learning neural network training process by using both the single-precision and half-precision data formats, and maintains the network precision achieved by the single-precision training at the same time. Mixed precision training can accelerate the computation process, reduce memory usage, and enable a larger model or batch size to be trained on specific hardware. For FP16 operators, if the input data type is FP32, the backend of MindSpore will automatically handle it with reduced precision. Users could check the reduced-precision operators by enabling INFO log and then searching 'reduce precision'. @@ -42,6 +42,7 @@ This document describes the computation process by using examples of automatic a To use the automatic mixed precision, you need to invoke the corresponding API, which takes the network to be trained and the optimizer as the input. This API converts the operators of the entire network into FP16 operators (except the `BatchNorm` and Loss operators). You can use automatic mixed precision through API `amp` or API `Model`. The procedure of using automatic mixed precision by API `amp` is as follows: + 1. Introduce the MindSpore mixed precision API `amp`. 2. Define the network. This step is the same as the common network definition. (You do not need to manually configure the precision of any specific operator.) @@ -93,6 +94,7 @@ output = train_network(predict, label) ``` The procedure of using automatic mixed precision by API `Model` is as follows: + 1. Introduce the MindSpore model API `Model`. 2. Define the network. This step is the same as the common network definition. (You do not need to manually configure the precision of any specific operator.) @@ -169,7 +171,8 @@ model.train(epoch=10, train_dataset=ds_train) MindSpore also supports manual mixed precision. It is assumed that only one dense layer in the network needs to be calculated by using FP32, and other layers are calculated by using FP16. The mixed precision is configured in the granularity of cell. The default format of a cell is FP32. The following is the procedure for implementing manual mixed precision: -1. Define the network. This step is similar to step 2 in the automatic mixed precision. + +1. Define the network. This step is similar to step 2 in the automatic mixed precision. 2. Configure the mixed precision. Use `net.to_float(mstype.float16)` to set all operators of the cell and its sub-cells to FP16. Then, configure the dense to FP32. diff --git a/tutorials/training/source_en/advanced_use/evaluate_the_model_during_training.md b/tutorials/training/source_en/advanced_use/evaluate_the_model_during_training.md index d1bae7be1a..2b36b20bb6 100644 --- a/tutorials/training/source_en/advanced_use/evaluate_the_model_during_training.md +++ b/tutorials/training/source_en/advanced_use/evaluate_the_model_during_training.md @@ -20,6 +20,7 @@ For a complex network, epoch training usually needs to be performed for dozens or even hundreds of times. Before training, it is difficult to know when a model can achieve required accuracy in epoch training. Therefore, the accuracy of the model is usually validated at a fixed epoch interval in training and the corresponding model is saved. After the training is completed, you can quickly select the optimal model by viewing the change of the corresponding model accuracy. This section uses this method and takes the LeNet network as an example. The procedure is as follows: + 1. Define the callback function EvalCallBack to implement synchronous training and validation. 2. Define a training network and execute it. 3. Draw a line chart based on the model accuracy under different epochs and select the optimal model. @@ -52,7 +53,7 @@ class EvalCallBack(Callback): self.eval_dataset = eval_dataset self.eval_per_epoch = eval_per_epoch self.epoch_per_eval = epoch_per_eval - + def epoch_end(self, run_context): cb_param = run_context.original_args() cur_epoch = cb_param.cur_epoch_num @@ -90,51 +91,52 @@ if __name__ == "__main__": eval_per_epoch = 2 ... ... - + # need to calculate how many steps are in each epoch, in this example, 1875 steps per epoch. config_ck = CheckpointConfig(save_checkpoint_steps=eval_per_epoch*1875, keep_checkpoint_max=15) ckpoint_cb = ModelCheckpoint(prefix="checkpoint_lenet",directory=ckpt_save_dir, config=config_ck) model = Model(network, net_loss, net_opt, metrics={"Accuracy": Accuracy()}) - + epoch_per_eval = {"epoch": [], "acc": []} eval_cb = EvalCallBack(model, eval_data, eval_per_epoch, epoch_per_eval) - + model.train(epoch_size, train_data, callbacks=[ckpoint_cb, LossMonitor(375), eval_cb], dataset_sink_mode=True) ``` The output is as follows: - epoch: 1 step: 375, loss is 2.298612 - epoch: 1 step: 750, loss is 2.075152 - epoch: 1 step: 1125, loss is 0.39205977 - epoch: 1 step: 1500, loss is 0.12368304 - epoch: 1 step: 1875, loss is 0.20988345 - epoch: 2 step: 375, loss is 0.20582482 - epoch: 2 step: 750, loss is 0.029070046 - epoch: 2 step: 1125, loss is 0.041760832 - epoch: 2 step: 1500, loss is 0.067035824 - epoch: 2 step: 1875, loss is 0.0050643035 - {'Accuracy': 0.9763621794871795} - - ... ... - - epoch: 9 step: 375, loss is 0.021227183 - epoch: 9 step: 750, loss is 0.005586236 - epoch: 9 step: 1125, loss is 0.029125651 - epoch: 9 step: 1500, loss is 0.00045874066 - epoch: 9 step: 1875, loss is 0.023556218 - epoch: 10 step: 375, loss is 0.0005807788 - epoch: 10 step: 750, loss is 0.02574059 - epoch: 10 step: 1125, loss is 0.108463734 - epoch: 10 step: 1500, loss is 0.01950589 - epoch: 10 step: 1875, loss is 0.10563098 - {'Accuracy': 0.979667467948718} - +```text +epoch: 1 step: 375, loss is 2.298612 +epoch: 1 step: 750, loss is 2.075152 +epoch: 1 step: 1125, loss is 0.39205977 +epoch: 1 step: 1500, loss is 0.12368304 +epoch: 1 step: 1875, loss is 0.20988345 +epoch: 2 step: 375, loss is 0.20582482 +epoch: 2 step: 750, loss is 0.029070046 +epoch: 2 step: 1125, loss is 0.041760832 +epoch: 2 step: 1500, loss is 0.067035824 +epoch: 2 step: 1875, loss is 0.0050643035 +{'Accuracy': 0.9763621794871795} + +... ... + +epoch: 9 step: 375, loss is 0.021227183 +epoch: 9 step: 750, loss is 0.005586236 +epoch: 9 step: 1125, loss is 0.029125651 +epoch: 9 step: 1500, loss is 0.00045874066 +epoch: 9 step: 1875, loss is 0.023556218 +epoch: 10 step: 375, loss is 0.0005807788 +epoch: 10 step: 750, loss is 0.02574059 +epoch: 10 step: 1125, loss is 0.108463734 +epoch: 10 step: 1500, loss is 0.01950589 +epoch: 10 step: 1875, loss is 0.10563098 +{'Accuracy': 0.979667467948718} +``` Find the `lenet_ckpt` folder in the same directory. The folder contains five models and data related to a calculation graph. The structure is as follows: -``` +```text lenet_ckpt ├── checkpoint_lenet-10_1875.ckpt ├── checkpoint_lenet-2_1875.ckpt @@ -148,7 +150,6 @@ lenet_ckpt Define the drawing function `eval_show`, load `epoch_per_eval` to `eval_show`, and draw the model accuracy variation chart based on different `epoch`. - ```python import matplotlib.pyplot as plt @@ -166,7 +167,6 @@ The output is as follows: ![png](./images/evaluate_the_model_during_training.png) - You can easily select the optimal model based on the preceding figure. ## Summary diff --git a/tutorials/training/source_en/advanced_use/improve_model_security_nad.md b/tutorials/training/source_en/advanced_use/improve_model_security_nad.md index 7af1a43349..05e021edaa 100644 --- a/tutorials/training/source_en/advanced_use/improve_model_security_nad.md +++ b/tutorials/training/source_en/advanced_use/improve_model_security_nad.md @@ -33,6 +33,7 @@ This section describes how to use MindArmour in adversarial attack and defense b > The current sample is for CPU, GPU and Ascend 910 AI processor. You can find the complete executable sample code at > +> > - `mnist_attack_fgsm.py`: contains attack code. > - `mnist_defense_nad.py`: contains defense code. @@ -133,18 +134,18 @@ The LeNet model is used as an example. You can also create and train your own mo return nn.Conv2d(in_channels, out_channels, kernel_size=kernel_size, stride=stride, padding=padding, weight_init=weight, has_bias=False, pad_mode="valid") - - + + def fc_with_initialize(input_channels, out_channels): weight = weight_variable() bias = weight_variable() return nn.Dense(input_channels, out_channels, weight, bias) - - + + def weight_variable(): return TruncatedNormal(0.02) - - + + class LeNet5(nn.Cell): """ Lenet network @@ -159,7 +160,7 @@ The LeNet model is used as an example. You can also create and train your own mo self.relu = nn.ReLU() self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) self.flatten = nn.Flatten() - + def construct(self, x): x = self.conv1(x) x = self.relu(x) @@ -191,7 +192,7 @@ The LeNet model is used as an example. You can also create and train your own mo model = Model(net, loss, opt, metrics=None) model.train(10, ds_train, callbacks=[LossMonitor()], dataset_sink_mode=False) - + # get test data ds_test = generate_mnist_dataset(os.path.join(mnist_path, "test"), batch_size=batch_size, repeat_size=1, @@ -218,16 +219,16 @@ The LeNet model is used as an example. You can also create and train your own mo logits = net(Tensor(batch_inputs)).asnumpy() test_logits.append(logits) test_logits = np.concatenate(test_logits) - + tmp = np.argmax(test_logits, axis=1) == np.argmax(test_labels, axis=1) accuracy = np.mean(tmp) LOGGER.info(TAG, 'prediction accuracy before attacking is : %s', accuracy) - + ``` The classification accuracy reaches 98%. - - ```python + + ```python prediction accuracy before attacking is : 0.9895833333333334 ``` @@ -274,7 +275,7 @@ LOGGER.info(TAG, 'The average structural similarity between original ' The attack results are as follows: -``` +```text prediction accuracy after attacking is : 0.052083 mis-classification rate of adversaries is : 0.947917 The average confidence of adversarial class is : 0.803375 @@ -351,7 +352,7 @@ LOGGER.info(TAG, 'The average confidence of true class is : %s', ### Defense Effect -``` +```text accuracy of TEST data on defensed model is : 0.974259 accuracy of adv data on defensed model is : 0.856370 defense mis-classification rate of adversaries is : 0.143629 @@ -359,5 +360,4 @@ The average confidence of adversarial class is : 0.616670 The average confidence of true class is : 0.177374 ``` -After NAD is used to defend against adversarial examples, the model's misclassification ratio of adversarial examples decreases from 95% to 14%, effectively defending against adversarial examples. In addition, the classification accuracy of the model for the original test dataset reaches 97%. - +After NAD is used to defend against adversarial examples, the model's misclassification ratio of adversarial examples decreases from 95% to 14%, effectively defending against adversarial examples. In addition, the classification accuracy of the model for the original test dataset reaches 97%. diff --git a/tutorials/training/source_en/advanced_use/lineage_and_scalars_comparision.md b/tutorials/training/source_en/advanced_use/lineage_and_scalars_comparision.md index 68cfe7d1a6..7333770665 100644 --- a/tutorials/training/source_en/advanced_use/lineage_and_scalars_comparision.md +++ b/tutorials/training/source_en/advanced_use/lineage_and_scalars_comparision.md @@ -105,6 +105,7 @@ Figure 9 shows the scalars comparision function area, which allows you to view s ## Notices To ensure performance, MindInsight implements scalars comparision with the cache mechanism and the following restrictions: -- The scalars comparision supports only for trainings in cache. + +- The scalars comparision supports only for trainings in cache. - The maximum of 15 latest trainings (sorted by modification time) can be retained in the cache. - The maximum of 5 trainings can be selected for scalars comparision at the same time. diff --git a/tutorials/training/source_en/advanced_use/migrate_3rd_scripts.md b/tutorials/training/source_en/advanced_use/migrate_3rd_scripts.md index f84d41e413..140c2c5683 100644 --- a/tutorials/training/source_en/advanced_use/migrate_3rd_scripts.md +++ b/tutorials/training/source_en/advanced_use/migrate_3rd_scripts.md @@ -275,4 +275,3 @@ Models trained on the Ascend 910 AI processor can be used for inference on diffe ## Examples - [Model Zoo](https://gitee.com/mindspore/mindspore/tree/master/model_zoo) - diff --git a/tutorials/training/source_en/advanced_use/migrate_3rd_scripts_mindconverter.md b/tutorials/training/source_en/advanced_use/migrate_3rd_scripts_mindconverter.md index ce21f4c252..1bf17792d5 100644 --- a/tutorials/training/source_en/advanced_use/migrate_3rd_scripts_mindconverter.md +++ b/tutorials/training/source_en/advanced_use/migrate_3rd_scripts_mindconverter.md @@ -22,12 +22,10 @@ MindConverter is a migration tool to transform the model scripts from PyTorch to Mindspore. Users can migrate their PyTorch models to Mindspore rapidly with minor changes according to the conversion report. - ## Installation Mindconverter is a submodule in MindInsight. Please follow the [Guide](https://www.mindspore.cn/install/en) here to install MindInsight. - ## Usage MindConverter currently only provides command-line interface. Here is the manual page. @@ -71,7 +69,7 @@ optional arguments: > The AST mode will be enabled, if both `--in_file` and `--model_file` are specified. -For the Graph mode, `--shape` is mandatory. +For the Graph mode, `--shape` is mandatory. For the AST mode, `--shape` is ignored. @@ -80,11 +78,8 @@ For the AST mode, `--shape` is ignored. Please note that your original PyTorch project is included in the module search path (PYTHONPATH). Use the python interpreter and test your module can be successfully loaded by `import` command. Use `--project_path` instead if your project is not in the PYTHONPATH to ensure MindConverter can load it. > Assume the project is located at `/home/user/project/model_training`, users can use this command to add the project to `PYTHONPATH` : `export PYTHONPATH=/home/user/project/model_training:$PYTHONPATH` - > MindConverter needs the original PyTorch scripts because of the reverse serialization. - - ## Scenario MindConverter provides two modes for different migration demands. @@ -96,13 +91,12 @@ The AST mode is recommended for the first demand. It parses and analyzes PyTorch For the second demand, the Graph mode is recommended. As the computational graph is a standard descriptive language, it is not affected by user's coding style. This mode may have more operators converted as long as these operators are supported by MindConverter. -Some typical image classification networks such as ResNet and VGG have been tested for the Graph mode. Note that: +Some typical image classification networks such as ResNet and VGG have been tested for the Graph mode. Note that: > 1. Currently, the Graph mode does not support models with multiple inputs. Only models with a single input and single output are supported. > 2. The Dropout operator will be lost after conversion because the inference mode is used to load the PyTorch model. Manually re-implement is necessary. > 3. The Graph-based mode will be continuously developed and optimized with further updates. - ## Example ### AST-Based Conversion @@ -123,8 +117,8 @@ line : [UnConvert] 'operator' didn't convert. ... For non-transformed operators, the original code keeps. Please manually migrate them. [Click here](https://www.mindspore.cn/doc/note/en/master/index.html#operator_api) for more information about operator mapping. - Here is an example of the conversion report: + ```text [Start Convert] [Insert] 'import mindspore.ops.operations as P' is inserted to the converted file. @@ -137,7 +131,6 @@ Here is an example of the conversion report: For non-transformed operators, suggestions are provided in the report. For instance, MindConverter suggests that replace `torch.nn.AdaptiveAvgPool2d` with `mindspore.ops.operations.ReduceMean`. - ### Graph-Based Conversion Assume the PyTorch model (.pth file) is located at `/home/user/model.pth`, with input shape (3, 224, 224) and the original PyTorch script is at `/home/user/project/model_training`. Output the transformed MindSpore script to `/home/user/output`, with the conversion report to `/home/user/output/report`. Use the following command: @@ -194,12 +187,9 @@ class Classifier(nn.Cell): ``` -> `--output` and `--report` are optional. MindConverter creates an `output` folder under the current working directory, and outputs generated scripts and conversion reports to it. - +> `--output` and `--report` are optional. MindConverter creates an `output` folder under the current working directory, and outputs generated scripts and conversion reports to it. ## Caution 1. PyTorch is not an explicitly stated dependency library in MindInsight. The Graph conversion requires the consistent PyTorch version as the model is trained. (MindConverter recommends PyTorch 1.4.0 or 1.6.0) -2. This script conversion tool relies on operators which supported by MindConverter and MindSpore. Unsupported operators may not successfully mapped to MindSpore operators. You can manually edit, or implement the mapping based on MindConverter, and contribute to our MindInsight repository. We appreciate your support for the MindSpore community. - - +2. This script conversion tool relies on operators which supported by MindConverter and MindSpore. Unsupported operators may not successfully mapped to MindSpore operators. You can manually edit, or implement the mapping based on MindConverter, and contribute to our MindInsight repository. We appreciate your support for the MindSpore community. diff --git a/tutorials/training/source_en/advanced_use/nlp_sentimentnet.md b/tutorials/training/source_en/advanced_use/nlp_sentimentnet.md index a697aa0c93..e3dba0158c 100644 --- a/tutorials/training/source_en/advanced_use/nlp_sentimentnet.md +++ b/tutorials/training/source_en/advanced_use/nlp_sentimentnet.md @@ -47,6 +47,7 @@ Vertical polarity word = General polarity word + Domain-specific polarity word According to the text processing granularity, sentiment analysis can be divided into word, phrase, sentence, paragraph, and chapter levels. A sentiment analysis at paragraph level is used as an example. The input is a paragraph, and the output is information about whether the movie review is positive or negative. ## Preparation and Design + ### Downloading the Dataset The IMDb movie review dataset is used as experimental data. @@ -54,15 +55,17 @@ The IMDb movie review dataset is used as experimental data. The following are cases of negative and positive reviews. -| Review | Label | +| Review | Label | |---|---| | "Quitting" may be as much about exiting a pre-ordained identity as about drug withdrawal. As a rural guy coming to Beijing, class and success must have struck this young artist face on as an appeal to separate from his roots and far surpass his peasant parents' acting success. Troubles arise, however, when the new man is too new, when it demands too big a departure from family, history, nature, and personal identity. The ensuing splits, and confusion between the imaginary and the real and the dissonance between the ordinary and the heroic are the stuff of a gut check on the one hand or a complete escape from self on the other. | Negative | | This movie is amazing because the fact that the real people portray themselves and their real life experience and do such a good job it's like they're almost living the past over again. Jia Hongsheng plays himself an actor who quit everything except music and drugs struggling with depression and searching for the meaning of life while being angry at everyone especially the people who care for him most. | Positive | Download the GloVe file and add the following line at the beginning of the file, which means that a total of 400,000 words are read, and each word is represented by a word vector of 300 latitudes. -``` + +```text 400000 300 ``` + GloVe file download address: ### Determining Evaluation Criteria @@ -79,16 +82,17 @@ F1 score = (2 x Precision x Recall)/(Precision + Recall) In the IMDb dataset, the number of positive and negative samples does not vary greatly. Accuracy can be used as the evaluation criterion of the classification system. - ### Determining the Network and Process Currently, MindSpore GPU and CPU supports SentimentNet network based on the long short-term memory (LSTM) network for NLP. + 1. Load the dataset in use and process data if necessary. 2. Use the SentimentNet network based on LSTM to train data and generate a model. Long short-term memory (LSTM) is an artificial recurrent neural network (RNN) architecture used for processing and predicting an important event with a long interval and delay in a time sequence. For details, refer to online documentation. 3. After the model is obtained, use the validation dataset to check the accuracy of model. > The current sample is for the Ascend 910 AI processor. You can find the complete executable sample code at +> > - `src/config.py`: some configurations of the network, including the batch size and number of training epochs. > - `src/dataset.py`: dataset related definition, including converted MindRecord file and preprocessed data. > - `src/imdb.py`: the utility class for parsing IMDb dataset. @@ -97,8 +101,11 @@ Currently, MindSpore GPU and CPU supports SentimentNet network based on the long > - `eval.py`: the evaluation script. ## Implementation + ### Importing Library Files + The following are the required public modules and MindSpore modules and library files. + ```python import argparse import os @@ -118,6 +125,7 @@ from mindspore.train.serialization import load_param_into_net, load_checkpoint ### Configuring Environment Information 1. The `parser` module is used to transfer necessary information for running, such as storage paths of the dataset and the GloVe file. In this way, the frequently changed configurations can be entered during runtime, which is more flexible. + ```python parser = argparse.ArgumentParser(description='MindSpore LSTM Example') parser.add_argument('--preprocess', type=str, default='false', choices=['true', 'false'], @@ -138,13 +146,14 @@ from mindspore.train.serialization import load_param_into_net, load_checkpoint ``` 2. Before implementing code, configure necessary information, including the environment information, execution mode, backend information, and hardware information. - + ```python context.set_context( mode=context.GRAPH_MODE, save_graphs=False, device_target=args.device_target) ``` + For details about the API configuration, see the `context.set_context`. ### Preprocessing the Dataset @@ -156,15 +165,14 @@ if args.preprocess == "true": print("============== Starting Data Pre-processing ==============") convert_to_mindrecord(cfg.embed_size, args.aclimdb_path, args.preprocess_path, args.glove_path) ``` -> After successful conversion, `mindrecord` files are generated under the directory `preprocess_path`. Usually, this operation does not need to be performed every time if the dataset is unchanged. +> After successful conversion, `mindrecord` files are generated under the directory `preprocess_path`. Usually, this operation does not need to be performed every time if the dataset is unchanged. > For `convert_to_mindrecord`, you can find the complete definition at: - > It consists of two steps: +> >1. Process the text dataset, including encoding, word segmentation, alignment, and processing the original GloVe data to adapt to the network structure. >2. Convert the dataset format to the MindRecord format. - ### Defining the Network ```python @@ -178,11 +186,13 @@ network = SentimentNet(vocab_size=embedding_table.shape[0], weight=Tensor(embedding_table), batch_size=cfg.batch_size) ``` + > For `SentimentNet`, you can find the complete definition at: ### Pre-Training The parameter `pre_trained` specifies the preloading CheckPoint file for pre-training, which is empty by default + ```python if args.pre_trained: load_param_into_net(network, load_checkpoint(args.pre_trained)) @@ -217,6 +227,7 @@ else: model.train(cfg.num_epochs, ds_train, callbacks=[time_cb, ckpoint_cb, loss_cb]) print("============== Training Success ==============") ``` + > For `lstm_create_dataset`, you can find the complete definition at: ### Validating the Model @@ -238,12 +249,15 @@ print("============== {} ==============".format(acc)) ``` ## Experimental Result + After 20 epochs, the accuracy on the test set is about 84.19%. -**Training Execution** +**Training Execution:** + 1. Run the training code and view the running result. + ```shell - $ python train.py --preprocess=true --ckpt_path=./ --device_target=GPU + python train.py --preprocess=true --ckpt_path=./ --device_target=GPU ``` As shown in the following output, the loss value decreases gradually with the training process and reaches about 0.2855. @@ -263,11 +277,11 @@ After 20 epochs, the accuracy on the test set is about 84.19%. ``` 2. Check the saved CheckPoint files. - + CheckPoint files (model files) are saved during the training. You can view all saved files in the file path. ```shell - $ ls ./*.ckpt + ls ./*.ckpt ``` The output is as follows: @@ -276,12 +290,12 @@ After 20 epochs, the accuracy on the test set is about 84.19%. lstm-11_390.ckpt lstm-12_390.ckpt lstm-13_390.ckpt lstm-14_390.ckpt lstm-15_390.ckpt lstm-16_390.ckpt lstm-17_390.ckpt lstm-18_390.ckpt lstm-19_390.ckpt lstm-20_390.ckpt ``` -**Model Validation** +**Model Validation:** Use the last saved CheckPoint file to load and validate the dataset. ```shell -$ python eval.py --ckpt_path=./lstm-20_390.ckpt --device_target=GPU +python eval.py --ckpt_path=./lstm-20_390.ckpt --device_target=GPU ``` As shown in the following output, the sentiment analysis accuracy of the text is about 84.19%, which is basically satisfactory. @@ -290,4 +304,3 @@ As shown in the following output, the sentiment analysis accuracy of the text is ============== Starting Testing ============== ============== {'acc': 0.8419471153846154} ============== ``` - diff --git a/tutorials/training/source_en/advanced_use/optimize_data_processing.md b/tutorials/training/source_en/advanced_use/optimize_data_processing.md index dd973909e0..3feeee91b9 100644 --- a/tutorials/training/source_en/advanced_use/optimize_data_processing.md +++ b/tutorials/training/source_en/advanced_use/optimize_data_processing.md @@ -53,7 +53,7 @@ import numpy as np The directory structure is as follows: -``` +```text dataset/Cifar10Data ├── cifar-10-batches-bin │   ├── batches.meta.txt @@ -76,6 +76,7 @@ dataset/Cifar10Data ``` In the preceding information: + - The `cifar-10-batches-bin` directory is the directory for storing the CIFAR-10 dataset in binary format. - The `cifar-10-batches-py` directory is the directory for storing the CIFAR-10 dataset in Python file format. @@ -93,6 +94,7 @@ MindSpore provides multiple data loading methods, including common dataset loadi ![title](./images/data_loading_performance_scheme.png) Suggestions on data loading performance optimization are as follows: + - Built-in loading operators are preferred for supported dataset formats. For details, see [Built-in Loading Operators](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.dataset.html). If the performance cannot meet the requirements, use the multi-thread concurrency solution. For details, see [Multi-thread Optimization Solution](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/optimize_data_processing.html#multi-thread-optimization-solution). - For a dataset format that is not supported, convert the format to the MindSpore data format and then use the `MindDataset` class to load the dataset. If the performance cannot meet the requirements, use the multi-thread concurrency solution, for details, see [Multi-thread Optimization Solution](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/optimize_data_processing.html#multi-thread-optimization-solution). - For dataset formats that are not supported, the user-defined `GeneratorDataset` class is preferred for implementing fast algorithm verification. If the performance cannot meet the requirements, the multi-process concurrency solution can be used. For details, see [Multi-process Optimization Solution](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/optimize_data_processing.html#multi-process-optimization-solution). @@ -113,7 +115,8 @@ Based on the preceding suggestions of data loading performance optimization, the ``` The output is as follows: - ``` + + ```text {'image': Tensor(shape=[32, 32, 3], dtype=UInt8, value= [[[235, 235, 235], [230, 230, 230], @@ -148,7 +151,7 @@ Based on the preceding suggestions of data loading performance optimization, the The output is as follows: - ``` + ```text {'data': Tensor(shape=[1431], dtype=UInt8, value= [255, 216, 255, ..., 63, 255, 217]), 'id': Tensor(shape=[], dtype=Int64, value= 30474), 'label': Tensor(shape=[], dtype=Int64, value= 2)} @@ -169,7 +172,7 @@ Based on the preceding suggestions of data loading performance optimization, the The output is as follows: - ``` + ```text {'data': Tensor(shape=[1], dtype=Int64, value= [0])} ``` @@ -182,6 +185,7 @@ The shuffle operation is used to shuffle ordered datasets or repeated datasets. ![title](./images/shuffle_performance_scheme.png) Suggestions on shuffle performance optimization are as follows: + - Use the `shuffle` parameter of built-in loading operators to shuffle data. - If the `shuffle` function is used and the performance still cannot meet the requirements, adjust the value of the `buffer_size` parameter to improve the performance. @@ -202,7 +206,7 @@ Based on the preceding shuffle performance optimization suggestions, the `shuffl The output is as follows: - ``` + ```text {'image': Tensor(shape=[32, 32, 3], dtype=UInt8, value= [[[235, 235, 235], [230, 230, 230], @@ -237,7 +241,7 @@ Based on the preceding shuffle performance optimization suggestions, the `shuffl The output is as follows: - ``` + ```text before shuffle: [0 1 2 3 4] [1 2 3 4 5] @@ -255,6 +259,7 @@ Based on the preceding shuffle performance optimization suggestions, the `shuffl ## Optimizing the Data Augmentation Performance During image classification training, especially when the dataset is small, users can use data augmentation to preprocess images to enrich the dataset. MindSpore provides multiple data augmentation methods, including: + - Use the built-in C operator (`c_transforms` module) to perform data augmentation. - Use the built-in Python operator (`py_transforms` module) to perform data augmentation. - Users can define Python functions as needed to perform data augmentation. @@ -271,6 +276,7 @@ The performance varies according to the underlying implementation methods. ![title](./images/data_enhancement_performance_scheme.png) Suggestions on data augmentation performance optimization are as follows: + - The `c_transforms` module is preferentially used to perform data augmentation for its highest performance. If the performance cannot meet the requirements, refer to [Multi-thread Optimization Solution](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/optimize_data_processing.html#multi-thread-optimization-solution), [Compose Optimization Solution](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/optimize_data_processing.html#compose-optimization-solution), or [Operator Fusion Optimization Solution](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/optimize_data_processing.html#operator-fusion-optimization-solution). - If the `py_transforms` module is used to perform data augmentation and the performance still cannot meet the requirements, refer to [Multi-thread Optimization Solution](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/optimize_data_processing.html#multi-thread-optimization-solution), [Multi-process Optimization Solution](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/optimize_data_processing.html#multi-process-optimization-solution), [Compose Optimization Solution](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/optimize_data_processing.html#compose-optimization-solution), or [Operator Fusion Optimization Solution](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/optimize_data_processing.html#operator-fusion-optimization-solution). - The `c_transforms` module maintains buffer management in C++, and the `py_transforms` module maintains buffer management in Python. Because of the performance cost of switching between Python and C++, it is advised not to use different operator types together. @@ -324,7 +330,7 @@ Based on the preceding suggestions of data augmentation performance optimization The output is as follows: - ``` + ```text before map: [0 1 2 3 4] [1 2 3 4 5] @@ -392,6 +398,7 @@ Data processing is performed on the host. Therefore, configurations of the host ### Multi-thread Optimization Solution During the data pipeline process, the number of threads for related operators can be set to improve the concurrency and performance. For example: + - During data loading, the `num_parallel_workers` parameter in the built-in data loading class is used to set the number of threads. - During data augmentation, the `num_parallel_workers` parameter in the `map` function is used to set the number of threads. - During batch processing, the `num_parallel_workers` parameter in the `batch` function is used to set the number of threads. @@ -401,6 +408,7 @@ For details, see [Built-in Loading Operators](https://www.mindspore.cn/doc/api_p ### Multi-process Optimization Solution During data processing, operators implemented by Python support the multi-process mode. For example: + - By default, the `GeneratorDataset` class is in multi-process mode. The `num_parallel_workers` parameter indicates the number of enabled processes. The default value is 1. For details, see [GeneratorDataset](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.dataset.html#mindspore.dataset.GeneratorDataset). - If the user-defined Python function or the `py_transforms` module is used to perform data augmentation and the `python_multiprocessing` parameter of the `map` function is set to True, the `num_parallel_workers` parameter indicates the number of processes and the default value of the `python_multiprocessing` parameter is False. In this case, the `num_parallel_workers` parameter indicates the number of threads. For details, see [Built-in Loading Operators](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.dataset.html). diff --git a/tutorials/training/source_en/advanced_use/performance_profiling.md b/tutorials/training/source_en/advanced_use/performance_profiling.md index f18d59a6e7..e69d6daf16 100644 --- a/tutorials/training/source_en/advanced_use/performance_profiling.md +++ b/tutorials/training/source_en/advanced_use/performance_profiling.md @@ -22,6 +22,7 @@ ## Overview + Performance data like operator's execution time is recorded in files and can be viewed on the web page, this can help users optimize the performance of neural networks. ## Operation Process @@ -52,10 +53,10 @@ from mindspore import Model, nn, context def test_profiler(): # Init context env context.set_context(mode=context.GRAPH_MODE, device_target='Ascend', device_id=int(os.environ["DEVICE_ID"])) - + # Init Profiler profiler = Profiler() - + # Init hyperparameter epoch = 2 # Init network and Model @@ -67,17 +68,15 @@ def test_profiler(): train_ds = create_mindrecord_dataset_for_training() # Model Train model.train(epoch, train_ds) - + # Profiler end profiler.analyse() ``` - ## Launch MindInsight The MindInsight launch command can refer to [MindInsight Commands](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/mindinsight_commands.html). - ### Performance Analysis Users can access the Performance Profiler by selecting a specific training from the training list, and click the performance profiling link. @@ -87,6 +86,7 @@ Users can access the Performance Profiler by selecting a specific training from Figure 1: Overall Performance Figure 1 displays the overall performance of the training, including the overall data of Step Trace, Operator Performance, MindData Performance and Timeline. The data shown in these components include: + - Step Trace: It will divide the training steps into several stages and collect execution time for each stage. The overall performance page will show the step trace graph. - Operator Performance: It will collect the execution time of operators and operator types. The overall performance page will show the pie graph for different operator types. - MindData Performance: It will analyse the performance of the data input stages. The overall performance page will show the number of steps that may be the bottleneck for these stages. @@ -103,14 +103,14 @@ Step Gap (The time between the end of one step and the computation of next step) Figure 2: Step Trace Analysis -Figure 2 displays the Step Trace page. The Step Trace detail will show the start/finish time for each stage. By default, it shows the average time for all the steps. Users can also choose a specific step to see its step trace statistics. The graphs at the bottom of the page show the execution time of Step Gap, Forward/Backward Propagation and Step Tail (The time between the end of Backward Propagation and the end of Parameter Update) changes according to different steps, it will help to decide whether we can optimize the performance of some stages. +Figure 2 displays the Step Trace page. The Step Trace detail will show the start/finish time for each stage. By default, it shows the average time for all the steps. Users can also choose a specific step to see its step trace statistics. The graphs at the bottom of the page show the execution time of Step Gap, Forward/Backward Propagation and Step Tail (The time between the end of Backward Propagation and the end of Parameter Update) changes according to different steps, it will help to decide whether we can optimize the performance of some stages. In order to divide the stages, the Step Trace Component need to figure out the forward propagation start operator and the backward propagation end operator. MindSpore will automatically figure out the two operators to reduce the profiler configuration work. The first operator after `get_next` will be selected as the forward start operator and the operator before the last all reduce will be selected as the backward end operator. **However, Profiler do not guarantee that the automatically selected operators will meet the user's expectation in all cases.** Users can set the two operators manually as follows: + - Set environment variable `FP_POINT` to configure the forward start operator, for example, `export FP_POINT=fp32_vars/conv2d/BatchNorm`. - Set environment variable `BP_POINT` to configure the backward end operator, for example, `export BP_POINT=loss_scale/gradients/AddN_70`. - #### Operator Performance Analysis The operator performance analysis component is used to display the execution time of the operators during MindSpore run. @@ -120,7 +120,8 @@ The operator performance analysis component is used to display the execution tim Figure 3: Statistics for Operator Types Figure 3 displays the statistics for the operator types, including: -- Choose pie or bar graph to show the proportion time occupied by each operator type. The time of one operator type is calculated by accumulating the execution time of operators belonging to this type. + +- Choose pie or bar graph to show the proportion time occupied by each operator type. The time of one operator type is calculated by accumulating the execution time of operators belonging to this type. - Display top 20 operator types with the longest execution time, show the proportion and execution time (ms) of each operator type. ![op_statistics.png](./images/op_statistics.PNG) @@ -128,6 +129,7 @@ Figure 3 displays the statistics for the operator types, including: Figure 4: Statistics for Operators Figure 4 displays the statistics table for the operators, including: + - Choose All: Display statistics for the operators, including operator name, type, execution time, full scope time, information, etc. The table will be sorted by execution time by default. - Choose Type: Display statistics for the operator types, including operator type name, execution time, execution frequency and proportion of total time. Users can click on each line, querying for all the operators belonging to this type. - Search: There is a search box on the right, which can support fuzzy search for operators/operator types. @@ -135,7 +137,7 @@ Figure 4 displays the statistics table for the operators, including: #### MindData Performance Analysis The MindData performance analysis component is used to analyse the execution of data input pipeline for the training. The data input pipeline can be divided into three stages: -the data process pipeline, data transfer from host to device and data fetch on device. The component will analyse the performance of each stage in detail and display the results. +the data process pipeline, data transfer from host to device and data fetch on device. The component will analyse the performance of each stage in detail and display the results. ![minddata_profile.png](./images/minddata_profile.png) @@ -144,38 +146,44 @@ Figure 5: MindData Performance Analysis Figure 5 displays the page of MindData performance analysis component. It consists of two tabs: The step gap and the data process. The step gap page is used to analyse whether there is performance bottleneck in the three stages. We can get our conclusion from the data queue graphs: + - The data queue size stands for the queue length when the training fetches data from the queue on the device. If the data queue size is 0, the training will wait until there is data in the queue; If the data queue size is above 0, the training can get data very quickly, and it means MindData is not the bottleneck for this training step. - The host queue size can be used to infer the speed of data process and data transfer. If the host queue size is 0, it means we need to speed up the data process stage. -- If the size of the host queue is always large and the size of the data queue is continuously small, there may be a performance bottleneck in data transfer. +- If the size of the host queue is always large and the size of the data queue is continuously small, there may be a performance bottleneck in data transfer. ![data_op_profile.png](./images/data_op_profile.png) Figure 6: Data Process Pipeline Analysis Figure 6 displays the page of data process pipeline analysis. The data queues are used to exchange data between the MindData operators. The data size of the queues reflect the data consume speed of the operators, and can be used to infer the bottleneck operator. The queue usage percentage stands for the average value of data size in queue divide data queue maximum size, the higher the usage percentage, the more data that is accumulated in the queue. The graph at the bottom of the page shows the MindData pipeline operators with the data queues, the user can click one queue to see how the data size changes according to the time, and the operators connected to the queue. The data process pipeline can be analysed as follows: + - When the input queue usage percentage of one operator is high, and the output queue usage percentage is low, the operator may be the bottleneck. - For the leftmost operator, if the usage percentage of all the queues on the right are low, the operator may be the bottleneck. -- For the rightmost operator, if the usage percentage of all the queues on the left are high, the operator may be the bottleneck. +- For the rightmost operator, if the usage percentage of all the queues on the left are high, the operator may be the bottleneck. To optimize the perforamnce of MindData operators, there are some suggestions: + - If the Dataset Operator is the bottleneck, try to increase the `num_parallel_workers`. - If a GeneratorOp type operator is the bottleneck, try to increase the `num_parallel_workers` and replace the operator to `MindRecordDataset`. - If a MapOp type operator is the bottleneck, try to increase the `num_parallel_workers`. If it is a python operator, try to optimize the training script. -- If a BatchOp type operator is the bottleneck, try to adjust the size of `prefetch_size`. +- If a BatchOp type operator is the bottleneck, try to adjust the size of `prefetch_size`. #### Timeline Analysis -The Timeline component can display: +The Timeline component can display: + - The operators (AICore/AICPU operators) are executed on which device. - The MindSpore stream split strategy for this neural network. - The execution sequence and execution time of the operator on the device. Users can get the most detailed information from the Timeline: + - From the High level, users can analyse whether the stream split strategy can be optimized and whether the step tail is too long. - From the Low level, users can analyse the execution time for all the operators, etc. Users can click the download button on the overall performance page to view Timeline details. The Timeline data file (json format) will be stored on local machine, and can be displayed by tools. We suggest to use `chrome://tracing` or [Perfetto](https://ui.perfetto.dev/#!viewer) to visualize the Timeline. + - Chrome tracing: Click "load" on the upper left to load the file. - Perfetto: Click "Open trace file" on the left to load the file. @@ -184,8 +192,9 @@ Users can click the download button on the overall performance page to view Time Figure 7: Timeline Analysis The Timeline consists of the following parts: + - Device and Stream List: It will show the stream list on each device. Each stream consists of a series of tasks. One rectangle stands for one task, and the area stands for the execution time of the task. -- The Operator Information: When we click one task, the corresponding operator of this task will be shown at the bottom. +- The Operator Information: When we click one task, the corresponding operator of this task will be shown at the bottom. W/A/S/D can be applied to zoom in and out of the Timeline graph. diff --git a/tutorials/training/source_en/advanced_use/performance_profiling_gpu.md b/tutorials/training/source_en/advanced_use/performance_profiling_gpu.md index e989af7206..be91784497 100644 --- a/tutorials/training/source_en/advanced_use/performance_profiling_gpu.md +++ b/tutorials/training/source_en/advanced_use/performance_profiling_gpu.md @@ -18,6 +18,7 @@ ## Overview + Performance data like operators' execution time is recorded in files and can be viewed on the web page, this can help the user optimize the performance of neural networks. ## Operation Process @@ -25,9 +26,8 @@ Performance data like operators' execution time is recorded in files and can be > The GPU operation process is the same as that in the Ascend chip. > > - > By default, common users do not have the permission to access the NVIDIA GPU performance counters on the target device. -> If common users need to use the profiler performance statistics capability in the training script, configure the permission by referring to the following description: +> If common users need to use the profiler performance statistics capability in the training script, configure the permission by referring to the following description: > > @@ -48,7 +48,7 @@ class StopAtStep(Callback): self.start_step = start_step self.stop_step = stop_step self.already_analysed = False - + def step_begin(self, run_context): cb_params = run_context.original_args() step_num = cb_params.cur_step_num @@ -61,7 +61,7 @@ class StopAtStep(Callback): if step_num == self.stop_step and not self.already_analysed: self.profiler.analyse() self.already_analysed = True - + def end(self, run_context): if not self.already_analysed: self.profiler.analyse() @@ -73,7 +73,6 @@ The code above is just an example. Users should implement callback by themselves The MindInsight launch command can refer to [MindInsight Commands](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/mindinsight_commands.html). - ### Performance Analysis Users can access the Performance Profiler by selecting a specific training from the training list, and click the performance profiling link. And the Performance Profiler only supports operation analysis and Timeline Analysis now, the others modules will be published soon. @@ -83,6 +82,7 @@ Users can access the Performance Profiler by selecting a specific training from Figure 1: Overall Performance Figure 1 displays the overall performance of the training, including the overall data of Step Trace, Operator Performance, MindData Performance and Timeline: + - Operator Performance: It will collect the average execution time of operators and operator types. The overall performance page will show the pie graph for different operator types. - Timeline: It will collect execution time for operations and CUDA activity. The tasks will be shown on the time axis. The overall performance page will show the statistics for tasks. @@ -98,7 +98,7 @@ Figure 2: Statistics for Operator Types Figure 2 displays the statistics for the operator types, including: -- Choose a pie or a bar graph to show the proportion time occupied by each operator type. The time of one operator type is calculated by accumulating the execution time of operators belong to this type. +- Choose a pie or a bar graph to show the proportion time occupied by each operator type. The time of one operator type is calculated by accumulating the execution time of operators belong to this type. - Display top 20 operator types with the longest average execution time, show the proportion of total time and average execution time (ms) of each operator type. The bottom half of Figure 2 displays the statistics table for the operators' details, including: @@ -123,4 +123,4 @@ The usage is almost the same as that in Ascend. The difference is GPU Timeline d > The usage is described as follows: > -> \ No newline at end of file +> diff --git a/tutorials/training/source_en/advanced_use/protect_user_privacy_with_differential_privacy.md b/tutorials/training/source_en/advanced_use/protect_user_privacy_with_differential_privacy.md index 299f44d107..5653313d50 100644 --- a/tutorials/training/source_en/advanced_use/protect_user_privacy_with_differential_privacy.md +++ b/tutorials/training/source_en/advanced_use/protect_user_privacy_with_differential_privacy.md @@ -22,7 +22,7 @@ Differential privacy is a mechanism for protecting user data privacy. What is privacy? Privacy refers to the attributes of individual users. Common attributes shared by a group of users may not be considered as privacy. For example, if we say "smoking people have a higher probability of getting lung cancer", it does not disclose privacy. However, if we say "Zhang San smokes and gets lung cancer", it discloses the privacy of Zhang San. Assume that there are 100 patients in a hospital and 10 of them have lung cancer. If the information of any 99 patients are known, we can infer whether the remaining one has lung cancer. This behavior of stealing privacy is called differential attack. Differential privacy is a method for preventing differential attacks. By adding noise, the query results of two datasets with only one different record are nearly indistinguishable. In the above example, after differential privacy is used, the statistic information of the 100 patients achieved by the attacker is almost the same as that of the 99 patients. Therefore, the attacker can hardly infer the information of the remaining one patient. -**Differential privacy in machine learning** +**Differential privacy in machine learning:** Machine learning algorithms usually update model parameters and learn data features based on a large amount of data. Ideally, these models can learn the common features of a class of entities and achieve good generalization, such as "smoking patients are more likely to get lung cancer" rather than models with individual features, such as "Zhang San is a smoker who gets lung cancer." However, machine learning algorithms do not distinguish between general and individual features. The published machine learning models, especially the deep neural networks, may unintentionally memorize and expose the features of individual entities in training data. This can be exploited by malicious attackers to reveal Zhang San's privacy information from the published model. Therefore, it is necessary to use differential privacy to protect machine learning models from privacy leakage. @@ -32,14 +32,14 @@ $Pr[\mathcal{K}(D)\in S] \le e^{\epsilon} Pr[\mathcal{K}(D') \in S]+\delta$ For datasets $D$ and $D'$ that differ on only one record, the probability of obtaining the same result from $\mathcal{K}(D)$ and $\mathcal{K}(D')$ by using a randomized algorithm $\mathcal{K}$ must meet the preceding formula. $\epsilon$ indicates the differential privacy budget and $\delta$ indicates the perturbation. The smaller the values of $\epsilon$ and $\delta$, the closer the data distribution output by $\mathcal{K}$ on $D$ and $D'$. -**Differential privacy measurement** +**Differential privacy measurement:** Differential privacy can be measured using $\epsilon$ and $\delta$. - $\epsilon$: specifies the upper limit of the output probability that can be changed when a record is added to or deleted from the dataset. We usually hope that $\epsilon$ is a small constant. A smaller value indicates stricter differential privacy conditions. - $\delta$: limits the probability of arbitrary model behavior change. Generally, this parameter is set to a small constant. You are advised to set this parameter to a value less than the reciprocal of the size of a training dataset. -**Differential privacy implemented by MindArmour** +**Differential privacy implemented by MindArmour:** MindArmour differential privacy module Differential-Privacy implements the differential privacy optimizer. Currently, SGD, Momentum, and Adam are supported. They are differential privacy optimizers based on the Gaussian mechanism. Gaussian noise mechanism supports both non-adaptive policy and adaptive policy The non-adaptive policy use a fixed noise parameter for each step while the adaptive policy changes the noise parameter along time or iteration step. An advantage of using the non-adaptive Gaussian noise is that a differential privacy budget $\epsilon$ can be strictly controlled. However, a disadvantage is that in a model training process, the noise amount added in each step is fixed. In the later training stage, large noise makes the model convergence difficult, and even causes the performance to decrease greatly and the model usability to be poor. Adaptive noise can solve this problem. In the initial model training stage, the amount of added noise is large. As the model converges, the amount of noise decreases gradually, and the impact of noise on model availability decreases. The disadvantage is that the differential privacy budget cannot be strictly controlled. Under the same initial value, the $\epsilon$ of the adaptive differential privacy is greater than that of the non-adaptive differential privacy. Rényi differential privacy (RDP) [2] is also provided to monitor differential privacy budgets. @@ -84,7 +84,7 @@ TAG = 'Lenet5_train' ### Configuring Parameters 1. Set the running environment, dataset path, model training parameters, checkpoint storage parameters, and differential privacy parameters. Replace 'data_path' with you data path. For more configurations, see . - + ```python cfg = edict({ 'num_classes': 10, # the number of classes of model's output @@ -322,28 +322,29 @@ ds_train = generate_mnist_dataset(os.path.join(cfg.data_path, "train"), acc = model.eval(ds_eval, dataset_sink_mode=False) LOGGER.info(TAG, "============== Accuracy: %s ==============", acc) ``` - + 4. Run the following command. - + Execute the script: - + ```bash python lenet5_dp.py ``` - + In the preceding command, replace `lenet5_dp.py` with the name of your script. - + 5. Display the result. The accuracy of the LeNet model without differential privacy is 99%, and the accuracy of the LeNet model with Gaussian noise and adaptive clip differential privacy is mostly more than 95%. - ``` + + ```text ============== Starting Training ============== ... ============== Starting Testing ============== ... ============== Accuracy: 0.9698 ============== ``` - + ### References [1] C. Dwork and J. Lei. Differential privacy and robust statistics. In STOC, pages 371–380. ACM, 2009. @@ -351,6 +352,3 @@ ds_train = generate_mnist_dataset(os.path.join(cfg.data_path, "train"), [2] Ilya Mironov. Rényi differential privacy. In IEEE Computer Security Foundations Symposium, 2017. [3] Abadi, M. e. a., 2016. *Deep learning with differential privacy.* s.l.:Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. - - - diff --git a/tutorials/training/source_en/advanced_use/save_load_model_hybrid_parallel.md b/tutorials/training/source_en/advanced_use/save_load_model_hybrid_parallel.md index fe7b6d8c7b..aa75b23de6 100644 --- a/tutorials/training/source_en/advanced_use/save_load_model_hybrid_parallel.md +++ b/tutorials/training/source_en/advanced_use/save_load_model_hybrid_parallel.md @@ -90,11 +90,11 @@ Finally, save the updated parameter list to a file through the API provided by M Define the network, call the `load_checkpoint` and `load_param_into_net` APIs to import the checkpoint files to the network in rank id order, and then call `parameters_and_names` API to obtain all parameters in this network. -``` -net = Net() +```python +net = Net() opt = Momentum(learning_rate=0.01, momentum=0.9, params=net.get_parameters()) net = TrainOneStepCell(net, opt) -param_dicts = [] +param_dicts = [] for i in range(rank_size): file_name = os.path.join("./node"+str(i), "CKP_1-4_32.ckpt") # checkpoint file name of current node param_dict = load_checkpoint(file_name) @@ -115,7 +115,7 @@ In the preceding information: Call the `build_searched_strategy` API to obtain the slice strategy of model. -``` +```python strategy = build_searched_strategy("./strategy_train.ckpt") ``` @@ -131,7 +131,7 @@ The parameter name is model\_parallel\_weight and the dividing strategy is to pe 1. Obtain the data value on all nodes for model parallel parameters. - ``` + ```python sliced_parameters = [] for i in range(4): parameter = param_dicts[i].get("model_parallel_weight") @@ -142,32 +142,32 @@ The parameter name is model\_parallel\_weight and the dividing strategy is to pe 2. Call the `merge_sliced_parameter` API to merge the sliced parameters. + ```python + merged_parameter = merge_sliced_parameter(sliced_parameters, strategy) ``` - merged_parameter = merge_sliced_parameter(sliced_parameters, strategy) - ``` - + > If there are multiple model parallel parameters, repeat steps 1 to 2 to process them one by one. ### Saving the Data and Generating a New Checkpoint File 1. Convert `param_dict` to `param_list`. - ``` + ```python param_list = [] for (key, value) in param_dict.items(): each_param = {} each_param["name"] = key if isinstance(value.data, Tensor): - param_data = value.data + param_data = value.data else: - param_data = Tensor(value.data) + param_data = Tensor(value.data) each_param["data"] = param_data param_list.append(each_param) ``` 2. Call the `save_checkpoint` API to write the parameter data to a file and generate a new checkpoint file. - ``` + ```python save_checkpoint(param_list, “./CKP-Integrated_1-4_32.ckpt”) ``` @@ -186,7 +186,7 @@ If you need to load the integrated and saved checkpoint file to multi-device tra Call the `load_checkpoint` API to load model parameter data from the checkpoint file. -``` +```python param_dict = load_checkpoint("./CKP-Integrated_1-4_32.ckpt") ``` @@ -205,7 +205,7 @@ The following uses a specific model parameter as an example. The parameter name In the following code example, data is divided into two slices in dimension 0. - ``` + ```python new_param = parameter_dict[“model_parallel_weight”] slice_list = np.split(new_param.data.asnumpy(), 2, axis=0) new_param_moments = parameter_dict[“moments.model_parallel_weight”] @@ -214,8 +214,10 @@ The following uses a specific model parameter as an example. The parameter name Data after dividing: - slice_list[0] --- [1, 2, 3, 4] Corresponding to device0 - slice_list[1] --- [5, 6, 7, 8] Corresponding to device1 + ```text + slice_list[0] --- [1, 2, 3, 4] Corresponding to device0 + slice_list[1] --- [5, 6, 7, 8] Corresponding to device1 + ``` Similar to slice\_list, slice\_moments\_list is divided into two tensors with the shape of \[1, 4]. @@ -223,7 +225,7 @@ The following uses a specific model parameter as an example. The parameter name Obtain rank\_id of the current node and load data based on rank\_id. - ``` + ```python rank = get_rank() tensor_slice = Tensor(slice_list[rank]) tensor_slice_moments = Tensor(slice_moments_list[rank]) @@ -233,7 +235,7 @@ The following uses a specific model parameter as an example. The parameter name 3. Modify values of model parameters. - ``` + ```python new_param.set_data(tensor_slice, True) new_param_moments.set_data(tensor_slice_moments, True) ``` @@ -244,8 +246,8 @@ The following uses a specific model parameter as an example. The parameter name Call the `load_param_into_net` API to load the model parameter data to the network. -``` -net = Net() +```python +net = Net() opt = Momentum(learning_rate=0.01, momentum=0.9, params=parallel_net.get_parameters()) load_param_into_net(net, param_dict) load_param_into_net(opt, param_dict) @@ -273,40 +275,38 @@ User process: 1. Run the following script to integrate the checkpoint files: - - - ``` + ```python python ./integrate_checkpoint.py "Name of the checkpoint file to be integrated" "Path and name of the checkpoint file generated after integration" "Path and name of the strategy file" "Number of nodes" ``` integrate\_checkpoint.py: - ``` + ```python import numpy as np import os import mindspore.nn as nn from mindspore import Tensor, Parameter from mindspore.ops import operations as P from mindspore.train.serialization import save_checkpoint, load_checkpoint, build_searched_strategy, merge_sliced_parameter - + class Net(nn.Cell): def __init__(self,weight_init): super(Net, self).__init__() self.weight = Parameter(Tensor(weight_init), "model_parallel_weight", layerwise_parallel=True) self.fc = P.MatMul(transpose_b=True) - + def construct(self, x): x = self.fc(x, self.weight1) return x - + def integrate_ckpt_file(old_ckpt_file, new_ckpt_file, strategy_file, rank_size): weight = np.ones([2, 8]).astype(np.float32) net = Net(weight) opt = Momentum(learning_rate=0.01, momentum=0.9, params=net.get_parameters()) net = TrainOneStepCell(net, opt) - + # load CheckPoint into net in rank id order - param_dicts = [] + param_dicts = [] for i in range(rank_size): file_name = os.path.join("./node"+str(i), old_ckpt_file) param_dict = load_checkpoint(file_name) @@ -315,21 +315,21 @@ User process: for _, param in net.parameters_and_names(): param_dict[param.name] = param param_dicts.append(param_dict) - + strategy = build_searched_strategy(strategy_file) param_dict = {} - + for paramname in ["model_parallel_weight", "moments.model_parallel_weight"]: # get layer wise model parallel parameter sliced_parameters = [] for i in range(rank_size): parameter = param_dicts[i].get(paramname) sliced_parameters.append(parameter) - + # merge the parallel parameters of the model - merged_parameter = merge_sliced_parameter(sliced_parameters, strategy) + merged_parameter = merge_sliced_parameter(sliced_parameters, strategy) param_dict[paramname] = merged_parameter - + # convert param_dict to list type data param_list = [] for (key, value) in param_dict.items(): @@ -339,14 +339,14 @@ User process: param_data = value.data else: param_data = Tensor(value.data) - each_param["data"] = param_data - param_list.append(each_param) - + each_param["data"] = param_data + param_list.append(each_param) + # call the API to generate a new CheckPoint file save_checkpoint(param_list, new_ckpt_file) - + return - + if __name__ == "__main__": try: old_ckpt_file = sys.argv[1] @@ -363,10 +363,10 @@ User process: Before the script is executed, the parameter values in the checkpoint files are as follows: - ``` + ```text device0: name is model_parallel_weight - value is + value is [[0.87537426 1.0448935 0.86736983 0.8836905 0.77354026 0.69588304 0.9183654 0.7792076] [0.87224025 0.8726848 0.771446 0.81967723 0.88974726 0.7988162 0.72919345 0.7677011]] name is learning_rate @@ -380,7 +380,7 @@ User process: device1: name is model_parallel_weight - value is + value is [[0.9210751 0.9050457 0.9827775 0.920396 0.9240526 0.9750359 1.0275179 1.0819869] [0.73605865 0.84631145 0.9746683 0.9386582 0.82902765 0.83565056 0.9702136 1.0514659]] name is learning_rate @@ -390,11 +390,11 @@ User process: name is moments.model_weight value is [[0.2417504 0.28193963 0.06713893 0.21510397 0.23380603 0.11424308 0.0218009 -0.11969765] - [0.45955992 0.22664294 0.01990281 0.0731914 0.27125207 0.27298513 -0.01716102 -0.15327111]] + [0.45955992 0.22664294 0.01990281 0.0731914 0.27125207 0.27298513 -0.01716102 -0.15327111]] device2: name is model_parallel_weight - value is + value is [[1.0108461 0.8689414 0.91719437 0.8805056 0.7994629 0.8999671 0.7585804 1.0287056 ] [0.90653455 0.60146594 0.7206475 0.8306303 0.8364681 0.89625114 0.7354735 0.8447268]] name is learning_rate @@ -402,7 +402,7 @@ User process: name is momentum value is [0.9] name is moments.model_weight - value is + value is [[0.03440702 0.41419312 0.24817684 0.30765256 0.48516113 0.24904746 0.57791173 0.00955463] [0.13458519 0.6690533 0.49259356 0.28319967 0.25951773 0.16777472 0.45696738 0.24933104]] @@ -416,16 +416,16 @@ User process: name is momentum value is [0.9] name is moments.model_parallel_weight - value is + value is [[0.14152306 0.5040985 0.24455397 0.10907605 0.11319532 0.19538902 0.01208619 0.40430856] [-0.7773164 -0.47611716 -0.6041424 -0.6144473 -0.2651842 -0.31909415 -0.4510405 -0.12860501]] ``` After the script is executed, the parameter values in the checkpoint files are as follows: - ``` + ```text name is model_parallel_weight - value is + value is [[1.1138763 1.0962057 1.3516843 1.0812817 1.1579804 1.1078343 1.0906502 1.3207073] [0.916671 1.0781671 1.0368758 0.9680898 1.1735439 1.0628364 0.9960786 1.0135143] [0.8828271 0.7963984 0.90675324 0.9830291 0.89010954 0.897052 0.7890109 0.89784735] @@ -439,7 +439,7 @@ User process: name is momentum value is [0.9] name is moments.model_parallel_weight - value is + value is [[0.2567724 -0.07485991 0.282002 0.2456022 0.454939 0.619168 0.18964815 0.45714882] [0.25946522 0.24344791 0.45677605 0.3611395 0.23378398 0.41439137 0.5312468 0.4696194 ] [0.2417504 0.28193963 0.06713893 0.21510397 0.23380603 0.11424308 0.0218009 -0.11969765] @@ -453,7 +453,7 @@ User process: 2. Execute stage 2 training and load the checkpoint file before training. The training code needs to be supplemented based on the site requirements. - ``` + ```python import numpy as np import os import mindspore.nn as nn @@ -497,7 +497,7 @@ User process: load_param_into_net(net, param_dict) opt = Momentum(learning_rate=0.01, momentum=0.9, params=parallel_net.get_parameters()) load_param_into_net(opt, param_dict) - # train code + # train code ... if __name__ == "__main__": @@ -506,7 +506,7 @@ User process: label = np.random.random((4, 4)).astype(np.float32) train_mindspore_impl_fc(input, label, weight1) ``` - + In the preceding information: - `mode=context.GRAPH_MODE`: sets the running mode to graph mode for distributed training. (The PyNative mode does not support parallel running.) @@ -515,10 +515,10 @@ User process: Parameter values after loading: - ``` + ```text device0: name is model_parallel_weight - value is + value is [[0.87537426 1.0448935 0.86736983 0.8836905 0.77354026 0.69588304 0.9183654 0.7792076] [0.87224025 0.8726848 0.771446 0.81967723 0.88974726 0.7988162 0.72919345 0.7677011] [0.8828271 0.7963984 0.90675324 0.9830291 0.89010954 0.897052 0.7890109 0.89784735] @@ -536,7 +536,7 @@ User process: device1: name is model_parallel_weight - value is + value is [[1.0053468 0.98402303 0.99762845 0.97587246 1.0259694 1.0055295 0.99420834 0.9496847] [1.0851002 1.0295962 1.0999886 1.0958165 0.9765328 1.146529 1.0970603 1.1388365] [0.7147005 0.9168278 0.80178416 0.6258351 0.8413766 0.5909515 0.696347 0.71359116] @@ -550,5 +550,5 @@ User process: [[0.03440702 0.41419312 0.24817684 0.30765256 0.48516113 0.24904746 0.57791173 0.00955463] [0.13458519 0.6690533 0.49259356 0.28319967 0.25951773 0.16777472 0.45696738 0.24933104] [0.14152306 0.5040985 0.24455397 0.10907605 0.11319532 0.19538902 0.01208619 0.40430856] - [-0.7773164 -0.47611716 -0.6041424 -0.6144473 -0.2651842 -0.31909415 -0.4510405 -0.12860501]] + [-0.7773164 -0.47611716 -0.6041424 -0.6144473 -0.2651842 -0.31909415 -0.4510405 -0.12860501]] ``` diff --git a/tutorials/training/source_en/advanced_use/summary_record.md b/tutorials/training/source_en/advanced_use/summary_record.md index 133317016f..eb3760d675 100644 --- a/tutorials/training/source_en/advanced_use/summary_record.md +++ b/tutorials/training/source_en/advanced_use/summary_record.md @@ -41,6 +41,7 @@ The `Callback` mechanism in MindSpore provides a quick and easy way to collect c When you write a training script, you just instantiate the `SummaryCollector` and apply it to either `model.train` or `model.eval`. You can automatically collect some common summary data. The detailed usage of `SummaryCollector` can refer to the `API` document `mindspore.train.callback.SummaryCollector`. The sample code is as follows: + ```python import mindspore import mindspore.nn as nn @@ -126,9 +127,10 @@ model.eval(ds_eval, callbacks=[summary_collector]) ### Method two: Custom collection of network data with summary operators and SummaryCollector -In addition to providing the `SummaryCollector` that automatically collects some summary data, MindSpore provides summary operators that enable customized collection of other data on the network, such as the input of each convolutional layer, or the loss value in the loss function, etc. +In addition to providing the `SummaryCollector` that automatically collects some summary data, MindSpore provides summary operators that enable customized collection of other data on the network, such as the input of each convolutional layer, or the loss value in the loss function, etc. The following summary operators are currently supported: + - [ScalarSummary](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.ScalarSummary): Record a scalar data. - [TensorSummary](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.TensorSummary): Record a tensor data. - [ImageSummary](https://www.mindspore.cn/doc/api_python/en/master/mindspore/mindspore.ops.html#mindspore.ops.ImageSummary): Record a image data. @@ -193,7 +195,7 @@ class MyOptimizer(Optimizer): self.histogram_summary(self.weight_names[0], self.paramters[0]) # Record gradient self.histogram_summary(self.weight_names[0] + ".gradient", grads[0]) - + ...... @@ -252,18 +254,18 @@ The detailed usage of `SummaryRecord` can refer to the `API` document `mindspore The sample code is as follows: -``` +```python from mindspore.train.callback import Callback from mindspore.train.summary import SummaryRecord class ConfusionMatrixCallback(Callback): def __init__(self, summary_dir): self._summary_dir = summary_dir - + def __enter__(self): # init you summary record in here, when the train script run, it will be inited before training self.summary_record = SummaryRecord(summary_dir) - + def __exit__(self, *exc_args): # Note: you must close the summary record, it will release the process pool resource # else your training script will not exit from training. @@ -274,7 +276,7 @@ class ConfusionMatrixCallback(Callback): cb_params = run_context.run_context.original_args() # create a confusion matric image, and record it to summary file - confusion_martrix = create_confusion_matrix(cb_params) + confusion_martrix = create_confusion_matrix(cb_params) self.summary_record.add_value('image', 'confusion_matrix', confusion_matric) self.summary_record.record(cb_params.cur_step) @@ -291,24 +293,28 @@ the `save_graphs` option of `context.set_context` in the training script is set In the saved files, `ms_output_after_hwopt.pb` is the computational graph after operator fusion, which can be viewed on the web page. ## Run MindInsight + After completing the data collection in the tutorial above, you can start MindInsight to visualize the collected data. When start MindInsight, you need to specify the summary log file directory with the `--summary-base-dir` parameter. The specified summary log file directory can be the output directory of a training or the parent directory of the output directory of multiple training. The output directory structure for a training is as follows -``` + +```text └─summary_dir events.out.events.summary.1596869898.hostname_MS events.out.events.summary.1596869898.hostname_lineage ``` Execute command: + ```Bash mindinsight start --summary-base-dir ./summary_dir ``` The output directory structure of multiple training is as follows: -``` + +```text └─summary ├─summary_dir1 │ events.out.events.summary.1596869898.hostname_MS @@ -320,6 +326,7 @@ The output directory structure of multiple training is as follows: ``` Execute command: + ```Bash mindinsight start --summary-base-dir ./summary ``` @@ -327,6 +334,7 @@ mindinsight start --summary-base-dir ./summary After successful startup, the visual page can be viewed by visiting the `http://127.0.0.1:8080` address through the browser. Stop MindInsight command: + ```Bash mindinsight stop ``` @@ -339,12 +347,13 @@ For more parameter Settings, see the [MindInsight related commands](https://www. 2. Multiple `SummaryRecord` instances can not be used at the same time. (`SummaryRecord` is used in `SummaryCollector`) - If you use two or more instances of `SummaryCollector` in the callback list of 'model.train' or 'model.eval', it is seen as using multiple `SummaryRecord` instances at the same time, and it will cause recoding data failure. + If you use two or more instances of `SummaryCollector` in the callback list of 'model.train' or 'model.eval', it is seen as using multiple `SummaryRecord` instances at the same time, and it will cause recoding data failure. If the customized callback uses `SummaryRecord`, it can not be used with `SummaryCollector` at the same time. Correct code: - ``` + + ```python ... summary_collector = SummaryCollector('./summary_dir') model.train(2, train_dataset, callbacks=[summary_collector]) @@ -353,7 +362,8 @@ For more parameter Settings, see the [MindInsight related commands](https://www. ``` Wrong code: - ``` + + ```python ... summary_collector1 = SummaryCollector('./summary_dir1') summary_collector2 = SummaryCollector('./summary_dir2') @@ -361,7 +371,8 @@ For more parameter Settings, see the [MindInsight related commands](https://www. ``` Wrong code: - ``` + + ```python ... # Note: the 'ConfusionMatrixCallback' is user-defined, and it uses SummaryRecord to record data. confusion_callback = ConfusionMatrixCallback('./summary_dir1') @@ -371,4 +382,4 @@ For more parameter Settings, see the [MindInsight related commands](https://www. 3. In each Summary log file directory, only one training data should be placed. If a summary log directory contains summary data from multiple training, MindInsight will overlay the summary data from these training when visualizing the data, which may not be consistent with the expected visualizations. -4. Currently, `SummaryCollector` and `SummaryRecord` do not support scenarios with GPU multi-card running. \ No newline at end of file +4. Currently, `SummaryCollector` and `SummaryRecord` do not support scenarios with GPU multi-card running. diff --git a/tutorials/training/source_en/advanced_use/test_model_security_fuzzing.md b/tutorials/training/source_en/advanced_use/test_model_security_fuzzing.md index ae637cdf6d..8d61b0abdb 100644 --- a/tutorials/training/source_en/advanced_use/test_model_security_fuzzing.md +++ b/tutorials/training/source_en/advanced_use/test_model_security_fuzzing.md @@ -75,7 +75,7 @@ For details about the API configuration, see the `context.set_context`. images = data[0].asnumpy().astype(np.float32) train_images.append(images) train_images = np.concatenate(train_images, axis=0) - + # get test data data_list = "../common/dataset/MNIST/test" batch_size = 32 @@ -101,7 +101,7 @@ For details about the API configuration, see the `context.set_context`. The data mutation method must include the method based on the image pixel value changes. - The first two image transform methods support user-defined configuration parameters and randomly generated parameters by algorithms. For user-defined configuration parameters see the class methods corresponding to https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/fuzz_testing/image_transform.py. For randomly generated parameters by algorithms you can set method's params to `'auto_param': [True]`. The mutation parameters are randomly generated within the recommended range. + The first two image transform methods support user-defined configuration parameters and randomly generated parameters by algorithms. For user-defined configuration parameters see the class methods corresponding to . For randomly generated parameters by algorithms you can set method's params to `'auto_param': [True]`. The mutation parameters are randomly generated within the recommended range. For details about how to set parameters based on the attack defense method, see the corresponding attack method class. @@ -144,7 +144,7 @@ For details about the API configuration, see the `context.set_context`. # make initial seeds initial_seeds = [] for img, label in zip(test_images, test_labels): - initial_seeds.append([img, label]) + initial_seeds.append([img, label]) initial_seeds = initial_seeds[:100] ``` @@ -174,7 +174,7 @@ For details about the API configuration, see the `context.set_context`. 6. Experiment results. - The results of fuzz testing contains five aspect data: + The results of fuzz testing contains five aspect data: - fuzz_samples: mutated samples in fuzz testing. - true_labels: the ground truth labels of fuzz_samples. @@ -188,8 +188,8 @@ For details about the API configuration, see the `context.set_context`. ```python if metrics: - for key in metrics: - LOGGER.info(TAG, key + ': %s', metrics[key]) + for key in metrics: + LOGGER.info(TAG, key + ': %s', metrics[key]) ``` The fuzz testing result is as follows: diff --git a/tutorials/training/source_en/quick_start/linear_regression.md b/tutorials/training/source_en/quick_start/linear_regression.md index d437a48ee9..94dec03fb3 100644 --- a/tutorials/training/source_en/quick_start/linear_regression.md +++ b/tutorials/training/source_en/quick_start/linear_regression.md @@ -29,7 +29,6 @@ Author: [Yi Yang](https://github.com/helloyesterday)    Edit    - ## Overview Regression algorithms usually use a series of properties to predict a value, and the predicted values are consecutive. For example, the price of a house is predicted based on some given feature data of the house, such as area and the number of bedrooms; or future temperature conditions are predicted by using the temperature change data and satellite cloud images in the last week. If the actual price of the house is CNY5 million, and the value predicted through regression analysis is CNY4.99 million, the regression analysis is considered accurate. For machine learning problems, common regression analysis includes linear regression, polynomial regression, and logistic regression. This example describes the linear regression algorithms and how to use MindSpore to perform linear regression AI training. @@ -50,7 +49,6 @@ Complete MindSpore running configuration. Third-party support package: `matplotlib`. If this package is not installed, run the `pip install matplotlib` command to install it first. - ```python from mindspore import context @@ -67,7 +65,6 @@ context.set_context(mode=context.GRAPH_MODE, device_target="CPU") `get_data` is used to generate training and test datasets. Since linear data is fitted, the required training datasets should be randomly distributed around the objective function. Assume that the objective function to be fitted is $f(x)=2x+3$. $f(x)=2x+3+noise$ is used to generate training datasets, and `noise` is a random value that complies with standard normal distribution rules. - ```python import numpy as np @@ -81,7 +78,6 @@ def get_data(num, w=2.0, b=3.0): Use `get_data` to generate 50 groups of test data and visualize them. - ```python import matplotlib.pyplot as plt @@ -98,10 +94,8 @@ plt.show() The output is as follows: - ![png](./images/linear_regression_eval_datasets.png) - In the preceding figure, the green line indicates the objective function, and the red points indicate the verification data `eval_data`. ### Defining the Data Argumentation Function @@ -112,7 +106,6 @@ Use the MindSpore data conversion function `GeneratorDataset` to convert the dat - `batch`: combines `batch_size` pieces of data into a batch. - `repeat`: multiplies the number of datasets. - ```python from mindspore import dataset as ds @@ -125,13 +118,12 @@ def create_dataset(num_data, batch_size=16, repeat_size=1): Use the dataset argumentation function to generate training data and view the training data format. - ```python num_data = 1600 batch_size = 16 repeat_size = 1 -ds_train = create_dataset(num_data, batch_size=batch_size, repeat_size=repeat_size) +ds_train = create_dataset(num_data, batch_size=batch_size, repeat_size=repeat_size) print("The dataset size of ds_train:", ds_train.get_dataset_size()) dict_datasets = ds_train.create_dict_iterator().get_next() @@ -142,11 +134,12 @@ print("The y label value shape:", dict_datasets["label"].shape) The output is as follows: - The dataset size of ds_train: 100 - dict_keys(['data', 'label']) - The x label value shape: (16, 1) - The y label value shape: (16, 1) - +```text +The dataset size of ds_train: 100 +dict_keys(['data', 'label']) +The x label value shape: (16, 1) +The y label value shape: (16, 1) +``` Use the defined `create_dataset` to perform argumentation on the generated 1600 data records and set them into 100 datasets with the shape of 16 x 1. @@ -158,7 +151,6 @@ $$f(x)=wx+b\tag{1}$$ Use the Normal operator to randomly initialize the weights $w$ and $b$. - ```python from mindspore.common.initializer import Normal from mindspore import nn @@ -175,7 +167,6 @@ class LinearNet(nn.Cell): Call the network to view the initialized model parameters. - ```python net = LinearNet() model_params = net.trainable_params() @@ -184,18 +175,18 @@ print(model_params) The output is as follows: - [Parameter (name=fc.weight, value=Tensor(shape=[1, 1], dtype=Float32, - [[-7.35660456e-003]])), Parameter (name=fc.bias, value=Tensor(shape=[1], dtype=Float32, [-7.35660456e-003]))] - +```text +[Parameter (name=fc.weight, value=Tensor(shape=[1, 1], dtype=Float32, +[[-7.35660456e-003]])), Parameter (name=fc.bias, value=Tensor(shape=[1], dtype=Float32, [-7.35660456e-003]))] +``` After initializing the network model, visualize the initialized network function and training dataset to understand the model function before fitting. - ```python from mindspore import Tensor x_model_label = np.array([-10, 10, 0.1]) -y_model_label = (x_model_label * Tensor(model_params[0]).asnumpy()[0][0] + +y_model_label = (x_model_label * Tensor(model_params[0]).asnumpy()[0][0] + Tensor(model_params[1]).asnumpy()[0]) plt.scatter(x_eval_label, y_eval_label, color="red", s=5) @@ -206,10 +197,8 @@ plt.show() The output is as follows: - ![png](./images/model_net_and_eval_datasets.png) - As shown in the preceding figure, the initialized model function in blue differs greatly from the objective function in green. ## Defining and Associating the Forward and Backward Propagation Networks @@ -237,7 +226,6 @@ A forward propagation network consists of two parts: The following method is used in MindSpore: - ```python net = LinearNet() net_loss = nn.loss.MSELoss() @@ -258,7 +246,6 @@ Parameters in formula 3 are described as follows: After all weight values in the function are updated, transfer the values to the model function. This process is the backward propagation. To implement this process, the optimizer function in MindSpore is required. - ```python opt = nn.Momentum(net.trainable_params(), learning_rate=0.005, momentum=0.9) ``` @@ -267,7 +254,6 @@ opt = nn.Momentum(net.trainable_params(), learning_rate=0.005, momentum=0.9) After forward propagation and backward propagation are defined, call the `Model` function in MindSpore to associate the previously defined networks, loss functions, and optimizer function to form a complete computing network. - ```python from mindspore.train import Model @@ -280,7 +266,6 @@ model = Model(net, net_loss, opt) To make the entire training process easier to understand, the test data, objective function, and model network of the training process need to be visualized. The following defines a visualization function which is called after each training step to display a fitting process of the model network. - ```python import matplotlib.pyplot as plt import time @@ -293,7 +278,7 @@ def plot_model_and_datasets(net, eval_data): x1, y1 = zip(*eval_data) x_target = x y_target = x_target * 2 + 3 - + plt.axis([-11, 11, -20, 25]) plt.scatter(x1, y1, color="red", s=5) plt.plot(x, y, color="blue") @@ -306,7 +291,6 @@ def plot_model_and_datasets(net, eval_data): MindSpore provides tools to customize the model training process. The following calls the visualization function in `step_end` to display the fitting process. For more information, see [Customized Debugging Information](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/custom_debugging_info.html#callback). - ```python from IPython import display from mindspore.train.callback import Callback @@ -315,7 +299,7 @@ class ImageShowCallback(Callback): def __init__(self, net, eval_data): self.net = net self.eval_data = eval_data - + def step_end(self, run_context): plot_model_and_datasets(self.net, self.eval_data) display.clear_output(wait=True) @@ -330,7 +314,6 @@ After the preceding process is complete, use the training parameter `ds_train` t - `callbacks`: Required callback function during training. - `dataset_sink_model`: Dataset offload mode, which supports the Ascend and GPU computing platforms. In this example, this parameter is set to False for the CPU computing platform. - ```python from mindspore.train.callback import LossMonitor @@ -345,13 +328,12 @@ print(net.trainable_params()[0], "\n%s" % net.trainable_params()[1]) The output is as follows: - ![gif](./images/linear_regression.gif) - - Parameter (name=fc.weight, value=[[2.0065749]]) - Parameter (name=fc.bias, value=[3.0089042]) - +```text +Parameter (name=fc.weight, value=[[2.0065749]]) +Parameter (name=fc.bias, value=[3.0089042]) +``` After the training is complete, the weight parameters of the final model are printed. The value of weight is close to 2.0 and the value of bias is close to 3.0. As a result, the model training meets the expectation. diff --git a/tutorials/training/source_en/quick_start/quick_start.md b/tutorials/training/source_en/quick_start/quick_start.md index 36aecb34c5..f9f2dc93c5 100644 --- a/tutorials/training/source_en/quick_start/quick_start.md +++ b/tutorials/training/source_en/quick_start/quick_start.md @@ -32,6 +32,7 @@ This document uses a practice example to demonstrate the basic functions of MindSpore. For common users, it takes 20 to 30 minutes to complete the practice. During the practice, a simple image classification function is implemented. The overall process is as follows: + 1. Process the required dataset. The MNIST dataset is used in this example. 2. Define a network. The LeNet network is used in this example. 3. Define the loss function and optimizer. @@ -39,7 +40,7 @@ During the practice, a simple image classification function is implemented. The 5. Load the saved model for inference. 6. Validate the model, load the test dataset and trained model, and validate the result accuracy. -> You can find the complete executable sample code at . +> You can find the complete executable sample code at . This is a simple and basic workflow. For applying to other advanced and complex applications, extend this basic process as appropriate. @@ -61,7 +62,7 @@ Download the files, decompress them, and store them in the workspace directories The directory structure is as follows: -``` +```text └─MNIST_Data ├─test │ t10k-images.idx3-ubyte @@ -71,6 +72,7 @@ The directory structure is as follows: train-images.idx3-ubyte train-labels.idx1-ubyte ``` + > For ease of use, we added the function of automatically downloading datasets in the sample script. ### Importing Python Libraries and Modules @@ -78,8 +80,7 @@ The directory structure is as follows: Before start, you need to import Python libraries. Currently, the `os` libraries are required. For ease of understanding, other required libraries will not be described here. - - + ```python import os ``` @@ -156,7 +157,7 @@ def create_dataset(data_path, batch_size=32, repeat_size=1, rescale_op = CV.Rescale(rescale, shift) # rescale images hwc2chw_op = CV.HWC2CHW() # change shape from (height, width, channel) to (channel, height, width) to fit network. type_cast_op = C.TypeCast(mstype.int32) # change data type of label to int32 to fit network - + # apply map operations on images mnist_ds = mnist_ds.map(operations=type_cast_op, input_columns="label", num_parallel_workers=num_parallel_workers) mnist_ds = mnist_ds.map(operations=resize_op, input_columns="image", num_parallel_workers=num_parallel_workers) @@ -182,7 +183,6 @@ Perform the shuffle and batch operations, and then perform the repeat operation > MindSpore supports multiple data processing and augmentation operations, which are usually used in combined. For details, see section [Data Processing](https://www.mindspore.cn/tutorial/training/en/master/use/data_preparation.html) in the MindSpore Tutorials. - ## Defining the Network The LeNet network is relatively simple. In addition to the input layer, the LeNet network has seven layers, including two convolutional layers, two down-sample layers (pooling layers), and three full connection layers. Each layer contains different numbers of training parameters, as shown in the following figure: @@ -237,7 +237,7 @@ class LeNet5(nn.Cell): Before definition, this section briefly describes concepts of loss function and optimizer. - Loss function: It is also called objective function and is used to measure the difference between a predicted value and an actual value. Deep learning reduces the value of the loss function by continuous iteration. Defining a good loss function can effectively improve the model performance. -- Optimizer: It is used to minimize the loss function, improving the model during training. +- Optimizer: It is used to minimize the loss function, improving the model during training. After the loss function is defined, the weight-related gradient of the loss function can be obtained. The gradient is used to indicate the weight optimization direction for the optimizer, improving model performance. @@ -291,9 +291,9 @@ from mindspore.train.callback import ModelCheckpoint, CheckpointConfig if __name__ == "__main__": ... # set parameters of check point - config_ck = CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10) + config_ck = CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10) # apply parameters of check point - ckpoint_cb = ModelCheckpoint(prefix="checkpoint_lenet", config=config_ck) + ckpoint_cb = ModelCheckpoint(prefix="checkpoint_lenet", config=config_ck) ... ``` @@ -318,24 +318,27 @@ def train_net(args, model, epoch_size, mnist_path, repeat_size, ckpoint_cb, sink if __name__ == "__main__": ... - - epoch_size = 1 + + epoch_size = 1 mnist_path = "./MNIST_Data" repeat_size = 1 model = Model(network, net_loss, net_opt, metrics={"Accuracy": Accuracy()}) train_net(args, model, epoch_size, mnist_path, repeat_size, ckpoint_cb, dataset_sink_mode) ... ``` -In the preceding information: + +In the preceding information: In the `train_net` method, we loaded the training dataset, `MNIST path` is MNIST dataset path. ## Running and Viewing the Result Run the script using the following command: -``` + +```bash python lenet.py --device_target=CPU ``` -In the preceding information: + +In the preceding information: `Lenet. Py`: the script file you wrote. `--device_target CPU`: Specify the hardware platform.The parameters are 'CPU', 'GPU' or 'Ascend'. @@ -375,7 +378,6 @@ In the preceding information: After obtaining the model file, we verify the generalization ability of the model. - ```python from mindspore.train.serialization import load_checkpoint, load_param_into_net @@ -396,23 +398,24 @@ if __name__ == "__main__": test_net(network, model, mnist_path) ``` -In the preceding information: +In the preceding information: `load_checkpoint`: This API is used to load the CheckPoint model parameter file and return a parameter dictionary. `checkpoint_lenet-3_1404.ckpt`: name of the saved CheckPoint model file. `load_param_into_net`: This API is used to load parameters to the network. - Run the script using the following command: -``` + +```bash python lenet.py --device_target=CPU ``` -In the preceding information: + +In the preceding information: `Lenet. Py`: the script file you wrote. `--device_target CPU`: Specify the hardware platform.The parameters are 'CPU', 'GPU' or 'Ascend'. After executing the command, the result is displayed as follows: -``` +```text ============== Starting Testing ============== ============== Accuracy:{'Accuracy': 0.9663477564102564} ============== ``` diff --git a/tutorials/training/source_en/quick_start/quick_video.md b/tutorials/training/source_en/quick_start/quick_video.md index 4891f7dafa..4c8b795bfc 100644 --- a/tutorials/training/source_en/quick_start/quick_video.md +++ b/tutorials/training/source_en/quick_start/quick_video.md @@ -108,7 +108,6 @@ Provides video tutorials from installation to try-on, helping you quickly use Mi - ## MindSpore Experience @@ -403,4 +402,4 @@ Provides video tutorials from installation to try-on, helping you quickly use Mi - \ No newline at end of file + diff --git a/tutorials/training/source_en/quick_start/quick_video/loading_the_dataset_and_converting_data_format.md b/tutorials/training/source_en/quick_start/quick_video/loading_the_dataset_and_converting_data_format.md index 6e6d6c115e..cdd21d37f3 100644 --- a/tutorials/training/source_en/quick_start/quick_video/loading_the_dataset_and_converting_data_format.md +++ b/tutorials/training/source_en/quick_start/quick_video/loading_the_dataset_and_converting_data_format.md @@ -5,4 +5,3 @@ - \ No newline at end of file diff --git a/tutorials/training/source_en/quick_start/quick_video/mindInsight_dashboard.md b/tutorials/training/source_en/quick_start/quick_video/mindInsight_dashboard.md index 52b39f1841..8a159643e6 100644 --- a/tutorials/training/source_en/quick_start/quick_video/mindInsight_dashboard.md +++ b/tutorials/training/source_en/quick_start/quick_video/mindInsight_dashboard.md @@ -8,4 +8,4 @@ **Install now**: -**See more**: \ No newline at end of file +**See more**: diff --git a/tutorials/training/source_en/quick_start/quick_video/mindInsight_installation_and_common_commands.md b/tutorials/training/source_en/quick_start/quick_video/mindInsight_installation_and_common_commands.md index cca2d82e2a..a0dae43ea1 100644 --- a/tutorials/training/source_en/quick_start/quick_video/mindInsight_installation_and_common_commands.md +++ b/tutorials/training/source_en/quick_start/quick_video/mindInsight_installation_and_common_commands.md @@ -8,4 +8,4 @@ **Install now**: -**More commands**: \ No newline at end of file +**More commands**: diff --git a/tutorials/training/source_en/quick_start/quick_video/mindInsight_lineage_and_scalars_comparision.md b/tutorials/training/source_en/quick_start/quick_video/mindInsight_lineage_and_scalars_comparision.md index 4960609f29..5b762e7158 100644 --- a/tutorials/training/source_en/quick_start/quick_video/mindInsight_lineage_and_scalars_comparision.md +++ b/tutorials/training/source_en/quick_start/quick_video/mindInsight_lineage_and_scalars_comparision.md @@ -6,4 +6,4 @@ -**See more**: \ No newline at end of file +**See more**: diff --git a/tutorials/training/source_en/quick_start/quick_video/quick_start_video.md b/tutorials/training/source_en/quick_start/quick_video/quick_start_video.md index 8af0e535a9..914e35c6a5 100644 --- a/tutorials/training/source_en/quick_start/quick_video/quick_start_video.md +++ b/tutorials/training/source_en/quick_start/quick_video/quick_start_video.md @@ -8,4 +8,4 @@ **View code**: -**View the full tutorial**: \ No newline at end of file +**View the full tutorial**: diff --git a/tutorials/training/source_en/quick_start/quick_video/saving_and_loading_model_parameters.md b/tutorials/training/source_en/quick_start/quick_video/saving_and_loading_model_parameters.md index 2fc01870d5..78a12a04c0 100644 --- a/tutorials/training/source_en/quick_start/quick_video/saving_and_loading_model_parameters.md +++ b/tutorials/training/source_en/quick_start/quick_video/saving_and_loading_model_parameters.md @@ -6,4 +6,4 @@ -**View the full tutorial**: \ No newline at end of file +**View the full tutorial**: diff --git a/tutorials/training/source_en/use/load_dataset_image.md b/tutorials/training/source_en/use/load_dataset_image.md index ee57af47a4..67ea6b6352 100644 --- a/tutorials/training/source_en/use/load_dataset_image.md +++ b/tutorials/training/source_en/use/load_dataset_image.md @@ -28,7 +28,7 @@ This tutorial uses the MNIST dataset [1] as an example to demonstrate how to loa 1. Download and decompress the training [Image](http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz) and [Label](http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz) of the MNIST dataset to `./MNIST` directory. The directory structure is as follows. - ``` + ```text └─MNIST ├─train-images.idx3-ubyte └─train-labels.idx1-ubyte diff --git a/tutorials/training/source_en/use/load_dataset_text.md b/tutorials/training/source_en/use/load_dataset_text.md index e63808dbed..e4e9c34cdc 100644 --- a/tutorials/training/source_en/use/load_dataset_text.md +++ b/tutorials/training/source_en/use/load_dataset_text.md @@ -27,7 +27,7 @@ This tutorial briefly demonstrates how to load and process text data using MindS 1. Prepare the following text data. - ``` + ```text Welcome to Beijing! 北京欢迎您! 我喜欢English! @@ -35,7 +35,7 @@ This tutorial briefly demonstrates how to load and process text data using MindS 2. Create the `tokenizer.txt` file, copy the text data to the file, and save the file under `./test` directory. The directory structure is as follow. - ``` + ```text └─test └─tokenizer.txt ``` @@ -69,7 +69,7 @@ The following tutorial demonstrates loading datasets using the `TextFileDataset` The output without tokenization: - ``` + ```text Welcome to Beijing! 北京欢迎您! 我喜欢English! @@ -99,7 +99,7 @@ The following tutorial demonstrates how to perform data processing such as `Slid The output is as follows: - ``` + ```text ['大', '家', '早', '上', '好'] ``` @@ -118,7 +118,7 @@ The following tutorial demonstrates how to perform data processing such as `Slid The output is as follows: - ``` + ```text [['大', '家'], ['家', '早'], ['早', '上'], @@ -145,7 +145,7 @@ The following tutorial demonstrates how to perform data processing such as `Slid The output is as follows: - ``` + ```text c a d @@ -178,7 +178,7 @@ The following tutorial demonstrates how to use the `WhitespaceTokenizer` to toke The output after tokenization is as follows: - ``` + ```text ['Welcome', 'to', 'Beijing!'] ['北京欢迎您!'] ['我喜欢English!'] diff --git a/tutorials/training/source_en/use/load_model_for_inference_and_transfer.md b/tutorials/training/source_en/use/load_model_for_inference_and_transfer.md index d402b51700..8e6e891492 100644 --- a/tutorials/training/source_en/use/load_model_for_inference_and_transfer.md +++ b/tutorials/training/source_en/use/load_model_for_inference_and_transfer.md @@ -1,4 +1,4 @@ -# Loading a Model for Inference and Transfer Learning +# Loading a Model for Inference and Transfer Learning `Linux` `Ascend` `GPU` `CPU` `Model Loading` `Beginner` `Intermediate` `Expert` @@ -50,6 +50,7 @@ The `eval` method validates the accuracy of the trained model. In the retraining and fine-tuning scenarios for task interruption, you can load network parameters and optimizer parameters to the model. The sample code is as follows: + ```python # return a parameter dict for model param_dict = load_checkpoint("resnet50-2_32.ckpt") @@ -105,11 +106,11 @@ The `load_checkpoint` method returns a parameter dictionary and then the `load_p ### For Transfer Training -When loading a model with `mindspore_hub.load` API, we can add an extra argument to load the feature extraction part of the model only. So we can easily add new layers to perform transfer learning. This feature can be found in the related model page when an extra argument (e.g., include_top) has been integrated into the model construction by the model developer. The value of `include_top` is True or False, indicating whether to keep the top layer in the fully-connected network. +When loading a model with `mindspore_hub.load` API, we can add an extra argument to load the feature extraction part of the model only. So we can easily add new layers to perform transfer learning. This feature can be found in the related model page when an extra argument (e.g., include_top) has been integrated into the model construction by the model developer. The value of `include_top` is True or False, indicating whether to keep the top layer in the fully-connected network. -We use GoogleNet as example to illustrate how to load a model trained on ImageNet dataset and then perform transfer learning (re-training) on specific sub-task dataset. The main steps are listed below: +We use GoogleNet as example to illustrate how to load a model trained on ImageNet dataset and then perform transfer learning (re-training) on specific sub-task dataset. The main steps are listed below: -1. Search the model of interest on [MindSpore Hub Website](https://www.mindspore.cn/resources/hub/) and get the related `url`. +1. Search the model of interest on [MindSpore Hub Website](https://www.mindspore.cn/resources/hub/) and get the related `url`. 2. Load the model from MindSpore Hub using the `url`. Note that the parameter `include_top` is provided by the model developer. @@ -142,7 +143,7 @@ We use GoogleNet as example to illustrate how to load a model trained on ImageNe super(ReduceMeanFlatten, self).__init__() self.mean = P.ReduceMean(keep_dims=True) self.flatten = nn.Flatten() - + def construct(self, x): x = self.mean(x, (2, 3)) x = self.flatten(x) @@ -197,7 +198,7 @@ We use GoogleNet as example to illustrate how to load a model trained on ImageNe data, label = items data = mindspore.Tensor(data) label = mindspore.Tensor(label) - + loss = train_net(data, label) print(f"epoch: {epoch}/{epoch_size}, loss: {loss}") # Save the ckpt file for each epoch. @@ -218,7 +219,7 @@ We use GoogleNet as example to illustrate how to load a model trained on ImageNe classification_layer = nn.Dense(last_channel, num_classes) classification_layer.set_train(False) softmax = nn.Softmax() - network = nn.SequentialCell([network, reducemean_flatten, + network = nn.SequentialCell([network, reducemean_flatten, classification_layer, softmax]) # Load a pre-trained ckpt file. @@ -237,4 +238,4 @@ We use GoogleNet as example to illustrate how to load a model trained on ImageNe res = model.eval(eval_dataset) print("result:", res, "ckpt=", ckpt_path) - ``` \ No newline at end of file + ``` diff --git a/tutorials/training/source_en/use/publish_model.md b/tutorials/training/source_en/use/publish_model.md index 2d208ae971..fc0e39991d 100644 --- a/tutorials/training/source_en/use/publish_model.md +++ b/tutorials/training/source_en/use/publish_model.md @@ -14,15 +14,15 @@ ## Overview -[MindSpore Hub](https://www.mindspore.cn/resources/hub/) is a platform for storing pre-trained models provided by MindSpore or third-party developers. It provides application developers with simple model loading and fine-tuning APIs, which enables the users to perform inference or fine-tuning based on the pre-trained models and thus deploy to their own applications. Users can also submit their pre-trained models into MindSpore Hub following the specific steps. Thus other users can download and use the published models. +[MindSpore Hub](https://www.mindspore.cn/resources/hub/) is a platform for storing pre-trained models provided by MindSpore or third-party developers. It provides application developers with simple model loading and fine-tuning APIs, which enables the users to perform inference or fine-tuning based on the pre-trained models and thus deploy to their own applications. Users can also submit their pre-trained models into MindSpore Hub following the specific steps. Thus other users can download and use the published models. This tutorial uses GoogleNet as an example to describe how to submit models for model developers who are interested in publishing models into MindSpore Hub. ## How to publish models -You can publish models to MindSpore Hub via PR in [hub](https://gitee.com/mindspore/hub) repo. Here we use GoogleNet as an example to list the steps of model submission to MindSpore Hub. +You can publish models to MindSpore Hub via PR in [hub](https://gitee.com/mindspore/hub) repo. Here we use GoogleNet as an example to list the steps of model submission to MindSpore Hub. -1. Host your pre-trained model in a storage location where we are able to access. +1. Host your pre-trained model in a storage location where we are able to access. 2. Add a model generation python file called `mindspore_hub_conf.py` in your own repo using this [template](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/googlenet/mindspore_hub_conf.py). The location of the `mindspore_hub_conf.py` file is shown below: @@ -47,11 +47,11 @@ You can publish models to MindSpore Hub via PR in [hub](https://gitee.com/mindsp | ├── gpu | ├── 0.7 | ├── ascend - | ├── 0.7 + | ├── 0.7 | ├── googlenet_v1_cifar10.md │   ├── tools | ├── md_validator.py - | └── md_validator.py + | └── md_validator.py ``` Note that it is required to fill in the `{model_name}_{model_version}_{dataset}.md` template by providing `file-format`、`asset-link` and `asset-sha256` below, which refers to the model file format, model storage location from step 1 and model hash value, respectively. @@ -60,7 +60,7 @@ You can publish models to MindSpore Hub via PR in [hub](https://gitee.com/mindsp file-format: ckpt asset-link: https://download.mindspore.cn/model_zoo/official/cv/googlenet/goolenet_ascend_0.2.0_cifar10_official_classification_20200713/googlenet.ckpt asset-sha256: 114e5acc31dad444fa8ed2aafa02ca34734419f602b9299f3b53013dfc71b0f7 - ``` + ``` The MindSpore Hub supports multiple model file formats including: - [MindSpore CKPT](https://www.mindspore.cn/tutorial/training/en/master/use/save_model.html#checkpoint-configuration-policies) @@ -81,6 +81,6 @@ You can publish models to MindSpore Hub via PR in [hub](https://gitee.com/mindsp python md_validator.py ../assets/mindspore/ascend/0.7/googlenet_v1_cifar10.md ``` -5. Create a PR in `mindspore/hub` repo. See our [Contributor Wiki](https://gitee.com/mindspore/mindspore/blob/master/CONTRIBUTING.md#) for more information about creating a PR. +5. Create a PR in `mindspore/hub` repo. See our [Contributor Wiki](https://gitee.com/mindspore/mindspore/blob/master/CONTRIBUTING.md#) for more information about creating a PR. -Once your PR is merged into master branch here, your model will show up in [MindSpore Hub Website](https://www.mindspore.cn/resources/hub) within 24 hours. Please refer to [README](https://gitee.com/mindspore/hub/blob/master/mshub_res/README.md#) for more information about model submission. +Once your PR is merged into master branch here, your model will show up in [MindSpore Hub Website](https://www.mindspore.cn/resources/hub) within 24 hours. Please refer to [README](https://gitee.com/mindspore/hub/blob/master/mshub_res/README.md#) for more information about model submission. diff --git a/tutorials/training/source_en/use/save_model.md b/tutorials/training/source_en/use/save_model.md index d21e33e2e0..98b4938598 100644 --- a/tutorials/training/source_en/use/save_model.md +++ b/tutorials/training/source_en/use/save_model.md @@ -35,6 +35,7 @@ During model training, use the callback mechanism to transfer the object of the You can use the `CheckpointConfig` object to set the CheckPoint saving policies. The saved parameters are classified into network parameters and optimizer parameters. `ModelCheckpoint` provides default configuration policies for users to quickly get started. The following describes the usage: + ```python from mindspore.train.callback import ModelCheckpoint ckpoint_cb = ModelCheckpoint() @@ -61,7 +62,7 @@ Create a `ModelCheckpoint` object and transfer it to the model.train method. The Generated CheckPoint files are as follows: -``` +```text resnet50-graph.meta # Generate compiled computation graph. resnet50-1_32.ckpt # The file name extension is .ckpt. resnet50-2_32.ckpt # The file name format contains the epoch and step correspond to the saved parameters. @@ -100,6 +101,7 @@ When you have a CheckPoint file, if you want to do inference on device, you need If you want to do inference on the device, then you need to generate corresponding MINDIR models based on the network and CheckPoint. Currently we support the export of MINDIR models for inference based on graph mode, which don't contain control flow. Taking the export of MINDIR model as an example to illustrate the implementation of model export, the code is as follows: + ```python from mindspore.train.serialization import export import numpy as np @@ -133,7 +135,7 @@ input = np.random.uniform(0.0, 1.0, size=[32, 3, 224, 224]).astype(np.float32) export(resnet, Tensor(input), file_name='resnet50-2_32.air', file_format='AIR') ``` -Before using the `export` interface, you need to import` mindspore.train.serialization`. +Before using the `export` interface, you need to import`mindspore.train.serialization`. The `input` parameter is used to specify the input shape and the data type of the exported model. -- Gitee From 22deeb859ce252364445cb70a0fd1bc46ed27579 Mon Sep 17 00:00:00 2001 From: JunYuLiu Date: Mon, 19 Oct 2020 16:02:37 +0800 Subject: [PATCH 17/21] Modify the format of markdown --- .../constraints_on_network_construction.md | 208 ++++++++++-------- .../mindarmour/differential_privacy_design.md | 24 +- .../design/mindarmour/fuzzer_design.md | 1 - .../design/mindinsight/graph_visual_design.md | 6 +- .../mindinsight/tensor_visual_design.md | 12 +- .../design/mindspore/architecture_lite.md | 6 +- .../mindspore/distributed_training_design.md | 15 +- .../source_zh_cn/design/mindspore/mindir.md | 41 +++- .../design/mindspore/profiler_design.md | 53 +++-- .../design/technical_white_paper.md | 4 +- docs/note/source_zh_cn/glossary.md | 2 +- docs/note/source_zh_cn/help_seeking_path.md | 28 ++- .../source_zh_cn/image_classification_lite.md | 3 +- docs/note/source_zh_cn/network_list_ms.md | 4 +- .../source_zh_cn/object_detection_lite.md | 1 - .../source_zh_cn/operator_list_implicit.md | 28 +-- docs/note/source_zh_cn/operator_list_lite.md | 2 +- docs/note/source_zh_cn/operator_list_ms.md | 16 +- docs/note/source_zh_cn/roadmap.md | 90 ++++---- .../source_en/api_structure.md | 1 + docs/programming_guide/source_en/dtype.md | 12 +- docs/programming_guide/source_en/tensor.md | 20 +- .../source_zh_cn/api_structure.md | 1 + .../source_zh_cn/augmentation.md | 15 +- .../source_zh_cn/auto_parallel.md | 30 ++- .../source_zh_cn/callback.md | 6 +- docs/programming_guide/source_zh_cn/cell.md | 31 ++- .../programming_guide/source_zh_cn/context.md | 19 +- .../source_zh_cn/dataset_conversion.md | 36 +-- .../source_zh_cn/dataset_loading.md | 22 +- docs/programming_guide/source_zh_cn/dtype.md | 10 +- .../source_zh_cn/network_component.md | 18 +- .../source_zh_cn/operator.md | 102 +++++++-- docs/programming_guide/source_zh_cn/optim.md | 24 +- .../source_zh_cn/parameter.md | 31 +-- .../source_zh_cn/pipeline.md | 12 +- .../source_zh_cn/probability.md | 163 +++++++++++--- 37 files changed, 676 insertions(+), 421 deletions(-) diff --git a/docs/note/source_zh_cn/constraints_on_network_construction.md b/docs/note/source_zh_cn/constraints_on_network_construction.md index 72347abf1a..0678b7d4e7 100644 --- a/docs/note/source_zh_cn/constraints_on_network_construction.md +++ b/docs/note/source_zh_cn/constraints_on_network_construction.md @@ -28,21 +28,26 @@ ## 概述 + MindSpore完成从用户源码到计算图的编译,用户源码基于Python语法编写,当前MindSpore支持将普通函数或者继承自nn.Cell的实例转换生成计算图,暂不支持将任意Python源码转换成计算图,所以对于用户源码支持的写法有所限制,主要包括语法约束和网络定义约束两方面。随着MindSpore的演进,这些约束可能会发生变化。 ## 语法约束 + ### 支持的Python数据类型 -* Number:包括`int`、`float`、`bool`,不支持复数类型。 -* String -* List:当前只支持append方法;List的更新会拷贝生成新的List。 -* Tuple -* Dictionary:当前`key`只支持String类型 + +- Number:包括`int`、`float`、`bool`,不支持复数类型。 +- String +- List:当前只支持append方法;List的更新会拷贝生成新的List。 +- Tuple +- Dictionary:当前`key`只支持String类型 + ### MindSpore扩展数据类型 -* Tensor:Tensor变量必须是已定义实例。 + +- Tensor:Tensor变量必须是已定义实例。 ### 表达式类型 -| 操作名 | 具体操作 +| 操作名 | 具体操作 | :----------- |:-------- | 一元操作符 |`+`、`-`、`not`,其中`+`操作符只支持标量。 | 数学表达式 |`+`、`-`、`*`、`/`、`%`、`**`、`//` @@ -81,10 +86,11 @@ | `isinstance` | 使用原则与Python一致,但第二个入参只能是mindspore定义的类型。 ### 函数参数 -* 参数默认值:目前不支持默认值设为`Tensor`类型数据,支持`int`、`float`、`bool`、`None`、`str`、`tuple`、`list`、`dict`类型数据。 -* 可变参数:支持带可变参数网络的推理和训练。 -* 键值对参数:目前不支持带键值对参数的函数求反向。 -* 可变键值对参数:目前不支持带可变键值对的函数求反向。 + +- 参数默认值:目前不支持默认值设为`Tensor`类型数据,支持`int`、`float`、`bool`、`None`、`str`、`tuple`、`list`、`dict`类型数据。 +- 可变参数:支持带可变参数网络的推理和训练。 +- 键值对参数:目前不支持带键值对参数的函数求反向。 +- 可变键值对参数:目前不支持带可变键值对的函数求反向。 ### 操作符 @@ -104,51 +110,52 @@ 索引操作包含`tuple`和`Tensor`的索引操作。下面重点介绍一下`Tensor`的索引取值和赋值操作,取值以`tensor_x[index]`为例,赋值以`tensor_x[index] = u`为例进行详细说明。其中tensor_x是一个`Tensor`,对其进行切片操作;index表示索引,u表示赋予的值,可以是`scalar`或者`Tensor(size=1)`。索引类型如下: - 切片索引:index为`slice` - - 取值:`tensor_x[start:stop:step]`,其中Slice(start:stop:step)与Python的语法相同,这里不再赘述。 - - 赋值:`tensor_x[start:stop:step]=u`。 + - 取值:`tensor_x[start:stop:step]`,其中Slice(start:stop:step)与Python的语法相同,这里不再赘述。 + - 赋值:`tensor_x[start:stop:step]=u`。 - Ellipsis索引:index为`ellipsis` - - 取值:`tensor_x[...]`。 - - 赋值:`tensor_x[...]=u`。 + - 取值:`tensor_x[...]`。 + - 赋值:`tensor_x[...]=u`。 - 布尔常量索引:index为`True`,index为`False`暂不支持。 - - 取值:`tensor_x[True]`。 - - 赋值:暂不支持。 + - 取值:`tensor_x[True]`。 + - 赋值:暂不支持。 - Tensor索引:index为`Tensor` - - 取值:`tensor_x[index]`,`index`必须是`int32`、`int64`类型的`Tensor`,元素取值范围在`[0, tensor_x.shape[0])`。 - - 赋值:`tensor_x[index]=U`。 - - `tensor_x`的数据类型必须是下面一种: `float16`,`float32`,`int8`,`uint8`。 - - `index`必须是`int32`类型的`Tensor`,元素取值范围在`[0, tensor_x.shape[0])`。 - - `U`可以是`Number`,`Tensor`,只包含`Number`的`Tuple`,只包含`Tensor`的`Tuple`。 - - 单个`Number`和`Tuple`里的每个`Number`必须与`tensor_x`的数据类型属于同一类,即 + - 取值:`tensor_x[index]`,`index`必须是`int32`、`int64`类型的`Tensor`,元素取值范围在`[0, tensor_x.shape[0])`。 + - 赋值:`tensor_x[index]=U`。 + - `tensor_x`的数据类型必须是下面一种: `float16`,`float32`,`int8`,`uint8`。 + - `index`必须是`int32`类型的`Tensor`,元素取值范围在`[0, tensor_x.shape[0])`。 + - `U`可以是`Number`,`Tensor`,只包含`Number`的`Tuple`,只包含`Tensor`的`Tuple`。 + - 单个`Number`和`Tuple`里的每个`Number`必须与`tensor_x`的数据类型属于同一类,即 当`tensor_x`的数据类型是`uint8`或者`int8`时,`Number`类型应该是`int`; 当`tensor_x`的数据类型是`float16`或者`float32`时,`Number`类型应该是`float`。 - - 单个`Tensor`和`Tuple`里的每个`Tensor`必须与`tensor_x`的数据类型一致, + - 单个`Tensor`和`Tuple`里的每个`Tensor`必须与`tensor_x`的数据类型一致, 单个`Tensor`时,其`shape`需等于或者可广播为`index.shape + tensor_x.shape[1:]`。 - - 包含`Number`的`Tuple`需满足下面条件: + - 包含`Number`的`Tuple`需满足下面条件: `len(Tuple) = (index.shape + tensor_x.shape[1:])[-1]`。 - - 包含`Tensor`的`Tuple`需满足下面条件: + - 包含`Tensor`的`Tuple`需满足下面条件: 每个`Tensor`的`shape`一样; `(len(Tuple),) + Tensor.shape`等于或者可广播为`index.shape + tensor_x.shape[1:]`。 - None常量索引:index为`None` - - 取值:`tensor_x[None]`,结果与numpy保持一致。 - - 赋值:暂不支持。 + - 取值:`tensor_x[None]`,结果与numpy保持一致。 + - 赋值:暂不支持。 - tuple索引:index为`tuple` - - tuple元素为slice: - - 取值:例如`tensor_x[::, :4, 3:0:-1]`。 - - 赋值:例如`tensor_x[::, :4, 3:0:-1]=u`。 - - tuple元素为Number: - - 取值:例如`tensor_x[2,1]`。 - - 赋值:例如`tensor_x[1,4]=u`。 - - tuple元素为slice和ellipsis混合情况: - - 取值:例如`tensor_x[..., ::, 1:]` - - 赋值:例如`tensor_x[..., ::, 1:]=u` - - 其他情况暂不支持 + - tuple元素为slice: + - 取值:例如`tensor_x[::, :4, 3:0:-1]`。 + - 赋值:例如`tensor_x[::, :4, 3:0:-1]=u`。 + - tuple元素为Number: + - 取值:例如`tensor_x[2,1]`。 + - 赋值:例如`tensor_x[1,4]=u`。 + - tuple元素为slice和ellipsis混合情况: + - 取值:例如`tensor_x[..., ::, 1:]` + - 赋值:例如`tensor_x[..., ::, 1:]=u` + - 其他情况暂不支持 tuple和list类型的索引取值操作,需要重点介绍一下元素类型为`nn.Cell`的tuple或list的索引取值操作,该操作目前在Graph模式下仅GPU后端支持运行,其语法格式形如`layers[index](*inputs)`,具体示例代码如下: + ```python class Net(nn.Cell): def __init__(self): @@ -161,60 +168,68 @@ tuple和list类型的索引取值操作,需要重点介绍一下元素类型 x = self.layers[index](x) return x ``` + 同时该语法有以下几个约束: -* 只支持元素类型为`nn.Cell`的tuple或list的索引取值操作。 -* 索引值index的类型为`int32`的Tensor标量,取值范围为`[-n, n)`, 其中`n`为tuple的size,支持的tuple的size的最大值为1000。 -* tuple中的每个Cell元素的Construct函数的输入数据的数目,类型和shape维度要求相同,且Construct函数运行后输出的数据的数目,类型和shape维度也要求相同。 -* tuple中的每个Cell元素,需要在tuple定义之前完成定义。 -* 该语法不支持做为if、while、for等控制流的运行分支,如果控制流的控制条件为常量除外。举例说明: - - 支持的写法: - ```python - class Net(nn.Cell): - def __init__(self, flag=True): - super(Net, self).__init__() - self.flag = flag - self.relu = nn.ReLU() - self.softmax = nn.Softmax() - self.layers = (self.relu, self.softmax) - def construct(self, x, index): - if self.flag: - x = self.layers[index](x) - return x - ``` - - 不支持的写法: - ```python - class Net(nn.Cell): - def __init__(self): - super(Net, self).__init__() - self.relu = nn.ReLU() - self.softmax = nn.Softmax() - self.layers = (self.relu, self.softmax) +- 只支持元素类型为`nn.Cell`的tuple或list的索引取值操作。 +- 索引值index的类型为`int32`的Tensor标量,取值范围为`[-n, n)`, 其中`n`为tuple的size,支持的tuple的size的最大值为1000。 +- tuple中的每个Cell元素的Construct函数的输入数据的数目,类型和shape维度要求相同,且Construct函数运行后输出的数据的数目,类型和shape维度也要求相同。 +- tuple中的每个Cell元素,需要在tuple定义之前完成定义。 +- 该语法不支持做为if、while、for等控制流的运行分支,如果控制流的控制条件为常量除外。举例说明: + - 支持的写法: - def construct(self, x, index, flag): - if flag: - x = self.layers[index](x) - return x - ``` + ```python + class Net(nn.Cell): + def __init__(self, flag=True): + super(Net, self).__init__() + self.flag = flag + self.relu = nn.ReLU() + self.softmax = nn.Softmax() + self.layers = (self.relu, self.softmax) + + def construct(self, x, index): + if self.flag: + x = self.layers[index](x) + return x + ``` + + - 不支持的写法: + + ```python + class Net(nn.Cell): + def __init__(self): + super(Net, self).__init__() + self.relu = nn.ReLU() + self.softmax = nn.Softmax() + self.layers = (self.relu, self.softmax) + + def construct(self, x, index, flag): + if flag: + x = self.layers[index](x) + return x + ``` tuple也支持切片取值操作, 但不支持切片类型为Tensor类型,支持`tuple_x[start:stop:step]`,其中操作对象为与Python的效果相同,这里不再赘述。 ### 不支持的语法 -目前在网络构造函数里面暂不支持以下语法: +目前在网络构造函数里面暂不支持以下语法: `raise`、 `yield`、 `async for`、 `with`、 `async with`、 `assert`、 `import`、 `await`。 ## 网络定义约束 ### 整网实例类型 -* 带[@ms_function](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.html#mindspore.ms_function)装饰器的普通Python函数。 -* 继承自[nn.Cell](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.Cell)的Cell子类。 + +- 带[@ms_function](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.html#mindspore.ms_function)装饰器的普通Python函数。 +- 继承自[nn.Cell](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.Cell)的Cell子类。 ### 网络输入类型 -* 整网的训练数据输入参数只能是Tensor类型。 -* 生成的ANF图里面不能包含这几种常量节点:字符串类型常量、带有Tuple嵌套的常量、带有List嵌套的常量。 + +- 整网的训练数据输入参数只能是Tensor类型。 +- 生成的ANF图里面不能包含这几种常量节点:字符串类型常量、带有Tuple嵌套的常量、带有List嵌套的常量。 ### 网络图优化 + 在ME前端图优化过程中,会将DataClass类型、Dictionary、List、键值对操作转换为Tuple相关操作。 ### 网络构造组件 @@ -229,33 +244,36 @@ tuple也支持切片取值操作, 但不支持切片类型为Tensor类型,支 | Composite算子 |[mindspore/ops/composite/*](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html) | constexpr生成算子 |使用[@constexpr](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.constexpr)生成的值计算算子。 - ### 其他约束 + 1. 整网`construct`函数输入的参数以及使用`ms_function`装饰器修饰的函数的参数在图编译过程中会进行泛化,不能作为常量输入传给算子使用。所以,在图模式下,限制入口网络的参数只能是`Tensor`,如下例所示: - - * 错误的写法如下: + + - 错误的写法如下: + ```python class ExpandDimsTest(Cell): def __init__(self): super(ExpandDimsTest, self).__init__() self.expandDims = P.ExpandDims() - + def construct(self, input_x, input_axis): return self.expandDims(input_x, input_axis) expand_dim = ExpandDimsTest() input_x = Tensor(np.random.randn(2,2,2,2).astype(np.float32)) expand_dim(input_x, 0) ``` + 在示例中,`ExpandDimsTest`是一个只有单算子的网络,网络的输入有`input_x`和`input_axis`两个。因为`ExpandDims`算子的第二个输入需要是常量,这是因为在图编译过程中推导`ExpandDims`算子输出维度的时候需要用到,而`input_axis`作为网络参数输入会泛化成变量,无法确定其值,从而无法推导算子的输出维度导致图编译失败。所以在图编译阶段需要值推导的输入都应该是常量输入。在API中,这类算子需要常量输入的参数会进行说明,标注"constant input is needed"。 - - * 正确的写法是在construct函数里面对算子的常量输入直接填入需要的值或者是一个类的成员变量,如下: + + - 正确的写法是在construct函数里面对算子的常量输入直接填入需要的值或者是一个类的成员变量,如下: + ```python class ExpandDimsTest(Cell): def __init__(self, axis): super(ExpandDimsTest, self).__init__() self.expandDims = P.ExpandDims() self.axis = axis - + def construct(self, input_x): return self.expandDims(input_x, self.axis) axis = 0 @@ -266,48 +284,53 @@ tuple也支持切片取值操作, 但不支持切片类型为Tensor类型,支 2. 不允许修改网络的非`Parameter`类型数据成员。示例如下: - ``` + ```python class Net(Cell): def __init__(self): super(Net, self).__init__() self.num = 2 self.par = Parameter(Tensor(np.ones((2, 3, 4))), name="par") - + def construct(self, x, y): return x + y ``` + 上面所定义的网络里,`self.num`不是一个`Parameter`,不允许被修改,而`self.par`是一个`Parameter`,可以被修改。 3. 当`construct`函数里,使用未定义的类成员时,不会像Python解释器那样抛出`AttributeError`,而是作为`None`处理。示例如下: - ``` + + ```python class Net(Cell): def __init__(self): super(Net, self).__init__() - + def construct(self, x): return x + self.y ``` + 上面所定义的网络里,`construct`里使用了并未定义的类成员`self.y`,此时会将`self.y`作为`None`处理。 - + 4. 当`construct`函数里,使用`if-else`控制流时,`if`和`else`返回的数据类型或者同一变量被更新后的数据类型必须一致,示例如下: - ``` + + ```python class NetReturn(Cell): def __init__(self): super(NetReturn, self).__init__() - + def construct(self, x, y, m, n): if x > y: return m else: return n ``` + 上面所定义的网络`NetReturn`里,`construct`里使用了`if-else`控制流,那么`if`分支返回的`m`和`else`分支返回的`n`数据类型必须一致。 - - ``` + + ```python class NetAssign(Cell): def __init__(self): super(NetAssign, self).__init__() - + def construct(self, x, y, m, n): out = None if x > y: @@ -316,4 +339,5 @@ tuple也支持切片取值操作, 但不支持切片类型为Tensor类型,支 out = n return out ``` + 上面所定义的网络`NetAssign`里,`construct`里使用了`if-else`控制流,那么`if`分支更新后的`out`和`else`分支更新后的`out`的数据类型必须一致。 diff --git a/docs/note/source_zh_cn/design/mindarmour/differential_privacy_design.md b/docs/note/source_zh_cn/design/mindarmour/differential_privacy_design.md index 608841c576..256d719bcf 100644 --- a/docs/note/source_zh_cn/design/mindarmour/differential_privacy_design.md +++ b/docs/note/source_zh_cn/design/mindarmour/differential_privacy_design.md @@ -26,14 +26,13 @@ MindArmour的Differential-Privacy模块实现了差分隐私训练的能力。 图1是差分隐私训练的总体设计,主要由差分隐私噪声机制(DP Mechanisms)、差分隐私优化器(DP Optimizer)、差分隐私监控器(Privacy Monitor)组成。 - ### 差分隐私优化器 差分隐私优化器继承了MindSpore优化器的能力,并使用差分隐私的噪声机制对梯度加扰保护。目前,MindArmour提供三类差分隐私优化器:固定高斯优化器、自适应高斯优化器、自适应裁剪优化器,每类差分隐私优化器从不同的角度为SGD、Momentum等常规优化器增加差分隐私保护的能力。 -* 固定高斯优化器,是一种非自适应高斯噪声的差分隐私优化器。其优势在于可以严格控制差分隐私预算ϵ,缺点是在模型训练过程中,每个Step添加的噪声量固定,若迭代次数过大,训练后期的噪声使得模型收敛困难,甚至导致性能大幅下跌,模型可用性差。 -* 自适应高斯优化器,通过自适应调整标准差,来调整高斯分布噪声的大小,在模型训练初期,添加的噪声量较大,随着模型逐渐收敛,噪声量逐渐减小,噪声对于模型可用性的影响减小。自适应高斯噪声的缺点是不能严格控制差分隐私预算。 -* 自适应裁剪优化器,是一种自适应调整调整裁剪粒度的差分隐私优化器,梯度裁剪是差分隐私训练的一个重要操作,自适应裁剪优化器能够自适应的控制梯度裁剪的的比例在给定的范围波动,控制迭代训练过程中梯度裁剪的粒度。 +- 固定高斯优化器,是一种非自适应高斯噪声的差分隐私优化器。其优势在于可以严格控制差分隐私预算ϵ,缺点是在模型训练过程中,每个Step添加的噪声量固定,若迭代次数过大,训练后期的噪声使得模型收敛困难,甚至导致性能大幅下跌,模型可用性差。 +- 自适应高斯优化器,通过自适应调整标准差,来调整高斯分布噪声的大小,在模型训练初期,添加的噪声量较大,随着模型逐渐收敛,噪声量逐渐减小,噪声对于模型可用性的影响减小。自适应高斯噪声的缺点是不能严格控制差分隐私预算。 +- 自适应裁剪优化器,是一种自适应调整调整裁剪粒度的差分隐私优化器,梯度裁剪是差分隐私训练的一个重要操作,自适应裁剪优化器能够自适应的控制梯度裁剪的的比例在给定的范围波动,控制迭代训练过程中梯度裁剪的粒度。 ### 差分隐私的噪声机制 @@ -41,25 +40,24 @@ MindArmour的Differential-Privacy模块实现了差分隐私训练的能力。 ### Monitor -Monitor提供RDP、ZCDP等回调函数,用于监测模型的差分隐私预算。 +Monitor提供RDP、ZCDP等回调函数,用于监测模型的差分隐私预算。 -* ZCDP[2] +- ZCDP[2] ZCDP,zero-concentrated differential privacy,是一种宽松的差分隐私定义,利用Rényi散度来度量随机函数在相邻数据集上的分布差异。 -* RDP[3] +- RDP[3] RDP,Rényi Differential Privacy,是一种更通用的基于R'enyi散度的差分隐私定义,利用Rényi散度来度量两个相邻数据集的分布差异。 - -相对于传统差分隐私,ZCDP和RDP都能能够提供更加严格的隐私预算上界保证。 +相对于传统差分隐私,ZCDP和RDP都能能够提供更加严格的隐私预算上界保证。 ## 代码实现 -* [mechanisms.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/mechanisms/mechanisms.py):这个文件实现了差分隐私训练所需的噪声生成机制,包括简单高斯噪声、自适应高斯噪声、自适应裁剪高斯噪声等。 -* [optimizer.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/optimizer/optimizer.py):这个文件实现了使用噪声生成机制在反向传播时添加噪声的根本逻辑。 -* [monitor.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/monitor/monitor.py):实现了计算差分隐私预算的回调函数,模型训练过程中,会反馈当前的差分隐私预算。 -* [model.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/train/model.py):这个文件实现了计算损失和梯度的逻辑,差分隐私训练的梯度截断逻辑在此文件中实现,且model.py是用户使用差分隐私训练能力的入口。 +- [mechanisms.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/mechanisms/mechanisms.py):这个文件实现了差分隐私训练所需的噪声生成机制,包括简单高斯噪声、自适应高斯噪声、自适应裁剪高斯噪声等。 +- [optimizer.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/optimizer/optimizer.py):这个文件实现了使用噪声生成机制在反向传播时添加噪声的根本逻辑。 +- [monitor.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/monitor/monitor.py):实现了计算差分隐私预算的回调函数,模型训练过程中,会反馈当前的差分隐私预算。 +- [model.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/diff_privacy/train/model.py):这个文件实现了计算损失和梯度的逻辑,差分隐私训练的梯度截断逻辑在此文件中实现,且model.py是用户使用差分隐私训练能力的入口。 ## 参考文献 diff --git a/docs/note/source_zh_cn/design/mindarmour/fuzzer_design.md b/docs/note/source_zh_cn/design/mindarmour/fuzzer_design.md index 8f7fcbf81c..0d753d7bb9 100644 --- a/docs/note/source_zh_cn/design/mindarmour/fuzzer_design.md +++ b/docs/note/source_zh_cn/design/mindarmour/fuzzer_design.md @@ -2,7 +2,6 @@ `Linux` `Ascend` `GPU` `CPU` `数据准备` `模型开发` `模型训练` `模型调优` `企业` `高级` - - [AI模型安全测试](#ai模型安全测试) - [背景](#背景) diff --git a/docs/note/source_zh_cn/design/mindinsight/graph_visual_design.md b/docs/note/source_zh_cn/design/mindinsight/graph_visual_design.md index 600da5f29c..be8a8c686b 100644 --- a/docs/note/source_zh_cn/design/mindinsight/graph_visual_design.md +++ b/docs/note/source_zh_cn/design/mindinsight/graph_visual_design.md @@ -21,9 +21,9 @@ 计算图可视的功能,主要协助开发者在下面这些场景中使用。 - - 开发者在编写深度学习神经网络的代码时,可以使用计算图的功能查看神经网络中算子的数据流走向,以及模型结构。 - - 计算图还可以方便开发者查看指定节点的输入和输出节点,以及所查找的节点的属性信息。 - - 开发者在调试网络时,可以通过可视化的计算图,轻易跟踪数据,包括数据维度、类型的变更等。 +- 开发者在编写深度学习神经网络的代码时,可以使用计算图的功能查看神经网络中算子的数据流走向,以及模型结构。 +- 计算图还可以方便开发者查看指定节点的输入和输出节点,以及所查找的节点的属性信息。 +- 开发者在调试网络时,可以通过可视化的计算图,轻易跟踪数据,包括数据维度、类型的变更等。 ## 总体设计 diff --git a/docs/note/source_zh_cn/design/mindinsight/tensor_visual_design.md b/docs/note/source_zh_cn/design/mindinsight/tensor_visual_design.md index b8439752e6..44d4db5b12 100644 --- a/docs/note/source_zh_cn/design/mindinsight/tensor_visual_design.md +++ b/docs/note/source_zh_cn/design/mindinsight/tensor_visual_design.md @@ -60,7 +60,8 @@ Tensor可视支持1-N维的Tensor以表格或直方图的形式展示,对于0 #### 文件接口设计 `summary.proto`文件为总入口,其中张量的数据(TensorProto)存放在Summary的Value中,如下所示: -``` + +```protobuf { message Summary { message Image { @@ -69,7 +70,7 @@ Tensor可视支持1-N维的Tensor以表格或直方图的形式展示,对于0 required int32 width = 2; ... } - + message Histogram { message bucket{ // Counting number of values fallen in [left, left + width). @@ -78,7 +79,7 @@ Tensor可视支持1-N维的Tensor以表格或直方图的形式展示,对于0 required double width = 2; required int64 count = 3; } - + repeated bucket buckets = 1; ... } @@ -86,7 +87,7 @@ Tensor可视支持1-N维的Tensor以表格或直方图的形式展示,对于0 message Value { // Tag name for the data. required string tag = 1; - + // Value associated with the tag. oneof value { float scalar_value = 3; @@ -100,4 +101,5 @@ Tensor可视支持1-N维的Tensor以表格或直方图的形式展示,对于0 repeated Value value = 1; } ``` -而TensorProto的定义在[anf_ir.proto](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/utils/anf_ir.proto)文件中。 \ No newline at end of file + +而TensorProto的定义在[anf_ir.proto](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/utils/anf_ir.proto)文件中。 diff --git a/docs/note/source_zh_cn/design/mindspore/architecture_lite.md b/docs/note/source_zh_cn/design/mindspore/architecture_lite.md index eecfd0610d..23738f4426 100644 --- a/docs/note/source_zh_cn/design/mindspore/architecture_lite.md +++ b/docs/note/source_zh_cn/design/mindspore/architecture_lite.md @@ -2,7 +2,6 @@ `Linux` `Windows` `端侧` `推理应用` `中级` `高级` `贡献者` - MindSpore Lite框架的总体架构如下所示: @@ -15,9 +14,8 @@ MindSpore Lite框架的总体架构如下所示: - **Backend:** 基于IR进行图优化,包括GHLO、GLLO和量化三部分。其中,GHLO负责和硬件无关的优化,如算子融合、常量折叠等;GLLO负责与硬件相关的优化;量化Quantizer支持权重量化、激活值量化等训练后量化手段。 -- **Runtime:** 智能终端的推理运行时,其中session负责会话管理,提供对外接口;线程池和并行原语负责图执行使用的线程池管理,内存分配负责图执行中各个算子的内存复用,算子库提供CPU和GPU算子。 +- **Runtime:** 智能终端的推理运行时,其中session负责会话管理,提供对外接口;线程池和并行原语负责图执行使用的线程池管理,内存分配负责图执行中各个算子的内存复用,算子库提供CPU和GPU算子。 - **Micro:** IoT设备的运行时,包括模型生成.c文件、线程池、内存复用和算子库。 -其中,Runtime和Micro共享底层的算子库、内存分配、线程池、并行原语等基础设施层。 - +其中,Runtime和Micro共享底层的算子库、内存分配、线程池、并行原语等基础设施层。 diff --git a/docs/note/source_zh_cn/design/mindspore/distributed_training_design.md b/docs/note/source_zh_cn/design/mindspore/distributed_training_design.md index 5b67aa47b3..97a9a328b9 100644 --- a/docs/note/source_zh_cn/design/mindspore/distributed_training_design.md +++ b/docs/note/source_zh_cn/design/mindspore/distributed_training_design.md @@ -24,7 +24,6 @@ 随着深度学习的快步发展,为了提升神经网络的精度和泛化能力,数据集和参数量都在呈指数级向上攀升。分布式并行训练成为一种解决超大规模网络性能瓶颈的发展趋势。MindSpore支持了当前主流的分布式训练范式并开发了一套自动混合并行解决方案。本篇设计文档将会集中介绍几种并行训练方式的设计原理,同时指导用户进行自定义开发。 - ## 概念 ### 集合通信 @@ -74,7 +73,6 @@ - [grad_reducer.py](https://gitee.com/mindspore/mindspore/blob/master/mindspore/nn/wrap/grad_reducer.py):这个文件实现了梯度聚合的过程。对入参`grads`用`HyperMap`展开后插入`AllReduce`算子,这里采用的是全局通信组,用户也可以根据自己网络的需求仿照这个模块进行自定义开发。MindSpore中单机和分布式执行共用一套网络封装接口,在`Cell`内部通过`ParallelMode`来区分是否要对梯度做聚合操作,网络封装接口建议参考`TrainOneStepCell`代码实现。 - ## 自动并行 自动并行作为MindSpore的关键特性,用于实现自动的数据并行加模型并行的混合并行训练方式,旨在帮助用户以单机的脚本表达并行算法逻辑,降低分布式训练难度,提高算法研发效率,同时又能保持训练的高性能。这个小节介绍了在MindSpore中`ParallelMode.AUTO_PARALLEL`自动并行模式及`ParallelMode.SEMI_AUTO_PARALLEL`半自动并行模式是如何工作的。 @@ -90,34 +88,31 @@ 为了得到张量的排布模型,每个算子都具有切分策略(Shard Strategy),它表示算子的各个输入在相应维度的切分情况。通常情况下只要满足以2为基、均匀分配的原则,张量的任意维度均可切分。以下图为例,这是一个三维矩阵乘(BatchMatMul)操作,它的切分策略由两个元组构成,分别表示`input`和`weight`的切分形式。其中元组中的元素与张量维度一一对应,`2^N`为切分份数,`1`表示不切。当我们想表示一个数据并行切分策略时,即`input`的`batch`维度切分,其他维度不切,可以表达为`strategy=((2^N, 1, 1),(1, 1, 1))`;当表示一个模型并行切分策略时,即`weight`的非`batch`维度切分,这里以`channel`维度切分为例,其他维度不切,可以表达为`strategy=((1, 1, 1),(1, 1, 2^N))`;当表示一个混合并行切分策略时,其中一种切分策略为`strategy=((2^N, 1, 1),(1, 1, 2^N))`。 ![算子切分定义](./images/operator_split.png) - + 依据切分策略,分布式算子中定义了推导算子输入张量和输出张量的排布模型的方法。这个排布模型由`device_matrix`,`tensor_shape`和`tensor map`组成,分别表示设备矩阵形状、张量形状、设备和张量维度间的映射关系。分布式算子会进一步根据张量排布模型判断是否要在图中中插入额外的计算、通信操作,以保证算子运算逻辑正确。 2. 张量排布变换 当前一个算子的输出张量模型和后一个算子的输入张量模型不一致时,就需要引入计算、通信操作的方式实现张量排布间的变化。自动并行流程引入了张量重排布算法(Tensor Redistribution),可以推导得到任意排布的张量间通信转换方式。下面三个样例表示公式`Z=(X×W)×V`的并行计算过程, 即两个二维矩阵乘操作,体现了不同并行方式间如何转换。 在样例一中,第一个数据并行矩阵乘的输出在行方向上存在切分,而第二个模型并行矩阵乘的输入需要全量张量,框架将会自动插入`AllGather`算子实现排布变换。 - + ![张量排布变换](./images/tensor_redistribution1.png) - + 在样例二中,第一个模型并行矩阵乘的输出在列方向上存在切分,而第二个数据并行矩阵乘的输入在行方向上存在切分,框架将会自动插入等价于集合通信中`AlltoAll`操作的通信算子实现排布变换。 ![张量排布变换](./images/tensor_redistribution2.png) - 在样例三中,第一个混合并行矩阵乘的输出切分方式和第二个混合并行矩阵乘的输入切分方式一致,所以不需要引入重排布变换。但由于第二个矩阵乘操作中,两个输入的相关维度存在切分,所以需要插入`AllReduce`算子保证运算正确性。 ![张量排布变换](./images/tensor_redistribution3.png) - 综上,1、2两点是自动并行实现的基础,总体来说这种分布式表达打破了数据并行和模型并行的边界,轻松实现混合并行。从脚本层面上,用户仅需构造单机网络,即可表达并行算法逻辑,框架将自动实现对整图切分。 3. 切分策略搜索算法 当用户熟悉了算子的切分表达,并手动对算子配置切分策略,这就是`SEMI_AUTO_PARALLEL`半自动并行模式。这种方式对手动调优有帮助,但还是具有一定的调试难度,用户需要掌握并行原理,并根据网络结构、集群拓扑等计算分析得到高性能的并行方案。为了进一步帮助用户加速并行网络训练过程,在半自动并行模式的基础上,`AUTO_PARALLEL`自动并行模式引入了并行切分策略自动搜索的特性。自动并行围绕硬件平台构建相应的代价函数模型(Cost Model),计算出一定数据量、一定算子在不同切分策略下的计算开销(Computation Cost),内存开销(Memory Cost)及通信开销(Communication Cost)。然后通过动态规划算法(Dynamic Programming)或者递归规划算法(Recursive Programming),以单卡的内存上限为约束条件,高效地搜索出性能较优的切分策略。 - - 策略搜索这一步骤代替了用户手动指定模型切分,在短时间内可以得到较高性能的切分方案,极大降低了并行训练的使用门槛。 + 策略搜索这一步骤代替了用户手动指定模型切分,在短时间内可以得到较高性能的切分方案,极大降低了并行训练的使用门槛。 4. 分布式自动微分 @@ -140,7 +135,5 @@ 5. 整图切分 - [step_auto_parallel.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/frontend/parallel/step_auto_parallel.h), [step_parallel.h](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ccsrc/frontend/parallel/step_parallel.h):这两个文件包含了自动并行流程的核心实现。首先由`step_auto_parallel.h`调用策略搜索流程并产生分布式算子的`OperatorInfo`,然后在`step_parallel.h`中处理算子切分和张量重排布等流程,对单机计算图进行分布式改造。 - 6. 通信算子反向 - [grad_comm_ops.py](https://gitee.com/mindspore/mindspore/blob/master/mindspore/ops/_grad/grad_comm_ops.py):这个文件定义了`AllReduce`和`AllGather`等通信算子的反向操作。 - diff --git a/docs/note/source_zh_cn/design/mindspore/mindir.md b/docs/note/source_zh_cn/design/mindspore/mindir.md index e501365e37..01fd8b8ab7 100644 --- a/docs/note/source_zh_cn/design/mindspore/mindir.md +++ b/docs/note/source_zh_cn/design/mindspore/mindir.md @@ -20,13 +20,16 @@ ## 简介 + 中间表示(IR)是程序编译过程中介于源语言和目标语言之间的程序表示,以方便编译器进行程序分析和优化,因此IR的设计需要考虑从源语言到目标语言的转换难度,同时考虑程序分析和优化的易用性和性能。 MindIR是一种基于图表示的函数式IR,其最核心的目的是服务于自动微分变换。自动微分采用的是基于函数式编程框架的变换方法,因此IR采用了接近于ANF函数式的语义。此外,借鉴Sea of Nodes[1]和Thorin[2]的优秀设计,采用了一种基于显性依赖图的表示方式。 ## 文法定义 + ANF是函数式编程中常用且简洁的中间表示,其文法定义如下所示: -``` + +```text ::= NUMBER | STRING | VAR | BOOLEAN | PRIMOP | (lambda (VAR …) ) ::= ( …) @@ -34,17 +37,20 @@ ANF是函数式编程中常用且简洁的中间表示,其文法定义如下 ::= (let ([VAR ]) ) | | ``` + ANF中表达式分为原子表达式(aexp)和复合表达式(cexp),原子表达式表示一个常数值或一个变量或一个匿名函数;复合表达式由多个原子表达式复合组成,表示一个匿名函数或原语函数调用,组合的第一个输入是调用的函数,其余输入是调用的参数。 MindIR文法继承于ANF,其定义如下所示: -``` + +```text ::= | ::= Parameter ::= Scalar | Named | Tensor | Type | Shape - | Primitive | MetaFuncGraph | FuncGraph + | Primitive | MetaFuncGraph | FuncGraph ::= ( …) ::= | ``` + MindIR中的ANode对应于ANF的原子表达式,ANode有两个子类分别为ValueNode和ParameterNode。ValueNode表示常数节点,可承载一个常数值(标量、符号、张量、类型、维度等),也可以是一个原语函数(Primitive)或一个元函数(MetaFuncGraph)或一个普通函数(FuncGraph),因为在函数式编程中函数定义本身也是一个值。ParameterNode是参数节点,表示函数的形参。 MindIR中CNode对应于ANF的复合表达式,表示一次函数调用。 @@ -52,7 +58,9 @@ MindIR中CNode对应于ANF的复合表达式,表示一次函数调用。 在MindSpore自动微分时,会计算ParameterNode和CNode的梯度贡献,并返回最终ParameterNode的梯度,而不计算ValueNode的梯度。 ## 示例 + 下面以一段程序作为示例,对比理解MindIR。 + ```python def func(x, y): return x / y @@ -64,8 +72,10 @@ def test_f(x, y): c = b * func(a, b) return c ``` + 这段Python代码对应的ANF表达为: -``` + +```python lambda (x, y) let a = x - 1 in let b = a + y in @@ -76,26 +86,31 @@ lambda (x, y) let c = b * %1 in c end ``` + 对应的MindIR为[ir.dot](https://gitee.com/mindspore/docs/blob/master/docs/note/source_zh_cn/design/mindspore/images/ir/ir.dot): -![](./images/ir/ir.png) +![image](./images/ir/ir.png) 在MindIR中,一个函数图(FuncGraph)表示一个普通函数的定义,函数图一般由ParameterNode、ValueNode和CNode组成有向无环图,可以清晰地表达出从参数到返回值的计算过程。在上图中可以看出,python代码中两个函数`test_f`和`func`转换成了两个函数图,其参数`x`和`y`转换为函数图的ParameterNode,每一个表达式转换为一个CNode。CNode的第一个输入链接着调用的函数,例如图中的`add`、`func`、`return`。值得注意的是这些节点均是`ValueNode`,因为它们被理解为常数函数值。CNode的其他输入链接这调用的参数,参数值可以来自于ParameterNode、ValueNode和其他CNode。 在ANF中每个表达式都用let表达式绑定为一个变量,通过对变量的引用来表示对表达式输出的依赖,而在MindIR中每个表达式都绑定为一个节点,通过节点与节点之间的有向边表示依赖关系。 ## 如何保存IR + 通过`context.set_context(save_graphs=True)`来保存各个编译阶段的中间代码。被保存的中间代码有两种格式,一个是后缀名为`.ir`的文本格式,一个是后缀名为`.dot`的图形化格式。当网络规模不大时,建议使用更直观的图形化格式来查看,当网络规模较大时建议使用更高效的文本格式来查看。 DOT文件可以通过graphviz转换为图片格式来查看,例如将dot转换为png的命令是`dot -Tpng *.dot -o *.png`。 ## 函数式语义 + MindIR较传统计算图的一个重要特性是不仅可以表达算子之间的数据依赖,还可以表达丰富的函数式语义。 + ### 高阶函数 + 在MindIR中,函数的定义是由一个子图来定义,但其本身可以是一个被传递的值,作为其他高阶函数的输入或输出。 例如下面一个简单的示例中,函数`f`作为参数传入了函数`g`,因此函数`g`是一个接收函数输入的高阶函数,函数`f`真正的调用点是在函数`g`内部。 -``` +```python @ms_function def hof(x): def f(x): @@ -108,14 +123,16 @@ def hof(x): 对应的MindIR为[hof.dot](https://gitee.com/mindspore/docs/blob/master/docs/note/source_zh_cn/design/mindspore/images/ir/hof.dot): -![](./images/ir/hof.png) +![image](./images/ir/hof.png) 在实际网络训练脚本中,自动求导泛函`GradOperation`和优化器中常用到的`Partial`和`HyperMap`都是典型的高阶函数。高阶语义极大地提升了MindSpore表达的灵活性和简洁性。 ### 控制流 + 控制流在MindIR中是以高阶函数选择调用的形式表达。这样的形式把控制流转换为高阶函数的数据流,从而使得自动微分算法更加强大。不仅可以支持数据流的自动微分,还可以支持条件跳转、循环和递归等控制流的自动微分。 下面以一个简单的斐波那契用例来演示说明。 + ```python @ms_function def fibonacci(n): @@ -129,15 +146,16 @@ def fibonacci(n): 对应的MindIR为[cf.dot](https://gitee.com/mindspore/docs/blob/master/docs/note/source_zh_cn/design/mindspore/images/ir/cf.dot): -![](./images/ir/cf.png) +![image](./images/ir/cf.png) 其中`fibonacci`是顶层函数图,在顶层中有两个函数图被`switch`选择调用。`✓fibonacci`是第一个`if`的True分支,`✗fibonacci`是第一个`if`的False分支。在`✗fibonacci`中被调用的`✓✗fibonacci`是`elif`的True分支,`✗✗fibonacci`是`elif`的False分支。这里需要理解的关键是在MindIR中,条件跳转和递归是以高阶控制流的形式表达的。例如,`✓fibonacci`和`✗fibonacci`是作为`switch`算子的参数传入,`switch`根据条件参数选择哪一个函数作为返回值。因此,`switch`是把输入的函数当成普通的值做了一个二元选择操作,并没有调用,而真正的函数调用是在紧随`switch`后的CNode上完成。 - ### 自由变量和闭包 + 闭包(closure)是一种编程语言特性,它指的是代码块和作用域环境的结合。自由变量(free variable)是指在代码块中引用作用域环境中的变量而非局部变量。在MindIR中,代码块是以函数图呈现的,而作用域环境可以理解为该函数被调用时的上下文环境,自由变量的捕获方式是值拷贝而非引用。 一个典型的闭包用例如下: + ```python @ms_function def func_outer(a, b): @@ -155,14 +173,15 @@ def ms_closure(): 对应的MindIR为[closure.dot](https://gitee.com/mindspore/docs/blob/master/docs/note/source_zh_cn/design/mindspore/images/ir/closure.dot): -![](./images/ir/closure.png) +![image](./images/ir/closure.png) 在例子中,`a`和`b`是自由变量,因为`func_inner`中变量`a`和`b`是引用的其父图`func_outer`中定义的参数。变量`closure`是一个闭包,它是函数`func_inner`与其上下文`func_outer(1, 2)`的结合。因此,`out1`的结果是4,因为其等价于`1+2+1`,`out2`的结果是5,因为其等价于`1+2+2`。 ## 参考文献 + [1] C. Click and M. Paleczny. A simple graph-based intermediate representation. SIGPLAN Not., 30:35–49, March 1995. [2] Roland Leißa, Marcel Köster, and Sebastian Hack. A graph-based higher-order intermediate representation. In Proceedings of the 13th Annual IEEE/ACM International Symposium on -Code Generation and Optimization, pages 202–212. IEEE Computer Society, 2015. \ No newline at end of file +Code Generation and Optimization, pages 202–212. IEEE Computer Society, 2015. diff --git a/docs/note/source_zh_cn/design/mindspore/profiler_design.md b/docs/note/source_zh_cn/design/mindspore/profiler_design.md index 9b0b965b0a..219b40dee8 100644 --- a/docs/note/source_zh_cn/design/mindspore/profiler_design.md +++ b/docs/note/source_zh_cn/design/mindspore/profiler_design.md @@ -5,23 +5,23 @@ - [Profiler设计文档](#profiler设计文档) - - [背景](#背景) - - [Profiler框架设计](#profiler架构设计) - - [上下文](#上下文) - - [模块层级结构](#模块层级结构) - - [内部模块交互](#内部模块交互) - - [子模块设计](#准备训练脚本) - - [ProfilerAPI和Controller](#profiler-api-controller) - - [ProfilerAPI和Controller模块介绍](#profiler-api-controller模块介绍) - - [Analyser](#analyser) - - [Analyser模块介绍](#analyser模块介绍) - - [Analyser模块设计](#analyser模块设计) - - [Parser](#parser) - - [Parser模块介绍](#parser模块介绍) - - [Parser模块设计](#parser模块设计) - - [Proposer](#proposer) - - [Proposer模块介绍](#proposer模块介绍) - - [Proposer模块设计](#proposer模块设计) + - [背景](#背景) + - [Profiler框架设计](#profiler架构设计) + - [上下文](#上下文) + - [模块层级结构](#模块层级结构) + - [内部模块交互](#内部模块交互) + - [子模块设计](#准备训练脚本) + - [ProfilerAPI和Controller](#profiler-api-controller) + - [ProfilerAPI和Controller模块介绍](#profiler-api-controller模块介绍) + - [Analyser](#analyser) + - [Analyser模块介绍](#analyser模块介绍) + - [Analyser模块设计](#analyser模块设计) + - [Parser](#parser) + - [Parser模块介绍](#parser模块介绍) + - [Parser模块设计](#parser模块设计) + - [Proposer](#proposer) + - [Proposer模块介绍](#proposer模块介绍) + - [Proposer模块设计](#proposer模块设计) @@ -32,6 +32,7 @@ 为了支持用户在MindSpore进行模型开发性能调试,需要提供易用的Profile工具,直观地展现网络模型各维度的性能信息,为用户提供易用、丰富的性能分析功能,帮助用户快速定位网络中性能问题。 ## Profiler架构设计 + 这一章将介绍Profiler的架构设计,第一节从整体Profiler的角度出发介绍其上下文交互关系,第二节将打开Profiler内部,介绍模块层架结构以及模块划分,第三节将介绍模块间的交互调用关系。 ### 上下文 @@ -49,6 +50,7 @@ Profiler是MindSpore调试调优工具的一部分,在整个使用过程中的 2. MindSpore侧Profiler将在用户脚本中对原始数据进行解析,并在用户指定的文件夹下面生成中间数据结果; 3. Mindinsight侧Profiler对接中间数据,提供可视化Profiler功能供用户使用。 + ### 模块层级结构 模块层级划分如下: @@ -57,8 +59,8 @@ Profiler是MindSpore调试调优工具的一部分,在整个使用过程中的 图2:层级模块关系图 - 如上图所示,各个模块功能介绍如下: + 1. ProfilerAPI是代码侧对用户提供的调用入口,为用户提供了性能收集启动接口以及分析接口; 2. Controller是ProfilerAPI下层的模块,被ProfilerAPI中的启动接口调用,负责控制下方性能收集功能的启动停止,原始数据会被ada写入固定位置; 3. Parser是性能原始数据解析模块,由于性能原始数据是在设备侧收集的信息,所以信息不能直接被用户所理解,该模块负责将信息进行解析、组合、转换,最终形成用户可理解、上层可分析的中间结果; @@ -66,6 +68,7 @@ Profiler是MindSpore调试调优工具的一部分,在整个使用过程中的 5. 通过RESTful调用后端Analyser提供的common API,获取目标数据,以RESTful接口对接前端。 ### 内部模块交互 + 从用户角度,有两种使用形式API、RESTful,我们以API为例,阐述一个完整的内部模块交互流程: ![time_order_profiler.png](./images/time_order_profiler.png) @@ -81,20 +84,22 @@ Profiler是MindSpore调试调优工具的一部分,在整个使用过程中的 3. Profiler API分析接口首先使用Parser模块对性能数据进行解析,产生中间结果,再调用Aalayser进行中间结果分析,最终将各类信息返回至用户侧。 ## 子模块设计 + ### ProfilerAPI和Controller #### ProfilerAPI和Controller模块说明 + ProfilerAPI为用户在训练脚本侧提供入口API,用户通过ProfilerAPI启动性能收集以及对性能数据进行分析。 ProfilerAPI通过Controller下发命令,完成对ada启动的控制。 #### ProfilerAPI和Controller模块设计 + ProfilerAPI模块,属于上层应用接口层,由训练脚本集成。功能分为两部分: - 训练前调用底层Controller接口,下发命令,启动profiling统计任务。 - 训练完成后,调用底层Controller接口,下发命令,停止性能统计任务,再调用Analyser、Parser模块接口解析数据文件,生成算子性能统计、training trace统计等结果数据。 - Controller模块提供对上层接口,并调用底层性能收集模块接口,下发启动和停止性能收集的命令。 最终生成的性能原始数据主要包含: @@ -105,9 +110,13 @@ Controller模块提供对上层接口,并调用底层性能收集模块接口 - `training_trace.46.dev.profiler_default_tag`文件:存储每个step的开始结束时刻,迭代间隙、迭代前向反向、迭代拖尾的时刻信息。 ### Parser + #### Parser模块介绍 + Parser是原始性能数据解析模块,由于原始性能数据是在设备侧收集的信息,所以信息不能直接被用户所理解,该模块负责将信息进行解析、组合、转换,最终形成用户可理解、上层可分析的中间结果。 + #### Parser模块设计 + ![parser_module_profiler.png](./images/parser_module_profiler.png) 图4:Parser模块图 @@ -122,6 +131,7 @@ Parser是原始性能数据解析模块,由于原始性能数据是在设备 ### Analyser #### Analyser模块介绍 + 分析器的作用是对解析阶段生成的中间结果,进行筛选、排序、查询、分页等相关操作。 #### Analyser模块设计 @@ -141,9 +151,10 @@ Parser是原始性能数据解析模块,由于原始性能数据是在设备 为了隐藏Analyser内部实现,方便调用,使用简单工厂模式,通过AnalyserFactory获取指定的Analyser。 - ### Proposer + #### Proposer模块介绍 + Proposer是Profiler性能优化建议模块,Proposer调用Analyser模块获取性能数据,通过调优规则对性能数据进行分析,输出调优建议由UI、API接口展示给用户。 #### Proposer模块设计 @@ -171,4 +182,4 @@ Proposer是Profiler性能优化建议模块,Proposer调用Analyser模块获取 如上模块类图所示: - 各类型Proposer继承抽象类Proposer并实现analyze方法; -- API、CLI通过调用工厂ProposerFactory获取Proposer,并调用Proposer.analyze函数获取各类型的Proposer分析的优化建议。 \ No newline at end of file +- API、CLI通过调用工厂ProposerFactory获取Proposer,并调用Proposer.analyze函数获取各类型的Proposer分析的优化建议。 diff --git a/docs/note/source_zh_cn/design/technical_white_paper.md b/docs/note/source_zh_cn/design/technical_white_paper.md index 244f94705c..c3ec41c351 100644 --- a/docs/note/source_zh_cn/design/technical_white_paper.md +++ b/docs/note/source_zh_cn/design/technical_white_paper.md @@ -13,11 +13,13 @@ ## 引言 + 深度学习研究和应用在近几十年得到了爆炸式的发展,掀起了人工智能的第三次浪潮,并且在图像识别、语音识别与合成、无人驾驶、机器视觉等方面取得了巨大的成功。这也对算法的应用以及依赖的框架有了更高级的要求。深度学习框架的不断发展使得在大型数据集上训练神经网络模型时,可以方便地使用大量的计算资源。 深度学习是使用多层结构从原始数据中自动学习并提取高层次特征的一类机器学习算法。通常,从原始数据中提取高层次、抽象的特征是非常困难的。目前有两种主流的深度学习框架:一种是在执行之前构造一个静态图,定义所有操作和网络结构,典型代表是TensorFlow,这种方法以牺牲易用性为代价,来提高训练期间的性能;另一种是立即执行的动态图计算,典型代表是PyTorch。通过比较可以发现,动态图更灵活、更易调试,但会牺牲性能。因此,现有深度学习框架难以同时满足易开发、高效执行的要求。 ## 简介 + MindSpore作为新一代深度学习框架,是源于全产业的最佳实践,最佳匹配昇腾处理器算力,支持终端、边缘、云全场景灵活部署,开创全新的AI编程范式,降低AI开发门槛。MindSpore是一种全新的深度学习计算框架,旨在实现易开发、高效执行、全场景覆盖三大目标。为了实现易开发的目标,MindSpore采用基于源码转换(Source Code Transformation,SCT)的自动微分(Automatic Differentiation,AD)机制,该机制可以用控制流表示复杂的组合。函数被转换成函数中间表达(Intermediate Representation,IR),中间表达构造出一个能够在不同设备上解析和执行的计算图。在执行前,计算图上应用了多种软硬件协同优化技术,以提升端、边、云等不同场景下的性能和效率。MindSpore支持动态图,更易于检查运行模式。由于采用了基于源码转换的自动微分机制,所以动态图和静态图之间的模式切换非常简单。为了在大型数据集上有效训练大模型,通过高级手动配置策略,MindSpore可以支持数据并行、模型并行和混合并行训练,具有很强的灵活性。此外,MindSpore还有“自动并行”能力,它通过在庞大的策略空间中进行高效搜索来找到一种快速的并行策略。MindSpore框架的具体优势,请查看详细介绍。 -[查看技术白皮书](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com:443/white_paper/MindSpore_white_paper.pdf) \ No newline at end of file +[查看技术白皮书](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com:443/white_paper/MindSpore_white_paper.pdf) diff --git a/docs/note/source_zh_cn/glossary.md b/docs/note/source_zh_cn/glossary.md index 4297fd2647..630fec2ea6 100644 --- a/docs/note/source_zh_cn/glossary.md +++ b/docs/note/source_zh_cn/glossary.md @@ -4,7 +4,7 @@ -| 术语/缩略语 | 说明 | +| 术语/缩略语 | 说明 | | ----- | ----- | | ACL | Ascend Computer Language,提供Device管理、Context管理、Stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等C++ API库,供用户开发深度神经网络应用。| | Ascend | 华为昇腾系列芯片的系列名称。 | diff --git a/docs/note/source_zh_cn/help_seeking_path.md b/docs/note/source_zh_cn/help_seeking_path.md index f3de79c373..ac3338260c 100644 --- a/docs/note/source_zh_cn/help_seeking_path.md +++ b/docs/note/source_zh_cn/help_seeking_path.md @@ -10,25 +10,23 @@ - 网站搜索 - - 进入[官网搜索](https://www.mindspore.cn/search)。 - - 遇到问题时,首先推荐使用网站搜索方法,该方法操作简单、高效。 - - 在搜索框输入问题的关键词,点击搜索,可匹配出与关键词相关的内容。 - - 参考搜索结果,解决当前遇到的问题。 - + - 进入[官网搜索](https://www.mindspore.cn/search)。 + - 遇到问题时,首先推荐使用网站搜索方法,该方法操作简单、高效。 + - 在搜索框输入问题的关键词,点击搜索,可匹配出与关键词相关的内容。 + - 参考搜索结果,解决当前遇到的问题。 - 用户群咨询 - - QQ用户群号:871543426。 - - 如果网站搜索方法不能解决当前问题,可通过QQ用户群咨询,建议想要简单咨询的用户选取此方法。 - - 加群后可以与其他用户讨论交流,还有技术专家在群中提供帮助解答。 - - 通过专家的解答或和其他用户的交流来解决当前遇到的问题。 - + - QQ用户群号:871543426。 + - 如果网站搜索方法不能解决当前问题,可通过QQ用户群咨询,建议想要简单咨询的用户选取此方法。 + - 加群后可以与其他用户讨论交流,还有技术专家在群中提供帮助解答。 + - 通过专家的解答或和其他用户的交流来解决当前遇到的问题。 - 论坛求助 - - 如果用户想要详细的解决方法,可通过[MindSpore论坛](https://bbs.huaweicloud.com/forum/forum-1076-1.html)中发布问题求助帖获取解答。 - - 为提高问题解决速度与质量,发帖前请参考[发帖建议](https://bbs.huaweicloud.com/forum/thread-69695-1-1.html),按照建议格式发帖。 - - 帖子发出后会有论坛版主负责将问题收录,并联系技术专家进行解答,问题将在三个工作日内解决。 - - 参考技术专家的解决方案,解决当前遇到的问题。 + - 如果用户想要详细的解决方法,可通过[MindSpore论坛](https://bbs.huaweicloud.com/forum/forum-1076-1.html)中发布问题求助帖获取解答。 + - 为提高问题解决速度与质量,发帖前请参考[发帖建议](https://bbs.huaweicloud.com/forum/thread-69695-1-1.html),按照建议格式发帖。 + - 帖子发出后会有论坛版主负责将问题收录,并联系技术专家进行解答,问题将在三个工作日内解决。 + - 参考技术专家的解决方案,解决当前遇到的问题。 - 如果在专家测试后确定是MindSpore功能有待完善,推荐用户在[MindSpore仓](https://gitee.com/mindspore)中创建ISSUE,所提问题会在后续的版本中得到修复完善。 \ No newline at end of file + 如果在专家测试后确定是MindSpore功能有待完善,推荐用户在[MindSpore仓](https://gitee.com/mindspore)中创建ISSUE,所提问题会在后续的版本中得到修复完善。 diff --git a/docs/note/source_zh_cn/image_classification_lite.md b/docs/note/source_zh_cn/image_classification_lite.md index 4aa2960c32..10a4a449f1 100644 --- a/docs/note/source_zh_cn/image_classification_lite.md +++ b/docs/note/source_zh_cn/image_classification_lite.md @@ -4,7 +4,7 @@ ## 图像分类介绍 -图像分类模型可以预测图片中出现哪些物体,识别出图片中出现物体列表及其概率。 比如下图经过模型推理的分类结果为下表: +图像分类模型可以预测图片中出现哪些物体,识别出图片中出现物体列表及其概率。 比如下图经过模型推理的分类结果为下表: ![image_classification](images/image_classification_result.png) @@ -30,4 +30,3 @@ | [Shufflenetv2](https://download.mindspore.cn/model_zoo/official/lite/shufflenetv2_lite/shufflenetv2.ms) | 8.8 | 67.74% | 87.62% | - | 8.303 | | [GoogleNet](https://download.mindspore.cn/model_zoo/official/lite/googlenet_lite/googlenet.ms) | 25.3 | 72.2% | 90.06% | - | 23.257 | | [ResNext50](https://download.mindspore.cn/model_zoo/official/lite/resnext50_lite/resnext50.ms) | 95.8 | 73.1% | 91.21% | - | 138.164 | - diff --git a/docs/note/source_zh_cn/network_list_ms.md b/docs/note/source_zh_cn/network_list_ms.md index 20b1d9107b..5eca8d6bc2 100644 --- a/docs/note/source_zh_cn/network_list_ms.md +++ b/docs/note/source_zh_cn/network_list_ms.md @@ -1,7 +1,7 @@ # MindSpore网络支持 `Linux` `Ascend` `GPU` `CPU` `模型开发` `中级` `高级` - + - [MindSpore网络支持](#mindspore网络支持) @@ -13,7 +13,7 @@ ## Model Zoo -| 领域 | 子领域 | 网络 | Ascend(Graph) | Ascend(PyNative) | GPU(Graph) | GPU(PyNaitve) | CPU(Graph) +| 领域 | 子领域 | 网络 | Ascend(Graph) | Ascend(PyNative) | GPU(Graph) | GPU(PyNaitve) | CPU(Graph) |:---- |:------- |:---- |:---- |:---- |:---- |:---- |:---- |计算机视觉(CV) | 图像分类(Image Classification) | [AlexNet](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/alexnet/src/alexnet.py) | Supported | Supported | Supported | Supported | Doing | 计算机视觉(CV) | 图像分类(Image Classification) | [GoogleNet](https://gitee.com/mindspore/mindspore/blob/master/model_zoo/official/cv/googlenet/src/googlenet.py) | Supported | Supported | Supported | Supported | Doing diff --git a/docs/note/source_zh_cn/object_detection_lite.md b/docs/note/source_zh_cn/object_detection_lite.md index 486d48d79d..b278206f80 100644 --- a/docs/note/source_zh_cn/object_detection_lite.md +++ b/docs/note/source_zh_cn/object_detection_lite.md @@ -23,4 +23,3 @@ | 模型名称 | 大小 | mAP(IoU=0.50:0.95) | CPU 4线程时延(ms) | |-----------------------| :----------: | :----------: | :-----------: | | [MobileNetv2-SSD](https://download.mindspore.cn/model_zoo/official/lite/ssd_mobilenetv2_lite/ssd.ms) | 16.7 | 0.22 | 25.4 | - diff --git a/docs/note/source_zh_cn/operator_list_implicit.md b/docs/note/source_zh_cn/operator_list_implicit.md index 710dd8c226..e37729db05 100644 --- a/docs/note/source_zh_cn/operator_list_implicit.md +++ b/docs/note/source_zh_cn/operator_list_implicit.md @@ -15,25 +15,28 @@ ## 隐式类型转换 + ### 转换规则 -* 标量与Tensor运算:运算时,将标量自动转为Tensor,数据类型和参与运算的Tensor数据类型保持一致; + +- 标量与Tensor运算:运算时,将标量自动转为Tensor,数据类型和参与运算的Tensor数据类型保持一致; 当Tensor是bool数据类型,标量是int或float时,将标量和Tensor都转为数据类型为int32或float32的Tensor; 当Tensor是int或者uint数据类型,标量是float时,将标量和Tensor都转为数据类型为float32的Tensor。 -* 不同数据类型Tensor运算:数据类型优先级排序为bool < uint8 < int8 < int16 < int32 < int64 < float16 < float32 < float64, +- 不同数据类型Tensor运算:数据类型优先级排序为bool < uint8 < int8 < int16 < int32 < int64 < float16 < float32 < float64, 运算时,先确定参与运算的Tensor中优先级相对最高的数据类型,然后将低优先级数据类型Tensor转换为相对最高优先级数据类型; 而当int8和uint8数据类型的Tensor进行运算时,将其都转为int16的Tensor。 -* 不支持对Parameter进行数据类型转换:如果按照转换规则推导,需要对网络中定义的Parameter进行数据类型转换时,会抛出RuntimeError异常。 +- 不支持对Parameter进行数据类型转换:如果按照转换规则推导,需要对网络中定义的Parameter进行数据类型转换时,会抛出RuntimeError异常。 ### 参与转换的数据类型 -* bool -* int8 -* uint8 -* int16 -* int32 -* int64 -* float16 -* float32 -* float64 + +- bool +- int8 +- uint8 +- int16 +- int32 +- int64 +- float16 +- float32 +- float64 ### 支持算子 @@ -101,4 +104,3 @@ | [mindspore.ops.ScatterSub](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ScatterSub) | [mindspore.ops.ScatterMul](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ScatterMul) | [mindspore.ops.ScatterDiv](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ScatterDiv) - diff --git a/docs/note/source_zh_cn/operator_list_lite.md b/docs/note/source_zh_cn/operator_list_lite.md index 04bedcfb2c..1b9695e052 100644 --- a/docs/note/source_zh_cn/operator_list_lite.md +++ b/docs/note/source_zh_cn/operator_list_lite.md @@ -109,6 +109,6 @@ | Unsqueeze | | Supported | Supported | Supported | | | | | Unsqueeze | | Unstack | | Supported | | | | | Unstack | | | | Where | | Supported | | | | | Where | | | -| ZerosLike | | Supported | | | | | ZerosLike | | | +| ZerosLike | | Supported | | | | | ZerosLike | | | * Clip:仅支持将clip(0, 6)转换为Relu6。 diff --git a/docs/note/source_zh_cn/operator_list_ms.md b/docs/note/source_zh_cn/operator_list_ms.md index 6a299dbe98..c4b6fb10ff 100644 --- a/docs/note/source_zh_cn/operator_list_ms.md +++ b/docs/note/source_zh_cn/operator_list_ms.md @@ -187,18 +187,18 @@ | [mindspore.ops.ReduceSum](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ReduceSum) | Supported | Supported | Supported | math_ops | [mindspore.ops.ReduceAll](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ReduceAll) | Supported | Doing | Doing | math_ops | [mindspore.ops.ReduceMax](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ReduceMax) | Supported | Supported | Supported | math_ops -| [mindspore.ops.ReduceMin](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ReduceMin) | Supported | Supported | Doing | math_ops -| [mindspore.ops.ReduceProd](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ReduceProd) | Supported | Doing | Doing | math_ops -| [mindspore.ops.CumProd](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.CumProd) | Supported | Doing | Doing | math_ops +| [mindspore.ops.ReduceMin](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ReduceMin) | Supported | Supported | Doing | math_ops +| [mindspore.ops.ReduceProd](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ReduceProd) | Supported | Doing | Doing | math_ops +| [mindspore.ops.CumProd](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.CumProd) | Supported | Doing | Doing | math_ops | [mindspore.ops.MatMul](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.MatMul) | Supported | Supported | Supported | math_ops | [mindspore.ops.BatchMatMul](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.BatchMatMul) | Supported | Supported | Doing | math_ops | [mindspore.ops.CumSum](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.CumSum) | Supported | Supported| Doing | math_ops | [mindspore.ops.AddN](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.AddN) | Supported | Supported | Supported | math_ops | [mindspore.ops.Neg](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Neg) | Supported | Supported | Doing | math_ops -| [mindspore.ops.Sub](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Sub) | Supported | Supported | Supported | math_ops +| [mindspore.ops.Sub](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Sub) | Supported | Supported | Supported | math_ops | [mindspore.ops.Mul](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Mul) | Supported | Supported | Supported | math_ops -| [mindspore.ops.Square](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Square) | Supported | Supported | Supported | math_ops -| [mindspore.ops.SquareSumAll](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.SquareSumAll) | Supported | Doing | Doing | math_ops +| [mindspore.ops.Square](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Square) | Supported | Supported | Supported | math_ops +| [mindspore.ops.SquareSumAll](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.SquareSumAll) | Supported | Doing | Doing | math_ops | [mindspore.ops.Rsqrt](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Rsqrt) | Supported | Supported | Doing | math_ops | [mindspore.ops.Sqrt](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Sqrt) | Supported | Supported | Doing | math_ops | [mindspore.ops.Reciprocal](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Reciprocal) | Supported | Supported | Doing | math_ops @@ -206,7 +206,7 @@ | [mindspore.ops.Exp](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Exp) | Supported | Supported | Doing | math_ops | [mindspore.ops.Log](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Log) | Supported | Supported | Doing | math_ops | [mindspore.ops.Log1p](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Log1p) | Supported | Doing | Doing | math_ops -| [mindspore.ops.Minimum](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Minimum) | Supported | Supported | Doing | math_ops +| [mindspore.ops.Minimum](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Minimum) | Supported | Supported | Doing | math_ops | [mindspore.ops.Maximum](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Maximum) | Supported | Supported | Doing | math_ops | [mindspore.ops.RealDiv](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.RealDiv) | Supported | Supported | Doing | math_ops | [mindspore.ops.Div](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Div) | Supported | Supported | Doing | math_ops @@ -294,7 +294,7 @@ | [mindspore.ops.StridedSlice](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.StridedSlice) | Supported | Supported | Supported | array_ops | [mindspore.ops.Diag](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Diag) | Doing | Doing | Doing | array_ops | [mindspore.ops.DiagPart](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.DiagPart) | Doing | Doing | Doing | array_ops -| [mindspore.ops.Eye](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Eye) | Supported | Supported | Supported | array_ops +| [mindspore.ops.Eye](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.Eye) | Supported | Supported | Supported | array_ops | [mindspore.ops.ScatterNd](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ScatterNd) | Supported | Supported | Doing | array_ops | [mindspore.ops.ResizeNearestNeighbor](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.ResizeNearestNeighbor) | Supported | Supported | Doing | array_ops | [mindspore.ops.GatherNd](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.ops.html#mindspore.ops.GatherNd) | Supported | Supported | Doing | array_ops diff --git a/docs/note/source_zh_cn/roadmap.md b/docs/note/source_zh_cn/roadmap.md index a98ee9f3a1..62c7657b6f 100644 --- a/docs/note/source_zh_cn/roadmap.md +++ b/docs/note/source_zh_cn/roadmap.md @@ -20,6 +20,7 @@ 以下将展示MindSpore近一年的高阶计划,我们会根据用户的反馈诉求,持续调整计划的优先级。 总体而言,我们会努力在以下几个方面不断改进。 + 1. 提供更多的预置模型支持。 2. 持续补齐API和算子库,改善易用性和编程体验。 3. 提供华为昇腾AI处理器的全面支持,并不断优化性能及软件架构。 @@ -28,56 +29,63 @@ 热忱希望各位在用户社区加入讨论,并贡献您的建议。 ## 预置模型 -* CV:目标检测、GAN、图像分割、姿态识别等场景经典模型。 -* NLP:RNN、Transformer类型神经网络,拓展基于Bert预训练模型的应用。 -* 其它:GNN、强化学习、概率编程、AutoML等。 + +- CV:目标检测、GAN、图像分割、姿态识别等场景经典模型。 +- NLP:RNN、Transformer类型神经网络,拓展基于Bert预训练模型的应用。 +- 其它:GNN、强化学习、概率编程、AutoML等。 ## 易用性 -* 补齐算子、优化器、Loss函数等各类API -* 完善Python语言原生表达支持 -* 支持常见的Tensor/Math操作 -* 增加更多的自动并行适用场景,提高策略搜索的准确性 + +- 补齐算子、优化器、Loss函数等各类API +- 完善Python语言原生表达支持 +- 支持常见的Tensor/Math操作 +- 增加更多的自动并行适用场景,提高策略搜索的准确性 ## 性能优化 -* 优化编译时间 -* 低比特混合精度训练/推理 -* 提升内存使用效率 -* 提供更多的融合优化手段 -* 加速PyNative执行性能 + +- 优化编译时间 +- 低比特混合精度训练/推理 +- 提升内存使用效率 +- 提供更多的融合优化手段 +- 加速PyNative执行性能 ## 架构演进 -* 图算融合优化:使用细粒度Graph IR表达算子,构成带算子边界的中间表达,挖掘更多图层优化机会。 -* 支持更多编程语言 -* 优化数据增强的自动调度及分布式训练数据缓存机制 -* 持续完善MindSpore IR -* Parameter Server模式分布式训练 + +- 图算融合优化:使用细粒度Graph IR表达算子,构成带算子边界的中间表达,挖掘更多图层优化机会。 +- 支持更多编程语言 +- 优化数据增强的自动调度及分布式训练数据缓存机制 +- 持续完善MindSpore IR +- Parameter Server模式分布式训练 ## MindInsight调试调优 -* 训练过程观察 - * 直方图 - * 计算图/数据图展示优化 - * 集成性能Profiling/Debugger工具 - * 支持多次训练间的对比 -* 训练结果溯源 - * 数据增强溯源对比 -* 训练过程诊断 - * 性能Profiling - * 基于图模型的Debugger + +- 训练过程观察 + - 直方图 + - 计算图/数据图展示优化 + - 集成性能Profiling/Debugger工具 + - 支持多次训练间的对比 +- 训练结果溯源 + - 数据增强溯源对比 +- 训练过程诊断 + - 性能Profiling + - 基于图模型的Debugger ## MindArmour安全增强包 -* 测试模型的安全性 -* 提供模型安全性增强工具 -* 保护训练和推理过程中的数据隐私 + +- 测试模型的安全性 +- 提供模型安全性增强工具 +- 保护训练和推理过程中的数据隐私 ## 推理框架 -* 算子性能与完备度的持续优化 -* 支持语音模型推理 -* 端侧模型的可视化 -* Micro方案,适用于嵌入式系统的超轻量化推理, 支持ARM Cortex-A、Cortex-M硬件 -* 支持端侧重训及联邦学习 -* 端侧自动并行特性 -* 端侧MindData,包含图片Resize、像素数据转换等功能 -* 配套MindSpore混合精度量化训练(或训练后量化),实现混合精度推理,提升推理性能 -* 支持Kirin NPU、MTK APU等AI加速硬件 -* 支持多模型推理pipeline -* C++构图接口 + +- 算子性能与完备度的持续优化 +- 支持语音模型推理 +- 端侧模型的可视化 +- Micro方案,适用于嵌入式系统的超轻量化推理, 支持ARM Cortex-A、Cortex-M硬件 +- 支持端侧重训及联邦学习 +- 端侧自动并行特性 +- 端侧MindData,包含图片Resize、像素数据转换等功能 +- 配套MindSpore混合精度量化训练(或训练后量化),实现混合精度推理,提升推理性能 +- 支持Kirin NPU、MTK APU等AI加速硬件 +- 支持多模型推理pipeline +- C++构图接口 diff --git a/docs/programming_guide/source_en/api_structure.md b/docs/programming_guide/source_en/api_structure.md index 8fb4885d01..c77f085b66 100644 --- a/docs/programming_guide/source_en/api_structure.md +++ b/docs/programming_guide/source_en/api_structure.md @@ -12,6 +12,7 @@ ## Overall Architecture + MindSpore is a deep learning framework in all scenarios, aiming to achieve easy development, efficient execution, and all-scenario coverage. Easy development features include API friendliness and low debugging difficulty. Efficient execution includes computing efficiency, data preprocessing efficiency, and distributed training efficiency. All-scenario coverage means that the framework supports cloud, edge, and device scenarios. The overall architecture of MindSpore consists of the Mind Expression (ME), Graph Engine (GE), and backend runtime. ME provides user-level APIs for scientific computing, building and training neural networks, and converting Python code of users into graphs. GE is a manager of operators and hardware resources, and is responsible for controlling execution of graphs received from ME. Backend runtime includes efficient running environments, such as the CPU, GPU, Ascend AI processors, and Android/iOS, on the cloud, edge, and device. For more information about the overall architecture, see [Overall Architecture](https://www.mindspore.cn/doc/note/en/master/design/mindspore/architecture.html). diff --git a/docs/programming_guide/source_en/dtype.md b/docs/programming_guide/source_en/dtype.md index 495c7573d0..29437cc5de 100644 --- a/docs/programming_guide/source_en/dtype.md +++ b/docs/programming_guide/source_en/dtype.md @@ -19,7 +19,8 @@ In the computation process of MindSpore, the `int` data type in Python is conver For details about the supported types, see . In the following code, the data type of MindSpore is int32. -``` + +```python from mindspore import dtype as mstype data_type = mstype.int32 @@ -28,11 +29,10 @@ print(data_type) The following information is displayed: -``` +```text Int32 ``` - ## Data Type Conversion API MindSpore provides the following APIs for conversion between NumPy data types and Python built-in data types: @@ -43,7 +43,7 @@ MindSpore provides the following APIs for conversion between NumPy data types an The following code implements the conversion between different data types and prints the converted type. -``` +```python from mindspore import dtype as mstype np_type = mstype.dtype_to_nptype(mstype.int32) @@ -57,8 +57,8 @@ print(py_type) The following information is displayed: -``` +```text Int64 -``` \ No newline at end of file +``` diff --git a/docs/programming_guide/source_en/tensor.md b/docs/programming_guide/source_en/tensor.md index 0054dc933a..c97345a607 100644 --- a/docs/programming_guide/source_en/tensor.md +++ b/docs/programming_guide/source_en/tensor.md @@ -19,7 +19,7 @@ Tensor is a basic data structure in the MindSpore network computing. For details Tensors of different dimensions represent different data. For example, a 0-dimensional tensor represents a scalar, a 1-dimensional tensor represents a vector, a 2-dimensional tensor represents a matrix, and a 3-dimensional tensor may represent the three channels of RGB images. -> All examples in this document can run in PyNative mode and do not support CPUs. +> All examples in this document can run in PyNative mode and do not support CPUs. ## Tensor Structure @@ -29,7 +29,7 @@ When `Tensor` is used as the initial value, dtype can be specified. If dtype is A code example is as follows: -``` +```python import numpy as np from mindspore import Tensor from mindspore.common import dtype as mstype @@ -46,7 +46,7 @@ print(x, "\n\n", y, "\n\n", z, "\n\n", m, "\n\n", n, "\n\n", p) The following information is displayed: -``` +```text [[1 2] [3 4]] @@ -66,12 +66,13 @@ True ### Attributes Tensor attributes include shape and data type (dtype). + - shape: a tuple - dtype: a data type of MindSpore A code example is as follows: -``` +```python import numpy as np from mindspore import Tensor from mindspore.common import dtype as mstype @@ -85,20 +86,21 @@ print(x_shape, x_dtype) The following information is displayed: -``` +```text (2, 2) Int32 ``` - + ### Methods Tensor methods include `all`, `any`, and `asnumpy`. Currently, the `all` and `any` methods support only Ascend. + - `all(axis, keep_dims)`: performs the `and` operation on a specified dimension to reduce the dimension. `axis` indicates the reduced dimension, and `keep_dims` indicates whether to retain the reduced dimension. - `any(axis, keep_dims)`: performs the `or` operation on a specified dimension to reduce the dimension. The parameter meaning is the same as that of `all`. - `asnumpy()`: converts `Tensor` to an array of NumPy. A code example is as follows: -``` +```python import numpy as np from mindspore import Tensor from mindspore.common import dtype as mstype @@ -113,7 +115,7 @@ print(x_all, "\n\n", x_any, "\n\n", x_array) The following information is displayed: -``` +```text False True @@ -121,4 +123,4 @@ True [[ True True] [False False]] -``` \ No newline at end of file +``` diff --git a/docs/programming_guide/source_zh_cn/api_structure.md b/docs/programming_guide/source_zh_cn/api_structure.md index 847cc1bcae..2fd2d7b094 100644 --- a/docs/programming_guide/source_zh_cn/api_structure.md +++ b/docs/programming_guide/source_zh_cn/api_structure.md @@ -14,6 +14,7 @@ ## 总体架构 + MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景覆盖三大目标,其中易开发表现为API友好、调试难度低,高效执行包括计算效率、数据预处理效率和分布式训练效率,全场景则指框架同时支持云、边缘以及端侧场景。 MindSpore总体架构分为前端表示层(Mind Expression,ME)、计算图引擎(Graph Engine,GE)和后端运行时三个部分。ME提供了用户级应用软件编程接口(Application Programming Interface,API),用于科学计算以及构建和训练神经网络,并将用户的Python代码转换为数据流图。GE是算子和硬件资源的管理器,负责控制从ME接收的数据流图的执行。后端运行时包含云、边、端上不同环境中的高效运行环境,例如CPU、GPU、Ascend AI处理器、 Android/iOS等。更多总体架构的相关内容请参见[总体架构](https://www.mindspore.cn/doc/note/zh-CN/master/design/mindspore/architecture.html)。 diff --git a/docs/programming_guide/source_zh_cn/augmentation.md b/docs/programming_guide/source_zh_cn/augmentation.md index a7741906d9..f19715460d 100644 --- a/docs/programming_guide/source_zh_cn/augmentation.md +++ b/docs/programming_guide/source_zh_cn/augmentation.md @@ -42,7 +42,7 @@ MindSpore目前支持的常用数据增强算子如下表所示,更多数据 | | Invert | 将图像进行反相。 | | |Compose | 将列表中的数据增强操作依次执行。 | -## c_transforms +## c_transforms 下面将简要介绍几种常用的`c_transforms`模块数据增强算子的使用方法。 @@ -51,6 +51,7 @@ MindSpore目前支持的常用数据增强算子如下表所示,更多数据 对输入图像进行在随机位置的裁剪。 **参数说明:** + - `size`:裁剪图像的尺寸。 - `padding`:填充的像素数量。 - `pad_if_needed`:原图小于裁剪尺寸时,是否需要填充。 @@ -98,7 +99,7 @@ plt.show() 输出结果如下: -``` +```text Source image Shape : (32, 32, 3) , Source label : 6 Cropped image Shape: (10, 10, 3) , Cropped label: 6 ------ @@ -119,6 +120,7 @@ Cropped image Shape: (10, 10, 3) , Cropped label: 9 对输入图像进行随机水平翻转。 **参数说明:** + - `prob`: 单张图片发生翻转的概率。 下面的样例首先使用随机采样器加载CIFAR-10数据集[1],然后对已加载的图片进行概率为0.8的随机水平翻转,最后输出翻转前后的图片形状及对应标签,并对图片进行了展示。 @@ -164,7 +166,7 @@ plt.show() 输出结果如下: -``` +```text Source image Shape : (32, 32, 3) , Source label : 3 Flipped image Shape: (32, 32, 3) , Flipped label: 3 ------ @@ -188,6 +190,7 @@ Flipped image Shape: (32, 32, 3) , Flipped label: 9 对输入图像进行缩放。 **参数说明:** + - `self`:缩放的目标大小。 - `interpolation`:缩放时采用的插值方式。 @@ -231,7 +234,7 @@ plt.show() 输出结果如下: -``` +```text Source image Shape : (28, 28, 1) , Source label : 5 Flipped image Shape: (101, 101, 1) , Flipped label: 5 ------ @@ -297,7 +300,7 @@ plt.show() 输出结果如下: -``` +```text Source image Shape : (32, 32, 3) , Source label : 4 Flipped image Shape: (32, 32, 3) , Flipped label: 4 ------ @@ -362,7 +365,7 @@ plt.show() 输出结果如下: -``` +```text Transformed image Shape: (3, 200, 200) , Transformed label: 3 Transformed image Shape: (3, 200, 200) , Transformed label: 0 Transformed image Shape: (3, 200, 200) , Transformed label: 3 diff --git a/docs/programming_guide/source_zh_cn/auto_parallel.md b/docs/programming_guide/source_zh_cn/auto_parallel.md index c7b9ecc28d..7bdbf8ddbc 100644 --- a/docs/programming_guide/source_zh_cn/auto_parallel.md +++ b/docs/programming_guide/source_zh_cn/auto_parallel.md @@ -61,7 +61,7 @@ MindSpore的分布式并行配置通过`auto_parallel_context`来进行集中管 代码样例如下: ```python -from mindspore import context +from mindspore import context context.set_auto_parallel_context(device_num=8) context.get_auto_parallel_context("device_num") @@ -74,7 +74,7 @@ context.get_auto_parallel_context("device_num") 代码样例如下: ```python -from mindspore import context +from mindspore import context context.set_auto_parallel_context(global_rank=0) context.get_auto_parallel_context("global_rank") @@ -87,7 +87,7 @@ context.get_auto_parallel_context("global_rank") 代码样例如下: ```python -from mindspore import context +from mindspore import context context.set_auto_parallel_context(gradients_mean=False) context.get_auto_parallel_context("gradients_mean") @@ -98,10 +98,10 @@ context.get_auto_parallel_context("gradients_mean") `parallel_mode`表示并行模式,其值为字符串类型。用户可选择的模式有: - `stand_alone`:单机模式。 -- `data_parallel`:数据并行模式。 -- `hybrid_parallel`:混合并行模式。 -- `semi_auto_parallel`:半自动并行模式,即用户可通过`shard`方法给算子配置切分策略,若不配置策略,则默认是数据并行策略。 -- `auto_parallel`:自动并行模式,即框架会自动建立代价模型,为用户选择最优的切分策略。 +- `data_parallel`:数据并行模式。 +- `hybrid_parallel`:混合并行模式。 +- `semi_auto_parallel`:半自动并行模式,即用户可通过`shard`方法给算子配置切分策略,若不配置策略,则默认是数据并行策略。 +- `auto_parallel`:自动并行模式,即框架会自动建立代价模型,为用户选择最优的切分策略。 其中`auto_parallel`和`data_parallel`在MindSpore教程中有完整样例: @@ -125,7 +125,7 @@ context.get_auto_parallel_context("parallel_mode") 代码样例如下: ```python -from mindspore import context +from mindspore import context context.set_auto_parallel_context(all_reduce_fusion_config=[20, 35]) context.get_auto_parallel_context("all_reduce_fusion_config") @@ -133,7 +133,6 @@ context.get_auto_parallel_context("all_reduce_fusion_config") 样例中,`all_reduce_fusion_config`的值为[20, 35],将前20个AllReduce融合成1个,第20~35个AllReduce融合成1个,剩下的AllReduce融合成1个。 - ### 自动并行配置 #### gradient_fp32_sync @@ -143,7 +142,7 @@ context.get_auto_parallel_context("all_reduce_fusion_config") 代码样例如下: ```python -from mindspore import context +from mindspore import context context.set_auto_parallel_context(gradient_fp32_sync=False) context.get_auto_parallel_context("gradient_fp32_sync") @@ -156,7 +155,7 @@ MindSpore提供了`dynamic_programming`和`recursive_programming`两种搜索策 代码样例如下: ```python -from mindspore import context +from mindspore import context context.set_auto_parallel_context(auto_parallel_search_mode="dynamic_programming") context.get_auto_parallel_context("auto_parallel_search_mode") @@ -169,7 +168,7 @@ context.get_auto_parallel_context("auto_parallel_search_mode") 代码样例如下: ```python -from mindspore import context +from mindspore import context context.set_auto_parallel_context(strategy_ckpt_load_file="./") context.get_auto_parallel_context("strategy_ckpt_load_file") @@ -182,7 +181,7 @@ context.get_auto_parallel_context("strategy_ckpt_load_file") 代码样例如下: ```python -from mindspore import context +from mindspore import context context.set_auto_parallel_context(strategy_ckpt_save_file="./") context.get_auto_parallel_context("strategy_ckpt_save_file") @@ -195,7 +194,7 @@ context.get_auto_parallel_context("strategy_ckpt_save_file") 代码样例如下: ```python -from mindspore import context +from mindspore import context context.set_auto_parallel_context(full_batch=False) context.get_auto_parallel_context("full_batch") @@ -210,7 +209,7 @@ context.get_auto_parallel_context("full_batch") 代码样例如下: ```python -from mindspore import context +from mindspore import context context.set_auto_parallel_context(enable_parallel_optimizer=True) context.get_auto_parallel_context("enable_parallel_optimizer") @@ -323,4 +322,3 @@ allreduce2 = P.AllReduce().add_prim_attr("fusion", 1) 具体用例请参考MindSpore分布式并行训练教程: 。 - diff --git a/docs/programming_guide/source_zh_cn/callback.md b/docs/programming_guide/source_zh_cn/callback.md index 753aa59505..15d1e9a391 100644 --- a/docs/programming_guide/source_zh_cn/callback.md +++ b/docs/programming_guide/source_zh_cn/callback.md @@ -12,6 +12,7 @@ ## 概述 + Callback回调函数在MindSpore中被实现为一个类,Callback机制类似于一种监控模式,可以帮助用户观察网络训练过程中各种参数的变化情况和网络内部的状态,还可以根据用户的指定,在达到特定条件后执行相应的操作,在训练过程中,Callback列表会按照定义的顺序执行Callback函数。Callback机制让用户可以及时有效地掌握网络模型的训练状态,并根据需要随时作出调整,可以极大地提升用户的开发效率。 在MindSpore中,Callback机制一般用在网络训练过程`model.train`中,用户可以通过配置不同的内置回调函数传入不同的参数,从而实现各种功能。例如,可以通过`LossMonitor`监控每一个epoch的loss变化情况,通过`ModelCheckpoint`保存网络参数和模型进行再训练或推理,通过`TimeMonitor`监控每一个epoch,每一个step的训练时间,以及提前终止训练,动态调整参数等。 @@ -37,10 +38,11 @@ Callback回调函数在MindSpore中被实现为一个类,Callback机制类似 详细内容,请参考[LossMonitor官网教程](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/custom_debugging_info.html#mindsporecallback)。 - TimeMonitor - + 监控训练过程中每个epoch,每个step的运行时间。 ## MindSpore自定义回调函数 + MindSpore不但有功能强大的内置回调函数,还可以支持用户自定义回调函数。当用户有自己的特殊需求时,可以基于Callback基类,自定义满足用户自身需求的回调函数。Callback可以把训练过程中的重要信息记录下来,通过一个字典类型变量cb_params传递给Callback对象, 用户可以在各个自定义的Callback中获取到相关属性,执行自定义操作。 以下面两个场景为例,介绍自定义Callback回调函数的功能: @@ -51,4 +53,4 @@ MindSpore不但有功能强大的内置回调函数,还可以支持用户自 详细内容,请参考[自定义Callback官网教程](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/custom_debugging_info.html#id3)。 -根据教程,用户可以很容易实现具有其他功能的自定义回调函数,如实现在每一轮训练结束后都输出相应的详细训练信息,包括训练进度、训练轮次、训练名称、loss值等;如实现在loss或模型精度达到一定值后停止训练,用户可以设定loss或模型精度的阈值,当loss或模型精度达到该阈值后就提前终止训练等。 \ No newline at end of file +根据教程,用户可以很容易实现具有其他功能的自定义回调函数,如实现在每一轮训练结束后都输出相应的详细训练信息,包括训练进度、训练轮次、训练名称、loss值等;如实现在loss或模型精度达到一定值后停止训练,用户可以设定loss或模型精度的阈值,当loss或模型精度达到该阈值后就提前终止训练等。 diff --git a/docs/programming_guide/source_zh_cn/cell.md b/docs/programming_guide/source_zh_cn/cell.md index 0f1ac35d43..a3409c2e3c 100644 --- a/docs/programming_guide/source_zh_cn/cell.md +++ b/docs/programming_guide/source_zh_cn/cell.md @@ -41,7 +41,7 @@ MindSpore的`Cell`类是构建所有网络的基类,也是网络的基本单 在`construct`方法中,`x`为输入数据,`output`是经过网络结构计算后得到的计算结果。 -``` +```python import mindspore.nn as nn from mindspore.ops import operations as P from mindspore.common.parameter import Parameter @@ -70,7 +70,7 @@ class Net(nn.Cell): 代码样例如下: -``` +```python net = Net() result = net.parameters_dict() print(result.keys()) @@ -80,7 +80,8 @@ print(result['conv.weight']) 样例中的`Net`采用上文构造网络的用例,打印了网络中所有参数的名字和`conv.weight`参数的结果。 输出如下: -``` + +```text odict_keys(['conv.weight']) Parameter (name=conv.weight, value=[[[[-3.95042636e-03 1.08830128e-02 -6.51786150e-03] [ 8.66129529e-03 7.36288540e-03 -4.32638079e-03] @@ -98,7 +99,8 @@ Parameter (name=conv.weight, value=[[[[-3.95042636e-03 1.08830128e-02 -6.517861 其中`nn.Conv2d`是MindSpore以`Cell`为基类封装好的一个卷积层,其具体内容将在“模型层”中进行介绍。 代码样例如下: -``` + +```python import mindspore.nn as nn class Net1(nn.Cell): @@ -120,7 +122,8 @@ print(names) ``` 输出如下: -``` + +```text ('', Net1< (conv): Conv2d >) @@ -136,7 +139,8 @@ print(names) 以`TrainOneStepCell`为例,其接口功能是使网络进行单步训练,需要计算网络反向,因此初始化方法里需要使用`set_grad`。 `TrainOneStepCell`部分代码如下: -``` + +```python class TrainOneStepCell(Cell): def __init__(self, network, optimizer, sens=1.0): super(TrainOneStepCell, self).__init__(auto_prefix=False) @@ -156,7 +160,8 @@ MindSpore的nn模块是Python实现的模型组件,是对低阶API的封装, 同时nn也提供了部分与`Primitive`算子同名的接口,主要作用是对`Primitive`算子进行进一步封装,为用户提供更友好的API。 重新分析上文介绍`construct`方法的用例,此用例是MindSpore的`nn.Conv2d`源码简化内容,内部会调用`P.Conv2D`。`nn.Conv2d`卷积API增加输入参数校验功能并判断是否`bias`等,是一个高级封装的模型层。 -``` + +```python import mindspore.nn as nn from mindspore.ops import operations as P from mindspore.common.parameter import Parameter @@ -259,7 +264,7 @@ MindSpore框架在`mindspore.nn`的layer层内置了丰富的接口,主要内 MindSpore的模型层在`mindspore.nn`下,使用方法如下所示: -``` +```python import mindspore.nn as nn class Net(nn.Cell): @@ -307,7 +312,7 @@ MindSpore的损失函数全部是`Cell`的子类实现,所以也支持用户 - SoftmaxCrossEntropyWithLogits 交叉熵损失函数,用于分类模型。当标签数据不是one-hot编码形式时,需要输入参数`sparse`为True。`reduction`参数默认值为none,其参数含义同`L1Loss`。 - + - CosineEmbeddingLoss `CosineEmbeddingLoss`用于衡量两个输入相似程度,用于分类模型。`margin`默认为0.0,`reduction`参数同`L1Loss`。 @@ -316,7 +321,7 @@ MindSpore的损失函数全部是`Cell`的子类实现,所以也支持用户 MindSpore的损失函数全部在mindspore.nn下,使用方法如下所示: -``` +```python import numpy as np import mindspore.nn as nn from mindspore import Tensor @@ -328,7 +333,8 @@ print(loss(input_data, target_data)) ``` 输出结果: -``` + +```text 1.5 ``` @@ -347,7 +353,8 @@ print(loss(input_data, target_data)) 以LeNet网络为例,在`__init__`方法中定义了卷积层,池化层和全连接层等结构单元,然后在`construct`方法将定义的内容连接在一起,形成一个完整LeNet的网络结构。 LeNet网络实现方式如下所示: -``` + +```python import mindspore.nn as nn class LeNet5(nn.Cell): diff --git a/docs/programming_guide/source_zh_cn/context.md b/docs/programming_guide/source_zh_cn/context.md index 227d73ba5d..59a7e39523 100644 --- a/docs/programming_guide/source_zh_cn/context.md +++ b/docs/programming_guide/source_zh_cn/context.md @@ -19,9 +19,11 @@ ## 概述 + 初始化网络之前要配置context参数,用于控制程序执行的策略。比如选择执行模式、选择执行后端、配置分布式相关参数等。按照context参数设置实现的不同功能,可以将其分为执行模式管理、硬件管理、分布式管理和维测管理等。 ## 执行模式管理 + MindSpore支持PyNative和Graph这两种运行模式: - `PYNATIVE_MODE`:动态图模式,将神经网络中的各个算子逐一下发执行,方便用户编写和调试神经网络模型。 @@ -29,20 +31,24 @@ MindSpore支持PyNative和Graph这两种运行模式: - `GRAPH_MODE`:静态图模式或者图模式,将神经网络模型编译成一整张图,然后下发执行。该模式利用图优化等技术提高运行性能,同时有助于规模部署和跨平台运行。 ### 模式选择 + 通过设置可以控制程序运行的模式,默认情况下,MindSpore处于PyNative模式。 代码样例如下: + ```python from mindspore import context context.set_context(mode=context.GRAPH_MODE) ``` ### 模式切换 + 实现两种模式之间的切换。 MindSpore处于PYNATIVE模式时,可以通过`context.set_context(mode=context.GRAPH_MODE)`切换为Graph模式;同样地,MindSpore处于Graph模式时,可以通过 `context.set_context(mode=context.PYNATIVE_MODE)`切换为PyNative模式。 代码样例如下: + ```python import numpy as np import mindspore.nn as nn @@ -60,6 +66,7 @@ conv(input_data) 上面的例子先将运行模式设置为`GRAPH_MODE`模式,然后将模式切换为`PYNATIVE_MODE`模式,实现了模式的切换。 ## 硬件管理 + 硬件管理部分主要包括`device_target`和`device_id`两个参数。 - `device_target`: 用于设置目标设备,支持Ascend、GPU和CPU,可以根据实际环境情况设置。 @@ -69,12 +76,14 @@ conv(input_data) > 在GPU和CPU上,设置`device_id`参数无效。 代码样例如下: + ```python from mindspore import context context.set_context(device_target="Ascend", device_id=6) ``` ## 分布式管理 + context中有专门用于配置并行训练参数的接口:context.set_auto_parallel_context,该接口必须在初始化网络之前调用。 - `parallel_mode`:分布式并行模式,默认为单机模式`ParallelMode.STAND_ALONE`。可选数据并行`ParallelMode.DATA_PARALLEL`及自动并行`ParallelMode.AUTO_PARALLEL`。 @@ -86,6 +95,7 @@ context中有专门用于配置并行训练参数的接口:context.set_auto_pa > `device_num`和`global_rank`建议采用默认值,框架内会调用HCCL接口获取。 代码样例如下: + ```python from mindspore import context from mindspore.context import ParallelMode @@ -95,9 +105,11 @@ context.set_auto_parallel_context(parallel_mode=ParallelMode.AUTO_PARALLEL, grad > 分布式并行训练详细介绍可以查看[分布式并行训练](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/distributed_training_tutorials.html)。 ## 维测管理 + 为了方便维护和定位问题,context提供了大量维测相关的参数配置,如采集profiling数据、异步数据dump功能和print算子落盘等。 ### 采集profiling数据 + 系统支持在训练过程中采集profiling数据,然后通过profiling工具进行性能分析。当前支持采集的profiling数据包括: - `enable_profiling`:是否开启profiling功能。设置为True,表示开启profiling功能,从enable_options读取profiling的采集选项;设置为False,表示关闭profiling功能,仅采集training_trace。 @@ -105,15 +117,18 @@ context.set_auto_parallel_context(parallel_mode=ParallelMode.AUTO_PARALLEL, grad - `enable_options`:profiling采集选项,取值如下,支持采集多项数据。training_trace:采集迭代轨迹数据,即训练任务及AI软件栈的软件信息,实现对训练任务的性能分析,重点关注数据增强、前后向计算、梯度聚合更新等相关数据;task_trace:采集任务轨迹数据,即昇腾910处理器HWTS/AICore的硬件信息,分析任务开始、结束等信息;op_trace:采集单算子性能数据。格式:['op_trace','task_trace','training_trace'] 代码样例如下: + ```python from mindspore import context context.set_context(enable_profiling=True, profiling_options="training_trace") ``` ### 异步数据dump功能 + 在Ascend环境上执行训练,当训练结果和预期有偏差时,可以通过异步数据dump功能保存算子的输入输出进行调试。 代码样例如下: + ```python from mindspore import context context.set_context(save_graphs=True) @@ -122,6 +137,7 @@ context.set_context(save_graphs=True) > 详细的调试方法可以查看[异步数据Dump功能介绍](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/custom_debugging_info.html#dump)。 ### print算子落盘 + 默认情况下,MindSpore的自研print算子可以将用户输入的Tensor或字符串信息打印出来,支持多字符串输入,多Tensor输入和字符串与Tensor的混合输入,输入参数以逗号隔开。 > Print打印功能可以查看[Print算子功能介绍](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/custom_debugging_info.html#print)。 @@ -129,9 +145,10 @@ context.set_context(save_graphs=True) - `print_file_path`:可以将print算子数据保存到文件,同时关闭屏幕打印功能。如果保存的文件已经存在,则会给文件添加时间戳后缀。数据保存到文件可以解决数据量较大时屏幕打印数据丢失的问题。 代码样例如下: + ```python from mindspore import context context.set_context(print_file_path="print.pb") ``` -> context接口详细介绍可以查看[mindspore.context](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.context.html)。 \ No newline at end of file +> context接口详细介绍可以查看[mindspore.context](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.context.html)。 diff --git a/docs/programming_guide/source_zh_cn/dataset_conversion.md b/docs/programming_guide/source_zh_cn/dataset_conversion.md index 872b09859f..0da981f419 100644 --- a/docs/programming_guide/source_zh_cn/dataset_conversion.md +++ b/docs/programming_guide/source_zh_cn/dataset_conversion.md @@ -61,19 +61,19 @@ for i in range(100): white_io = BytesIO() Image.new('RGB', (i*10, i*10), (255, 255, 255)).save(white_io, 'JPEG') image_bytes = white_io.getvalue() - sample['file_name'] = str(i) + ".jpg" - sample['label'] = i + sample['file_name'] = str(i) + ".jpg" + sample['label'] = i sample['data'] = white_io.getvalue() data.append(sample) - if i % 10 == 0: + if i % 10 == 0: writer.write_raw_data(data) data = [] -if data: +if data: writer.write_raw_data(data) -writer.commit() +writer.commit() data_set = ds.MindDataset(dataset_file=mindrecord_filename) decode_op = vision.Decode() @@ -129,18 +129,18 @@ for i in range(100): "target_eos_mask": np.array([48, 49, 50, 51], dtype=np.int64)} data.append(sample) - if i % 10 == 0: + if i % 10 == 0: writer.write_raw_data(data) data = [] -if data: +if data: writer.write_raw_data(data) writer.commit() data_set = ds.MindDataset(dataset_file=mindrecord_filename) count = 0 -for item in data_set.create_dict_iterator(): +for item in data_set.create_dict_iterator(): print("sample: {}".format(item)) count += 1 print("Got {} samples".format(count)) @@ -167,7 +167,7 @@ MindSpore提供转换常用数据集的工具类,能够将常用的数据集 1. 下载[CIFAR-10数据集](https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz)并解压,其目录结构如下所示。 - ``` + ```text └─cifar-10-batches-py ├─batches.meta ├─data_batch_1 @@ -220,7 +220,7 @@ MindSpore提供转换常用数据集的工具类,能够将常用的数据集 1. 下载[ImageNet数据集](http://image-net.org/download),将所有图片存放在同一文件夹,用一个映射文件记录图片和标签的对应关系。映射文件包含2列,分别为各类别图片目录和标签ID,用空格隔开,映射文件示例如下: - ``` + ```text n01440760 0 n01443537 1 n01484850 2 @@ -246,7 +246,7 @@ MindSpore提供转换常用数据集的工具类,能够将常用的数据集 imagenet_transformer.transform() ``` - **参数说明:** + **参数说明:** - `IMAGENET_MAP_FILE`:ImageNet数据集标签映射文件的路径。 - `IMAGENET_IMAGE_DIR`:包含ImageNet所有图片的文件夹路径。 - `MINDRECORD_FILE`:输出的MindRecord文件路径。 @@ -277,8 +277,8 @@ import os import mindspore.dataset as ds from mindspore.mindrecord import CsvToMR -CSV_FILE_NAME = "test.csv" -MINDRECORD_FILE_NAME = "test.mindrecord" +CSV_FILE_NAME = "test.csv" +MINDRECORD_FILE_NAME = "test.mindrecord" PARTITION_NUM = 1 def generate_csv(): @@ -330,8 +330,8 @@ import mindspore.dataset.vision.c_transforms as vision from PIL import Image import tensorflow as tf -TFRECORD_FILE_NAME = "test.tfrecord" -MINDRECORD_FILE_NAME = "test.mindrecord" +TFRECORD_FILE_NAME = "test.tfrecord" +MINDRECORD_FILE_NAME = "test.mindrecord" PARTITION_NUM = 1 def generate_tfrecord(): @@ -339,7 +339,7 @@ def generate_tfrecord(): if isinstance(values, list): feature = tf.train.Feature(int64_list=tf.train.Int64List(value=list(values))) else: - feature = tf.train.Feature(int64_list=tf.train.Int64List(value=[values])) + feature = tf.train.Feature(int64_list=tf.train.Int64List(value=[values])) return feature def create_float_feature(values): @@ -352,9 +352,9 @@ def generate_tfrecord(): def create_bytes_feature(values): if isinstance(values, bytes): white_io = BytesIO() - Image.new('RGB', (10, 10), (255, 255, 255)).save(white_io, 'JPEG') + Image.new('RGB', (10, 10), (255, 255, 255)).save(white_io, 'JPEG') image_bytes = white_io.getvalue() - feature = tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes])) + feature = tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes])) else: feature = tf.train.Feature(bytes_list=tf.train.BytesList(value=[bytes(values, encoding='utf-8')])) return feature diff --git a/docs/programming_guide/source_zh_cn/dataset_loading.md b/docs/programming_guide/source_zh_cn/dataset_loading.md index 3d2e08eb1d..292f5c3533 100644 --- a/docs/programming_guide/source_zh_cn/dataset_loading.md +++ b/docs/programming_guide/source_zh_cn/dataset_loading.md @@ -76,7 +76,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text Image shape: (32, 32, 3) , Label: 0 Image shape: (32, 32, 3) , Label: 1 Image shape: (32, 32, 3) , Label: 2 @@ -110,7 +110,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text [Segmentation]: image shape: (281, 500, 3) target shape: (281, 500, 3) @@ -152,7 +152,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text Detection: dict_keys(['bbox', 'image', 'iscrowd', 'category_id']) Stuff: dict_keys(['segmentation', 'iscrowd', 'image']) Keypoint: dict_keys(['keypoints', 'num_keypoints', 'image']) @@ -218,7 +218,7 @@ TFRecord是TensorFlow定义的一种二进制数据文件格式。 将数据集格式和特征按JSON格式写入Schema文件,示例如下: - ``` + ```json { "columns": { "image": { @@ -281,7 +281,7 @@ TFRecord是TensorFlow定义的一种二进制数据文件格式。 输出结果如下: - ``` + ```text [0.49893939 0.36348882] [0.15234002] [0.83845534 0.19721032] [0.94602561] [0.2361873 0.79506755] [0.88118559] @@ -305,7 +305,7 @@ TFRecord是TensorFlow定义的一种二进制数据文件格式。 输出结果如下: - ``` + ```text [1 2] [3 4] ``` @@ -325,7 +325,7 @@ TFRecord是TensorFlow定义的一种二进制数据文件格式。 输出结果如下: - ``` + ```text {'col1': Tensor(shape=[], dtype=Int64, value= 1), 'col2': Tensor(shape=[], dtype=Int64, value= 3)} {'col1': Tensor(shape=[], dtype=Int64, value= 2), 'col2': Tensor(shape=[], dtype=Int64, value= 4)} ``` @@ -374,7 +374,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text [0.36510558 0.45120592] [0.78888122] [0.49606035 0.07562207] [0.38068183] [0.57176158 0.28963401] [0.16271622] @@ -420,7 +420,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text [0.36510558 0.45120592] [0.78888122] [0.49606035 0.07562207] [0.38068183] [0.57176158 0.28963401] [0.16271622] @@ -457,7 +457,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text [0.36510558 0.45120592] [0.78888122] [0.49606035 0.07562207] [0.38068183] [0.57176158 0.28963401] [0.16271622] @@ -497,7 +497,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text [0.36510558 0.45120592] [0.78888122] [0.57176158 0.28963401] [0.16271622] [0.81585667 0.96883469] [0.77994068] diff --git a/docs/programming_guide/source_zh_cn/dtype.md b/docs/programming_guide/source_zh_cn/dtype.md index 1cbdbdee84..177cf1d89c 100644 --- a/docs/programming_guide/source_zh_cn/dtype.md +++ b/docs/programming_guide/source_zh_cn/dtype.md @@ -21,7 +21,8 @@ MindSpore张量支持不同的数据类型,包含`int8`、`int16`、`int32`、 详细的类型支持情况请参考。 以下代码,打印MindSpore的数据类型int32。 -``` + +```python from mindspore import dtype as mstype data_type = mstype.int32 @@ -30,11 +31,10 @@ print(data_type) 输出如下: -``` +```text Int32 ``` - ## 数据类型转换接口 MindSpore提供了以下几个接口,实现与NumPy数据类型和Python内置的数据类型间的转换。 @@ -45,7 +45,7 @@ MindSpore提供了以下几个接口,实现与NumPy数据类型和Python内置 以下代码实现了不同数据类型间的转换,并打印转换后的类型。 -``` +```python from mindspore import dtype as mstype np_type = mstype.dtype_to_nptype(mstype.int32) @@ -59,7 +59,7 @@ print(py_type) 输出如下: -``` +```text Int64 diff --git a/docs/programming_guide/source_zh_cn/network_component.md b/docs/programming_guide/source_zh_cn/network_component.md index 78376e4937..b66b27f903 100644 --- a/docs/programming_guide/source_zh_cn/network_component.md +++ b/docs/programming_guide/source_zh_cn/network_component.md @@ -26,7 +26,7 @@ GradOperation组件用于生成输入函数的梯度,利用`get_all`、`get_by GradOperation的使用实例如下: -``` +```python import numpy as np import mindspore.nn as nn @@ -64,7 +64,7 @@ GradNetWrtX(Net())(x, y) 输出如下: -``` +```text Tensor(shape=[2, 3], dtype=Float32, [[1.4100001 1.5999999 6.6 ] [1.4100001 1.5999999 6.6 ]]) @@ -79,7 +79,7 @@ MindSpore涉及梯度计算的其他组件,例如`WithGradCell`和`TrainOneSte 下面通过一个实例来介绍其具体的使用, 首先需要构造一个网络,内容如下: -``` +```python import numpy as np import pytest @@ -124,7 +124,8 @@ class LeNet(nn.Cell): ``` 下面是`WithLossCell`的使用实例,分别定义好网络和损失函数,然后创建一个`WithLossCell`,传入输入数据和标签数据,`WithLossCell`内部根据网络和损失函数返回计算结果。 -``` + +```python data = Tensor(np.ones([32, 1, 32, 32]).astype(np.float32) * 0.01) label = Tensor(np.ones([32]).astype(np.int32)) net = LeNet() @@ -136,7 +137,8 @@ print(loss) ``` 输出如下: -``` + +```text +++++++++Loss+++++++++++++ 2.302585 ``` @@ -147,7 +149,7 @@ print(loss) 下面构造一个使用`TrainOneStepCell`接口进行网络训练的实例,其中`LeNet`和包名的导入代码和上个用例共用。 -``` +```python data = Tensor(np.ones([32, 1, 32, 32]).astype(np.float32) * 0.01) label = Tensor(np.ones([32]).astype(np.int32)) net = LeNet() @@ -168,7 +170,8 @@ for i in range(5): 用例中构造了优化器和一个`WithLossCell`的实例,然后传入`TrainOneStepCell`中初始化一个训练网络,用例循环五次,相当于网络训练了五次,并输出每次的loss结果,由结果可以看出每次训练后loss值在逐渐减小。 输出如下: -``` + +```text +++++++++result:0++++++++++++ 2.302585 +++++++++result:1++++++++++++ @@ -180,5 +183,6 @@ for i in range(5): +++++++++result:4++++++++++++ 2.2215357 ``` + 后续内容会介绍MindSpore使用更加高级封装的接口,即`Model`类中的`train`方法训练模型,在其内部实现中会用到 `TrainOneStepCell`和`WithLossCell` 等许多网络组件,感兴趣的读者可以查看其内部实现。 diff --git a/docs/programming_guide/source_zh_cn/operator.md b/docs/programming_guide/source_zh_cn/operator.md index 514f1c8b69..aa0afe9f56 100644 --- a/docs/programming_guide/source_zh_cn/operator.md +++ b/docs/programming_guide/source_zh_cn/operator.md @@ -42,10 +42,13 @@ ## 概述 + MindSpore的算子组件,可从算子使用方式和算子功能两种维度进行划分。 ## 算子使用方式 + 算子相关接口主要包括operations、functional和composite,可通过ops直接获取到这三类算子。 + - operations提供单个的Primtive算子。一个算子对应一个原语,是最小的执行对象,需要实例化之后使用。 - composite提供一些预定义的组合算子,以及复杂的涉及图变换的算子,如`GradOperation`。 - functional提供operations和composite实例化后的对象,简化算子的调用流程。 @@ -59,6 +62,7 @@ Primitive算子也称为算子原语,它直接封装了底层的Ascend、GPU Primitive算子接口是构建高阶接口、自动微分、网络模型等能力的基础。 代码样例如下: + ```python import numpy as np import mindspore @@ -73,7 +77,8 @@ print("output =", output) ``` 输出如下: -``` + +```text output = [ 1. 8. 64.] ``` @@ -98,7 +103,8 @@ print("output =", output) ``` 输出如下: -``` + +```text output = [ 1. 8. 64.] ``` @@ -107,6 +113,7 @@ output = [ 1. 8. 64.] composite提供了一些算子的组合,包括clip_by_value和random相关的一些算子,以及涉及图变换的函数(`GradOperation`、`HyperMap`和`Map`等)。 算子的组合可以直接像一般函数一样使用,例如使用`normal`生成一个随机分布: + ```python from mindspore.common import dtype as mstype from mindspore.ops import composite as C @@ -117,8 +124,10 @@ stddev = Tensor(1.0, mstype.float32) output = C.normal((2, 3), mean, stddev, seed=5) print("ouput =", output) ``` + 输出如下: -``` + +```text output = [[2.4911082 0.7941146 1.3117087] [0.30582333 1.772938 1.525996]] ``` @@ -128,6 +137,7 @@ output = [[2.4911082 0.7941146 1.3117087] 针对涉及图变换的函数,用户可以使用`MultitypeFuncGraph`定义一组重载的函数,根据不同类型,采用不同实现。 代码样例如下: + ```python import numpy as np from mindspore.ops.composite import MultitypeFuncGraph @@ -148,8 +158,10 @@ tensor2 = Tensor(np.array([[1.2, 2.1], [2.2, 3.2]]).astype('float32')) print('tensor', add(tensor1, tensor2)) print('scalar', add(1, 2)) ``` + 输出如下: -``` + +```text tensor [[2.4, 4.2] [4.4, 6.4]] scalar 3 @@ -182,8 +194,9 @@ scalar 3 有些标量运算符对常用的数学运算符进行了重载。并且支持类似NumPy的广播特性。 以下代码实现了对input_x作乘方数为input_y的乘方操作: + ```python -import numpy as np +import numpy as np import mindspore from mindspore import Tensor @@ -193,25 +206,29 @@ print(input_x**input_y) ``` 输出如下: -``` + +```text [ 1. 8. 64.] ``` #### 加法 上述代码中`input_x`和`input_y`的相加实现方式如下: + ```python print(input_x + input_y) ``` 输出如下: -``` + +```text [4.0 5.0 7.0] ``` #### Element-wise乘法 以下代码实现了Element-wise乘法示例: + ```python import numpy as np import mindspore @@ -227,13 +244,15 @@ print(res) ``` 输出如下: -``` + +```text [4. 10. 18] ``` #### 求三角函数 以下代码实现了Acos: + ```python import numpy as np import mindspore @@ -247,9 +266,11 @@ print(output) ``` 输出如下: -``` + +```text [0.7377037, 1.5307858, 1.2661037,0.97641146] ``` + ### 向量运算 向量运算符只在一个特定轴上运算,将一个向量映射到一个标量或者另外一个向量。 @@ -257,6 +278,7 @@ print(output) #### Squeeze 以下代码实现了压缩第3个通道维度为1的通道: + ```python import numpy as np import mindspore @@ -271,11 +293,13 @@ print(output) ``` 输出如下: -``` + +```text [[1. 1.] [1. 1.] [1. 1.]] ``` + ### 矩阵运算 矩阵运算包括矩阵乘法、矩阵范数、矩阵行列式、矩阵求特征值、矩阵分解等运算。 @@ -283,6 +307,7 @@ print(output) #### 矩阵乘法 以下代码实现了input_x 和 input_y的矩阵乘法: + ```python import numpy as np import mindspore @@ -298,7 +323,8 @@ print(output) ``` 输出如下: -``` + +```text [[3. 3. 3. 3.]] ``` @@ -307,6 +333,7 @@ print(output) 广播表示输入各变量channel数目不一致时,改变他们的channel数以得到结果。 - 以下代码实现了广播机制的示例: + ```python from mindspore import Tensor from mindspore.communication import init @@ -338,6 +365,7 @@ output = net(input_) 卷积操作 以下代码实现了常见卷积操作之一的2D convolution 操作: + ```python from mindspore import Tensor import mindspore.ops.operations as P @@ -351,8 +379,10 @@ res = conv2d(input, weight) print(res) ``` + 输出如下: -``` + +```text [[[[288. 288. 288. ... 288. 288. 288.] [288. 288. 288. ... 288. 288. 288.] [288. 288. 288. ... 288. 288. 288.] @@ -386,8 +416,10 @@ res = conv2d_backprop_input(dout, weight, F.shape(x)) print(res) ``` + 输出如下: -``` + +```text [[[[ 32. 64. 96. ... 96. 64. 32.] [ 64. 128. 192. ... 192. 128. 64.] [ 96. 192. 288. ... 288. 192. 96.] @@ -408,6 +440,7 @@ print(res) #### 激活函数 以下代码实现Softmax激活函数计算: + ```python from mindspore import Tensor import mindspore.ops.operations as P @@ -422,13 +455,15 @@ print(res) ``` 输出如下: -``` + +```text [0.01165623 0.03168492 0.08612854 0.23412167 0.6364086] ``` #### LossFunction 以下代码实现了L1 loss function: + ```python from mindspore import Tensor import mindspore.ops.operations as P @@ -443,13 +478,15 @@ print(res) ``` 输出如下: -``` + +```text [0. 0. 0.5] ``` #### 优化算法 以下代码实现了SGD梯度下降算法的具体实现,输出是result: + ```python from mindspore import Tensor import mindspore.ops.operations as P @@ -469,7 +506,8 @@ print(result) ``` 输出如下: -``` + +```text [0. 0. 0. 0.] ``` @@ -496,7 +534,8 @@ print(typea) ``` 输出如下: -``` + +```text Float32 ``` @@ -521,7 +560,8 @@ print(type(result)) ``` 输出结果: -``` + +```text ``` @@ -530,6 +570,7 @@ print(type(result)) 返回输入数据的形状。 以下代码实现了返回输入数据input_tensor的操作: + ```python from mindspore import Tensor import mindspore.ops.operations as P @@ -543,7 +584,8 @@ print(output) ``` 输出如下: -``` + +```text [3, 2, 1] ``` @@ -552,6 +594,7 @@ print(output) 图像操作包括图像预处理操作,如图像剪切(Crop,便于得到大量训练样本)和大小变化(Reise,用于构建图像金子塔等)。 以下代码实现了Crop和Resize操作: + ```python from mindspore import Tensor import mindspore.ops.operations as P @@ -584,7 +627,8 @@ print(output.asnumpy()) ``` 输出如下: -``` + +```text [[[[ 6.51672244e-01 -1.85958534e-01 5.19907832e-01] [ 1.53466597e-01 4.10562098e-01 6.26138210e-01] [ 6.62892580e-01 3.81776541e-01 4.69261825e-01] @@ -616,6 +660,7 @@ print(output.asnumpy()) 对物体所在区域方框进行编码,得到类似PCA的更精简信息,以便做后续类似特征提取,物体检测,图像恢复等任务。 以下代码实现了对anchor_box和groundtruth_box的boundingbox encode: + ```python from mindspore import Tensor import mindspore.ops.operations as P @@ -630,7 +675,8 @@ print(res) ``` 输出如下: -``` + +```text [[5.0000000e-01 5.0000000e-01 -6.5504000e+04 6.9335938e-01] [-1.0000000e+00 2.5000000e-01 0.0000000e+00 4.0551758e-01]] ``` @@ -640,6 +686,7 @@ print(res) 编码器对区域位置信息解码之后,用此算子进行解码。 以下代码实现了: + ```python from mindspore import Tensor import mindspore.ops.operations as P @@ -654,7 +701,8 @@ print(res) ``` 输出如下: -``` + +```text [[4.1953125 0. 0. 5.1953125] [2.140625 0. 3.859375 60.59375]] ``` @@ -664,6 +712,7 @@ print(res) 计算预测的物体所在方框和真实物体所在方框的交集区域与并集区域的占比大小,常作为一种损失函数,用以优化模型。 以下代码实现了计算两个变量anchor_boxes和gt_boxes之间的IOU,以out输出: + ```python from mindspore import Tensor import mindspore.ops.operations as P @@ -678,7 +727,8 @@ print(out) ``` 输出如下: -``` + +```text [[0. -0. 0.] [0. -0. 0.] [0. 0. 0.]] @@ -693,6 +743,7 @@ print(out) 输出Tensor变量的数值,方便用户随时随地打印想了解或者debug必需的某变量数值。 以下代码实现了输出x这一变量的值: + ```python from mindspore import nn @@ -712,6 +763,7 @@ class DebugNN(nn.Cell): 打印中间变量的梯度,是比较常用的算子,目前仅支持Pynative模式。 以下代码实现了打印中间变量(例中x,y)的梯度: + ```python from mindspore import Tensor import mindspore.ops.operations as P @@ -736,7 +788,9 @@ def backward(x, y): backward(1, 2) ``` + 输出如下: -``` + +```text (Tensor(shape=[], dtype=Float32, value=2),) ``` diff --git a/docs/programming_guide/source_zh_cn/optim.md b/docs/programming_guide/source_zh_cn/optim.md index da9807d72e..dc96b82e7b 100644 --- a/docs/programming_guide/source_zh_cn/optim.md +++ b/docs/programming_guide/source_zh_cn/optim.md @@ -24,6 +24,7 @@ > 本文档中的所有示例,支持CPU,GPU,Ascend环境。 ## 学习率 + ### dynamic_lr `mindspore.nn.dynamic_lr`模块有以下几个类: @@ -40,7 +41,7 @@ 例如`piecewise_constant_lr`类代码样例如下: -``` +```python from mindspore.nn.dynamic_lr import piecewise_constant_lr def test_dynamic_lr(): @@ -55,7 +56,8 @@ if __name__ == '__main__': ``` 返回结果如下: -``` + +```text [0.1, 0.1, 0.05, 0.05, 0.05, 0.01, 0.01, 0.01, 0.01, 0.01] ``` @@ -73,7 +75,8 @@ if __name__ == '__main__': 它们是属于`learning_rate_schedule`的不同实现方式。 例如ExponentialDecayLR类代码样例如下: -``` + +```python from mindspore.common import dtype as mstype from mindspore import Tensor from mindspore.nn.learning_rate_schedule import ExponentialDecayLR @@ -93,13 +96,15 @@ if __name__ == '__main__': ``` 返回结果如下: -``` + +```text 0.094868325 ``` - ## Optimzer + ### 如何使用 + 为了使用`mindspore.nn.optim`,我们需要构建一个`Optimizer`对象。这个对象能够保持当前参数状态并基于计算得到的梯度进行参数更新。 - 构建 @@ -108,7 +113,7 @@ if __name__ == '__main__': 代码样例如下: -``` +```python from mindspore import nn optim = nn.SGD(group_params, learning_rate=0.1, weight_decay=0.0) @@ -125,7 +130,7 @@ optim = nn.Adam(group_params, learning_rate=0.1, weight_decay=0.0) 我们仍然能够传递选项作为关键字参数,在未重写这些选项的组中,它们会被用作默认值。当你只想改动一个参数组的选项,但其他参数组的选项不变时,这是非常有用的。 例如,当我们想制定每一层的学习率时,以`SGD`为例: -``` +```python from mindspore import nn optim = nn.SGD([{'params': conv_params, 'weight_decay': 0.01}, @@ -134,6 +139,7 @@ optim = nn.SGD([{'params': conv_params, 'weight_decay': 0.01}, learning_rate=0.1, weight_decay=0.0) ``` + 这段示例意味着当参数是conv_params时候,权重衰减使用的是0.01,学习率使用的是0.1;而参数是no_conv_params时候,权重衰减使用的是0.0,学习率使用的是0.01。这个学习率learning_rate=0.1会被用于所有分组里没有设置学习率的参数,权重衰减weight_deca也是如此。 ### 内置优化器 @@ -149,7 +155,7 @@ optim = nn.SGD([{'params': conv_params, 'weight_decay': 0.01}, 例如`SGD`的代码样例如下: -``` +```python from mindspore import nn from mindspore.train import Model from .optimizer import Optimizer @@ -183,4 +189,4 @@ optim = nn.SGD(group_params, learning_rate=0.1, weight_decay=0.0) loss = nn.SoftmaxCrossEntropyWithLogits() model = Model(net, loss_fn=loss, optimizer=optim) -``` \ No newline at end of file +``` diff --git a/docs/programming_guide/source_zh_cn/parameter.md b/docs/programming_guide/source_zh_cn/parameter.md index d42c81a97d..d179d6c161 100644 --- a/docs/programming_guide/source_zh_cn/parameter.md +++ b/docs/programming_guide/source_zh_cn/parameter.md @@ -18,9 +18,11 @@ `Parameter`是变量张量,代表在训练网络时,需要被更新的参数。本章主要介绍了`Parameter`的初始化以及属性和方法的使用,同时介绍了`ParameterTuple`。 ## 初始化 -``` + +```python mindspore.Parameter(default_input, name, requires_grad=True, layerwise_parallel=False) ``` + 初始化一个`Parameter`对象,传入的数据支持`Tensor`、`Initializer`、`int`和`float`四种类型。 `Initializer`是初始化器,保存了shape和dtype信息,提供`to_tensor`方法生成存有数据的`Tensor`,可调用`initializer`接口生成`Initializer`对象。 @@ -38,7 +40,8 @@ mindspore.Parameter(default_input, name, requires_grad=True, layerwise_parallel= 有关分布式并行的相关配置,可以参考文档:。 下例通过三种不同的数据类型构造了`Parameter`,三个`Parameter`都需要更新,都不采用layerwise并行。如下: -``` + +```python import numpy as np from mindspore import Tensor, Parameter from mindspore.common import dtype as mstype @@ -53,12 +56,12 @@ print(x, "\n\n", y, "\n\n", z) 输出如下: -``` +```text Parameter (name=x, value=[[0 1 2] - [3 4 5]]) + [3 4 5]]) Parameter (name=y, value=[[[1. 1. 1.] - [1. 1. 1.]]]) + [1. 1. 1.]]]) Parameter (name=z, value=2.0) ``` @@ -84,7 +87,7 @@ Parameter (name=z, value=2.0) 下例通过`Tensor`初始化一个`Parameter`,获取了`Parameter`的相关属性。如下: -``` +```python import numpy as np from mindspore import Tensor, Parameter @@ -102,7 +105,7 @@ print("name: ", x.name, "\n", 输出如下: -``` +```text name: x sliced: False is_init: False @@ -111,10 +114,11 @@ requires_grad: True layerwise_parallel: False data: Parameter (name=x, value=[[0 1 2] - [3 4 5]]) + [3 4 5]]) ``` ## 方法 + - `init_data`:在网络采用半自动或者全自动并行策略的场景下, 当初始化`Parameter`传入的数据是`Initializer`时,可调用该接口将`Parameter`保存的数据转换为`Tensor`。 @@ -127,7 +131,7 @@ data: Parameter (name=x, value=[[0 1 2] 下例通过`Initializer`来初始化`Tensor`,调用了`Parameter`的相关方法。如下: -``` +```python import numpy as np from mindspore import Tensor, Parameter @@ -145,7 +149,7 @@ print(x.set_data(default_input=Tensor(np.arange(2*3).reshape((1, 2, 3))))) 输出如下: -``` +```text Parameter (name=x, value=[[[1. 1. 1.] [1. 1. 1.]]]) Parameter (name=x_c.x, value=[[[1. 1. 1.] @@ -158,11 +162,12 @@ Parameter (name=x, value=[[[0. 1. 2.] ``` ## ParameterTuple + 继承于`tuple`,用于保存多个`Parameter`,通过`__new__(cls, iterable)`传入一个存放`Parameter`的迭代器进行构造,提供`clone`接口进行克隆。 下例构造了一个`ParameterTuple`对象,并进行了克隆。如下: -``` +```python import numpy as np from mindspore import Tensor, Parameter, ParameterTuple from mindspore.common import dtype as mstype @@ -179,12 +184,12 @@ print(params_copy) 输出如下: -``` +```text (Parameter (name=x, value=Tensor(shape=[2, 3], dtype=Int64, [[ 0, 1, 2], [ 3, 4, 5]])), Parameter (name=y, value=Tensor(shape=[1, 2, 3], dtype=Float32, [[[ 1.00000000e+00, 1.00000000e+00, 1.00000000e+00], - [ 1.00000000e+00, 1.00000000e+00, 1.00000000e+00]]])), Parameter (name=z, value=Tensor(shape=[], dtype=Float32, 2))) + [ 1.00000000e+00, 1.00000000e+00, 1.00000000e+00]]])), Parameter (name=z, value=Tensor(shape=[], dtype=Float32, 2))) (Parameter (name=params_copy.x, value=Tensor(shape=[2, 3], dtype=Int64, [[ 0, 1, 2], diff --git a/docs/programming_guide/source_zh_cn/pipeline.md b/docs/programming_guide/source_zh_cn/pipeline.md index ba0e282794..7b16631c79 100644 --- a/docs/programming_guide/source_zh_cn/pipeline.md +++ b/docs/programming_guide/source_zh_cn/pipeline.md @@ -65,7 +65,7 @@ for data in dataset1.create_dict_iterator(): 输出结果如下: -``` +```text {'data': Tensor(shape=[3], dtype=Int64, value=[0, 1, 2])} {'data': Tensor(shape=[3], dtype=Int64, value=[2, 3, 4])} {'data': Tensor(shape=[3], dtype=Int64, value=[3, 4, 5])} @@ -109,7 +109,7 @@ for data in dataset.create_dict_iterator(): 输出结果如下: -``` +```text {'data': Tensor(shape=[3], dtype=Int64, value=[0, 1, 2])} {'data': Tensor(shape=[3], dtype=Int64, value=[1, 2, 3])} {'data': Tensor(shape=[3], dtype=Int64, value=[2, 3, 4])} @@ -156,7 +156,7 @@ for data in dataset2.create_dict_iterator(): 输出结果如下: -``` +```text {'data': Tensor(shape=[2, 3], dtype=Int64, value=[[0, 1, 2], [1, 2, 3]])} {'data': Tensor(shape=[2, 3], dtype=Int64, value=[[2, 3, 4], [3, 4, 5]])} {'data': Tensor(shape=[1, 3], dtype=Int64, value=[[4, 5, 6]])} @@ -192,7 +192,7 @@ for data in dataset1.create_dict_iterator(): 输出结果如下: -``` +```text {'data': Tensor(shape=[3], dtype=Int64, value=[0, 1, 2])} {'data': Tensor(shape=[3], dtype=Int64, value=[1, 2, 3])} {'data': Tensor(shape=[3], dtype=Int64, value=[2, 3, 4])} @@ -239,7 +239,7 @@ for data in dataset3.create_dict_iterator(): 输出结果如下: -``` +```text {'data1': Tensor(shape=[3], dtype=Int64, value= [0, 1, 2]), 'data2': Tensor(shape=[2], dtype=Int64, value= [1, 2])} {'data1': Tensor(shape=[3], dtype=Int64, value= [1, 2, 3]), 'data2': Tensor(shape=[2], dtype=Int64, value= [1, 2])} {'data1': Tensor(shape=[3], dtype=Int64, value= [2, 3, 4]), 'data2': Tensor(shape=[2], dtype=Int64, value= [1, 2])} @@ -279,7 +279,7 @@ for data in dataset3.create_dict_iterator(): 输出结果如下: -``` +```text {'data1': Tensor(shape=[3], dtype=Int64, value= [0, 0, 0])} {'data1': Tensor(shape=[3], dtype=Int64, value= [0, 0, 0])} {'data1': Tensor(shape=[3], dtype=Int64, value= [1, 2, 3])} diff --git a/docs/programming_guide/source_zh_cn/probability.md b/docs/programming_guide/source_zh_cn/probability.md index 3b1073b4cb..8cbea64240 100644 --- a/docs/programming_guide/source_zh_cn/probability.md +++ b/docs/programming_guide/source_zh_cn/probability.md @@ -82,6 +82,7 @@ MindSpore深度概率编程的目标是将深度学习和贝叶斯学习结合 伯努利分布,继承自 `Distribution` 类。 属性: + - `Bernoulli.probs`:伯努利试验成功的概率。 `Distribution` 基类调用 `Bernoulli` 中私有接口以实现基类中的公有接口。`Bernoulli` 支持的公有接口为: @@ -97,6 +98,7 @@ MindSpore深度概率编程的目标是将深度学习和贝叶斯学习结合 指数分布,继承自 `Distribution` 类。 属性: + - `Exponential.rate`:率参数。 `Distribution` 基类调用 `Exponential` 私有接口以实现基类中的公有接口。`Exponential` 支持的公有接口为: @@ -112,6 +114,7 @@ MindSpore深度概率编程的目标是将深度学习和贝叶斯学习结合 几何分布,继承自 `Distribution` 类。 属性: + - `Geometric.probs`:伯努利试验成功的概率。 `Distribution` 基类调用 `Geometric` 中私有接口以实现基类中的公有接口。`Geometric` 支持的公有接口为: @@ -127,6 +130,7 @@ MindSpore深度概率编程的目标是将深度学习和贝叶斯学习结合 正态(高斯)分布,继承自 `Distribution` 类。 `Distribution` 基类调用 `Normal` 中私有接口以实现基类中的公有接口。`Normal` 支持的公有接口为: + - `mean`,`mode`,`var`:可选择传入分布的参数均值 *mean* 和标准差 *sd* 。 - `entropy`:可选择传入分布的参数均值 *mean* 和标准差 *sd* 。 - `cross_entropy`,`kl_loss`:必须传入 *dist* ,*mean_b* 和 *sd_b* 。*dist* 为另一分布的类型的名称,目前只支持此处为 *‘Normal’* 。*mean_b* 和 *sd_b* 为分布 *b* 的均值和标准差。可选择传入分布的参数 *a* 均值 *mean_a* 和标准差 *sd_a* 。 @@ -138,6 +142,7 @@ MindSpore深度概率编程的目标是将深度学习和贝叶斯学习结合 均匀分布,继承自 `Distribution` 类。 属性: + - `Uniform.low`:最小值。 - `Uniform.high`:最大值。 @@ -162,65 +167,91 @@ import mindspore.context as context import mindspore.nn.probability.distribution as msd context.set_context(mode=context.PYNATIVE_MODE) ``` + 以 `Normal` 为例, 创建一个均值为0.0、标准差为1.0的正态分布: + ```python my_normal = msd.Normal(0.0, 1.0, dtype=mstype.float32) ``` + 计算均值: + ```python mean = my_normal.mean() print(mean) ``` + 输出为: -```python + +```text 0.0 ``` + 计算方差: + ```python var = my_normal.var() print(var) ``` + 输出为: -```python + +```text 1.0 ``` + 计算熵: + ```python entropy = my_normal.entropy() print(entropy) ``` + 输出为: -```python + +```text 1.4189385 ``` + 计算概率密度函数: + ```python value = Tensor([-0.5, 0.0, 0.5], dtype=mstype.float32) prob = my_normal.prob(value) print(prob) ``` + 输出为: -```python + +```text [0.35206532, 0.3989423, 0.35206532] ``` + 计算累积分布函数: + ```python cdf = my_normal.cdf(value) print(cdf) ``` + 输出为: -```python + +```text [0.30852754, 0.5, 0.69146246] ``` + 计算 Kullback-Leibler 散度: + ```python mean_b = Tensor(1.0, dtype=mstype.float32) sd_b = Tensor(2.0, dtype=mstype.float32) kl = my_normal.kl_loss('Normal', mean_b, sd_b) print(kl) ``` + 输出为: -```python + +```text 0.44314718 ``` @@ -229,6 +260,7 @@ print(kl) 在图模式下,`Distribution` 子类可用在网络中。 导入相关模块: + ```python import mindspore.nn as nn from mindspore import Tensor @@ -237,20 +269,24 @@ import mindspore.context as context import mindspore.nn.probability.distribution as msd context.set_context(mode=context.GRAPH_MODE) ``` + 创建网络: + ```python # 网络继承nn.Cell class Net(nn.Cell): def __init__(self): super(Net, self).__init__() self.normal = msd.Normal(0.0, 1.0, dtype=mstype.float32) - + def construct(self, value, mean, sd): pdf = self.normal.prob(value) kl = self.normal.kl_loss("Normal", mean, sd) return pdf, kl ``` + 调用网络: + ```python net = Net() value = Tensor([-0.5, 0.0, 0.5], dtype=mstype.float32) @@ -260,8 +296,10 @@ pdf, kl = net(value, mean, sd) print("pdf: ", pdf) print("kl: ", kl) ``` + 输出为: -```python + +```text pdf: [0.3520653, 0.39894226, 0.3520653] kl: 0.5 ``` @@ -293,6 +331,7 @@ kl: 0.5 在执行之前,我们需要导入需要的库文件包。 导入相关模块: + ```python import numpy as np import mindspore.nn as nn @@ -305,6 +344,7 @@ context.set_context(mode=context.PYNATIVE_MODE) ``` 构造一个 `TransformedDistribution` 实例,使用 `Normal` 分布作为需要变换的分布类,使用 `Exp` 作为映射变换,可以生成 `LogNormal` 分布。 + ```python normal = msd.Normal(0.0, 1.0, dtype=dtype.float32) exp = msb.Exp() @@ -313,7 +353,8 @@ print(LogNormal) ``` 输出为: -```python + +```text TransformedDistribution< (_bijector): Exp (_distribution): Normal @@ -323,6 +364,7 @@ TransformedDistribution< 可以对 `LogNormal` 进行概率分布计算。例如: 计算累积分布函数: + ```python x = np.array([2.0, 5.0, 10.0], dtype=np.float32) tx = Tensor(x, dtype=dtype.float32) @@ -331,11 +373,13 @@ print(cdf) ``` 输出为: -```python + +```text [7.55891383e-01, 9.46239710e-01, 9.89348888e-01] ``` 计算对数累积分布函数: + ```python x = np.array([2.0, 5.0, 10.0], dtype=np.float32) tx = Tensor(x, dtype=dtype.float32) @@ -344,11 +388,13 @@ print(log_cdf) ``` 输出为: -```python + +```text [-2.79857576e-01, -5.52593507e-02, -1.07082408e-02] ``` 计算生存函数: + ```python x = np.array([2.0, 5.0, 10.0], dtype=np.float32) tx = Tensor(x, dtype=dtype.float32) @@ -357,11 +403,13 @@ print(survival_function) ``` 输出为: -```python + +```text [2.44108617e-01, 5.37602901e-02, 1.06511116e-02] ``` 计算对数生存函数: + ```python x = np.array([2.0, 5.0, 10.0], dtype=np.float32) tx = Tensor(x, dtype=dtype.float32) @@ -370,11 +418,13 @@ print(log_survival) ``` 输出为: -```python + +```text [-1.41014194e+00, -2.92322016e+00, -4.54209089e+00] ``` 计算概率密度函数: + ```python x = np.array([2.0, 5.0, 10.0], dtype=np.float32) tx = Tensor(x, dtype=dtype.float32) @@ -383,11 +433,13 @@ print(prob) ``` 输出为: -```python + +```text [1.56874031e-01, 2.18507163e-02, 2.81590177e-03] ``` 计算对数概率密度函数: + ```python x = np.array([2.0, 5.0, 10.0], dtype=np.float32) tx = Tensor(x, dtype=dtype.float32) @@ -396,11 +448,13 @@ print(log_prob) ``` 输出为: -```python + +```text [-1.85231221e+00, -3.82352161e+00, -5.87247276e+00] ``` 调用取样函数 `sample` 抽样: + ```python shape = ((3, 2)) sample = LogNormal.sample(shape) @@ -408,13 +462,15 @@ print(sample) ``` 输出为: -```python + +```text [[7.64315844e-01, 3.01435232e-01], [1.17166102e+00, 2.60277224e+00], [7.02699006e-01, 3.91564220e-01]]) ``` 当构造 `TransformedDistribution` 映射变换的 `is_constant_jacobian = true` 时(如 `ScalarAffine`),构造的 `TransformedDistribution` 实例可以使用直接使用 `mean` 接口计算均值,例如: + ```python normal = msd.Normal(0.0, 1.0, dtype=dtype.float32) scalaraffine = msb.ScalarAffine(1.0, 2.0) @@ -422,15 +478,19 @@ trans_dist = msd.TransformedDistribution(scalaraffine, normal, dtype=dtype.float mean = trans_dist.mean() print(mean) ``` + 输出为: -```python + +```text 2.0 ``` + ### 图模式下调用TransformedDistribution实例 在图模式下,`TransformedDistribution` 类可用在网络中。 导入相关模块: + ```python import mindspore.nn as nn from mindspore import Tensor @@ -442,6 +502,7 @@ context.set_context(mode=self.GRAPH_MODE) ``` 创建网络: + ```python class Net(nn.Cell): def __init__(self, shape, dtype=dtype.float32, seed=0, name='transformed_distribution'): @@ -451,7 +512,7 @@ class Net(nn.Cell): self.normal = msd.Normal(0.0, 1.0, dtype=dtype) self.lognormal = msd.TransformedDistribution(self.exp, self.normal, dtype=dtype, seed=seed, name=name) self.shape = shape - + def construct(self, value): cdf = self.lognormal.cdf(value) sample = self.lognormal.sample(self.shape) @@ -459,6 +520,7 @@ class Net(nn.Cell): ``` 调用网络: + ```python shape = (2, 3) net = Net(shape=shape, name="LogNormal") @@ -468,8 +530,10 @@ cdf, sample = net(tx) print("cdf: ", cdf) print("sample: ", sample) ``` + 输出为: -```python + +```text cdf: [0.7558914 0.8640314 0.9171715 0.9462397] sample: [[0.21036398 0.44932044 0.5669641 ] [1.4103683 6.724116 0.97894996]] @@ -503,6 +567,7 @@ Bijector(`mindspore.nn.probability.bijector`)是概率编程的基本组成 输入是一个 `Distribution` 类:生成一个 `TransformedDistribution` **(不可在图内调用)**。 #### 幂函数变换映射(PowerTransform) + `PowerTransform` 做如下变量替换:$Y = g(X) = {(1 + X * c)}^{1 / c}$。其接口包括: 1. 类特征函数 @@ -515,15 +580,18 @@ Bijector(`mindspore.nn.probability.bijector`)是概率编程的基本组成 - `inverse_log_jacobian`:反向映射的导数的对数,输入为 `Tensor` 。 #### 指数变换映射(Exp) + `Exp` 做如下变量替换:$Y = g(X)= exp(X)$。其接口包括: 映射函数 + - `forward`:正向映射,输入为 `Tensor` 。 - `inverse`:反向映射,输入为 `Tensor` 。 - `forward_log_jacobian`:正向映射的导数的对数,输入为 `Tensor` 。 - `inverse_log_jacobian`:反向映射的导数的对数,输入为 `Tensor` 。 #### 标量仿射变换映射(ScalarAffine) + `ScalarAffine` 做如下变量替换:Y = g(X) = a * X + b。其接口包括: 1. 类特征函数 @@ -537,6 +605,7 @@ Bijector(`mindspore.nn.probability.bijector`)是概率编程的基本组成 - `inverse_log_jacobian`:反向映射的导数的对数,输入为 `Tensor` 。 #### Softplus变换映射(Softplus) + `Softplus` 做如下变量替换:$Y = g(X) = log(1 + e ^ {kX}) / k $。其接口包括: 1. 类特征函数 @@ -553,6 +622,7 @@ Bijector(`mindspore.nn.probability.bijector`)是概率编程的基本组成 在执行之前,我们需要导入需要的库文件包。双射类最主要的库是 `mindspore.nn.probability.bijector`,导入后我们使用 `msb` 作为库的缩写并进行调用。 导入相关模块: + ```python import numpy as np import mindspore.nn as nn @@ -566,19 +636,22 @@ context.set_context(mode=context.PYNATIVE_MODE) 下面我们以 `PowerTransform` 为例。创建一个指数为2的 `PowerTransform` 对象。 构造 `PowerTransform`: + ```python powertransform = msb.PowerTransform(power=2) print(powertransform) ``` 输出: -```python + +```text PowerTransform ``` 接下来可以使用映射函数进行运算。 调用 `forward` 方法,计算正向映射: + ```python x = np.array([2.0, 3.0, 4.0, 5.0], dtype=np.float32) tx = Tensor(x, dtype=dtype.float32) @@ -587,40 +660,47 @@ print(forward) ``` 输出为: -```python + +```text [2.23606801e+00, 2.64575124e+00, 3.00000000e+00, 3.31662488e+00] ``` 输入 `inverse` 方法,计算反向映射: + ```python inverse = powertransform.inverse(tx) print(inverse) ``` 输出为: -```python + +```text [1.50000000e+00, 4.00000048e+00, 7.50000000e+00, 1.20000010e+01] ``` 输入 `forward_log_jacobian` 方法,计算正向映射导数的对数: + ```python forward_log_jaco = powertransform.forward_log_jacobian(tx) print(forward_log_jaco) ``` 输出: -```python + +```text [-8.04718971e-01, -9.72955048e-01, -1.09861231e+00, -1.19894767e+00] ``` 输入 `inverse_log_jacobian` 方法,计算反向映射导数的对数: + ```python inverse_log_jaco = powertransform.inverse_log_jacobian(tx) print(inverse_log_jaco) ``` 输出为: -```python + +```text [6.93147182e-01 1.09861231e+00 1.38629436e+00 1.60943794e+00] ``` @@ -629,6 +709,7 @@ print(inverse_log_jaco) 在图模式下,`Bijector` 子类可用在网络中。 导入相关模块: + ```python import mindspore.nn as nn from mindspore import Tensor @@ -639,6 +720,7 @@ context.set_context(mode=context.GRAPH_MODE) ``` 创建网络: + ```python class Net(nn.Cell): def __init__(self): @@ -653,7 +735,9 @@ class Net(nn.Cell): inverse_log_jaco = self.s1.inverse_log_jacobian(value) return forward, inverse, forward_log_jaco, inverse_log_jaco ``` + 调用网络: + ```python net = Net() x = np.array([2.0, 3.0, 4.0, 5.0]).astype(np.float32) @@ -664,8 +748,10 @@ print("inverse: ", inverse) print("forward_log_jaco: ", forward_log_jaco) print("inverse_log_jaco: ", inverse_log_jaco) ``` + 输出为: -```python + +```text forward: [2.236068 2.6457512 3. 3.3166249] inverse: [ 1.5 4.0000005 7.5 12.000001 ] forward_log_jaco: [-0.804719 -0.97295505 -1.0986123 -1.1989477 ] @@ -723,6 +809,7 @@ encoder = Encoder() decoder = Decoder() vae = VAE(encoder, decoder, hidden_size=400, latent_size=20) ``` + ### ConditionalVAE 类似地,ConditionalVAE与VAE的使用方法比较相近,不同的是,ConditionalVAE利用了数据集的标签信息,属于有监督学习算法,其生成效果一般会比VAE好。 @@ -779,6 +866,7 @@ cvae = ConditionalVAE(encoder, decoder, hidden_size=400, latent_size=20, num_cla ```python ds_train = create_dataset(image_path, 128, 1) ``` + 接下来,需要用到infer接口进行VAE网络的变分推断。 ## 概率推断算法 @@ -796,7 +884,9 @@ vi = SVI(net_with_loss=net_with_loss, optimizer=optimizer) vae = vi.run(train_dataset=ds_train, epochs=10) trained_loss = vi.get_train_loss() ``` + 最后,得到训练好的VAE网络后,我们可以使用`vae.generate_sample`生成新样本,需要传入待生成样本的个数,及生成样本的shape,shape需要保持和原数据集中的样本shape一样;当然,我们也可以使用`vae.reconstruct_sample`重构原来数据集中的样本,来测试VAE网络的重建能力。 + ```python generated_sample = vae.generate_sample(64, IMAGE_SHAPE) for sample in ds_train.create_dict_iterator(): @@ -804,10 +894,13 @@ for sample in ds_train.create_dict_iterator(): reconstructed_sample = vae.reconstruct_sample(sample_x) print('The shape of the generated sample is ', generated_sample.shape) ``` + 我们可以看一下新生成样本的shape: -```python + +```text The shape of the generated sample is (64, 1, 32, 32) ``` + ConditionalVAE训练过程和VAE的过程类似,但需要注意的是使用训练好的ConditionalVAE网络生成新样本和重建新样本时,需要输入标签信息,例如下面生成的新样本就是64个0-7的数字。 ```python @@ -819,8 +912,10 @@ for sample in ds_train.create_dict_iterator(): reconstructed_sample = cvae.reconstruct_sample(sample_x, sample_y) print('The shape of the generated sample is ', generated_sample.shape) ``` + 查看一下新生成的样本的shape: -```python + +```text The shape of the generated sample is (64, 1, 32, 32) ``` @@ -849,8 +944,10 @@ class TransformToBNN: self.bnn_factor = bnn_factor self.bnn_loss_file = None ``` + 参数`trainable_bnn`是经过`TrainOneStepCell`包装的可训练DNN模型,`dnn_factor`和`bnn_factor`分别为由损失函数计算得到的网络整体损失的系数和每个贝叶斯层的KL散度的系数。 API`TransformToBNN`主要实现了两个功能: + - 功能一:转换整个模型 `transform_to_bnn_model`方法可以将整个DNN模型转换为BNN模型。其定义如下: @@ -881,8 +978,9 @@ API`TransformToBNN`主要实现了两个功能: Returns: Cell, a trainable BNN model wrapped by TrainOneStepCell. """ - + ``` + 参数`get_dense_args`指定从DNN模型的全连接层中获取哪些参数,默认值是DNN模型的全连接层和BNN的全连接层所共有的参数,参数具体的含义可以参考[API说明文档](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.Dense);`get_conv_args`指定从DNN模型的卷积层中获取哪些参数,默认值是DNN模型的卷积层和BNN的卷积层所共有的参数,参数具体的含义可以参考[API说明文档](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.nn.html#mindspore.nn.Conv2d);参数`add_dense_args`和`add_conv_args`分别指定了要为BNN层指定哪些新的参数值。需要注意的是,`add_dense_args`中的参数不能与`get_dense_args`重复,`add_conv_args`和`get_conv_args`也是如此。 - 功能二:转换指定类型的层 @@ -904,8 +1002,9 @@ API`TransformToBNN`主要实现了两个功能: Returns: Cell, a trainable model wrapped by TrainOneStepCell, whose sprcific type of layer is transformed to the corresponding bayesian layer. - """ + """ ``` + 参数`dnn_layer`指定将哪个类型的DNN层转换成BNN层,`bnn_layer`指定DNN层将转换成哪个类型的BNN层,`get_args`和`add_args`分别指定从DNN层中获取哪些参数和要为BNN层的哪些参数重新赋值。 如何在MindSpore中使用API`TransformToBNN`可以参考教程[DNN一键转换成BNN](https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/apply_deep_probability_programming.html#dnnbnn) @@ -918,6 +1017,7 @@ API`TransformToBNN`主要实现了两个功能: - 认知不确定性(Epistemic Uncertainty):模型自身对输入数据的估计可能因为训练不佳、训练数据不够等原因而不准确,可以通过增加训练数据等方式来缓解。 不确定性评估工具箱的接口如下: + - `model`:待评估不确定性的已训练好的模型。 - `train_dataset`:用于训练的数据集,迭代器类型。 - `task_type`:模型的类型,字符串,输入“regression”或者“classification”。 @@ -928,6 +1028,7 @@ API`TransformToBNN`主要实现了两个功能: - `save_model`:布尔类型,是否需要存储模型。 在使用前,需要先训练好模型,以LeNet5为例,使用方式如下: + ```python from mindspore.nn.probability.toolbox.uncertainty_evaluation import UncertaintyEvaluation from mindspore.train.serialization import load_checkpoint, load_param_into_net @@ -955,11 +1056,13 @@ if __name__ == '__main__': print('The shape of epistemic uncertainty is ', epistemic_uncertainty.shape) print('The shape of epistemic uncertainty is ', aleatoric_uncertainty.shape) ``` + `eval_epistemic_uncertainty`计算的是认知不确定性,也叫模型不确定性,对于每一个样本的每个预测标签都会有一个不确定值;`eval_aleatoric_uncertainty`计算的是偶然不确定性,也叫数据不确定性,对于每一个样本都会有一个不确定值。 所以输出为: -```python +```text The shape of epistemic uncertainty is (32, 10) The shape of epistemic uncertainty is (32,) ``` + uncertainty的值位于[0,1]之间,越大表示不确定性越高。 -- Gitee From d95d90a5e199759774534390760849a847a8ee4b Mon Sep 17 00:00:00 2001 From: Jiaqi Date: Tue, 20 Oct 2020 10:04:31 +0800 Subject: [PATCH 18/21] target --- .../source_en/advanced_use/apply_host_device_training.md | 4 ++-- .../source_zh_cn/advanced_use/apply_host_device_training.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tutorials/training/source_en/advanced_use/apply_host_device_training.md b/tutorials/training/source_en/advanced_use/apply_host_device_training.md index 6874086a85..e1f3d69be7 100644 --- a/tutorials/training/source_en/advanced_use/apply_host_device_training.md +++ b/tutorials/training/source_en/advanced_use/apply_host_device_training.md @@ -66,8 +66,8 @@ This tutorial introduces how to train [Wide&Deep](https://gitee.com/mindspore/mi In `class TrainStepWrap(nn.Cell)` of file `src/wide_and_deep.py`, check two optimizer are also at host: ```python - self.optimizer_w.sparse_opt.add_prim_attr("primitive_target", "CPU") - self.optimizer_d.sparse_opt.add_prim_attr("primitive_target", "CPU") + self.optimizer_w.target = "CPU" + self.optimizer_d.target = "CPU" ``` ## Training the Model diff --git a/tutorials/training/source_zh_cn/advanced_use/apply_host_device_training.md b/tutorials/training/source_zh_cn/advanced_use/apply_host_device_training.md index 521ffc5b22..c171c55efb 100644 --- a/tutorials/training/source_zh_cn/advanced_use/apply_host_device_training.md +++ b/tutorials/training/source_zh_cn/advanced_use/apply_host_device_training.md @@ -62,8 +62,8 @@ 在`src/wide_and_deep.py`文件的`class TrainStepWrap(nn.Cell)`中,检查两个优化器主机端执行的属性。 ```python - self.optimizer_w.sparse_opt.add_prim_attr("primitive_target", "CPU") - self.optimizer_d.sparse_opt.add_prim_attr("primitive_target", "CPU") + self.optimizer_w.target = "CPU" + self.optimizer_d.target = "CPU" ``` ## 训练模型 -- Gitee From 4fb11c75c6de36e066f968001f53bf922380e942 Mon Sep 17 00:00:00 2001 From: zhangyi Date: Mon, 19 Oct 2020 19:20:29 +0800 Subject: [PATCH 19/21] update notebook for mindinsight_dashboard --- tutorials/notebook/README.md | 3 +- .../calculate_and_datagraphic.ipynb | 422 ------ .../mindinsight/images/caculate_graph.png | Bin 0 -> 63499 bytes .../notebook/mindinsight/images/cast_map.png | Bin 166896 -> 0 bytes .../mindinsight/images/data_function.png | Bin 0 -> 60377 bytes .../notebook/mindinsight/images/data_map.png | Bin 60833 -> 0 bytes .../mindinsight/images/graph_sidebar.png | Bin 0 -> 39534 bytes .../mindinsight/images/histogram_only.png | Bin 215839 -> 0 bytes .../mindinsight/images/histogram_only_all.png | Bin 206853 -> 0 bytes .../mindinsight/images/image_only.png | Bin 179393 -> 0 bytes .../mindinsight/images/image_panel.png | Bin 145940 -> 140756 bytes .../mindinsight/images/mindinsight_panel.png | Bin 19841 -> 26968 bytes .../mindinsight/images/mindinsight_panel2.png | Bin 315885 -> 300708 bytes .../mindinsight/images/multi_scalars.png | Bin 99462 -> 0 bytes .../mindinsight/images/scalar_panel.png | Bin 81399 -> 84349 bytes .../notebook/mindinsight/images/tensor.png | Bin 31310 -> 34625 bytes .../mindinsight/images/tensor_func.png | Bin 8322 -> 42430 bytes .../mindinsight/images/tensor_only.png | Bin 98947 -> 0 bytes .../mindinsight/mindinsight_dashboard.ipynb | 846 +++++++++++ ...nsight_image_histogram_scalar_tensor.ipynb | 1285 ----------------- .../source_zh_cn/advanced_use/dashboard.md | 4 +- .../advanced_use/summary_record.md | 2 +- 22 files changed, 850 insertions(+), 1712 deletions(-) delete mode 100644 tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb create mode 100644 tutorials/notebook/mindinsight/images/caculate_graph.png delete mode 100644 tutorials/notebook/mindinsight/images/cast_map.png create mode 100644 tutorials/notebook/mindinsight/images/data_function.png delete mode 100644 tutorials/notebook/mindinsight/images/data_map.png create mode 100644 tutorials/notebook/mindinsight/images/graph_sidebar.png delete mode 100644 tutorials/notebook/mindinsight/images/histogram_only.png delete mode 100644 tutorials/notebook/mindinsight/images/histogram_only_all.png delete mode 100644 tutorials/notebook/mindinsight/images/image_only.png delete mode 100644 tutorials/notebook/mindinsight/images/multi_scalars.png delete mode 100644 tutorials/notebook/mindinsight/images/tensor_only.png create mode 100644 tutorials/notebook/mindinsight/mindinsight_dashboard.ipynb delete mode 100644 tutorials/notebook/mindinsight/mindinsight_image_histogram_scalar_tensor.ipynb diff --git a/tutorials/notebook/README.md b/tutorials/notebook/README.md index 56052a8107..555baf04c3 100644 --- a/tutorials/notebook/README.md +++ b/tutorials/notebook/README.md @@ -70,7 +70,6 @@ | 使用PyNative进行神经网络的训练调试体验 | [debugging_in_pynative_mode.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/debugging_in_pynative_mode.ipynb) | 模型调优 | - GPU平台下从数据集获取单个数据进行单个step训练的数据变化全过程解读
- 了解PyNative模式下的调试方法
- 图片数据在训练过程中的变化情况的图形展示
- 了解构建权重梯度计算函数的方法
- 展示1个step过程中权重的变化及数据展示 | 自定义调试信息体验文档 | [custom_debugging_info.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/custom_debugging_info.ipynb) | 模型调优 | - 了解MindSpore的自定义调试算子
- 学习使用自定义调试算子Callback设置定时训练
- 学习设置metrics算子输出相对应的模型精度信息
- 学习设置日志环境变量来控制glog输出日志 | MindInsight的溯源分析和对比分析 | [lineage_and_scalars_comparision.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/lineage_and_scalars_comparision.ipynb) | 模型调优 | - 了解MindSpore中训练数据的采集及展示
- 学习使用回调函数SummaryCollector进行数据采集
- 使用MindInsight进行数据可视化
- 了解数据溯源和模型溯源的使用方法
- 了解对比分析的使用方法 -| 计算图和数据图可视化 | [calculate_and_datagraphic.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb) | 模型调优 | - 了解MindSpore中新增可视化功能
- 学习使用MindInsight可视化看板
- 学习使用查看计算图可视化图的信息的方法
- 学习使用查看数据图中展示的信息的方法 -| 标量、直方图、图像和张量可视化 | [mindinsight_image_histogram_scalar_tensor.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/mindinsight_image_histogram_scalar_tensor.ipynb) | 模型调优 | - 了解完整的MindSpore深度学习及MindInsight可视化展示的过程
- 学习使用MindInsight对训练过程中标量、直方图、图像和张量信息进行可视化展示
- 学习使用Summary算子记录标量、直方图、图像和张量信息
- 学习单独对标量、直方图、图像和张量信息进行记录并可视化展示的方法 +| MindInsight训练看板 | [mindinsight_dashboard.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/mindinsight_dashboard.ipynb) | 模型调优 | - 了解完整的MindSpore深度学习及MindInsight可视化展示的过程
- 学习使用MindInsight对训练过程中标量、直方图、图像、计算图、数据图和张量信息进行可视化展示
- 学习使用Summary算子记录标量、直方图、图像、计算图、数据图和张量信息 | 混合精度 | [mixed_precision.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mixed_precision.ipynb) | 性能优化 | - 了解混合精度训练的原理
- 学习在MindSpore中使用混合精度训练
- 对比单精度训练和混合精度训练的对模型训练的影响 | 模型安全 | [model_security.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/model_security.ipynb) | AI安全和隐私 | - 了解AI算法的安全威胁的概念和影响
- 介绍MindArmour提供的模型安全防护手段
- 学习如何模拟攻击训练模型
- 学习针对被攻击模型进行对抗性防御 diff --git a/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb b/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb deleted file mode 100644 index 5640befc4b..0000000000 --- a/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb +++ /dev/null @@ -1,422 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#
计算图和数据图可视化
\n", - "\n", - "\n", - "## 计算图与数据图概述\n", - "\n", - "计算图的生成是通过将模型训练过程中的每个计算节点关联后所构成的,初体验者可以通过查看计算图,掌握整个模型的计算走向结构,数据流以及控制流的信息。对于高阶的使用人员,能够通过计算图验证计算节点的输入输出是否正确,并验证整个计算过程是否符合预期。数据图展示的是数据预处理的过程,在MindInsight可视化面板中可查看数据处理的图,能够更加直观地查看数据预处理的每一个环节,并帮助提升模型性能。\n", - "\n", - "接下来我们用一个图片分类的项目来体验计算图与数据图的生成与使用。\n", - " \n", - "## 本次体验的整体流程\n", - "1. 体验模型的数据选择使用MNIST数据集,MNIST数据集整体数据量比较小,更适合体验使用。\n", - "\n", - "2. 初始化一个网络,本次的体验使用LeNet网络。\n", - "\n", - "3. 增加可视化功能的使用,并设定只记录计算图与数据图。\n", - "\n", - "4. 加载训练数据集并进行训练,训练完成后,查看结果并保存模型文件。\n", - "\n", - "5. 启用MindInsight的可视化图界面,进行训练过程的核对。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 数据集来源\n", - "\n", - "方法一\n", - "\n", - "从以下网址下载,并将数据包解压后放在Jupyter的工作目录下。\n", - "\n", - "- 训练数据集:{\"\",\"\"}\n", - "- 测试数据集:{\"\",\"\"}\n", - "\n", - "可执行下面代码查看Jupyter的工作目录。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "os.getcwd()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 训练数据集放在----`Jupyter工作目录+\\MNIST_Data\\train\\`,此时`train`文件夹内应该包含两个文件,`train-images-idx3-ubyte`和`train-labels-idx1-ubyte` \n", - "- 测试数据集放在----`Jupyter工作目录+\\MNIST_Data\\test\\`,此时`test`文件夹内应该包含两个文件,`t10k-images-idx3-ubyte`和`t10k-labels-idx1-ubyte`" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "方法二\n", - "\n", - "直接执行以下代码,会自动进行训练集的下载与解压,但是整个过程根据网络好坏情况会需要花费几分钟时间。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import gzip\n", - "import urllib.request\n", - "from urllib.parse import urlparse\n", - "\n", - "\n", - "def unzip_file(gzip_path):\n", - " \"\"\"\n", - " Unzip a given gzip file.\n", - "\n", - " Args:\n", - " gzip_path (str): The gzip file path\n", - " \"\"\"\n", - " open_file = open(gzip_path.replace('.gz', ''), 'wb')\n", - " gz_file = gzip.GzipFile(gzip_path)\n", - " open_file.write(gz_file.read())\n", - " gz_file.close()\n", - "\n", - "\n", - "def download_dataset():\n", - " \"\"\"Download the dataset from http://yann.lecun.com/exdb/mnist/.\"\"\"\n", - " print(\"******Downloading the MNIST dataset******\")\n", - " train_path = \"./MNIST_Data/train/\"\n", - " test_path = \"./MNIST_Data/test/\"\n", - " train_path_check = os.path.exists(train_path)\n", - " test_path_check = os.path.exists(test_path)\n", - " if not train_path_check and not test_path_check:\n", - " os.makedirs(train_path)\n", - " os.makedirs(test_path)\n", - " train_url = {\"http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\",\n", - " \"http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\"}\n", - " test_url = {\"http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\",\n", - " \"http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\"}\n", - "\n", - " for url in train_url:\n", - " url_parse = urlparse(url)\n", - " # split the file name from url\n", - " file_name = os.path.join(train_path,url_parse.path.split('/')[-1])\n", - " if not os.path.exists(file_name.replace('.gz', '')):\n", - " file = urllib.request.urlretrieve(url, file_name)\n", - " unzip_file(file_name)\n", - " os.remove(file_name)\n", - " \n", - " for url in test_url:\n", - " url_parse = urlparse(url)\n", - " # split the file name from url\n", - " file_name = os.path.join(test_path,url_parse.path.split('/')[-1])\n", - " if not os.path.exists(file_name.replace('.gz', '')):\n", - " file = urllib.request.urlretrieve(url, file_name)\n", - " unzip_file(file_name)\n", - " os.remove(file_name)\n", - "\n", - "download_dataset()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 数据增强\n", - "对数据集进行数据增强操作,可以提升模型精度。\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import mindspore.dataset as ds\n", - "import mindspore.dataset.vision.c_transforms as CV\n", - "import mindspore.dataset.transforms.c_transforms as C\n", - "from mindspore.dataset.vision import Inter\n", - "from mindspore.common import dtype as mstype\n", - "\n", - "\n", - "def create_dataset(data_path, batch_size=32, repeat_size=1,\n", - " num_parallel_workers=1):\n", - " \"\"\"\n", - " Create dataset for train or test.\n", - "\n", - " Args:\n", - " data_path (str): The absolute path of the dataset\n", - " batch_size (int): The number of data records in each group\n", - " repeat_size (int): The number of replicated data records\n", - " num_parallel_workers (int): The number of parallel workers\n", - " \"\"\"\n", - " # define dataset\n", - " mnist_ds = ds.MnistDataset(data_path)\n", - "\n", - " # define some parameters needed for data enhancement and rough justification\n", - " resize_height, resize_width = 32, 32\n", - " rescale = 1.0 / 255.0\n", - " shift = 0.0\n", - " rescale_nml = 1 / 0.3081\n", - " shift_nml = -1 * 0.1307 / 0.3081\n", - "\n", - " # according to the parameters, generate the corresponding data enhancement method\n", - " resize_op = CV.Resize((resize_height, resize_width), interpolation=Inter.LINEAR)\n", - " rescale_nml_op = CV.Rescale(rescale_nml, shift_nml)\n", - " rescale_op = CV.Rescale(rescale, shift)\n", - " hwc2chw_op = CV.HWC2CHW()\n", - " type_cast_op = C.TypeCast(mstype.int32)\n", - "\n", - " # using map method to apply operations to a dataset\n", - " mnist_ds = mnist_ds.map(operations=type_cast_op, input_columns=\"label\", num_parallel_workers=num_parallel_workers)\n", - " mnist_ds = mnist_ds.map(operations=resize_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n", - " mnist_ds = mnist_ds.map(operations=rescale_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n", - " mnist_ds = mnist_ds.map(operations=rescale_nml_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n", - " mnist_ds = mnist_ds.map(operations=hwc2chw_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n", - " \n", - " # process the generated dataset\n", - " buffer_size = 10000\n", - " mnist_ds = mnist_ds.shuffle(buffer_size=buffer_size) # 10000 as in LeNet train script\n", - " mnist_ds = mnist_ds.batch(batch_size, drop_remainder=True)\n", - " mnist_ds = mnist_ds.repeat(repeat_size)\n", - "\n", - " return mnist_ds" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 可视化操作流程\n", - "\n", - "1. 准备训练脚本,在训练脚本中指定计算图的超参数信息,使用`Summary`保存到日志中,接着再运行训练脚本。\n", - "\n", - "2. 启动MindInsight,启动成功后,就可以通过访问命令执行后显示的地址,查看可视化界面。\n", - "\n", - "3. 访问可视化地址成功后,就可以对图界面进行查询等操作。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 初始化网络\n", - "\n", - "1. 导入构建网络所使用的模块。\n", - "\n", - "2. 构建初始化参数的函数。\n", - "\n", - "3. 创建网络,在网络中设置参数。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import mindspore.nn as nn\n", - "from mindspore.common.initializer import TruncatedNormal\n", - "\n", - "\n", - "def conv(in_channels, out_channels, kernel_size, stride=1, padding=0):\n", - " \"\"\"weight initial for conv layer\"\"\"\n", - " weight = weight_variable()\n", - " return nn.Conv2d(in_channels, out_channels,\n", - " kernel_size=kernel_size, stride=stride, padding=padding,\n", - " weight_init=weight, has_bias=False, pad_mode=\"valid\")\n", - "\n", - "\n", - "def fc_with_initialize(input_channels, out_channels):\n", - " \"\"\"weight initial for fc layer\"\"\"\n", - " weight = weight_variable()\n", - " bias = weight_variable()\n", - " return nn.Dense(input_channels, out_channels, weight, bias)\n", - "\n", - "\n", - "def weight_variable():\n", - " \"\"\"weight initial\"\"\"\n", - " return TruncatedNormal(0.02)\n", - "\n", - "\n", - "class LeNet5(nn.Cell):\n", - " \n", - " def __init__(self, num_class=10, channel=1):\n", - " super(LeNet5, self).__init__()\n", - " self.num_class = num_class\n", - " self.conv1 = conv(channel, 6, 5)\n", - " self.conv2 = conv(6, 16, 5)\n", - " self.fc1 = fc_with_initialize(16 * 5 * 5, 120)\n", - " self.fc2 = fc_with_initialize(120, 84)\n", - " self.fc3 = fc_with_initialize(84, self.num_class)\n", - " self.relu = nn.ReLU()\n", - " self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)\n", - " self.flatten = nn.Flatten()\n", - "\n", - " def construct(self, x):\n", - " x = self.conv1(x)\n", - " x = self.relu(x)\n", - " x = self.max_pool2d(x)\n", - " x = self.conv2(x)\n", - " x = self.relu(x)\n", - " x = self.max_pool2d(x)\n", - " x = self.flatten(x)\n", - " x = self.fc1(x)\n", - " x = self.relu(x)\n", - " x = self.fc2(x)\n", - " x = self.relu(x)\n", - " x = self.fc3(x)\n", - " return x" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### 执行训练\n", - "\n", - "1. 导入所需的代码包,并示例化训练网络。\n", - "2. 通过MindSpore提供的 `SummaryCollector` 接口,实现收集计算图和数据图。在实例化 `SummaryCollector` 时,在 `collect_specified_data` 参数中,通过设置 `collect_graph` 指定收集计算图,设置 `collect_dataset_graph` 指定收集数据图。\n", - "\n", - "更多 `SummaryCollector` 的用法,请点击[API文档](https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.train.html#mindspore.train.callback.SummaryCollector)查看。\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import mindspore.nn as nn\n", - "from mindspore import context\n", - "from mindspore.train import Model\n", - "from mindspore.nn.metrics import Accuracy\n", - "from mindspore.train.callback import LossMonitor, SummaryCollector\n", - "\n", - "if __name__ == \"__main__\":\n", - " device_target = \"CPU\"\n", - " \n", - " context.set_context(mode=context.GRAPH_MODE, device_target=device_target)\n", - " download_dataset()\n", - " ds_train = create_dataset(data_path=\"./MNIST_Data/train/\")\n", - "\n", - " network = LeNet5()\n", - " net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction=\"mean\")\n", - " net_opt = nn.Momentum(network.trainable_params(), learning_rate=0.01, momentum=0.9)\n", - " model = Model(network, net_loss, net_opt, metrics={\"Accuracy\": Accuracy()})\n", - "\n", - " specified={'collect_graph': True, 'collect_dataset_graph': True}\n", - " summary_collector = SummaryCollector(summary_dir='./summary_dir', collect_specified_data=specified, collect_freq=1, keep_default_action=False)\n", - " \n", - " print(\"============== Starting Training ==============\")\n", - " model.train(epoch=2, train_dataset=ds_train, callbacks=[LossMonitor(), summary_collector], dataset_sink_mode=False)\n", - "\n", - " print(\"============== Starting Testing ==============\")\n", - " ds_eval = create_dataset(\"./MNIST_Data/test/\")\n", - " acc = model.eval(ds_eval, dataset_sink_mode=False)\n", - " print(\"============== {} ==============\".format(acc))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 启动MindInsight\n", - "- 启动MindInsigh服务命令:`mindinsigh start --summary-base-dir=/path/ --port=8080`;\n", - "- 执行完服务命令后,访问给出的地址,查看MindInsigh可视化结果。\n", - "\n", - "> 其中 /path/ 为 `SummaryCollector` 中参数 `summary_dir` 所指定的目录。\n", - "\n", - "![title](https://gitee.com/mindspore/docs/raw/master/tutorials/notebook/mindinsight/images/mindinsight_map.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 计算图信息\n", - "- 文本选择框:输入计算图对应的路径及文件名,显示相应的计算图,便于查找文件。\n", - "- 搜索框:可以对整体计算图的节点信息进行搜索,输入完整的节点名称,回车执行搜索,如果有该名称节点,就会呈现出来,便于查找节点。\n", - "- 缩略图:展示整体计算图的缩略情况,在面板左边查看详细图结构时,在缩略图处会有定位,显示当前查看的位置在整体计算图中的定位,实时呈现部分与整体的关系。\n", - "- 节点信息:显示当前所查看节点的信息,包括名称、类型、属性、输入和输出。便于在训练结束后,核对计算正确性时查看。\n", - "- 图例:图例中包括命名空间、聚合节点、虚拟节点、算子节点、常量节点,通过不同图形来区分。\n", - "\n", - "![title](https://gitee.com/mindspore/docs/raw/master/tutorials/notebook/mindinsight/images/cast_map.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 数据图展示\n", - "\n", - "数据图展示了数据增强中对数据进行操作的流程。\n", - "\n", - "1. 首先是从加载数据集 `mnist_ds = ds.MnistDataset(data_path)` 开始,对应数据图中 `MnistDataset`。\n", - "\n", - "2. 下面代码为上面的 `create_dataset` 函数中作数据预处理与数据增强的相关操作。可以从数据图中清晰地看到数据处理的流程。通过查看数据图,可以帮助分析是否存在不恰当的数据处理流程。\n", - "\n", - "```\n", - "mnist_ds = mnist_ds.map(operations=type_cast_op, input_columns=\"label\", num_parallel_workers=num_parallel_workers)\n", - "mnist_ds = mnist_ds.map(operations=resize_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n", - "mnist_ds = mnist_ds.map(operations=rescale_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n", - "mnist_ds = mnist_ds.map(operations=rescale_nml_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n", - "mnist_ds = mnist_ds.map(operations=hwc2chw_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n", - "\n", - "mnist_ds = mnist_ds.shuffle(buffer_size=buffer_size) # 10000 as in LeNet train script\n", - "mnist_ds = mnist_ds.batch(batch_size, drop_remainder=True)\n", - "mnist_ds = mnist_ds.repeat(repeat_size)\n", - "```\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![title](https://gitee.com/mindspore/docs/raw/master/tutorials/notebook/mindinsight/images/data_map.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 关闭MindInsight\n", - "\n", - "- 查看完成后,在命令行中可执行此命令 `mindinsight stop --port=8080`,关闭MindInsight。" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/tutorials/notebook/mindinsight/images/caculate_graph.png b/tutorials/notebook/mindinsight/images/caculate_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..460e56104705421002cf5d6112a84322b1ace391 GIT binary patch literal 63499 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 literal 0 HcmV?d00001 diff --git a/tutorials/notebook/mindinsight/images/cast_map.png b/tutorials/notebook/mindinsight/images/cast_map.png deleted file mode 100644 index 4713ffb03f6e03c02c45d41b63fcc6bdd7d8b2ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166896 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 diff --git a/tutorials/notebook/mindinsight/images/data_function.png b/tutorials/notebook/mindinsight/images/data_function.png new file mode 100644 index 0000000000000000000000000000000000000000..123d4cefd29b84cf261ccab8c8a62f63b06aea43 GIT binary patch literal 60377 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

ddz#D*Ob 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 At^fc4 literal 0 HcmV?d00001 diff --git a/tutorials/notebook/mindinsight/images/histogram_only.png b/tutorials/notebook/mindinsight/images/histogram_only.png deleted file mode 100644 index 70e59386856dd370782e037425e56efbe1ebf3b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215839 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

q*Q0Ak@T$G(TyPmr@Jg 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

)|uDHmqW)f_X13ab-{Jd^|8QMOIW7*n~8I- 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%0A@n+|A&-TZE_!)~tj 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 T z7ate8?14GgS%{%H@)PvtMIxZ+B6WRZTmpY>rx>|+Evu$bXA(MZ?^>{PpEAI%$>C8H zxWM<<%r;n_j*FU#i6E+4`k^+jyS6}I-fg*g%OcuS?_#AC(ljUWQH3{SGke)Dbk`@vnG|RxPp#f%eWV4*WOY6g5_{Uj2a4$^m`47T z=BjFvq-%W-l;eLiin9v6NV#&2jtHmR9E7*EFj6t!7vjUd2IIIudHDJCr<5!fKCFi} z`jiii*uCbN43Qih`%h*KJ{c$!_vF~#X-)bsR;@}tYkX1>!{ii1 iJb17n~P`f30O1j^)lS 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 z%0A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%0A0S45?+Ap!GMeJmxxNBm}- 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�fsl*&ZcDz|m#TOjl3vw&&v!qy@vh%a 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%0D&VmWf| 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 EAC#xADgXcg diff --git a/tutorials/notebook/mindinsight/images/image_only.png b/tutorials/notebook/mindinsight/images/image_only.png deleted file mode 100644 index fdbc96981316fc3c8b977c24d3a93474f4df1cbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179393 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≷Ia$CRM`7a)6xQUXQmQ|qAEq)gO3#lzF_RQ`$oNu8MN9%0J?02y!;;8llgTa9e|01UC6J6RoB|a&f>J{} z`dkUwUej)iUsT-?>ohg{AC&@5^954^XEJ)ijY{&l`uxM_5&1VBwoA24=61q9rl>K-GbBKL$6yt{&kQG;t(#d~0s<$crwGXnr^H{_145gaad* z+Rx*t*t%Q&0%9Dv-QO*bXgXZ5-;t?0%4!fBrBw}p$N3zm_Wke)9TXGm^F3{HHzn0S zQF3G=9-QWaSpuYMo#fn|G-!2h{ISvZ4SY7Xi68l{G323g}?(Fmo< zEzzo^gM9kP2(R0vrSU$Hg~mo;!Q$#7M!xm(p>O-BVI%P@R&tC8>(h5QutkiO{0$kK zSdC3SE9w23e!gvF=xcMd7Y6*+b^s^~r3o02Inlbmnq zCW{3jvnc`$%%H#ZqRs6E5zAbs=w2QjmW`d zsfq>=md$C?3KGwK`RB9dR=>i$17aZc{!2nI{!gABi(NRCF3-Tmx z9TX~pW&8{sh#FzYOm+bW*h(VY9^V=1p&rGV&4Lsj z)%X&O1x99RKdkFhd%rB$DVFR;+pgY8@!To<@qIWUdtqhOftn^!_x38B$k_1 zY0l?d$}5aEL(_^6Ihmd5yd@D`_=;ML>5V(VUJ6N%#qa)}RL|%Omw9Kh{exp9SDZQ< z6MxtRLY}QRlZ**3{r_vGmD?6KmGD2l$ z9(xlZgzV$saAY3i$msc~@9+COzvn-HxLmIL{@m~R8fRJzq(Iaux!}U4Ip*|WUZ3wg z{VN{+763KXN1y!RHNIZ)+|#|r$A2X1Rls=5C(I%1kCj7>IRPb6Ki60V@3=Jk`dI=1 zw=_tTAVdES^rMU~yV1`gA>yhT7@gYw2q;}5Sb@Ha(pqF+CSei@XY?4G4ToS6iwbiW zoU}OSQ8R|P201z_URI(jQY}<(87{ZHr782DzdeAZ#v=*7g?&@?K@%N>OGQP`23hWd zXAgBLjc0DfNlCQ7w)ADAvY`8{y)K4JptU&LFz+tBdFJTQ(~<1I8@)7dZ#{=&dYY{4 z_jo>biDy7)u6+1f6$qr%<=p8uvMME(iN|Xp(COCYM)0LG%gP-1G2-y%^fJ+6*USTA zDJVm}y?0NANa?QFpM6iuSByGAguv~t+&6ow#TP6lFLGiQvRdd>WH}gV1W`f+(YQ zYNUJS@Hr;zX!+z#!b?d_n9;&QwQk_;o_x7#L(`|Z%eOT1pLlO%$G-evyq=!=fi8Pj zoBD~F4#t|!G8ph!XyHg1wGhIiw(ch<{?%$nyh;fS%$<_sLpMd7ZcFsHD6M;;J!J>C z9;q;PGruowlMV>pDQPTEH<(P`QCbsc0D2YxK8HkWj zg$8q`yoAw>I4i2rNGhS8gIS(3IujcM;pHItZ3bxTa6?MjmYZm<7Q`?xm~iSNNhM!DVf@?Y$@)GhL_( zh+aY!$^9AwukF@GmscBfYCprE&KML&on13{LlCGCV}sIrk}18>Cz9TXBFo-%Jh~(~ z+1OFAB8x^pLfTVX`!mgEd(o>GlP?0^_QxSI^5rPL1+S^3@s?xq;F1eB%|KqBY>zYM zSs>~gPeM;-img8C1uKcI7PG7zRMC-Adj!oYN>b0Vb!VqO5M8>vug6NUZPxM*Iy zgPXnyBJ-#0To#sz^5mG~bxBgxj&!=Yep`sxPzMJCi_YG|Mee0(4l7$*uTs{)PTTWMXFTr6T$G2zvAF`v7V!x{bj(=rsi5?G8Bm8T$z7}p}% zj1*78<2-@YRTf_eNbHIfBr=o#LtB*qIdc6!BhJKYozZ)i|B9S(fG|{SQC`Umw26Y1(;1HgcHx&l z+JS%Anhq7r|I#JH30!Wb8`e&c!$4v>R_lAvJN{)yG%E9R2Zb*(5USi{>SILQA1gFH z8Ap?pNoUGE@%rq-|3-4EAGdDe~G+|;gloOz}Zy%2G! zJLIc~z4OlxW_cCOSpEd);P8Yvdecn*knp`oF{P4J)tTQq>R`7};GtmAJAJjoy37(S zi>b?0qAlJ1{>SZ>%f>y9M2$l~B=pzpB7xs5GPnzF+p4=F_A#O1`&oyVBZ9O}nF zDMLIiB)W>&AQaz`5{L5yDSc=-yzag*zvVA_?5u&ExBOe*r~}pMwb))QaDU*xsO|QD zL6bG)t14=8a5Q&5R-)&zagrtKLV4lSCnQl`hXF&ap7bstU+ZE1C z15Hz$rc3()Hv{yO;ifLp5ju|!L*vM@H%B2pp zQZ8Bcj38HJ)4Ve&Qu^%o)~$_5Rj6kFa9pNpT9V;Xv^J-h@V)sRao<=NJYL4Th5LAF zc9x%+g;v_!-u+&-W7Fu$Z;U`^B4_^d6H(zPixQD9e-io^plk`*kbWexDg?I6O5Yhy zTV=|#W=Rj+<;23m8wjJW|Hg*76<4Q3=q=~N#zhE02uWffwYC3-8$}fx9tl+ymHF!f z%k}B=rp7;9_a~i2$Bx;>KnK}Dp-EvZ_{@SAQmko)H;iF$mW#$aSI=+6JXd3WNq$9> zvYJ6O)AeGzii{TGN;vrn%qTAUGMk)TEdPP~Ls?K0+0&0fojA3x@}pkM4R^{7U&Ic3{X~@tgv)Sm{O5{>w9KV7xmC*(GJ8oe7!5bo+qAy%D)UTh$TY5XyW!Zr zZ_&9)dX;g&%cAy0-!rH2LAT%idn-I57qoDOnF7zc+>^=mKWSMs;`nqpz`^Un^csmt zDl6#l+NXDKb?A5$aVk4RE=WpSlRqLpsCwG8}7MVu7A%MIB9zo zS#caU`Tjs$+4VQM9J<9bJ>sMaXjI{6Do=m45Go=(e&vyqNm@lPjf`-GSgoIP2w>|{ z8FAnHt!TJXozX>5gbPU{&%Lo8*O&D9S)rL7#L8!9%Zt^mQb4A92We~*a4l_)lY!m| zk!`6tkX${mPML&KtL8l^IN#%Om}V?AZlZ18XZliUMM-2WH1T=E_$bx*i^J-o!u!*p zEq2l1$W}68#%pE4RTz9Gb?enOS^;_k)a3-gDf7j2JFtFu?XB;A9wVULhJS|zbm z3N-n2k-d5XPZnFV+mH5pj$%5#(#h)647eNYTgKeZzq38nwif9ymGW<$X7W$M>ROn0 z+vs|+d-#uJg1Z&Oc!nt5_QR&lEOVM%!JX^uB7wUwj(UE!Eed#0Tu-X~1~Uw227%Fz z1e!Bqv{1$T48UbBWESd{PkbaTt(z~{GjBTi&m@Xc_F>%h@%K98-V39zP*pO3%wI1uiK zRCF>N-N+7BVEckK5NmI{?vs|!(4;BMA-)y|du{Cau z$}u(ds*X2sp4)7@+>H&D?d=RD#YUhAUT`Ap1?p|aKKK6Va5R6k7rd2eJK7&YiZ=Rh z4!BmFx%L1617bww`d4m(=^r&T3MPgrKo-u)`}@2aR(I8+OlsV(57a+|^!sz6ufTy~ zx7z#essh8I=NDp5T@-T(@?MSlvAMw1|m}gu?go z?R2D!nxaK?Wrg8_S`JwUWsFeF~WcmWL2uI;_OdY%TCDYwKl>ouGc#uZ~*3`crJ~ zeYl`KK13C-G>qI+6Xvj5kdmPwXOWCr5=q3ctbL={nJ)crXt-8wx(D!5ppff{b=NMX z{IidOpCss^PP0R;HR%pNqE@3#c?nPhXP#HO%_Cog(agZC2U&V6W4#=dN$<(|Le|B*5P z8Jdm-psu$AsKklaRN{NHi(RGaKkQ0+s)`ZIA=?tS1Wb8AcIn|5lxI_`EqFs9N{5Hu zC32`f51-~tGzN)u~=PCC5g1p_TMN%KIK`XsnMRiR`obVlS#a+S*K zs%5_1MejSB@#dS@#?)eHGMbn?CjE|Y)<(aKLWwXbs6!X)pON9lRw`Ka#U)KS5B??^ zVBxU?rFTy5@9z)E{fQQ*RO#*Lk3siub=B?7gFa z5Pu-p&hicK2+Ol-49iu$v(o4h$UXgoB)U$oG4&sz_BuH`Vnu=UoDQIyWQea5hLtaI z0Wf4vXM}o4)ZeObs#tL6i(K(+f(Xu30JZO+iYeRdO|vG^e8c-gPE#%hMV0(m$9XWI zbO^|R^-V!x@KW5g`$LlMN)|XpIMIDgw;rDrmp_N_6hSRAqQ6OQOqnlg9ji70ocLeA z=$#qTi?EOij+v^|7U!9>Sqb$*FZ4ZTfaDW<4Rv+h*e(_iIur?Gd83Fujp;|o$i9h& zvplb=pm`vw*?dG;K&VOiD{K8Mz@KE3!AiCoI!nGm03q~qwFDXP>jvLe$%99h|F;nF z0Q$CC;GR+MfYtMzU%M-MCFok4BCTl41BCSh1Hk^rDf0ROWDcyudy+?jjV0!4_b1+9 zeV)+(l?SnWbmQJ(X$Qdl_JD#*T_r`KVuMpftt`J)TuG=%=V+|DvRZIu38L_LS+a|t zH!wNpH>0MGhrPhLw`!4JZok!<)~z`nqT}Y6;fn=g#UG49LE=tPWxuigmF4eU-wq8` zFf@&R$?j>XtJZb+^%9ePSRx56r50@T?tRD}l>C!w6!DU;V=JJ9rs^$>3|nCw2p+?? z+&+_Ep|-_qaXb9tkujqS^Rt?>8p z0&Z;uW|T%P?KjU>Th1PFqQ48&z&aar-u^i&$hMjHxs!kKP1k7=9v2n5E2gVrA_UdaW6nfsu=9Nw`HfW+VudZ{<7i8$g&TY4&G1T)A~~0WyXU zB4s(c3Rb?HS@|uWUv)47R)nc{&#ZsyVz(N`-6LFDXv6cx3mKjbUnbgk{@~3yue(CE zhxNJ5eNEgrT#d@i>yr*%_cPD_Z`!{mWTXSZq)YXv3r}X{?i5(| zmrB3}=%wS#2f%ajuDtF%^bYVv-k?gF?Lgpbg;0bIGU0QF&2$-cZnye7A?-4?cr)UBB zd>ACEN}Vme!srf>g$RU_O{~)moOh8~i8v5$Au{YgbL2z@eq~*ew(}pfl^l%->*0@K zA+z`MTkkv=E|U68*z!Pd2>OhErd&36RHzsdd4iR&Ly zmM!k@>1vG7I71o%^V}CTG(5B{F$Xjl=wlTyNcwsx*uZ}QOijx;F%?9{@iHMYi3!}i z!Kyv|dyMq1x@~4ob}?B&)jEwFmQ^tIACF437L_6f%lTv_0ARh^;xRh|xGFK#z-Qrx z_w(e2h~&9Aol@6@^1{K#JJZju1qpKxKwDTnL$(4sTvK=&M=%0VHB*{ zz{BWi5P85D(yWk0YPD?h-JYch97GEv3wbC`zx`7h_Q*5u4!8ehwuXko^k-vl{4DxI z8ex&Hna(G_iMplR$8LmOz9l$k?V}dnz9SsBOQd5AR@EO{{l7`-e;*CqpHZE1c%9Gg zE1gn|Q}JU)sK)f58^W!sxmEOXpB&8;(uNwL>y55kJs=i28;(`(kGx&Mz~5U0-3^ zcO-678@?-ne1rFzmu?iz6m;lq zFW*2}AhQZsVJCB>k zWXVsyQosIJRXEHqq_gd_#lr@0(Xy1}$N;i(#&{z4O?d`s>fSdmN{Ju`5>V0Wo`oaz{NTkjFzyF(fW=|Veq5=@9 z_wXlMpjfNrh$0T6fsnjCTPvbqB58NS7qAMf<{t;~b27ex%i|dV$=LnYFE8*)6C_?d zG&FM4Tv9; z?ZgRNrb`G(mn(t6U4w{H&Jvc))ZLP7zHe(=|92K$0O;rfLWzI2uN_~0r1y2a)c+_b za8&^VH+O~C8}Z}os(+ogJNiTY6O`6+8WC*!lB!q zOo6{@2=m|_7whCz!Duub%uO&OU{{J0Tqi97H6Hw7I6u3qn`dtLU)0Fl$c#=yTmd{D09P5{L%=J9A1)1lvGW zX@Dp_Dh5@RER-H|7FBX21L^7OUaTk}yk&6^?SB0^I{hr;^Css)u-vM5of5fN11N)U zrT~LpMa22?2Ycr8dyDQp9#bui3uh*jJoyfrS3Fve6v3T)9z|rUsN#<@2~JW+TzhJhP7@ ztUAVr25z|oa~QoO9_cI+S>1!+qF3Z|}^H zt_jy!#kh{iHg%Sk52y|mkx-Nl%hX& zS23om*V`|@mn0wq;Y}pWbYr*x?R{NMU~#{Bog=Pi*~xp{^sKZJDhqZJ4g8S3$bpkh zjApd$<(u~z2{QRfkp=CkXwEJbR=1=yLxC=ZaX=EgxDr_O-H0-Ik$6kioG&3bFn#zW zW%~}IDh}q!(dGI;Um=X7vFoYciyntPEpf_6BdG617)S1NA#OjY`YoApw9WR<^7&u< zsGdJ(torPkdcJq5a!m4_^V$M3)xTN?+gxR3fxv#9RTBc{iR-M0%T>!!Cj z0W+k#ny&(iGhA9)w!IJoV^l1e8An$F>pP1cfYlvDijItJ>xU^S@_gO2&Epb_YpE0! z?qy}Rdamy-{=l#Fz}IT{?i8+qj2XhWx9Aw(VfbiM(*g*fl!T?O=JL9u8e!Ky>hMH8 zx*0aJ)NMamyk8=Dobfbf9siQge@+_Mg%)HG1wxpUyR6Qdkm(`f7#cm3bje4o|P}P>PGjVy`EiKw`=dirwU*kJ4>PBLhiZ zc!NMT%vy^KFFB+7S>glsy@K1Cju1T+g7uTt=WOij zoW~EqOluOE6V1Jt9nRq8%p~wn)C9t0U zhC~Sc{nsfiUlLB7or?m6f+FF$@+3J=PXAa_)YsJyxgegt)LLvRnwHB{?;8@*F#wil z;g+NC0_u_!1NMR%XC$xkM>@C_!8*$_&Jl5PA5xV)E>8Y!Gly0K)BZ^yURRXY>Q_IW zMOumi(E4MbcX+|N$mw(|#D;%noWa>|f6`VL{`s~j8dCI4WWkfc<$`nR4aF4`-6yL~ ze@=AnS~C}*(SF@dj5u;TS+JqZ$<8PLi zW=)o~_(A1hMsy6L_Pc^sU(SS=^lGX(Y(`)vRk?s<25DVavSEAfj^q+E+4A7*0;{O+@ zg&5M+`{vp*%XV%uhOYy(Mz6(~vn>$`@?vk}mE{oUc!7p~P`t#LpI3epCSIcR;B(h> zH_0(?##t4$oJo|<0LFvgNDyT{yien`G#MgXh~-sq%c7$Xn4ZOu%m4BXu^AP^QlD4o z`_X444CW4d10F*G`@&+mO`nx|-#x!}U0s!F&4a^ypOUzgM)J9q)Ua#`_|*A`PksPL z%P8+SZyUrE>&@70+l5$&xz=tc;)M7YsVr)ndV~Vm@R4<^lq*Wo_oIe~?UJ6G14=@_ z`~2)C%V~C_5+Dt^_s%q=W+aX$HZ@=fGg#&2Ukr}LoBsZkYnC+Gxx*iGMYF>PK9?^6 zkW1wWGI2(^1HvR@nqOl99@nTxX}MnG>VFa_cSkO_Rlxw=2s!Y` znJhZT1HH4^F^v%$D0eg^!^4i{7?3)phc0))g-m7= z)Z3`^bqjy^3Ho+x?dt}7jKQ}@=jsFP+G<|t!dBaP{dm`InO8=#(b&=Xhs8|rCpMq~ z1}NHq2^M!&tu8pZwtGZ$GV~%WZxV4E5Jkivdd?FI)GI%{(JD#;#HeS5yX#$NT(Qyj z#cv~~64sF`dFQn>lCdon)3Kl`vC3PmOL5PUnc)Hv7>rs*D%CYez8;VP0L;@&0GP!a zU@56@{tSB`a56N)ep8b@WikQ!JvZ@FQoi;BjGnov=fbQxexloKzGB!BEGpUy!Sh9` zpjhYoPY6aG=(mu<=qnRNpzL{Q8<9a_PPezE%obwbeI9oT+EZ9c^4X+a>L{TPaOR&2 zD%m%Q9$VgVnkv^90k>9i`DU%OQzKN?&j})+%s?C=YU-R#+Wotw6@rUefX{lQkvhA`PlStTal~+Q z3Oe8KeUF~fq^xIZiSlNrprFWGn>t4N&&P>J=6w!X3aawL)M%Odnv0I~@G0FzZT5Ns zb?ztKAMNh`fG+>e9~yuHsC2y)fZ8Eu;?+xP=i2th8N>S`3#wO3n|{@{W%DFRwI6sb zn24-!ZnTpZX$eo)9@59d=`x1=>F_}=BQLAYmB#kn#g~HE!=j6f8U3Xf=L6FR=*sbm3=e>b5K~-0xu+wi zzLjh^rrtEH)P^G$_H0jN>s_+a1Qo<7#vRSzhQtfdUcZrFtSW-({{*iEmzJIJ0gVF@9l@tz3=`;IdFfx9ALLFI*cc zMSs!DWSdje77FD7`xh@X&y_RTZ35O^9}=*9Wt}t=ZvqGR5xkZW1J2CrewlQ#C8}2k zEL*_?s2qjaJ)ERlJ{GdC5xUIH((g;(?}aRk=h0AT!u-U8_agx0Y}QvPs7rL92tgj^ zS$9KCoglf_{M8||t;KJ=5ZGnPh-O6hF($(|S#O4;OqF*H+D_EuVMcwR3ms%=4AYwl zcZrjR+OOE!TqSvVu3Pas5Xl0N>z`yHRHJxX4VB=^O{-GZ$vs+~#-+&Y5PLi>9 z;J{ee|9pi(1pj~cdUy@dg<{D%Y=9-|kFFCXHxgPh5ERm(;?T>rF(;Mg=lS0G^PL_q zjkVS%PDX@~#j0*PlTH_S=m~w9|&c zlek-y2P=WpAX<(Tx9pLn)IXU%6KtGnK6A86Qxf$LKUWOkJC}~#5S0YeM19MZ6!2IW z;2kR`dkyzL_Db%4o;Z_+`N77Z9mAKAB9^x|D{$2B8iZXhgUVe|vTCV{$*mYzEt9m< z?t?l7%Y!Gng4X5AECHNv<8Jqdq$VwXU&=)PU+Y8UmAy$_ z4y=u;%Jx#w#ciWna{>D>-Whr)^SIxWw{R3Nr>H;S7R(;~Bp|F#h!*JNm5S@;iS5M3}U4-ldgefH$MqpWIr%3DWO%=S5% zwLk7HwNgFWXypVs_3b-nt1KQKe|P6IHfk6RwbB0i3AnPzB=D7D=fEw6ouO^2XGN71 zDvPfox`qIlJp@Woy6c)F?NvNmV{(6V^ASFG(g!_zGezX4MUJ|x1Ci5jm?h$AMTMyY zcAxYyMk>r>*ZqlP;U{_RBRSz+<-+e2dX7yDDymt`B)(s7$edTuh%NH&0!mAfeeQ=s z5um+b(b5a1yDM3V0?1B(kk%LluppWue)&i_}flY|?p^(t|WY z_6!;Na8VdMRZ$^K3QW;)EKLc+k0L%IDnHq??LT^WsqT)h#d6SLNgoxQ4c$xo&hw1> z+VTStM1&jiMS>wC4nR*_$3L05^6k-r?S|6c2TXsKe-og0zT{7Ux+^6Gyi_cCz10?Ll57nmRm<`*j3ccThZ+a z&v&p=wFA_kz#!PcLB`9n3=>;WNOHZ`SRt@ag8IooQ&GQVa@w!}qPU(34akZVO5;9} zN*a-)*#z_1PZCW1mfz2uHjo+h`f83ti9^51cHV^vTMpVLrS=z9wC~vNtOKvEbEFw^ z(uMkcY>fVz(&AF`e7>CMal_77Cy_8XXwcF=sl`%mNm^@Bs&$l0Cv--UFC|{6BxUus z8a)3Nz;WP*JxT3Mo*jBd4H*!m;tc|4B}Y$&%}(F%q<`uNSc~^%N+xglMjCOa&XEi1>Z`E#kNC(JPxzGVxuX~bfm?P_-Ouj!-Hbv>t(NR|4KQoG*flTv z0kW>JTjIu?#%zBOP`2E6oI+Gmv0qYMLTvm6@#G%tH!?gvBfvrj4$L22OGe$}2YM;y zhCR*yQBRF-_;-ugsOnEqQC5hdon?1&>5xLSyC0)=I0bviTm`$z;_5^`3@OvvU?H(^ zqvq&lu!#`e^=0)BfLTI=n5JuAHQw2$5(TF4GYG(aUXE0}AOyQ+#pwP}61X#cH1%T- zU~98z{aX7Sb6N18X@id#m}f*6B@VvaT4>nCbZ+#{1tmCB-hx=#7Z&Jl=G%+|lSps( zu9Ua0?a2N56!1;#X?VtUS8UI=gOK?x4T$xxd7>?FrG%E~hN=^l zU6W!GJ<;%)3_nxas6AutOQz#em1>swVk%j;$`ibSl>kgnR}6+Q(SD1P7T17A_-F+` z>NiC^%57+ED%h6j$LWKMS^r$+rhN84Q!@!o~v2Id8s zHN2X9urGP%u|FXeY6$SDpKW*BsRLI5aH)UL0v)a{*u>^szeJa-j;bTLaWBn{DX(k8 zC53GO!^|`q1tSCLLw>1o{RO*YhosA4LGIv;&*=#b5BDd7`6xNA^}PIoASU=pq3(|d z-0A@mEF|bHFzVgj_e2vhJglhD+xn2JGQN-SjCN|C;!0jk>r)<=VYm>=M)=6D)V!nU zd@Pw80Ts0#ko3K3nQ8{?loHGh`CXa&#QaBGx|sRQb?if>33i@|>sqK4d(*N}&ee~L z^c`R^)26arx5xtvL-@z zlMSnbQlSNhB-R%ZX{y|>>DNMs4(()JLqU#=V+ z{3Z%{Jr(|HK&c9#qyV}{(MfulVuzUdjz7Ess6JPFC%f|Dh}#{uO+{^YViLD}Z)}In zh%kF6dZ9Wr#@Tjd@i^_n%nKrI=O&s$oX_0QK0Oj5I?_FLCjE3n^`)DUb{q0iiaou1yu4`TBx^u z<>#MT02(Vh^XN|NsX0^U5aYm4?H3144o4Bb5#}(hH>Ui=UCyG&@K(8nVA}uS?KFXP zKDh4B-Z-#b(*HPjd%gr13$R^W6}O#V=DzmElo4EGHybQC-qkB9okf1lV)pmCNbi!yetRFPm9)ZkGdMV#tf^08ZVX=}qdZW&@UG0eu zn0p-h2g#25$`=lYDd&yo!ru;VPo>v@2b#g~GZ_3yYmc#tx*_8i9>dY{ZE9aU{oFDo z1$JMUE$9-HS5WvT;J3nN1P=>C1=Z@aujS`j!qPQ@bgt%nTANdL6Lx*Drg*;~_~880 z!SZv%aRNVAvmsLdCcS*UQ^CUfgGf<#^{EfEA7PQq;$9{wUwvk!E0 z=UdrV?d0!FT#8*8wh~;aeqsd35PP4w{II%I>dfE)QqVdK9_z(6c956OgIBt%l&E(~ z;(mWudQ4Nyd;igE$q3Dm))>bnR7qw(M&qp`cHRDZ8Z@pRbk6>In{(jNmGoXSuM(!#?< zt^Jrfj*+KI>`79t3wION8N-B*WbMssE>89YNlwhR-qZ(%r#B5+|bk{+cw?>dhdg`AUy$85z^SR5(bBg{pa2ZYPFbV?McG!5|TT65ss+ z*WP12@e1yyx2DjRIAUZ(kI2U%i)L|p}=jPIv zoe(dUvN!+W9d>|!4;0vR`8oi_+r4MdJ|DnNf%^6GyQRqhmpcI_V`3W(XZ=hHKYDu% zA4~REl7paCpDW{aB%e)@Yd2HS8IetTbkQlq@sK3L zPRmZtn_y&6Yh$>5=W$qG>rl{{z`z*3PqMww+Zp;GIjd$M{j_qvs^pl9gj_M~&%$Z)$5j2|^N>wSgMMl*E% zB z6!mB1a5`{707$|YdySfWhKk$KO;=A>0X<(G{XSI(SSCYI*}60+ zq7R>zKp?zhZd)6X$ z8ygyqC&3X8{bLm09O4h()Q67K$}d8qE7pX0BUke}hkg@4J$sr*6)zW0YRs~XHpDNC z1pqzN<@~VO{h@S@VDe$;*RQNr^LG&`xBLi#$e!HJCS;cQvY%Ju*zk(jL2P=_R`8u3 z_4dDI=fAw#!zIpdFos!fmC4JJRA?JYOGnd5q@8**|LGvXMtN6`T>O4Q@u z=1$(C`O(+LqBj2zpmR^_AF5~>@wXMq<7vA{^ua5Wx!HXkl|LOjz?j*Kd{GFvF z`p0C_{FmGVCY(jD)_Ui8$j+=C9w5u3PMw(QIkd5M2W>M$e4Nq1n@~U;TJ=Fs5+yux z$LCjo7C-lxhZ$1{b3+12gX&-!6O6XaT%!N=smGSAzDdG5-i?C~R7hYH$1ZFBmNJN|cKjk~=?b z(+B3>(Vi(^hlppoat(`Kvl;nq-q8|T|Ah7H2al4;D*%^cge9ICm3!5pTA~{(!w-Xx zC$`O(TRU66f$sX?KuL?G()(qc$q>Gs!~Sb{f6ib;jO07Lr`c9G$*W>aC%0Fcj1XNt z6IVB?Q?Xydz#YaY7BDF@o|l$Hoo(%Vg^;=N1SB~H3+sST;yVoFyMdz_&!=Bzyy@eJ zVa~4yif68Q_K9p_C~DDB)4^LhdH&4+K*T4F$D{kF<5&+_%XZ-jU&6RY8dVFG-0FH} zgiBGOIPn5*PG>1@hi#%BD@g2tWdMU6#{W>H6Qw4CQnwd=u}QDrU{+em=PW6SL)8Yk z^Df?p*kV+B;-|?yoqX4`t$$?+yCqhz5;tYU^fqY`1eh{F)kq@?3XCbEshe)yvGLiaC%)UJe4 zco^59b{_oR4{JUEUIh$d_x7)80Ur}-uB*6@VYTuV13embL>Rj=5km;%XefOB@7}cD z#?OiE`>=3bvFBlz3d0xg3g@PEn<2(!di^3nP*BLee>X})T6?FhUaw$6ul&Z=xF?z$ z(Hp{i+IFld8nKu-mH1xp!Hw<5#grJ%cKjz=WA1G~c~O*A5ZXGz3y4u>x?b09;aOwf zyX^HPN@N9xwH3n;xJuuF4=dYokqdK3aa zA~JHHC2}RSf7Sku$GtHEacQ|Xj?alq!>5WI9o<9(`t1 z>SVA`N3Fvo7#*FHxuSEU5E~mLL@+fxU-%gEu@mRLz$#}R{5zD>-?hm)3~BP#ntAA` zS#24#=GXi3te)-aEFqSvkGwLkpb(mu-p=I8*@y`%E48%sLf-y%Gz zi3-Vj6&TnUq-PCz?)uVdq>XL4H?6x`=XCXDx)_?a;_dJd9>~EMHC^rHSf*$Q2?FeP z!J{nlNyQjGIv4Ew`j<(e*OnR!GE9I3_{tvGw=H57Ty7_79X=Mg%onZkgan)XrSjpF zNa7a(I$e|DP$oNvbybRQ-KVGA-JYqxUT3T_{eJ9{&9YoW?K`THm~nUSZURU$N^{_N zMf|esW!Q&smbcB*W5WtW&LNAf&_*r3iSoF*N{j@1`%(r?<(DlQ<>Mi(-&rx&!78@r%Zd!EbXd093b%Xv7eP8pJnX91L0_3IfIMU&7{oN{Tmgn`uplLFRsS@+ zBu;mcl@we~Y{HgG8peO$rnZ%Vb)a<_C=;8s7Q07hSt$o7Dya}Mw|JAJmZal%)ONir zc>1*23raoBxbF$&>YaxE@g-^yLjocz2`>0vwAqBFZHb@E_Q}USE8v7KirKzk-|?_o zRDJI8Gxl6ypQKa!mI>8@dqGulGofSXge;iW3$5ak@*lOzgVp&wpgaNm4`z<92@M}T z|5o<^ktd=lwiO&|GX{E5LZLteQ0$8O&3*zmd@=Er9;)5GHa5nVo=Q4p=TFp=NC9`B zy>lO}9yJDBF<=hA;GQ5!Do=G5J$(hRfq{tZiGJ#XhCk<{nD>#%wp#k}M)<%cY^)~s zxOwG$_?ep+J#Mkooubh_DJpl_HZR{55M$g)_Vn_2^y_LVMdq3dvtn^UW8@D?SI`Tt zZHfNLJ}?{r*D2BuKqn7-aD)C2Q&$xbW!tntS{g(^QbAA1k@ zk?!v9rCV5@9HF#6^ee zo(lI53+_&u-({sw(N_*MwC3CoQlL-F8=4RMXbm?TuL*|QQ3B|P8~T3tYR-&;#9`UF zyx$@OJC%St;6^ht#(4aAd;vZf_shSwnc1ZOGO5fRfm&YQg}tJ%+egS_H9scC{XxakRR ztcSb^97L*4ZtTA;8-#Cc>1liSUd%?uWzb;X%a-l%tag-8FadOYzZtiE;V5&g$^Y>ynzVBXn(JXag+L% z`=uG?mt%l-gqtQ1e}IbjH=3cV(+ktLy`M`$`y&6}5NFZfgVB9J_5h~*JN7m3&&ji$ z_s(otJSUcuM|K+Uj?`qv6+XVC_ZHr7d@dEK(O!^@k-eWw;UJ`~jir&H2%E|cZ_@lS zctpZ6m9f&GO8?RR5Y@e*{&dBL#@k>IIYMXM(O>x25bW%?IgyBu>o*`pQwvreqQgZ2 z|1~1k?MHQ~-Ic>DuXR5rM>3`+YqBZHMbrp&iTwCrp!^m5#sKj(BH+QJCTmst)@&KO zDZ3jfcS@S!VM4vuv&x5qg*$={D~q?nsB8KiOx3dyNm*LT034dnjofP*c$ZYZm9p1p zmi%C^+Vrxm^xp5*pQ>!I^U>+EC+D#_(XufVam8)XCdgABD7QVktgDFFBK~Qu%CGmQ|9z}8|{#`d$6fJNkz*?!i*?kTcpc6#hX$1+<_q|yPfmz zIW|luW~~95xSv2JD_TucoXgXH2ejD@iO;<>-xbOfIZLLM@ntXuMj3k9DoX@&GB{ZNuJZBpDHaBs9CoLI3vOiUyNY}W)=Q}Ciq$dWXKA4?>6Y)zwNYn3L@_LgE8vaBxRa(rhgep)GM=8iYLCM$i z%9NznXI+)MC3+<2y8HO`sbJ#8oVzh%k<#_p*;9YE9GU5tT3o zq7S*M#=r#zh>)m2rkcyW4fl#jU!e|bNijHw=*Xb4jKp7UnhaL|jv00|)r5FPPLGc@ zDOGL4H#%zyLm3%6VTfQ64&6gy;#tSM^!7`RR@QhQ7pkS#PhLOz;~`JSAV{Ex9n-Hn zIjt`dQSZeOHB6H(uLv&R%ZAPzj8*+&VGJWzitolBX^;ptwiy*BX!9^_lS_J&JtoJK zUHH<9Nkvp(-@1Khm`RM%hW!0h|4*(#W5K26$V!p`x=huZh`=>^+3!a`-|p(tVMg^i z`OvI0A4gR5NzsA78+!&P;1-A^V3)9vD(popxrzg)kBXk9Z zp3?^5SVsP-_47<3%(`sYmM@UiHcWvG3g)L=iVsWw`;tBXe#rmDNu+HEhyu*6A942Q99uou4%3nyj-G)LH{)uyX@7N8E zC4UzX*#BflM}=NNHjlnQ2*oH=%zcenAvu0bKZ*|!nx8nNEF`{FI~vTr-WRCxlglJuMrlaa72-#AR;g%K8BWK6E$Ft5*STd{3|3lt@-->GR$Qx`vmd&iCyG z%T#|>Uii~hQ@Sc5mb<(Z6HUyXG^|9}oSq~4m~M6ql%9d5KHvPfyx6)ShCyD%F-7t^ ziHPm4?V_lNZJt)&9{w54HpEXp6SzA_A2t#uFOyc7D$sGt_ZlV28|7A)Jo=-cY#T}2;63QUV> z$Mg{pPDl*9F<(AidYZjg`#Vx6$WoQAh1jaEipEFNB?Y1Bi_^{#sMm2Jz8iKjZrnld zNZQh_hK6JGUJp3hh~X-d4$xz=(J7tsVS!KP1gXy+sCqC1OEVxzwB#N2^{ ziJYTn`9lV``Y(wh&%0_NY4LSYYVnY#hXc_GF2af4Hg~GG6aR>CY)n9ervhpp{r}af zP(9~B^_LBF(>;16u$COD`osz@R;$cE9p$IzTs{Q9dvWs|*)0>~>^U&)sTIvn418R9qU3=l76gQ4iy`hM)mIeDq zL9B8u4|E^eJh*FamhySGWW%a=gi z2G&2ZoITFU1jb`|RN4fei$J~$_W9wH?Fibe{)Y6g!DCN2lZpM8xE!{RU$>`Y^8nlo zhbIcM*pjyK`*7p)fW-+p6RI=0sg>86TKW55Z634UzNm;jA+4Cs(nj~`eN#!X#E5s8 z+IfI;L*n;+(a0J0JKUorcUizWyNZkm$>sNDn41UV?A+Otr}Q)5x2q-KvNkqGSv;Kn zgZQDJ5gm0|cCWZ@!9*u80d~=7HD2CsqaPqf3G`BX_*%N4w}SvkrgL&6~;xVECsH9-hwGVywVcL5AD%KDyOgIf+l6ySldyt)*bMQZB zr*pLlS3o#Gs)|1qz5APO$81FAyP8^TsQm_6rZ#-YX)w3KsmR3k<&x_1A7PF}LrmU0 zrotz)r^nu^N{ukt`NsaR|0({wr{mMylcfqNUCM86L|yQ@?#5kiN!wObj?1gYZ+{NZ z`vu33HkY6O>b9L3vP*c&V-g1Im_2Q=?;CHhzoVH^MLK?|zn;>`f4)u0+N2iWzZmBQ zI`%``>8`yV;B*0o|AR7_=mk#cX-_m~4JA5+?T#>1lD?)uci!SBtQoMuj$`3?(e z!ugx36?#)|`d!bppf6=;q39Zcu8<-O-9Gkqq6$J!{4jJ%|Fs`GbObS*emVpY$tU&l zg-B@p`@Zv*!Pvb*Eq;2)oU!`KfmIP*#y2={*lTJuB`&zebwg^^ z1Vx&F!9PxTDe)?_F2+1j(ggi7#3+EdjtS=5tFc+YA>udL!6R?@Ha``OtDh($85M1A{kPc#BMbYeM!93JYUK00 z+jWz0xk&3J=brV*8H)Jc8sEex^PnXk?#_F;RB(1++Y$VT|6(tkVvXa$sd_}Fs4Y-V z#OU-QZ~K7r+H*r>W5x9$Z56sk|5HCm>svZ#NhBX9a^8&|9^#ydyG8$8{6Kt92>J3L;M@mK) z%baC<(QJHK@!UhSMz)#_%lEKP6(U|w4%5&au@7%>1lsZNB{uRL*d#&tGPer6izS80O_wvLVyJeBhG@9$t zyW8~BshaxoJXVJI360QlPh;FMn>62~#bK|g$BP0#_V3^#W+Q1h&BEkEdBmyu&1wQr z?^WNGjGLL36VHx91m&uyoWRJNo-QNe*YFKN$*#U9SC=t?`?A9m?MA{+?$a^q0yvCX zy#w!^%QRi^JYKE;YiO%$0}gEb*MWoo0`S?MI^dogo1};{c}rPW#V1UD0L{H&p*HX7 zJaHJ*fAvqNoK~aO3yMx}358>eUQI&P1juY2@JbjMAEGdkt;%W>@hF`IA&0>4d4L6WUY(+BLnJ)kdNT;pqn!dt z@;_Y?A}y7KzMI`T&b;;zy@D=!vQVTa?Gqqa@iFog71lbsSSNgNBE~d3NPHovx9=>_ zz3JEJctq1LPtd}*9COlraNANn=$5W1+C`|^A@Ac~$y!7*=M#O*uO3XC_||+e5yzo9 zej$F)h6UScyD|RNc&pPKnh~_cls#@<+_O8oJNkW2X2J()R^Vdmb34*DwAbxOOm01I zwt3V?W419&1aOe;QlRxXipb`MKK0&}(8X2bzMH-dF<{z6ocWE94Ow9rnpKe8KVW|h zG%N=GKd?6hvamo`s>f;ihC?i<-W;PofHfTz3p4yJ8xEC>uN6#R_y(%Ke`}Xj_^Ie8 z#7q#9?^l7~H{vl%V1yKCp#6IN#O}h0LkP0r8$`DAiX6Rlb)>u-|L)r}de&5dL#BUC)H)l}S9Ng5lw{AR88?b%D3D9|G!}BPOo* zPo^Uc`h24}BbqokJI*nQz=12K4%=z3X|K`TbX1KWemfd-CYU-R84H*foG;VUk}4^C zGw*6cPm!^pY*=k=OV2V{6nt)oywu*}UFoF|$lq5->&I=1ZZ$UXEb zs`44(4u++HE)plqn#t=)dHt4$q3?L%(-Z5Bj?tN13s%Mb?>spdfhOP^gSWt-+#1h< zeZ)R?Jv#4Kk#gCFRk-oZ=^7nZ10z|c{Ij(5B#8iHy^-a(#utdGH#q#aVT`tvz*o*Z z(NN>6h~!TSaev;m?s|e!#A?8QxIEeEvduqcJ(J#Fu~u#EQ5#|%&Abk;b)6I(P8*NnI>2VFLPH>Y5YnF0@>vmwX6>hMuI96IbrC@h|S*$k}0St~wIg>w0}!nr3$ zjj{8#-X2yge!m{%mTZaqDXh-k9>z7Q{8{q8^EsYkrb9*QcxA*^*r>#lq-Q1dDZtwM zGc#|1N1vz=9_080&tdb5W(BS54@Of+!IU2K#I8fOH zs_Dqla8sT>X<+C*s6i3EHp=J7!;$b|QV>Bsd-8PE{EO@jL)$et3*1!E5{yH+K6H}O z-Ot-22#NP+au9@=rap3scx)toS(oYfy}4?%?rGW>0*{mZARK=)nAE zH$$i`IpJaXPWddqce~YLe$q~Ikpq969>)-d1qJema zS7}Xtta%hTkrgY&^@=H}KEZ4s2JCcLrE!l$Ph)4|T{ujgJ`tt0>J|%cIMIK8wPV?O zbT;SSn4+qZUACfq&oVYeXE9p%DfSakaxo>d=02S{@(wb0^qTR)hfWCL@BBWMcP`TS zaUB>VRN*@)|Fq=cDb`Jqfp~t|+WXfOR+w7LmBhPf6Ey8+hn)8!ZO>nT5_R-s8~KWh5Y$?KT7{UK`+Ci( zuo^`;of$%);N#1Z=KAc+5um^(RUY=z+`8HbbCHgvNeo8xn7aD|ND&{n#9jk=#t^vp zVqNAWH5=KEcHlAEphz`ALx7XLnFk;g1FxnrHi@~4Ds$!JD1WZ5J~#d1 zv+QU3nmm#dbE@PptCLJw?vJW!-1-IZpofm+eDpjz_!K=(kYh;bv>X7hLRbJlq`m$g6q|NI0&D$1LT7 z^?IZZ^ec`^D^hyh%D+_A;>K{KJ>qoJtY5Zh5xKK*qPs>wUwqVFub7G5~?oldP?+N($o+JJJwg5mf|EY;4bl5)< zNc;GM(#F#$Tk0!8(S`f?xbwc5+h{Wc=rT&(scq%qoBTrZG2!=pc@krE!z-q!V~(us zdY<)m^2NtjNc}8ZF3@RzwaVDO&LagXgLv8GOm9ptyaic46tt{mx6Z6SULWkGq*^YU z><{$@=X>kxb}WV~X&AIM#w*g(kKn@%clXQ3)XVAOmJ(baU5C1Ko%(KllCh}C7A3%f zxYfG9vw61We2L4UwlU%IX#`G*A6GD2^NAzJugIfB0TJ``U?-+8*5f{HGar#;{o8~R zu0VE+ReI1S8>x`Ege*eYUG9;F=v{3M2@co08S6sQ8t?Ly(`T~3?1R7;dj%~zog=3h zIZlk-8$!f~Rt=prW=g3N=&d-3EEeEJsRMpK6>=->(BNhl3TG3YBOO14*;(3mB;8l) zi7yhrZ$DH}q#u(M5~7Bbm`{}syKU6)$Bt|F z^>wpe^nwHNkRC%)$@aU4JQkRs-&|nvf+mA!Dh$$^Y+f`fNu3jF;wtyPn(=N)HW^)I z$VHF3yd7rCWMDYWLYkbV8@5dRAyw=*xQtwEG&(NytncK~i_Q=RB9?#u+L@iT5!UOJ z5)~1*jAqRnjzKCA*5fd(7r7SRhaKR;@Xk?@BlF0MBK6yiPx!L;nQZ#{W~*CkU`_ui z{A|pAnsp|?TdPCTd%fgrezw86rD1sulc-j2r>d+@L=8Dz;t!>u&{%}rgFy)S1y^Z? zENjWFi-||6f}h7SW=a#ZTdX^;L$(0R;gY>jciMa}%_LE}c|y$YK6_mac}URU5S^W7 z3xOQKsod1XraRmYWh_*J-0I&%di(ib1eD8;hj~J7dM0CQ?#hba%=5%ee0;phjZAGM$F3$1x5uxn0-%la-iZNuQx1=(quq~xEwxCV2>qJR zn~G(aZV9V6azA%?m!-x@W~j`I+weGpFLS%=BbW3)mFXK~ zy}&*`;hC~wwwNtb`uNa4$_MJHT;ED;k|SIItEZb9nOKWCqm3fas`d~{ow0is0#&T4 z8;gvKnHvIuC01A16d_Z5>=p|hBj-lxz6gW2XBhieR*NU!GnE(pBh9t2I(0GAap-a8 z{*xgpkvDMSDg5mRreZcT9O z-}l=(&Vjbo7AH$d@r5PpRF5F3RzqXy`b!FdlAI|rMOjKYyOq%wsii{Ny94+lM-#L) zOK8PseaG`m=0CHovI@ypkD8T)$BP7K-kp^0S=?uOGU|}%s9pu? z#iA2QTfDj8aXmU!>M6ai+dy$glazg8cFB6Fb4e=9qA*$rb$@FSb~&}LDcMTyTWlqa z(^ZstySb0gLT0_%+THQ&LCY^bUK^>=-n(md_oJSsTka$48PX@59HF~36_Nqa8PjI8 zSNYZI6{Ja?FoPzUlpPO=Rd%q?LEDC}eG#pMe&Pkr{W)yZ(vj6udTeTkVu-rXcE{)X zOUQbpTFn*Zi|QY+@E~`cT#EY%XkX9eF;l&};g^Wng6e%*P(Cf0l7OO^3=V|mN$bYo zffWj$_(nQJ9)tuq_asQKi+J;{K=on!H`pNXiCdZs=ZaRG961_4L@oV;9*xZ&w+#~Z zaHoip3T*N;I-`uyi3orgk0#hR?lGUZ`Mw5Z=XFASVr zIkT5~PRRq$xiB0EL-Kn#zM85x{U6b^q$ zK54#deOEyL=l1C#4o41Dee23CUJ18pT>Cnwl3l{?8S~YvRbnl98Qhp?iNbk*sI}e3 zaQ{qNQzqWGO?r~2)|M`FS1QsRLx%xlQV5iGf`|crt+%ptwIZZ`tF+vubAjU2s(4-x zS_wz(LsJX)^#R;Kg!(w~L9EH`9(o+^nOpB-tG6rC)_1hYMsC(SCYIK>khMAaJ>=?) zIA3?+||*K#!fsXV6zDf~IIUule_jiIg)2jcP^8^Yy3 zhTsCeLtE)9M92BVAz3k&k-lE=8yG3wGpwzA-u%LuZ zL&}KRC&Jv9>l450=?MIxtUo<`I;B!m~r^93o+myqR8n<@4cl8Uf=Oq+>Kds~vk6+WrnR3yC z^QhEDrG`!xp1AmMqw;2V&M{Kuv{;0qRLdSau1|Aa#tr{^gw$z*xKcl!U3f=W`oc=( zRL6$AD0s{{z`KU8z@tn!(EB16$80v0i;M$&aKSWOW!#o`bycpcFr=lmCG_Rpb9IgL ztUC>oCe3m(_kAIvk0wM!>uSX6)Sm@bwxaAO9Z>`9p@lUy_0^?HZ;7^#SxreACV>{p z_e%nc(jZHrTl~ZHiZPeMX-Yx~{rW(&1;MPVfvB@OVo+Fp<$72^L7wVZKCwD4+qgtL z7u=H;hD1N>@A)-$@e;Z66^MsF;b6?0k;i@Z%MKRWcyTv6!l+er@6U%QxVFr7&Ef24 zixdh)$3!*d=}O&vGl8ZI&Uik^F63~+fe#*tfOGSh*Z#{+QbPd)>3RD%CeY#E*FML6 zhf`&ZbC>bC+$Xcqdo1|R0;7*%Y+K_%UjQR+s$4wrwma*YX}hs5FDa)5?;%AKhF+3< zk%{tt2U7p0^BditsX>QnmH1A-=$heCOx&zFH;^0AF1>AwscF08GxPqe78_DESnw0L z$g+WS3=7IzMxSo5{Y;#u3wJXw+BOnb;RmW54ZCs+rW<6+5(@O8@M9S zS{)n+QV%EJH%1-p*@|v_6b~8j!WrEWEFvn>a58Jm8u%!E0akgp6MyVjtrRp8=x>hB zQDZXP;q?uEjRk3oLs7PWisO! z`ipBuUawX0Ph(`ONZdB8#ojv0+~<{*XIJ=-^~yGPUTi?2g6Vo(QF=#l4nqWIt~xkTTUJS`=tP1l4R?lnfdJqP>nXeAcV zXc6VA_Lh)EJ;NkL#Zd3NXCN?W({uGE{l(v8V3XjI>otf(IH42~tWoB8Uq#;YHSRuP zS;B(9cGGmI<{j`BU&a6*BI2~DNmS&>`KCB4J+%LEp|C`HW{ zz;K7davIMNJ8>PfaY$##HHvt9A8*@!Z!@E;p4La(*!b4$=xZyaK1*6TJR+VLj_8f8 zx1hjrO!n+^-}AbDBh7wi9Z`{KM+iTB8m@lCYo&E5Cv5X#@lJH1^$B);`%EmjK^$g2S%{61`zfTuTqU&K9FA5jurIM|C{ z1WZ_i!i5`6^AZ`=!w+!tUzgCT`imIE5t$**^Uc|MrLB8X_S3z-& zdGW?99cC^tC=yP8n~>$frc#H|d`2F!Z7D+{Hi+&Fz$VhO^LvS`Uh|qiM@Mi$$L2}R z`b-4ZbzhmdcUNEE=GblFFhYN+KNfx&gkMooTVsg`aALbMjUQ6H793R9^zd`sa8RZ! zxwCcO%ycYV-~Cwhj)6k>jqcwXT?vY z>FI;U%^CYyG!TZCI|rfSky9Q5Qx`!3#fTZ&BR#VX3G8g+XEp)f@QT`elGe73C5S4C z#hba1pBDm#U#Y|Eo3d2*tF_ZHyFf_B1k*?*mzuMgk>O768!r=_`{MZd@neju-=v_~ zvL!-+LyB`xUGB||vd6n8F_o#LRQ zTrtozylus>HCF1Bis6s?*i;Mh zs&krtMS=@eU}U0Vh(E4WyVEN+5FOXwucZi7Ceeq=r%WW#8yg;fXFj4ZR2@ zm+Uy5VTD2y=+}uTnTAV=Kqt@B3!XX6Y)g5o>K4^_KG@5HP#+1b%3ZU>veh?CqkWYj z10Rv7036fS+vD4dk<)=B`w#5BgA_B6*2qa1^3YV<)1ya$Eq?+Gd+|>nfB(_1pN8-8 z-c7&#Ta4&G1-1L}%@5!LK;Gr1p^)XRe1vWmqvncU{sX-^!#baUdi49`A=j(hQK~3NG(v zQ{F3TvU~vNcLhML1n#CMHEf(Cnphf_wrSJJ}gVw$t(u0wnwHqET4kI0zfru<%9yq7U$df~vno)G7~B&C{@mj@6q zT_hpPk$9o?Qrlv!r3ljVWN5g~DyY3bhT?XOi*j^*XvoYke$hX$iH3h>YX4%4H&qeF z7}tYfnhW|IyJ))o1XVOuesyfAnJA_*oiG#V4~;H{4B4khG>XaDNTiM(KLziZ7VFhV z5N+r2X>bXwtaLzuYiD3;q)g52e;D9}sKcG@i1P5gvBrM_eg_Cx8SPTzm1yOP?JmVN z*IijzV)K!a6`|79(v^Y~P5q{=`mr-m=V5(yLs+vX670Nt++*oIvh^x{Hsm;2*%o74 zAe+u6lGQ^L^)k?UXs6=APUjB1Sv!(gf=3dNHY|-4?nO4$)w9rK7yy;Dld|@e+$v&48durx>w25KR3c(g z?s9y;L&`OwheN3PNqueDusrdRZlRn7%MCj1FNkt{DsStrGQsR_5Aam6z*wh1g<{et zL`JUh(^Q{3>dLD`TJdHav2!YY+R#<(Y`8hxV-5G@YpH`!Q_Do-wd4pZiO;wfVm?t0m*cJv74Mj!R(e zCY{j<{I{Bq^}uJvogD2BJ3)R|7-;piD&YEDN3cE@U7qs|##8F7`}(JsyvB2Z|6BbV zCD#V<9Se<;|7Egwv*$j}Mc?E|S)N$5PEhbR&K-xwWh6O>1S$>|D`;}=3(#BI7{-<+ zw7bsxQgCG5FkhV9?K~%CxP_@2TNYF7QRhj9GBsrr_SARr)+rH1o4Ctt#Dtt2+&vFr z8x7i4xvI;aRJWs&(!*Ny-LFF5+~A@Zsx8|O!vTf%*qE?|5cn&HIEZ8n{)k_92W*uva%YJSGW+q)|U|{3$aigFq5sou5 zhHc-w%0!}K{KnnsBt}p9LQjxjPP6R*1wxuF4XWpHKoL&i!PdM5JL66M@!{UsGj7_O z79x~j>-8e!Lex_?qU|bOe&&3kaY@Lo=ZUz0TT{?nq}c&^fA2;5KO`%>v;x>Lq{`v0 z-1;w|o#A=0`$~=E+@U#`j)nY&upEVi!%Ydp1~ z=v+KpSv#pmAHs}mdpQ%!az0O)=5*X})Y@O4ux!iePTu$+ERhj+FS{5hxws5xdFiX= z5KXbZO*iKyO$b;bE8921vCie*W)OD!{3>lmX>2N-bxdUB<&}KriI8J$)dNG}k7KtH z&7M$V(E~dmgE99(r#U!K3=b#Y+|y(oE24-wl(XZnGhp(jUi_vnxH*0Cs8m>I4Er>4 z!N2sd36xy<_WjrlM``nZDmDDMFifQGZt*IZ*WgE!JpcJ#u~{#{UcYGr%n1l1`;yjx zym-`K0xc5qFN)pG4wLG<25rE7MS&Jz3ccIiiyWqqvidO?dR zcVk?+N4%ZXuKvXBen@q?HN7;mPWRR`mnmOMy;_v!`u)qN# z3+b)pk^Y{)_5NS=VEO?A(5)&D06JHVf2&DfMsg~uof^q~9sS^kI);{Ydj>Y&Do%>9FCTnc>g~Uh9pD>kGZlSXw*g_}YvZ zHPAopwN7sB31h_d;0Nqq4(M%!ek@qzxx(CBN@sU>E)DKXA+DDcFm}Q#+&;vEi-C!L zw4g3=!-lYxvTVnz5E0qs^z-2ZbZgbMRb(q}Fjb=l&+i)!Bt#WJc>m7(Wv@%dwYxY+yt3 zC9^2?s6MuMG{JUX^2>|x@X2(P@wI_L$n>t#0WDapIeyMFDAA@h#IlE5)ky3(L_iM>E?Re%ZK> zAKdw?{r;_hFmzPd0V5k8~38z!xS4rIp0&S-$wC<2D|v{IO$|fh0c1)r{b_n!ndTVsClP^y=wWCa#+|BQVy%>FNKIbEn}v{%$~&)dX`19>NI|I-sq`PCuXgniOa&>#4ZDsfz*FPCZ$&EESKMM|D zV46L96AxJaYg-VQC=B^J7VdcR!E5WQOQPbT9|GIeXY*t<=XA;$tC^T#NuSB0n`%fR zdQ<6olt$oXl9=MyDYvu)=vMOC9(79wXXM62h~Cx)XV=}6aps10E+vd5&8PZ3Ld3&C z#O;zl($t(N=aPQcJIl-}r&s^NZObW$)LcB@&Gr{>49M&;63GAWo7$_6%!(1;9Y#zv z=a+E;{$TTc1hnc!7!j~lX0m5?kX}|EqIfjOMRZfJm**TZf9HH1Z?<~9fVW_>SIH&{AlBE1o7%GVAuyMkN=i_JJbA9 z?&bd4Eg+#~32h*q{d#CEd5O@zA>^IzHnHVB4R20$=k8m97meWJ`!nL=?KXnI>oHOJ z#g;8D{NWXk>O=~zW6PsH*ZhuH!{kJ~-9C{3HJ*!!@K6R3s+}JG8q>O>O~Ai2{xCA? zI3Z4NUY&el`=X#pajXVokNdN?38&uW8g|FT^2BJ*igJDJ)-z6t*WTaXz|8S1E|(RW z`A{L?b=FaOTXF6EhyMF70|U_JtOhpsSU|`+ZAz%B%j1*>#D2|@7vGt@lmhR4XZFZ+ z^B!lRpH&pKZa{mb`^lx|rk&I{GXOUxO!a8Co(wYzV zv@Vm)%YqdvuZKT-?L>v^{HWU-ttU8Qak!%bq>7ukbqq8m8MfQL?`Ql8wPPq?L$dzi z5jJ>Tn0~|js7;7gkI?ig4R7)%Bu9omQg{!~V$}ps)T1QJ=SFo*$2Lu&#`v*&)g$b~ z3b$jDCoL)YTkYb`9>NKkKmure^8HY)rbtl*Ydl=G)6Gj|J^TCzEiP(%_MpRfw1UnX zSi}2Er^6U!GLukILuw0d))dyYy^x^CM3RT4&yT3<`QUBW4cRGEURP}6Ri?AJOLUiQ zL@_)U`-}|!x^MiQmiwEH`>Dz&c!|6H8^Ybibokp?3_=Q(vwCjGE@(b|w^X6k ztbZK<)dV%aN6Brn^*!b+fXQH#oqHgh&c>-rr@jBVam2%I=&`WetMqHyNp(&mUVR{Q zV>BWb=LXUapgIo>Z#=xEOl8CcCm|EyHM=i{ZTH+pelOXsqR553qa*++vN!-XiOSRp zfClgjL>KLn3!~D;Iu02eoAC~{E-ioiA>`)?uS>hS-F}-Q_nd!XV7~xPjp^0cAkQ{c zE{nA2Wo!kP!7g<4#n*`=r=Z|?HRI2C?5oH>jZ+s-FJH}LVKh7QBqZW5x!#iHTrE-0 zGMMp{UV?p!4~}A1JwluB+J0u(Bm*-$L!84nVhlI0Bs8Wx!uxBXlz+lmBhcFh9WCh2 zR0AaU@*EiiHN`%je&=(_eL~80^8B)XD<@AWzo;CkG&f^O!&lhjltTd*d*rQs zmic)yQnAmH>qUwz(ByAD`p9%PtfTBQ@((r*xhU7OQxQ(pwcP*L;jSszp41}as9!ixjYPx3j z%&Jvq(UUxB%%ojHyeW=L&0*_nMA+0fg3b9IS<1irs2hB{x(cp526z~66?uAfM_vw& ziu3?b;Oyrt9x6m%L3w0>(&>qQp~rgSGCO4NYzE=Ekvbb~|BxL7uFuRU^CNaYK_?+k zEaE(C)v#yW{;k!t^(sIPE(R}H7e2{8SNBq>BZVaso~d`KEwL4pKS|qa*~bT;AuP&3 z$f>DVL6+(!)kZ2vLjrT*5rI_a^Ld|kO~9O%ZX z#8%^8ElAmLj9JL9PA%KYc`M4moD+WoznBwm&to_em-zekwxlHM0?!;irw=nl7fN7| z!nlR`gmrW<@(P`)UkaX#6{-Xd!In;c@B zJqVo}pZj()Z{3Vqk1TXKuv$+yP6c&Bvuyp6 zp$dJwoac%2Qw&e_a^@cNpD6S=j0;qy!U!va_phmc>X^b1^tr|)jxX?y-XHz z(s`Vw+k!E)r+q9mc1;}me|)`XRFe(UEiBTMt~8}uLApxs(n0CHg(4!oCv<}J-b6rZ z=!A|`2^|!aNDnnsX(6Ha7Wks~`##UTzID!7D?joxS7v6<%$_}S9j98}{F$t5Ho?h# zfQ`Fy(i^61u8hY0QIok-!LZVMzu<3Fn7;+3FfR5`*`X6$pVbH7lYFh5ZLA`xxlTX( z%5V4LoMe-9d@C)Pv+E_r#vA)f%7^FtS9X!D30*<6>=DAURYO(A3T1CaMge$p&bn9d7esT(Rm-CEu-lD zL21Gi1(x=VS6H1VlHA0`fDPt60+7O&gMV1_-(k{bxOvEfTix?9S25~Tq50jayF$)S zeXG+^b0^r_ENm7MKdpSU-)kIho~)VcOxUuy&dz6$``&E+dCg`Pbp4(dhrxHB&E)dN zEa=(al(^GQwll9*=1I;0YN4>mGL*45k}PFr9WHv-LE1>#QSCqf+aKE4p=^JAyKp{` zW0sGuwcDs*TZVR3P;`c{YyfTiPxm!H`+<~YDdMiZ=<8%t{eRgEkEK* zt;c^e%rWnwIWYJEji7%F-PQ5z8lB`FlbGAnWk1gPrr~q9TtZi=OUW$tgY|@i%Pkk;vBQn%-Z+mF@iK>wI}KcuRfW+*dWmJ-hSMxm zKCE@D6*xh^Y~NQeJ?YCOv%{G4W!wFo^44_~)=mrq$H6|FucY^fI6-_cMb0(d2pA1B z3_y;J#~ga1KL`#MS}|GAQFs;-s)veOP&5550TtrrDBlO`{&vR4>VMrrcJFVgEQ144 zs_2hxqR@*Qo62k5+rtf;6$7GB2OzPdsg!2l8!_q$nReY5klpddSzbRWt-AblL$mCi zTS|fM;|&XumPoiMECQW@sTo-0MqLZ+UW-;bf9z0W?{q7)uW^F)sATC=s5KK{=*M(Q ztu0;B1>r`{=tD94W8NZiTc5J{_YV`yeg{;TvA_SI^ki)67Ywftl7aU|?!x4OG-Xpx z##>?@r1HUCjJ3_poTJw7x~q-_8E z68}<6w|=<4iJ4HEMa3cJ|Mde^3@FiS_C7=%_<$p^(H%Jh^IG>+KV367rj+uonSB9@ z55=ZG_7g8k%?fo{4O!~Q6ya$nA6BQuZ+S+PrHR`j*!(yd4Cj%}5|f{aox`}6h`5~C z{VCmjiKlBnHddQ%NRA1i>84=Qd=Zo7mq75=S=Z~CRxvXd$#tioBArzY zuZDC@s`jfp3tLSk@H5;N1J>J4<~_De!n}wbi&Bse&oko67u9ViG-ybj{?cE6Y$EIS zN8a$q(?TB=<8b#4|5rK~8dUf{&#rE4{3RGqyb&!HZ_0QK&VWA6 zr@R8oop^I!top=GD!Y9}OmCW${su+1zhBncW&VHt2RJ#yHIEpUzo9CWHuI<=E8x{a z(hTa$Jt@)-JT=h;IuXi=^6_06ktC_o@FeYsu5?!(d98(^&Z6gtLFVVgr%@$ldf=+E z+x?A`_6l(Vx2--R({4nXg$67txbnRF8bRERie4LOj-Hq4h>)KsV7xR}=3gWVyQVoh zIM|hT%FfS(_Z&?{Wt|Abayxv_jy{*~XE^JBLxE`SRixqnY4FXRYP`XPb|Pn2*!6zt z(BiXG#&7Gn>n8rXU$<@#1vhnt)i{0aEBlNUZplkYu81-)`iqP$I`N5*jyq2szOBVX#t2&Z+-#~IESW?kir=)Q} z!~Z7a$XeHv4Y+Cp{8Y7YJGBjPEc0yR60wfdYDjv)X%L3;C^2_ZFk;cZ|7YU!I z|4v2z2Egyo>-jr>Knn-EpQ>E7tBpCtxPi4fA#snyUy&CY+0zL^rv(%Mvi#%T`8kw# z=0bv&xjfEB`K8;_Mq#%=wf6Gj$5XJ@yZK*NfvAQTbnT>dMdJh@o1`)zPx;oo$I!js z9*b4f%PM!Bg2q}|K(Lcnhkh?NDU`ab6US@`zMYyzPqsQ+vjseG)YiR!8|{Ae8$XHO zs5hp7hPH{1j2%jQpJv-c)H zF(x=e&!YN)!I_JDR9Lgl02{wf?J09{7Q0sGl8jc?&SG!Ple>c*H)ggp^nn$6z19NI z7LNhm-{Y^gAfXzEFaeUDh+A_d0(c#mZuau+ZO%A?ZNo(X~|`} zMgA_L+nF{vTX4c%!{Rx0ecOCxg%jJVT#*U6te#gQTB*;Sq`poAq#!~CfhMPq`z~*W zUfyZB&8l^Jt0)eYCdsDtxAXeP8>ywN{st_rAmRZ0F3iyucnbPBMPVOpeDMV4d9OlO z5@i7r$0Fj7)YkEid=jB|>|U!yk5e*fK(sSA@IHx;ab4i~XT=L_H6NyZ@jr8ixlK#( z`L8WO#wKLu7#!}Od91>Z2LE^__I|3jBxfXMaVs(8YhU+uNUIjxtBQo%=n0v!FcV81 z5vX|NL3~iPT#J*mboNp%@5t9LRvXb{)ejt5W?ZlM4+pHIW!UxgwXJW*jk~u1s}BV z!oEGSJdB~xLk@X<7kUdFp5~5sBxQe12-gPjP<1zrpJD=Gz{t$?=Hl*wzS?`jsctO%+Vp<&B zJm+62;dGw6-Jeo973dw?n!v?Fv0!PlY|hl49$Uv%Br2*ED{7 zupU)JK-s|3u%1+cC!;J-{)1-$ ziFBXv{A7JrYtvlI@2?R?_l>8ps?nRBMnuGZ3>`_Yw(;|5JL2M7r z*MZpE$13M!TZVbIBaRB@ta<5~cG~ z#HZ6O{^D!Giwu!HVJA5k4?ng^#;#7TIUl}{o!#0#%Wz5~L5YRHmKX1SxJ$jvS$K$g&I#LS|&Go{pd$aU?=h8JJEyF^j5ok?R}?di&FAaHfxj5U{!bhW`m-A z_v!I9w|~bBcw4gp$vi;=HgZ)y(~)j)8%<$a8r5OFl7rPD4k=#$z2?&JZkq=?jJ--r zd%I%!GFNRG1NWMda|dcp_?|`^)gg3A*9*4T+orE@KhI^TE;k>C(nI6A_GAH zQ({i0x^@3n6qqQj)4a3@*bd7IFWpn#p{!m$h2)IeShfZzu!fz;wC+`emtK-6uvfz9 zQUn?E^39WB)11kJHkOArFSx_v_qi}T?m71~w9P-x^kDQ#V0U;wPkh6Db$ zM~y#X54^Wt7fVrYg6hYpfek6@^(KC{$Pn1^x{mg%=VgEnR~Gz98L1~{WjOZbiGRH> zp6HPqSeo+c#uefAaXaVR-XC*oIn_;Zn_KHHat20LTU%;L*b)aoX^ft0`(OlrMJ}(- z+~T?lPBZxzIZ*GOlm8EfM5o{i5D}CTKfRs&d#blY;j3+{B;=&1C!hakL(~ z{B;str3c3oV^SAw_%19VrO#b_jjlhv?V+x44Z-iQ^)PUT4Wa3H_WUL~Z5eMJAKc3%CpCDO7lJClX9e!=a_rZ`DD6zURTmhfF z6!2uf_QQA70=}{K&W^)hYIqtgbT}d7X^;-}r*(Y>jal;c*!Dae>SD{kk2bXtckWAs zt(prohM}egT9n&HYw=?)2Sze9lEiESq645TC-+p6l$5y{QHct~&lG@7FLa z1+FDW7vKDFi~*jnnmW<;M%9q*(_$`NbPvcjSZd-KY8F1fh;Gtj5^J(5R7K3p920>I zdgPXLuN%r$AHY^rH9o@EjoD2KWab$ED2x8qyfn8|<^C6oi%`L^Dhq{&WJg?v9WTAN zsT45IS_s_&+x!&zs-9F$pED|Zd;3Qj%D^ys(;9f4)uJ(sy6)J1oa!h4#K?;u>wSs5 z%hLhI>^foSZCm{Gvb(9i2KptVqNiedTC~h6>^g!OokJ4RLx%J|E?I$62o^8 zt0q(~uno5VsRdynFk#WrnZ=lBe0J;$CAIwU?u4@mYdsB%q_pe%AQTD$qk@(9VYv8SvG4Tn!yXm?w^Ot}l1q#+xyPucJ4T5=t`C z|1VI%k&#=)rL6T#2Rn*Ekg~Kx@);v6?E_d>*2^v^C>3QV&F`3w#>{8cB#L zg5yIOmzI-qohiSfI)miZn6iE;X-<;LD2~oNm^isxr{10>M{zjVFlxGg;F|d$8*d#` z4%#_7*thfX5#_<@by_k|9Ki3SQ{h#bu~H6Al%+%Jj~mnyWNE*>Nl@5DG|_4PT*7|@ znsJ#HF`K#RBC3*gn4YY?%6=UNH^9V_i6kt^-ap%X&hlX>(mc?a_3&8JcfS!uJEC%Q zDKP17ny+4*>&!iz7E|2blRM-W4kG6%ec`@JA5yjT4c5<4M~dFRSdjH%w8Z2AgsECS z@k^@kLL9P9H^(ASI~r7i!abGpa((AMCI5v6(|!)ikYMXX4%c-)suj=ErzP7}GYz3DHfk?ibGPvo7Zf=#Xme(i*r(mbU`>}j@!g(B z5c(Y$d(Md7(@P9UG?Q7V4Q_SXm;Z_<2EMxCvlL_SjB^Y3&YwZAhjT!web2iPe6Q?# z8l%hz010JeVS^0C+svcdEP`wHk8~;3ivf4;_J+LY$gp2s9aEJ7fW@`|UX>+7tcQM% z7$ay;SE|^8MrYTsv&W;-$?nH{RJOuOfHro*BgE##ck*7U zfUp9S`?x>9H#2FW?8@f>xKV+oLxvyU}B`=09{{-vr`(LmG7n;UxJa4(Re5xJ7< zZ1Ab0Nzna?1m2Dx@y79Id7eM2h`(_BO#M0Gf8bd1B@{!VOk-T_;>!%{3Bj#NZ@5J_ zE)0xqbR||ZTvAn6uGjX_jO%iWJ!qJpfR)T}GDy`!Z2*Uy-eCISS{O$ z>noz|mGGbwY)I7jp0C`+N3k!m>jPOT0XgX^tC=-JSI%suqzQdsk4H1-q@_N|$^mbc zH501emAstuRuoai-kM!)TXx-knepmz6~ZaoZ`P_F`;<(6w=H_tZFV}tYQCa;=Yv^v zFN?mcmn!q?`a@YDkh(hdT42fH(P}bsZ`2eHirOE{-F9`X)BMnwS)Kjf=&fBz!Pb*y z?DotyxeP#Pa_bWfVyk$f8=eIkZLz_jPLPe;^AjU3=AEq&7^}oqg3rq%kX4(kSd@w3NeBHxyN?P*UbMDi&sa^R26zH;t zh{BA+3RAVBzPBJlYQ*Xni6IRSoSt0g^7uDz7_0oKE!k`u>P=E(mQuBda-$a4zpHcwR_dUh; z8e0V>YXSNGEg>+^SHkdI=hh*>0xVou$7-dYkIrLGe=m3YJ%ica4K!G+{M=2P4;lkN zq~}!PFJ;;+*KIAFO04j;eQtHz2(+R7BaQhd$+CYA$9)45IoJ*AS=s*5pg-TiCEd`$ z+&9Fatq*b~_QcLkSpSv;aK}YAKc)8JJ01;49MhT@aePT&yZ1A-%zWETLq7oa=m;s; z^--6V33pAx$yZvbV4U|bsPCgoSJv*Vi3rU{vD?lkNFe-+F1WYMr$c?9xGSmgErs@B z7zoxq=DNvNxOd>829{PZVmeq9{c@O-DVJt?n%62aZ$VVoTnOyY<^ z2BW*t(VmVj?Rs^f3eTD;wd{>)LyAoMT}B%^tqpH3%Ig0Fi0slo(^}@+#d$b;WOvSp z0>?j>+YTCE2M|pRHb?iyc0F!_$!A)r0M1{v^60H%{ht1cBhsD8IyXND|A_}C(!hS|I)VMdADOQdMy(c52OS&qJZWK`izye$zN{Hvc?u!M z$?7iMsmCT^Be}ejUVPGJ{zh83$ibbK5Q{`laN3+(A06d}&|vq|qCI!kIQUIgo1K?N z4zW8Yg<~29h_;qC=L%)R* zQ@uUc7nnVfMhgff8k~VbC!Z)?nFGO&K?r;nn%Ck)&WC0ZkRr4gM~=ENKtqjHPj};F z$t#f}?27ig=$Q~xp{-!k3!42`mW&0KWqZgSTT1uBB7R(EiZpxj-9VF-nJ=@hWCEtB z;z!nKHVtW=Tw7cIh1`AU&0|W=m}>x@XVA78RBA~HofDp&aJbK=`q;u zr*G%>3lyC+lsKdDwo-rJrdMnZut?~ipmk@SeTLdKEz zV#@*BrpQrZaVQ2CG?kU)If9PI5J?UwlBF$o``J#_rQwik&VQ&il;ghF6<KD(@HxOF?p zBr`&7ASu&F1)I9%T>!~#`qU?Kza5tBoqkXgS zwwD6yVaqRR_+~S$FCe0_U4E=>^FRkwp#FJ2tyqhYS?*#qF)kW57k6lNc{!77iZDCS zAq~0cq3kkB^da3(HUeE$mbybC@cb!eL2o5gj7>ElJz_}gl;@2Zz}p$Gulgfpa zpXFZ?fZJH`URua;aBQB~KUg_(t0azZp%|Aw-m*^JbNjmQ2j*M0(D6aS#{yY3<*s29 z6p2sy*i-1XlHYu){=VnHDs86O6nt`LE{ES1^HogP5Ikk8$#?R=eA3k?Rc4N5YS22w z&9qoDKDuvaW@hTD&VUeP*_QIY{=ZS0CpUEMcJ#u?>_z6#L13$Ke6DkNvfuP497}FX z`cKF{@eO{*hI_S9D$rO{Sa#GMtCDkJ;(0X4n@4z7S&<7*_H6@P(*Jzl~)JRFOTmp0R~v(q#yNB*qhTROxM;TmR{ zV-HI6;2hBh=5DWX~Xnwz^&=$sGcMNo$)ak;gNhy`>UA5UTcH0>%E!r#`6rE zKbM22`k+L#jlb*jUebsDw52shwTnAVoUnq|Bd9f_?GTPnkJdSKt#K8pL-7cg?24`cH$9F=Zw5D7H3n zorK%tDxw#<+K-tx8m(L&2!iPL*JSNf(R>|B};7CD~tB;8XP ztAdPxNolfMHyL&7+V4aRU{PMxyJEYI8_LX(ryzd_aHdRrA-hD)Jc`!QoDwPa`(ucmy~N*w{)Q1Ol_oEF+k;@g)F;vWlR-ppoB zMfd-kE!W3J)~_#L+3Cy7-EtDUZqnrA%ZOhc`g85$79oKSj`Rwpcrr(D+jk-SfX!gr zUkEF_2Fw*0YeGxB%Yo+i&@_I6+WJtCKK3j7_1Y_#+tD3_3(-7f!n!zf zDT>?$kGS(Bmz2UCaC3`-=h6A1ACNVbpJl7Q%5+2GMb1j_`Hm(;+5FUgqU3>7eOiH& zS%s~4wX0A2(P0OgR&bmEZ(Ix|**R4%{K=N%N>WeDTw1zfo_G_>$;h?1h8^L(66F0b zQtlSV`s(8N*G2ai9EmwgiGDes0*mf=zI(%TlhL^(fQ6F18($^mkPVbJkIt!fd7ziD zsum}5dSJX7`fP^;O~GmwgcWA0k3-Mph}O^kZp^cE`qSL? zf|qHJ{D-p*VtYeil>)87eW+R?BG8%9w*Rl~`|56mU;fkC<&ACZ9t4V-B9bN#0>RCw z6j;2FRsX-!0Oh3c(OWx}gB4wmak?*ffxH23m7nJGrXDTdTWENN~e~VV`g8 zpm>+A)t99Q>^7nU$(Jsh01)l@Z?(Qc_L?>X8{S1re+C zWV{N0A(CV&sEgacicXb861OdLDY2fMm!9#g*lg?z7>OU%=JGbB1hBqjBuC>m56sGb zbSSp=omUlf2Wdz1$$ElY|;&`&D6_&(`ZvyJ#2VS9zbB{Kk3G3 zreH#UJ*%uMc6V!I36U`r-0F}JvK5%jpj1D)lT5k|whaKjoVp1a=QFQwdYYQ1Zgc%8 zpV>>(OGFB%g>**bQUc`Wm7D<9GY){cfKa?3L+aYe_C9^_o4G z!UyesmRdct&LNuh+53(cAA{ayj)%gtHaY?1ln8udsU_r2e~ zoLn&{d@rEl9A>GjNaL2#v7dNz#{{4=^a@?1a89+1fvA-dF-UX>*)-tr#^CJJIKOhr zIMEK{FWU=!_YUq7Iq|@={ajuXosFVNS)5gnPu67g@O+H81L;;|4w~~7q_gofz~C=t z+bM8RpsDML9Ht<-%gVJF9Cc^0{7VS#u-p@@R57j76JpRZCapC-jDI~Kd22qKCZ5{H zEO;CQDt+ns)`m;Ee zzGT*aCDxB6IAF~&@hC^a7tW;BJqbW^aMgmW8#DwDhyEuBzp}}0r7w6>mku|fKSrfA zuqQ~ky;%*bhQ$T8B)-6j{jZu%XBXBEQaPwaWT;4#4am^F__wA}6wyQ(onaJaQ!M<3 zBLVB2GslXAz6XNP0v>;upnt#MLnx^R^Bw2pv}8cXXeJ5z`1{){k^=6KQs-Yqc4!Y^ zA_LXNoA-WYCbq0c%r<6&$J+JR9!q;8LbCLMq5gWndVeM<;%zZpx}5la1gv=s^5Q7zn4)v7n<{>tlV{lWC~fr?sd5CY(pH1qXE%9YFKZl;4lJ;gArf+zEK4@_`}1MQ~SI<62USUxLnTvu$~C+Zs}v79`aS zJf3?v1CmuNSX7c3stdExTH)B@%t^82gb>=e>kCG!VP=e=Go!{#<{NH zSAanRo>>1k^ITH6%VNYQ1^TdfV-wa;WG=J3Ti4j~*PZr4RCfW*5$X>2V?$Phj#_?N zMCG@)ja|=lawo%@?7;TT&JnLBDumkSdviZ(D^$8H5%-rtF6W;P65COD-fWv($<(cLw@FobG)Iv*3DTw1EYP92F8cPNp7u*h^7#VoA9j> zmSpJP#f=9vu@s`$>yU_p!Rj#lFB^6{XVPZO6l|DwG`B~R(k8)!{y&#mLgR`5*1PHt zB61x@g_rYDQ7H@W>9&y6FG?o9@u1}1)qXZse|LAisE^&{4=tWIyg4lc@Oq$I4o6vp zQ5fD6{V*ZIJT~hjF`iu+^3|+nIBmhBFUys=3D@*82yz;#dk2^X{MuZc|Az`^;(pYx z?=5mjcl~h3v+dZIK{UHs6+m=`)-br=wD%?EXBQGLseXG`#IRCwQ6bjLK1)3;GuKke zN%6eK`WfcB^+wd-`1GAaA$JIq*H0Nhccat@niZEx^n0svc`r~KGSjWTHyXQ$xUERP z`I$^Mwh+0qv`~QQ_IbMfx^1VQY~^kvaD|~xP&}eNOP!kPOIFaTz6aI!Kyza?^rwZ7 z=Vv$;i54+E%eVQkz$@vT)J(i7+VkG*?K7Wx;%?4+>slh=44RJ-l*gM1Z+re`)^2F06Wj5nV$=;ue~G&9k^c&k<5o* zl#W@!{|YFw3H}M_SMBT|GrtLWZsal6cj;%^vWX|SxxDIkRIY`b*=hZe{KiR{4wYrpxCs%)B3tcFnxmxWgpW;x7s! zzEoUwy$k`lAMw|P5L4zA7qiuGeb~7ha6@-!xS_11;a4Y#vOV{=^D=(h)|p8oUT6Qy zw`N4bJxTh;A9ZK~*3}fwds}*z7M6HVg?-&f_Y*#}Eei0bN=&$&GJVD1rqygvao$k~ z5sD1m_$;F{AnMc3q{he#b`Az*USpj7PTiBczP^7*%$ z+Hcw_mwtM&2v_q(g!6T}YM$Krk!J?*Wgtskg(E%TUX;}NV{CcbY!)!gf zcP4ecPHYn5Ze&)P*>n&%0^Z;E!Cr!kbkuL)@EGr(?0fq(`N{f|KI<8k?3~arHWNFx zxcL?M&_PvJTKA^&-G6i777vw9&@9R;=hjY>K>~(pxXL$=VUzUhs$0|Q)YX?plfOjBWqtGduL$x>h1$+p5zM- zF%sqx4f)khk%VQ5j5b=I0?W#LtvFw%IpnjZ54;${US4g1m!oNgHt11B1$rh1UO0v(mkBEgfc6QE!Sn4dk`zT2vJv zv08jP)Ns%{5%I{(6CffvLZUquyuOXwoEgBxnMb|Ow+n%ZFZxgsZfO31@MA1K^;vrPlJ}|kGZ|fr^fvx{)?Y%2 zCc@B}56)Xlg~0TZ_jVYQfPFT@ITlwTuo#O{T8oCtpeiw~Yr-)X`my#mfMOacJlutv ziGLw_YtFStcHbKh=Yfu4Sx8RI1U`yc*l*yrlW+VTT%rg@ z2>=D}&Wm$A-lo2Q!l|no>Lx!&T9<$r3h|L7%T=?gH#pt-KW z8vpJIC=!h{7%7n|vR(W2+PHD^uDw$>xk37AR0zWlorNc7Dmfd_!u!=5t3(*9>SUZg zU-#`szXl^hlF@fAQ^g=OwbZtiv!oBf{G(^*p@X2APSZ$GQmtE$m7N4=|5lmbxnjn& zK=%8^l9RDEE9;lWrM9L8`6sOuY9VktakHV&p)NYU0PdB{&0aTL>%-1dUJ~X1)U=Rw zUauzYEadLq93w4x>?Z@_x2gsl)z!tbvop%~kyaKB`R?8WR?$LRD`J!uvgaku7A5xC={igD-P>whL>~d!;9K)xTC-KaI54BsKcwsFVS< zMR?ZU*&egEZ*2@ItMxrQ*h-pAzr)UO>#VrPxlykDSU;^QgsD?cZTMRB?wRoL$6*7a zO$%$VQ?G9>dyfBi-i6?q)(D(Hp_^ET=)J4}Q5v_FfKP2cCzI8l3Gkv%piv|L8BTp6 zJi9$_hjWN=+*QL{;|Da^$BFqn&e{T`I~uDdqmx~hOZ$LnTour=G^=duh$(N%J2`Y$x#LXm%EJN2D2RXQ@?mR1VMFA7nq%1 zjBXaxRe`1b#INlzxR;!BBi!y@4q4x*_ItWw=dx&j>Tp_^q6p+i$RpE5 zUZ7%x=EQ94a9rL!Sv4==jrDZ~5nj;C`j+CH;I!_JPI9m@g2(mg2zM({pfhZKPr{VH zacNJ_OfwC#S9;bp!CH@@%fsDHAL4v}nmSRn&e-<{A=VeRKcl|dYmLMW`&?KrtlMzT zuxs1=vW#x5YUppPK(#90f81uDa*%TcqgC`_IJaKwc3AROfLlC{@oZIr~>b&UlMHIQK{o$Kl)`dZ(Br)mLhP_jNT&E z!x=vRLOSrk{-7=kf1kDnv23wHSo8(d#zh@SIC-`cfD>8$-fP;m3k8lxz+HD8UIZMH zRZPOcLHD{+U|RH&m8ft&`HLtl0kV%{|0y&x8<$M(u^VK|D|J?LqB~Sa3~J^M=Sa@| zkh?FSjXhS_S|jvUj1j5~$%0c7fp46ZO)l;Fd(-4`1Xma0`F_H60K|V4K96?L|l}?l&5KVzy9m8)91eziFgL zF(i)oP)lHW6wh|m0Wl*+PlPvFk5&i~bS3!X6t>VS5)3VXx&K0NWgRf1`c&}S;m^Zy z=0Z?9&9F6b`5(1LWPI;ix*oM%AzLpF(n+WwFo!{{4uLJr zc|==bQyGwjh&Vk<5=%fLE^NF-ab=z}ys&wHX6v?a;!MSk*fvQL|M)!(g^-6}k$dlt z$JX0u%JO=&>|=O0t!}0+tsaH>GooyLc`1T-WF1wI?h7qgiW}|sPP*6%nK#q+B&btM z<~4HO)Mq4IQ&IMGQIU^Qo$}bWKgc_&tR6p<31~5&QmP?;3PpMzFdzhfAA|)ec9Bz= zWX~5xnPo%=*gZ44IDKQ+Xs%lxTV828zzapjt`=R~R5D>A8Ux6f;I`kpXO`~>ntIX! zdHO2dTZ_4+vbj2zHC|sre4P3>U@~Wi>!+=-^a(kfCy@WGBx}5K*{yz3 zzmZ&eL-M0P6nFMqGFkE|PDUV*6VRBiaBybS6caTR*QgMXg33(9PYrme5lGucUcH(- zY^>09W;b*9$B-hHS>O(xxZ(SACd%Q)?>PI=574`O=i?mgUmhm*xP4(qzBxVix?i)Ra*tg4D(gu+G;NBYj82|`JLNU)*%?24(HkvYxIQ+6w#&k z97iIAFx4;=a7m=)$MG-t^@rwpnZB#l%a;o<3!7q%|V~8^MYIsEgYjI+Yadt0KF`SFWxG zE}CuXd8BW>C5+8Kb84b5b)fSpaK8mO`F&)?YVG1x`h2p!N?8IMiw z)}EgATr;c0^f$egq<8p>SBLKzfW z5RgaKH%sIKTHefc@R7BDx|*&@B+BkLxT|=P!(MG5@b>8qLd@z-x$hrm;f~Yv;-W56>*SJ=iSq1z zZm&ysS{}!8j9P@_R@4N>YB6moj;bd%KM1+>c(^_ZmA`wTo&UuP^}$tWHehZJN)OPO z_oPC;2+(Yjb0To>_0-T~CDA3^Ylu^BH{YZ_oo%U_G9-bSpB0(~WV3%%W)z`(rHax&2AY64E| zqokU~gIq?g9>J0kj~v+!L1o+SWE7rdPpv|H`Dp|03VM!+B4m^89+MZmxM#4#j<~W) z43U9C+}T&wkqlcB3p-s;<&$5;<{+b9i+*re*|BtmI4*>jbl&~pR0uMWAU{(7{0dP^ z9cP_ux9Y2Xp#;&gmokqtA^^qZc^*@2fwpUMx9g~+FTdkETEc>TeRtX*Ot{;+=+hYI z7Q?_ev4wH{MzeHlO@s0smXR0xTVrR@GyV%}>5?q_X;1D-k>-O%usfCi+EOI=*B*wk z%-rd1n`H2e9ahtwZBJBlGHRqoOcQB#RH?S!6CUZGJh{{DmRJIh?k@`g4Tnz_RAyMb zX;e2rRc~v*Zf~j4?&1N7fAFT)jh=;rv*BlA`DQ7na1EJofdLzF#v?UjP*SMPk zTF0|(Vw%DVtysW}5~AkoJQ6~kTKPQ1&d%C8g4VfwouK&|M(_cBaj4&WBW+FkoQpCq zeDfVRxvOFi8Co>A1hO+P9Oo&X_v+*I%-~RFPYthwSGZzqb&we$xuA&tcsBT~d6>)E zw(}eW9VKRGtMn)pDkD-n_`d;W#*Eoq?2!n->NK% zK#{ZsWHaG_@_my0?>HVL@r~us2lP0_djpvz%E~X&v*ZZ`vZR!HcvnTd__iExjN1E&3 z)#dMC?+3(67zpY-;AT|IeM--#J$6JkuT2cZi_o6l3_yUNMQv5Jf%S~a~WWxg>g^CbIy{lPCxtGBg| z<4R5_5k-AjHsqloC1&?Q|B&`!Pb%wM@jZ&~C}Z1bnm(+bT>HHomo$kKTZnX0lfqf} z6lCr9^zW_e);e@k$*cBSLuN`Jqx+j{%KYv)`MI;-ck0uJx^1a>62$NdxB6CCqaW%N zC$B(K+(v`%ZLipTHCN5F6%PnUd+(5euPD@zR!bOHGVZ;xy8=j#`61P{_5g=W_uJ^I z(AD9&)c>!&FAsR2s z?UL`wgr377o*ME+v)`jQzbPJfTq526lfXV_m4{(2W#q?c(3?M_OqCGjfCTRLThlaVB-?LZ|Rl!$bL-s7x*AXybh#HGkJ_JN-NLdmTBFI zwGboJlETaKF)wCV@c8Lc_A*U!p#}nxJA)H%UB2na_Po@x41tK>&0wU) zx?U#1lC-bD*pHaRqLl3Q_sKVo7MpEoG}UTp;1_dpmpjhD1o9iVG}G5bdzk}hy*fbc znRgCs*$f3GlUu~8yI;{&?EvX69u}MiAn7Xi$`vgRoEl6}w-u9-4^9!?wxx8#6bg8- z^Lvqpbg3&>!q%}t$&*zaco#9!ZW%H0W3vh(YyH|!ULCf8-7Wn~(oZ<^52Ti3zLJfaF_QaQL|Z3loKOXHWD%u8d>F-rhaM8exW_ z$F&K;^Rb733XG-K$d<_yBAI)Jk)n&$j6BJpTL@Z{U!Hu?_k$q|81tTE|LUz8i0FmhKKl9lv)SRl}`PT>xSwFr@pGX)2di$reYR zfXr}<-pcX-Zx0Xa{z}Mc5 z!cX=;b+K}*E4T#D4GbTXxy6v`uJE3VdDZtAM{Br|Q^9Q|kX`&!k1HU%fLn84wl%L* zu%Y%7wl+Cp|Db&USLNBSe-sI0QW40H{h+<^wxX)!ee0r?6UDL&j~`2()wF<;*RMl< zAxMQJN7Aa|%!F6-?mF!Ov^X;t<<1btEGoAi)_zZhy+z9)NbnPtQ)F0-{svxYPfPKg z^9(CpY`bJ0>Nb~tLa><@Tr(kK!11+rOkbFhPheT%1+k_Gd_}RKWqiH1e3!}~P)DRM zSw`!B%DICICTt>Imc7hNm%wOVb~lk~)U1XFz5fkI!_k1EoH6m17*#smhE<``SVud( z#J-$(ULh&MS`G9-H0(sh{IUL9Mu?-A==F)VZ!JEdO)N@h`sdD#J>A^a{W{mZr>1Yk zih=H*_NJ|$h@A*olU5pld5_xtn3&FYc%xmeapXgApP}>NnH%6xxg;}dps~*KmWk9N zcfx;-f*LUyF}G2Xkhw?v`3!>gKpbjZZBak58!_)A9ZP-qwd8r=ZqQFQOK{+dbNmlk z^G7N7_Y$6Xwbl^_za1q3o8qAF!bk1JEZ2rstm4ITLUP6X=963S9|Np%%SzK%-*=14 zcFx(Ci%`hY=4DKA{}nL%KkVAE;RxjQ>o3cZ_*^s=c?Ie#J;*!glfq&)mON7XFz7); z>!dcAd@bP8gc)-|p9z~vArxg=`=YM2yGXd!vpzqAui%oq%;ffY^>tr`U|~;FX~#Y0 zns-pc^Xb!cXT=Ka2Awa7tK7Zt;j6-r*WTcXWW*o?S$>=oz6xt?*)))M(Y08`EntL+@ z{Z&TF8pAv=>l4~Pz(h@dwqh%m_|dBGQFK3V6vED#v`gZm_eGc#`GQ?N`Nm(=3}2{C z!7x=amSF>$l5|U;(cY@&if|X=3K;R9- zF_Pc)?NVA%IdUzLw(*(c8?UEU4*QGMm2_T_9E3Z)f)07i6ZPMoq~@y`)?Z8R1`~`+ zuaXUr0Lhe!F`Kew$qnt7E$Z{-ZnDFrwy#YJewTc;tc3(@%Q#;1b(Hy9Ip~g_kWaKBs#Fj5tu)%N0&HxdKv3EDp zgPE>3TCL@!p(D+qB>Q(pM9jOjz20tvoQa(eaxAHfOXpMX;+nsJGbC^wQ>x*_y8hom zaDSQ;6=uaP*7Isw&!;X2QzR#h)i=d~gEyhK--T1G4fa%UVrKlQ1hcTXtBU4r#`$&ms|_HF%M z8?(GJjCW2b(_VP`9pkU^D8JCmXWR~k{b;hZ=7(k{&4lxm$uDvr^hLcdH)*wAYUMcT zuXjwY7Jd|LW`WaL@dBiFRb(Z2{c&p?S1_oXlkq#}R+$bKuex7_>mP)C8;AkDzhpT# z`l5)u$XBX>r}Njj|0vw1Vy$iM6#f&>Yl@08L+TN}Nw6i_#8Q8US_w-S*MLY68ncmD zwi)@rmwOo%ldL0+x8e)u`y&5~|0R6$UyNQ68wJ3i@mYw zzZXPASyVB#MCYe#wI1C@(FkHG^K5&hJZM_&h(w7xcaOLt(tiPlDy%A z85Ga)x|gBDlVL#?a9iQHzKvk&ln+JU*ZxNF+4FfV^e%iF_?K$^zRQ7UqFcB!vC^Ep z5Fu0}_ZsD`E3~@NQ@}V}T)Z-vuZacDAWL#n;}n}J1ff2yHF@$U6ZT&>9xp*1`F6G0 zZLjD_`_2Wr-?NKsA!w-CB#*|8N~E&n?&9%WMvjjY;*2#Z&_>3g?TvG;aNGQS<6aKb z8WXXQ=Foali+d6o6uOfzc2keeKU5FtCf7t=&3pMW;C0I-68VGp1?Ku0|7t?P!wjRo znW_zK0%Z|)Q0iEnH)bl$B!ew)B4=v-Q!8NI)Bq{ zWp4mfm0n!{5WoSUMEs-{A9nqX8FJV$Asn+p&uQ@8=Fn!n8S-%+?*m?WCj8;L(_JP6mV5&>2TX-n@a}Kz9{*fAO_;v9 zAE7Vhq*KYQ@+&}@dFc`}F{6|T#7KQ*XZQXhTIKP+&&}xiMp@M;je^?pjCe`^YL5Ia zEy7|lige4ebz*Bfi|~}SJ#LU(oFBHN$K!CLd3PiiLR#KjY&i);1$XniXi;OLu<-tU zl7x@Q&Ysew-DXP~Nzyi9XWnJ9WoBN3vL+v9;%QWWcJ%1f(AD($swCHWvllJpBUh=n zF4_jvhrP;wURNAM(0Vme-Ap|yRG)qHw*%epGTZRO2KrAbGeSBWBG&E!bGD_CrpWJ0 zNu=SfHSu%5BeHrNDdNgOd2_*-nX*8=fhPyt+?H<)vozydW1G$>m$cww#>5FF}o{;xWVaI zpH23t^L7S2lGuLAtZD4=@uKIO(q@GB84sD0gX?VT>o^QnhvW zXw4HcMe4soYR@S8Cj|!k8k)TmQY>xZ+YCZ^?heqqJk8YJKZ}G{=d=_$Dunz}M%Ujq ziq=a^l_I8V_o7qr*A^Wr5 z?jEHhYaKCt{f%_=&-CNXU%XW2TF50*5nC!T&cP}Mtf0Ms^Bsaryp*U@`1rhqg@r6a zB|s;w0L7x$1GK@eS8MHQh|dql6DM(e#*U?N$yGovQrTD#6NNFY@oa2%<69jCMTD5Z zK=?>eu9so=_U*f^AisL(JFuuwX`FmDK)3_hjn2#d%PQ#z9jt1zCO<9@q*Y9PE# zqH?&(XwmMUJdsr8a?8c{NF^{kFxS=cA*$szCA8geTe z7YFX2sGYIvKkGZsBJ1Zl^W1!wRpnCSdQctp)BHO$7}VkX%kqrpb*y#Cj>~vsO}7Z7 z$So0&QQ4O*`VLa=L%s$YfjFll9wxU571%f5YkY#$x!}CrFeZS%EJDd~8<5+~G_inj z?Ns~}eN~fWt127u)az!ERdQxlIf@q@v$We|lc~qD`gmslq{^e=3yJty`goRzOuoB# z7tj@%P{m@pFvfdC3||*^TD9)^c@f(@Z|k~NKA%N#sU zzI5?INBey@DyCxCdMA^ja>)L0Z{Ui|zMs%6>4UB}#18GaQdjO3^qa+D8(JOb$v=-> z`@p6R?u2<;tK;9$YENtj8Er2P3xf8a+I9vu?9b!v6mc(k8{KZ+ctH=XSgUPc)ErLX8EmEzPG!~9Wd>ZjCo446*BdZiE<$Q zC=#h<{6+ep{^aEs9at@wY`|mJ!y{Q{aj(41So!aU6<{-JznU86?La-HzaVT8@stNYefmB%@B-W#G zK2Kmv%8}nu?h#Kh;#)8yY^R0M_)Up`g;S_{x7SG

g!Xbw3+q$o}PUbb&j!b&LC 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�{(AIA8ju;-yzVU2fk_{dn=B zWf?`$38J(FQ3vG6M?_#FZz#f}*=CvETtHhW*I;7#522Uh)7zhzQJ6Lo*q0ne?6 zoXD^fNGg^cN^zf(HBTP%UcLNL$7bZjlXjYk4LC>g%D>a}lJ3T0{=d@n$5lY>7P?>d zGTGbrwvTQ$A}i?_~ilfkz?LL319LS_v0hI zhi|^c$zfW*WN(~x1uVg5?p_q-AbK0xJ+MAbf4f?_WN~dlRY9yE0RM1xc*J}`y*d-Q zb$p^N-t+j^IzZs&%(ExN{F>N@{KOlpaF=$PjpGfBT<(VP&262hIA_8mfONe*kdJS~<%P%h2|P(xx@hHU3y9A^X|N2re9q3eV|T`$xIdlxdY+Y)AsjulX9n~ohJ_8Bdpw$ znu$qO(&F8>`{ozg<9zx1`p6-8EuoCl+bW3z7ZycNxnFNxVK*Y{_wI%J$n~;Aoo4lbvn2ce#&P7w#*aFL_mw!U+S$c}gKU@z@yc%V zjXdY?mv;lSR=byZN;>+BnBPT{i{KB-St8F%*90q20{2}liL2E@++F0QN>xp3$92@2!_0gGuFq2zSZIi0`Bzr_CjqVVCJCYFZ*}hVGsKC$x=1kGHUdgDUfaL7 zodeXGSn%hq>L;sVj)hs%H2vGqnSd{BO%+WiyUm?Iv=xzuDZF0oPF7?`k1p)UTs|&r zXnD8Kvs=qH(b?vl%v$H^y$P0nMa1l=1lhDQL8BHyLm^=TCeQ!xZss#;;@`Cg05UfV z6fp%)4W=E%@x>=@e14eAiw5V&NC#mabNO^<_sjnL`C?Xi*-~Fz=DohL-sJg;K&Hj$ zUdRVE!+@+kf@B~MBzar5>KOLR zGI(0xN+z&tcd9=QZvE5>G8TALGf-T2)lCfObs?bXOJvUwd~wxJ63K0F(d%oA?|!uw zACJiBSX8%##}*bz4Rmw{OPO&ZoIkS3fCbzuq9>qwm9gdu2xyw6F?ERS64ljN_m|_} z-(zMot&l%&KPPWSe2F@HsN=4jmZo-ueH1TR#kaFwdso9^<=ICapg4x&E#r+Sm+hW+ z(tIBHIyq<}Hq~|c(=8R+qdNGkT zeHWrgelcy|(v0`JHvtMYf~c}1og>5)2u_hqRfGtq*L!o~-#r-c>dsPWp0e9iMtM~j zI5Z^`qFvs3G-3}dX1Iqx_=HGW2F&DC!d~+mMh|;N}2df<8+N(X9p-~YkBSs4D-$j&lq#WR{X=U;1cRm zZO`OdE%!IKKC!kh=(dwn7Nk%q&y94}di7L?ca9ut&I;B!c6B5Wn!$yC#fZJr_lQOA zpzm>J5j?`Hq~#Q)=sCvc+z&3fcaw(zY=jh$=M-CT?mp@7$J!6G3{UU`(tr73O}q(Y zk?7p4PLl8QPkjfO>u`b_e0`rF=&5KI987Y9r$7RobPr;&eL@}YkkE-dS!*YtS>6C@ zse&sGeUe~DGw=QweIST`|DfW*)X;K&Q~5`^=#^coZ zG_sF=cqm^dT`*EZf@2%N`_}BEMOyiHfIP{3)$Yj|z*3C5GzvURj$KM%?o`sPpO4Q* zf|qmr|0v@myeb?PIPnW~jC+PDD|IQ}B zTG-r9`v>|LABD?B0WlG44t;2LaI-8^9!1c;==mw8tqy`3`aV#@a{R%4jB)knVd-g0 zH7iT*biPTK9JS9r$3*n9`lNo!{lXufb3yi5_bLog;Pj4c7JMS2+&DfoGn{^T5z*KS z5p8~QKh7;AUGFo5YyjtBZSO8?=9O|MaI`?JEdPXqAz19U2-EL>bD>9bc^Q8d7hflz zfB)^#{ks9k_UDuA623;i-K)=>a3I`S_-*A3{C2+hQ~kZXs89^Z`T$oe1Fmd?{`&H> zUx4QH-yhV7{eT8s(t+>)Y!EmjD0& diff --git a/tutorials/notebook/mindinsight/images/image_panel.png b/tutorials/notebook/mindinsight/images/image_panel.png index 64963ff989d6fd743166bd8630a3feade2fa01cb..451a3fea4ecfabb224f0f1cc90ca5e5d617d9bf1 100644 GIT binary patch literal 140756 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 B7K8u* literal 145940 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

P~uV%e| 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 P0bD$1dlvtT_uc;s5%Kg2 diff --git a/tutorials/notebook/mindinsight/images/mindinsight_panel.png b/tutorials/notebook/mindinsight/images/mindinsight_panel.png index 8eb80073b47556ea1759bc44b3b02b0e8f5ed022..d93921429b05195b38b491040e9abcc99fb4994d 100644 GIT binary patch literal 26968 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 Ay#N3J literal 19841 zcmeFYX;jl!yEok4y)CV%XdR+5)d3M1A|PXc+!m242t`C@A|g^`2y+-R)S^&9pfZFx zR76nbK?q|~K?o#}C*!zd@cVU6%~w-zkC^a-S&qsYRM|g@;Cns zxOna27hg1FC`x>H$=`n)_M>~`7hmk_`S|xG0s7+37hhaEa^=#+8?ioXGjXln{=Psd zFF;J`5>RPVWB00Vg2r#w{Azv3#wPrWUGtaz^^L)^FL(X((Vj1Zzp<|T?$YH)FAm&4 zyT9VljZW87=bSF2TrNL*^w9jJupg@yc4}bP#NItL=IPU6&pM*IeQC^nfRXvJ{$QH zPSTXmzVPwIGZ@n#_V*`08-}2Rj{VY8pRJwzxR__8DZc#gR9?DtH{uLtV|7*evyBeq zzsry9ZW0i2pD#bjFM5Pe7*qa##l4`K8bJSy+TZ%^$#3YEhW~?xs55G^LF%s0H_M;M zkChlULKiLuRG2Z7cF3(Dm56nAPtnL&Qa~5Knil>!gHxvtW}y0lnxG4>7nVD^3_BUW z4#h2MKuU1pZ@cC{*G@}xxwoi8pv6`%2pFX8n9N^L)Y;fpz2XM&J!O@BNJcL6k11gJ{I;8*1 z_4&^gP!~Gaeg!8z)0U4>zvvVNi5j`zKu~2ZKZ#`zUZFbxdp{e4!*w27a=;WgGV`yrLWI1djj$YeD;Ha}7 zPe9*!&;HU2u8I_jP%mUHY&~eZoRSilm8pdmDKy#pFfB&P?$HN?>;sy8NKDgr9s*kh z)NORSs$!Vxn4N8!{9!!WP@q$r%*|{7r8@MX+{-Qao~0 z{L@{};zX)y><>tI-MBc9Ci+ZlO8#fmusu~x&~itsc+@xQGe^4_6I6hD;~y~loJ8_Y zRO?2|e!cdt{)A8wBDN2wxtV^ASH@(kJ9u&k^&8HGB#ZrgGiEuhA&~DG8;}Q^U9N%G9TuFeL@4PKu~$#>@z>4xLv8wP^k zMu-~LrXd`Km1W1c*UCNZ9qZo;LWTb0TU*c&ou;k`Lc2Os%z*+Yv6vP~7NoyIHDa)| zZ#?ccl_tt!90OW@Z^80c;FAyjyX{R3+glimDN)2^lcbF&Vr%J^ zO|s6CsxxCF6~CYCsm$#}tu2NvVvz^=UJ)Ve@e6ep+{9V$5{X}NR-MRu+>aw;sTST{ zF9r1+0ECj8NMEW~SFq#Wq=Zdt6e^o7{(5b80BBVz=d8)`x|D{XP`c+!I0dwDglNtc z=dO3G`(-NlCr3K#Z5Hw6iK3`Jn>4w>hXP6T3f#~1_(>OkQNo6P>Ty5ylwelmPdRwD z#YcXgacg0a`c+;{cil|_cWRdG1H~U&skp7a};$PKc zhJ8?fdNJWdQOh@Bf*Ry~GR2ZQJMp=pO{&2vh#uMBur+anv3ywG(yV=^0964pnB zyTE`Nu<1TA_OXmv*9VA2lv(F?zhhFxszIGT%C3}`%C zuMQ$x6vPvnd9zhkg&B2dI}$zl)JTnFW-RVB8lPddJiLM5x8_i2Di-#=GEc@RpFtNZ zODpwvgd2FYH_e^mSAq-^(gEIT(#^6&&k?MZ2xv8Z<$%|$#;fsU;74z z#2M}IX89Y1Ve=D=`6m3qbwyZm)p5TTi=hzj??R{DY7BR9{VuS(0C)g?_>KP$tq2=> zXED8_ZD8;tnCZ^<`5RX6JZ;g!v2e z#($nwccu+E;}vTM%ANHj(cb`a;$GkXXcG~0(crxS$jC@j*5ZCL*#I?~6gD0W{w5L} z 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 diff --git a/tutorials/notebook/mindinsight/images/mindinsight_panel2.png b/tutorials/notebook/mindinsight/images/mindinsight_panel2.png index 7d4d858c3102b790ee14b5e706bfeb3cd6c10062..355d4ce219bb2e2766eef80928838f4a11976c46 100644 GIT binary patch literal 300708 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 XC3|yE(R2@gpYGy#_GInvmu~+bu^&Tm literal 315885 zcmZs?2~<*R_Xm8t-LkB-d%I@k)NH9qS!#|{R%SV5PB}rPXgMq4gupFR8yw0pM>5R; zRB|4H%n}t9OOYI@6j4x76cG^kc<=kY-~YYu`p#NsvCgy3;p}ss{X2W_-~K(%ZrWPz zl0P8-%P+s|vbuKp)-S)vA%6K~bH%o;vJu-e71gqzP0(AGmwu`0SDlj`{N{Vn=Hf5E zRHy9NxVuGmyglTaEA*FN6gvL3Zz2VkdH?c@^qtk^i;j_?d9hrKs#5_j$)72q!}$`< ziDc)rWEKdiq&)tj6dK<;s^yuU?m)7HxeKJDCj zVBgkV_Qe-Z|Mu$2DyI^P!L+utxcRA!vBH5A=F0a)j6>d_;6?Oc2a)S zi~s%4oRIPTojWf7V@tH!lWgKuxBTlrjQZWn{u1~f=Y85|@S|zaa{K?>sAN0vj3oA- zHdR0PXlF|tiG1`w!}n#wXF>mCly%Nh+F+30{|@WqEKU6|{QtR|dO<+jg@0OhJAFX; zAJ(6Vw^?5QShu9}k-&@8QP@%QpKP z8AqB!=N$AlggkEA;MJ&1%YPV=c=-~&=sTrfU0XQ`ml^8H=`LPClc&dV-j~)i^?ass z!+NON3{vUDe6!j=%=&rZ_{MBHJ5l)yn=v^2g!kBFZ}6t1zzYvULC9 zNX*qW$>oG*T6eH+wl?h@P$#Vsb-b}+0~;d$n1JdmcJK(^7KBzc* zsUr=ScHe-__e3@}d5lM*JS{oACu_L0Mwz zm9x`1M*Qxfae()Hr=jCjY!;_>U)12cg1e`og%MBf4zLZ$Rv? z76br-($$W&dbj6zG>2~7!v~ewclwXrH~f*H3HEP$3Q_^?9f6E^k5p`2_7di-Fdxo5uM}M?mUz9|+A%r_C>C-Mw|K*vqc&=uVOQL)-V}hr z##a4mjn{SaYA)*PwS{~&Hev`z^rk<3kM0oELOZ+Wy2*@rcUtabjjb)gr*LC^NF}x> z9}a((*eATu>5I~tYCPbB(n<>>HkcmFvU!k!Mw^U)CCZ)bm7s}}Gz$FY;%(8}-Y)T_ z<3UJwTcUvl(sZNbO^ae@VW}n=K-qsvGcT%kuphFP)livGWzXMH(^QS6Vk0^(>A^O$5B=#^~YwNyj&qiv49?i={M4 z^yBN}bJgJ>AJJlJ`ISDszNH4<=P+T?gNqD6ezVg|z3DNmdW=nL9p3$Fa8NqB0D9x5 z5r7&)^PQ->etaR)%_o!a)g8j7-Cl|C+)!wgZ;p3TP3~Gf;0!*AZ;c@b6C62%?8wvVs;8vcQ)$vywQd9xT?a{X zSEOgUru0nEW6O~uTu+OxivA5yj3C%KU7O3u0$WksIoFtIbjIW7d-E+$zQ9J1_t=?f z2TR1Bo}Dwz%HRxgP(eA{c=_?4*+jntk9<7}6crozSa@i6pEKeFQggMDuB*j6QUC**u9+ z+G&gn3`hZr6q-*JxtC1Krfx-{3*z9;c(QVQ4n}OdgYhtA2W1zmJSwhOuN^-py_?;_ zP|Hr^XLuMFUPngHR3748`RVFnlg-#NKA(bKY5=BIQOaLNz=1Dk8sr#EUwTEBc;@j~B44qK z3642A*O_%4|F79IU8o5awzREGij1F_FMk{}BdaBn(8wZh<)Lml4Wy1y951@A)}>kE zh}sq+m>mgoV5M4&s{dcy@S=Rec9MaAX7)77UpKWFJyJf(Y)nLGf<{otSkfD>h8}5! zR;F~{13ZvtAmAK};t~@npQT-NEoqbhRyd}51phl>g|Y<6=7a%VFAhfiBQo zfAt$uZzH)3A!YM6V6{N*+2fJ%b3JZT0*Y!p=FO z`a&6}pvCOwEZ&(QK+wzDs@LCL*Y21~>Qqz=K@Mu(_6OO7^Z<}FHTC#(>M5!N9 zk1f!%mmHyQ#BAX5cwD;jZ+cCf(uJ2&uv5X&0`}<42~3S@#v_E7M>F0GXVk0b=a!A! z!uOasLGq3~aZ=N|;UGowsI;)DrYi+wyBh2@gqbl1M{jj33tFdLHa{VFHOyzgQjjOy z(R)XPS(|Glb_hMr5B28brA|oWx5SrA2bu%I9_f@JEu9-;4r%Yq(nlRn(~=%HoR9pf zI>&C#FPBGMN zvG@}20y>R6L>%xVfS13K4g)6GxA{3kCgetfPx{(<+bkYn|K|9)l}LVuM% z>Lv!R++@chY~@f)<2P}>7@8+Xeqk4EMKzAIIHL)uOeJ-;0*H-l+140r>evTAu+}<8 z=U~bTT8dUt55`MCa>_ML z(KkOQij(S7{U@p!e5O)QV^7%8<@k48DQl_GTEa=)&lL~)lBMo@@6y+Qf7sC=&mKG( zJ?zYDa>RxG*jNxW&h>U0QEPv8q?o_L2IaGx`|jkPp8oWz^Tlla5@OlJfTDoFleI|9 zNr1nG__Bf7$r?fV=9-xlbWfff{pFVo#ctPff3rq=3HR}Kz39)L#`8|Ph8}fnhvs*) zu2%i1tMLVf&dBf8`3uXw6IB-UxhQaV;^WO>pNIAe1kL3I5XCHCPos-H?6q!74HTyI zu4FyUyqWWZWJYdLLw2j(8f*ijE`Z@vr_63O)%m0-38RCd=RDC4L2(4dE(+!PFc}Gz zoJt;u$VGA{bu-N*b?hXKgZ0S+{BRlaj2=uzTh5x0YppBR&6I=(lH^yEWAWqri=*)x zbK4LLffWz|dm5e$c~vpUy7?{O`zqES4I=Fw#typ{;z%uC7g0?n17W@wzMt@o`(5lc zyk}ePuVeTD7RE9`eiE{PU@x`Dxu!%DViBfV)2B1%PEQ|P;+&0NO)zF5mJsq!=KS(o z4Al9f$CI(y+rd+0=O;Jo-Zx-T@}iD(|A>}h9G}d$ci+6?;kP<<3@^}A5 zgY{OW$*x7j6PnRDB|Ah2RCz@CS$*ddU6UWh=Db@GHZNAQ;VQ*KU02aAp|$Fe*|R}( z<-b#G`he`4!g{)uKpdeRpU|)rN^{l?F``j=Jx zyeyGzO5&nk#Bfi+R3YvRqHSm(^iP}X1yyH{#~G=uY^8+#$RpfOGyV3ZywNH4cz&7n z!bf(|ksDB%mo;|2IAOp+yow>4gfFIok0tSRd`-&N6>Da`P`oXen-+S2F^6l_BRxAC z%ul-b4#R_rOnn{Wtw$uv;+G&@DI&G+iEj6PTxtnpw~b_iXI# zl3w@OtNK!VVSrXN|Kpa;$%;#0-iHUgAMh6T6){a-*%N4k47*{i6vdVMm zLJ|DdL}Zp^DNDH4wS{&-!x1|^mzA6`WW=6cE7wkf5=V(KpPcqU#uN3!Y1|23p$V$x6 zK*uCiP{N-Oe2=pOkIEtd1EbD`FLK-Wn02*IKsL}Q#WImkCPt6aGBW&@R zg|B6lM{BSU_D)zGckmmHeT(BM#^x}cLFJ&YiU(Wv-#l+*(~j6-16I>K8Phfn9fY7!1A>#<1rmh^~z7s8oU>GNCGQqC;c%M zq?4}1GUW+=yL17OKcrU=%Gd!t_4r}NvuWd~jO}hEEJyy~*;=33XpIJSgeizWGT`Z} zgT>(u+v)nH$pbW^PH%lp;&j29|55aj#zXv*AJO_62Sm@B;r<}$O;hvI-;qc$9RklL z$R#fvZq}>{oCjj|J^fB`&J+K?U*?Ui7$#G_`(!?~Y$A4hOyH1#pSw7bPUb9`uEkO{ zhN3H=SkZlpeoafsV6}OSr`9TOQF%?S*_nuA1+OI#)`Ty`IT*b~$&V1ycf|(_5NBxv zKA(sl)Ah&g81z-U1%AR7@(&1bunb{z4Bwm9LLTms5;0%T+n%NE*Et*EIQQVSl9n%5 zYY?rKB@mh5qdyeq_5*<`2FeEl_8^zWut#$yCberi^o}*!BeNeS_!^BppxTjHmc;b> z6t$Q2DH<=|scCfgia=@4A|y^hm611*QG!n|1CbAVU||dM2V8Hj5On-mgSz+EZyry_ zANQFRxd^CEQ17m8T3moXd?Wj$UXToBy)u+3VFnsqZO=T$tnY%}Lzi9l?Va?}O>gRF}!4CeKw?6B;ik5F9obLFk5C1rqiP z?uR3Gv%5z?=3Z8r8_V59*6uJy$>9+M&4SCt2G34K;`kP3tlM~c4p>_g6oN&WxGN1~ z2G+`bK?9HKRl$uIDC-_VH+&ZUF}pju^)53hvjo8xS%7(xyY={a*GotE6Nxl=ed66}7_Qy8!8zZWlI@TlQcSN5lGygeoW+jvBf!3MWpM z8j~~&qMZ{y`n94Jh_)QISP?jU1gTsxQpjKas*M^P!+OEV=M8w9ujH5FiQoc6?RXS8 zK`O**Tw+1rtYI_7jFBwwpLs9|w|XWb32Z8bcb{jA&kG{disRv^jH9gY`V&%6APyzC z&50c%K7}6r;-6nS#|3l(22fT!H|Au-Y;_#;WccYHm)4WQ9|L`BXGbTB36 z1XtpTC49+c$f@g zi=?)z5&2Z#PsDu5qUwP|BJ)|aCMjNwD%o{J=z4B|a?1jThKkF{avYjxDUwdF{yaf( z{yQi7)FmeTc!i7)Uh&7NNWtOv%gPI!)TB3WzD=RBRfYOLADQ&T&e8QnAsze?jD&t# zT<1J1^2E|zc)!c>Jrf9u0aMleHzw@n&ueHe@%WYrbC$!1@5$z&zQ6`lKC|Hwbi2-r z3!X0THrNX;t-}-dJ?Pg3!^s(3{2PX)i$1)f$N5im%&2Cgt?Qy|&_So+BJOGZT1=1o z{BA*koJJZL?LXu2#pk0U(yQ(1y;}O7Zu_<8<2hp|h)wGXl(6giU|wAd6T&D0tEj(p zA_5P-P?y~Nx`?=PoG#8w4BRNn10K=#Zl!|^EP^PJH#5&658sGDV5IpDqJnX^)yLy` z(u%cD?5r*sNqENFeQb(y?bR~772+&$(Q94$%R|4?)pp-2mg`zb`PJY|T23MEz)AR2 zQ=IXijz8YY2UE8>;}&#n3J#&7g+^+-LE(ct)y%iX5uBT?pfvUe$GCV>`2fw0a6hn0 zoly07RF;#uvD_A4HIr*0y{k@oUSE9FS}=fAc`XND-!6)+qDLb*W#6gVte_0vf`wsr zMEW_Fc-%Ou**c$Sk2%0e#l)L13X_5V;%ka6*D&_geq(n#vre2?bpmU7H6O6SCQl_9 z(ubuD6QZX&o>`@qC+uEl6mE7@%ES2A`Z>H(r(zpK-QBe7+@>qWOX51tSv<#x+`IC+ z{^1LSdTJ;pkb1(C&vP6+f%UQ{aXd<^%H@Ah5mDSZCWH`Lf$2Xp=*;qOjF57?>1HWi zUip++JwGkq`UyL`T~7##Qi+vX1J-w|9r(RfaO)kOg4%oRT$|JFyoXZ{#aSwTttaPH zcxU5P+&I)tjmAFuZmy>sHdU_>Ivbo{wtQP>%nBxdZ^Q6i+=zc_-X6p9Sy=(E1Le4_ zFOtA7Sy@#iW5@tOu>^_8>jaEzn+<<{?~{N$VSM{0#Nc*5Uu8Z}^-xk#!C%RDKCa-8 zIBu(*yrFcdnP1*f6)0qky~AXvfEELeOcu z$7vIl64T~2hA>gU0eAV@&8@f1dd(}+koT^_03B%lUubZg6qFzhibC4$6!Z8iW~YIQ zi(Wf@*C{iil!>z+C~007Q_$JMTC?4o5q3w```w?!Y#ovSV{8f(SB!SdlVXB3;4zZ_ z)Fcn3Q=KQdm5={$S&v#bjgaDpr6Fp@7zJ3OG_=E;0-dF8cfQT4?=N3;*+mDd49sJB z#x9UIinN_K@ICi=XR=}C=Dt+${GyavSmRdG-yRwOf=mb->nGWg`zTax#D2&%BN8mM zY6S!M>A%4D5!g1^5i;-|1P&;x=8B}0#UzZHt?se%!*5uR+tNbo${2^M z%BFy#6?B%pfYQD6#a~7|moJ@(L^qJoQMrj=X=<X~ ze@jBWp6P=`1r;h-MaLbjNi-FeybO%bH@W`RWu|M4v(_`QkkS)c>Tx6&ime!kX!HoF z6mAO0%s&^Ae`FQkNgP)|IK9XI3f9k985pdhu^pRlq?WR$ZXU6v5?SXL0xj)44lgJI zt1PT|%*K7Dik|y|+EZcQ@j&WO6zO@D8GmE|CweoFqVQ?}Mmzi70LGxyZ z>C)u~`_CfYNyig5*0hXxKgS@0$y$hBzUjK${*0DyV02EZV_@m8--=aAyO&GL0hmx= z5{i1wPiY_a6_GDpOcCPUd{wp~Xx)m`YhbUD;C_`;{x#2e1}WmX{re$#9EvTmo!AHH zzdlU65Z8$3pk|2?eiL>{ly^CY-Qx&aFI~t08{0uLRftAM6`6;_bTEnX?0h!T>|T1W zYlBnDZ;Pj^NPT=DJF4Yf~Sv9d`_^l$_Jj`HqR97ovK%Q@(pI} z#A7og2M6G2OaViMTM0{ES(e)~9Bv%5Z8D*T2&*ne1dh|bwo!(8;kqky#Tz7^ynAOT zU>wpbmTOR)?1X7lh}558NKGl^$~%T3>dBNB?0vEG!Jb1{b7B?S?7Lvvz5VS9(xl4i zrmF)E?l)=3q-+B8A=JL|FQXG`k+>=I&W8v))2v;qlZ2Um%3n0!!;dL=X=^zFe33nm z77TYG`DawPwMu_eeaqiBm=9jyMZYVik6<833vDZ>yw&EWp zq?Xe;g%6q}5dUIMM*G-(G08h<1+b^8?y*Px!UY7;h|AFm;ko&uOHp@T`V)06ghVse zjn#zKnKN636_vk#=&T;&jgZvablT{KRUJ|Xr-O7t7rwuOiSp@vcnT;ih~Qn$C!QEO z;c4O}EWzm9fSCG%_I9%_ciL+fd10^F!wY*= z`U!l`>@env-ohfYZc0Txi|!Fht<$Ix4AntpgKc+lZtmUkP+Z!JBh zpCx&Bhx)!gRFq{wX|p*V5NS2D7kO;uxnft>gFfy`k*W~$T_3^ zx%Ovy;6r8h4G(r0&Ox+xo23u9*pMo&ej05rs*J`x?n?m*91CJ(!LbCxV68h2V3Q;0 zX2i6!L+Rbg3jx$JXC*f+h2t{9=?u2Ka^aWJa^qm7kLJ>^{(8`72Nn?THrCqQA6~## z(T=2;9V_+JyPELn;@E_#gbvLsU1(Ysgu|{U;jM*dfWI7Y~P<@l}d;B z9fF&m-bvhUa0!%SLN+QP!E_%6}85rp{utN{v`tYWYz_k0!69D}&?z zF)(mSg1PCBr_ zSpvSsfbQwM@%7Y1o|)Dl2We{p;SYv={(5+S7*{_!_XkZU{n?0J_gi5~-5enT5+-?} zr^S3=IV*abclL}OGHmA5AyJ)~B+(u6vop&Z^ur}p#;6@P`jNN%H;)D~7?wv!t1OE# z5Z3;BR7}kcsZwl?n?OcG2*?@{ta?58++H*BN~~HwHy3KjW@L|Piwik2hJu@gKCjua z6Co9*ZcI;O#bo8GkwZA~!l`CXA!&LvJxao8V8y<>I*M7kr8cHibP^^!YKdp<8v=)( zXV+PPVfl_m_11wnmIFnbupTdK=jBhH4|*iIJJlAUwR1AZH=fYCR>ywzd2wL~(FFN= z3r{DSOKYT~-!NYGMVVBw)1!JBexedK;03}hF_u8`C31|V^s%0KmWy}O)zz7>V2a`Z`^6Rh+j#AtD*Mss<*O?N`^MY#%8UlkogI_ z67$MVce-Y&h3KpR&a$Hj$8H|~h8z~fD%OJV0Gi&)Z70E|H7~h6o&I=F)H*xy%z~&4 zhdTJ%Dt!-ZS0Z!;e8b;_53ihxF6WaKj&JN}k(Nl{?^3>mYHW~u;VgQVrCLd{s3N5r z_$x^x&5gezCKY^T&J!(F68-N?j9n0X5G&}gr6xa!{StAL`DTzCqyvQ(4VtQ}Kv7kc z2VD^q57d3pi(m2PMH0%!g>UrjmM8pCB^?uTG`_(bl5czHPB929HF_d2H(D#_+(kVZ z|F`1elh+vPgf4Uyu8yQjf9_zTniTRUDZ~L-xfjnk0qG>Jx-0TiV?aIXze2uz0k)U@_>VRUR{&z-GD`pS~|VUI_MdR0&gy<)jz`;GQ962WDDaFD4hvP@B|c zAp;gV{^AWoU5LX@cK*IwkhO)i|NLrwPyDW?t+$mea_A@H*v1JSq5;m-1^TlK6TgEr z*=P5jY$x4Yq)4GNXJDwI>MhA*D+G;CzBof~PmN+d*Q%Mm= zWx0}heC!8=hJ~ZZG!xbE@1{0#v)7?jCz&Q;>#Mh{A1Z{fM^_BNb~u)Uu*rsUGf6&!T&b#(USzff!k4s8VqO#1iA$VDSbYo@$`eAhuH;wrW z)4LZIZ#}kB*E=q43l~ljyRyA9d$uzt4n+h+UY-$6rfq>~bUhvgH6tc0!ul6n!}>-O zrW+my1zv9_r=G*vCj)&GnaB(hI`oD04KYlS`}2OD=~n!pc+)OyOI!jC#Jf}%D#}p2%C5v75#AOEQN4%aBslQlbmy2H=a#4 z?iYe^S>otVeP8PuC*%>eJb3-aaQ6+^tZ1MpKichqubHjW_llA{X9r`GERBdBYG?Qh zi0^|Ug&R}>W(6*w8ct8jN#CGTVt&-8B?0Q?k(ZgBWSyMBGT?O5z_uTLT3Bzd_|QK2$gH7hoHOIZ2NK z1j;E>iHOSGm7f*%=aJ=RWMxJ#*ZJUT%nLjM)xsKnbny;e!RYbhS7g|oH++VhPyDt= z#+yZy!Mmwq^W7(!8+SCwQYbGnw$o}A3Ru;Tabj)Y^7#`3qoBKVFopfIKJewRFF6XQ zDpCOLEh9zYHaH6i6EbV6uD>G?#lCla1v(GY6$%BoG}nG9VyK0W^N}3OSCT$H^Yz-9}zPmIIiIf|8y$l;ct*U(jXDUKl9#H_dn=S zFZS!1{!ZxaVE-tX9FY-iR2Dp`H$af=FX9B$3BxB4buA#@DCm3JHz_W7!(q1hU8nvp z8Vl7ryM?1;?ilgx9fSAQJT(!2j}N{UY*LXd@k6v-HKQ-fwa&nO@eM5+#=R{A?4Jx6 zcOd}1fny9#6H5cnB)4lyi|)5>hL&BmPLs#I#ovWC&EX&Q4}$35JcEGzr3J6X8jbVbd&PiQg0W?zUgKj(Kw zF+H_coi>%!$NccKoP{rVOT!u^11?Fc`jgmKr4f^&r%2GkIHOZB+9j%#_1ba0+=4En z1js{1>lSpzh^!VzvX8pVvdc(w1hMlh_Np+t!Ucoy1RnQv_SxGb5utFgPOw0hJLi>y zZriD{3gD`K)!=UZKfc{IKwKenu6=_L$&xjBE}>(3Kx@l1)aGgrE@ru5jSK z8F_@$!NuFSbB2q6nTbQAq?R%l42?f01&wl);)A^aNJJz z0?hf&km@3$z?A!_ON8pGo#Zpy(_v3G3tzXLPI1VB{=OI~hK=Gx9a_rnIZPFG4jjvo z%Gq`6Vb!HDzlM)TNZgkqWo~xp+-;4uoP<^ih*Ugjl5&H%nDSwnRM8LJDe%CE?t@V{ z&TEm0N`+`LVX!U24>)6f_;Zww1invpsd}SGRbi2NwT`v1u@#)~Ctck4=40Qju{6=v?Y65#jB(7X*+9(IQOFLk*WyX%4Qd3AF(`c0)sr{#nj~~L? zIh}$Au;=-^7Ku(6i4PX#jBjk@(frpaEXmyz2xjqu6juar(Lgn9yueq2nBP)Jf;jbD zzTV3D-j;bW8#-UAI5M9Q&NpivwhX~b;RLP5QJsh$HSWT$nWrnk5I_c}xksTy%g{cB z=2$iY4$f`st(B?3$i>IFBfe<1F^3?v-;cSf2v1iD*hAp6$%(nY<9&$H7h0(yLz%L8 zv@vE%J_#tWKkmS$rx^vxc`xS6dHZ$1!$7QXBjl(1%`tZidRs(M*|qe6^@w4DuXjxU zlpc0|mlZC`?kj@R-PD&t9x=paqVs_lb-{I(L4Zgqryi?uF0(Xx(M2#gXh|Nj0d#*% z#d(L0Y-$b{>Iwu#US?!n5C zo;96DkGwGq$%;>J6n}Zw7opa_;x$a2-_XOao zr>bMtAVQ?kaEX3c3=&g2LQ6qKYz^+1_N5-|E4<(IJh}jB3qpu(T(ezw*G(!QsIXf{ zLZ~%kB|3u)>Pk2j7LgfYj2u1?wVHxbXo>JU$J;xV^_M)NaYi&YotPPTx@qVsdz%^0QH>0G^rP+GI3oU9%Uz4cD3% z9XwI{l9S8cr-qJO;u|-tqWbZmG1@S~vkj@+OwcU2db2ZXCz2-_AB$_IUnKctZZ8KE ztNxww-HQ6319Y2g|2DK`DbW+ciYPM=T8N?a;1(+UBrG@fV8gYmL!4Du!YOH zNIPfTJL-B0j1t#NbTI94Ac#U|>!`^?PkG+DBTnzjosWDZMAklng3RCa8MHwh@OdGV zfifn+r8hYJ0Z*eV4ZR;z5kN0Ox}wKlRF+{B(CtB|Lkc*a zYU^6KT;dJe^S+5Y&3r37j7u*j;JxZ_R@_b!gQ;xI9mjD?OOrAm zNJXQ~hGos%TL}bx=h7rX1V-WwKose=#s!hUJqHjX*6q1=Rt{ zk`wAoVWyNdpX*Iimx%`2T*%_WV9U}(+rQ!VW`GunyQ)uX94|`viT%=L;TXamy=qhK zadWbma>a%;@1gvs@Bq#Il!@s1van$F01e;r!&Vwr%EDR8Yv(Wq?SMP}23lsmIf63u zl%Cd4Jm&4r%R0aku3La<_?_~Iv{Jds7iN9nYtp9sLEmNJ>a(Bt4+Sl+jeGSCE7HeY z+SCH-)U87Q2K%h$N+b>`*pCxoI~2Tl05=>=vT!M-Z;1MB3H{=$@L0vLE9sB6z{Hk* z)*G-d(R`a@0?{QOsrKU$GdiJvYBqQTr+W7l368om?dq(Svf|N4)7rT`{n^C@(cXtZ z)xty55470YUmpEM4o~ME3Zx(+lmNHjV=(Gr>W)|hw}xU zZ`#p!+2b7(0E#SlK{Za4W;Wwm9ry&BO3JM#kx1KdI)o3mKoksX9R0M)|MFFky-Tv; zMjLFBs~3;&AYP<*pO(Q$toAiJh{?+iLmB*>_SOCyLO%_cG~{nons*-Y`n%og8-72X zurA}A;s_v;`5WhN`?E*5fpC)v)I3Oi7P@N=yNeZUK;E*YZLMb4@N$zdzzG#{Uy3VK z`_AGgN1M^cjDNk)4CB`?%{C4r#x9aKGv}!(Y84}3vk;?>!OR}uehAUYSw~tI5EsK7 zRoP(oO2SE@(fhubE67BKQGB!7j_&@@ww_(ZJ>Ek*ap8YeaC3imv0c(p*>yaIdBnca-K%_yqR3x)Qc8IqPyN|3)oW+bQQ9Y8YKe1 zjEYccXwzNsn|u{T<@l8<5sorby1!bj%M@$Jm2GgTCi0-HGjTYwT72X5h7&UMOZrR1 zsARRyUJn6n)Hx|~%glV?QEEXqF_lFvO4Gwc?bTf%V4!5HS#Wa=v#$}>WaPg*^D?Zk z5Z7!9TRY$)E49E)(YdnIswf8MSM{?d%wf$Ni+ogS76|F-9HeuaaGDjn@7s*B@8rQN z8GYR0G0q&|Wln$8Y>1MA3V&(dd!(LeKD9#_rzAYiX2`@D=}JOfc?{)2$Sk}(FYHHU zP33!MbK&|PS>LG$UCy4IdCNY|Mqt>DQI?PacsW;xT&Ntg*GF zgy0#`ZRCS^*YQAleqd1ZK*lcXD`A3wWXKZeVBQ@W8>9R}|UlEn^ILj4%N(9=!l{#grz+W3~ zHltTe%B?j9Oia8&O}=$vOTM9f9bl3l=I9@|M%M&bzS@`^9e2l!2rUpT)u6+w&}TuU zJBwocr%G1boAwu^Z z!4Hr6PZI%6onC@>+zG5tcVnsUJnhqtON}O}K>$pxdB$P0VEhro#B8Q(6%f}P*nli9 z?Zfo`N(uXNZzzEv%EM9mlY(dPbqfh3uyqt#x0q6=R!Z>p2xN3 zqWwb2+PHm90HUCc>y~0F{fezAY65jqJSvIj9cC)iSe+(}AC}Ui`6#5b9MMv5)rnc$ zgDrneRVK6)+Mvg5rj)yqyqN62+CusG=zL@K`f*pZ%Pdya;OFsd!kwbY8T_Q;Dv@Pg z_TJq_JT6(9sxfbMOwltRFT}MFwH%#A6DVm>O_0BAHAl6RTz`L9b)o*@Vd)N%5HkP! zZ2WInOrlgdU>0!Rvy=Bi=foDk81hfOdMu2>ae)=0 zisf}{lf}@1Fbc=zj^G1{YS;XRa%J|+7}{NFn(cLd7Onq9rt>(*4BJ5+uGy|4iN}K# zj+~tOD!`v3dhJywsm27y0yQtv?HFf-|LI8H+yK^Q-MHi$M^%ho7xxhwV&#!euJuXA zCDOCdY~~p+Aj^E}k;QyRsbv`=ab)?ML$tGNT#ut;38NSKQO3Ppe5AF*K~^w@Gn@=^ ztk)+2fLHeo_&7Ol5|}tV*#e3qG|KAu$r{GVY!E-YH^BJd*<8i0Q@JLLVyyBkOiM>4 z`~k)q7iB%eiE^EBBp!oeB)U*7scvl#J)Kxe_a z-qrQTrLiBWoO*q=473(;?_{63&uBN27(ntbVb z96(%)m)xo9*GbnXKbh#s&}+=dEev*gkrzSzP0Af|O&)NGiy!93VO0w``g_FW384ku z-A9mB?q$sT=nm-~RpXL?u(=EM?2)YLXPT|6$f0dcPAFSsl6jDtupl~Va?QneLdI)l z1%CNgF`}tE4E9hHVwkgTqA<3swW=h{5_5Z1yt#Qh@s;w~)UsKinYcp1&&je}zSQZO z3B23K=trG@EDPQ?D33^DuWr`AH&VT*?CSwAOv(kguV8pF%Zk9!lcxgtY`#`8;pfab zv$w8PTorM2MpF|c(@A3)#Vc30P|F=@c7d{6{;Tpwja#|QO$j>o*pYKlC>NB$kbXVx zu60!Q@($a$;x$pI)}N;`QLVl9Gg&8{-{<@U`@|EVs*v&iGo{_zFr?A`W+2K4sv)L5 zC{H;vaN=uGD!%6=RbWJp$I`*Rvu8+&5(S|w`~KyPG0&psxheh6+cP^)D`fDcORX2) zykXa0(pK8|CNfw}*pUngcSTtDPx5blRq@R$DTlk01tY}yR>dyDGbbiB1%E4y~j4xz;* zS?}C}09}Mq`3Ki))dEobLI2imi^R+LJ`q9!1Qf9?m)dtwxy04S78X2ey z=0sJTe?L<;u}%0^G1d|aj%9qN*<_Zsg5I0IdkfXp-?xnUa`tf;z&)cnu?x*8hot9STNH3FQ_DUBdkhjDBZIM6uS~V<&GLn z+3yb@36KiW1=%`=RcqaCois=|!yV}WEl53^=F$^^f@SOSJJPDs&IWa-hsFi>L?&o@ zwq7PkbG5}hBk|l)E~Ilt8FEG7Qd7hIO95eb{@)0p*tR+=TB7T{Yds(_+weVkhGCDb zZNRwFXlES0r);-Ziy+~a{qoSsr%+uVd$kGVJ@3`|)+YLBRgRu(;L6k<+z>~( zazvL2&d1QPj1GY9tLGPGEB#> z2^F;fI$0h>bpQhTx~N4+)Y-$UszcSfpjHd8Cg1p-@#0|Wt?3^7v#WJvmjl4dLva1K z{Kx*sS@wN@OF=c9K%QPsK9ZgQF(W5!=a^P-)5>2$94FthHcx! zMy4=!`1ccK{O}WX=gRWrkMvFranueyCsrI;AAm)wp`ooEu#MQNBlEC=G=y0NTP4h< zlEFd(U{5ZxWM#x7%Eg1XdBN?qO%6f&B(UqCyFic|3SJ$K^p7GUB?KdG8wDv?V zes-y_-SQ=tHT0p=QXPJsOOEK~?us(jxP_B-No1>@s_i##0T7VSeZ?|8WdthQTh=XE zk#5va0|RqX?X@-YOh#+-xIJ-jhLEb*o#e0nr2tqhTP9re*aa$9v~9a(i$^9Wk{4fA zyUMglhbu25LnY@?MoRM%Va-Sw^>M>N6k^U=AUUm6u!ZANeu8dX0UJG|cBijD%HUqb#`i`S0ZrQYBgK~B+)sdHXZBgoca6l)JTC=FkT6cE#9$Wo8SE0V&p-m}GKs+bn4`4B;}kh5Gsirr^} zu?(;+$UW35%LiM);#?)p)}oJ-Ss+1fU4v|~wok>^u}G>?&MRKyN!p4d}M0tnVqecDq zjaV@Fr>pY+Ev`L$Slv9uL~wmS@=Imd)az!w2-nPj?#k3Y6Ro2N!QN)cno)GV)>M69 zUG5ScNWA@a4BT+qS_{iO!GCT+Yr~+JEu? zUi#%v!9E{R(v8DYS61DYmNaiIwb~t{-)%qANsQO_L%-S)* zkl7Vrb`DBfPlFK_nL48D@wc-4)X7`m&10YpjYC}^j{veL;ET^LjKWV}`)8}_rAyz; zBZvcD;4T*4taEjEij?Lj(djM(RU|H|20i;;j{|=6Qq^djb67yOWofMZ`>=MrRQ>0@ z?a+3<;gSV{DfZWEUAj0LbS%9f`|GgebCH~jbzoQ73kwO98FP?32=yjM4==atCvqi|}k5B*IPvb81qnDp+!T*=e9Y8abUtc$@ zS@9=*QT};_Jvj$E_0J*j>FIS@vwxikxE?a_$G^_p2>HMDGH>2f!VbKB@{!&+uv2o4 zmpeFGv!Z_Pg<_!e;`I?1O84G>O%zSCJY*Gx;=_RAK94)J)MKFWHJ3n^K?3!|hS!xL z6}r~)sWpVh7Y^N3z*;ZZD8X?f)1H`bN?MZDAz;}TnjBBwSO(8UKFpFyz-`zk@9dni z-v&GCC0UBAsSJKeyXO6FC^kDvPF%}3yHxH`pr?~ly?Y5vIPp565Zv8Ki>VqT{q=d; zDj(v55i`I#es49WjpvVVJFNfuZ2fTkc|fE?IdIQ{=8*q56y9vJY9+0RBT-8 z20g~kU}*NTKydYL1EcT2y@-*2so(q?Hsve~iWjlewmQlR#aUk`QpwFBc7%>^&n+C$ z;L}17XQR*?XNwhhQ7Fp37*DtWHEE!edG~6ayH6GD&k4V4bt-`Uc!0(%C}r`}5To$m0rQm)OU0_WsaT|(*4UMO;wi6Cm(T=P+L{3rJ zP_HphOyQ8IeA**uSmwNF*uY{f&UHlmUTJ%EM12R{uBTEsA$?BgSTHOUTt(oSkBh3i zzsjKbHl4#ERFbalw7S>rlG8xNutpck_S=JC#E!SV`E>M$NlbPyBJe(8z6OaB#1n2q z$`ZzkSE|}v$WNPXI!|6Y$C5}hAklG3kwfnBJ!#T~qt3P?i;x%}hLxsYjU`Rg>Uo%y z!uzwq<)QS%9TBq3at6yB=4EUdC_OWKlLX{?Q4PKQqAA}psAYQJ_v;-bo~qOh)h=ga zgZ=Oz2;upxtYvMdL>K+ zdFpqUDSb$(-6;^_D}EFV7nvkGYvI}BFwrF9F-hA9(<%xZtuXMb7JNDV?GjNrdQTy> zhc=XwLbWMf=cX+!8j-0E?KwXpC{U_4g+k?X!h-x$yjD>hP}W>qreTR&Y~2Gf1kx1l z9Uf#qrrt08BD zOAhaLW;?~~d?4rXOU+=PHDVl_7a1xPKU#cAADIlvKLbj ztCv6y8#>L2=IhTWH0Ys)>$=5coLJGgvf|a|`LVMw1(WcjM%Bw!@`mB=_?pmr!}ax2CR!P{ zP$-UK&lGv|>Oy+}WTNm|(~BV`xw)7a^+bxGlx*z1t#ibWK6|oeX#>s@LyPsmE?J;m zk<>eQ6Xec*AF1p%(Ge3};|| zpbxoGF;**t0bOGBsKM-#xs3lW!=ss#pA>|teGDm|6T;)D?X%vDZ9Fr5XR);Y&JtXo zS%{^~ir4D1Dsb=)a=tS<h2d_o5+pGvTtQ^4b}?q*zwyj*mrCRKXQD9e8dOU?KhY zKXuY#J1H)QFuAVUEzC+ktI5@WyV5qR|GrIU;o_um_T~e!j(+FS^Foni{R5&jT#Zqq ztyyhHhgPJC)bzy1KgN;Nb_W!l7e(;3$U&DD($~GatbtXEDfee~5JYi>Xn`YdbBDYem@gOx_d1xpNmUj1j!1wb9}!jTNW|A&8?AsgM0JNOc*j(_bdc z?l`c7I@qi-xMmUen-xOFMGi+6U84MM?%(^>(?0$rzgk+r*RRWIrx@bDuf*LK2?((F zyy$sRgH&$`_Hph6Ci-)(p_E<~7w&o0*Mn3Ps9naPjAr2EFIV~eeO|wk~hD!kt}-EHZnk`aNe_dPK^Z7fpIy=~G-9WMt1jEF??f zYhQ}BRx}<^A+OBc0CEy4r6ByU)y$KpHyb02%dHB`Q&uB>hsZ?2INgnD59yna z$2;uwS<$p&T>}FGmIgA}@I_NHX~{9#=tjBjJ*?++VN4?qskRE?#TzqaRlX$=)4D0n zOwNp64gD85q<#UE2rCx6(f%VE@1as}@!WOz17Lh1`;Al)Q#dS!HnDi>*=YGkLz#Z` zil25ywo|lloY&(d%Y2m8Y4q3h#^*uIQz&kSV$b_h@*#V2tMcG#mPfu~6qm!q+dmYi zr0Bi13bi`~YyPBjAX_V9{E%}FnXfCQEe`_a%+T!L4Oiy; z2V^fF6Y!6{CI-GmimcE7ELAa-CE%5T*~j9Yok?mAl$+gpzPfO33s zBE>e-uM*w5xh7}U3YGqrKec(8y`A2c0SeT6wMQ{Z$SM>RsOW*?YwEp}y`12S4Tu@7 zxV$>Lo8V$KZ}+n54R?#Q8a6v`EB_7DEgW*oJ4s$Kz8{#C(nx}Pe6t&3Oz3E(EVdm_Nk96I^A^yOqPyNU?DzNCbY+-@iv8PW6 zWqP{GaD}b$r3k^a#WUT>?orVnRM}4Rjd-KpNN(qmajDg*U{j~oBPN1&hyPr(<0`h* znpNQ%ktjnt)rJ6Z*!Z9ZkPRJ+j1IEMtG_JI8}}+N5vfJ9EU*`qE}#Bj_bD5G3+BC4 z@k-4HrFDqBpf11?!C>s=)0B5B6&^|_S=Ig(vExpcs&&((<1}RdNf#zAF;O_6_z0RZ zgTy-^JBPHDLNi~}og?Sh#)t7wnpQCSO=K-I+z@N49ek3iJoMv9l3>mGS&rLy0%bQ3 z&iu~p+cj&hAqj`0mvTUCLUr33i}vFS%A_w(i($ojx6f0-)XE1tk9I$t)pg2BRy>V? z4_lZ7+~1mVx-0r1&|?1H3yL#!elK4yAM+?3-dUOIrz!wwqrb6ZTNd>eq# z@fCwIkXYev_d0ON)m0A4o)~KGL631Jv9p_ZCJm0>QUPfIxedXKA7Ol4mUZozpi4X3 z-c9+Oql+n@7=@V<8c%D$1BU3Pp7U;xKjEnvzi8u+J~u}b9YZX#V3D)APWj77 z<{w@OLBNJ$pOC%Lo970Af1TW9kUW^G7tUw^z(n@;GJ$OB_=R>H$;3Y8v@}$sKH11) z_j&YAtqb$()YRwZ5^U{Uo76Ce7ybFD%okHa#d#{;Q`MGv$8?BUYPu8-c83|(F9(tD zK6bYisRUS%9N#w4pI@VI!7e|!5WesD3z}|wK${4H<-_F!6xd#CT(rPlGjqM+t9IQ{ z-N*j&q|%%xxVnBjJq)4YgK&mJfp~fkPKZupMw3%3^!%d^X z$cpiPTode)Uff>pVDdoxmphY?FiOh%ua;usE8?zzzrWF%eBEy>tfimA;b023^`FRn z5lT7kk!L9c)(_gg$r6sqkVEDhrBD7&=;FuVq$m7EWx`P2LFz`zR=&L zC7%A*-2(myLj3Cl$z959{(qghPbs&0;a_KH+G+mlGN11J?`8g+qTkI8h190+?O!Mz z;N$N|qW?j0@gRS4GGUk3&)zt>`X}<5BzjNkYXox$?PH@6dyfkLRCb{2Hw*qM>LIYDU&_#?tyULA!=w1eEks6xW zRzsHPH%>|B8=2)!G{^!v_C=y{05d-P{2i`p3vYm{-O{CVNQ&aah>wV<%*EQFi!2JS zo^pAgNe#P{%NXjaX8DQQ-hFrlplXJ6 z<9I*<60-Cz84V!IPv@+DvTZZ?8gMF~#TyiqmvUe{lP{biTtG-%&NqXZs&SSB3|5Lc zV`Xb(N!1laS>2rNGI5Gn7WG-lgRtaLZw1yH6Rj>smGnls^b#f5@|7DEvzg7RDrXz1 z+pE~{%FJhG*abdT^xVl04-o=*|`3XP-D;G7@*diXG0S9};i03rhT8vVIjs+4Mm~ z%eV25{=w%EuU>J67Y``Pa*UMY$~-9A*;NQ{#E-sfOeP5r8D`x84W+#pn+y@^{}_Y_ zT#W3ET>p%b)?IVPMJ`$+CX{SQ~FhN!g!^LIV@Cr_8caeJ7gk;xqem2{^GZP?n-J3BZa}I#4 zCouQvYa8e>!Na=K*`LAUy`}rk@TU8tYK6)Uj+J~)Xsf63A6PJ0 zTX*r7b4~#7Q(L$%NfDZFM36X*Qlf&UGX)Qbw)9z8I$v*6KK-Ewfn6~@BjyP&GcqTox(UufMF5=zNusPCyH!xHQr|kfJ?|l+L;6Kh zHEy^CIXJB2Bf&&}0!0+#S21{OQXPJ2UPeq%m64uE4k>823d>D*RZI^yf*Kx6?EY+SNt!OSUl*&Zr4o~9~y zq9sZw8mxBcdWF_tAjF-026Nji>qCmTuUKl^bh6@$#mBARw<(P-(n3~!#1x5V3p_;_ zsumQJD9Z$kJZH1w_%2G6(R%I1S{P`(pj1;%EQ=FqDI4B+Q;owU#3iuCiG949$E>r8;#A|@IgqDY6V7?ox%Kvo zp^{Tmo+Rnqr=@q=qTDYE14O3Yu06{D#Y;^+opFE)jLcf+(RTrDfM#Zf98i}VBel0( zpSf!_Mz_dBcCck60OR>WJ$MahQu#LKD4*sgCG26}ySO+$%#r6zHpBGFUqkMi4?(bI zn0)9%$X$TxzF~NydA6tG708l$%t zsaeB3u#RH8wS|(I4zxD6S$xgy=3bHnN~CAxUlO}_=a8Dp4A7=rMR#{1nYD=v%A&?- zT~UjTEiJoHzhTz&>We8jZYf*ty#>k=j$TD@!UC^PmdHCY{Muo8pzySjov0|*Qb51u*)L49$xtjctJ-r30m z-NYpBxIV!vs?Ie!A57QfvJFEp}jy-EE(*KYnpA zXpi&k%iakWN8Ro}DsJEY&nOw=v*DH5qYWYe_oQgWX2@jUGBj#>6Dn7}+&=WFu<&wk z;+3Y%BiT7ebZ5*NaJ}cgn(W+$NOY^nkB~LUW@D7F4cmobNdQoPV*28^iUO%|2BygO zQrFkrZ*mD6$y@^)A;Dw3khZka()4yVi*-k^H2;>a!Yh5eC%& z4EO!@J4HYq$Ftz~&o#3_8OO6uXbXMdw)^$%_GsN0n+9V?pkVa+(*rf$=@VO}PHxEOb4a1J^Qm4zl% z3MC?)&bd;w_vj}aqt8q|hkj*@K;alT!$DeX&*jb2UJ9D{+J1WX#VtTic3JLjQ3hr` zPiO}<$>)GD2CLAq%4H1GHjX~=e3fTq1y)!)ckDW4d-7a;fK;cRl?uG}J$jAIAxNFO2EzZVDoG>j@U%gAejRGmfep;W8*;=c8H^^G`t_ zU*;qpjCV>gQ2XW_(#dyOdn&@(9`0UOtCD)P4SqC z)pnj1ucTeo66x?Zn{h%vPoPB*5JK5yrfj%cbPa?}T;V;3vX)-q;0tX0Y=!4HD>kDH z+qDK8E=EuFYWtedxaz#}p1YU9PHC2wHP{_JGoQxR*#(R=RJ1zq?d$|lUw}ohjqS1c!D5u^s?Yng>;r#!xK{v;YV#cE zQQ$W6X`n^~vj$|H3uwD+0gq;>kTWBOCy4ER5IW#y{9xv9n!_~q%UXF54ojWEj0MCSi``vPrsUL*1^xd{+)SCQ~T=MA0`x3P;pU^U&uDzVYpwq)Y4=p}# z3YUv#6RuZVKh+46!o{V zP))?t<>YGLEgGDjV3*Kaj_dabuokO zz$$lM3VWsAIx7Mm#nrG12=t^!HK3At%_x^p^u{n4-# zq^pxPJkGi=^Jx@bEk0JRyeb?_d~Un4YKs1@Gb1hFQZr{CFH1T_)0n{&+cmW02;xl7 zc6xN%ZV;eQBRs;pY`LJ2Fve+W_qs`HVLXuL81Zi#cc^cVutPnmY4>d~AWpi2@Tx*3 zhYqqo{ZOSGu*(BxGPLaI$mj|fZ|W<=p`R=8@r_1VvsO^vCx~YdX1B|B30`XNpAE-@ zeTa|fDkLseyM7)Y<6}~|P&FPq55yuEv;!NpTGF&Su$jWELdYrw8OyM7eJz{bp4g(_ zY3ngvY<0wWN=jle9r;GZRoZ4^-dRZNr35K&loF7?;JpY`obY71U+ykTQ-$Y=ve^9;w69!7$TkCxdV@=(N2>Vp7$G`{*X-2x(<>|&q_*muI&nJ=iC)ic)u9>wx#~9C;rGurgww3 zlPhAsmn} zINJ=%nb4@OxTLy~`#ujH;*E!vOU8pG9KS>eEMy*I*H=}P9JVQoNf~`t8Svzuham_P zt+;8V2lWtR?ccLh6M~QnIb-ccw?NEoetT5&F54*!U*sn-zS!k@D7YROgD)5$;M6bx zK_SU5Y6&a!tE2nVF{+)F!Fx!f$2M%RcF98ikksu4+t^^l%C>D?UY?`YI z(R=I0Kd|LGiaQ4hZIHY=lMUZyOwVvM&4z1g`*^PkE_zD>|AJwR0+QurWpOc_@#H|# z#LmY%*)6Cp93ydVcRgkun-H-e$M*Ss;aZG@z{vB`Vn$S6kBudYDKVVXGYBwkZ3{O_ zWX(t+X{yml*HgGK-mf5b3G!xe=Bw$6sY~Cc=dOGU{!wWJcNeizs>(Fwf8XrABp)Jt zwFX?jr>l4hfktp=XDx2T&p9R<@3H;!leciJ&M<1vSyGp^cJ)Z z_LrIo>}A9KYl5VzZaxdL`M70FA#`|?0@fng{)3ujLux9wNj`3US#Kt=_`vu>kt806 zp)m_drIyefni>%rD#@+V@J0=jYIlgWn_Ku?eMSvdPNbEptS2#Pmj?c(l`ww2{TwJ&MOj<%!G8%##z&cpXHV((xTHC{xv z(M-a_G@BZqbdcX=w!2+6qLY#s+!eE_u(!~+9;i{}3|;b-n1y~3oh_vp=iES2dFi40 zCd;7X7L4;37A3B92Oh$0YPbxodrB-HloKp4lKSLzYXA6lbD}(_T^vwp5pk_X+-`kU8ewkWtMffWGS;tbs8FLMn^< zYeqyM$)=Vdn4Dz$h)v8Tft&0PWw<{X7f5tUu#0vvInqyoG?+loULLItSa?GKBGTFLg{V-%1kheSsWTJ|*Jo&jQmsfX4^Q>^lxI5G z3vCIeu0t6BG(E3GE1coCc5%g3m)syVuPA23&9b7MwVj<^PKsP?nk8HuqUBOzeVsG5 zEH;qj`TI&4uV;33a!sF;*NZG3H?FpV1*bfZI7tqtP>eXej zBqw6MMXFY|qP(-?X@7DqnFFGGnv8N<%6Z(zkVo>_@OWk@QpvUE+qC}`bXzXV-79~^ zV?Z2*%`21w-Eo*zGBanZP*D2@Axq1UvQ|t}v?zyH%MVp6=M}feHF}p}P90vS`cM`d zmoNzB*`>d_&ge09i>ZMQaAd(DR4}TMk&y?46zYp}Q}@cKz($alRmTInGzvs|yr&3Q zA<4qfdVCxAQG)GZ>JL%f$WVY@2*`an;!Y%ZD0SS4_Iyz;JnEJNSCeQ0+4G(`T$rH& zD|1tvm-lJ%jZ4b0e(n;|v|@4lw9mUjU-bl`FFFGckVrK~R%l>H1lTKF@lF}zO^};z znwvS%dz6KY>!nJQ++5(#`5-whud!-pUNauTfa7s1X!R2-8UVPUp$z{KG;#5s=+8`r zGv#HEY>|6v>P}pgVQCJY;Cbfef4fZTd!)Q3D&M z=!MP^_bw)LHoLd+n|Ic1W;|D>zQl9yESyaWRwu`?4Y{Twm@z=DWrfcxhVt_Zl9AQ` zs3)PkHaLQTNGn)`F+VSzQn4MeO&io(^$gC89R}eV6nt{4edc3ygZn|lpT?JUwGLym z4^j|o-#}mifn3hsuq(pC9?|X|V%Da2qZVT{K0kQNyE3|g&jCiX?r_?n_2q~CiA#i4 zKoLm7OmevJ!mGIOw{y6+io_C`E$-NaYz5S3(MN9?!7?}hUL=A)b2tI*>NOre(=TnY z!T*~i`rix}$<N({pD<@vtV{f=u_gbfH?^*}7{?CYf=n7RTB~YX2xaMi4z|T{jano&0O}Tc8cQdbzdXHLiI$suDChJ3|q$GYzLpBpGm||kAOprgj>GMlnl|%cL0iHeQ3wwyr0BXx;Ja<0I5;*v8AiDSrF@oo zKKj0Bk?I-r@8F$=ZI6MIfXb;4LN_ExV=-n}~zF znP-O+i_twmi&Y*LzfPn)iCA6sUuj)=U^ZyqrtT?bPW4DB)Sq>tJtueA_z_&K4j(KI zyfcOeY5^`~Ce!6fe4ILkbbA{x4&K{7&p>S4-MmCRYjRRb5M~RcmII#2MXteC7ecKZ zGy~Ix?HbdiB-JX65b{IyRw}w~@zgIj{pU~ZZx3szXlO+H?k^{gB>^1m*}u}rp%aua z2OWOfK58@WxmymJq94h9nA_gb}MNtPL?-Q9d| z`sC%)lSeT8`3Q^Q{p!UNqqiZw>0Gxovht*?h?aEH7O&F9?NZYvoeJ{GOgQacU&tr) zi%6Z{^NPNAlfQZEMf2{gkL!HfsZtIg=nwi^D)GaTpZ9}EsAtf-DP0d+;C_$>?|BfyP)Ql^f9T*UOwjY4b$9k@F z$8GBbNph5`vZ1ds&MVZJofH@ZOuPgZYS;8H*vaE%KL|*1^!4+MA zU1fccuUK`RKBuuj%rl~*mMXJig6 zl~6!mjibW@LaWczRNmXMTbBjLvCiY%d$m&Red*_kl)_i>({yoWMj)j0ZhGx4l7Q8} zSK6KTe-^_q3ZIC^B7?v6hZeK<-V+1en8HE_gzGn7=wy?=0^F1jw9-3Zde1+qcQ%#X zii$8aFjb;>Y+7rHfUIJ7h|8~+GkrD(4^9C>{!KN7bJ=#G%pthjOSoISdU&ZfWjL<} zp?=LC8QXKMKR!*LcRbfqL+~C%J=OS)w9&@ndOeXVe}Em_s+V+v?~1cnjv8<+n@UG~`P4=F6#U+`M$%)fvR4nlM%MCcCr9Up!t zjGGzxoFxe}{q5ks_e*Yew(QQ_5-oe2^KufJCYW!lpGzGens5d9vzqUpF#^JNx%PbA ziH&2{U4lvZ4wGzu1mVn#U?@*J_wEU*P zW&ZKfi4Kr6KfBN2H1#%X(WkHKVU^vkBiOV-XJy5H6y&8l@3XRwaow0saUJ|2?nvN+<{wFZ}EEpe||RdE?u z61AU$?mM4vFB-fLUoeSlJvPc!+^yi{iZL21ixIR|8_osV{Lcg1<2yTsoYPC+R zb=^r9GSD}^O;uiARa_>oB{)t_)&`+NmFy<-q;uDonXqzycgt_ieh|H364zt`80LxF z79pQ{yjHrSN|dFhyu8O0o^LILmV*GL{_QOAeEV?$snUah5gS^#f-+ipjk+1umP^>T z^Q#6Kais-z>T?L)otfu_>vOGU$EYeVc;=9JwU7{r-l=bZLM~T5#0WfDl<2z6b;Zmr zo|)`kPthiEStYNs_Mt+#VL@S_qk~<1{hS|4;wGT$FMp@&=ecZJ(6c^-Fw?7hQKl`j z^j@1|+QOx1y!DkoRyi}iICT!3+FY$IUFy!ia9B`g2I|@NQg$&Z=O)R-T?|m{&0zhb zUzBvdhBwVh<#|eFw4PL=I~10|Y*3a-_d`iB)I*1aWRUzfbx=`c(not14aY|Z?80st z>8T4`Hrbi+NIr2$V}qwi z%Me0v0M*(2Wr+Pb|J|Be@b;_}aS}0^xGW$jsZwE9%fm)u8kfvXRx5l&@>p%#p1h4~PuHVd zV8?8D+LE#Tia~ml2{R0@i9L6UBzy!MwR@Yf$AZJU9vmuU?JZNMZrx$LH zpT&18&?66!-QV8w*BZ8`DHV`oE?$R&rLX(d9`lkeixNvjftTtZ6=Hvx$a8sc2aRCt+wr!uwSqo-_T1*Xn3H^ux9Dle@z^+K{@$Ii|sSP zLt?A1^c&dID%iNu5@FnIlWB}_50u&SC>bj*&VU=%DLI-pX|33!xKgaxwMJ`HLYoCTVt0xxf&1MYBZK*(*TkfOTGFgbN&bukcrSG2wW+w{0J2rPplr0Wsw8jSB?zRjRfyRsM zOkA>sHYY*JeCf9slwU0u%N$Qi*aAi&;5SC0vQzG&3{TH@&rV=1tZ5?BlvUV}=Z%35 zk^Jd0MlyE#kq<& zQ533aPJ|S$?IYI2TlM)&ZjZwaOBAU$iz-G?(FXMjhC3UHYF6x3+3%J3M7w8vHe0@9 z3bPCqsY&ka{laiac>KAmY>kb*BEw-^wXdJsXsinzRUGET! zjUY}hz;RTiNyW5U?rrx9jt!EMP)h%%XfsUM zZ+wuox~kfJzEoCMII+sxY;Gv0-Bh?yFSu>H4uXYz8{2do%!Q2#_1PLYs8mnKRVwqD z)jg^(u2bSOP2bq9%D=G0mD_I@>D^&f5pP8%Nx&ls<-A%t`nP(%yDjekh~{Ik+hI1m z#LMFeB0+crJBR>)+-jQ_%q4JXzr<>3DA;uqw%diy@^{QQMbb9^J0JM?Yx_l+1j$W= zkwPyxej5$=V9#VUE@mo;BPFImoi9~JQF#q(2}B>NT~oIs%gZI2Tg*Qgr!-o{k1%X* zPQ1y^8f+?V)`>oAYNl1zBi3%V%nq33t3B7cN4b+a)$H^;%hGwPvTGi5c?rLQH-H6t zlr4#4eXgTb4_!aUkqy0T(gkK!MbjjbXR^WMm91S~MgBua5ju~TyX#MI#(CS7Nn4LS~#y9l~nObladZC=WH1&yx*YUbtD^;`&&PVnJv8~!%5mt+UyawNIdo8VAYO&=)rzTk++M8aT?w`plS6ow{ zXnx>`dZ*{pRN0r)%v9CVs0BwE8t@I*ImU4t56hrTZAS!MKR<17A-GDFJPvM6=1t+( zRcm4^tdcDmIjXn9`j6gKo2@bJrl(&@)Hki{KTBf1^_#-u`(;~SRruGOg`po9p|eej zB8iDgevuk{MnW3a_A~Zp8yLpHP`MUnDql?8zC?nq_I>{81{0ZfukIw(VyI(Mct`7H z5vPP@g$9>2kYx7id35=MGS)e=Of{WDY9_S4# zYV=PPWuc9x9u*co(?dD&a1MRBGbmPf0!tA`L_2H*3CUUV|I}eS$xM693?ExR%?jRihGtP*XFfbcND=EX@kMyB&<3V_@KwuJKraZPIH?dU7Nmek2!vB6kvB3|5aX@w*9C6&t_)$>Qs9G%hSO%gl^tw-6BgG(OFP z?NMfHDv?!=Y!tZ;huEWTidLAgj#rp+#o;J}R)rIGz&172Qm_Boq3>KXeHP$;l`0-LK2oM%vorz68rS;9`mI#ZN2X;q znK;h8)6-~A*EHn8NY?k@7{-BS$P9RFq*cDw)MNez;Zg5Ki17Kx!EN;pk3knA2;!rO z-Xj&_huhZ2cw{oefi{xXR5RvQ?pQ^_ij9eIyuCOceqIJZMC1! z09asef7Cyga_){V@F(Bjmy^v5Hsxo%4@{WW5qQ^CGh0;l=Ia@_kqR(MlAMb_hxrUZ zW%0#nf>w@E`#f{^%xaArECT_9*YmyExU1xL{8yrcRHMF>kryOVgS=WF{y0Z*r6jfy zSWts>rG#n^QHEu1Ph4DwR1+c0OnAx*>{p>WRRs=h6RdMctYv=)M76nc^OTDO9t(r+ z4obRuXiMgiL3yd8t$-;S3n80pbWA)!CWC-RhYUUC6pkv)u6=0j&=+UY;a3MlhHEeG zEfScYZ}*9o3zCwE5&tn)Ao<`HU4qy1vrV=cz#rcn_4|yS5Yzw?KT%W9S)Wa*Nw@I~ z*Ka>2hX!n;zBARc%6+#jA?WlosJtdryEz%Q7{^`fi^u8eRt-P)!gc3M;B}vD5v!gy za9ZSF86966Y+P$-m5dNrtP<&-o_6p~g@%27xXJ$@28L5GSQZ$IAkVMGJ=p)+GXPD~r7cG5IJFD5OYhISIt$WgR8-2 z@ZO}cCRcC=kwK4lT$`_SOFy_)lmY7o8?9=86kPL=;NgnxsCDg2U3NX3N))g?q;HUN z%TS$aG)TI((lu6c{)Dc&suo#QoTGYe8GT}h@b1Xh-(9V=pBI~&%}x{*y6AyIMr-;3 zZQ&8_QxkCL;V`ggtcDkZqXkUgNh#7B8L<~u8Q1CRb#6$amT>iRb^SCX^Q-^(P$rVA zvm&?#GkU{~c&|C1IYau0^DktM_O$mqwSwDyHhdq4em+s+!IP~ZG=07R3Iw3&0T8im z=hx*Mc;aSxRXiP&lUjW6t+tbUYS^WZWNub4aBSwrJ^4O@Cr8yn!2TsAy`_7o!y=it#qz>AgXf|D0a*X$|`W&Zkl$%9SR%fQGa~mpdgugxC z&>-&3R+%c$*j6M1b!k+cYcv3ug5{}16}*TMS2qwel-$wK*f0AyNA>yP(6_I&(_oM|FqaA>k$=4RBIau@vDPs=+~1&-b_(TpinJT(_rX$U|aKCJSq zyy@GenG0!9do%0iI>pVXndS%N&7zM%zB2%Ih7~-W8&GIjs@b;RnAvU8lxLs3Z$CfE z9y|nu!_?2vXvbkt#OUf=V(@bT2bBWqlF_22(T)QkOq#T{*VfYKcJP`jFRVCAA~yBU z(Au}w?3~t$Q;)xoC+BTeBg^w+vkQDG%9;e1_FGx}iNVc;jlxrNSV8*PEPB72{`)&%$_Zf{ao~OukKtw*-kXr4S)j9-P-yds-EQ4`}K(0hk8rs z?hV+1dyIsaPn~h|ZIf%o(1f%!%ifS$?>t=9j|?rV1dY41fQGlsKGwUbtB?|IB)3b@4U)X$Hu{D zFjV6xk*;-T+jmrGbj?^Np!_3N=HAX5k2;`a{Ng{3^!i5Q=HNS^vGuS>J#I6`hehbP z&_wN&gT}JG%yB(p-*kU#Q3EfK25*%%AKCS2<3}Wk&K}7h3@Wnp0BADmi4L-j*kg9| zwSk%xfge)&zE%qNu4p$OMT21#&12b^FD(8%(K1Kx(Grw<9SlyL)ktY<1NBSX#zxXl z*XQ)`I^_vjXtNC9lGv|AL-5R-Y(+u|WVr;rP%_x~TzJ&A>+AkWJPl{aYB1$95HLFl zy=r-R1w4nn4NTt@w$DezJ(ZgIekHf;yrYw0tDy$L_z`5J#Us9VA{NB`>VlP>Za(v+ zGTC`y_JjR0i``^?)4Kd^i(&VB_iW8g}hsE#u`x;8`*J#Kr>L+S8 zHXwG4g5<8bFK#+5C9q-0_ju^P_!qxz_;8j|h6-KPM`XoH?cvJFa9PmoZXb)0z6w z7dq3VpGq}aG)s{-hMm_@`&M>(E<8;{DMQn-d#ukpbs30g3=DMM_7suqHr8@mju1z+ zEJx~r%>|3~mffq7bgsFTs)s%YD+KS!^=U=}6GJwXudakSz$~T4$%0WEOs7k?M3F`C ziK2R|IccV&evut7!mG~`Me2f4x2ntJWe(~;h!s4PtjD5>N#o-HhA+Q2I0?g2s)vKFb!Ik?cH&Dhip)&d6nQW&e8luA4KxN>KnljtT5;&rk z$vw+*;w|VkTUAC^Cjnw_t*t)0R=0|~C*M^+_sZC4cTlf~xBO;AIG5Si;i2&Gi2 zesH-UmF`|sPSJhxR$KZN?07{C3ZS;37B8vYzBo+YM%ngaGDZ)`09L+K6HNfH;CJGv ztBQ3<#ANdW4*MB4H!sI{;r!24xgCXtulnJ-tj=3X^O7PCF(y8q04q4^j9 zQG_n>@I?m7YHdtS!r8<$fxouAuj;mpe)K2ZY#;I{VlVt$Nd9ouJ!leESDg9RkRPDFPi!6JF; z?9H|lu>#WF613gQ2J&Y)RHMvxO;|pK1uT(Z84_)3e@z9>00>Dr5LJb>4Us4!i{dN0h+P0%T-f4%jU!&yb-Z%?Xg(?DdUW0C9DK9icPz z`l-9?Nj2*{OlL|VMAH*6uD-GIN`S8Q`Ag=9rI{^8m3GNx!bfVR^~wd7PGhGwUVS~y zG<0ojd<}x{2Ta>lh5eik?_&E|c9b2gs`>q+g3Sr8#d^m$A&ZvtL0)6~?vF}kpXw@> zRQA)6aF138jOq-#dD;&j*iAMmYHXLCHW%)zIbWcEby>wvt+w~h*yhv>*Ygf675hV? zu_v(v-->kiFwh5zcRGIoJO3{l{0Wi;;{fLD*fx&VumPyH7eONs#WTT|*|1kF6(QtoX+wcrQf=JO@ zB&6sPy%VBGZ&61gh(3CoVI(1<6D4}@LDV4_LJ(cl#0;Z^QKI)5<^9O-e%EuqYdzoJ z_x;1-pIOW7v(MhwzOL(>f z-60{qi`2x}GFOF2yMKmvwB9u_QF(fmv2C1BvkUKUqHmh7ay<2Qv$=WQ-vNh?wEkt~ zWHvpP{{|C}m%Jc&0L1sH$Su>xDNmWF3`bpN2dd=Zj|DC{Gy@1I;KG1~bFdt;;u4VB z|A#IAx75C}PtXtf@{88SKf%?=B!wz)eEFvYx?VkRd((MsLel*tH;G}iIDr2R=MbDCGm>X>-UvL`uC}z;G2u+j=w~ zF_8$E;N1TYP$Ihlq6D0z_SQ#$z9Z35?<*Tw6Xs>n)5SscIQOlro*I^CE9!?{xbii*^Fzy8Ag>f5gG44BsF0fh9n zJZl-XG8)qO$lU4IkZgi7K$poFco8EcL=H%koJbR1S)e4y zt!`r(SmAABU*+^@f|hB&*qT%D%mQLrsB)?`1H3%Flabh@X_QFQleDTX)9K-+m~rb- zb49bkst@w}-nyAh4zSD^-ir>Pa+<_MaK((4o?AGk8~5Vt@Di>1HG=z%HjD&L*H^KE z)5r zBs>4NpZvSZfk#L!Y!hz>q^Z5BHl*P^qYOvfk!t>5wR#>NWaKHJ zEw1`A;nqcDTh=kntb#UZI^ckpO(#ipkNEw4*z5`3)WYTI1S#u*i%3$LZue>Av}ES-E;4K~*=EYfjKC zt;LEB;XV{jH|-byv^kdY@|EQG$e{9?OrlxAVM~MhfZa2e&fCK)Fh1uvbxImHl_Oh2<5k@+BFgYG^@x4K>XL2G!`_!hhRa*XZ=A@+Qaw7_#l8eq2|=5H z`u?d#3p(aaL-|jI-uz+*Im+v$pN%zd$Osvi4}DN}6LWLUHLnJ!YcQ60WWP{%wFc@^HZ4;kQMXBrTOd{}3RMImoosFilH2qm5)btEILqtecHT zdCF#eR4k&XLU8m;J)ynsT(62hcqQ5hRzi#NU9hEqjMR_5LlJpeQO=q8hbiyO;_8x6 zAWx(_iE?8)-&skvp^O7frN8&*DP-zWpnB$6zxGGzh1M8p^uCw@Azi3m?z4n6+A(z0f*LPiir7 zFiW+uu&)AOBGCjOXho+wFe2~i%OQ&`guu)#<_^app{aCZXx3^Y<+la01(B0UJN^vcVuKvH!HyS!$uJy3=_LN8nJ*Tls&@3+nv< zdCj3u%KN4EX*E2(1%)P>!I)1f2ewIxsuh){qD<$dpl2jsR!vZ=`#(QL2|n;iqk5K1 zPp@j~5-qo7c;^$j*Sb&Hu z)<|{%JzLG&E73`4RUOc2$$)-R<^}pRsH?eaZqsb(G&T;HoQmp=N^y*3KTz7|ivkmg zL?Ce(fUgkGmez>bH{moa_&|K)cd#{Z$I)Abe+@|lF&P!0&dS_PDY&PH#^kFUPUXSG z66n?@SESrM#ZwJUDmrv&Q%iq*?hD_sv7GTPaj}o@>{?rqs^0gfJ#Y~eRym?uyDpBb zFdCuQ+52v>C|L&(Rn@>SF~<2p*YJ*nmx%wWtw?8$%z6zu+&C$DIj(IL%O^4(kJTw6 zwxYdT7VGP#7EJZQ(ag-|gRXYQ_U7Oe(=JvrizkDvgYE+AlcWP&2G5u#T{HZ02#o(F?_g) zq*7JhPd2^$x0U{1r{_1FfXRnT6Ub1&>qR92IJE%1dVjU9Qe8A5Q5DdwGM7ve^`Czx ze>y()-GSRqq|{sYd1n6l_iZxNU!*ah!{HaT{|n_{Vql(~wU{=kQ}hNiHC6N>%2JoSXmzAoQY5r{pE0uWsJXbu=QW zHloMe15lTUk5;Av!J$7-2T36ZPMlEx>EWsT;?RnQIiF*(*7l zx96$gSplbrrvqmS6kq?5NwNCuo1do$u-U2>8WB|D<9l7J*n!0Ypsg$(OBFO%J$832 z^%^c~pPhgcUYfWCQyJ0I{uvwEDtB-g3EniyVmzv-Q#`nYMgHfH$tyLP6M=z2sZXvZd3 zxf1Mtm)<~WR->8?s^Nx`%ZB>AWgyYfBOfLEsvw$;=r5)KR&};%d^#jXjBV^ZuKrT} zl#ZE@YWGJaq-6v2tfY5{zxTuOJ=@F8KZ;$O{0}O~ouVYm%+mHbAtExh&%j zm)E3az`z%G;GQ3ri|*4`{DA#zJ!5wGaQ$$=J_`)GO#?*dNeIeEZsI{m0RH!T9Q!qR z);SuSl1K;)@hPnFl7sFm=XAMs-@{^8J2m?K*!=GOZQ1LtK@Pq29#eL}gckx#cmSet4#?`q zY&Ry%9Q%FCah290)?8+0yu=*`z&XIV9rt*dS>petX7dIBYKZ#~6Hpnb>a?C2A5SFwm&=x6udTI-7Ch?DtK!i) zSG7_8l2`U4`y?UlUI3t*1iY@wkVN54G>>7Igz&~MJ~PKs&tos;jMdZnR0r0*QY%wd z0sy9e**ewaaze=3kLyJIUsg(riPY_DEtne|l_ixtd=_)iva98{R*w9{a~ZTXaN!xK z>MzQA-~2*2B0XmlJ97^>Idho|C_lLh*i-`E)3>Q0co-@7kJ}Ae>v!QqY%>4v_~^kC?a_>P+m@(rQ6** z@}j3=d*uddt+dxmzU=i+C151JHv}`?urj=rPh4WcFHQ>@Hg6nHuM8LQi@AEK@$C zW5yW|>pW-#dSEziKGfgZq=l*~nP%xU=+Eh40LG|#{n|P5u;?&zS4PNgsXskMYGM1C zR(v9dkQ6TcqX(T3*L#{o8@$hels1?A5zAEM2D}BXIUD? zFCDW*(HAEo9p?jeCdJ#VxBLLg@r}U{14l!e2g|Yhdu3&nKQ|0Y3`(cf&d>Bq3^r>r z&(u8^zS=Ga;F!xMDp%J-(glknD1Fb;7bbB@WmDgTsCX5vWJc^A*_jeoPh%CZlD${p zF8YT!kw30t@B7ZM})gC=IUS7PN3>+~Wg^Qc_fD$*!s36=G>lFSjRy>|IN z%5dz#Q`6P0_GvqK=DlzdHSkrt%@p5A)Mc_u2WL5r z!Dnv{l};XX2Z=zgKRmJ9I23T!+-rrIBW4Y%RGpgzrf3emZh66uVb^vWpB$YGDt8c7 z>PCq7Pf~0}Fm(n=`lOCD50&WXAjIU4j8WbW?|08&8O{wT&s2qy{ILW0$x)R|JU8$a z4@O$g4Yhy)*?ZE5$I~7M)i-*y~ZfoD2v4jH`R-3HEf)R(ftx zZbwvZyB=y`jRA+#g31gC#^mrdP9Ts4!;@(=#lFc3*eM{8n&j{n4Xo~da^OmlUP++# zbZZb~*6xc{fpcgd{l25XllJ)4Mwz&50kkPeVEYQwfK72?vdFhQ&s!D0o~8~ev(xl$ zxm#XqAPi01cN=ei9x*n!+!{A|+So~i3UYP5A;v!<*wGjeid6E)b^N#vzqzBqGB3__ zb<}UB@LoplZC5tjZihDlcx*m$Z|Hmv`6I}qmGlw^=yh6bsL4T3-?r|%Lr-D$*~8dM zL;0;LEBOiv96Y#k@!7CI^rFC&S^3_OxQnD(H?b_Zt;jDR--mQ>aQjSkTl$fNeN4W3 zfnH0?-lkmQY6smcnumGm4(NCPUf;F0oGU*Y{C$M>TD&1SmGnI|&*i8Y1jK#8{$M}0 zT{#L@>Ys-=2p`!N;moPTfUOirJY59Jf}R%dA9s;}+4C0Ua7T@tN-?gzeSWygI0Rpi zrCxw<+1pvvV7kQ^S33~rnVM>CWNIz$8#l$Ul2K4m-kNbzlFvJosJ_>@z9aK>4gEpQ z4bNUKG@n;*t5$&NMYE~!na^x^@+zE9!yY3xagSROXzQwnr_+-PQ6+ENOyn)wAmTv+ zTh$BA*Dx(vZ((~rK|FApS4BZ&@Mg#p`G+iRKLt#9^%7!&Pk|u3^UI1kf}M{{-EE_{ zk}&4iFtzU|Rz|v=tGougowS1~-?>K;UOO^QBBoG4_=SfWv=DP0uz^4ne;cF$p4Tkf zPe_!KTzAA-sYK|-u{aK z;2Th?nLU{nq9j{kME~(|{q&frm?Hn?D3q_cw3x{>iAkRe{qH?E<}1 z%XY%8Hqpc(-9nw%+Cfm-z;U!}M!Lrc{wdUg9_oBk)l z*re^`VASX@2K@IcTc_5$B=~a+am8+qJLF4(o*xgDN^Qk`;lFA@5QKTYhs(lop=bP* zpglRXHBKR#NL-8i@q_sr0K1ke;2Q**)fShHsK_}(+uxw?w~9YHYieF zMQ1GUp+$wktH9@9Z|Nqg7x+u9V1u~F-`#;pQBK}(;~V)y^c#$7eB4+*FGcl-?3rD9 zD#)9_2;x}Z+8G!aKI~;(J26b^zXpcNJ>o~4Lw|4V9sjidxHsf`%gqUhwcP*28d9Gv z(0;|kRTicRuMt?uJHU;Z{yG`G7lJA+|K~dUy#WUH)6JSlj?|E}6E}NPLL>5oW2~!B zD}?B`#=Vz*r8?OQk6Rn8%x=1Y3lUw#!4yYmDsiR=^1YCh(?$tnMUBYFr5=taKGE9?FRus)<69TvGmm zGs+B=I?5*|@J$1D$>&0CA#V8*94TTgZ(WU7H0Tj%jN)C4}TKZa=O z%CeU{a+)-o6@RH#$jkJQ`8~l~&1%t4?`X$8RR`Gxu=7Vl^8L;l8Xwn# z8I)Mf+I0J~fL?P#l&|b3)n)+fO8+#Fd1I@9A{al^<*_$8alhm%#SyvBW=^*Dh+vjx z*SCU*+Wzw9Td{}QD7wj`vev}2Td#^@W;YhsWn(U_@W@VZZ7i^)cdq1vtbpZwJ9o3| z5fsx}SErLO)EHdJW5`PmQkDV!iGu?Dy^z)@_QuGud&&+tsHkR9#~nAJpdK6rQef8S zWA~+%$~nAq*xR10S`6w~PYr|O;o&*>UJCT7!GfT3py5}7_CaD`*=c#SWtSvqX+aHd zM_^gyOP|El4Ghy?Kgw2si2DZx*pH8g^i8Z=PVmh3hEiJqQT+eYsb=adTl|$ciWk$g zbZ;ltV#DoJiLC%hamF#!OaqgbdbcH~p3fYk;!BW@>%x?5NF&L4`TC@)A zM8j@U4WE-v%^=#syWpw{ox3_32Y+Ad2q**1Q-77o3( zB|V#Y+gWJi+J@o&Df$|Ci-7+6n2viKl>lHV^5Mg!mZCL~kMH(4zSelz%wqFUG4a2o zr~jn?)-1Rnf<&ENq~@xB+zjJ}A!6W?z`H(ru2``AoUP2Qoj#Z~uX=g>6a)X9^sx{Z zxa5%~{lak&+0@FpXnKJ)q5v~F2SuD=rZ~NPI;78S#8tarJTDm!;J%U9N;Y-rk7)h} zqF{LQ)$~@Bd1$*d+tT_}jlEmKJ?_M*(p0}qI)fdgx3m_8rJvh$T#w#ktU2EdP?M1UPt>e~npsY@%{DlOkH%In!mt0zMZbe^vz|{_##d(u2WA%OE62X=4i`X9S(TZ(S ztVvuScEpk)3AJp*R;G^pWd{2n6tFTQ%fE>dzbN06^zT}kIaN7GEhkw94*!wvDVt$D<@Zs_SV; zbJxMZK~AMKIf`wj;F&6!P(0csZG=89H|>O6jiiZmWWAiH_rf2eCtPL(tImY)NL4f<=@QO`dHW2M)A&5Ld~KyY1k8oMJzEW@7xvT^A07qEe_{wZ|U}Z zVSaU)Hd!o2qARfVi$5}g?T9IG{D}y+p+)|%&$U|bQ~rG_%Y4GM*2Lvy#ypr`Sm4on zY(M(DJobFE-*xT!P>P~WF4t;@t(CgQe_PL;k3 z><7fnGrCLxPd}~%p;HSgTqp#jXm->rAPs)4k)g{$Fh0*`EUkVH{rSuKmflH|9V_T> zyLRzcBvZpi=$o%jz*(-SMjThp-;hkx(owvxrU{z?b$x{;ois*@hsJc~t!+FnS%~n0 zoxOX#E*K=pR7izbu7%%>^!g+*BbR&IwrLxEA(V6N$vd_U7gSQylcT|kGK+rpX30r4MIz< zuB7|Pww>1P3eO72^JhbApJnUZQ7K;*_>fNxo9Vu(E6EZQ#=$@}#~}@mCrEdnewBcU z(k2TJe^hpcv`z0epWV%3OYbT=`T`2fYoJ5Th*xA(=7b=>)&VBKn{MQ86v>

*Yq= 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 z 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

+*y1xgF-Mh}sEHA8vVJIafj;7Y$WYhEoK4h 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