正文
好的模型需要大量的数据,反复迭代并达到一定的精确度才能上线,尤其是效果好的深度学习模型,通常需要多张 GPU 卡,训练较长的时间,才能完成,所以这里高性能的分布式机器学习平台,必不可少。
有很多的算法和场景不支持实时更新,本身就存在约束,或者数学证明不成立,或者不支持流式叠加,所以模型还是需要离线训练好之后,再推送到手机端或者其它终端设端。
在线学习(Online Learning)这个领域,模型的持续优化和更新的非常重要,但是总是需要一个基础模型,而这个基础模型的质量,很重要的制约了后续的改进效果。
综合以上 3 点,离线批量处理,依然会是非常重要和核心的场景,不可替代。但是实时流式计算会快速发展,尤其是在推理阶段。主要是因为在深度学习时代:
模型比以前复杂,从浅层模型变成了深度模型,其推理计算不是简单的代数计算。
传输数据比之前大,输入很可能是图片、声音、文本等,对吞吐量要求很高,而对推理过程依然要求在毫秒级别完成。这对推理的性能有更高的要求。
所以相信在未来 1-2 年,这方面,从硬件到软件都将会涌现出很多优秀的初创公司。
InfoQ:计算是机器学习平台的基础,但不是全部,在您看来,一个优秀的机器学习平台需要具备哪些特性?
黄明: 在机器学习界,有些人喜欢把调参和训练的过程,比喻为炼丹, 上升到“道”的层面。而道器相融,在我看来,那炼丹就需要一个好的丹炉了,也就是一个优秀的机器学习平台。它需要能为炼丹提供合适的火候,也就是为创新的模型和算法提供最佳的运行环境。因此,一个机器学习平台要取得成功,最好具备如下五个特点:
1.
精辟的核心抽象
一个机器学习平台,必须有其灵魂,也就是它的核心抽象。当这个核心抽象和它要面对的模型和算法匹配时,这个平台就成功了一半。如果一开始就错误了,例如 SQL 作为平台的核心抽象,那么对后期的发展制约将会非常明显,无异于缘木求鱼,无论怎么努力都不会成功的。
Spark 的 RDD 核心抽象,很好的解决了分布式大数据的通用问题;而 TensorFlow 中 Tensor、Mutable Variables 和 Dataflow Graphs 的 3 个核心抽象,高度概括了深度学习中的各个元素。Angel 目前的核心抽象是 PSModel,重点解决了分布式机器学习中
模型切分
,
数据并行
和
模型并行
,
模式异步
这 3 大问题,基本上可以满足大部分非深度学习的机器学习需求。
2.
充分的性能优化
在核心抽象正确的大前提下,性能是决定速度的关键。这就涉及了到平台层对硬件层的理解、调优和封装。去年我们用 500 台高性能机器,获得了 TeraSort 比赛的冠军,也是这种性能优化能力的体现,并将其嫁接到了 Angel 之上。
现在已经不是 MR 的时代走海量低配机器路线。无论是 CPU 机器,还是 GPU 机器,都在往更强更快的方向走。去年比赛我们用的是很高性能的单机,包括 IBM 的 PowerPC,512G 的内存,多个 NVME 的 SSD,RDMA 的 100G 网络……都是业界顶配。
但是光有硬件堆砌是不够的,平台要对硬件有充分的利用。对于非深度学习,Java 系的莫过于 JVM 的调优了。怎样更好地使用内存,避免 FullGC 的产生,尽量让计算不落地,预读数据流水化处理……这些都是对平台设计的考验。而对于深度学习,CUDA 和 OpenCL 的性能利用,显存和内存的数据拷贝,浮点运算和定点运算的选择,一机多卡的内部通讯……平台都需要进行很多调整,甚至于引入像 XLA 这样的黑科技。
既然是分布式机器学习平台,肯定会涉及到分布式的拓扑结构。目前来看,比较成熟的分布式拓扑结构依然是
MR、MPI、PS
这 3 者。机器学习中,基本上 MR 已经出局了,MPI 凭借深度学习卷土重来,和 PS 分庭抗礼,当然也有整体用 PS、局部用 MPI 的做法,这也未尝不可。在确定网络拓扑之后,就要考虑网络加速了。RDMA 和 NVLINK 这 2 个关键技术很值得关注,也是未来的方向。毕竟数据是直接显存落显存,还是走两次内存,差别是可想而知的,再加上不需要 CPU 开销,对性能带来的影响还是很可观的。
所有这些优化,最后暴露给平台用户的,最好是越简单越好,平台能够依据简单的参数,自动选择最佳的性能通道,这才是对算法工程师和数据科学家意义最大的。
3.
强大的容错能力
谈到容错,不得不再提一下 MPI 和 MR。在 Hadoop 时代,海量低配机器理论的盛行,使 MPI 被 MR 打压得很厉害。但是到了深度学习时代,大家发现这些高配机器和 HPC 也差不了太多,十几万一台的机器,可靠性还是很强的,出错的概率很低,相比之下性能更加重要了,所以 MPI 这种模式又活了过来。
都是从整体来看,规模上去之后,在大型的数据中心,高配版本的 GPU 机器和 T 级别的训练数据,对容错性依然需要取得一定的均衡,这种情况下 PS 模式仍是最合适的。整体架构包括网络的通讯性能是最灵活和鲁棒的,可以做的容灾措施很多,代价也小。最终能够达到的效果会远胜于简单的定期 Checkpoint。
4.
灵活的接口设计