博客园  :: 首页  :: 联系 :: 管理

ML平台_设计要点

Posted on 2017-11-14 08:36  天戈朱  阅读(1129)  评论(0编辑  收藏  举报

    如果说机器是人类手的延伸交通工具是人类腿的延伸,那么人工智能就是人类大脑的延伸甚至可以帮助人类自我进化,超越自我。人工智能也是计算机领域最前沿和最具神秘色彩的学科,科学家希望制造出代替人类思考的智能机器,艺术家将这一题材写进小说,搬上银幕,引发人们无限的遐想。然而,作为一门严肃的学科,人工智能在过去的半个多世纪中发展却不算顺利。过去的很多努力还是基于某些预设规则的快速搜索和推理,离真正的智能还有相当的距离,或者说距离创造像人类一样具有抽象学习能力的机器还很遥远。.

    随着大数据和云计算的发展,实现一个高可用、分布式的机器学习平台成为一个基本需求。无论是 Caffe、TensorFlow,还是我们自研的高性能机器学习库,都只是解决数值计算、算法实现以及模型训练的问题,对于任务的隔离、调度、Failover 都需要上层平台实现

    深度学习框架主要提供神经网络模型实现,用于进行模型训练模型训练只是机器学习和深度学习中的一环,除此之外还有数据输入、数据处理、模型预测、业务应用等重要环节。搭建机器学习平台的目的就是整合机器学习、深度学习各环节,为开发者提供一体化服务的平台。预期达到的效果:加快机器学习的开发速度缩减迭代周期;同时能够将计算能力、模型开发能力共享提升开发效率和业务效果也能够将资源合理调度,提高资源利用率

    机器学习训练集群与传统HPC集群(High-Performance Computing 高性能计算集群)有重大区别,分别体现在计算服务器选型、分布式训练、网络设备、存储系统、作业调度系统。

那么设计一个针对机器学习全流程的基础架构平台,需要涵盖哪些功能呢?

  • 首先,必须实现资源隔离。在一个共享底层计算资源的集群中,用户提交的训练任务不应该受到其他任务的影响,尽可能保证 CPU、内存、GPU 等资源隔离。如果使用 Hadoop 或 Spark 集群,默认就会在任务进程上挂载 cgroups,保证 CPU 和内存的隔离,而随着 Docker 等容器技术的成熟,我们也可以使用 Kubernetes、Mesos 等项目来启动和管理用户实现的模型训练任务
  • 其次,实现资源调度和共享。随着通用计算的 GPU 流行,目前支持 GPU 调度的编排工具也越来越多,而部分企业内还存在着 GPU 专卡专用的情况,无法实现资源的动态调度和共享,这必然导致计算资源的严重浪费。在设计机器学习平台时,需要尽可能考虑通用的集群共享场景,例如同时支持模型训练、模型存储以及模型服务等功能,可以对标的典例就是 Google Borg 系统。
  • 然后,平台需要有灵活的兼容性。目前机器学习业务发展迅速,针对不同场景的机器学习框架也越来越多,灵活的平台架构可以兼容几乎所有主流的应用框架,避免基础架构因为业务的发展而频繁变化。目前 Docker 是一种非常合适的容器格式规范,通过编写 Dockerfile 就可以描述框架的运行环境和系统依赖,在此基础上我们可以在平台上实现了 TensorFlow、MXNet、Theano、CNTK、Torch、Caffe、Keras、Scikit-learn、XGBoost、PaddlePaddle、Gym、Neon、Chainer、PyTorch、Deeplearning4j、Lasagne、Dsstne、H2O、GraphLab 以及 MiniFlow 等框架的集成。
  • 最后,需要实现机器学习场景下的 API 服务。针对机器学习的模型开发、模型训练和模型服务三个主要流程,我们可以定义提交训练任务、创建开发环境、启动模型服务、提交离线预测任务等 API,用熟悉的编程语言来实现 Web service 接口。

基于云服务机器学习平台应具备的基本特性:

  • 屏蔽硬件资源保证开箱即用
  • 缩短业务环境部署和启动时间
  • 提供“无限”的存储和计算能力
  • 实现错误容忍和自动故障迁移
  • 提高集群利用率和降低性能损耗 

平台设计还需要考虑和关注内容:

  • 支持通用GPU等异构化硬件
  • 支持主流的深度学习框架接口
  • 支持无人值守的超参数自动调优
  • 支持从模型训练到上线的工作流

在自己维护和搭建机器学习平台,可以考虑基于Kubernetes 的容器调度集群,可以通过管理 CPU、GPU 等异构资源,通过制作 Docker 镜像的方式来支持各种机器学习框架的使用, 在考虑AI基础架构的时候,需要考虑的因素可参照如下图:

参考架构

 


 

Azure AI 总览

AWS AI平台总览

PAI架构图

腾讯

微博

小米

饿了么

Google-like


 

要实现一个 Google-like 的云深度学习平台,大家可以参考下面这三个步骤。

 

当然,要实现一个涵盖数据引入、数据处理、特征工程以及模型评估功能的机器学习平台,我们还需要集成 HDFS、Spark、Hive 等大数据处理工具实现类似 Azkaban、Oozie 的工作流管理工具,在易用性、低门槛方面做更多的工作。

总结

最后总结一下,机器学习的基础架构包含了机器学习算法、机器学习类库以及机器学习平台等多个层次的内容。根据业务的需求,我们可以选择特定的领域进行深入研究和二次开发,利用轮子和根据需求改造轮子同样重要。

在机器学习与人工智能非常流行的今天,希望大家也可以重视底层基础架构,算法研究员可以 理解更多工程的设计与实现,而研发工程师可以了解更多的算法原理与优化,在合适的基础架构平台上让机器学习发挥更大的效益,真正应用的实际场景中。 

参考资料: