0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Kubeflo的应用与开发

ml8z_IV_Technol 来源:cg 2019-01-07 14:40 次阅读

本文将介绍以下三部分内容:第一:Kubeflow的应用;第二:基于 Kubeflow 的开发;第三:Momenta深度学习数据流。

ubeflow的应用

为什么要用 Kubeflow?

在一些 GPU 集群较小的机构(例如实验室、科研机构等)中,他们一般只有几台多卡 GPU。实验人员可能会将一台机器或两台机器用于安装各种环境以及 GPU 的驱动,同时使用 Caffe 或 TensorFlow 等工具做模型训练。这种场景较为简单,但会带来一个问题,即人员需要花大量精力管理这几台机器的环境。

为了解决这个问题,降低用户的部署成本,技术人员可以引入容器技术,用 nvidia-docker允许容器使用 GPU,将 TensorFlow、PyTorch 以及 Caffe 封装到 Docker 镜像中,用 nvidia-docker 在物理机上面运行训练任务。

但是以上只是小规模 GPU 集群中的解决方法,一旦集群规模扩大,实验人员就不得不需要解决这些问题:如何合理地分配 GPU 资源?如果让每位用户直接在每台机器上获取资源?技术人员如何进行资源管理、环境维护?2017 年年底发行的 Kubeflow 很好地解决了这些难题,它将训练任务装到容器中,利用 Kubernetes 对 CPU、GPU 等资源进行充分管理。

什么是 Kubeflow?

Kubeflow 可以看作是 Kubernetes + TensorFlow 的成果。它是一个基于 Kubernetes 的机器学习工具项目,支持众多训练框架,包括 TensorFlow、PyTorch、Caffe2、MxNet 等。

Kubeflow 社区在半年多的时间内收集了 4000 多个 stars,发展非常迅速。同时,众多国内公司也助力了 Kubeflow 的发展,贡献了很多项目。例如才云贡献的 tf - operator 项目,Momenta 贡献的 caffe2 - operator 项目。新浪、京东和拼多多也在尝试使用 Kubeflow 解决问题。

在 Kubernetes里部署 Kubeflow的方法有很多,常规方法是用 ksonnet 或单独用 kubectl 手动部署各个 Operator 以及相应的服务。个人用户也可以很方便地体验用 Kubeflow 轻松部署一套用于训练模型的环境。

# CNN_JOB_NAME=mycnnjob # VERSION=v0.2-branch # ks registry add kubeflow-git github.com/kubeflow/kubeflow/tree/${VERSION}/kubeflow # ks pkg install kubeflow-git/examples # ks generate tf-job-simple ${CNN_JOB_NAME} --name=${CNN_JOB_NAME} # ks apply ${KF_ENV} -c ${CNN_JOB_NAME}

以上是直接从 Kubeflow 官网上获取的一个示例。以往在部署环境时,实验人员需要预装很多东西用于模型训练,但如果使用 Kubeflow,他们就可以很简单地跑一个已知数、已知模型。如果在其中加入一些参数,程序就可以跑整个 Kubeflow 的任务(仅以 TensorFlow 为例)。

# arena submit tf --name=tf-git --gpus=1 --image=tensorflow/tensorflow:1.5.0-devel-gpu --syncMode=git --syncSource=https://github.com/cheyang/tensorflow-sample-code.git --env=GIT_SYNC_USERNAME=yourname --env=GIT_SYNC_PASSWORD=yourpwd "python code/tensorflow-sample-code/tfjob/docker/mnist/main.py” # arena list NAME STATUS TRAINER AGE NODE tf-git RUNNING tfjob 0s 192.168.1.120

在这个实例中,arena 是另外一套基于 Kubeflow 的封装,相当于简化版本的命令行。arena 能帮助算法研发人员减少对 kubectl 的使用,通过命令行指定各种算法参数以及要运行的脚本,直接运行 arena submit 来提交训练任务。

基于 Kubeflow的开发

为了满足不同场景需求,目前 Kubeflow 已经拥有许多解决方案,但它们大多比较简单。如果训练数据集较大,需求较复杂,开发任务将会涉及很多块 GPU的使用(例如用 128 块 GPU 训练很多天)。

接下来,我们尝试搭设一个深度学习实验平台。这里需要注意的是,我们定义的是 “实验平台”,因为 Momenta 的算法研究人员在调参、看论文时需要测试各种各样的网络。对他们而言,深度学习实验平台非常重要,而且要满足多种需求。

第一:实验平台需要多机多卡调度。比如研发人员有调度 128 块卡的需求,如果卡不足,就需要等待调度;

第二:多租户。在多用户的环境下共用相同的系统或程序组件,且仍可确保各用户间数据的隔离性;

第三:多训练框架支持。比如 Caffe、TensorFlow、PyTorch 等;其他的还有日志收集、监控信息收集(如 GPU 的使用率)等。

考虑到以上需求,我们设计了一个训练平台架构,如上图所示。我们在 Kubernetes 前面加了一个带状态的 apigateway,它包含用户信息、状态管理、后期审计等功能。架构还包括 caffe2 - operator、mpi - operator和TensorFlow 的 Operator,主要是为了能够统一管理训练任务的生命周期。此外,该架构还支持运用 kube - batch 实现多机多卡的调度期。图中的假设比较简单,每个 Pod都是一个单独的机器。

如何实现多台机器间的通讯也是框架的重点。该设计分为两套环境:

线下的环境使用 Infiniband,借助高速的 RDMA 网络就能很好地解决延迟问题,并提供非常高的带宽;

线上的环境使用 25Gb/s 的以太网,其相对于 Infiniband 延迟过高,所以在多机通讯的过程中,需要包一个聚合再下发,才能解决延迟问题。

底层的数据存储也需要使用分布式数据存储以及图像缓存,基于 Momenta 的数据的特征(不需要对图片进行修改),用户可以在客户端加上一些缓存。比如在客户端安装高速 SSD,使用开源的 fscache 把数据缓存到 SSD 上,保证整个训练过程中数据的高速传输。用相对比较便宜的 SSD确保昂贵的 GPU的充分使用,这是 Momenta 整套训练平台的架构的最大优势之一。

对具有一定操作经验的用户而言,他们更喜欢以命令行的方式操作,习惯用 HPC 领域的 slurm 作为操作工具。为了兼容 slurm 的命令行,Momenta 形成了一套类似 slurm 管理命令行的操作方式。同时,平台也提供 Web 端的操作方式。

上图是一个任务提交的案例,包括以下几点:

定义了几个节点;

每个节点需要几个 GPU;

基于哪些的框架(如 TensorFlow、PyTorch 及 Caffe2 等);

当前的工作任务。

我们之所以做出这样的设计,一个原因是为了兼容旧的使用习惯,让老用户能够无缝迁移。另一个原因是重新设计一套交互方式的时间成本太高,基础架构开发人员需要花很长时间才能了解平台用户在进行深度学习研发的操作行为和操作意图。

Momenta深度学习数据流

在实现自动驾驶的过程中,深度学习算法在训练模型时需要大量图像数据作为支撑。Momenta 平台可以处理自动驾驶领域的数据流。

数据筛选

上图是车辆识别的(电动车)的一个典型。目前,Momenta在电动车识别上准确率较高。在人工智能数据流中,数据筛选有以下作用:

降低成本:无需重复标注即可识别素材,降低标注成本。

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

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

数据标注

经过一轮筛选后,部分图片会需要人工标注。Momenta 开发的在线远程众包数据标注系统允许可视化操作,即便不懂代码的众包人员也能远程完成各类标注任务。数据标注的作用主要是提供更多带标注的图像数据,提供包含更多识别目标的素材,最终提高模型训练精度。

模型训练

上图是模型训练的流程图:

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

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

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

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

结语

Kubeflow基于Kubernetes 和 TensorFlow ,提供了一个数据科学工具箱和部署平台。它具有很多优点,如 DevOps 和 CICD 的支持、多核心支持等。但它的缺点也很明显,就是组件较多,协调较差。

如何利用 Kubeflow 更好地做二次开发?这是当下的一个热点问题,也是 Momenta致力于解决的一大问题,是我们围绕不同级别自动驾驶方案和一级供应商展开合作时首先要解决的一个必要问题。为了见证自动驾驶汽车的落地,为了共同打造更好的人工智能自动驾驶产品,欢迎有想法的小伙伴与我共同探讨基于 Kubeflow 的深度学习。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 无人驾驶
    +关注

    关注

    98

    文章

    4038

    浏览量

    120311
  • 深度学习
    +关注

    关注

    73

    文章

    5493

    浏览量

    121005

原文标题:无人驾驶场景下 Kubeflow 的应用与开发

文章出处:【微信号:IV_Technology,微信公众号:智车科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    云端ai开发环境怎么样

    随着云计算技术的成熟与普及,云端AI开发环境应运而生,为AI开发者提供了一个高效、灵活、可扩展的开发与部署平台。下面,一起探讨云端ai开发环境怎么样。
    的头像 发表于 10-24 09:37 152次阅读

    linux开发板和单片机开发的区别

    硬件架构 Linux开发板和单片机开发在硬件架构上有很大的区别。Linux开发板通常基于ARM、x86或其他处理器架构,具有较高的处理能力和内存容量。而单片机开发则基于微控制器,如80
    的头像 发表于 08-30 15:30 642次阅读

    Linux 驱动开发与应用开发,你知道多少?

    一、Linux驱动开发与应用开发的区别开发层次不同:Linux驱动开发主要是针对硬件设备进行编程,处于操作系统内核层,直接与硬件交互,为上层应用提供设备访问的接口。Linux应用
    的头像 发表于 08-30 12:16 632次阅读
    Linux 驱动<b class='flag-5'>开发</b>与应用<b class='flag-5'>开发</b>,你知道多少?

    鸿蒙OS开发:典型页面场景【一次开发,多端部署】(功能开发

    应用开发至少包含两部分工作: UI页面开发和底层功能开发(部分需要联网的应用还会涉及服务端开发)。前面章节介绍了如何解决页面适配的问题,本章节主要介绍应用如何解决设备系统能力差异的兼容
    的头像 发表于 05-28 17:32 536次阅读
    鸿蒙OS<b class='flag-5'>开发</b>:典型页面场景【一次<b class='flag-5'>开发</b>,多端部署】(功能<b class='flag-5'>开发</b>)

    鸿蒙OS开发:【一次开发,多端部署】(视频应用)

    随着智能设备类型的不断丰富,用户可以在不同的设备上享受同样的服务,但由于设备形态不尽相同,开发者往往需要针对具体设备修改或重构代码,以实现功能完整性和界面美观性的统一。OpenHarmony为开发
    的头像 发表于 05-25 16:29 4488次阅读
    鸿蒙OS<b class='flag-5'>开发</b>:【一次<b class='flag-5'>开发</b>,多端部署】(视频应用)

    鸿蒙OS开发:【一次开发,多端部署】(天气应用)案例

    本章通过一个天气应用,介绍一多应用的整体开发过程,包括UX设计、工程管理及调试、页面开发等。
    的头像 发表于 05-15 15:42 997次阅读
    鸿蒙OS<b class='flag-5'>开发</b>:【一次<b class='flag-5'>开发</b>,多端部署】(天气应用)案例

    HarmonyOS开发案例:【一次开发,多端部署(视频应用)】

    随着智能设备类型的不断丰富,用户可以在不同的设备上享受同样的服务,但由于设备形态不尽相同,开发者往往需要针对具体设备修改或重构代码,以实现功能完整性和界面美观性的统一。OpenHarmony为开发
    的头像 发表于 05-11 15:41 1376次阅读
    HarmonyOS<b class='flag-5'>开发</b>案例:【一次<b class='flag-5'>开发</b>,多端部署(视频应用)】

    HarmonyOS开发:【基于命令行(开发环境)】

    在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发
    的头像 发表于 04-25 17:54 1229次阅读
    HarmonyOS<b class='flag-5'>开发</b>:【基于命令行(<b class='flag-5'>开发</b>环境)】

    鸿蒙开发实战:基于【Markwon】移植和开发

    本项目是基于开源项目**Markwon**进行适用harmonyos的移植和开发的。
    的头像 发表于 03-25 16:27 796次阅读
    鸿蒙<b class='flag-5'>开发</b>实战:基于【Markwon】移植和<b class='flag-5'>开发</b>

    fpga开发板是什么?fpga开发板有哪些?

    FPGA开发板是一种基于FPGA(现场可编程门阵列)技术的开发平台,它允许工程师通过编程来定义和配置FPGA芯片上的逻辑电路,以实现各种数字电路和逻辑功能。FPGA开发板通常包括FPGA芯片、时钟模块、电源模块、输入输出接口等组
    的头像 发表于 03-14 18:20 1853次阅读

    鸿蒙开发用什么语言?

    两种开发方向 我们常说鸿蒙开发,但是其实鸿蒙开发分为两个方向: 一个是系统级别的开发,比如驱动,内核和框架层的开发,这种
    的头像 发表于 01-30 16:12 1500次阅读
    鸿蒙<b class='flag-5'>开发</b>用什么语言?

    鸿蒙开发【应用开发基础知识】

    通过OpenHarmony提供的Stage模型和ArkUI的eTS声明式开发规范,结合简单的Demo,分享学习OpenHarmony/docs/application-dev
    的头像 发表于 01-29 18:46 1329次阅读
    鸿蒙<b class='flag-5'>开发</b>【应用<b class='flag-5'>开发</b>基础知识】

    鸿蒙开发【设备开发基础知识】

    鸿蒙开发基础知识讲解
    的头像 发表于 01-29 18:44 963次阅读
    鸿蒙<b class='flag-5'>开发</b>【设备<b class='flag-5'>开发</b>基础知识】

    鸿蒙next开发-OpenHarmony的NDK开发

    Native API是OpenHarmony SDK上提供的一组native开发接口与工具集合(也称为NDK),方便开发者使用C或者C++语言实现应用的关键功能。
    的头像 发表于 01-20 11:35 1736次阅读
    鸿蒙next<b class='flag-5'>开发</b>-OpenHarmony的NDK<b class='flag-5'>开发</b>

    web前端开发和前端开发的区别

    Web前端开发和前端开发是两个相似但略有不同的概念。本文将详细讨论这两者之间的区别。 定义和范围: Web前端开发是指开发和维护Web应用程序前端部分的过程。Web前端
    的头像 发表于 01-18 09:54 3396次阅读