

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 步驟 3。定義管道
<a name="step3"></a>

![定義 ML 管道。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/ml-production-ready-pipelines/images/step3.png)


 在此步驟中，會定義管道將執行之動作的序列和邏輯。這包括離散步驟及其邏輯輸入和輸出。例如，管道開頭的資料狀態為何？ 它是來自不同精細程度的多個檔案，還是來自單一平面檔案？ 如果資料來自多個檔案，您是否需要所有檔案的單一步驟，或是每個檔案的個別步驟來定義預先處理邏輯？ 決策取決於資料來源的複雜性及其預先處理的程度。

在我們的參考實作中，我們使用[AWS Step Functions](https://aws.amazon.com/step-functions/)無伺服器函數協調器 來定義工作流程步驟。不過，[ML Max 架構](https://github.com/awslabs/mlmax)也支援其他管道或狀態機器系統，例如 Apache AirFlow （請參閱[管道協同運作的不同引擎](step6.md#engines)一節），以推動 ML 管道的開發和部署。

## 使用 Step Functions SDK
<a name="sfn-using"></a>

為了定義 ML 管道，我們首先使用[AWS Step Functions 資料科學 SDK](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-python-sdk.html) (Step Functions SDK) 提供的高階 Python API 來定義管道的兩個關鍵元件：*步驟*和*資料*。如果您將管道視為定向無環圖 (DAG)，步驟代表圖形上的節點，而資料會顯示為將一個節點 （步驟） 連接到下一個節點的定向邊緣。ML 步驟的典型範例包括預先處理、訓練和評估。Step Functions SDK 提供許多您可以使用的內建步驟 （例如 [TrainingStep](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/sagemaker.html#stepfunctions.steps.sagemaker.TrainingStep))。資料的範例包括輸入、輸出，以及管道中某些步驟所產生的許多中繼資料集。當您設計 ML 管道時，您不知道資料項目的具體值。您可以定義做為範本 （類似函數參數） *的資料預留位置*，並僅包含資料項目和基本資料類型的名稱。透過這種方式，您可以設計完整的管道藍圖，而無需事先知道在圖形上傳輸的資料的具體值。為此，您可以使用 Step Functions SDK 中的預留位置類別，明確建立這些資料範本的模型。

ML 管道也需要組態參數，才能對每個 ML 步驟的行為執行精細控制。這些特殊資料預留位置稱為*參數預留位置*。當您定義管道時，它們的許多值都是未知的。參數預留位置的範例包括您在管道設計 （例如 AWS 區域 容器映像 URL) 期間定義的基礎設施相關參數，以及您在執行管道時定義的 ML 建模相關參數 （例如超參數）。

## 擴展 Step Functions SDK
<a name="sfn-extending"></a>

在我們的參考實作中，其中一項要求是使用特定參數設定，將 ML 管道定義與具體的 ML 管道建立和部署分開。不過，Step Functions SDK 中的一些內建步驟不允許我們傳遞所有這些預留位置參數。反之，預期參數值會在管道設計期間透過 SageMaker AI 組態 API 呼叫直接取得。如果 SageMaker AI 設計時間環境與 SageMaker AI 執行時間環境相同，這就沒問題，但在實際設定中很少如此。這種管道設計和執行時間之間的緊密耦合，以及 ML 平台基礎設施將保持不變的假設，會嚴重阻礙設計管道的適用性。事實上，ML 管道會在基礎部署平台進行最細微的變更時立即中斷。

為了克服這項挑戰並產生強大的 ML 管道 （我們希望設計一次並在任何地方執行），我們透過擴展一些內建步驟來實作自己的自訂步驟，包括 **TrainingStep**、**ModelStep** 和 **TransformerStep**。這些擴充功能會在 [ML Max 專案](https://github.com/awslabs/mlmax)中提供。這些自訂步驟的界面支援更多參數預留位置，可在管道建立期間或管道執行時填入具體值。