TellWorldAI 世界档案
问档案English

首页›产品

产品

Apache MXNet

Apache MXNet 是开源深度学习库,同时提供符号式与命令式写法,可运行在手机到 GPU 集群上,并有 8 种语言接口。论文由陈天奇、李沐等人在 2015 年 12 月发布。

时代 深度学习

发布日期

是什么

MXNet 是一个用来搭建深度神经网络的机器学习库,它从一开始就不是绑定在单一语言上,而是设计成可被多种编程语言使用[1]。作者把它描述为在宿主语言内部把两种写法揉在一起:一种是声明式的符号表达式,先把整个计算描述出来,再交给机器执行;另一种是命令式的张量计算,写到哪一步就算到哪一步[1]。两种写法操作的都是同一类多维数组,区别只在于计算的结构在什么时候被固定下来。

这个库还提供自动微分:训练需要的梯度由用户所描述的计算自动求出来,不必手写[1]。它面向的是异构系统,从手机这样的移动设备,一直到由大量 GPU 组成的分布式集群,都能作为运行目标[1],因此同一套代码要能在差别很大的硬件之间搬动。

由来

MXNet 的论文最早在 2015 年 12 月 3 日由陈天奇(Tianqi Chen)、李沐(Mu Li)和同事发布[1]。项目把自己定位为一个真正开源的深度学习框架,既服务于研究阶段的快速试验,也服务于生产使用[2],今天它以 Apache MXNet 的名字为人所知。

命令式与符号式的混合前端

MXNet 的混合前端(hybrid front end)可以在 Gluon 命令式模式和符号模式之间切换[2]。命令式模式下,一行代码写下去就立刻执行,调试时可以逐句走查模型、打印中间结果、看清是哪一步出了问题。符号模式下,同一个模型先被当成一份完整的声明,整体看清楚了再执行,库因而有机会在执行前对计算做整理和优化。混合前端的作用正是在这两种模式之间来回切换,让「用哪种写法」成为一个工作方式的选择,而不是换一套工具的选择[2]。

分布式训练与多语言接口

分布式的训练可以通过两条路径实现:参数服务器(parameter server)和 Horovod[2]。参数服务器把模型的参数放在一组服务器进程上,工作进程算完梯度再送回汇总更新;Horovod 则是组织多个工作进程之间通信的另一种方式。无论走哪条路径,训练任务都可以铺开到不止一台机器上。

面向使用者的另一头是语言绑定。MXNet 提供 8 种语言的接口,其中 Python 的集成最深入,此外还有 Scala、Julia、Clojure、Java、C++、R 和 Perl[2]。主要用 R 或 Julia 工作的人,调用的是和 Python 用户同一个底层库,不必为此换一套生态。

生态

核心库之外还有一组配套项目:D2L.ai 这本书,以及若干面向具体领域的工具包——面向计算机视觉的 GluonCV、面向自然语言处理的 GluonNLP、面向时间序列的 GluonTS[2]。这些包把各自领域的模型和构件收集起来,搭在核心库之上,使用者不必每个项目都从最基础的张量运算写起。

在发展中的位置

把上面这些放在一起看,MXNet 的设计指向同一个方向:一个库覆盖尽量多的使用方式。它同时提供符号式和命令式两种写法,并由混合前端切换[2];梯度自动求导[1];运行目标从手机一直到 GPU 集群[1];跨机器训练可走参数服务器或 Horovod[2];对外有 8 种语言接口[2]。项目给自己设定的目标,是同时支撑研究原型和生产部署[2],这也是为什么它除了核心引擎,还带着一本书和若干领域工具包。

引用本页: Apache MXNet. TellWorld, https://www.tellworld.net/zh/products/mxnet. 更新于 2026-11-08