原标题:人工智能大数据平台中Golang的应用实践

分享人:

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

Momenta成立于2016年,是世界顶尖的自动驾驶公司。其核心技术是基于深度学习的环境感知、高精度地图、驾驶决策算法。在产品方面,Momenta已经形成服务多个场景的自动驾驶解决方案,包括高速环路、城市道路以及泊车场景的高度自动驾驶,目前正围绕不同级别自动驾驶方案与车企和一级供应商展开合作。

前言

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

Momenta大数据平台

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

在实现自动驾驶的过程中,深度学习的算法在训练模型时得有基础数据作支撑,需要大量的图像数据。

借助团队极强的研究能力与工程能力,Momenta已经建立起大数据平台、大计算平台、大测试平台三大基础平台,从而实现大数据与AI算法的反馈闭环——以强大的计算资源处理丰富的海量数据,得到更精准、更可靠的算法模型。

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

人工智能数据流

数据筛选

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

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

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

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

数据标注

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

模型训练

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

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

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

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

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

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

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

筛选系统

Momenta每天可能需要处理几千万张图片,数据量巨大,如果逐一进行标注将给存储带来很大的挑战。

解决这个问题的方法就是筛选系统,通过筛选系统,我们将大的数据集拆分为小的单元,每个单元中包含小的任务,而每个单元对应一个 GPU,使用 GPU进行智能筛选。最终只有约10%的图片是需要进行标注的,大大减少了数据标注的成本。

标注系统

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

数据筛选

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

机器学习场景下Golang的发展

如果此前没有接触过机器学习,如何能够加入人工智能的浪潮中,学习并进入机器学习领域呢?

Go Notebooks、Caffe和Caffe2,TensorFlow-Go几个工具都是很好的工具。接下来将演示如何用TensorFlow的Golang binding做一个简单工具。

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

所用的代码参考如下:

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

史前时代

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

石器时代

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

现代文明

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

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

责任编辑:

golang 大数据平台_人工智能大数据平台中Golang的应用实践相关推荐

  1. 电子商务中的大数据分析——数据平台和人工智能

    作者 | Ayn de Jesus 编译 | CDA数据分析师 ​数字原生电子商务企业习惯于帮助处理其客户提供的数据,以便为营销活动编写副本,运行PPC广告,计算客户生命周期价值以及基于CRM仪表板内 ...

  2. 一文读懂大数据平台——写给大数据开发初学者的话!

     一文读懂大数据平台--写给大数据开发初学者的话! 文|miao君 导读: 第一章:初识Hadoop 第二章:更高效的WordCount 第三章:把别处的数据搞到Hadoop上 第四章:把Hado ...

  3. 建设大数据平台,从“治理”数据谈起

    一 随处可见的数据问题 大数据不是凭空而来,1981年第一个数据仓库诞生,到现在已经有了近40年的历史,而国内企业数据平台的建设大概从90年代末就开始了,从第一代架构出现到现在已经经历了近20年的时间 ...

  4. 大数据平台开发:大数据系统架构模块解析

    企业要开展大数据相关业务,首先就需要基于自身的需求,来设计搭建数据系统平台.而大数据系统平台的搭建,需要基于实际需求,来进行系统架构规划.今天我们就从大数据平台开发的角度,来对大数据系统架构模块做一个 ...

  5. excel导入数据校验_使用Excel数据验证限制日期范围

    excel导入数据校验 Yesterday, one of my clients emailed to let me know that she was having trouble entering ...

  6. 数据平台发展史-从数据仓库数据湖到数据湖仓

    数据平台发展史-从数据仓库数据湖到数据湖仓 做数据的同学经常听到一些数据相关的术语,常见的包括数据仓库,逻辑数据仓库,数据湖,数据湖仓/湖仓一体,数据网格 data mesh,数据编织 data fa ...

  7. [转]关于数据中台、数据平台、数据仓库、数据湖等数据概念的对比解析

    前言 2010年左右,还是在上学的时候,学过一门课程叫<数据仓库与数据挖掘>,那还是属于传统数据的时代,我们会讨论什么是数据仓库?什么是数据集市?数据仓库和数据库有什么区别?等等,当我还在 ...

  8. 深度学习数据自动编码器_如何学习数据科学编码

    深度学习数据自动编码器 意见 (Opinion) When I first wanted to learn programming, I coded along to a 4 hour long Yo ...

  9. 关于数据中台、数据平台、数据仓库、数据湖等数据概念的对比解析

    前言 2010年左右,还是在上学的时候,学过一门课程叫<数据仓库与数据挖掘>,那还是属于传统数据的时代,我们会讨论什么是数据仓库?什么是数据集市?数据仓库和数据库有什么区别?等等,当我还在 ...

最新文章

  1. 软件研发之道——知识产权
  2. STM32 基础系列教程 14 - IIC
  3. 程序员法律考试(7)-民法(4)
  4. idea项目启动不起来_这些教育创业项目你还不知道吗,赶紧收藏起来吧!
  5. Transformer介绍
  6. LeetCode003-无重复字符的最长子串(Length of longest substring)-Rust语言实现
  7. 用Python告诉你,为什么宇宙的尽头是公务员!
  8. appium 切换native/ webview,findby,还有页面元素定位一直小于0的问题的解决
  9. 最小公倍数与最大公约数的研究
  10. Markdown支持的语言
  11. 遗落在时光里的静态链表(线性表的静态存储)---C语言版
  12. qt tabwidget 设置tab 位置_qml创建TabWidget的案例
  13. mysql中编写匿名块_CAD软件中的匿名块怎么创建/编辑?有什么作用?
  14. cad工具箱详细讲解_CAD贱人工具箱的使用教程详解
  15. 免费在线的redmine项目演示,提供免费三级域名
  16. 微信公众号支付——预支付订单
  17. 离散数学:关系的性质
  18. 汉字转拼音 java_Java汉字转拼音工具类完整代码实例
  19. CSS实现横向图片滚动播放
  20. Linux查看隐藏文件和文件夹

热门文章

  1. 论文阅读(联邦学习):Exploiting Shared Representations for Personalized Federated Learning
  2. Rancher配置域名证书
  3. 树莓派上编写串口助手软件
  4. 孫丕恕:計算力已成為數字經濟先行指數 決定未來發展潛力
  5. 二、LoRaWAN Gateway【LoRaWAN实战项目】
  6. xxl-job源码解析(技术分享)
  7. matlab信息隐藏和提取,使用matlab进行图像信息隐藏和提取
  8. 图形界面 V: 列表视图元件 (第二章)
  9. Ubuntu: 安装视频播放器
  10. npm ERR! Error: tunneling socket could not be established的解决问题