AWS機器學習 — 資料準備階段

在本文中,我們將使用CRISP-DM框架來討論關於機器學習的資料準備階段。我們同時會介紹一些AWS服務來協助我們的ETL作業(extract/transform/Load),這個作業包含資料清理與準備,來符合機器學習(以下簡稱ML)作業所需。

資料準備工具

我們在AWS機器學習 — 資料收集文章中討論過一些關於ML的資料型態與術語。之後我們介紹了關於用在資料收集的幾種AWS服務,收集的方式可能是streaming或batch的方式。

不過把我們的資料放在S3或Redshift不代表可以馬上用在ML作業上。我們也許需要針對ML作業來準備資料,這一類的作業包含 使用SQL語法來join不同資料來源的不同table,像是客戶資料結合銷售資料來建構一個客戶購買的單一表格。它也許需要進行資料清理,像是把資料格式從CSV轉成Parquet; 移除缺失值(missing values);或把integers轉成floats。最後,我們也許需要使用data-labeling tool來產生一些帶有label的data。

本文中我們將會討論如何將raw data轉換成對ML有用的feature。同時也會聚焦在一些相關針對在進行資料準備階段會用到的AWS工具。

SageMaker Ground Truth

真實案例:自駕車的街景資料
讓我們看一個真實案例,自駕車的鏡頭需要label街道上的任何物體,如車輛,行人,停止標誌,寵物,公車,商店等等之類。我們的技術團隊已經上傳了一大堆經由自駕車鏡頭所拍攝到資料到S3中。現在資料科學家團隊已經確認在S3的是非結構性資料(image data),而我們需要建立一個物體偵測模型在偵測這一大堆image中的物體。但現在狀況在於我們還沒有對這些資料進行label,所以也沒有辦法train這個model。

SageMaker Ground Truth是一個可以讓我們對我們的資料(image/text/audio/tabular)進行label的服務。這一個服務也可以讓我們將labeling task外包給一般群眾(透過 AWS Mechanical Turk)或是自家員工,外包商等花錢的人力。這一個服務是執行image/text labeling這一類作流程程會內建的服務,例如影像分類作業,透過bounding boxes進行物體偵測,segmentation,text classification, entity recognition,video與audio labeling,甚至是3D掃描中的point cloud的 labeling。此外,我們也可以建立一個用這個服務來客製一個workflow。

使用SageMaker Ground Truth,我們可以參閱以下的架構模式。這是用SageMaker Ground Truth作為data labeling工具。

一旦我們建立了在AWS能使用SageMaker Ground Truth的團隊(這個團隊的使用者驗證可以使用AWS Cognito或我們自己的identity provider),每一位labeler都可以用這一個工具標記資料,並且將這個標記結果發送到S3 bucket中。假如多個labelers都標記到相同的labeling task,Ground Truth 就可以aggregate這一些相同的output。

再次回到真實案例:
回到剛剛自駕車的例子,Ground Truth是一個針對要labeling我們資料的一個正確的解決方案。我們可以使用語義分割(semantic segmentation)或 Ground Truth 中的object labeling來識別特定picxel是否屬於特定object或在object周圍繪製bounding boxes。通常,在這種狀況下,我們可能需要標記幾十萬張image,如果用人來手工做,這可能會變得非常貴與耗時。

當ML模型從人類標著者學習到標記的資料時,Ground Truth有一種主動學習的能力。這被稱為automated data labeling。這時模型會自動的標記具有高度信心的image,而把較沒信心的image送回給人類標註者標記資料。這將大大增強我們的標記資料的量能在成千上萬的image分類中。

AWS EMR

這是一個運作在EC2上的託管式的Hadoop cluster ecosystem。EMR可以讓我們選擇之前在Hadoop生態系上的眾多open source tool,像是 Spark for ETL與SparkML for Machine learning, Presto for SQL queries, Flink for stream processing, Pig與Hive的分析與查詢資料,還有Zeppeline的 jupyter-style notebooks。

當我們要執行針對PB等級的資料處理與ETL作業時,AWS EMR特別適合。而針對Hadoop distributed filesystem的資料儲存,EMR使用ERM file system(EMRFS)直接整合S3當作資料存放的位置。

針對ML作業,EMR通常會在ML作業前進行big data的處理。Spark 是一個針對運行在in-memory的open source tool,在大規模的資料進行分散式處理作業。針對Spark jobs的互動式分析,我們可以使用直接使用EMR notebook或SageMaker notebook instance 或SageMaker Studio連接我們的EMR cluster。

AWS SageMaker Processing

EMR可以處理我們PB等級的資料,但有時我們的資料集可能不夠大或我們的資料團隊也許沒有相關的Hadoop/ big data的相關經驗來運行EMR jobs。

在以上的狀況下,我們可以使用SageMaker Processing(直接與SageMaker本身整合)這一類的工具。這一個工具讓我們使用 scikit-learn or PytSpark的處理資料的邏輯,或是我們自己的客製化container。

重點:
SageMaker Processing 非常適合資料科學家來使用,並且雖然它可以使用 PySpark 等處理大量資料,但它是全託管的,底層運算在 AWS 中運行。 EMR 非常適合超大規模資料需求,但它確實需要熟悉 Hadoop ecosystem。EMR底層使用的是EC2 instance,我們可以設定這個EMR cluster是 transient 或 persistent。EMR適合的是 big data engineers。

AWS Glue

我們在AWS機器學習 — 資料收集介紹過AWS Glue與 Glue Crawlers / Glue Data Catalog等,可以進行資料格式的轉換(Parquet to CSV),並且可以偵測資料的型態。

在這裡,我們將討論Glue的ETL功能。與 EMR 相比,它的優勢在於它是serverless — 意即使用者不用管理其底層的基礎設施管理。我們可以使用Python,PySpark或 Scala當作我們的ETL scripts。Glue提供了數個內建的transformation而且甚至可以建立我們的processing script或我們自訂義的scripts。

下圖為一個High-level的Glue workflow。首先,我們需要指向我們的data source與定義一個data crawler去梳理資料,並且將table metadata populate到Glue Data Catalog。現在我們可以對我們的資料run一個 custom processing script。只需將Glue指向我們的資料源和自定義或預建的腳本,然後安排作業或使用事件觸發器來觸發Glue工作流。處理完的output會被放在一個我們定的地點,如S3 bucket或Redshift。Glue的資料來源與目的地可以支援JDBC connectivity(如Redshift/ RDS)甚至是S3。

用Glue當ETL tool

Gule Data Catalog可以被AWS Lake Formation來編目我們的資料。我們還可以使用 Glue Data Catalog作為底層metadata store對 S3 中的資料運行 Athena或 Redshift Spectrum查詢。我們也可以在上圖的轉換步驟中使用 EMR 或 Glue(通過引用 Glue Data Catalog)。

在2020年時,AWS提供了Glue Data Brew服務,這是一種幫助資料科學家對資料採視覺化的方式來inspect/explore data,並定義 transformations與engineer features。在這之後我們可以運行這些transformation(用Glue job)為後續的ML作業來準備我們的資料。

AWS 的AI與機器學習服務介紹我們有介紹到SageMaker Data Wrangler,這是另一種針對ML的資料準備工具,這是在SageMaker中的工具之一。以下的Video有說明SageMaker Data Wrangler與Glue Data Brew的比較。

AWS Athena

這是一個讓我們可以用SQL語法直接Query在S3內的資料,而不必將資料取出S3。我們可以使用Athena運行一個 as hoc queries來explore data, 萃取特定相關的row或cloumn,甚至使用SQL語法進行資料轉換與aggregation/join data。

首先我們需要將table註冊到Glue catalog(我們之前有討論到的),可以參照上圖(用Glue當ETL tool)。我們可以自動的建立一個 Glue Data Catalog或使用 Hive SQL data definition language手動建立。

完成後就可以用Athena來query table了。Athena其背後底層用的是Presto,這是一個用執行Query的分佈式 SQL query engine。

Redshift Spectrum

這是一種很像Athena的分析工具,也是可以直接互動式的query S3中的資料。不同之處在於 Redshift Spectrum需要一個正在運行的 Redshift cluster 和一個連接的 SQL client,這與 Athena 不同。

由於 Spectrum 在 Redshift 上運行,因此它具有 Redshift 等級規模的優勢,並且可以使用大規模平行性在 EB 等級資料上運行。

總結

在本文中,我們討論了不同的AWS工具來針對ML準備資料。要記住的是在資料準備階段中包含了 data ingestion階段,這是資料匯入到一個data repository(如S3 or Redshift)的第一步。資料進入到這些data source後,我們已使用互動式查詢工具(Athena or Redshift),使用AWS Glue來執行ETL作業,並用Glue data catalog來編目我們的資料,或是用EMR(一個Hadoop框架)進行big data processing。為了獲取用於訓練 ML 模型的標記數據,我們可能首先需要使用 SageMaker Ground Truth。

--

--

運用"雲端服務"加速企業的數位轉型願景
運用"雲端服務"加速企業的數位轉型願景

Written by 運用"雲端服務"加速企業的數位轉型願景

我們協助您駕馭名為"雲端運算"的怪獸,馴服它為您所用。諮詢請來信jason.kao@suros.com.tw. https://facebook.com/jason.kao.for.cloud

No responses yet