Leo Yeh's Blog

SAS Viya (101)

教學目標

初步了解如何透過 Jupyter Notebook 以 Python 控制 SAS Viya 平台中的雲端分析服務開發機器學習和深度學習模型的基本概念。

重點概念

首先 SAS Viya 主要是分散式平台能夠在記憶體中快速有效地分析大數據,我們主要能夠透過 Jupyter Notebook 以 Python 控制 SAS Viya 平台中的雲端分析服務 (Cloud Analytic Services,CAS) 開發機器學習和深度學習模型,則要安裝 Python 3、SWAT 套件和 DLPy 套件,以及安裝和啟動 Jupyter Notebook 網站。

安裝 Python 3

1
2
3
4
5
6
7
8
9
$ sudo su -
$ yum install gcc openssl-devel bzip2-devel sqlite-devel
$ wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
$ tar xzf Python-3.6.8.tgz
$ cd Python-3.6.8
$ ./configure --enable-loadable-sqlite-extensions --enable-optimizations
$ make
$ make altinstall
$ python3.6 -V

請注意,若是沒有安裝 libsqlite3-dev 軟體,以及加上 —enable-loadable-sqlite-extensions 參數編譯 Python 3,則當啟動 Jupyter Notebook 時就會發生錯誤。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/notebook/services/sessions/sessionmanager.py", line 10, in <module>
import sqlite3
File "/usr/local/lib/python3.6/sqlite3/__init__.py", line 23, in <module>
from sqlite3.dbapi2 import *
File "/usr/local/lib/python3.6/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/bin/jupyter-notebook", line 7, in <module>
from notebook.notebookapp import main
File "/usr/local/lib/python3.6/site-packages/notebook/notebookapp.py", line 86, in <module>
from .services.sessions.sessionmanager import SessionManager
File "/usr/local/lib/python3.6/site-packages/notebook/services/sessions/sessionmanager.py", line 13, in <module>
from pysqlite2 import dbapi2 as sqlite3
ModuleNotFoundError: No module named 'pysqlite2'

安裝 SWAT 套件

1
2
$ sudo su -
$ pip3.6 install swat

安裝 DLPy 套件

1
2
$ sudo su -
$ pip3.6 install sas-dlpy

安裝 Jupyter Notebook 網站

1
2
$ sudo su -
$ pip3.6 install jupyter

啟動 Jupyter Notebook 工具

1
2
3
4
$ mkdir /jupyter
$ chmod 777 -R /jupyter
$ cd /jupyter
$ jupyter notebook --port 9999 --allow-root --no-browser --ip=0.0.0.0 --NotebookApp.token='' --NotebookApp.password=''

其中「/jupyter」主要是儲存 Jupyter Notebook 檔案和資料夾的目錄,至於「—ip=0.0.0.0」參數若沒有設定,則會導致瀏覽器無法正常執行,以及「—NotebookApp.token=’’」和「—NotebookApp.password=’’」參數若沒有設定,則會導致需要輸入 token 或密碼,才能夠登入使用 Jupyter Notebook。

接著所謂 SWAT 套件主要是將資料上傳到 SAS Viya 針對資料進行分析和建立機器學習和深度學習的模型,以利解決各種複雜問題,並且當 SAS Viya 完成運資料分析和建立模型的任務之後,我們就能夠將資料下載至客戶端,並且使用 Python 比較分析結果和產生圖表。而當啟動 Jupyter Notebook 之後,就能夠開啟瀏覽器輸入「http://server:9999」網址登入 Jupyter Notebook 進行操作,此時我們第一步就必須要先透過 SWAT 套件建立與 SAS Viya 平台中的 CAS Controller 伺服器的連線,以利將 Python 程式轉換為 CAS Action 再傳送至 CAS Controller 中將資料分散至 CAS Worker 的記憶體中進行分散式運算。

透過 SWAT 套件建立與 SAS Viya 平台中的 CAS Controller 伺服器的連線

1
2
3
4
import os 
os.environ['CAS_CLIENT_SSL_CA_LIST']='/opt/sas/viya/config/etc/SASSecurityCertificateFramework/cacerts/vault-ca.crt'
import swat
sess = swat.CAS('<Server IP>', 5570, '<Username>', '<Password>')

如果沒有將 Jupyter Notebook 的 CAS_CLIENT_SSL_CA_LIST 環境變數指定為 SAS Viya 平台網站的伺服器憑證檔,就會發生以下錯誤的訊息。

1
2
ERROR: The TCP/IP negClientSSL support routine failed with status 807ff013.
ERROR: Failed to connect to host 'xxx.xxx.xxx.xxx', port 5570.

如果沒有輸入使用者帳號和密碼,就會發生以下錯誤訊息,請勿以為是 Kerberos 設定的問題,主要是因為若有使用者帳號和密碼就會嘗試以 Kerberos 進行使用者登入。

1
ERROR: Kerberos initialization failed. Your credential cache is either expired or missing.

如果沒有輸入正確的使用者帳號和密碼,就會發生以下錯誤的訊息。

1
ERROR: Connection failed. Server returned: SAS Logon Manager authentication failed: Access denied.

再來所謂 DLPy 套件主要是 SAS Viya 中提供 SAS深度學習功能的進階 Python 函式庫,其旨在提供一種將深度學習方法應用於圖片,文字、影片、語音和時間序列資料的有效方法,同時其 API 遵循 Keras API 規格所建立,並且具有 PyTorch 的風格,此時我們第二步就能夠開始透過 DLPy 套件開發機器學習和深度學習模型,像是 LeNet、VGG、ResNet、Faster R-CNN、YOLO V2、U-Net、Xception、MobileNet、LSTM、GRU、… 等。

透過 DLPy 套件建立機器學習和深度學習模型

1
2
3
4
5
6
7
8
9
10
from dlpy import Model, Sequential
from dlpy.layers import *
model1 = Sequential(sess, model_table = 'Simple_CNN')
model1.add(InputLayer(3,224,224))
model1.add(Conv2d(8,7))
model1.add(Pooling(2))
model1.add(Conv2d(8,7))
model1.add(Pooling(2))
model1.add(Dense(16))
model1.add(OutputLayer(act='softmax',n=2))
1
2
3
4
5
6
7
8
NOTE: Input layer added.
NOTE: Convolution layer added.
NOTE: Pooling layer added.
NOTE: Convolution layer added.
NOTE: Pooling layer added.
NOTE: Fully-connected layer added.
NOTE: Output layer added.
NOTE: Model compiled successfully.

最後當我們重新啟動伺服器之後,Jupyter Notebook 預設不會自動啟動,所以我們必須設定開機時自動啟動,此時我們就能夠修改「/etc/rc.local」開機時執行的檔案中的內容為切換至 Jupyter Notebook 專屬檔案和資料夾的目錄,並且啟動 Jupyter Notebook 網站,以及修改「/etc/rc.local」檔案為執行權限。

修改「/etc/rc.local」開機時執行的檔案

1
2
3
4
$ sudo vi /etc/rc.local
cd /jupyter
jupyter notebook --port 9999 --allow-root --no-browser --ip=0.0.0.0 --NotebookApp.token='' --NotebookApp.password='' &
:wq!
1
$ sudo chmod +x /etc/rc.d/rc.local

總結我們能夠透過 Jupyter Notebook 以 Python 控制 SAS Viya 平台中的雲端分析服務 (Cloud Analytic Services,CAS) 開發機器學習和深度學習模型, 至於要如何有系統的學習,則建議先註冊「Using SAS Viya REST APIs with Python and R」免費線上課程,並且當完成課程之後,則建議參考官方文件官方白皮書更進一步深入開發機器學習和深度學習模型。

相關資源

⬅️ Go back