Leo Yeh's Blog

📖 earlier posts 📖

SAS Viya (112)

教學目標

初步了解 SAS Micro Analytic Service 的基本概念。

重點概念

首先即時分析系統的架構和和探索分析平台的架構不同,如果將分析內建至作業系統或業務流程中,就會產生許多潛在的影響,此時我們需要持續關注與業務相關應用程式的服務層級協議,所謂服務層級協議主要是服務提供商與客戶之間所定義的正式承諾,其中包括具體達成了承諾的服務指標,因此在建立平台時,我們需要考慮以下幾個方面,分別為:

  1. 高可用性的要求,主要針對端至端的工作流程操作。
  2. 系統回應的時間,主要針對即時分析系統低延遲回應。
  3. 使用整合的模式,主要針對異質平台透過 REST API 整合。
  4. 執行決策的流程,主要針對決策結果透過資料邏輯或模型分析即時產生。
  5. 管理模型的部署,主要針對模型管理是否符合軟體開發生命週期的要求。

接著 SAS Micro Analytic Service (MAS) 主要是提供以記憶體儲存為主的高效能服務,其包括在 SAS Decision Manager、SAS Event Streaming Process 和 SAS Model Manager,至於相關比較資訊,請參考下表。

功能 SAS Decision Manager SAS Event Streaming Process SAS Model Manager
提供 MAS 引擎
提供即時決策
提供串流分析
建立工作流程
管理分析模型
發行 MAS 服務

以及 SAS Micro Analytic Service 主要提供將業務規則和分析模型發行至正式環境中的功能,並且 MAS 主要能夠執行 SAS 程式和 Python 程式,同時支援一次編譯多次執行的使用模式,若我們要在 SAS Micro Analytic Service 中執行 Python 程式,則需要在以下四個設定檔中分別加入設定 MAS_PYPATH 和 MAS_M2PATH 的環境變數指令,並且重新啟動 SAS Viya 平台,或者 SAS Micro Analytic Service 服務,此外若是要透過 SAS StudioV 透過 DS2 的 PyMAS 套件執行 Python 程式,則需要將登入 SAS Stduio V 進行操作的使用者加入至 CASHostAccountRequired 自訂群組中。

1
2
3
4
sudo vi /opt/sas/viya/config/etc/cas/default/cas_usermods.settings
sudo vi /opt/sas/viya/config/etc/sysconfig/microanalyticservice.conf
sudo vi /opt/sas/viya/config/etc/sysconfig/compsrv/default/sas-compsrv
sudo vi /opt/sas/viya/config/etc/workspaceserver/default/workspaceserver_usermods.sh
1
2
export MAS_PYPATH=/usr/bin/python<Version>
export MAS_M2PATH=/opt/sas/viya/home/SASFoundation/misc/embscoreeng/mas2py.py

再來透過 SAS Decision Manager 和 SAS Model Manager 發行至 MAS 引擎之後,MAS 將會自動提供有版本控管和模組管理的 REST API 與客戶端應用程式輕鬆進行整合,同時提供持久性和叢集架構,以利實現可擴展性和高可用性。如果我們透過 SAS Decision Manager 計定管線就能夠很簡單的方式將 Python 程式碼加入至管線的節點中,並且自動轉換為 SAS 程式碼,以利發行至 MAS 中將會自動提供有版本控管和模組管理的 REST API,但若是僅有 SAS Model Manager 則就需要客製轉換 Python 程式碼為 SAS 程式碼,以利發行至 MAS 中,此外針對 SAS Model Manager 中專案的模型屬性,則必須要將 SAS 程式碼檔案設定為「計分程式碼」的角色,並且設定「計分程式碼類型」為「DS2 套件」,以及設定「工具」為「Python3」,否則當發行至 MAS 時會一直出現「找不到計分程式碼」的錯誤資訊。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ds2_options sas;
package myPkg /overwrite=yes;
method transfer( double X1, double X2, in_out double Y);
dcl package logger logr('App.tk.MAS');
dcl package pymas pm;
dcl int revision resultCode;
pm = _new_ pymas();
pm.appendSrcLine('def model(X1, X2):');
pm.appendSrcLine(' "Output: Y"');
pm.appendSrcLine(' if X1 == None:');
pm.appendSrcLine(' X1 = 0');
pm.appendSrcLine(' if X2 == None:');
pm.appendSrcLine(' X2 = 0');
pm.appendSrcLine(' Y = 0.5 + 1 * X1 + 2 * X2');
pm.appendSrcLine(' return Y');
revision = pm.publish(pm.getSource(), 'transfer_model');
rc = pm.useMethod('model');
rc = pm.setDouble('X1', X1);
rc = pm.setDouble('X2', X2);
Y = pm.getDouble('Y');
end;
end;
endpackage;

(註:此 SAS 程式碼主要是一個簡單 Y = 0.5 + 1 × X1 + 2 × X2 轉換的模型函數。)

當我們完成模型發行至 MAS 之後,此時 MAS 就會自動提供有版本控管和模組管理的 REST API,以利我們與客戶端應用程式輕鬆進行整合,以及透過 Jupyter Notebook 直接透過已發行的模型進行即時分析,若是結果一直有問題請先確認 MAS_PYPATH 和 MAS_M2PATH 的環境變數是否設定正確,若是設定不正確,則會無法正常在 MAS 中執行 Python 程式,此外在 MAS 中預設主要是採用 JSON Web Token (JWT) 認證協定搭配 OAuth 2.0 授權框架落實更佳安全且更有效率的 REST API 服務存取機制。

1
2
3
4
5
import requests, json
url = 'http://<SAS Viya URL>/SASLogon/oauth/clients/consul?callback=false&serviceId=app'
headers = {'X-Consul-Token': '<Consul Token>'}
r = requests.post(url, headers=headers)
access_token = json.loads(r.text)['access_token']
1
2
3
4
5
6
7
import requests, json
url = 'http://<SAS Viya URL>/microanalyticScore/modules/pymodel/steps/transfer'
headers = {'Content-Type': 'application/json;charset=utf-8','Authorization': 'Bearer ' + access_token}
data = {"version":2,"inputs":[{"name":"X1","value":1.0},{"name":"X2","value":2.0}]}
r = requests.post(url, headers=headers, json=data)
y = json.loads(r.text)['outputs'][0]['value']
print(y)

(註:其中 pymodel 為專案中模型的名稱,transfer 為執行 Python 模型函數的名稱。)

至於在 MAS 中主要是使用 Python C API 執行 Python 程式,其主要是透過 C 程式碼操作 Python 程式中的物件,並且在 MAS 中能夠將其工作執行緒池中的每個 TK 執行緒產生一個 Python 程序,每個程序皆有本身的 Python 全局解釋器 (GIL),以利消除執行緒安全的問題,同時 Python 程序的負載平衡不需要任何其他功能,因為 TK 工作執行緒池已經有負載平衡的功能,並且每個 Python 程序將與每個執行緒進行相關聯,此外 MAS 和Python 程序之間主要是透過 Socket 來進行通訊,所以透過 SAS Micro Analytics Services 將能夠更安全且更有效率的執行 Python 程式碼。

最後我們還需要考慮軟體開發生命週期的要求,以及正式環境的平台是否支持批次分析和即時分析,在 SAS Viya 平台主要有 CAS 和 MAS,CAS 全名為 Cloud Analytic Service 主要用於批次分析,而 MAS 全名為 Micro Analytic Service 主要用於即時分析,因此我們需要根據需求規劃 CAS 伺服器和 MAS 伺服器資源和部署架構。此外完整的 SAS Viya 平台將依賴於 CAS 和 MAS,CAS 伺服器將主要用於設計處理和模型開發,MAS 伺服器將主要來測試即時模型和整合開發,通常開發環境具有比 MAS 資源更多的 CAS 資源,因為大多數處理工作負載來自模型開發和批次互動,而不是即時事務,至於正式環境則是建議比 CAS 資源更多的 MAS 資源。此外 MAS 更能夠在使用者或業務環境中同時處理多個程式,其中上下文主要是 SAS Micro Analytic Service 執行模組程式的容器,它提供了一個獨立的執行環境,在一個上下文中執行的程式對任何其它上下文皆不可見,並且執行模組可能需要存取外部資料或網站服務,此時就會需進行稽核記錄以根據記錄進行追蹤,此時 SAS Viya 平台中就有提供符合資訊安全政策的完整稽核記錄功能。

相關資源

模型部署 Azure (1)

教學目標

初步了解有關 Azure 進行模型部署的基本概念。

重點概念

首先 Microsoft 在 2019 年所發佈的這篇「Software Engineering for Machine Learning: A Case Study」研究論文中提到機器學習工作流程主要有九個階段,其中有些階段是與資料相關,像是資料收集、資料清理和資料標籤,有些是與模型相關,像是模型需求,特徵工程,模型訓練,模型評估,模型部署和模型監控,此外工作流程中有許多反饋循環,並且模型評估和監控可以循環回任何階段。常見的機器學習工作流程已經在各行業中有許多標準,像是 CRISP-DM,其在資料科學和資料的上下文中定義具有共通性,儘管存在細微差別,但這些仍然存在共同的過程和以資料為中心的本質。而不同階段之間的多個反饋循環,在模型需求階段,模型設計師需要決定哪個機器學習模型和功能是可行的,並且對於給定的現有產品或對於給定的現有產品可能有用,最重要的是在這個階段我們也會做出決定什麼類型的模型最適合所給定的問題。在資料收集階段中,團隊將會尋找和整合可用的資料集,像是內部、開源或外部收集,資料清理階段主要涉及從中刪除不準確或雜訊的資料,資料標籤階段則為每筆記錄分配適當的標籤,大多數監督學習技術皆需要標籤才能夠訓練模型,特徵工程階段則是指執行提取和選擇機器學習的資訊功能的所有活動,對於某些模型在此階段就不是那麼明確,因為經常與下一個階段融為一體,像是卷積神經網路。在模型訓練階段則是針對模型需求、資料收集、資料清理、資料標籤和特徵工程的輸出對應至模型的輸入進行訓練產生模型,模型評估階段則主要是評估輸出模型,並且使用預先定義的指標測試或保護資料集進行人工評估之後,才會產生推理程式碼進行模型部署階段,以及在實際執行期間持續進行模型監控階段。

接著機器學習工作流程是高度非線性,並且包含許多反饋循環,像是如果工程師注意到訓練資料之間存在的分佈和現實世界中的資料是一樣時,則會需要回去收集更多有代表性的資料,並且重新執行工作流程。同樣也可能會重新審查建模的選擇。此外反饋循環不僅在敏捷性軟體開發中是常見的工作流程,更在機器學習的工作流程中將會是非常棒的應用,因為最佳模型需要不斷進行實驗,事實上工程師進行機器學習的日常工作涉及對所選模型的頻繁迭代,超參數和資料集細化,這些工作流程將能夠成為綜合的系統,其中包括更複雜的內容,並且將多個複雜的機器學習元件在一起進行意想不到的互動方式,至於建立應用程式和平台與訓練和部署機器學習模型主要有三個基本的差異,分別為:

  1. 機器學習模型與資料非常相關,所以在於資料來源、資料管理和版本控管方面相對更複雜。
  2. 機器學習模型比起軟體工程的模組更難以維護嚴格的模組之間的界限,導致在訓練期間造成影響。
  3. 機器學習模型需求需要可客製和可擴展,所以團隊不僅擁有軟件工程技能,並且需要有足夠深入的機器學習知識,以利從頭開始建立、評估和調整模型。

當我們確定了機器學習系統架構和需求的各個方面,需要在此期間加以考慮系統設計,避免日後的技術債,其中一些方面包括隱藏的模型反饋循環、模型元件整合、模型品質狀態、現實世界與評估資料集之間對應不適當、… 等問題,同時最近討論了基於機器學習軟體對風險和安全性有何影響,在過去的五年裡產業界已經多次努力使這一過程自動化,透過建立框架和環境來支持機器學習的工作流程及其實驗性質。此時當建立大規模機器學習應用程式和平台,我們需要有在軟體工程領域有關機器學習的最佳實務,主要有七大項目,分別為:

  1. 端到端管線支援。
  2. 資料可用性、收集、清理和管理。
  3. 教育和培訓。
  4. 模型調整和解釋。
  5. 模型評估和部署。
  6. 法規遵循。
  7. 各種感知服務。

其中我們針對第一項目端到端管線支援更進一步深入了解,所謂端到端管線支援主要指隨著機器學習元件變得更加成熟,並且整合至更大的軟體系統時,則需要具有無縫的開發經驗能夠包括所描述的所有不同階段,此外自動化就會變得非常重要,然而為實現此目標,傳統機器學習模型和軟體工程模組相比具有不同的特性,因此軟體元件的整合程度將會具有挑戰,像是發現內在不確定性的變化或錯誤,以資料驅動的學習演算法和復雜隱藏反饋循環將引起的元件彼此的影響,即使在特定階段,將也可能會發生重大的影響,以及由於更多的迭代實驗是機器學習開發的本質,因此統一和自動化軟體將會有效減少日常工作流程所花費的時間,並且促進該領域的發展,此時企業需要利用內部基礎設施,或者建立專門自動化的機器學習管線支援,主要支援模型需求、訓練、評估、監控和部署,並且提供儀表板資訊即時顯示對於模型生命周期有價值的資訊,有助於團隊在發生問題時的第一時間進行的有效模型管理,避免造成重大的影響。

再來 Microsoft 針對模型管理則是提出使用 Azure Machine Learning 服務來管理模型的生命週期,並且使用機器學習服務作業 (MLOps) 的方法,更進一步改善機器學習解決方案的品質和一致性,並且提供從任何地方部署機器學習專案、監視機器學習應用程式的操作和相關問題、擷取建立機器學習生命週期的端對端稽核記錄所需的資料以及自動化使用 Azure Machine Learning 和 Azure DevOps 的端對端 ML 生命週期持續更新模型和測試新的模型,以利用於其它應用程式整合應用。其中從任何地方部署機器學習專案主要會先將訓練程式轉換成可重現的管線之後,註冊和追蹤機器學習模型,已註冊的模型是透過名稱和版本來識別,每次註冊與現有模型名稱相同的模型時,登錄都會遞加版本,並且能夠使用程式碼解析判斷要部署模型時使用適當的 CPU 和記憶體設定,以及使用所提供的資料進行模型評估,此外若轉換模型為 ONNX 格式的模型將能夠改善效能,平均而言將能夠產生二倍的效能提升,當完成模型評估之後會將最佳模型部署到生產環境,它會封裝成 Docker 容器映像檔,在大部分情況下建立的容器映像檔會自動在背景中進行模型部署。

最後 Microsoft 更有提供有關模型管理生命週期的解決方案的參考架構主要說明如何實作持續整合和交付 (CI / CD) 以及使用 Azure DevOps 和 Azure Machine Learning 的應用程式的重新訓練機器學習模型的管線。此解決方案建主要基於建立管線、重新訓練管線和發行管線。所謂建立管線主要當每次程式碼簽入,則取得觸發持續整合的管線,並且會進行單元測試和測試資料,所謂重新訓練管線會協調以非同步方式重新訓練模型、評估模型和註冊模型,所謂發行管線主要會執行評分的映像檔,並且安全地跨不同環境進行容器執行環境的部署,以及進行簡單的 API 測試可確保成功部署的容器映像檔,更進一步能夠將容器映像檔部署至正式環境的容器管理平台 Azure Kubernetes Service ,以利提供高效能、可擴展性和高可用性的評分服務。

相關資源

SAS Viya (111)

教學目標

初步了解 SAS Python DLPy 套件匯入和匯出 ONNX 格式的模型的基本概念。

重點概念

首先 ONNX (Open Neural Network Exchange) 主要是一套開放神經網路交換格式,由 Facebook 和 Microsoft 結盟所推出,並且獲得 SAS、Amazon、IBM、Intel、AMD、ARM、… 等廠商的支援,我們將能夠透過 ONNX 格式來使用所選擇的任何深度學習框架來設計、訓練和部署深度學習模型,同時 ONNX 格式能夠在不同深度學習框架格式之間輕鬆進行互通,以利讓不同標準的深度學習模型可以互相轉換,加快人工智慧的發展,像是 Google 的 TensorFlow、Amazon 的 MXNet、Facebook 的 Caffe2/PyTorch、Microsoft 的 CNTK、… 等等。至於 SAS Viya 平台目前也能夠透過 SAS Python DLPy 套件匯入和匯出 ONNX 格式的模型,同時更能夠將匯入的深度學習模型儲存為 SAS SAS ASTORE 分析儲存檔,以利能夠透過 REST API 部署至應用程式中,至於目前已經有哪些 ONNX 格式的模型能夠使用呢?我們則能夠透過 ONNX Model Zoo 網站 下載最新的深度學習模型,並且已經測試為目前最優的效能。

接著我們將能夠透過官方所提供的 Python 範例程式碼 將其中一種 ONNX 格式的模型匯入至 SAS Viya 平台中進行影像辨識的操作,以下將進行詳細說明。至於所謂 ONNX 格式主要定義了一種可擴充套件的計算圖模型,並且內建運算單元和標準資料類型,以及每一個計算流程圖皆定義為由節點所組成的列表,同時建立為有向無循環圖,其中每一個節點皆有一個或多個輸入和輸出,而每一個節點也稱為運算單元,此外更進一步 ONNX 格式採用的是 Protobuf 序列化資料結構協定用於儲存神經網路的權重資訊,然後能夠讓各種程式語言進行讀取和寫入,因此 ONNX 格式為一種通用的計算圖,能夠讓不同深度學習框架所建立的計算圖皆能夠進行轉換。

下載 ONNX 格式的 ResNet50 模型檔案

1
$ wget https://s3.amazonaws.com/onnx-model-zoo/resnet/resnet50v1/resnet50v1.onnx

初始化設定操作環境

1
2
3
4
5
6
7
import os
os.environ['CAS_CLIENT_SSL_CA_LIST']='/opt/sas/viya/config/etc/SASSecurityCertificateFramework/cacerts/vault-ca.crt'
import swat, onnx, warnings
from dlpy import Model
from dlpy.images import ImageTable
warnings.filterwarnings('ignore')
s = swat.CAS("<SAS Viya URL>", 5570, "<Username>", "<Password>")

載入和匯入 ONNX 格式模型

主要指定用於訓練此模型的預處理,像是比例和偏移。

1
2
3
4
5
6
onnx_model = onnx.load_model('resnet50v1.onnx')
model1 = Model.from_onnx_model(s,
onnx_model,
output_model_table='resnet50v1',
scale=0.0173611,
offsets=[2.155, 2.027, 1.804])
1
2
3
4
NOTE: Successfully written weights file as /data/resnet50v1_weights.onnxmodel.h5
NOTE: Model table is attached successfully!
NOTE: Model is named to "resnet50v1" according to the model name in the table.
NOTE: Successfully imported ONNX model.

若是沒有 SAS Visual Data Mining and Machine Learning 的授權碼,則在執行時就會出現以下錯誤。

1
2
3
4
NOTE: Successfully written weights file as /data/resnet50v1_weights.onnxmodel.h5
ERROR: Could not find extension: (tkdl)
ERROR: Action set 'deeplearn' was not loaded due to errors.
ERROR: The action stopped due to errors.

取得深度學習模型基本資訊

1
model1.get_model_info()
Descr Value
0 Model Name resnet50v1
1 Model Type Convolutional Neural Network
2 Number of Layers 126
3 Number of Input Layers 1
4 Number of Output Layers 1
5 Number of Convolutional Layers 53
6 Number of Pooling Layers 2
7 Number of Fully Connected Layers 0
8 Number of Batch Normalization Layers 53
9 Number of Residual Layers 16

取得深度學習模型摘要資訊

1
model1.print_summary()
Layer Id Layer Type Kernel Size Stride Activation Output Size Number of Parameters
0 data input None (224, 224, 3) (0, 0)
1 resnetv17_conv0_fwd convo (7, 7) 2 Identity (112, 112, 64) (9408, 0)
2 resnetv17_batchnorm0_fwd batchnorm Rectifier (112, 112, 64) (0, 128)
3 resnetv17_pool0_fwd pool (3, 3) 2 Max (56, 56, 64) (0, 0)
4 resnetv17_stage1_conv3_fwd convo (1, 1) 1 Identity (56, 56, 256) (16384, 0)
5 resnetv17_stage1_batchnorm3_fwd batchnorm Identity (56, 56, 256) (0, 512)
121 resnetv17_stage4_conv9_fwd convo (1, 1) 1 Identity (7, 7, 2048) (1048576, 2048)
122 resnetv17_stage4_batchnorm9_fwd batchnorm Identity (7, 7, 2048) (0, 4096)
123 resnetv17_stage4__plus2 residual Rectifier (7, 7, 2048) (0, 0)
124 resnetv17_pool1_fwd pool (7, 7) 1 Mean (1, 1, 2048) (0, 0)
125 resnetv17_dense0_fwd output (2048, 1000) Softmax 1000 (2048000, 1000)

再來當我們將 ONNX 格式的 ResNet50 模型匯入至 SAS Viya 平台中,下一步就能夠透過進行影像辨識的預測分析,但是需要先從 ONNX 模型所產生的 H5 檔案中載入權重資訊至 SAS Viya 平台的深度學習模型中。至於所謂 H5 檔案主要是階層資料格式 (Hierarchical Data Format, HDF) 用來設計儲存和組織大量資料的一組檔案格式,其最初開發於美國國家超級計算應用中心,現今則用於儲存科學資料的檔案格式。此外 H5 檔案在記憶體佔用、壓縮大小和存取速度方面皆有非常優秀的特性,因此在工業領域和科學領域皆有很多應用,而 H5 檔案內部的資源主要是透過類似 POSIX 的語法進行存取 (/path/to/resource),並且簡化檔案結構僅包括兩種主要的物件類型,分別為資料集和群組,資料集主要是同質類型的多維陣列,群組主要是持有資料集和其他群組的容器結構,同時中繼資料是由使用者定義,以命名屬性的形式附加至資料集和群組中,因此任何複雜的儲存格式皆能夠透過資料集、群組和屬性來建立,當然由於使用 B-tree 來進行索引表格物件,所以更有效應用於時間序列資料,大量資料直接進入表格物件中,因此可以比 SQL 資料庫的欄位儲存方式有更佳的存取效能。

載入權重資訊至深度學習模型

1
model1.load_weights('/data/resnet50v1_weights.onnxmodel.h5', labels=True)
1
2
3
4
NOTE: Cloud Analytic Services made the uploaded file available as table NEW_LABEL_TABLE_HAMREG in caslib CASUSER(sasdemo01).
NOTE: The table NEW_LABEL_TABLE_HAMREG has been created in caslib CASUSER(sasdemo01) from binary data uploaded to Cloud Analytic Services.

NOTE: no dataspec(s) provided - creating image classification model.
NOTE: Model weights attached successfully!

下載需要進行辨識的照片檔案

1
2
$ cd /data/images
$ wget https://upload.wikimedia.org/wikipedia/commons/6/66/An_up-close_picture_of_a_curious_male_domestic_shorthair_tabby_cat.jpg

透過深度學習模型進行影像辨識

1
2
3
4
img = ImageTable.load_files(s, path='/data/images')
img.resize(224)
model1.evaluate(img)
model1.plot_evaluate_res()

最後匯出模型檔案的格式主要有三種,分別為 SAS 資料集格式、SAS 分析儲存格式和 ONNX 格式,所謂 SAS 資料集格式就是儲存至 SAS Viya 平台中的 CAS 資料表,所謂 SAS 分析儲存格式就是儲存為 SAS ASTORE 分析儲存檔,可用於 SAS Event Streaming Processing 即時串流分析之即時評分的情境應用,所謂 ONNX 格式就是用於儲存模型的開放神經網路交換格式。因此建模人員能夠 SAS 官方所提供的 DLPy 套件匯入針對經典情境預先訓練的 ONNX 模型,並且匯出成 SAS ASTORE 分析儲存檔,更進一步用於 SAS Event Streaming Processing 進行即時串流分析之即時評分的情境應用。

匯出模型檔案為 SAS ASTORE 分析儲存檔

1
model1.deploy(path='/tmp', output_format='astore')
1
NOTE: Model astore file saved successfully.

相關資源

模型部署 TensorFlow (1)

教學目標

初步了解有關 TensorFlow Extended 進行模型部署的基本概念。

重點概念

首先當我們需要建立和維護可靠的正式環境平台用於部署機器學習模型時,則需要協調許多元件,像是基於訓練資料的模型,用於分析和驗證資料、以及建立用於正式環境模型的模組,同時資料隨著時間變化和新模型的挑戰,則需要不斷重新訓練模型,但是在過去通常是使用客製程式碼來臨時完成各個團隊為特定用途所開發的腳本,導致資源浪費和脆弱系統所帶來的技術債。此外當需要為許多人建立一個機器學習平台時,則機器學習管線所對應的工作流程將會變得非常複雜,在機器學習平台中任何元件皆要能夠提供自動化的整合方式,以利處理各式各樣所發生的故障問題,以利確保提供可靠的正式環境進行模型訓練和提供模型服務服務,然而此時在資料儲存架構和機器學習框架方面的需求皆有很大的不同,將會面臨許多的挑戰,並且持續針對模型進行訓練和提供服務,則機器學習平台必須要能夠支援在動態資料上訓練多個模型的情況,同時更需要提供容易上手的操作畫面,讓團隊中的資訊人員能夠輕鬆的部署和監控機器學習平台,以及機器學習平台要能夠適應各種問題所造成的中斷提供可靠性和可擴展性的平台,以利讓團隊輕鬆部署機器學習模型至正式環中的各種產品進行應用,這時我們就能夠透過導入 TensorFlow Extended (TFX) 解決上述問題。

接著 TensorFlow Extended (TFX) 主要就是一個用於部署機器學習模型至正式環境的端至端機器學習管線平台,當準備好需要進行訓練的多個模型,或者準備將最佳模型部署至正式環境中時,TFX 將能夠協助我們建立完整的機器學習管線,專門用於可擴展和高效能的機器學習任務,其中 TFX 管線主要是一系列元件所組成,當然 TFX 更提供函式庫,每個函式庫中會對應多個不同的元件,用於資料擷取、資料驗證、資料轉換、建立模型、模型分析、驗證結果和提供服務。此外 TFX 更提供了對應的 Python 套件其主要是用於建立管線元件的函式庫,分別為:

  1. TensorFlow Data Validation:主要能夠幫助開發者大規模的理解、驗證和監控機器學習資料。
  2. TensorFlow Transform:主要將機器學習應用於資料集時,需要將資料預處理為適合的格式。
  3. TensorFlow:主要用於訓練模型,並且取得訓練資料、產生建模程式碼,以及儲存模型結果。
  4. TensorFlow Model Analysis:主要能夠計算和視覺化模型的評估指標,以確保模型品質符合預期。
  5. TensorFlow Serving:主要提供高效能的機器學習模型服務,並且透過 REST 或 gRPC 介面提供服務。

再來機器學習模型通常是複雜系統的一部份,通常包括大量資料來源進行整合應用,並且機器學習模型會隨著時間而退化,或者因為不同序列化模型格式的元件導致訓練模型或提供服務發生錯誤,而導致客戶體驗不佳,這些問題對於人類來說很難被發現特別是在建立新模型進行訓練時,所以我們需要有個機制能夠自動評估和驗證模型,以利確保提供最佳客戶體驗的服務。但是什麼是好的模型呢?當模型具有所需預測品質指標,並且通過安全驗證,像是當系統在載入時或傳送錯誤或意外的輸入時,模型不應該崩潰或導致服務錯誤,並且模型不應使用太多資源,像是 CPU 或 RAM,此外則是使用的更新版本的機器學習函式庫來訓練模型的結果,需要透過更佳的評估指標或驗證機制確保所提供的服務能夠提高客戶滿意度。此外透過人們進行指標的評估確保模型的品質,此時將會需要提供容易上手的操作畫面,讓團隊中的業務人員能夠輕鬆的根據自動產生的模型評估報告,選擇最適當的模型,一旦團隊對於模型離線效能感到滿意,則建議能夠多個模型進行 A/B 測試實驗,以利確定其模型實際執行情況。

最後機器學習平台所提供的服務必須支援模型版本控制,用於實現模型恢復和更新,以及多個模型進行 A/B 測試實驗,同時還要能夠確保並發模型能夠在硬體加速器上以較低的延遲實現較高的輸出量,像是 GPU 和 TPU,此時 TensorFlow Serving 將能夠每秒處理數千萬次服務,所以透過 TensorFlow Serving 將能夠提供用於正式環境服務系統所要求低延遲、高效率、可靠性和可擴展性的服務。此外 在正式環境上所提供多個模型的服務通常會導致跨模型的干擾,這是一個具有挑戰性的問題,但是 TensorFlow Serving 提供軟模型隔離以利提高執行效能,以及在部署處理大量資料的伺服器時,對於每秒的查詢操作可能會遇到模型載入操作請求處理流程的干擾,此時為了增強這些操作之間的隔離, TensorFlow Serving 提供一個允許單獨設定的功能用於模型載入操作的專用執行緒池,這是允許任何操作在指定的執行緒池中執行,以利確保執行請求處理的執行緒不會模型載入操作的影響,所以 TensorFlow Serving 也支援多租戶能夠讓伺服器同時提供多個機器學習服務。

相關資源

SAS Viya (110)

教學目標

初步了解 SAS Intelligent Decisioning 的基本概念。

重點概念

首先分析策略必須與企業整體業務戰略整合,在今年初 Gartner 針對資料和分析進行預測,其中提出至 2022 年僅有 20%的分析見解能夠帶來業務成果,並且有超過 50% 的主要新業務系統將會採用持續智慧和即時上下文資料來改善決策,以及有超過 90% 的企業戰略將明確提及資訊作為關鍵企業資產和分析必不可少的能力。此時 SAS 針對分析和資料戰略提出的方法論,其主要專注於業務成果,並且以業務戰略驅動分析和數據戰略,以及將洞察力轉化為即時行動,同時能夠衡量重要性,像是先從減少營運成本、增加營運收入、增加更多客戶和增加客戶滿意度四大方面量化分析機會,再針對機會所提出的分析組合根據業務影響、投資回報率、達成共識、資料可用性、支援管理、現有資源支持和風險等績效指標進行評估,使得業務能力與分析策略的交付保持一致性,至於更多詳細資訊,請參考官方影片。但是除了分析和資料戰略提出的方法論之外,更需要有解決方案能夠自動化和大規模的做出正確的即時決策,此時 SAS Intelligent Decisioning 解決方案就能夠基於業務規則和進階分析提供互動式自動化決策,業務人員和資訊人員能夠使用當前和歷史營運資料,由分析模型提供資訊,並且根據業務規則的控制共同設計和部署運營決策,自動定義數千個日常決策中的即時且最佳決策分析,以利自動化進行對應的行動。

接著在 SAS Intelligent Decisioning 解決方案中提供非常直覺且容易操作的 SAS Decision Manager 將能夠讓業務人員很直覺的建立業務規則資料庫,將業務規則組合至決策中,並且發布決策以提供其它應用程式使用,以使得業務能力與分析策略的交付保持一致性,其中管理決策網站畫面主要就有提供以下主要的功能,分別為:

  1. 決策:主要進行決策的新增和發佈,我們能夠將規則集,分析模型,處理群組,程式碼檔案,記錄相關節點和條件邏輯組合至決策流程中,更進一步查看和比較各種決策方案,並且測試和優化決策邏輯,然後確認和發佈決策,以利讓批次處理和即時交易等應用程式進行使用,以及除了能夠在現有決策流程增加新的決策之外,更能夠進行版本控管以利協助我們針對正式環境的決策落實完整的治理。
  2. 規則集:主要進行業務規則的新增和發佈,我們能夠基於變數定義每個規則的條件和操作,至於所謂規則集主要是規則的邏輯集合,單個規則集可以有許多規則,但它通常對應於決策中的單個步驟,以及除了能夠在現有規則集增加新的規則和重新排序之外,更能夠進行版本控管以利協助我們針對正式環境的規則集落實完整的治理。
  3. 查閱表格:主要進行查找表的新增和管理,我們能夠基於資料表查找對應的參考資料,並且能夠透過匯入文字檔案的方式來新增參考資料,以及如果在條件中使用查閱表格時,條件會檢查輸入變數值是否在查閱表格中,以及除了能夠在現有查閱表格增加新的參數資料之外,更能夠進行版本控管以利協助我們針對正式環境的查閱表格落實完整的治理。

再來 SAS Decision Manager 除了能夠透過拖拉操作管線的方式視覺化設計決策流程,並且透過界面直接執行測試,以及產生決策路徑追蹤的分析和標繪圖,以利業務人員能夠透過視覺化圖表的方式清楚了解決策分析的結果之外,更能夠搭配 SAS Model Studio 建立用於決策的預測模型,並且透過拖拉操作管線的方式設計多個預測模型,以及當預測模型建立和執行管線完成之後,就能夠透過管線比較選取最佳的預測模型,並且註冊至 SAS Model Manager 中以利管理用於決策的預測模型,同時進行預測模型的版本控管,以及透過 SAS Decision Manager 將已註冊的預測模型增加至決策流程的管線中,以利基於預測模型分析的結果提高決策分析的準確性。此外當業務人員完成決策和規則集的開發之後,資訊人員就能夠透過 SAS Decision Manager 將已開發的決策發行至 SAS Micro Analytic Service (MAS) 中,以利讓任何第三方應用程式能夠透過 REST API 的方式進行使用評分結果用於決策分析。

最後 Decision Manager 具有內建治理的功能,以利企業透過 SAS Intelligent Decisioning 解決方案自動化和大規模的做出正確的即時決策,其中包括測試驗證、版本控制和發行記錄,所謂測試驗證主要有單元測試、系統測試和效能測試,更能夠直接透過網站執行測試和驗證,版本控制能夠支援主要和次要編號,更能夠在不同版本之間輕鬆切換,所謂發行記錄主要能夠追踪規則集和決策的發行時間,發行名稱、目的地類型、目的地名稱、模組 URI、版本、發行者、 … 等關鍵資訊。所以我們將能夠基於分析策略透過 SAS Intelligent Decisioning 解決方案所提供端至端的即時決策整合企業整體業務戰略,更進一步將分析見解帶來業務成果,以及採用持續智慧和即時上下文資料來改善企業的決策分析,以利為企業帶來更高的商業價值。

相關資源

📖 more posts 📖