Leo Yeh's Blog

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
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;
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 平台中就有提供符合資訊安全政策的完整稽核記錄功能。

相關資源

⬅️ Go back