0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Kubeflo的應(yīng)用與開發(fā)

ml8z_IV_Technol ? 來源:cg ? 2019-01-07 14:40 ? 次閱讀

本文將介紹以下三部分內(nèi)容:第一:Kubeflow的應(yīng)用;第二:基于 Kubeflow 的開發(fā);第三:Momenta深度學(xué)習(xí)數(shù)據(jù)流。

ubeflow的應(yīng)用

為什么要用 Kubeflow?

在一些 GPU 集群較小的機(jī)構(gòu)(例如實(shí)驗(yàn)室、科研機(jī)構(gòu)等)中,他們一般只有幾臺(tái)多卡 GPU。實(shí)驗(yàn)人員可能會(huì)將一臺(tái)機(jī)器或兩臺(tái)機(jī)器用于安裝各種環(huán)境以及 GPU 的驅(qū)動(dòng),同時(shí)使用 Caffe 或 TensorFlow 等工具做模型訓(xùn)練。這種場(chǎng)景較為簡(jiǎn)單,但會(huì)帶來一個(gè)問題,即人員需要花大量精力管理這幾臺(tái)機(jī)器的環(huán)境。

為了解決這個(gè)問題,降低用戶的部署成本,技術(shù)人員可以引入容器技術(shù),用 nvidia-docker允許容器使用 GPU,將 TensorFlow、PyTorch 以及 Caffe 封裝到 Docker 鏡像中,用 nvidia-docker 在物理機(jī)上面運(yùn)行訓(xùn)練任務(wù)。

但是以上只是小規(guī)模 GPU 集群中的解決方法,一旦集群規(guī)模擴(kuò)大,實(shí)驗(yàn)人員就不得不需要解決這些問題:如何合理地分配 GPU 資源?如果讓每位用戶直接在每臺(tái)機(jī)器上獲取資源?技術(shù)人員如何進(jìn)行資源管理、環(huán)境維護(hù)?2017 年年底發(fā)行的 Kubeflow 很好地解決了這些難題,它將訓(xùn)練任務(wù)裝到容器中,利用 Kubernetes 對(duì) CPU、GPU 等資源進(jìn)行充分管理。

什么是 Kubeflow?

Kubeflow 可以看作是 Kubernetes + TensorFlow 的成果。它是一個(gè)基于 Kubernetes 的機(jī)器學(xué)習(xí)工具項(xiàng)目,支持眾多訓(xùn)練框架,包括 TensorFlow、PyTorch、Caffe2、MxNet 等。

Kubeflow 社區(qū)在半年多的時(shí)間內(nèi)收集了 4000 多個(gè) stars,發(fā)展非常迅速。同時(shí),眾多國(guó)內(nèi)公司也助力了 Kubeflow 的發(fā)展,貢獻(xiàn)了很多項(xiàng)目。例如才云貢獻(xiàn)的 tf - operator 項(xiàng)目,Momenta 貢獻(xiàn)的 caffe2 - operator 項(xiàng)目。新浪、京東和拼多多也在嘗試使用 Kubeflow 解決問題。

在 Kubernetes里部署 Kubeflow的方法有很多,常規(guī)方法是用 ksonnet 或單獨(dú)用 kubectl 手動(dòng)部署各個(gè) Operator 以及相應(yīng)的服務(wù)。個(gè)人用戶也可以很方便地體驗(yàn)用 Kubeflow 輕松部署一套用于訓(xùn)練模型的環(huán)境。

# 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 官網(wǎng)上獲取的一個(gè)示例。以往在部署環(huán)境時(shí),實(shí)驗(yàn)人員需要預(yù)裝很多東西用于模型訓(xùn)練,但如果使用 Kubeflow,他們就可以很簡(jiǎn)單地跑一個(gè)已知數(shù)、已知模型。如果在其中加入一些參數(shù),程序就可以跑整個(gè) Kubeflow 的任務(wù)(僅以 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

在這個(gè)實(shí)例中,arena 是另外一套基于 Kubeflow 的封裝,相當(dāng)于簡(jiǎn)化版本的命令行。arena 能幫助算法研發(fā)人員減少對(duì) kubectl 的使用,通過命令行指定各種算法參數(shù)以及要運(yùn)行的腳本,直接運(yùn)行 arena submit 來提交訓(xùn)練任務(wù)。

基于 Kubeflow的開發(fā)

為了滿足不同場(chǎng)景需求,目前 Kubeflow 已經(jīng)擁有許多解決方案,但它們大多比較簡(jiǎn)單。如果訓(xùn)練數(shù)據(jù)集較大,需求較復(fù)雜,開發(fā)任務(wù)將會(huì)涉及很多塊 GPU的使用(例如用 128 塊 GPU 訓(xùn)練很多天)。

接下來,我們嘗試搭設(shè)一個(gè)深度學(xué)習(xí)實(shí)驗(yàn)平臺(tái)。這里需要注意的是,我們定義的是 “實(shí)驗(yàn)平臺(tái)”,因?yàn)?Momenta 的算法研究人員在調(diào)參、看論文時(shí)需要測(cè)試各種各樣的網(wǎng)絡(luò)。對(duì)他們而言,深度學(xué)習(xí)實(shí)驗(yàn)平臺(tái)非常重要,而且要滿足多種需求。

第一:實(shí)驗(yàn)平臺(tái)需要多機(jī)多卡調(diào)度。比如研發(fā)人員有調(diào)度 128 塊卡的需求,如果卡不足,就需要等待調(diào)度;

第二:多租戶。在多用戶的環(huán)境下共用相同的系統(tǒng)或程序組件,且仍可確保各用戶間數(shù)據(jù)的隔離性;

第三:多訓(xùn)練框架支持。比如 Caffe、TensorFlow、PyTorch 等;其他的還有日志收集、監(jiān)控信息收集(如 GPU 的使用率)等。

考慮到以上需求,我們?cè)O(shè)計(jì)了一個(gè)訓(xùn)練平臺(tái)架構(gòu),如上圖所示。我們?cè)?Kubernetes 前面加了一個(gè)帶狀態(tài)的 apigateway,它包含用戶信息、狀態(tài)管理、后期審計(jì)等功能。架構(gòu)還包括 caffe2 - operator、mpi - operator和TensorFlow 的 Operator,主要是為了能夠統(tǒng)一管理訓(xùn)練任務(wù)的生命周期。此外,該架構(gòu)還支持運(yùn)用 kube - batch 實(shí)現(xiàn)多機(jī)多卡的調(diào)度期。圖中的假設(shè)比較簡(jiǎn)單,每個(gè) Pod都是一個(gè)單獨(dú)的機(jī)器。

如何實(shí)現(xiàn)多臺(tái)機(jī)器間的通訊也是框架的重點(diǎn)。該設(shè)計(jì)分為兩套環(huán)境:

線下的環(huán)境使用 Infiniband,借助高速的 RDMA 網(wǎng)絡(luò)就能很好地解決延遲問題,并提供非常高的帶寬;

線上的環(huán)境使用 25Gb/s 的以太網(wǎng),其相對(duì)于 Infiniband 延遲過高,所以在多機(jī)通訊的過程中,需要包一個(gè)聚合再下發(fā),才能解決延遲問題。

底層的數(shù)據(jù)存儲(chǔ)也需要使用分布式數(shù)據(jù)存儲(chǔ)以及圖像緩存,基于 Momenta 的數(shù)據(jù)的特征(不需要對(duì)圖片進(jìn)行修改),用戶可以在客戶端加上一些緩存。比如在客戶端安裝高速 SSD,使用開源的 fscache 把數(shù)據(jù)緩存到 SSD 上,保證整個(gè)訓(xùn)練過程中數(shù)據(jù)的高速傳輸。用相對(duì)比較便宜的 SSD確保昂貴的 GPU的充分使用,這是 Momenta 整套訓(xùn)練平臺(tái)的架構(gòu)的最大優(yōu)勢(shì)之一。

對(duì)具有一定操作經(jīng)驗(yàn)的用戶而言,他們更喜歡以命令行的方式操作,習(xí)慣用 HPC 領(lǐng)域的 slurm 作為操作工具。為了兼容 slurm 的命令行,Momenta 形成了一套類似 slurm 管理命令行的操作方式。同時(shí),平臺(tái)也提供 Web 端的操作方式。

上圖是一個(gè)任務(wù)提交的案例,包括以下幾點(diǎn):

定義了幾個(gè)節(jié)點(diǎn);

每個(gè)節(jié)點(diǎn)需要幾個(gè) GPU;

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

當(dāng)前的工作任務(wù)。

我們之所以做出這樣的設(shè)計(jì),一個(gè)原因是為了兼容舊的使用習(xí)慣,讓老用戶能夠無縫遷移。另一個(gè)原因是重新設(shè)計(jì)一套交互方式的時(shí)間成本太高,基礎(chǔ)架構(gòu)開發(fā)人員需要花很長(zhǎng)時(shí)間才能了解平臺(tái)用戶在進(jìn)行深度學(xué)習(xí)研發(fā)的操作行為和操作意圖。

Momenta深度學(xué)習(xí)數(shù)據(jù)流

在實(shí)現(xiàn)自動(dòng)駕駛的過程中,深度學(xué)習(xí)算法在訓(xùn)練模型時(shí)需要大量圖像數(shù)據(jù)作為支撐。Momenta 平臺(tái)可以處理自動(dòng)駕駛領(lǐng)域的數(shù)據(jù)流。

數(shù)據(jù)篩選

上圖是車輛識(shí)別的(電動(dòng)車)的一個(gè)典型。目前,Momenta在電動(dòng)車識(shí)別上準(zhǔn)確率較高。在人工智能數(shù)據(jù)流中,數(shù)據(jù)篩選有以下作用:

降低成本:無需重復(fù)標(biāo)注即可識(shí)別素材,降低標(biāo)注成本。

提高模型訓(xùn)練效率:去除無效素材,提取包含識(shí)別目標(biāo)的素材,提高訓(xùn)練效率;

提高模型訓(xùn)練邊際效用:通過對(duì)極端情況(corner case)的數(shù)據(jù)進(jìn)行針對(duì)性訓(xùn)練,有效地提高模型性能。

數(shù)據(jù)標(biāo)注

經(jīng)過一輪篩選后,部分圖片會(huì)需要人工標(biāo)注。Momenta 開發(fā)的在線遠(yuǎn)程眾包數(shù)據(jù)標(biāo)注系統(tǒng)允許可視化操作,即便不懂代碼的眾包人員也能遠(yuǎn)程完成各類標(biāo)注任務(wù)。數(shù)據(jù)標(biāo)注的作用主要是提供更多帶標(biāo)注的圖像數(shù)據(jù),提供包含更多識(shí)別目標(biāo)的素材,最終提高模型訓(xùn)練精度。

模型訓(xùn)練

上圖是模型訓(xùn)練的流程圖:

數(shù)據(jù)導(dǎo)入:支持多種數(shù)據(jù)類型,支持多批次數(shù)據(jù)合并,支持多種組合規(guī)則;

模型訓(xùn)練:多機(jī)多卡并發(fā)訓(xùn)練,共享式集群、支持多人多任務(wù)同時(shí)進(jìn)行,支持多種主流訓(xùn)練框架,所有任務(wù)由 Kubernetes 自動(dòng)調(diào)度完成;

模型驗(yàn)證:訓(xùn)練所得模型自動(dòng)在驗(yàn)證集上進(jìn)行驗(yàn)證,通過驗(yàn)證的模型將進(jìn)入模型倉庫供后續(xù)流程使用;

與傳統(tǒng)方式相比,Momenta 采用的共享集群調(diào)度讓用戶(內(nèi)部的算法研發(fā)人員)可以編寫任務(wù)描述和訓(xùn)練腳本,而管理員通過網(wǎng)頁界面進(jìn)行集群管理和工作調(diào)度。極大地節(jié)省人工成本,提高資源利用率,實(shí)現(xiàn)集中性管理,提高安全性。

結(jié)語

Kubeflow基于Kubernetes 和 TensorFlow ,提供了一個(gè)數(shù)據(jù)科學(xué)工具箱和部署平臺(tái)。它具有很多優(yōu)點(diǎn),如 DevOps 和 CICD 的支持、多核心支持等。但它的缺點(diǎn)也很明顯,就是組件較多,協(xié)調(diào)較差。

如何利用 Kubeflow 更好地做二次開發(fā)?這是當(dāng)下的一個(gè)熱點(diǎn)問題,也是 Momenta致力于解決的一大問題,是我們圍繞不同級(jí)別自動(dòng)駕駛方案和一級(jí)供應(yīng)商展開合作時(shí)首先要解決的一個(gè)必要問題。為了見證自動(dòng)駕駛汽車的落地,為了共同打造更好的人工智能自動(dòng)駕駛產(chǎn)品,歡迎有想法的小伙伴與我共同探討基于 Kubeflow 的深度學(xué)習(xí)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 無人駕駛
    +關(guān)注

    關(guān)注

    98

    文章

    4083

    瀏覽量

    120733
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5511

    瀏覽量

    121362

原文標(biāo)題:無人駕駛場(chǎng)景下 Kubeflow 的應(yīng)用與開發(fā)

文章出處:【微信號(hào):IV_Technology,微信公眾號(hào):智車科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AI開發(fā)平臺(tái)如何賦能開發(fā)

    當(dāng)下,AI開發(fā)平臺(tái)通過提供豐富的工具集、優(yōu)化的開發(fā)環(huán)境以及高效的部署能力,極大地降低了AI應(yīng)用的開發(fā)門檻,加速了創(chuàng)新步伐。那么,AI開發(fā)平臺(tái)如何賦能
    的頭像 發(fā)表于 01-17 14:47 ?28次閱讀

    基于英特爾開發(fā)開發(fā)ROS應(yīng)用

    隨著智能機(jī)器人技術(shù)的快速發(fā)展,越來越多的研究者和開發(fā)者開始涉足這一充滿挑戰(zhàn)和機(jī)遇的領(lǐng)域。哪吒開發(fā)板,作為一款高性能的機(jī)器人開發(fā)平臺(tái),憑借其強(qiáng)大的計(jì)算能力和豐富的接口,為機(jī)器人愛好者和專業(yè)人士提供了一個(gè)理想的實(shí)驗(yàn)和
    的頭像 發(fā)表于 12-20 10:54 ?1223次閱讀
    基于英特爾<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>開發(fā)</b>ROS應(yīng)用

    云端ai開發(fā)環(huán)境怎么樣

    隨著云計(jì)算技術(shù)的成熟與普及,云端AI開發(fā)環(huán)境應(yīng)運(yùn)而生,為AI開發(fā)者提供了一個(gè)高效、靈活、可擴(kuò)展的開發(fā)與部署平臺(tái)。下面,一起探討云端ai開發(fā)環(huán)境怎么樣。
    的頭像 發(fā)表于 10-24 09:37 ?215次閱讀

    linux開發(fā)板和單片機(jī)開發(fā)的區(qū)別

    硬件架構(gòu) Linux開發(fā)板和單片機(jī)開發(fā)在硬件架構(gòu)上有很大的區(qū)別。Linux開發(fā)板通?;贏RM、x86或其他處理器架構(gòu),具有較高的處理能力和內(nèi)存容量。而單片機(jī)開發(fā)則基于微控制器,如80
    的頭像 發(fā)表于 08-30 15:30 ?1085次閱讀

    Linux 驅(qū)動(dòng)開發(fā)與應(yīng)用開發(fā),你知道多少?

    一、Linux驅(qū)動(dòng)開發(fā)與應(yīng)用開發(fā)的區(qū)別開發(fā)層次不同:Linux驅(qū)動(dòng)開發(fā)主要是針對(duì)硬件設(shè)備進(jìn)行編程,處于操作系統(tǒng)內(nèi)核層,直接與硬件交互,為上層應(yīng)用提供設(shè)備訪問的接口。Linux應(yīng)用
    的頭像 發(fā)表于 08-30 12:16 ?876次閱讀
    Linux 驅(qū)動(dòng)<b class='flag-5'>開發(fā)</b>與應(yīng)用<b class='flag-5'>開發(fā)</b>,你知道多少?

    鴻蒙OS開發(fā):典型頁面場(chǎng)景【一次開發(fā),多端部署】(功能開發(fā)

    應(yīng)用開發(fā)至少包含兩部分工作: UI頁面開發(fā)和底層功能開發(fā)(部分需要聯(lián)網(wǎng)的應(yīng)用還會(huì)涉及服務(wù)端開發(fā))。前面章節(jié)介紹了如何解決頁面適配的問題,本章節(jié)主要介紹應(yīng)用如何解決設(shè)備系統(tǒng)能力差異的兼容
    的頭像 發(fā)表于 05-28 17:32 ?630次閱讀
    鴻蒙OS<b class='flag-5'>開發(fā)</b>:典型頁面場(chǎng)景【一次<b class='flag-5'>開發(fā)</b>,多端部署】(功能<b class='flag-5'>開發(fā)</b>)

    鴻蒙OS開發(fā):【一次開發(fā),多端部署】(視頻應(yīng)用)

    隨著智能設(shè)備類型的不斷豐富,用戶可以在不同的設(shè)備上享受同樣的服務(wù),但由于設(shè)備形態(tài)不盡相同,開發(fā)者往往需要針對(duì)具體設(shè)備修改或重構(gòu)代碼,以實(shí)現(xiàn)功能完整性和界面美觀性的統(tǒng)一。OpenHarmony為開發(fā)
    的頭像 發(fā)表于 05-25 16:29 ?4578次閱讀
    鴻蒙OS<b class='flag-5'>開發(fā)</b>:【一次<b class='flag-5'>開發(fā)</b>,多端部署】(視頻應(yīng)用)

    鴻蒙OS開發(fā):【一次開發(fā),多端部署】(天氣應(yīng)用)案例

    本章通過一個(gè)天氣應(yīng)用,介紹一多應(yīng)用的整體開發(fā)過程,包括UX設(shè)計(jì)、工程管理及調(diào)試、頁面開發(fā)等。
    的頭像 發(fā)表于 05-15 15:42 ?1100次閱讀
    鴻蒙OS<b class='flag-5'>開發(fā)</b>:【一次<b class='flag-5'>開發(fā)</b>,多端部署】(天氣應(yīng)用)案例

    HarmonyOS開發(fā)案例:【一次開發(fā),多端部署(視頻應(yīng)用)】

    隨著智能設(shè)備類型的不斷豐富,用戶可以在不同的設(shè)備上享受同樣的服務(wù),但由于設(shè)備形態(tài)不盡相同,開發(fā)者往往需要針對(duì)具體設(shè)備修改或重構(gòu)代碼,以實(shí)現(xiàn)功能完整性和界面美觀性的統(tǒng)一。OpenHarmony為開發(fā)
    的頭像 發(fā)表于 05-11 15:41 ?1532次閱讀
    HarmonyOS<b class='flag-5'>開發(fā)</b>案例:【一次<b class='flag-5'>開發(fā)</b>,多端部署(視頻應(yīng)用)】

    HarmonyOS開發(fā):【基于命令行(開發(fā)環(huán)境)】

    在嵌入式開發(fā)中,很多開發(fā)者習(xí)慣于使用Windows進(jìn)行代碼的編輯,比如使用Windows的Visual Studio Code進(jìn)行OpenHarmony代碼的開發(fā)。但當(dāng)前階段,大部分的開發(fā)
    的頭像 發(fā)表于 04-25 17:54 ?1282次閱讀
    HarmonyOS<b class='flag-5'>開發(fā)</b>:【基于命令行(<b class='flag-5'>開發(fā)</b>環(huán)境)】

    鴻蒙開發(fā)實(shí)戰(zhàn):基于【Markwon】移植和開發(fā)

    本項(xiàng)目是基于開源項(xiàng)目**Markwon**進(jìn)行適用harmonyos的移植和開發(fā)的。
    的頭像 發(fā)表于 03-25 16:27 ?852次閱讀
    鴻蒙<b class='flag-5'>開發(fā)</b>實(shí)戰(zhàn):基于【Markwon】移植和<b class='flag-5'>開發(fā)</b>

    鴻蒙開發(fā)用什么語言?

    兩種開發(fā)方向 我們常說鴻蒙開發(fā),但是其實(shí)鴻蒙開發(fā)分為兩個(gè)方向: 一個(gè)是系統(tǒng)級(jí)別的開發(fā),比如驅(qū)動(dòng),內(nèi)核和框架層的開發(fā),這種
    的頭像 發(fā)表于 01-30 16:12 ?1605次閱讀
    鴻蒙<b class='flag-5'>開發(fā)</b>用什么語言?

    鴻蒙開發(fā)【應(yīng)用開發(fā)基礎(chǔ)知識(shí)】

    通過OpenHarmony提供的Stage模型和ArkUI的eTS聲明式開發(fā)規(guī)范,結(jié)合簡(jiǎn)單的Demo,分享學(xué)習(xí)OpenHarmony/docs/application-dev
    的頭像 發(fā)表于 01-29 18:46 ?1394次閱讀
    鴻蒙<b class='flag-5'>開發(fā)</b>【應(yīng)用<b class='flag-5'>開發(fā)</b>基礎(chǔ)知識(shí)】

    鴻蒙開發(fā)【設(shè)備開發(fā)基礎(chǔ)知識(shí)】

    鴻蒙開發(fā)基礎(chǔ)知識(shí)講解
    的頭像 發(fā)表于 01-29 18:44 ?1067次閱讀
    鴻蒙<b class='flag-5'>開發(fā)</b>【設(shè)備<b class='flag-5'>開發(fā)</b>基礎(chǔ)知識(shí)】

    鴻蒙next開發(fā)-OpenHarmony的NDK開發(fā)

    Native API是OpenHarmony SDK上提供的一組native開發(fā)接口與工具集合(也稱為NDK),方便開發(fā)者使用C或者C++語言實(shí)現(xiàn)應(yīng)用的關(guān)鍵功能。
    的頭像 發(fā)表于 01-20 11:35 ?1846次閱讀
    鴻蒙next<b class='flag-5'>開發(fā)</b>-OpenHarmony的NDK<b class='flag-5'>開發(fā)</b>