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 的深度学习。

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

    关注

    97

    文章

    3872

    浏览量

    118949
  • 深度学习
    +关注

    关注

    73

    文章

    5219

    浏览量

    119863

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

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

收藏 人收藏

    评论

    相关推荐

    鸿蒙OS元服务开发说明:【WebGL网页图形库开发接口】

    WebGL主要帮助开发者在前端开发中完成图形图像的相关处理,比如绘制彩色图形等。目前该功能仅支持使用兼容JS的类Web开发范式开发
    的头像 发表于 04-02 17:02 189次阅读
    鸿蒙OS元服务<b class='flag-5'>开发</b>说明:【WebGL网页图形库<b class='flag-5'>开发</b>接口】

    机智云开发者中心:让移动APP应用开发更智能化

    在移动应用市场的蓬勃发展中,开发者们面临着不断提高效率和创新的挑战。为了帮助开发者更好地实现移动应用开发的目标,机智云物联网的新版开发者中心,通过自动生成移动APP应用的功能,让应用
    的头像 发表于 03-26 16:45 110次阅读
    机智云<b class='flag-5'>开发</b>者中心:让移动APP应用<b class='flag-5'>开发</b>更智能化

    fpga开发板与linux开发板区别

    FPGA开发板与Linux开发板是两种不同的硬件开发平台,各自具有不同的特点和应用场景。在以下的文章中,我将详细介绍FPGA开发板和Linux开发
    的头像 发表于 02-01 17:09 528次阅读

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

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

    开发板和开发工具指南

    与使用开发环境相比,许多工程师更倾向于将调试点嵌入其代码并使用测试设备来验证其硬件。欧时电子指南将详述开发板和开发工具的优势,并提供关于使用和选择恰当开发工具的实用建议。
    的头像 发表于 10-26 14:35 264次阅读

    新唐开发平台黄金3部曲:第1部,开发

    新唐开发平台黄金3部曲:第1部,开发
    的头像 发表于 08-09 14:18 397次阅读
    新唐<b class='flag-5'>开发</b>平台黄金3部曲:第1部,<b class='flag-5'>开发</b>

    ARM-Linux开发和 MCU开发的不同点 ARM-Linux的基本开发环境

    针对 ARM-Linux 程序的开发,主要分为三类:应用程序开发、驱动程序开发、系统内核开发,针对不同种类的软件开发,有其不同的特点。
    的头像 发表于 08-07 16:23 517次阅读

    Purple Pi OH 开发板体验:固件开发+应用开发

    触觉智能 Purple Pi OH 开发板体验的开发环境,介绍了设备端和应用端的基本知识点
    的头像 发表于 08-04 10:52 538次阅读
    Purple Pi OH <b class='flag-5'>开发</b>板体验:固件<b class='flag-5'>开发</b>+应用<b class='flag-5'>开发</b>

    看看ARM-Linux开发和MCU开发的不同点

    针对ARM-Linux程序的开发,主要分为三类:应用程序开发、驱动程序开发、系统内核开发。针对不同种类的软件开发,有其不同的特点。
    发表于 07-25 09:25 752次阅读

    #应用开发

    应用开发
    未来加油dz
    发布于 :2023年07月12日 18:48:03

    #应用开发

    应用开发
    未来加油dz
    发布于 :2023年07月12日 16:18:49

    ARM-Linux开发和MCU开发的不同点

    针对ARM-Linux程序的开发,主要分为三类:应用程序开发、驱动程序开发、系统内核开发。针对不同种类的软件开发,有其不同的特点。 今天,我
    的头像 发表于 06-22 11:46 666次阅读

    iTOP-3588开发板Android12源码定制开发uboot开发

    iTOP-3588开发板Android12源码定制开发uboot开发
    的头像 发表于 06-06 11:46 984次阅读
    iTOP-3588<b class='flag-5'>开发</b>板Android12源码定制<b class='flag-5'>开发</b>uboot<b class='flag-5'>开发</b>

    ARM-Linux开发和MCU开发的不同点

    针对ARM-Linux程序的开发,主要分为三类:应用程序开发、驱动程序开发、系统内核开发。针对不同种类的软件开发,有其不同的特点。
    的头像 发表于 05-30 09:01 477次阅读

    TuyaOS开发资料大汇总,让物联网开发更简单的神器

    TuyaOSEasyGo是基于TuyaOS操作系统生成的一系列开发资料的统称,主要包含产品开发包和开发框架两部分(点击查看TuyaOS完整介绍)。作为帮助降低物联网开发门槛的重要套件组
    的头像 发表于 04-25 14:31 405次阅读
    TuyaOS<b class='flag-5'>开发</b>资料大汇总,让物联网<b class='flag-5'>开发</b>更简单的神器