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

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

    关注

    99

    文章

    4255

    浏览量

    126046
  • 深度学习
    +关注

    关注

    73

    文章

    5590

    浏览量

    123912

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【免费送书】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    Linux系统的设备驱动开发,一直给人门槛较高的印象,主要因内核机制抽象、需深度理解硬件原理、开发调试难度大所致。2021年,一本讲解驱动开发的专著问世即获市场青睐,畅销近万册——这便是《Linux设备驱动
    的头像 发表于 11-18 08:06 450次阅读
    【免费送书】成为硬核Linux<b class='flag-5'>开发</b>者:《Linux 设备驱动<b class='flag-5'>开发</b>(第 2 版)》

    【EK-RA6E2开发指南】开发环境搭建

    瑞萨电子的开发工具有很多,笔者习惯使用MDK开发,因此本文将基于MDK+RA Smart Configurator搭建开发环境。
    的头像 发表于 09-23 18:12 2502次阅读
    【EK-RA6E2<b class='flag-5'>开发</b>指南】<b class='flag-5'>开发</b>环境搭建

    RK3506开发板Linux开发板极致性价比之选

    RK3506开发板Linux开发板极致性价比之选瑞芯微RK3506开发板,3核Cortex-A7@1.5GHz+Cortex-M0,Linux+RT-Thread系统支持,128MB超大
    的头像 发表于 09-11 16:26 2798次阅读
    RK3506<b class='flag-5'>开发</b>板Linux<b class='flag-5'>开发</b>板极致性价比之选

    Linux 应用开发手册

    T507linux应用开发手册
    发表于 08-22 17:01 10次下载

    HarmonyOS 代码工坊的指尖开发,让 APP 开发所见即所得

    过去,移动端 APP 的开发,往往是开发者在桌面仿真界面上的一场“隔空演练”。 虽然市面上已经有一些简化开发的工具,可以在开发桌面提供模拟移动端效果的窗口,但终究不是真实的移动端设备。
    的头像 发表于 06-24 12:08 638次阅读
    HarmonyOS 代码工坊的指尖<b class='flag-5'>开发</b>,让 APP <b class='flag-5'>开发</b>所见即所得

    Java开发者必备的效率工具——Perforce JRebel是什么?为什么很多Java开发者在用?

    Perforce JRebel是一款Java开发效率工具,旨在帮助java开发人员更快地编写更好的应用程序。JRebel可即时重新加载对代码的修改,无需重启或重新部署应用程序,就能让开发者即时看到代码更改的效果,从而缩短
    的头像 发表于 04-27 13:44 648次阅读
    Java<b class='flag-5'>开发</b>者必备的效率工具——Perforce JRebel是什么?为什么很多Java<b class='flag-5'>开发</b>者在用?

    AI开发工具分类与功能

    当下,AI开发工具不仅简化了AI开发的复杂流程,还提高了开发效率,推动了AI技术的广泛应用。下面,AI部落小编为大家介绍AI开发工具的分类及其功能。
    的头像 发表于 04-12 10:12 1044次阅读

    Banana Pi开源社区基于瑞芯微RK3588开发板,DeepSeek开发利器

    Banana Pi开源社区基于瑞芯微RK3588开发板,DeepSeek开发利器
    的头像 发表于 02-19 18:25 3225次阅读
    Banana Pi开源社区基于瑞芯微RK3588<b class='flag-5'>开发</b>板,DeepSeek<b class='flag-5'>开发</b>利器

    华为推出HarmonyOS应用开发赋能套件

    随着鸿蒙生态的快速发展,越来越多的开发者投身于鸿蒙原生应用的开发中。然而,在学习鸿蒙原生应用开发时,许多开发者仍面临一系列问题,如不清楚如何快速入门,如何系统地学习并掌握
    的头像 发表于 02-12 13:57 862次阅读

    鸿蒙北向开发OpenHarmony4.1 DevEco Studio开发工具安装与配置

    OpenHarmony4.1 DevEco Studio开发工具安装与配置,鸿蒙北向开发入门必备!
    的头像 发表于 02-07 17:35 1347次阅读
    鸿蒙北向<b class='flag-5'>开发</b>OpenHarmony4.1 DevEco Studio<b class='flag-5'>开发</b>工具安装与配置

    低代码与传统开发的区别 低代码与无代码开发的区别

    在软件开发领域,传统开发、低代码开发以及无代码开发是三种不同的开发方式,每种方式都有其独特的优势和适用场景。 一、低代码
    的头像 发表于 01-31 10:48 1064次阅读

    AI开发平台如何赋能开发

    当下,AI开发平台通过提供丰富的工具集、优化的开发环境以及高效的部署能力,极大地降低了AI应用的开发门槛,加速了创新步伐。那么,AI开发平台如何赋能
    的头像 发表于 01-17 14:47 721次阅读

    AI开发框架集成介绍

    随着AI应用的广泛深入,单一框架往往难以满足多样化的需求,因此,AI开发框架的集成成为了提升开发效率、促进技术创新的关键路径。以下,是对AI开发框架集成的介绍,由AI部落小编整理。
    的头像 发表于 01-07 15:58 936次阅读

    基于英特尔开发开发ROS应用

    随着智能机器人技术的快速发展,越来越多的研究者和开发者开始涉足这一充满挑战和机遇的领域。哪吒开发板,作为一款高性能的机器人开发平台,凭借其强大的计算能力和丰富的接口,为机器人爱好者和专业人士提供了一个理想的实验和
    的头像 发表于 12-20 10:54 2202次阅读
    基于英特尔<b class='flag-5'>开发</b>板<b class='flag-5'>开发</b>ROS应用

    SSM框架在Java开发中的应用 如何使用SSM进行web开发

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web开发中常用的技术栈。它通过分层架构,实现了视图、控制、业务逻辑和数据访问的分离,提高了代码的可维护性和可扩展性
    的头像 发表于 12-16 17:28 2132次阅读