48

人工智能数据流中 Golang 的应用实践

 5 years ago
source link: https://mp.weixin.qq.com/s/NFQixrx3YVptPMOJnkriKw?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

薛磊:Momenta资深研发工程师,前Sun中国工程研究院工程师,专注于分布式系统、存储系统、容器等技术,目前从事深度学习训练平台的基础架构研发。热爱开源和分享,目前是Kubeflow member及多个开源项目contributor。

前言  

目前人工智能非常火,大家所熟知的人脸识别、智能安防、自动驾驶等领域都在应用人工智能技术。但在自动驾驶这个行业中我们能用Go语言做什么事情?今天分享的主要是人工智能数据流的流转方式,也是Golang在Momenta大数据平台当中的应用。

Momenta 大数据平台

eEbyyqm.jpg!web

Momenta的目标是打造自动驾驶大脑,基于深度学习和海量数据,Momenta已经形成服务多个场景的自动驾驶解决方案,解决了逆光、桥、隧道、雨天、夜间、匝道等复杂道路场景。

在实现自动驾驶的过程中,深度学习的算法在训练模型时得有基础数据作支撑,需要大量的图像数据。借助团队极强的研究能力与工程能力,Momenta已经建立起大数据平台、大计算平台、大测试平台三大基础平台,从而实现大数据与AI算法的反馈闭环——以强大的计算资源处理丰富的海量数据,得到更精准、更可靠的算法模型。

其中,大数据平台能够完美处理自动驾驶领域的数据流,具体而言,便是处理收集数据、筛选数据、数据标注、训练模型、模型测试、封装发布的整个过程。

ZZNJv2q.jpg!web

人工智能数据流

数据筛选        

q6Zr2aJ.jpg!web

上图是车辆识别的一个典型,富有中国特色和北京特色——电动车,Momenta目前对电动车、自行车、人力三轮车、三轮电动车等,都能进行识别,并且达到很高的准确度。在人工智能数据流中,数据筛选这一步骤主要有以下作用:

  • 降低成本:无需重复标注已经可以很好识别的素材,降低标注成本,模型运行结果可用于辅助标注;

  • 提高模型训练效率:去除无效素材,提取包含识别目标的素材,提高训练效率;

  • 提高模型训练边际效用:通过对极端情况(corner case)的数据进行针对性训练,可以有效的提高模型性能。

数据标注

经过筛选之后,会有部分图片需要人工标注。基于极强的工程能力,Momenta开发了在线远程众包数据标注系统,实习可视化操作,即便标注人员不懂代码也能远程完成各类标注任务。数据标注的作用主要是提高模型训练精度, 获得更多标注图片,提取包含识别目标的素材,提高训练精度。

模型训练

JFF3UrZ.jpg!web

上图是模型训练的流程图,其中,在数据导入、模型训练和模型验证Momenta都做出了极大的创新。

  • 数据导入:支持多种数据类型,支持多批次数据合并,支持多种组合规则;

  • 模型训练:多机多卡并发训练,共享式集群、支持多人多任务同时进行,支持多种主流训练框架,所有任务由 Kubernetes 自动调度完成;

  • 模型验证:训练所得模型自动在验证集上进行验证,通过验证的模型将进入模型仓库供后续流程使用。

与传统方式相比,Momenta采用的共享集群调度让用户(内部的算法研发人员)可以编写任务描述和训练脚本,而管理员通过网页界面进行集群管理和工作调度。极大地节省人工成本,提高资源利用率,实现集中性管理,提高安全性。

RvINviI.jpg!web

Golang 在人工智能数据流中的应用

Golang在人工智能数据流中主要应用在筛选系统、标注系统和训练系统。

筛选 系统

QJNrai3.jpg!web

Momenta每天可能需要处理几千万张图片,数据量巨大,如果逐一进行标注将给存储带来很大的挑战。解决这个问题的方法就是筛选系统,通过筛选系统,我们将大的数据集拆分为小的单元,每个单元中包含小的任务,而每个单元对应一个 GPU,使用 GPU进行智能筛选。最终只有约10%的图片时需要进行标注的,大大减少了数据标注的成本。

标注系统

Jj2mIvf.jpg!web

Momenta为内部算法研发人员服务的标注系统,可以实现用户管理、任务分发、计费、结算和自动审核。自动审核是比较特殊的,在一般场景和服务中用得比较少,自动审核是指用Momenta的模型来证实用户(在平台上兼职标注的人员)的标注结果是否符合需求或预期,主要是应付较大的用户访问,特别是节假日的时候。(节假日期间平台的用户比较闲,会希望在平台上赚点零花钱。)

训练系统

7B3MBnM.jpg!web

训练系统是基于K8S搭建使用的,能够实现自己的调度。K8S作为容器的调度平台,默认是调度一个pod在不同的机器上面运行的,但是做多机训练可能需要同时使用多个Pod,每个机器上面一个Pod。这样就需要相应的管理以及生命周期的维护,我们这套系统是基于K8S做的开发,承担这样的工作。

机器学习场景下Golang的发展

如果此前没有接触过机器学习?如何能够加入人工智能的浪潮中,学习并进入机器学习领域呢? Go Notebooks、Caffe和Caffe2,TensorFlow-Go几个工具都是很好的工具。接下来将演示如何用TensorFlow的Golang binding做一个简单工具。

基于已有模型(他人训练的模型),对图片进行加载,随后可输出带有标记框的图片,也是模型识别的效果。

所用的代码参考如下:           EZNFRzn.png!web

3IRzU3Z.png!web

建议可尝试用 自己的模型或是TensorFlow官方模型形成小的应用,例如人脸识别。但官方公布的模型精度都不高,原因是数据集较小,Momenta拥有的大数据平台能有效降低人工标注的成本,但大数据的训练往往涉及到多机训练。多机训练已经经历了三个重要时期,我们定义为:史前时代、石器时代和现代文明。

史前时代 zUnAZvE.png!web

多机训练最原始的阶段是直接登录到某几台机器,安装各类训练框架、驱动和网络配置等,在每台机器上跑训练任务,很难进行优化。容器出现后,可被用来避免某些重复的配置,让多机训练进入了下一个时代——石器时代。

石器时代

2M7nAjY.png!web

借助D ocker 将智能框架进行封装,在每台机器上面运行命令。

现代文明

6N3Ar22.jpg!webzqi2QzE.png!web

在现代文明阶段,所有调度和管理工作都通过容器进行,可以同时管理几百台机器。能够进入这个阶段主要是靠众多开源社区的努力和合作,比如 TensorFlow和Kubernetes的强强联合便诞生了Kubeflow。

KubeFlow其实是一些工具的集成或是一些框架,它有官方的自定义资源以及Caffe2的资源。通过KubeFlow,用户只需要敲几行命令便可进行多机的训练,也可以实现简单的模型训练。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK