Apache MXNet - 快速指南


Apache MXNet - 简介

本章重点介绍 Apache MXNet 的功能,并讨论该深度学习软件框架的最新版本。

什么是 MXNet?

Apache MXNet 是一款功能强大的开源深度学习软件框架工具,可帮助开发人员构建、训练和部署深度学习模型。过去几年,从医疗保健到交通运输再到制造业,事实上,在我们日常生活的各个方面,深度学习的影响已经广泛存在。如今,公司寻求深度学习来解决一些难题,例如人脸识别、对象检测、光学字符识别 (OCR)、语音识别和机器翻译。

这就是 Apache MXNet 受到以下支持的原因:

  • 一些大公司如英特尔、百度、微软、Wolfram Research 等。

  • 公共云提供商,包括 Amazon Web Services (AWS) 和 Microsoft Azure

  • 卡内基梅隆大学、麻省理工学院、华盛顿大学、香港科技大学等一些大型研究机构。

为什么选择 Apache MXNet?

现在有各种深度学习平台,如 Torch7、Caffe、Theano、TensorFlow、Keras、Microsoft Cognitive Toolkit 等,那么您可能想知道为什么要使用 Apache MXNet?让我们看看背后的一些原因:

  • Apache MXNet 解决了现有深度学习平台的最大问题之一。问题是,为了使用深度学习平台,人们必须学习另一种系统以适应不同的编程风格。

  • 在 Apache MXNet 的帮助下,开发人员可以充分利用 GPU 和云计算的功能。

  • Apache MXNet 可以加速任何数值计算,并特别注重加速大规模 DNN(深度神经网络)的开发和部署。

  • 它为用户提供命令式和符号式编程的功能。

各种功能

如果您正在寻找一个灵活的深度学习库来快速开发前沿的深度学习研究,或者正在寻找一个强大的平台来推动生产工作负载,那么您的搜索就到了 Apache MXNet。正是因为它有以下几个特点:

分布式训练

无论是具有近线性扩展效率的多 GPU 还是多主机训练,Apache MXNet 都允许开发人员充分利用其硬件。MXNet 还支持与 Horovod 集成,Horovod 是 Uber 创建的开源分布式深度学习框架。

对于此集成,以下是 Horovod 中定义的一些常见分布式 API:

  • horovod.broadcast()

  • horovod.allgather()

  • horovod.allgather()

在这方面,MXNet为我们提供了以下能力:

  • 设备布局- 在 MXNet 的帮助下,我们可以轻松指定每个数据结构 (DS)。

  • 自动微分- Apache MXNet 自动进行微分,即导数计算。

  • 多 GPU 训练- MXNet 使我们能够利用可用 GPU 的数量实现扩展效率。

  • 优化的预定义层- 我们可以在 MXNet 中编写自己的层,也可以优化预定义层以提高速度。

杂交

Apache MXNet 为其用户提供混合前端。借助 Gluon Python API,它可以弥合命令式功能和符号功能之间的差距。它可以通过调用它的混合功能来完成。

更快的计算

数十或数百次矩阵乘法等线性运算是深度神经网络的计算瓶颈。为了解决这个瓶颈,MXNet 提供了 -

  • 针对 GPU 的优化数值计算

  • 分布式生态系统的优化数值计算

  • 常见工作流程的自动化,借助它可以简单地表达标准神经网络。

语言绑定

MXNet 与 Python 和 R 等高级语言深度集成。它还提供对其他编程语言的支持,例如:

  • 斯卡拉

  • 朱莉娅

  • 克洛尤尔

  • 爪哇

  • C/C++

  • 珀尔

我们不需要学习任何新的编程语言,而是 MXNet 与混合功能相结合,允许从 Python 异常平滑地过渡到我们选择的编程语言的部署。

最新版本MXNet 1.6.0

Apache 软件基金会 (ASF) 于 2020 年 2 月 21 日在 Apache License 2.0 下发布了 Apache MXNet 的稳定版本 1.6.0。这是支持 Python 2 的最后一个 MXNet 版本,因为 MXNet 社区投票决定在以后的版本中不再支持 Python 2。让我们看看这个版本为用户带来的一些新功能。

NumPy 兼容接口

由于其灵活性和通用性,NumPy 已被机器学习从业者、科学家和学生广泛使用。但众所周知,如今的图形处理单元(GPU)等硬件加速器已经越来越多地融入各种机器学习(ML)工具包中,NumPy 用户为了利用 GPU 的速度,需要切换到新的框架具有不同的语法。

通过 MXNet 1.6.0,Apache MXNet 正在向 NumPy 兼容的编程体验迈进。新界面为熟悉 NumPy 语法的从业者提供了同等的可用性和表现力。除此之外,MXNet 1.6.0 还使现有的 Numpy 系统能够利用 GPU 等硬件加速器来加速大规模计算。

与 Apache TVM 集成

Apache TVM 是一个开源的端到端深度学习编译器堆栈,适用于 CPU、GPU 和专用加速器等硬件后端,旨在填补注重生产力的深度学习框架和注重性能的硬件后端之间的差距。通过最新版本的MXNet 1.6.0,用户可以利用Apache(孵化)TVM以Python编程语言实现高性能算子内核。这个新功能的两个主要优点如下 -

  • 简化了以前基于C++的开发流程。

  • 允许在多个硬件后端(例如 CPU、GPU 等)之间共享相同的实现。

对现有功能的改进

除了上面列出的 MXNet 1.6.0 功能外,它还对现有功能进行了一些改进。改进如下 -

GPU 的按元素分组操作

我们知道逐元素操作的性能取决于内存带宽,这就是原因,链接此类操作可能会降低整体性能。Apache MXNet 1.6.0 进行逐元素操作融合,实际上在可能的情况下生成即时融合操作。这种逐元素操作融合还减少了存储需求并提高了整体性能。

简化常用表达式

MXNet 1.6.0消除了冗余表达式并简化了常用表达式。这种增强还提高了内存使用率和总执行时间。

优化

MXNet 1.6.0还对现有的功能和算子提供了各种优化,具体如下:

  • 自动混合精度

  • Gluon Fit API

  • MKL-DNN

  • 大张量支持

  • TensorRT集成

  • 高阶梯度支持

  • 运营商

  • 操作员性能分析器

  • ONNX 导入/导出

  • Gluon API 的改进

  • 对符号 API 的改进

  • 修复了 100 多个错误

Apache MXNet - 安装 MXNet

要开始使用 MXNet,我们需要做的第一件事就是将其安装在我们的计算机上。Apache MXNet 适用于几乎所有可用平台,包括 Windows、Mac 和 Linux。

Linux操作系统

我们可以通过以下方式在 Linux 操作系统上安装 MXNet -

图形处理单元 (GPU)

在这里,当我们使用 GPU 进行处理时,我们将使用各种方法,即 Pip、Docker 和 Source 来安装 MXNet -

通过使用点值法

您可以使用以下命令在 Linus 操作系统上安装 MXNet -

pip install mxnet

Apache MXNet 还提供 MKL pip 软件包,在英特尔硬件上运行时速度要快得多。例如,mxnet-cu101mkl意味着 -

  • 该软件包是使用 CUDA/cuDNN 构建的

  • 该软件包启用了 MKL-DNN

  • CUDA版本是10.1

对于其他选项,您还可以参考https://pypi.org/project/mxnet/

通过使用 Docker

您可以在 DockerHub 上找到带有 MXNet 的 docker 镜像,网址为https://hub.docker.com/u/mxnet让我们看看下面的步骤,通过使用带有 GPU 的 Docker 来安装 MXNet -

步骤 1 - 首先,按照https://docs.docker.com/engine/install/ubuntu/上提供的 docker 安装说明进行操作。我们需要在我们的机器上安装 Docker。

步骤 2 - 要从 docker 容器使用 GPU,接下来我们需要安装 nvidia-docker-plugin。您可以按照https://github.com/NVIDIA/nvidia-docker/wiki上给出的安装说明进行操作。

步骤 3 - 通过使用以下命令,您可以拉取 MXNet docker 映像 -

$ sudo docker pull mxnet/python:gpu

现在为了查看 mxnet/python docker 镜像拉取是否成功,我们可以列出 docker 镜像,如下所示 -

$ sudo docker images

为了通过 MXNet 获得最快的推理速度,建议使用带有 Intel MKL-DNN 的最新 MXNet。检查下面的命令 -

$ sudo docker pull mxnet/python:1.3.0_cpu_mkl
$ sudo docker images

从源头

要使用 GPU 从源代码构建 MXNet 共享库,首先我们需要设置 CUDA 和 cuDNN 的环境,如下所示:

  • 下载并安装CUDA工具包,这里推荐使用CUDA 9.2。

  • 接下来下载cuDNN 7.1.4。

  • 现在我们需要解压缩该文件。还需要更改为 cuDNN 根目录。还将标头和库移动到本地 CUDA Toolkit 文件夹,如下所示 -

tar xvzf cudnn-9.2-linux-x64-v7.1
sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
sudo ldconfig

设置 CUDA 和 cuDNN 的环境后,请按照以下步骤从源代码构建 MXNet 共享库 -

步骤 1 - 首先,我们需要安装必备包。Ubuntu 版本 16.04 或更高版本需要这些依赖项。

sudo apt-get update
sudo apt-get install -y build-essential git ninja-build ccache libopenblas-dev 
libopencv-dev cmake

步骤 2 - 在此步骤中,我们将下载 MXNet 源并进行配置。首先让我们使用以下命令克隆存储库 -

git clone –recursive https://github.com/apache/incubator-mxnet.git mxnet
cd mxnet
cp config/linux_gpu.cmake #for build with CUDA

步骤 3 - 通过使用以下命令,您可以构建 MXNet 核心共享库 -

rm -rf build
mkdir -p build && cd build
cmake -GNinja ..
cmake --build .

关于上述步骤的两个要点如下:

如果您想构建调试版本,请指定如下 -

cmake -DCMAKE_BUILD_TYPE=Debug -GNinja ..

为了设置并行编译作业的数量,请指定以下内容 -

cmake --build . --parallel N

成功构建 MXNet 核心共享库后,在MXNet 项目根目录的构建文件夹中,您将找到安装语言绑定(可选)所需的libmxnet.so 。

中央处理器(CPU)

在这里,当我们使用 CPU 进行处理时,我们将使用各种方法,即 Pip、Docker 和 Source 来安装 MXNet -

通过使用点值法

您可以使用以下命令在 Linus 操作系统上安装 MXNet:

pip install mxnet

Apache MXNet 还提供支持 MKL-DNN 的 pip 包,在英特尔硬件上运行时速度要快得多。

pip install mxnet-mkl

通过使用 Docker

您可以在 DockerHub 上找到带有 MXNet 的 docker 镜像,该镜像位于https://hub.docker.com/u/mxnet。让我们看看下面使用 Docker 和 CPU 安装 MXNet 的步骤 -

步骤 1 - 首先,按照https://docs.docker.com/engine/install/ubuntu/上提供的 docker 安装说明进行操作。我们需要在我们的机器上安装 Docker。

步骤 2 - 通过使用以下命令,您可以拉取 MXNet docker 映像:

$ sudo docker pull mxnet/python

现在,为了查看 mxnet/python docker 镜像拉取是否成功,我们可以列出 docker 镜像,如下所示 -

$ sudo docker images

为了通过 MXNet 获得最快的推理速度,建议使用带有 Intel MKL-DNN 的最新 MXNet。

检查下面的命令 -

$ sudo docker pull mxnet/python:1.3.0_cpu_mkl
$ sudo docker images

从源头

要使用 CPU 从源代码构建 MXNet 共享库,请按照以下步骤操作 -

步骤 1 - 首先,我们需要安装必备包。Ubuntu 版本 16.04 或更高版本需要这些依赖项。

sudo apt-get update

sudo apt-get install -y build-essential git ninja-build ccache libopenblas-dev libopencv-dev cmake

步骤 2 - 在此步骤中,我们将下载 MXNet 源并进行配置。首先让我们使用以下命令克隆存储库:

git clone –recursive https://github.com/apache/incubator-mxnet.git mxnet

cd mxnet
cp config/linux.cmake config.cmake

步骤 3 - 通过使用以下命令,您可以构建 MXNet 核心共享库:

rm -rf build
mkdir -p build && cd build
cmake -GNinja ..
cmake --build .

关于上述步骤的两个要点如下:

如果要构建调试版本,请指定如下:

cmake -DCMAKE_BUILD_TYPE=Debug -GNinja ..

为了设置并行编译作业的数量,请指定以下内容 -

cmake --build . --parallel N

成功构建 MXNet 核心共享库后,在MXNet 项目根目录的构建文件夹中,您将找到 libmxnet.so,这是安装语言绑定所需的(可选)。

MacOS

我们可以通过以下方式在 MacOS 上安装 MXNet:

图形处理单元 (GPU)

如果您计划使用 GPU 在 MacOS 上构建 MXNet,则没有可用的 Pip 和 Docker 方法。在这种情况下,唯一的方法是从源代码构建它。

从源头

要使用 GPU 从源代码构建 MXNet 共享库,首先我们需要设置 CUDA 和 cuDNN 的环境。对于 mac OS,您需要遵循NVIDIA CUDA 安装指南(可从https://docs.nvidia.com获取)和cuDNN 安装指南(可从https://docs.nvidia.com/deeplearning获取) 。

请注意,2019 年 CUDA 停止支持 macOS。事实上,未来版本的 CUDA 也可能不支持 macOS。

设置 CUDA 和 cuDNN 的环境后,请按照以下步骤在 OS X (Mac) 上从源代码安装 MXNet -

步骤 1 - 由于我们需要 OS x 上的一些依赖项,因此首先我们需要安装必备软件包。

xcode-select –-install #Install OS X Developer Tools

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" #Install Homebrew

brew install cmake ninja ccache opencv # Install dependencies

我们也可以在没有 OpenCV 的情况下构建 MXNet,因为 opencv 是一个可选依赖项。

步骤 2 - 在此步骤中,我们将下载 MXNet 源并进行配置。首先让我们使用以下命令克隆存储库 -

git clone –-recursive https://github.com/apache/incubator-mxnet.git mxnet

cd mxnet
cp config/linux.cmake config.cmake

对于启用 GPU 的设备,必须首先安装 CUDA 依赖项,因为当尝试在没有 GPU 的计算机上构建启用 GPU 的版本时,MXNet 版本无法自动检测您的 GPU 架构。在这种情况下,MXNet 将针对所有可用的 GPU 架构。

步骤 3 - 通过使用以下命令,您可以构建 MXNet 核心共享库 -

rm -rf build
mkdir -p build && cd build
cmake -GNinja ..
cmake --build .

关于上述步骤的两个要点如下:

如果您想构建调试版本,请指定如下 -

cmake -DCMAKE_BUILD_TYPE=Debug -GNinja ..

为了设置并行编译作业的数量,请指定以下内容:

cmake --build . --parallel N

成功构建 MXNet 核心共享库后,在MXNet 项目根目录的构建文件夹中您将找到libmxnet.dylib,这是安装语言绑定所需的(可选)。

中央处理器(CPU)

在这里,当我们使用 CPU 进行处理时,我们将使用各种方法,即 Pip、Docker 和 Source 来安装 MXNet -

通过使用点值法

您可以使用以下命令在 Linus 操作系统上安装 MXNet

pip install mxnet

通过使用 Docker

您可以在 DockerHub 上找到带有 MXNet 的 docker 镜像,该镜像位于https://hub.docker.com/u/mxnet。让我们看看下面使用 Docker 和 CPU 安装 MXNet 的步骤:

步骤 1 - 首先,按照https://docs.docker.com/docker-for-mac上提供的docker 安装说明进行操作,我们需要在我们的计算机上安装 Docker。

步骤 2 - 通过使用以下命令,您可以拉取 MXNet docker 镜像 -

$ docker pull mxnet/python

现在为了查看 mxnet/python docker 镜像拉取是否成功,我们可以列出 docker 镜像,如下所示:

$ docker images

为了通过 MXNet 获得最快的推理速度,建议使用带有 Intel MKL-DNN 的最新 MXNet。检查下面的命令 -

$ docker pull mxnet/python:1.3.0_cpu_mkl
$ docker images

从源头

按照下面给出的步骤在 OS X (Mac) 上从源代码安装 MXNet -

步骤 1 - 由于我们需要 OS x 上的一些依赖项,因此首先我们需要安装必备软件包。

xcode-select –-install #Install OS X Developer Tools
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" #Install Homebrew
brew install cmake ninja ccache opencv # Install dependencies

我们也可以在没有 OpenCV 的情况下构建 MXNet,因为 opencv 是一个可选依赖项。

步骤 2 - 在此步骤中,我们将下载 MXNet 源并进行配置。首先,让我们使用以下命令克隆存储库 -

git clone –-recursive https://github.com/apache/incubator-mxnet.git mxnet

cd mxnet

cp config/linux.cmake config.cmake

步骤 3 - 通过使用以下命令,您可以构建 MXNet 核心共享库:

rm -rf build
mkdir -p build && cd build
cmake -GNinja ..
cmake --build .

关于上述步骤的两个要点如下:

如果您想构建调试版本,请指定如下 -

cmake -DCMAKE_BUILD_TYPE=Debug -GNinja ..

为了设置并行编译作业的数量,请指定以下内容 -

cmake --build . --parallel N

成功构建 MXNet 核心共享库后,在MXNet 项目根目录的构建文件夹中您将找到libmxnet.dylib,这是安装语言绑定所需的(可选)。

Windows操作系统

要在 Windows 上安装 MXNet,以下是先决条件 -

最低系统要求

  • Windows 7、10、服务器 2012 R2 或服务器 2016

  • Visual Studio 2015 或 2017(任何类型)

  • Python 2.7 或 3.6

推荐系统要求

  • Windows 10、服务器 2012 R2 或服务器 2016

  • 视觉工作室 2017

  • 至少一个支持 NVIDIA CUDA 的 GPU

  • 支持 MKL 的 CPU:英特尔® 至强® 处理器、英特尔® 酷睿™ 处理器系列、英特尔® 凌动® 处理器或英特尔® 至强融核™ 处理器

  • Python 2.7 或 3.6

图形处理单元 (GPU)

通过使用 Pip 方法−

如果您计划使用 NVIDIA GPU 在 Windows 上构建 MXNet,有两种选择可以使用 Python 包安装具有 CUDA 支持的 MXNet:

安装 CUDA 支持

以下是我们可以使用 CUDA 设置 MXNet 的步骤。

步骤 1 - 首先安装 Microsoft Visual Studio 2017 或 Microsoft Visual Studio 2015。

步骤 2 - 接下来,下载并安装 NVIDIA CUDA。建议使用 CUDA 版本 9.2 或 9.0,因为过去已发现 CUDA 9.1 的一些问题。

步骤 3 - 现在,下载并安装 NVIDIA_CUDA_DNN。

步骤 4 - 最后,通过使用以下 pip 命令,安装带有 CUDA 的 MXNet -

pip install mxnet-cu92

安装 CUDA 和 MKL 支持

以下是我们可以使用 CUDA 和 MKL 设置 MXNet 的步骤。

步骤 1 - 首先安装 Microsoft Visual Studio 2017 或 Microsoft Visual Studio 2015。

步骤 2 - 接下来,下载并安装 intel MKL

步骤 3 - 现在,下载并安装 NVIDIA CUDA。

步骤 4 - 现在,下载并安装 NVIDIA_CUDA_DNN。

步骤 5 - 最后,通过使用以下 pip 命令,使用 MKL 安装 MXNet。

pip install mxnet-cu92mkl

从源头

要使用 GPU 从源代码构建 MXNet 核心库,我们有以下两个选项 -

选项 1− 使用 Microsoft Visual Studio 2017 构建

为了使用 Microsoft Visual Studio 2017 自行构建和安装 MXNet,您需要以下依赖项。

安装/更新 Microsoft Visual Studio。

  • 如果您的计算机上尚未安装 Microsoft Visual Studio,请首先下载并安装它。

  • 它会提示安装 Git。也安装一下吧。

  • 如果您的计算机上已安装 Microsoft Visual Studio,但您想要更新它,请继续执行下一步以修改您的安装。在这里您还将有机会更新 Microsoft Visual Studio。

按照打开https://docs.microsoft.com/en-us上提供的 Visual Studio 安装程序的说明来修改各个组件。

在 Visual Studio 安装程序应用程序中,根据需要进行更新。之后查找并选中VC++ 2017 版本 15.4 v14.11 工具集,然后单击修改

现在使用以下命令,将 Microsoft VS2017 的版本更改为 v14.11−

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" -vcvars_ver=14.11

接下来,您需要在https://cmake.org/download/下载并安装CMake。建议使用https://cmake.org/download/上提供的CMake v3.12.2,因为它是使用 MXNet 进行测试的。

现在,下载并运行https://sourceforge.net/projects/opencvlibrary/上提供的OpenCV包,这将解压缩多个文件。是否要将它们放在另一个目录中取决于您。在这里,我们将使用路径C:\utils(mkdir C:\utils)作为默认路径。

接下来,我们需要设置环境变量 OpenCV_DIR 以指向我们刚刚解压的 OpenCV 构建目录。对于此打开命令提示符并输入set OpenCV_DIR=C:\utils\opencv\build

重要的一点是,如果您没有安装英特尔 MKL(数学内核库),您可以安装它。

您可以使用的另一个开源包是OpenBLAS。为了获得进一步的说明,我们假设您正在使用OpenBLAS

因此,下载https://sourceforge.net上提供的OpenBlas软件包并解压缩该文件,将其重命名为OpenBLAS并将其放在C:\utils下。

接下来,我们需要设置环境变量OpenBLAS_HOME以指向包含includelib目录的 OpenBLAS 目录。对于此打开命令提示符并输入set OpenBLAS_HOME=C:\utils\OpenBLAS

现在,下载并安装https://developer.nvidia.com上提供的 CUDA 。请注意,如果您已经有 CUDA,然后安装了 Microsoft VS2017,则现在需要重新安装 CUDA,以便获得用于 Microsoft VS2017 集成的 CUDA 工具包组件。

接下来,您需要下载并安装 cuDNN。

接下来,您还需要下载并安装 git,地址为https://gitforwindows.org/

安装完所有必需的依赖项后,请按照下面给出的步骤构建 MXNet 源代码 -

步骤 1 - 在 Windows 中打开命令提示符。

步骤 2 - 现在,通过使用以下命令,从 GitHub 下载 MXNet 源代码:

cd C:\

git clone https://github.com/apache/incubator-mxnet.git --recursive

步骤 3 - 接下来,验证以下内容 -

DCUDNN_INCLUDE 和 DCUDNN_LIBRARY环境变量指向CUDA 安装位置的include文件夹和cudnn.lib文件

C:\incubator-mxnet是您在上一步中刚刚克隆的源代码的位置。

步骤 4 - 接下来使用以下命令创建一个构建目录并转到该目录,例如 -

mkdir C:\incubator-mxnet\build
cd C:\incubator-mxnet\build

步骤 5 - 现在,通过使用 cmake,编译 MXNet 源代码,如下所示 -

cmake -G "Visual Studio 15 2017 Win64" -T cuda=9.2,host=x64 -DUSE_CUDA=1 -DUSE_CUDNN=1 -DUSE_NVRTC=1 -DUSE_OPENCV=1 -DUSE_OPENMP=1 -DUSE_BLAS=open -DUSE_LAPACK=1 -DUSE_DIST_KVSTORE=0 -DCUDA_ARCH_LIST=Common -DCUDA_TOOLSET=9.2 -DCUDNN_INCLUDE=C:\cuda\include -DCUDNN_LIBRARY=C:\cuda\lib\x64\cudnn.lib "C:\incubator-mxnet"

步骤 6 - CMake 成功完成后,使用以下命令编译 MXNet 源代码 -

msbuild mxnet.sln /p:Configuration=Release;Platform=x64 /maxcpucount

选项 2:使用 Microsoft Visual Studio 2015 进行构建

为了使用 Microsoft Visual Studio 2015 自行构建和安装 MXNet,您需要以下依赖项。

安装/更新 Microsoft Visual Studio 2015。从源代码构建 MXnet 的最低要求是 Microsoft Visual Studio 2015 的 Update 3。您可以使用工具 -> 扩展和更新... | 产品更新菜单可对其进行升级。

接下来,您需要下载并安装CMake ,可从https://cmake.org/download/获取。建议使用CMake v3.12.2(位于https://cmake.org/download/),因为它是使用 MXNet 进行测试的。

现在,下载并运行https://excellmedia.dl.sourceforge.net上提供的 OpenCV 包,这将解压缩多个文件。是否要将它们放在另一个目录中取决于您。

接下来,我们需要设置环境变量OpenCV_DIR以指向我们刚刚解压的OpenCV构建目录。为此,打开命令提示符并输入 set OpenCV_DIR=C:\opencv\build\x64\vc14\bin

重要的一点是,如果您没有安装英特尔 MKL(数学内核库),您可以安装它。

您可以使用的另一个开源包是OpenBLAS。为了获得进一步的说明,我们假设您正在使用OpenBLAS

因此,下载https://excellmedia.dl.sourceforge.net上提供的OpenBLAS软件包并解压缩该文件,将其重命名为 OpenBLAS 并将其放在 C:\utils 下。

接下来,我们需要设置环境变量 OpenBLAS_HOME 以指向包含 include 和 lib 目录的 OpenBLAS 目录。您可以在C:\Program files (x86)\OpenBLAS\中找到该目录

请注意,如果您已经有 CUDA,然后安装了 Microsoft VS2015,则需要立即重新安装 CUDA,以便获得用于 Microsoft VS2017 集成的 CUDA 工具包组件。

接下来,您需要下载并安装 cuDNN。

现在,我们需要设置环境变量 CUDACXX 指向CUDA 编译器(例如 C:\Program Files\NVIDIA GPU Compute Toolkit\CUDA\v9.1\bin\nvcc.exe)。

同样,我们还需要设置环境变量CUDNN_ROOT指向包含include、libbin目录的cuDNN目录(例如C:\Downloads\cudnn-9.1-windows7-x64-v7\cuda )。

安装完所有必需的依赖项后,请按照下面给出的步骤构建 MXNet 源代码 -

步骤 1 - 首先,从 GitHub 下载 MXNet 源代码 -

cd C:\
git clone https://github.com/apache/incubator-mxnet.git --recursive

步骤 2 - 接下来,使用 CMake 在 ./build 中创建 Visual Studio。

步骤 3 - 现在,在 Visual Studio 中,我们需要打开解决方案文件.sln并编译它。这些命令将在./build/Release/ 或 ./build/Debug文件夹中生成一个名为mxnet.dll的库

步骤 4 - CMake 成功完成后,使用以下命令编译 MXNet 源代码

msbuild mxnet.sln /p:Configuration=Release;Platform=x64 /maxcpucount

中央处理器(CPU)

在这里,当我们使用 CPU 进行处理时,我们将使用各种方法,即 Pip、Docker 和 Source 来安装 MXNet -

通过使用点值法

如果您计划使用 CPU 在 Windows 上构建 MXNet,则有两种使用 Python 包安装 MXNet 的选项 -

与CPU一起安装

使用以下命令通过 Python 安装带有 CPU 的 MXNet -

pip install mxnet

安装 Intel CPU

如上所述,MXNet 对 Intel MKL 和 MKL-DNN 提供实验性支持。使用以下命令通过 Python 安装带有 Intel CPU 的 MXNet -

pip install mxnet-mkl

通过使用 Docker

您可以在DockerHub找到带有 MXNet 的 docker 镜像,网址为https://hub.docker.com/u/mxnet让我们看看下面的步骤,通过使用带有 CPU 的 Docker 来安装 MXNet:

步骤 1 - 首先,按照 docker 安装说明进行操作,可以在https://docs.docker.com/docker-for-mac/install阅读。我们需要在我们的机器上安装 Docker。

步骤 2 - 通过使用以下命令,您可以拉取 MXNet docker 镜像 -

$ docker pull mxnet/python

现在为了查看 mxnet/python docker 镜像拉取是否成功,我们可以列出 docker 镜像,如下所示:

$ docker images

为了通过 MXNet 获得最快的推理速度,建议使用带有 Intel MKL-DNN 的最新 MXNet。

检查下面的命令 -

$ docker pull mxnet/python:1.3.0_cpu_mkl
$ docker images

在云和设备上安装 MXNet

本节重点介绍如何在云和设备上安装 Apache MXNet。让我们首先了解如何在云上安装 MXNet。

在云上安装 MXNet

您还可以在多个具有图形处理单元 (GPU)支持的云提供商上获取 Apache MXNet 。您可以找到的另外两种支持如下:

  • GPU/CPU 混合支持可扩展推理等用例。
  • AWS Elastic Inference 的阶乘 GPU 支持。

以下是为 Apache MXNet 提供不同虚拟机的 GPU 支持的云提供商:

阿里巴巴控制台

您可以使用阿里巴巴控制台创建https://docs.nvidia.com/ngc上提供的NVIDIA GPU 云虚拟机 (VM)并使用 Apache MXNet。

亚马逊网络服务

它还提供 GPU 支持并为 Apache MXNet 提供以下服务:

亚马逊 SageMaker

它管理 Apache MXNet 模型的训练和部署。

AWS 深度学习 AMI

它为 Python 2 和 Python 3 提供预安装的 Conda 环境,包括 Apache MXNet、CUDA、cuDNN、MKL-DNN 和 AWS Elastic Inference。

AWS 上的动态训练

它提供实验性手动 EC2 设置以及半自动 CloudFormation 设置的培训。

您可以将https://aws.amazon.com上提供的NVIDIA VM与 Amazon Web 服务结合使用。

谷歌云平台

Google 还提供NVIDIA GPU 云映像,可在https://console.cloud.google.com上使用该映像来与 Apache MXNet 配合使用。

微软Azure

Microsoft Azure Marketplace 还在https://azuremarketplace.microsoft.com上提供了NVIDIA GPU 云映像,以便与 Apache MXNet 配合使用。

甲骨文云

Oracle 还在https://docs.cloud.oracle.com上提供了NVIDIA GPU 云映像,以便与 Apache MXNet 配合使用。

中央处理器(CPU)

Apache MXNet 适用于每个云提供商的纯 CPU 实例。有多种安装方法,例如:

  • Python pip 安装说明。

  • Docker 指令。

  • 预装选项,如 Amazon Web Services,它提供 AWS Deep Learning AMI(预装了适用于 Python 2 和 Python 3 的 Conda 环境以及 MXNet 和 MKL-DNN)。

在设备上安装 MXNet

让我们学习如何在设备上安装 MXNet。

树莓派

您还可以在 Raspberry Pi 3B 设备上运行 Apache MXNet,因为 MXNet 还支持基于 Respbian ARM 的操作系统。为了在 Raspberry Pi3 上顺利运行 MXNet,建议设备具有 1 GB 以上 RAM 和至少 4 GB 可用空间的 SD 卡。

以下是您可以为 Raspberry Pi 构建 MXNet 并为库安装 Python 绑定的方法 -

快速安装

预构建的 Python 轮可在带有 Stretch 的 Raspberry Pi 3B 上使用,以便快速安装。此方法的重要问题之一是,我们需要安装多个依赖项才能使 Apache MXNet 正常工作。

Docker安装

您可以按照https://docs.docker.com/engine/install/ubuntu/上的 docker 安装说明在您的计算机上安装 Docker。为此,我们还可以安装和使用社区版(CE)。

本机构建(来自源代码)

为了从源代码安装 MXNet,我们需要遵循以下两个步骤:

步骤1

从 Apache MXNet C++ 源代码构建共享库

要在 Raspberry 版本 Wheezy 及更高版本上构建共享库,我们需要以下依赖项:

  • Git - 需要从 GitHub 提取代码。

  • Libblas - 线性代数运算所需。

  • Libopencv - 计算机视觉相关操作所需。但是,如果您想节省 RAM 和磁盘空间,则可以选择此选项。

  • C++ 编译器- 需要编译和构建 MXNet 源代码。以下是支持 C++ 11 的编译器:

    • G++(4.8或更高版本)

    • 铿锵(3.9-6)

使用以下命令安装上述依赖项 -

sudo apt-get update
sudo apt-get -y install git cmake ninja-build build-essential g++-4.9 c++-4.9 liblapack*
libblas* libopencv*
libopenblas* python3-dev python-dev virtualenv

接下来,我们需要克隆 MXNet 源代码存储库。为此,请在主目录中使用以下 git 命令 -

git clone https://github.com/apache/incubator-mxnet.git --recursive

cd incubator-mxnet

现在,借助以下命令,构建共享库:

mkdir -p build && cd build
cmake \
-DUSE_SSE=OFF \
-DUSE_CUDA=OFF \
-DUSE_OPENCV=ON \
-DUSE_OPENMP=ON \
-DUSE_MKL_IF_AVAILABLE=OFF \
-DUSE_SIGNAL_HANDLER=ON \

-DCMAKE_BUILD_TYPE=Release \
-GNinja ..
ninja -j$(nproc)

执行上述命令后,它将开始构建过程,该过程需要几个小时才能完成。您将在构建目录中获得一个名为libmxnet.so的文件。

第2步

安装 Apache MXNet 支持的特定语言包

在此步骤中,我们将安装 MXNet Pythin 绑定。为此,我们需要在 MXNet 目录中运行以下命令 -

cd python
pip install --upgrade pip
pip install -e .

或者,使用以下命令,您还可以创建可使用pip安装的whl 包-

ci/docker/runtime_functions.sh build_wheel python/ $(realpath build)

NVIDIA Jetson 设备

您还可以在 NVIDIA Jetson 设备(例如TX2Nano)上运行 Apache MXNet,因为 MXNet 还支持基于 Ubuntu Arch64 的操作系统。为了在 NVIDIA Jetson 设备上顺利运行 MXNet,需要在 Jetson 设备上安装 CUDA。

以下是为 NVIDIA Jetson 设备构建 MXNet 的方法:

  • 使用 Jetson MXNet pip 轮进行 Python 开发

  • 从源头

但是,在通过上述任何方式构建 MXNet 之前,您需要在 Jetson 设备上安装以下依赖项:

Python 依赖项

为了使用 Python API,我们需要以下依赖项 -

sudo apt update
sudo apt -y install \
   build-essential \
   git \
   graphviz \
   libatlas-base-dev \
   libopencv-dev \
   python-pip
sudo pip install --upgrade \
   pip \
   setuptools
sudo pip install \
   graphviz==0.8.4 \
   jupyter \
   numpy==1.15.2

克隆 MXNet 源代码存储库

通过在主目录中使用以下 git 命令,克隆 MXNet 源代码存储库 -

git clone --recursive https://github.com/apache/incubator-mxnet.git mxnet

设置环境变量

在主目录的.profile文件中添加以下内容 -

export PATH=/usr/local/cuda/bin:$PATH
export MXNET_HOME=$HOME/mxnet/
export PYTHONPATH=$MXNET_HOME/python:$PYTHONPATH

现在,使用以下命令立即应用更改 -

source .profile

配置CUDA

在配置 CUDA 之前,使用 nvcc,您需要检查正在运行的 CUDA 版本 -

nvcc --version

假设,如果您的设备或计算机上安装了多个 CUDA 版本,并且您想要切换 CUDA 版本,请使用以下命令并将符号链接替换为您想要的版本:

sudo rm /usr/local/cuda
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda

上述命令将切换到 CUDA 10.0,该版本预装在 NVIDIA Jetson 设备Nano上。

完成上述先决条件后,您现在可以在 NVIDIA Jetson 设备上安装 MXNet。那么,让我们了解一下安装 MXNet 的方法:

通过使用 Jetson MXNet pip 轮进行 Python 开发- 如果您想使用准备好的 Python 轮,请将以下内容下载到您的 Jetson 并运行它 -

本机构建(来自源代码)

为了从源代码安装 MXNet,我们需要遵循以下两个步骤:

步骤1

从 Apache MXNet C++ 源代码构建共享库

要从 Apache MXNet C++ 源代码构建共享库,您可以使用 Docker 方法或手动执行 -

泊坞窗方法

在这种方法中,您首先需要安装 Docker 并且能够在没有 sudo 的情况下运行它(这也在前面的步骤中进行了解释)。完成后,运行以下命令通过 Docker 执行交叉编译 -

$MXNET_HOME/ci/build.py -p jetson

手动的

在此方法中,您需要编辑Makefile(使用以下命令)来安装带有 CUDA 绑定的 MXNet,以利用 NVIDIA Jetson 设备上的图形处理单元 (GPU):

cp $MXNET_HOME/make/crosscompile.jetson.mk config.mk

编辑 Makefile 后,您需要编辑 config.mk 文件以对 NVIDIA Jetson 设备进行一些其他更改。

为此,请更新以下设置 -

  • 更新 CUDA 路径:USE_CUDA_PATH = /usr/local/cuda

  • 将 -gencode arch=compute-63, code=sm_62 添加到 CUDA_ARCH 设置。

  • 更新 NVCC 设置:NVCCFLAGS := -m64

  • 打开OpenCV:USE_OPENCV = 1

现在为了确保 MXNet 使用 Pascal 的硬件级低精度加速进行构建,我们需要编辑 Mshadow Makefile,如下所示:

MSHADOW_CFLAGS += -DMSHADOW_USE_PASCAL=1

最后,借助以下命令,您可以构建完整的 Apache MXNet 库 -

cd $MXNET_HOME
make -j $(nproc)

执行上述命令后,它将开始构建过程,该过程需要几个小时才能完成。您将在mxnet/lib 目录中获得一个名为libmxnet.so的文件。

第2步

安装 Apache MXNet Python 绑定

在此步骤中,我们将安装 MXNet Python 绑定。为此,我们需要在 MXNet 目录中运行以下命令 -

cd $MXNET_HOME/python
sudo pip install -e .

完成上述步骤后,您现在就可以在 NVIDIA Jetson 设备 TX2 或 Nano 上运行 MXNet。可以使用以下命令进行验证 -

import mxnet
mxnet.__version__

如果一切正常,它将返回版本号。

Apache MXNet - 工具包和生态系统

为了支持多个领域的深度学习应用程序的研究和开发,Apache MXNet 为我们提供了丰富的工具包、库等生态系统。让我们探索它们 -

工具包

以下是 MXNet 提供的一些最常用和重要的工具包 -

胶子CV

顾名思义,GluonCV 是一个由 MXNet 支持的计算机视觉 Gluon 工具包。它提供了计算机视觉 (CV) 领域最先进的 DL(深度学习)算法的实现。在 GluonCV 工具包的帮助下,工程师、研究人员和学生可以验证新想法并轻松学习 CV。

下面给出了GluonCV 的一些功能-

  • 它训练脚本来重现最新研究中报告的最先进的结果。

  • 超过 170+ 高质量预训练模型。

  • 拥抱灵活的发展模式。

  • GluonCV 很容易优化。我们可以在不保留重量级深度学习框架的情况下部署它。

  • 它提供了精心设计的 API,大大减少了实现的复杂性。

  • 社区支持。

  • 易于理解的实现。

以下是GluonCV 工具包支持的应用程序:

  • 图像分类

  • 物体检测

  • 语义分割

  • 实例分割

  • 姿势估计

  • 视频动作识别

我们可以使用 pip 安装 GluonCV,如下所示 -

pip install --upgrade mxnet gluoncv

胶子自然语言处理

顾名思义,GluonNLP 是一个由 MXNet 支持的自然语言处理 (NLP) 的 Gluon 工具包。它提供了 NLP 中最先进的 DL(深度学习)模型的实现。

在 GluonNLP 工具包的帮助下,工程师、研究人员和学生可以构建文本数据管道和模型的块。基于这些模型,他们可以快速原型化研究思路和产品。

以下是 GluonNLP 的一些功能:

  • 它训练脚本来重现最新研究中报告的最先进的结果。

  • 用于常见 NLP 任务的一组预训练模型。

  • 它提供了精心设计的 API,大大减少了实现的复杂性。

  • 社区支持。

  • 它还提供教程来帮助您开始新的 NLP 任务。

以下是我们可以使用 GluonNLP 工具包实现的 NLP 任务 -

  • 词嵌入

  • 语言模型

  • 机器翻译

  • 文本分类

  • 情绪分析

  • 自然语言推理

  • 文本生成

  • 依存分析

  • 命名实体识别

  • 意图分类和槽位标签

我们可以使用 pip 安装 GluonNLP,如下所示 -

pip install --upgrade mxnet gluonnlp

胶子TS

顾名思义,GluonTS 是一个由 MXNet 支持的概率时间序列建模 Gluon 工具包。

它提供以下功能 -

  • 最先进 (SOTA) 的深度学习模型已准备好接受训练。

  • 用于加载和迭代时间序列数据集的实用程序。

  • 构建块来定义您自己的模型。

在 GluonTS 工具包的帮助下,工程师、研究人员和学生可以根据自己的数据训练和评估任何内置模型,快速试验不同的解决方案,并为他们的时间序列任务提出解决方案。

他们还可以使用提供的抽象和构建块来创建自定义时间序列模型,并根据基线算法快速对其进行基准测试。

我们可以使用 pip 安装 GluonTS,如下所示 -

pip install gluonts

胶子FR

顾名思义,它是一个用于 FR(人脸识别)的 Apache MXNet Gluon 工具包。它提供以下功能 -

  • 人脸识别领域最先进 (SOTA) 的深度学习模型。

  • SoftmaxCrossEntropyLoss、ArcLoss、TripletLoss、RingLoss、CosLoss/AMsoftmax、L2-Softmax、A-Softmax、CenterLoss、ContrastiveLoss、LGM Loss等的实现

为了安装 Gluon Face,我们需要 Python 3.5 或更高版本。我们还首先需要安装 GluonCV 和 MXNet,如下所示 -

pip install gluoncv --pre
pip install mxnet-mkl --pre --upgrade
pip install mxnet-cuXXmkl --pre –upgrade # if cuda XX is installed

安装依赖项后,您可以使用以下命令来安装 GluonFR -

从源头

pip install git+https://github.com/THUFutureLab/gluon-face.git@master

pip install gluonfr

生态系统

现在让我们探索 MXNet 丰富的库、包和框架 -

教练RL

Coach,由英特尔人工智能实验室创建的 Python 强化学习 (RL) 框架。它可以轻松地使用最先进的 RL 算法进行实验。Coach RL 支持 Apache MXNet 作为后端,并允许简单集成新环境来解决。

为了轻松扩展和重用现有组件,Coach RL 很好地解耦了基本的强化学习组件,如算法、环境、神经网络架构、探索策略。

以下是 Coach RL 框架的代理和支持的算法 -

价值优化代理

  • 深度 Q 网络 (DQN)

  • 双深Q网络(DDQN)

  • 决斗Q网络

  • 混合蒙特卡罗 (MMC)

  • 持续优势学习(PAL)

  • 分类深度 Q 网络 (C51)

  • 分位数回归深度 Q 网络 (QR-DQN)

  • N 步 Q 学习

  • 神经情景控制 (NEC)

  • 归一化优势函数 (NAF)

  • 彩虹

策略优化代理

  • 策略梯度 (PG)

  • 异步优势 Actor-Critic (A3C)

  • 深度确定性策略梯度(DDPG)

  • 近端策略优化 (PPO)

  • 截断近端策略优化 (CPPO)

  • 广义优势估计(GAE)

  • 具有经验重播功能的高效 Actor-Critic 示例 (ACER)

  • 软演员评论家 (SAC)

  • 双延迟深度确定性策略梯度 (TD3)

总代理

  • 直接未来预测 (DFP)

模仿学习代理

  • Behave克隆(BC)

  • 条件模仿学习

分层强化学习代理

  • 分层演员评论家 (HAC)

深度图库

Deep Graph Library (DGL) 由纽约大学和上海 AWS 团队开发,是一个 Python 包,可在 MXNet 之上轻松实现图神经网络 (GNN)。它还可以在 PyTorch、Gluon 等其他现有主要深度学习库之上轻松实现 GNN。

深度图库是一款免费软件。它适用于 Ubuntu 16.04、macOS X 和 Windows 7 或更高版本的所有 Linux 发行版。它还需要 Python 3.5 版本或更高版本。

以下是 DGL 的特点 -

无迁移成本- 使用 DGL 没有迁移成本,因为它构建在流行的现有 DL 框架之上。

消息传递- DGL 提供消息传递并且对其具有多种控制。消息传递的范围从低级操作(例如沿选定的边发送)到高级控制(例如图范围的特征更新)。

平滑的学习曲线- 学习和使用 DGL 非常容易,因为强大的用户定义函数灵活且易于使用。

透明的速度优化- DGL 通过自动批处理计算和稀疏矩阵乘法提供透明的速度优化。

高性能- 为了实现最大效率,DGL 自动对一张或多张图进行批量 DNN(深度神经网络)训练。

简单友好的界面- DGL 为我们提供了简单友好的界面,用于边缘特征访问以及图形结构操作。

洞察面

InsightFace 是一种用于人脸分析的深度学习工具包,可在由 MXNet 提供支持的计算机视觉中实现 SOTA(最先进的)人脸分析算法。它提供 -

  • 高质量的大量预训练模型。

  • 最先进 (SOTA) 的训练脚本。

  • InsightFace 易于优化。我们可以在不保留重量级深度学习框架的情况下部署它。

  • 它提供了精心设计的 API,大大减少了实现的复杂性。

  • 构建块来定义您自己的模型。

我们可以使用 pip 安装 InsightFace,如下所示 -

pip install --upgrade insightface

请注意,在安装 InsightFace 之前,请根据您的系统配置安装正确的 MXNet 软件包。

Keras-MXNet

众所周知,Keras 是用 Python 编写的高级神经网络 (NN) API,Keras-MXNet 为我们提供了对 Keras 的后端支持。它可以在高性能且可扩展的 Apache MXNet DL 框架之上运行。

Keras-MXNet 的特点如下:

  • 使用户能够轻松、流畅、快速地进行原型设计。这一切都是通过用户友好性、模块化和可扩展性来实现的。

  • 支持 CNN(卷积神经网络)和 RNN(循环神经网络)以及两者的组合。

  • 在中央处理单元 (CPU) 和图形处理单元 (GPU) 上完美运行。

  • 可以在一个或多个 GPU 上运行。

为了使用这个后端,您首先需要安装 keras-mxnet,如下所示 -

pip install keras-mxnet

现在,如果您使用 GPU,则安装支持 CUDA 9 的 MXNet,如下所示 -

pip install mxnet-cu90

但如果您仅使用 CPU,则安装基本 MXNet,如下所示 -

pip install mxnet

MX板

MXBoard 是用 Python 编写的日志工具,用于记录 MXNet 数据帧并在 TensorBoard 中显示。换句话说,MXBoard 旨在遵循tensorboard-pytorch API。它支持 TensorBoard 中的大多数数据类型。

下面提到了其中一些 -

  • 图形

  • 标量

  • 直方图

  • 嵌入

  • 图像

  • 文本

  • 声音的

  • 精确率-召回率曲线

MX融合

MXFusion 是一个具有深度学习功能的模块化概率编程库。MXFusion 使我们能够充分利用模块化(深度学习库的关键特征)进行概率编程。它使用简单,为用户提供了一个方便的界面来设计概率模型并将其应用于现实世界的问题。

MXFusion 在 MacOS 和 Linux 操作系统上的 Python 3.4 及更高版本上进行了验证。为了安装 MXFusion,我们需要首先安装以下依赖项 -

  • MXNet >= 1.3

  • 网络x >= 2.1

借助以下 pip 命令,您可以安装 MXFusion -

pip install mxfusion

电视管理系统

Apache TVM 是一个开源的端到端深度学习编译器堆栈,适用于 CPU、GPU 和专用加速器等硬件后端,旨在填补注重生产力的深度学习框架和注重性能的硬件后端之间的差距。通过最新版本的MXNet 1.6.0,用户可以利用Apache(孵化)TVM以Python编程语言实现高性能算子内核。

Apache TVM 实际上最初是华盛顿大学 Paul G. Allen 计算机科学与工程学院 SAMPL 小组的一个研究项目,现在是在 Apache 软件基金会 (ASF) 中进行孵化的一项工作,该基金会由 OSC 驱动( Apache方式下涉及多个行业以及学术机构的开源社区)。

以下是 Apache(孵化)TVM 的主要功能 -

  • 简化了以前基于C++的开发流程。

  • 允许在多个硬件后端(例如 CPU、GPU 等)之间共享相同的实现。

  • TVM 提供将 Kears、MXNet、PyTorch、Tensorflow、CoreML、DarkNet 等各种框架中的 DL 模型编译为各种硬件后端上的最小可部署模块的功能。

  • 它还为我们提供了自动生成和优化具有更好性能的张量算子的基础设施。

X铁

Xfer 是一个迁移学习框架,是用 Python 编写的。它基本上采用 MXNet 模型并训练元模型或针对新的目标数据集修改模型。

简单来说,Xfer 是一个 Python 库,允许用户快速轻松地传输存储在 DNN(深度神经网络)中的知识。

可以使用 Xfer -

  • 用于任意数字格式的数据分类