Leo Yeh's Blog

AWS 機器學習 (1)

教學目標

初步了解 AWS 機器學習之基本概念。

重點概念

首先目前許多企業組織正在產生、儲存和分析比以往更多的資料,並且隨著機器學習最新的進展,讓我們能透過以大數據為基礎驅動建立業務成果,儘管機器學習演算法已經使用了二十幾年,但是最近幾年機器學習演算法的框架和用於執行演算法的基礎架構已經有非常大幅度的速度提升,也因此能夠透過多次的迭代自動在相對較短的時間內,有效率的將復雜的數學計算應用於大規模的數據集中,為機器學習分析帶來更多可能性,所以越來越多企業開始依賴機器學習來自動化任務,並且為最終客戶提供個人化的服務,同時透過收集和分析來自各種部署的設備和傳感器的資料提高營運效率。

接著資料是每個機器學習專案的基礎,不僅決定了什麼樣的機器學習方法,以及決定哪些基礎設施最適合,並且在專案開始之前我們需要先解決資料來源、資料更新、資料轉換、資料儲存、… 等資料管理相關問題。至於 AWS 雲端服務則主要提供 ETL 處理服務,以利能夠在此期間內提供預處理專案之各個階段的協助,而不同的機器學習演算法可能會有多種方式學習分析的過程,其中可能會擷取,轉換和載入資料,所以我們不同的工作流程階段,皆必須具有儲存基礎架構和資料管理工具。任何機器學習和深度學習預測演算法所需的資料量與建模應用程式和問題的複雜性成正比,為了確定資料集的大小是否足夠,許多數據科學家會落實學習曲線,像是採用 k-fold 交叉驗證資料集之抽樣方法,並且評估最終結果的信賴區間。此外機器學習應用程式需要的資料集通常會從物聯網輸入、資料湖和資料倉儲中取得,而許多客戶主要使用 Amazon Simple Storage 服務 (Amazon S3) 作為其訓練資料集的目標端點,而 Amazon Athena、AWS Glue 和 Amazon Redshift Spectrum 皆主要進行資料 ETL 的處理,並且彼此在功能上互補,將能夠設計為預處理儲存或目標的資料集,而為了提高機器學習演算法的處理速度,我們很直接的想到就是針對運算層的改善,其中包括更快的處理器和更多的內核,然而使用越來越複雜的演算法,將會需要處理更大量的資料工作負載,而導致 I/O 儲存處理時的瓶頸。而若我們需要擴展機器學習的學習工作量,則高效能平行檔案系統,其中中繼資料和 I/O 主要由多個或所有運算節點管理,可以緩解依賴於單個管理節點的文件系統引入的瓶頸,同時優化系統時分散式平行處理的檔案系統效能是最關鍵的決定因素,至於此外深度學習訓練的應用程式需要能夠在低延遲和高輸出量的儲存系統持續提供資料。此時 Amazon S3 就能夠滿足分散式平行處理的檔案系統的效能,如果業務需求不需要更快的訓練速度,則我們能夠以較慢的速度訓練模型,並使用符合這些效能要求的存儲位置,請參考下表。

檔案系統 相對速度
Amazon S3 <1.00
Amazon EFS 1
Amazon EBS 1.29
NVMe 1.4
RAMDisk 1.44
BeeGFS 1.6
Amazon FSx >1.60

但是如果需要高輸出量的大規模分散式平行處理的檔案系統,則建議選擇 Amazon Elastic File System (Amazon EFS)或 Amazon FSx for Lustre (Amazon FSx) 以利彈性擴展至需求。

再來如果將模型用於批次轉換,此時就會對於部署和資料需求高度依賴的問題,則建議透過 Amazon SageMaker Batch Transform 等工具來評估無服務器環境中的模型,此時,則可以提前準備資料,並且使用 Amazon S3 或其它檔案系統將其提供給模型,請注意目前 Amazon S3 單個物件上傳的上限為 5 GB 和檔案大小設定為高達 5 TB,所以我們需要考慮處理的資料大小以及處理速度的業務要求,以利確定要使用的檔案系統。除了將模型用於批次轉換之外,如果將模型用於即時推理,此時就會系統就會更複雜,因為它們僅在短時間內完成即時推理的任務,在這些情況下,我們可能必須分析和調整即時推理管線的每個步驟,以確保推理時間滿足要求,則建議透過 Amazon SageMaker Deployment,該伺服器位於負載平衡器的後方,該負載平衡器能夠自動調整以滿足 API 的請求,這些API 的請求將發送至模型端點,更進一步我們也能夠透過 Amazon SageMaker Neo 部署最主流的深度學習框架模型,以利優化訓練模型。請注意在極端情況下,SageMaker 部署可能會有太多延遲,在這些情況下,如果要找到瓶頸,則我們必須對推理的資料來源、模型路徑,執行模型的硬體以及回應路徑進行廣泛深入分析,才能評估部署模型的位置以及如何執行推理,以及在某些情況下,從不同的資料來源獲取所需的資料可能會受到限制,此時我們就必須重新建立資料存取的模式以利透過機器學習模型進行即時推理。

最後最適合深度學習訓練的架構應該包括 Amazon S3、Amazon EC2、Amazon Virtual Private Cloud (Amazon VPC)、Amazon EC2 Auto Scaling、Amazon CloudWatch、Amazon Elastic File System (Amazon EFS)、Amazon Elastic Kubernetes Service (Amazon EKS)、AWS Identity and Access Management (IAM)、AWS CloudFormation、… 等雲端服務,並且主要會整合使用 AWS CloudFormation 中範本自動建立相關的 AWS 服務能夠快速識別潛在的瓶頸和改進領域,以利提高靈活性、可靠性和透明度確保基礎架構的穩健,以及透過 Amazon EC2 Auto Scaling 將能夠讓應用程式從幾個節點動態擴展到一百多個節點,還能夠為副本集中的資源提供多區域覆蓋,此外當我們更能夠使用 Amazon EKS 上的 Kubernetes 控制容器和使用統一監視和日誌記錄框架建立隔離,以利提供分離作業系統和設備驅動程式層相依的關係。此外在進行大規模執行機器學習時,資料集通常需要預處理步驟來對資料進行分區以實現最佳處理,通常最佳實務的做法是分散至多台伺服器上分散式平行處理資料,至於用於建立機器學習模型的服務架構,則主要取決於資料集的大小和要執行的計算演算法的複雜性,通常建議透過 GPU 用於計算密集型工作負載,透過 FPGA 提供專門的硬體加速,以及建議透過 Memory 執行即時推理,以及針對機器學習工作負載進行優化,通常會限制要分析的資料與改善運算環境中服務彼此之間的延遲。

相關資源

⬅️ Go back