Skip to content

Apache MXNet - 安装 MXNet

要开始使用 Apache MXNet,你需要在系统上安装它。MXNet 支持多种平台,包括 Linux、macOS 和 Windows。它还支持 Python 3(Python 2 已不再受支持)。

安装 MXNet 的主要方法是使用 pip。你可以选择适合你硬件(CPU 或 GPU)的软件包,对于 GPU,还需要与你的 CUDA 版本匹配。

MXNet 提供不同的 pip 软件包。基本软件包 mxnet 用于纯 CPU 执行。对于 NVIDIA GPU 支持,你需要与你的 CUDA 工具包版本对应的软件包(例如,对于 CUDA 11.2,使用 mxnet-cu112)。MXNet 还提供使用 oneDNN(前称 MKL-DNN)构建的软件包,以增强在 Intel 硬件上的性能。

安装前,建议设置一个虚拟环境(例如,使用 venv 或 conda)。

# 基础 CPU 版本
pip install mxnet
# 支持 oneDNN 的 CPU 版本(适用于 Intel CPU)
pip install mxnet-mkl
  1. 确保你已安装兼容的 NVIDIA 驱动程序和 CUDA 工具包。请查阅官方 MXNet 文档,了解你打算安装的 MXNet 版本支持哪些 CUDA 版本。

  2. 安装相应的 MXNet 软件包。例如,如果你已安装 CUDA 11.2:

# 适用于 CUDA 11.2(请替换为你自己的 CUDA 版本,例如 cu110, cu117, cu121)
pip install mxnet-cu112
# 适用于支持 oneDNN 的 CUDA 11.2
pip install mxnet-cu112mkl

要查找适合你的 CUDA 版本的软件包名称,请查阅 MXNet 官方网站或 PyPI 页面 (pypi.org/project/mxnet) 上的安装指南。

安装完成后,你可以在 Python 中导入 MXNet 并检查其版本和上下文(CPU/GPU)来验证安装:

import mxnet as mx
print(f"MXNet version: {mx.__version__}")
try:
# 尝试使用 GPU 上下文
a = mx.nd.ones((2,3), ctx=mx.gpu())
print("MXNet is using GPU.")
print(a)
except mx.MXNetError:
# 如果 GPU 上下文失败,则回退到 CPU
a = mx.nd.ones((2,3), ctx=mx.cpu())
print("MXNet is using CPU.")
print(a)

Docker 提供了一种方便的方式,可以在预配置的容器化环境中使用 MXNet。官方 MXNet Docker 镜像可在 Docker Hub (hub.docker.com/r/apache/mxnet 或旧版 mxnet/python) 上找到。

  1. 按照 docs.docker.com 上的说明,在你的系统上安装 Docker。

  2. 要在 Docker 内获得 GPU 支持,请安装 NVIDIA Container Toolkit (nvidia-docker2)。

  3. 拉取 MXNet Docker 镜像。例如:

# 仅用于 CPU(最新稳定版本)
# docker pull apache/mxnet:latest_cpu
# 适用于特定 CUDA 版本(例如 CUDA 11.2, Python 3.8)的 GPU
# docker pull apache/mxnet:1.9.1_gpu_cu112_py38
# 请查阅 Docker Hub 以获取最新的可用标签。
  1. 运行 Docker 容器:
# 适用于 CPU
# docker run -it apache/mxnet:latest_cpu bash
# 适用于 GPU
# docker run --gpus all -it apache/mxnet:1.9.1_gpu_cu112_py38 bash

从源代码构建提供了最大的定制灵活性,但更复杂。这通常推荐给开发者或需要特定构建选项时使用。具体的依赖项和构建步骤可能会改变,因此请务必参考官方的 MXNet 从源代码构建指南。

  • 符合 C++11 标准的编译器(例如 GCC, Clang, MSVC)。
  • CMake(推荐 3.13 或更高版本)。
  • Git。
  • BLAS 库(例如 OpenBLAS, MKL)。
  • 可选:用于图像处理支持的 OpenCV。
  • 可选:用于 NVIDIA GPU 支持的 CUDA 工具包和 cuDNN。
  • 可选:用于 Intel 硬件加速的 oneDNN (MKL-DNN)。
  1. 克隆 MXNet 仓库:
git clone --recursive https://github.com/apache/mxnet.git
cd mxnet
  1. 创建构建目录并使用 CMake 配置:
mkdir build && cd build
# 示例:使用 OpenBLAS 和 OpenCV 进行 CPU 构建:
# cmake -DUSE_CUDA=OFF -DUSE_OPENCV=ON -DUSE_OPENMP=ON -DUSE_BLAS=openblas ..
# 示例:进行 GPU 构建(CUDA, cuDNN, OpenCV, oneDNN):
# cmake -DUSE_CUDA=ON -DUSE_CUDNN=ON -DUSE_OPENCV=ON -DUSE_MKL_IF_AVAILABLE=ON ..
# 添加其他标志,例如用于 C++ 包的 -DUSE_CPP_PACKAGE=1 等。
  1. 编译:
cmake --build . --parallel $(nproc) # 对于 Linux/macOS,根据需要调整 $(nproc)
# 对于使用 MSBuild 的 Windows,在 CMake 生成解决方案文件后:
# msbuild mxnet.sln /p:Configuration=Release;Platform=x64 /maxcpucount
  1. 构建共享库(例如 Linux 上的 libmxnet.so,macOS 上的 libmxnet.dylib,Windows 上的 mxnet.dll)后,你可以安装 Python 绑定:
cd ../python
pip install -e .

注意:最新 CUDA 版本不再官方支持在 macOS 上使用 NVIDIA GPU 构建。MXNet 在 macOS 上主要面向 CPU,如果社区支持足够成熟,也可能面向 Apple 的 Metal Performance Shaders (MPS)。

Pip、Docker 和从源代码构建都得到了良好的支持。如果从源代码构建,请确保已安装构建必需工具和必要的库(OpenBLAS, OpenCV 开发包)。

# 示例:在 Ubuntu 上构建所需的依赖项:
sudo apt-get update
sudo apt-get install -y build-essential git ninja-build ccache libopenblas-dev libopencv-dev cmake

Pip 和 Docker (CPU) 是常见方式。从源代码构建用于 CPU 也是可行的。NVIDIA 在 macOS 上已弃用 NVIDIA GPU 支持;因此,MXNet 在 macOS 上的 GPU 支持未得到积极维护。

# 示例:在 macOS 上构建所需的依赖项(使用 Homebrew):
# brew install cmake ninja ccache opencv openblas

推荐使用 Pip 安装。从源代码构建需要 Visual Studio(例如带 C++ 工具链的 2017, 2019 或 2022 版本)、CMake,并仔细设置 CUDA, cuDNN, OpenCV 和 BLAS 库等依赖项。

构建所需的先决条件可能包括:

  • 安装了 C++ 桌面开发工作负载的 Visual Studio。
  • CMake。
  • Git。
  • CUDA 工具包和 cuDNN(如果进行 GPU 构建)。确保与你的 Visual Studio 版本兼容。
  • OpenCV(预构建或从源代码构建)。
  • 一个 BLAS 库(OpenBLAS 或 Intel MKL)。

如果在 CMake 配置期间需要,请设置环境变量,例如 OpenCV_DIR 和 OpenBLAS_HOME。

主要的云服务提供商提供预装 MXNet 或易于安装的虚拟机 (VMs) 和托管服务:

  • Amazon Web Services (AWS):AWS 深度学习 AMI 预装了 MXNet, CUDA, cuDNN 和 oneDNN。Amazon SageMaker 支持使用 MXNet 进行训练和部署。
  • Microsoft Azure:Azure Machine Learning 服务和 Data Science Virtual Machines (DSVMs) 支持 MXNet。
  • Google Cloud Platform (GCP):GCP 的深度学习 VM 镜像包含 MXNet。AI Platform 也支持 MXNet 训练和预测。

这些云环境通常提供优化构建和易于访问的 GPU 实例。

可以在 Raspberry Pi(例如 3B+, 4)上运行 MXNet,主要用于基于 CPU 的推理。由于资源有限,性能会受到限制。

选项:

  • Pip Wheel:查找社区提供或官方提供(如果可用)的适用于 ARM 架构的 Python wheel 文件。如果存在兼容的 wheel 文件,这是最简单的方法。
  • Docker:如果你的 Raspberry Pi OS 支持 Docker,可能存在兼容 ARM 架构的 MXNet Docker 镜像。
  • 从源代码构建:由于编译时间长且可能存在依赖问题,这具有挑战性。对于高级用户来说,交叉编译可能是一个替代方案。
# 示例:在基于 Raspbian/Debian 的 ARM 系统上构建前安装依赖项:
# sudo apt-get update
# sudo apt-get install -y git cmake build-essential libopenblas-dev python3-dev python3-pip
# 然后尝试构建或安装一个 wheel。

NVIDIA Jetson 设备(例如 Nano, Xavier NX, AGX Orin)是带有 GPU 的强大嵌入式平台,适合运行经过 CUDA 加速的 MXNet。

  1. JetPack SDK:确保你的 Jetson 设备已刷入最新的 NVIDIA JetPack SDK,其中包含 CUDA, cuDNN, TensorRT 和其他必要的库。

  2. Pip Wheel:NVIDIA 或社区通常会为 Jetson 提供预构建的 MXNet wheel 文件。请查阅 NVIDIA NGC, Jetson Zoo 或 MXNet 论坛以获取这些 wheel 文件。这是推荐的方法。

# 示例:(假设命令,请查找实际的 wheel URL/名称)
# pip3 install mxnet-jetson-jp5.1-cuda11.4.whl
  1. Docker:NVIDIA 为 Jetson 提供基础 Docker 镜像(例如 nvcr.io/nvidia/l4t-base)。你可以在这些镜像之上查找或构建 MXNet Docker 镜像。

  2. 从源代码构建:可行,但需要确保你的 CMake 配置针对 Jetson 的架构和 CUDA 能力。在 Jetson 上进行交叉编译或原生编译可能会非常耗时。

# 在安装 MXNet wheel 文件/构建前,使用 Python 所需的通用依赖项:
sudo apt-get update
sudo apt-get install -y libatlas-base-dev libopencv-dev python3-pip
pip3 install --upgrade pip setuptools numpy

请务必查阅 NVIDIA 和 MXNet 社区的最新文档,了解在特定 Jetson 硬件和 JetPack 版本上的安装方法。