【“群雁计划” 解读第03期】滴滴简枢机器学习平台
点击上方“滴滴科技合作”,选择“置顶公众号”
精彩资讯,即刻送达
导语
滴滴智能出行开放平台是滴滴在“群雁计划”中打造的,面向智能出行领域的人工智能开放平台。在该平台上,滴滴将积累的AI 技术、服务、算力以及多元化的解决方案进行全方位的开放。本文将详细解读滴滴智能出行开放平台的整体架构及未来规划。
系列目录:
滴滴简枢机器学习平台简介
滴滴简枢机器学习平台隶属于滴滴群雁计划的AI基础平台部分,为深度学习任务提供加速研发、训练、生产的能力。
机器学习服务的生产过程通常包括问题定义与分解、数据制备、算法开发、离线训练迭代、在线服务部署等阶段。滴滴简枢机器学习平台支持机器学习业务从模型研究、批量训练到在线预测的全流程,提供实验环境、离线任务和在线服务三大功能。其中实验环境用于模型研究、开发调试;离线任务用于高效批量训练;在线服务用于高可用的在线预测。三大功能底层有自带的网络文件存储、镜像存储以及负载均衡。网络文件存储用于打通环境和存储热数据;镜像存储用于环境快照和分享;负载均衡用于保障在线预测高可用。同时平台具有良好的互操作性,可以与现有hdfs冷存储,spark等大数据平台打通。以上一站式的管理功能让业务能更好的利用平台核心的GPU计算力。
滴滴简枢机器学习平台的能力
滴滴简枢机器学习平台在滴滴内部支撑了人脸识别、语音识别、目标检测、自然语言处理(NLP)、到达时间预估(ETA)等业务的开发实验、离线训练、在线服务等场景,累计拥有3000+注册用户,其中月活跃用户超过600个;运行实验环境1000余个;支持离线训练任务20万+;支撑在线服务300+。滴滴简枢机器学习平台在滴滴内部已经成长为AI研究与生产的高频操作平台。
滴滴简枢机器学习平台之所以能有如此广泛的应用,与其自身的服务能力密不可分:
提升资源使用效能
深度学习算法大都属计算密集型应用,一般都会使用单价较昂贵的GPU服务器,若资源缺乏统筹调度,无法形成规模化效应,资源的使用效率会大打折扣。滴滴简枢机器学习平台借助开源工具Kubernetes实现资源管理和任务调度,使资源使用方能够用即申请,完即释放,从而盘活整个资源大池。
提升开发效率
算法开发最核心的工作是算法的开发和调试,但是开发环境却是一个绕不开的话题:算法开发工程师把大量的时间花在了环境的部署、配置与维护上了,通常构建一套完整的环境是以天为单位的。但是机器学习的开发环境是有共性的,比如一般会集成操作系统、CUDA、Python、TensorFlow、Pytorch、Caffe、Jupyter等。滴滴简枢机器学习平台使用当下盛行的Docker技术,通过将算法环境封装成Docker镜像的方式,结合Kubernetes实现了1次构建、重复使用的效果。对于一些个性化的环境,用户可以自定义镜像,也可把镜像共享给其他用户,在标准化的同时兼顾了灵活性。同时滴滴简枢机器学习平台提供ssh、vnc、jupyter的交互接口,用户可以方便地访问和操作实验环境。借助滴滴简枢机器学习平台,用户从开始申请实验环境到环境交付,基本都是在1分钟的时间内完成的,相较于传统的构建方式提升了百倍以上的效率。
加速离线训练
影响离线训练有2个重要的因素,一个是调超参的效率,一个是训练任务的执行效率。
用户训练时往往需要调超参,而这些超参都是同形的,只是数值上的变化,这种值上的变化后就是一个个独立的任务,需要用户提交任务的流程,而提交流程是重复性的工作;用户在运行多机多卡时需要参数服务器,低效的参数服务器把大量的时间浪费在通信上,这种浪费会加重用户资源使用上的重复。
对于调超参,滴滴简枢机器学习平台对用户的Python代码做语义分析能够自动识别出那些Python变量可能会是需要调整的超参,用户只需要设置变量取值集合就可以自动获取整套参数的模型训练任务以及最终的结果。
对于训练任务的执行效率,滴滴简枢机器学习平台结合自己的硬件特点和通信模式特点,开发了滴滴参数服务器。滴滴参数服务器采取环状结构,实现了高效的RDMA通信的Allreduce算法。环状结构而非中心集中的server-client模式,消除了网络传输可能的带宽竞争和网络拥塞。底层自研的高效RDMA通信库,尽量规避RDMA固有的通信开销,充分挖掘了硬件的属性来提高性能。另外,自研的allreduce算法巧妙重叠了计算和传输,尽量减少了不必要的内存拷贝来减少额外代价,并充分考虑了gpu拓扑、cpu亲和性等硬件属性来提高性能。
相比于市面上的任何一款参数服务器而言,滴滴参数服务器都有着比较明显的优势,在机房40G带宽的RoCE v2 RDMA网络实际测试中,对比业界的openMPI和Nvidia的NCCL2方案,滴滴参数服务器的表现遥遥领先。
此外机器学习的任务计算特点依赖于GPU的高速计算,它们对数据访问延迟有一定要求,这要求必须有足够高的IO带宽做支持;2,用户数量增加,对存储带宽的需求会变的非常大;3,对存储系统来讲,支持Posix接口的要求使得现有技术方案大大减小,另外也需在高可靠性、高性能以及成本之间做折中。滴滴机器学习平台在存储系统上的尝试还是借用传统超算使用的pfs作为整个数据存储的一级,底层网络基础设施使用高带宽的以太网络,使用RoCE协议做RDMA的支持,并往这个方向演进。
赋能在线服务
用户在模型生产后要部署模型服务,就需要解决服务的HA、负载均衡等生产服务问题,每一个在线模型都要解决这类问题。另外,模型服务要上线,为了满足服务的延迟、QPS、资源的约束,需要做从服务、到深度学习框架、到计算库的全栈优化,基本上,大部分模型上线也需要经历这个优化过程。
针对模型服务部署和优化,平台结合自己的场景特点开发了EIS(Elastic Inference Service) serving服务框架、AI智能加速引擎IFX和Autotuning优化库,极大的加速了模型上线部署和优化过程。EIS Serving独创自适应的batch机制,优化RPC协议,解决tensorflow serving的缺陷。以MNIST模型举例,使用相同的硬件资源,EIS Serving 相较于TensorFlow Serving QPS提升2.5倍,延时只有其1/3。
EIS serving框架服务本身不再成为整个服务链路中的瓶颈点,对于一些轻量模型可以有3倍的性能,包括rt和qps的提升, 而对于一般模型,性能热点落在深度学习框架层。因此,针对框架层,自主研发的深度学习框架IFX,并同时适配于GPU服务器和移动端平台。在GPU服务器上,由于CUDA存在context管理的问题,设计实现了一种GPU上的并发机制,有效地绕开了这些问题所带来的额外开销,另外对大量的op做了优化,使得IFX的性能远高于tensoflow乃至tensorRT ;IFX针对移动端的不同硬件配置,比如:流水线长度、顺序乱序、超标量等特点进行指令重排、访存优化,结合业务的计算特点,使得IFX的性能取得不俗的表现.
在IFX的加持下,在线推理在滴滴简枢机器学习平台上的性能表现如下:
在IFX的优化过程中,大量的重复工作基本是在tuning Blas计算,由于硬件架构不同,不同模型的计算量、计算访存比、计算访存模式都不同,在极高性能要求下都需要综合这些具体的情况做针对性的优化。这些优化都是很底层,并且调优都相对繁琐,对于上层服务用户来讲,不必关心这些底层细节,为解决这类问题,平台开发了autotuning工具链,对于用户来讲,只需要把GPU上的二进制代码发给平台,平台就可产生在该GPU平台上几乎是最优,也就是当前最高性能的优化后的二进制代码。
未来展望
当前,滴滴简枢机器学习平台解决了资源统一管理和调度的问题;抽象出了机器学习的开发测试、离线训练、在线服务的场景,提高了机器学习各个环节的工作效率;通过自动调参、参数服务器、高性能网络存储以及SDN等解决方案加速了训练;通过EIS Serving、IFX、Autotuning等产品和解决方案提升了推理性能。
未来,滴滴简枢机器学习平台仍然会从AI解决问题的效率和规模两方面着手,在平台上提供更丰富的功能,比如开发数据市场、算法市场,进一步提升AI开发和训练的效率;开发模型市场,打通AI模型生产者和消费者之间的障碍,进一步解放AI的生产力。同时,借助滴滴人工智能服务的能力,滴滴简枢机器学习平台上也会继续沉淀并推出更多的具体服务,比如:人脸比对、语音识别、翻译等等。
编辑 | 洛羽