SAS 教學

SAS Viya (99)

教學目標

初步了解 SAS DLPy 建立分析模型 ASTORE 分析儲存檔的基本概念。

重點概念

首先 SAS 提供了一個人工智慧的平台,能夠讓企業中的所有使用者透過該平台從資料中建立人工智慧的分析應用,而數據科學家和開發人員的皆能夠繼續使用所熟悉的 Python 程式語言建立機器學習的分析模型,其中 SAS DLPy 就是針對 SAS Viya 人工智慧平台所建立的 Python API,其主要提供了一種方法應用深度學習功能來解決電腦視覺,自然語言處理,語音處理和預測等問題,而如果我們是 Keras 和 Caffe 建模者將會發現 DLPy 的介面很熟悉,以及如果我們不熟悉 SAS CAS 程式碼,但是熟悉 Python,則就能夠非常直觀以 DLPy 介面執行 Keras 程式碼,只需進行少量程式碼修改即可,至於 DLPy 主要能夠讓我們在 SAS CAS 環境中存取 SAS 深度學習操作,而無需撰寫 SAS CAS 程式碼,此外我們僅需要透過以下指令安裝 SWAT 和 DLPy 的 Python 套件就能夠開始使用。

接著 SAS DLPy 目前已經支持越來越多的深度學習模型架構,我們能夠使用 DLPy 來使用許多包含的預建模型,像是 LeNet 、 VGG 、 ResNet 、 DenseNet、 DarkNet 、Inception 、 Yolo 、… 等深度學習模型架構,其中許多預先建立的模型包括與每種模型類型相關的資料類型的預訓練的權重,在許多情況下,我們可以修改其中一個範例模型以建立自行定義模型,以利滿足更進階的分析需求。

再來要如何開始進行 DLPy 的實作,我們能夠參考官方文件中詳細的教學步驟,教學內容主要為建立圖片處理的分析模型,一開始我們會先設定 DLPy 的執行環境,主要有五個步驟,分別為:

  1. 載入相關函式庫。
  2. 啟動 CAS 會話。
  3. 載入圖片。
  4. 驗證圖片。
  5. 處理圖片。

其中針對處理圖片我們主要會調整圖片的大小,將圖片拆分為訓練資料和測試資料、查看訓練和測試資料的圖片分佈,以及增強訓練資料等過程,當處理圖片完成之後,我們就能夠開始建立不同深度學習的分析模型,主要有五個步驟,分別為:

  1. 建立簡單的 CNN 模型。
  2. 使用增強訓練資料進行訓練。
  3. 總結訓練網路相關處理資訊。
  4. 針對輸入圖片進行評分。
  5. 將分析模型儲存為 ASTORE 分析儲存檔。

最後當我們透過 Jupyter Notebook 以 Python 程式語言中 DLPy 套件產生分析模型的 ASTORE 分析儲存檔,就能夠部署至 SAS Event Stream Processing 中進行串流分析。所謂 ASTORE 分析儲存檔主要為用於評分模型的二進位檔案,並且搭配 SAS Event Stream Processing 將圖片先載入記憶體中,同時在記憶體中進行串流分析的技術,此時我們就能夠以最即時的方式針對影像進行識別的串流分析。

相關資源

SAS Viya (98)

教學目標

初步了解 SAS Event Stream Processing 串流分析的基本概念。

重點概念

首先 SAS Event Stream Processing 能夠在事件流處理專案中使用進階分析的演算法和機器學習技術,我們稱為串流分析 (Streaming Analytics),並且透過串流分析將能夠讓我們利用來自物聯網 (IoT) 的資料解決所面臨的問題,至於串流分析主要分為十大類,分別為:

  1. 在線評分 (Online Scoring)
  2. 時間序列處理 (Time Series Processing)
  3. 影像處理 (Image Processing)
  4. 文字探勘 (Text Mining)
  5. 推薦系統 (Recommender System)
  6. 描述演算法 (Descriptive Algorithms)
  7. 串流回歸 (Streaming Regression)
  8. 串流分類 (Streaming Classification)
  9. 串流降維 (Streaming Dimensionality Reduction)
  10. 串流分群 (Streaming Clustering)

其中在 SAS Event Stream Processing 中已經有內建許多演算法的在線模型,以利在事件串流處理專案中使用,此外 SAS Event Stream Processing 更支持不同演算法的離線模型,以及在線模型或離線模型的推薦系統,當然也支援 Caffe 、 TensorFlow 、 Python 、 C 、 … 等開放源始碼所建立的分析模型應用於串流資料分析。

接著為何要選擇串流分析呢?一般來說,我們會針對影片、圖片、語音、訊息、… 等非結構化的串流資料進行串流分析,並且透過 SAS Event Stream Processing 我們將能夠進行邊綠和雲端多個階段分析,而當我們自動化透過機器學習模型進行串流分析時,也就是所謂人工智慧的應用。

再來我們要如何使用 SAS Event Stream Processing 將模型部署到串流環境中,主要三種方法,分別為:

  1. 在線方法:主要整合模型至專案中,透過打包進行部署。
  2. 離線方法:主要離線訓練建立模型,透過設定進行部署。
  3. 儲存庫方法:主要基於 SAS Model Manager 儲存庫進行部署。

然而當我們進行串流分析的部署時,則將會面臨治理的挑戰,主要有部署稽核和模型再訓練稽核,此時面對部署稽核的挑戰,我們主要能夠透過工作流程了解為什麼,以及面對模型再訓練稽核的挑戰,我們主要需要自我稽核快速進行更新。

最後當我們將串流分析應用於物聯網分析時,則其分析生命週期主要獲取來自傳感器的資料量巨大,而且大部分皆沒用,此時需要過濾來評估資料,並且僅儲存將提供價值的內容,以及在模型建立的過程中,與訓練事件和其他事件相關的資料需要事件來有效預測未來事件,一旦完成且在模型部署之後,我們就能夠自動化學習和改進串流分析模型的分析成效。

相關資源

SAS 系統管理 (110)

教學目標

初步了解在 Windows Server 作業系統中更新 SAS 授權檔的基本概念。

相關資源

首先 SAS 管理員每年有一次最重要的工作就是更新 SAS 授權碼,我們除了需要透過 SAS Deployment Manager 工具選擇「更新 SAS 軟體」選項來更新 SAS Foundation 的授權碼,以及更需要透過 SAS Deployment Manager 工具選擇「更新中繼資料中 SID 檔案」選項來更新中繼資料中的授權資訊,將授權資訊儲存在中繼資料中,以利中間層的網站應用程式能夠存取授權資訊之後檢查授權檔是否有效,此外並非所有解決方案皆要求將 SAS 授權檔儲存在中繼資料中,至於有哪些解決方案需要更新呢?請參考 SAS Note 官方文件

接著如果我們要檢查 SAS Foundation 授權的狀態,則我們能夠開啟 SAS Enterprise Guide 工具登入一般使用者帳號執行 SAS 程式碼「PROC SETINIT;RUN;」,在 SAS 日誌中返回 SAS 授權檔的詳細資訊,其中會有到期日 (Expiration Date)、寬限期 (Grace Period) 和警告期 (Warning Period),所謂到期日主要代表該軟體將於何時到期,但在寬限期內不會發生任何事情,而在警告期間,SAS 日誌中的資訊將會警告使用者軟體即將過期,當警告期結束時,SAS 軟體將會停止運作,「PROC SETINIT;RUN;」僅檢查 SAS Foundation 授權的狀態,而不是中繼資料中的授權檔資訊。

再來如果我們要檢查 SAS 中繼資料伺服器中的授權檔資訊,則我們能夠開啟 SAS Management Console 工具登入管理員帳號選擇查看中繼資料應用程式中查看 setinit 詳細資訊。請注意如果 SAS Foundation 授權已經更新,但是儲存在中繼資料中的授權已經過期,則網站應用程式將會無法正常登入執行,請注意若是有拆分多台 SAS App 應用程式伺服器,則必須要將所有 SAS App 應用程式伺服器的個別授權檔皆儲存至中繼資料伺服器中,再重新啟動 SAS 所有服務,才能夠確保 SAS 所有服務皆已經存取正確的授權檔資訊。

最後 SAS 9 平台僅有特定網站應用程式,像是 SAS Visual Analaytics 網站應用程式才能夠設定授權碼到期前的通知信,但是無法設定到期前幾天,或者僅能夠透過 SAS Environment Manager 設定授權碼到期幾天之前的通知信,但是不建議使用 SAS Environment Manager,因為會有資安弱掃和系統效能的問題。至於其它解決方案通常需要管理員定期查看 SAS Foundation 中的 SAS 授權碼資訊,此時對於企業客戶來說將會造成維運上的困擾,所以若是真有需要設定授權碼到期前幾個月發送通知信,則能夠撰寫以下可參考的 Powershell 腳本指令,並且將此腳本指令設定至 Windows 工作排程器中,並且請注意執行的使用者權限必須有相關資料夾的存取權限,此外此篇文章僅提供可參考的客製化程式碼,如果要部署至企業環境中,則需要有專業顧問提供客製化修改和調整的服務。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"PROC SETINIT;RUN;" | ac "<SAS Config>\Utilities\setinit.sas"
$notification_month = <N>
$log_path = "<SAS Config>\Utilities\setinit.log"
$code_path = "<SAS Config>\Utilities\setinit.sas"
$smtp_server = "<SMTP Server>"
$smtp_from = "<Email Sender>"
$smtp_to = "<Email Receiver>"
$smtp_subject="<Email Subject>"
$smtp_body="<Email Body>"
.\sas.exe -sysin $code_path -log $log_path
$expiration = select-string -Path $log_path -Pattern Expiration | select line | ft -hidetableheaders | Out-String
$expiration = $expiration.substring(16, 9)
$expiration
$expiration_date = [datetime]::parseexact($expiration, 'ddMMMyyyy', $null)
$expiration_date
$current_date = (get-date)
if($current_date.AddMonths($notification_month) -gt $expiration_date ){
Send-MailMessage -SmtpServer $smtp_server -From $smtp_from-To $smtp_to -Subject $smtp_subject -Body $smtp_body
}

相關資源

SAS Viya (97)

教學目標

初步了解 SAS Event Stream Processing 故障轉移的基本概念。

重點概念

首先 SAS Event Stream Processing 容器化部署目前版本還無法對於有狀態的相關服務進行完整的故障移轉實作,但是對於無狀態的相關服務我們主要能夠針對輸入和輸出的發布和訂閱連接器進行故障轉移機制整合實作。所謂事件觸發故障轉移 (Failover) 主要會發生在某些特定情況下,分別為存在硬體故障,以及伺服器上的處理程序失敗,並且導致伺服器停止執行,此時在故障轉移期間主要有兩種方法可以更新模型,分別為動態模型替換和完整模型替換。使用新模型更新每個伺服器之後,我們就能夠可以重新啟動故障轉移叢集,如果故障轉移叢集可以從 Message Bus 恢復模型的狀態,則就能夠使用新模型停止並啟動每個伺服器,如果故障轉移叢集無法恢復引擎狀態,則必須停止模型中發佈者和訂閱者的所有實例,並且當我們需要實施故障轉移時,請注意必需滿足軟體元件和硬體元件的要求。

接著所謂軟體元件的要求主要是以 Solace、Tervela、RabbitMQ 或 Kafka 發布和訂閱連接器進行實作,訂閱連接器必須設定熱故障轉移 (Hot Failover),對於客戶端發布者和訂閱者應用程式皆必須使用隨 SAS Event Stream Processing 所提供對應的發佈和訂閱 API,其中針對不同程式語言將會有不同的實作方式,分別為:

  1. 對於 C 或 C++ 應用程式主要是透過在呼叫 C_dfESPpubsubInit() 之前呼叫 C_dfESPpubsubSetPubsubLib() 來請求對應的傳輸選項。
  2. 對於 Python 應用程式主要是透過在呼叫 init() 之前呼叫 SetPubsubLib() 來請求對應的傳輸選項。
  3. 對於 Java 應用程式主要是透過加入 dfx-esp-solace-api.jar、dfx-esp-tervela-api.jar、dfx-esp-rabbitmq-api.jar 或 dfx-esp-kafka-api.jar 在加入 dfx-esp-api.jar 前面呼叫對應的傳輸選項。

請注意我們必須在承載連接器和客戶端執行實例的平台上安裝 Solace、Tervela、RabbitMQ 或 Kafka 相關的函式庫,此外 SAS Event Stream Processing 不提供任何設備標準 API 函式庫,所以在執行環境時必須定義這些函式庫的路徑,像是在 Linux 平台上使用 LD_LIBRARY_PATH 設定函式庫路徑。

再來所謂硬體元件的要求則必須以冗餘方式安裝消息總線,以避免單點故障,通常基於軟體的 Message Bus 通常需要三個或更多伺服器來實現冗餘,基於冗餘的角度考慮,應該在主要和備援伺服器傳輸 heartbeat 控制訊息,這樣才能夠避免在一個網路故障或線纜故障時導致兩個節點同時認為自已是唯一處於活動狀態的伺服器,導致出現爭用資源的情況,這種爭用資源的情境就是所謂的腦裂 (split-brain),當兩個節點共享同一個物理設備資源的情況下,將會產生相當可怕的後果,所以為了避免出現腦裂,可採用在主要和備份的節點間建立一個冗餘的、可靠的物理連接來同時傳送控制信息,一旦發生腦裂時,就能夠藉助額外設備強制性地關閉其中一個節點。

最後基於軟體的消息總線可能與兩個或多個冗餘 ESP 伺服器集合在一起,並且也可能不在同一位置,此外我們需要特別注意如果滿足以下條件,評估 SAS Event Stream Processing 是否為容器化部署就已經無關緊要,反之若無法滿足以下條件才需要評估 SAS Event Stream Processing 是否需要容器化部署,分別為:

  1. ESP 伺服器和 Message Bus 之間的 IP 連接始終保持不變。
  2. 實體機器或虛擬機器的 CPU 核心和記憶體大小適當,將能處理最大的 ESP 伺服器和 Message Bus 負載,這也代表著所有伺服器的大小都相同,其中任何一個都必須能夠處理完整的 ESP 伺服器和 Message Bus 負載,即使只是在伺服器故障之後暫時處理。

總結目前針對 SAS Event Stream Processing 的故障排除機制主要是針對輸入和輸出的發布和訂閱連接器進行 Failover 機制整合實作,雖然 SAS Event Stream Processing 有提供 Cluster Manager 能夠將來自邊緣設備的來源對應至網格或雲端中設定的事件串流處理引擎,並且透過管理連接器和引擎實例之間的對應,將有助於彈性部署 SAS Event Stream Processing 並且簡化大規模部署,但是需要特別注意若已經在 SAS Event Stream Processing 引擎的記憶體中處理有狀態服務的資訊目前還是無法進行故障移轉,所以當我們在設計和實作 SAS Event Stream Processing 故障排除機制時,需要先了解是否存在有狀態服務,以利進行設計和實作的完整評估和測試。

相關資源

SAS Viya (96)

教學目標

初步了解 SAS Event Stream Processing 安全加密連線的基本概念。

重點概念

首先我們主要會透過設定在「/opt/sas/viya/config/etc/SASEventStreamProcessingEngine/default」目錄中的「esp-properties.yml」設定檔進行安全性部分的相關參數以利啟用加密連線的功能,此外請注意任何安全機制會影響效能,以及後續憑證維護問題,若非企業資訊政所要求,則不建議進行相關設定,儘可能讓日後維運工作越簡單越好,因為對於企業來說關鍵系統的維運非常重要,尤其是即時串流處理分析的實務應用情境之關鍵系統。

接著我們能夠在事件串流處理引擎中的 TCP / IP 連線時啟用加密,主要會使用 C 、 Java 或 Python 發布/訂閱 API 連接至事件流處理伺服器的客戶端建立連線,以及由連接到事件流處理伺服器的適配器建立連線。然而若要啟用加密,我們則必須在執行 ESP 伺服器和客戶端的所有作業系統上安裝 OpenSSL 函式庫,必需要升級至 1.0.2 或更高版本的傳輸層安全性 (TLS) 協議才能支援更進階的加密連線,請注意我們必須在 ESP 伺服器和客戶端上安裝正確的 TLS 憑證,並且客戶端和伺服器強制協商的加密協議和密碼套件符合皆 TLSv1.2。此外正式環境的流量必須僅使用由 CA 簽署的憑證檔,並且當客戶端需要特定的 CA 憑證檔來驗證伺服器時,ESP 伺服器也需要 CA 憑證檔,如果未指定CA 憑證檔,則 SAS Event Stream Processing 將會嘗試使用系統安裝的「/etc/pki/tls/certs/ca-bundle.crt」憑證檔,以及當 ESP 伺服器需要透過 RESTful API 採用與使用者帳戶和認證服務的伺服器器通訊時,伺服器會當成使用者帳戶和認證服務的 HTTPS 客戶端,此時伺服器期望使用者帳戶和認證服務的由 CA 憑證進行簽署,因此除了系統上安裝的 CA 憑證之外,不需要建立連接的特定 CA 憑證。

再來我們如何啟用 ESP 伺服器的安全連線,主要有五個步驟,分別為:

  1. 我們需要將 pubsub_ssl_enabled 和 http_ssl_enabled 設定為 true,以利啟用 TLS 安全連線,預設情況下,這些設定為 false。
  2. 如果我們需要信任自簽憑證,請將 trust_selfsigned 設定為 true,請注意不要在 Windows系統或 Java 客戶端上設定 trust_selfsigned,在Windows系統上,需要將 CA 憑證匯入受信任的根憑證儲存區,在 Java 客戶端上,需要將 CA 憑證匯入受信任的密鑰庫 (Keystore)。
  3. 我們需要指定 server_cert_file 伺服器憑證檔,其中必須包含憑證密鑰和私鑰的串聯,其必須位於設定目錄中,預設悄況下,該檔名為 server.pem。
  4. 我們需要指定 passphrase 密碼以保護伺服器憑證檔,當然我們能夠留空白。
  5. 我們需要指定 ca_cert_file 客戶端憑證檔,其中必須包含客戶端用於在 TLS 握手期間驗證伺服器憑證的憑證頒發機構所簽署的 CA 憑證,其必須位於設定目錄中,預設情況下,該檔名為 ca.pem,如果未找到 ca.pem,則客戶端會嘗試使用系統的預設的 CA 憑證,這些憑證檔必須位於配置目錄中。

ESP 伺服器和客戶端上的安全設定屬性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
security:   
pubsub_ssl_enabled: true
http_ssl_enabled: true
2_way_authentication: false
trust_selfsigned: true
server:
auth: null
server_cert_file: server.pem
ca_cert_file:
passphrase: passphrase
client:
auth: null
ca_cert_file: ca.pem
client_cert_file:
passphrase:

最後當我們啟用安全連線之後,更需要啟動 SAS Event Stream Processing Studio 啟用傳輸層安全性協議,此時我們必須在 ESP 伺服器上啟用 TLS 傳輸層安全性協議,並且獲取要匯入瀏覽器和 Java 密鑰庫的憑證頒發機構 CA 憑證檔,此時我們主要會執行以下操作,分別為:

  1. 獲取安裝在 SAS Event Stream Processing Studio 系統的 CA 憑證檔,以及存取使者界面的客戶端的 CA 憑證檔。
  2. 在使用者存取 SAS Event Stream Processing Studio 系統上,將客戶端憑證匯入主要的網站瀏覽器之憑證儲存區。
  3. 在執行 SAS Event Stream Processing Studio 系統上,透過執行以下命令將客戶端憑證匯入 Java 密鑰庫。

將客戶端憑證匯入 Java 密鑰庫

1
$ $JAVA_HOME/jre/bin/keytool -importcert -keystore /opt/sas/viya/config/etc/SASSecurityCertificateFramework/cacerts/trustedcerts.jks -file ca.pem -storepass changeit -noprompt -alias myalias

當設定完成之後,我們必須重新啟動 SAS Event Stream Processing Studio 服務,否則會發生 RESTful HTTP API 的錯誤訊息,但是還是建議重新啟動 ESP 伺服器的所有服務。

重新啟動 SAS Event Stream Processing Studio 服務

1
2
$ sudo service sas-viya-espvm-default stop
$ sudo service sas-viya-espvm-default start

相關資源