Designer中提供了Notebook組件,可與DSW執行個體實現無縫串連,支援使用者在工作流程中直接使用Notebook編寫、調試和運行代碼,同時保留工作流程的上下文和狀態。
背景資訊
隨著Notebook在開源社區的廣泛應用,許多資料或AI開發人員已將其視為一個強大的代碼編寫和調試工具。因此Designer中提供了Notebook組件,可與DSW執行個體實現無縫串連,支援使用者在工作流程中直接使用Notebook編寫、調試和運行代碼,同時保留工作流程的上下文和狀態。
相對於直接使用DSW進行開發,在Designer中使用Notebook組件具有以下優勢:
提升開發效率:可以在工作流程中直接開啟Notebook,利用容器化執行個體進行開發並調試代碼。
上下文保留: Designer中的Notebook組件可在執行個體啟動時,自動載入工作流程中上遊組件的輸出資料和狀態,使得使用者能夠立即使用這些資料進行進一步的分析和開發,並將結果傳給下遊。
工作流程整體調試: Notebook組件將作為工作流程中的一環,使用者可以在不同的組件之間無縫切換,最佳化整個資料處理和模型訓練的過程。
使用情境
開發環節
使用者在組件中啟動並前往DSW執行個體編輯Notebook檔案,可以直接在DSW執行個體內部開發和調試Notebook,並且支援從Designer中擷取自訂參數配置。
如果資源群組選擇隨用隨付,則會根據DSW執行個體啟動時間長度進行計費,詳情請參見DSW後付費(隨用隨付)。
運行環節
使用者在Designer畫布直接執行Notebook組件、整個工作流程或使用DataWorks周期性調度工作流程,系統會啟動一個DLC任務來執行jupyter nbconvert轉換後的Notebook檔案。
如果資源群組選擇隨用隨付,則會根據DLC任務執行時間長度進行計費,詳情請參見DLC後付費(隨用隨付)。
組件說明
Notebook組件共有4個輸入連接埠和4個輸出連接埠。其中,所有的輸入連接埠均可串連OSS路徑或MaxCompute表類型的資料;輸出連接埠中連接埠1、2是OSS路徑輸出連接埠,連接埠3、4是MaxCompute表輸出連接埠。
通過Notebook組件啟動的DSW執行個體時,需要安裝pai-notebook-utils包,使用者通過pai-notebook-utils包可以擷取Notebook節點的輸入連接埠、輸出連接埠、自訂參數等資訊。
pai-notebook-utils包說明
安裝pai-notebook-utils
pip install --upgrade https://pai-sdk.oss-cn-shanghai.aliyuncs.com/pai_notebook_utils/dist/pai_notebook_utils-0.0.1-py2.py3-none-any.whl使用pai-notebook-utils
pai-notebook-utils提供了
get_inputs()、get_outputs()、get_custom_params()三個函數,分別用於擷取輸入連接埠配置、輸出連接埠配置、自訂參數。from pai_notebook.utils.notebook_utils import NotebookUtils node_inputs = NotebookUtils.get_inputs() node_outputs = NotebookUtils.get_outputs() custom_params = NotebookUtils.get_custom_params()
輸入連接埠
Notebook組件有4個輸入連接埠,可以接收OSS資料或MaxCompute表,通過pai-notebook-utils提供的NotebookUtils.get_inputs()可以擷取到所有連接埠的輸入資訊,其傳回值是一個數組,數組中每個item包含以下欄位:
item欄位 | 說明 |
name | 輸入連接埠名稱,輸入連接埠名稱包含input1、input2、input3、input4。 |
type | 連接埠類型,包含DataSet、Model等。 |
location_type | 儲存類型,包含MaxComputeTable、OSS。 |
value | Map格式,儲存連接埠的配置資訊。 |
當輸入端為MaxCompute表類型時,此時location_type為MaxComputeTable,value包含project、table、endpoint欄位,依次分別表示表所屬的MaxCompute專案、MaxCompute表名、MaxCompute的endpoint。
from pai_notebook.utils.notebook_utils import NotebookUtils node_inputs = NotebookUtils.get_inputs() for node_input in node_inputs: if node_input.location_type == "MaxComputeTable": input_name = node_input.name table_name = node_input.value["table"] project = node_input.value["project"] endpoint = node_input.value["endpoint"] print(f"input_name: {input_name}, project: {project}, table_name: {table_name}, endpoint: {endpoint}")當輸入端為OSS類型時,OSS路徑會被掛載為本地路徑,使用者可以通過訪問本地路徑的方式訪問OSS檔案,也可以通過OSS SDK直接存取OSS。此時location_type為OSS,value包含key、bucket、endpoint、mountPath欄位,依次分別表示OSS路徑的Path、OSS Bucket、OSS的endpoint、OSS的本地掛載路徑。
重要如果上遊OSS路徑發生了變化,且新的路徑未掛載到DSW執行個體中,將無法擷取到mountPath,您需要重啟DSW執行個體。
from pai_notebook.utils.notebook_utils import NotebookUtils node_inputs = NotebookUtils.get_inputs() for node_input in node_inputs: if node_input.location_type == "OSS": input_name = node_input.name key = node_input.value["key"] bucket = node_input.value["bucket"] endpoint = node_input.value["endpoint"] mount_path = node_input.value["mountPath"] print(f"input_name: {input_name}, bucket: {bucket}, key: {key}, endpoint: {endpoint}, mount path: {mount_path}")
輸出連接埠
Notebook組件有4個輸出連接埠,其中連接埠1、2是OSS路徑輸出連接埠,連接埠3、4是MaxCompute表輸出連接埠。通過pai-notebook-utils提供的NotebookUtils.get_outputs()可以擷取到所有連接埠的輸出資訊,其傳回值是一個數組,數組中每個item包含以下欄位:
item欄位 | 說明 |
name | 輸出連接埠名稱,輸入連接埠名稱包含output1、output2、output3、output4。 |
location_type | 儲存類型,包含MaxComputeTable、OSS。 |
value | Map格式,儲存連接埠的配置資訊。 |
當輸出端為MaxCompute表類型時,當前工作空間需要關聯MaxCompute計算引擎;當輸出端為OSS類型時,資料將會被儲存到輸出的OSS路徑中,如果未配置任務輸出路徑,會通過全域的預設路徑自動產生輸出路徑。輸出端value中的欄位和輸入連接埠中的格式一致。
from pai_notebook.utils.notebook_utils import NotebookUtils
node_outputs = NotebookUtils.get_outputs()
for node_output in node_outputs:
input_name = node_input.name
if node_output.location_type == "MaxComputeTable":
table_name = node_output.value["table"]
project = node_output.value["project"]
endpoint = node_output.value["endpoint"]
print(f"input_name: {input_name}, project: {project}, table_name: {table_name}, endpoint: {endpoint}")
elif node_output.location_type == "OSS":
key = node_output.value["key"]
bucket = node_output.value["bucket"]
endpoint = node_output.value["endpoint"]
mount_path = node_output.value["mountPath"]
print(f"input_name: {input_name}, bucket: {bucket}, key: {key}, endpoint: {endpoint}, mount path: {mount_path}")
else:
print(json.dumps(node_output.value, indent=4))自訂參數
您也可以自訂參數,參數值可以通過 ${globalParamName}(全域變數)的方式引用工作流程中配置的全域變數,通過NotebookUtils.get_custom_params()可以擷取到組件中配置的自訂參數,傳回值是一個Map,對應的key和value都是字串。
from pai_notebook.utils.notebook_utils import NotebookUtils
custom_params = NotebookUtils.get_custom_params()
print(custom_params)配置組件
在Designer工作流程頁面添加Notebook組件,並在介面右側配置相關參數:
參數類型 | 參數 | 是否必選 | 描述 | 預設值 | |
Notebook設定 | DSW執行個體狀態 | 否 | 展示節點關聯的DSW執行個體狀態及啟動操作。啟動DSW執行個體時需保證已配置工作流程資料存放區路徑。 | 未啟動 | |
Notebook檔案 | 是 | 配置工作流程儲存路徑後,會自動產生 | 工作流程資料存放區路徑/notebook/${工作流程ID}/${節點ID}/main.ipynb | ||
任務輸出路徑 | 否 |
| 如果為空白,預設取工作流程資料存放區路徑 | ||
自訂參數 | 否 | KV格式,指在Notebook檔案中引用的參數,可以實現在工作流程和DSW中共用參數變數,方便靈活調整。支援引用Designer工作流程中的全域變數。 | 無 | ||
初始化命令 | 否 | 在運行Notebook ipynb檔案前初始化運行環境,例如安裝必須的包: | 無 | ||
自動關機時間 | 否 | DSW執行個體將在指定的時間內自動關機,避免使用者調試完成後忘記關閉環境。 | 1小時 | ||
執行配置 | 選擇資源群組 | 公用資源群組 | 否 | 選擇節點規格(CPU或GPU執行個體規格)、專用網路、安全性群組、交換器、網關類型、節點鏡像。 | 預設規格為ecs.c6.large |
專有資源群組 | 否 | 選擇CPU核心數、記憶體、共用記憶體、GPU卡數、節點數量。 | 無 | ||
節點鏡像 | 否 | 支援選擇官方鏡像、自訂鏡像或直接填寫公開的鏡像地址。 | 官方鏡像 | ||