跳轉到主要內容
Beplay体育安卓版本平台的博客

如何管理端到端深度學習管道磚嗎

分享這篇文章

深度學習(DL)模型被應用到用例所有行業,欺詐檢測在金融服務領域,個性化的媒體,圖像識別在醫療和更多。使用DL技術越來越廣泛的應用,如今已成為比短短幾年前更容易。受歡迎的DL框架等TensorflowPytorch已經成熟,他們表現良好,與大量的精度。機器學習(ML)環境像磚Lakehouse平台Beplay体育安卓版本管理MLflow使它很容易DL分布式的方式運行,使用工具Horovod熊貓udf

挑戰

今天剩下的一個關鍵挑戰是如何最好地自動化和機器學習實施DL管道控製和可重複的方式。技術,如Kubeflow提供一個解決方案,但他們往往是重量級的,需要大量的專業知識,而很少有管理服務——這意味著工程師必須自己管理這些複雜的環境。將是更簡單的管理DL管道集成到數據和分析平台。Beplay体育安卓版本

這篇文章將概述如何輕鬆地管理DL利用管道磚內的環境磚工作編排,目前公共預覽功能。工作編製使管理多步毫升管道,包括深度學習管道,容易構建、測試和運行在一個時間表。請注意,所有可用的代碼GitHub回購。說明如何訪問它,請看到這篇文章的最後一節。

讓我們看一個實際的業務用例。CoolFundCo(虛構的)投資公司,每天數以萬計的圖像進行分析以確定他們表示和分類的內容。CoolFundCo使用這種技術以各種方式:例如,從全國商場看圖片來確定短期的經濟趨勢。然後公司使用這個作為投資的一個數據點。數據科學家和ML工程師CoolFundCo花很多的時間和精力管理這一過程。CoolFundCo大量的現有的圖像,每一天他們得到了一大批新的圖像發送到雲對象存儲(在這個例子中湖微軟Azure數據存儲(ADLS)),但是它也可以AWS S3穀歌雲存儲(GCS)

典型的圖像分類機器學習工作流程
圖1:典型的圖像分類的工作流程

目前,管理這一過程是一個噩夢。每一天,他們的工程師複製圖像,運行他們的深度學習模型來預測圖像類別,然後分享結果通過保存模型的輸出一個CSV文件。DL模型必須驗證和定期培訓,確保圖像識別的質量,這也是目前手動過程進行的團隊在自己的開發環境。他們常常失去跟蹤最新的和最好的版本的底層毫升模型和圖像他們用於列車當前生產模型。管道發生在外部的執行工具,他們需要管理不同的環境控製的端到端流程。

解決方案

為了使秩序混亂,CoolFundCo是采用磚自動化的過程。開始,他們分離過程分為訓練和得分工作流。

在培訓工作流程,他們需要:

  1. 攝取從雲存儲到集中式lakehouse標記圖像
  2. 使用現有的標記圖像訓練機器學習模型
  3. 注冊新訓練的模型在一個集中的存儲庫中
的端到端體係結構為DL培訓管道
圖2:DL培訓管道的端到端體係結構

每個工作流由一組的任務來實現所需的結果。每個任務使用不同的工具和功能,因此需要不同的資源配置(集群大小、實例類型,CPU與GPU,等等)。他們決定實現這些任務在一個單獨的磚筆記本。該決議架構如圖2所示:

評分工作流程由以下步驟組成:

  1. 攝取新的雲存儲的圖像集中lakehouse
  2. 分數每個圖像從存儲庫使用最新的模型盡可能快
  3. 商店集中lakehouse得分結果
  4. 發送圖片的一個子集手動標記服務來驗證的準確性

DL培訓管道

讓我們來看看每個任務的訓練單獨管道:

  1. 攝取標記圖像從雲存儲到集中式數據湖(所需的基礎設施:大型CPU集群)

這個過程的第一步是加載圖像數據模型訓練成一個可用的格式。(即他們裝載的所有訓練數據。使用磚,新的圖像)自動加載程序增量地和有效地處理新數據文件到雲存儲。自動加載程序功能有助於數據管理和自動處理不斷到達新圖像。CoolFundCo的團隊決定使用自動加載程序的“觸發一次”功能,可以自動加載程序流工作開始,發現任何新的圖像文件自上次培訓工作運行,負載隻有那些新文件,然後關閉流。他們加載所有的圖像使用Apache火花™binaryFile讀者和解析文件名稱和存儲的標簽,作為自己的專欄。binaryFile讀者將每個圖像文件轉換成一個包含原始內容DataFrame中的一條記錄,以及文件的元數據。DataFrame將下麵的列:

  • 路徑(StringType):文件的路徑。
  • modificationTime (TimestampType):文件的修改時間。在一些Hadoop文件係統實現,這個參數可能不可用,將此值設置為默認值。
  • 長度(LongType):文件的長度,以字節為單位。
  • 內容(BinaryType):文件的內容。
raw_image_df=spark.readStream.format \ (“cloudFiles”).option (“cloudFiles。格式”、“binaryFile”) \.option (“recursiveFileLookup”,“真正的”)\.option (“pathGlobFilter”、“* . jpg”) \.load (caltech_256_path)
              image_df=raw_image_df.withColumn(“標簽”,子字符串(element_at(分裂(raw_image_df [“路徑”),' / '),2),1,3)。(IntegerType ())) \.withColumn (“load_date”,當前日期())

然後他們所有的數據寫入三角洲湖表,他們可以訪問和更新整個的培訓和得分管道。三角洲湖增加了可靠性、可伸縮性、安全性和性能湖泊和支持數據倉庫的數據,比如訪問使用標準的SQL查詢,這也是為什麼這種類型的架構也稱為lakehouse。三角洲表自動添加版本控製,所以每次更新表,將顯示新版本添加了圖片。

  1. 使用現有的標記圖像訓練機器學習模型(所需的基礎設施:GPU集群)

第二步是使用過程中其pre-labeled數據訓練模型。他們可以使用Petastorm,一個開源的數據訪問庫,允許深度學習的訓練模型直接從鋪文件和DataFrames火花。他們直接讀取圖像的差值表到火花Dataframe,處理每個圖像到正確的形狀和格式,然後使用Petastorm的火花轉換器生成輸入特性的模型。

converter_train = make_spark_converter (df_train)converter_val = make_spark_converter (df_val)deftransform_row(pd_batch):pd_batch [“特性”]= pd_batch [“內容”]。地圖(λx:預處理(x))pd_batch = pd_batch.drop(標簽=“內容”軸=1)返回pd_batch
              transform_spec_fn = TransformSpec (transform_row,edit_fields = [(“特性”,np。float32 IMG_SHAPE,)),selected_fields = [“特性”,“標簽”])converter_train.make_tf_dataset (transform_spec = transform_spec_fn,cur_shard = hvd.rank (), shard_count = hvd.size (),batch_size = batch_size)作為train_reader, \converter_val.make_tf_dataset (transform_spec = transform_spec_fn,cur_shard = hvd.rank (), shard_count = hvd.size (),batch_size = batch_size)作為test_reader:#特遣部隊。keras隻接受元組,而不是namedtuplestrain_dataset = train_reader。地圖(λx: (x。特性,x.label))steps_per_epoch =len(converter_train) / / (BATCH_SIZE * hvd.size ())test_dataset = test_reader。地圖(λx: (x。特性,x.label))

為了深度學習培訓規模,他們想利用不僅僅是一個大型GPU,但集群GPU。在磚上,可以簡單地通過進口和使用HorovodRunner,一個通用API上運行分布式深度學習工作負載集群使用超級的火花Horovod框架。

使用MLflow,團隊是能夠跟蹤整個模型的訓練過程,包括hyperparameters、培訓時間、損失和精度指標,和模型工件本身,MLflow實驗。MLflow API已經自動對數最常見的ML庫的功能,包括引發MLlib, Keras, Tensorflow, SKlearn XGBoost。此功能自動日誌模型相關的指標、參數和模型工件。在磚上,當使用一個增量訓練數據來源,自動對數還跟蹤數據的版本被用於訓練模型,它允許簡單的再現性的任何訓練的原始數據集上運行。

磚MLflow實驗管理UI
圖4:磚MLflow實驗管理UI
  1. MLflow注冊中心注冊新培訓的模式——(所需的基礎設施:單一節點CPU集群)

他們的模型訓練的最後一步管道來注冊新培訓的模式磚模型注冊表。使用工件存儲在前麵的訓練步驟,他們可以創建一個新版本的圖像分類器。模型從一個新的模型版本暫存,然後生產,他們可以開發和運行其他任務可以驗證模型的性能、可伸縮性和更多。磚模式UI顯示模型的最新狀態(見下文)。

磚MLflow模式UI顯示最新的生產水平ml模式
圖5:模型UI顯示最新的生產水平模型

得分管道

接下來,我們可以看看CoolFundCo得分管道中的步驟:

  1. 攝取新的標記圖像從雲存儲到集中式數據湖(所需的基礎設施:大型CPU集群)

評價過程的第一步是加載新落的圖像數據模型分類成一個可用的格式。他們裝載所有的新圖像使用磚自動加載程序。CoolFundCo再次的團隊決定使用自動加載器的觸發功能,它允許自動加載程序流的工作開始,發現任何新的圖像文件自上次評分工作運行,負載隻有那些新文件,然後關閉流。在未來,他們可以選擇改變這項工作作為一個連續流運行。在這種情況下,新圖像落在他們的雲存儲將撿起和發送到模型得分就到來。

作為最後一步,所有的標記圖像存儲在一個三角洲湖表,它可以訪問和更新的得分。

  1. 取得新的圖片和更新他們的預測三角洲表中的標簽(所需的基礎設施:GPU集群)

一旦新圖像加載到δ表,他們可以運行我們的模型得分筆記本。這個筆記本的所有記錄(圖像)表中,沒有一個標簽或標簽,預測負荷訓練的分類器模型的生產版本在我們培訓管道,使用該模型對每個圖像進行分類,然後更新預測的差值表標簽。因為我們使用的是三角洲的格式,我們可以使用合並成命令來更新表中的所有記錄,有新的預測。

%sql合並image_data我使用僅僅pi.path=p.path匹配然後更新*匹配然後插入*
  1. 發送圖片由Azure手動標記(所需的基礎設施:單一節點CPU)

CoolFundCo使用Azure機器學習標識服務手動標簽新圖像的一個子集。具體地說,他們的圖像樣本DL模型不能使一個非常自信的決定——不到95%確定標簽。他們可以選擇這些圖片很容易從三角洲表,所有的圖像,圖像元數據和標簽預測被存儲為得分管道的結果。這些圖像然後寫入位置被用作標識服務的數據存儲。標識服務的增量更新,圖片發現標記的標簽項目和標記。標簽的輸出服務可以再加工磚和合並成三角洲表,填充圖像的標簽字段。

設置Azure數據標識服務
圖6:設置Azure數據標識服務

工作流部署

一旦訓練、得分和標簽任務筆記本成功地通過了測試,就可以投入生產管道。這些管道將運行培訓,得分和標記過程定期(例如,每日、每周、每兩周或每月)基於團隊的期望的時間表。對於這個功能,新磚”崗位編製功能是理想的解決方案,因為它使您能夠可靠地計劃和觸發器的工作序列包含多個任務依賴關係。每個筆記本是一個任務,他們的整體培訓管道,因此,創建了一個有向無環圖(DAG)。這是一個類似的概念,開源工具Apache氣流創建;然而,好處是整個端到端流程完全嵌入到磚的環境,從而使它非常容易管理,執行和監控這些過程在一個地方。

設置一個任務

每一步或“任務”工作流有自己的分配數據磚筆記本和集群配置。這允許在工作流執行每一步不同集群不同數量的實例,實例類型(內存和計算優化,CPU與GPU),預先安裝的庫,自動伸縮設置等等。它還允許配置參數和傳遞給個人的任務。

為了使用工作編排公共預覽功能,它必須是使磚的工作區工作區管理。它將取代現有的(單任務)的工作特性,無法逆轉。因此最好在一個單獨的磚試試這個工作空間如果可能的話,可能會有兼容性問題與之前定義的單一任務工作。

培訓管道磚工作編排工作流定義在JSON格式可以存儲和複製。這是一個訓練工作流JSON文件的樣子:
圖7:培訓管道磚編排工作
{“email_notifications”:{},“名稱”:“Pipeline_DL_Image_Train”,“max_concurrent_runs”:1,“任務”:【{“existing_cluster_id”:“0512 - 123048 hares793”,“notebook_task”:{“notebook_path”:”奧利弗/回購。koernig databricks_dl_demo /深度學習預科形象——初始數據加載”,“base_parameters”:{“image_path”:“/ tmp / 256 _objectcategories /”}},“email_notifications”:{},“task_key”:“Load_Images_for_Training”},}

圖像得分工作流是一個單獨的工作編製管道每天將執行一次。隨著gpu可能無法提供足夠的優勢形象評分,所有節點使用正則CPU-based計算集群。

得分管道磚編排工作
圖8:得分管道磚編排工作

最後,為了進一步改善和驗證分類的準確性,得分工作流挑選圖片的一個子集,使它們可以手動形象標識服務。在這個例子中,我們使用Azure毫升手冊標識服務。其他雲提供商提供類似的服務。

執行和監控的工作編製管道

當執行工作編製管道,用戶可以查看進度實時查看器的工作。這允許一個簡單檢查管道是否正確運行,已經過去了多少時間。

更多信息關於如何管理崗位編製管道,請參考在線文檔

執行得分管道磚編排工作
圖9:執行得分管道磚編排工作

結論

實施後的DL管道磚,CoolFundCo能夠解決他們的主要挑戰:

  • 所有圖片和標簽位置和存儲在一個集中和管理很容易獲得工程師,數據科學家和分析師。
  • 新產品和改進模型的版本管理和訪問在一個中央存儲庫(MLflow注冊表)。沒有更多的混亂哪些模型是合適的測試或者最新的,哪些可以用於生產。
  • 不同的管道(培訓和評分)可以運行在不同的時間使用不同的計算資源時,即使在相同的工作流。
  • 通過使用磚工作編排,管道發生在相同的磚的執行環境,很容易安排,監控和管理。

使用這個新的和改進的過程,數據科學家和ML工程師現在可以專注於真正重要的東西——獲得深刻的見解,而不是浪費時間爭論毫升Ops-related問題。

開始

本博客的所有代碼可以在下麵找到GitHub庫

https://GitHub.com/koernigo/databricks_dl_demo

簡單的克隆回購到您的工作空間使用磚回購的特性


筆記

演示中使用的圖像是基於Caltech256數據集,可以使用Kaggle如訪問文件係統中存儲的數據集數據磚(DBFS) / tmp / 256 _objectcategories /。如何下載和安裝的一個示例中提供的數據集使用磚筆記本回購:
https://github.com/koernigo/databricks_dl_demo/blob/main/Create%20Sample%20Images.py

有設置筆記本也提供的回購。它包含三角洲表的DDL整個管道使用。它還將我們的圖像數據的一個子集從Kaggle下載得分在上麵的步驟中到一個單獨的文件夾。這個文件夾是DBFS位置/ tmp / unlabeled_images / 256 _objectcategories /和將代表位置標記圖像的土地需要得分時的模型

這個筆記本可以在回購中找到:
https://github.com/koernigo/databricks_dl_demo/blob/main/setup.py

培訓和評分工作也包括在回購中,表示為JSON文件。

目前工作編排UI不允許通過JSON使用UI創建工作。如果你想使用JSON的回購,您將需要安裝磚CLI

一旦CLI安裝和配置,請遵循以下步驟來複製你磚的工作空間:

  1. 克隆在本地回購(命令行):
    git克隆https://github.com/koernigo/databricks_dl_demo
    cd databricks_dl_demo
  2. 創建GPU和non-gpu (CPU集群:
    對於此演示,我們使用一個集群和CPUbased GPUenabled。請創建兩個集群。示例集群規範可以在這裏找到:
    https://github.com/koernigo/databricks_dl_demo/blob/main/dl_demo_cpu.json
    https://github.com/koernigo/databricks_dl_demo/blob/main/dl_demo_ml_gpu.json
    請注意,某些功能在這個集群規範Azure磚特定的(例如,節點類型)。如果您正在運行的代碼在AWS或GCP,您將需要使用等效GPU / CPU節點類型。
  3. 編輯JSON工作規範
    選擇工作要創建JSON規範,例如,培訓管道(https://github.com/koernigo/databricks_dl_demo/blob/main/Pipeline_DL_Image_train.json)。你需要替換的cluster-ids集群與集群您在前麵步驟中創建(CPU和GPU)
  4. 編輯筆記本路徑
    在現有的JSON /回購/回購路徑(電子郵件保護)/…請查找和替換的回購路徑在工作區中(通常是/回購

  5. 使用磚CLI創建工作
    磚的工作創建——json文件Pipeline_DL_Image_train。json -概要
  6. 驗證工作界麵中已經成功地創建了你的工作

的例子磚’我們很容易確認已經成功地創建了DL管道的工作。

免費試著磚

相關的帖子

看到所有Beplay体育安卓版本平台的博客的帖子
Baidu
map