Leo Yeh's Blog

SAS Viya (133)

教學目標

初步了解在 SAS Model Manager 中模型版本控管機制的基本概念。

重點概念

首先在 SAS Model Manager 中主要針對模型有提供版本控管機制,我們主要能夠針對模型目前版本編輯模型屬性和檔案內容,並且能夠手動增加新的模型版本或執行自動建立新的模型版本操作,像是將其設定為冠軍模型,或者從專案層級發佈冠軍模型,此時則會獲取模型內容的快照和已分配的版本編號。至於模型已分配的版本編號主要遵循 Major.Minor 格式,如果在手動新增版本時點選「主要」,則句號左側的數字會增加,點選「次要」,則句號右側的數字會增加。此外建立新的模型版本的內容將無法再進行編輯,並且任何模型版本是無法進行刪除,僅能夠查看新的模型版本之內容。

接著在 SAS Viya 分析平台中主要針模型有提供版本控管機制的 REST API,請參考下表。

功能 說明 REST API 官方連結
確認模型是否存在 主要透過回傳與指定模型 ID 關聯的模型版本的標頭資訊確定模型版本是否存在。 https://developer.sas.com/apis/rest/DecisionManagement/#check-if-model-versions-exist
建立模型版本 主要建立指定模型 ID 新的版本。 https://developer.sas.com/apis/rest/DecisionManagement/#create-a-model-version
取得模型版本列表 主要回傳指定模型 ID 的模型版本之列表資訊。 https://developer.sas.com/apis/rest/DecisionManagement/#get-a-list-of-model-versions
取得模型版本 主要回傳特定指定模型 ID 和版本 ID 關聯的模型版本資訊。 https://developer.sas.com/apis/rest/DecisionManagement/#get-a-model-version
取得模型版本內容列表 主要回傳指定模型 ID 和版本 ID 關聯的模型版本之內容資訊。 https://developer.sas.com/apis/rest/DecisionManagement/#get-the-contents-of-a-model-version
取得模型版本內容 主要回傳指定模型 ID、版本 ID 和內容 ID 關聯的模型版本之內容資訊。 https://developer.sas.com/apis/rest/DecisionManagement/#get-model-version-content
取得模型版本內容的中繼資料 主要回傳指定模型 ID、版本 ID 和內容 ID 關聯的模型版本之內容的中繼資料資訊。 https://developer.sas.com/apis/rest/DecisionManagement/#get-metadata-for-model-version-content

再來當我們需要建立指定模型 ID 新的版本時,主要需要以 PUT 的 HTTP 方法來進行,並且設定「option」參數設定「major」或「minor」這兩個選項才能夠正常新增模型的主要版本或次要版本,根據需求選擇適當的新增模型之版本方式,至於相關程式碼如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import requests, json
username = '<SAS Viya Username>'
password = '<SAS Viya Password>'
baseUrl = '<SAS Viya URL>'
projectId = ''
modelId = ''
versionOption='major'
url = baseUrl + '/SASLogon/oauth/token?grant_type=password&username=' + username + '&password=' + password
headers = {'Authorization': 'Basic c2FzLmVjOg=='}
r = requests.get(url, headers=headers)
access_token = json.loads(r.text)['access_token']
url = base_baseUrl + '/modelRepository/projects'
headers = {'Accept': 'application/vnd.sas.collection+json','Authorization': 'Bearer ' + access_token}
r = requests.get(url, headers=headers)
json_object = json.loads(r.text)
for item in json_object['items']:
if item['name'] == projectName:
projectId = item['id']
url = baseUrl + '/modelRepository/models'
headers = {'Accept': '','Authorization': 'Bearer ' + access_token}
r = requests.get(url, params={}, headers=headers)
json_object = json.loads(r.text)
for item in json_object['items']:
if 'projectName' in item and item['projectName'] == projectName and item['name'] == modelName:
modelId = item['id']
break
url = baseUrl + '/modelRepository/models/' + str(modelId) + '/modelVersions'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/vnd.sas.models.model.version+json',
'Authorization': 'Bearer ' + access_token}
r = requests.post(url, json={'option':versionOption},headers=headers)
json_object = json.loads(r.text)

最後集中式的模型儲存庫、生命週期模板和版本控管機制將能夠提供對於分析過程的可見性,以利確保完整的可追溯性和分析治理,並且透過讓使用者追蹤模型管理過程的每個步驟的進度,將能夠實現有效的協同合作,以及所涉及的每個人皆能夠對於每個模型的定義和價值獲得統一的視圖資訊。此外每當建立模型版本時,皆會擷取模型屬性和模型檔案的快照,以利確保全面性的版本控制,同時模型將會受到保護,並且模型版本歷史記錄將會被鎖定且保留。

相關資源

⬅️ Go back