Notebook
Designer中提供了Notebook組件,可與DSW實(shí)例實(shí)現(xiàn)無縫連接,支持用戶在工作流中直接使用Notebook編寫、調(diào)試和運(yùn)行代碼,同時保留工作流的上下文和狀態(tài)。
背景信息
隨著Notebook在開源社區(qū)的廣泛應(yīng)用,許多數(shù)據(jù)或AI開發(fā)者已將其視為一個強(qiáng)大的代碼編寫和調(diào)試工具。因此Designer中提供了Notebook組件,可與DSW實(shí)例實(shí)現(xiàn)無縫連接,支持用戶在工作流中直接使用Notebook編寫、調(diào)試和運(yùn)行代碼,同時保留工作流的上下文和狀態(tài)。
相對于直接使用DSW進(jìn)行開發(fā),在Designer中使用Notebook組件具有以下優(yōu)勢:
提升開發(fā)效率:可以在工作流中直接打開Notebook,利用容器化實(shí)例進(jìn)行開發(fā)并調(diào)試代碼。
上下文保留: Designer中的Notebook組件可在實(shí)例啟動時,自動加載工作流中上游組件的輸出數(shù)據(jù)和狀態(tài),使得用戶能夠立即使用這些數(shù)據(jù)進(jìn)行進(jìn)一步的分析和開發(fā),并將結(jié)果傳給下游。
工作流整體調(diào)試: Notebook組件將作為工作流中的一環(huán),用戶可以在不同的組件之間無縫切換,優(yōu)化整個數(shù)據(jù)處理和模型訓(xùn)練的過程。
使用場景
開發(fā)環(huán)節(jié)
用戶在組件中啟動并前往DSW實(shí)例編輯Notebook文件,可以直接在DSW實(shí)例內(nèi)部開發(fā)和調(diào)試Notebook,并且支持從Designer中獲取自定義參數(shù)配置。
如果資源組選擇按量付費(fèi),則會根據(jù)DSW實(shí)例啟動時長進(jìn)行計(jì)費(fèi),詳情請參見DSW后付費(fèi)(按量計(jì)費(fèi))。
運(yùn)行環(huán)節(jié)
用戶在Designer畫布直接執(zhí)行Notebook組件、整個工作流或使用DataWorks周期性調(diào)度工作流,系統(tǒng)會啟動一個DLC任務(wù)來執(zhí)行jupyter nbconvert轉(zhuǎn)換后的Notebook文件。
如果資源組選擇按量付費(fèi),則會根據(jù)DLC任務(wù)執(zhí)行時長進(jìn)行計(jì)費(fèi),詳情請參見DLC后付費(fèi)(按量計(jì)費(fèi))。
組件說明
Notebook組件共有4個輸入端口和4個輸出端口。其中,所有的輸入端口均可連接OSS路徑或MaxCompute表類型的數(shù)據(jù);輸出端口中端口1、2是OSS路徑輸出端口,端口3、4是MaxCompute表輸出端口。
通過Notebook組件啟動的DSW實(shí)例時,需要安裝pai-notebook-utils包,用戶通過pai-notebook-utils包可以獲取Notebook節(jié)點(diǎn)的輸入端口、輸出端口、自定義參數(shù)等信息。
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()
三個函數(shù),分別用于獲取輸入端口配置、輸出端口配置、自定義參數(shù)。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數(shù)據(jù)或MaxCompute表,通過pai-notebook-utils提供的NotebookUtils.get_inputs()
可以獲取到所有端口的輸入信息,其返回值是一個數(shù)組,數(shù)組中每個item包含以下字段:
item字段 | 說明 |
name | 輸入端口名稱,輸入端口名稱包含input1、input2、input3、input4。 |
type | 端口類型,包含DataSet、Model等。 |
location_type | 存儲類型,包含MaxComputeTable、OSS。 |
value | Map格式,保存端口的配置信息。 |
當(dāng)輸入端為MaxCompute表類型時,此時location_type為MaxComputeTable,value包含project、table、endpoint字段,依次分別表示表所屬的MaxCompute項(xiàng)目、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}")
當(dāng)輸入端為OSS類型時,OSS路徑會被掛載為本地路徑,用戶可以通過訪問本地路徑的方式訪問OSS文件,也可以通過OSS SDK直接訪問OSS。此時location_type為OSS,value包含key、bucket、endpoint、mountPath字段,依次分別表示OSS路徑的Path、OSS Bucket、OSS的endpoint、OSS的本地掛載路徑。
重要如果上游OSS路徑發(fā)生了變化,且新的路徑未掛載到DSW實(shí)例中,將無法獲取到mountPath,您需要重啟DSW實(shí)例。
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()
可以獲取到所有端口的輸出信息,其返回值是一個數(shù)組,數(shù)組中每個item包含以下字段:
item字段 | 說明 |
name | 輸出端口名稱,輸入端口名稱包含output1、output2、output3、output4。 |
location_type | 存儲類型,包含MaxComputeTable、OSS。 |
value | Map格式,保存端口的配置信息。 |
當(dāng)輸出端為MaxCompute表類型時,當(dāng)前工作空間需要關(guān)聯(lián)MaxCompute計(jì)算引擎;當(dāng)輸出端為OSS類型時,數(shù)據(jù)將會被保存到輸出的OSS路徑中,如果未配置任務(wù)輸出路徑,會通過全局的默認(rèn)路徑自動生成輸出路徑。輸出端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))
自定義參數(shù)
您也可以自定義參數(shù),參數(shù)值可以通過 ${globalParamName}(全局變量)的方式引用工作流中配置的全局變量,通過NotebookUtils.get_custom_params()
可以獲取到組件中配置的自定義參數(shù),返回值是一個Map,對應(yīng)的key和value都是字符串。
from pai_notebook.utils.notebook_utils import NotebookUtils
custom_params = NotebookUtils.get_custom_params()
print(custom_params)
配置組件
在Designer工作流頁面添加Notebook組件,并在界面右側(cè)配置相關(guān)參數(shù):
參數(shù)類型 | 參數(shù) | 是否必選 | 描述 | 默認(rèn)值 | |
Notebook設(shè)置 | DSW實(shí)例狀態(tài) | 否 | 展示節(jié)點(diǎn)關(guān)聯(lián)的DSW實(shí)例狀態(tài)及啟動操作。啟動DSW實(shí)例時需保證已配置工作流數(shù)據(jù)存儲路徑。 | 未啟動 | |
Notebook文件 | 是 | 配置工作流存儲路徑后,會自動生成 | 工作流數(shù)據(jù)存儲路徑/notebook/${工作流ID}/${節(jié)點(diǎn)ID}/main.ipynb | ||
任務(wù)輸出路徑 | 否 |
| 如果為空,默認(rèn)取工作流數(shù)據(jù)存儲路徑 | ||
自定義參數(shù) | 否 | KV格式,指在Notebook文件中引用的參數(shù),可以實(shí)現(xiàn)在工作流和DSW中共享參數(shù)變量,方便靈活調(diào)整。支持引用Designer工作流中的全局變量。 | 無 | ||
初始化命令 | 否 | 在運(yùn)行Notebook ipynb文件前初始化運(yùn)行環(huán)境,例如安裝必須的包: | 無 | ||
自動關(guān)機(jī)時間 | 否 | DSW實(shí)例將在指定的時間內(nèi)自動關(guān)機(jī),避免用戶調(diào)試完成后忘記關(guān)閉環(huán)境。 | 1小時 | ||
執(zhí)行配置 | 選擇資源組 | 公共資源組 | 否 | 選擇節(jié)點(diǎn)規(guī)格(CPU或GPU實(shí)例規(guī)格)、專有網(wǎng)絡(luò)、安全組、交換機(jī)、網(wǎng)關(guān)類型、節(jié)點(diǎn)鏡像。 | 默認(rèn)規(guī)格為ecs.c6.large |
專有資源組 | 否 | 選擇CPU核數(shù)、內(nèi)存、共享內(nèi)存、GPU卡數(shù)、節(jié)點(diǎn)數(shù)量。 | 無 | ||
節(jié)點(diǎn)鏡像 | 否 | 支持選擇官方鏡像、自定義鏡像或直接填寫公開的鏡像地址。 | 官方鏡像 |