本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Neptune ML 中的自訂模型開發
開始自訂模型開發的好方法是,遵循 Neptune ML 工具組範例
此外,此工具組還提供公用程式函數,協助您在模型訓練和模型轉換期間產生必要的成品。您可以在自訂實作中匯入此 Python 套件。此工具組中提供的任何函數或模組也可在 Neptune ML 訓練環境中使用。
如果您的 Python 模組有額外的外部相依性,則您可以透過在模組的目錄中建立 requirements.txt
檔案,來包含這些額外的相依性。然後,會在訓練指令碼執行之前安裝 requirements.txt
檔案中列出的套件。
實作自訂模型的 Python 模組至少需要包含以下內容:
訓練指令碼進入點
轉換指令碼進入點
model-hpo-configuration.json
檔案
Neptune ML 中的自訂模型訓練指令碼開發
您的自訂模型訓練指令碼應該是可執行的 Python 指令碼,例如 Neptune ML 工具組的 train.py
model-hpo-configuration.json
檔案取得超參數名稱。超參數值會落在有效的超參數範圍內 (如果超參數是可調校的話),或採取預設的超參數值 (如果無法調校的話)。
您的訓練指令碼會使用如下語法在 SageMaker 訓練執行個體上執行:
python3
(script entry point)
--(1st parameter)
(1st value)
--(2nd parameter)
(2nd value)
(...)
對於所有工作,除了您指定的超參數之外,Neptune ML AutoTrainer 還會將數個必要的參數傳送至您的訓練指令碼,而且您的指令碼必須能夠處理這些額外的參數,才能正常運作。
這些額外的必要參數會因任務而有所不同:
若是節點分類或節點迴歸
-
task
– Neptune ML 內部使用的任務類型。對於節點分類,這是node_class
,對於節點迴歸,它是node_regression
。 -
model
– Neptune ML 內部使用的模組名稱,在此情況下,該模組為custom
。 -
name
– Neptune ML 內部使用的任務名稱,在此情況下該任務是node_class-custom
(用於節點分類),以及node_regression-custom
(用於節點迴歸)。 -
target_ntype
– 用於分類或迴歸的節點類型名稱。 -
property
– 用於分類或迴歸的節點屬性名稱。
若是連結預測
-
task
– Neptune ML 內部使用的任務類型。對於連結預測,這是link_predict
。 -
model
– Neptune ML 內部使用的模組名稱,在此情況下,該模組為custom
。 -
name
– Neptune ML 內部使用的任務名稱,在此情況下,該任務為link_predict-custom
。
若是邊緣分類或邊緣迴歸
-
task
– Neptune ML 內部使用的任務類型。對於邊緣分類,這是edge_class
,對於邊緣迴歸,它是edge_regression
。 -
model
– Neptune ML 內部使用的模組名稱,在此情況下,該模組為custom
。 -
name
– Neptune ML 內部使用的任務名稱,在此情況下該任務是edge_class-custom
(用於邊緣分類),以及edge_regression-custom
(用於邊緣迴歸)。 -
target_etype
– 用於分類或迴歸的邊緣類型名稱。 -
property
– 用於分類或迴歸的邊緣屬性名稱。
您的指令碼應該儲存模型參數,以及訓練結束時將需要的任何其他成品。
您可以使用 Neptune ML 工具組公用程式函數,來判斷所處理圖形資料的位置、應儲存模型參數的位置,以及訓練執行個體上可用的 GPU 裝置。如需如何使用這些公用程式函數的範例,請參閱 train.py
Neptune ML 中的自訂模型轉換指令碼開發
需要轉換指令碼,才能利用 Neptune ML 增量工作流程,在不重新訓練模型的情況下,對不斷發展的圖形進行模型推論。即使模型部署所需的所有成品都是由訓練指令碼產生,但如果您想要在不重新訓練模型的情況下產生更新的模型,您仍然需要提供轉換指令碼。
注意
自訂模型目前不支援即時歸納推論。
您的自訂模型轉換指令碼應該是可執行的 Python 指令碼,例如 Neptune ML 工具組的 transform.py
指令碼會在 SageMaker 訓練執行個體上執行,語法如下:
python3
(your transform script entry point)
您的轉換指令碼將需要各項資訊,例如:
所處理圖形資料的位置。
儲存模型參數的位置,以及應儲存新模型成品的位置。
可在執行個體上使用的裝置。
已產生最佳模型的超參數。
這些輸入是使用指令碼可呼叫的 Neptune ML 公用程式函數來取得。如需如何執行此操作的範例,請參閱工具組的範例 transform.py
指令碼應儲存節點嵌入、節點 ID 對應,以及每項任務的模型部署所需的任何其他成品。如需不同 Neptune ML 任務所需之模型成品的詳細資訊,請參閱模型成品文件。
Neptune ML 中的自訂 model-hpo-configuration.json
檔案
model-hpo-configuration.json
檔案會針對您的自訂模型定義超參數。它的格式同於與 Neptune ML 內建模型搭配使用的 model-hpo-configuration.json
檔案,而且優先於 Neptune ML 自動產生並上傳到所處理資料位置的版本。
將新的超參數新增至您的模型時,您也必須為此檔案中的超參數新增一個項目,以便該超參數會傳遞至您的訓練指令碼。
如果您想要超參數可調校,則必須為這個超參數提供範圍,並將其設定為 tier-1
、tier-2
、或 tier-3
參數。如果設定的訓練工作總數允許調整其層中的超參數,則會調整超參數。對於不可調校的參數,您必須提供預設值,並將超參數新增至檔案的 fixed-param
區段。如需如何執行此操作的範例,請參閱工具組的範例 model-hpo-configuration.json
檔案
您也必須提供指標定義,SageMaker 超參數最佳化工作將用來評估已訓練的候選模型。若要這樣做,您可以將 eval_metric
JSON 物件新增至 model-hpo-configuration.json
檔案,如下所示:
"eval_metric": { "tuning_objective": { "MetricName": "
(metric_name)
", "Type": "Maximize" }, "metric_definitions": [ { "Name": "(metric_name)
", "Regex": "(metric regular expression)
" } ] },
對於每一個您想要 SageMaker 從訓練執行個體擷取的指標,metric_definitions
物件中的 eval_metric
陣列會列出其指標定義物件。每個指標定義物件都有一個 Name
索引鍵,可讓您提供指標的名稱 (例如「accuracy」、「f1」等)。Regex
索引鍵可讓您提供一個規則表達式字串,與該特定指標在訓練日誌中列印的方式相符。如需如何定義指標的詳細資訊,請參閱 SageMaker HyperParameter 調校頁面。
然後,eval_metric
中的 tuning_objective
物件可讓您指定 metric_definitions
中的哪個指標應用作評估指標,做為超參數最佳化的目標指標。MetricName
的值必須與 metric_definitions
內其中一個定義中 Name
的值相符。Type
的值應該是「Maximize」或「Minimize」,取決於是否應將指標解譯為更大更好 (例如「accuracy」) 或更少更好 (例如「mean-squared-error」)。
model-hpo-configuration.json
檔案的這個區段中的錯誤可能會導致 Neptune ML 模型訓練 API 工作失敗,因為 SageMaker 超參數調校工作將無法選取最佳模型。
在 Neptune ML 中對您的自訂模型實作進行本機測試
您可以使用 Neptune ML 工具組 Conda 環境,在本機執行程式碼,以便測試並驗證您的模型。如果您是在 Neptune 筆記本執行個體上進行開發,則此 Conda 環境將預先安裝在 Neptune 筆記本執行個體執行個體上。如果您是在不同的執行個體上進行開發,則需要遵循 Neptune ML 工具組中的本機設定指示
當您呼叫模型訓練 API 時,Conda 環境會準確地重現模型將在其中執行的環境。所有範例訓練指令碼和轉換指令碼都可讓您傳遞命令列 --local
旗標,在本機環境中執行指令碼,進行輕鬆的偵錯。在開發自己的模型時,這是一個很好的做法,因為它可以讓您以互動方式並反覆測試模型實作。在 Neptune ML 生產訓練環境中進行模型訓練期間,會省略此參數。