快取管道步驟 - Amazon SageMaker

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

快取管道步驟

當您使用步驟簽名快取時,P SageMaker ipeline 會嘗試尋找目前管線步驟的先前執行,且某些屬性具有相同的值。如果找到,P SageMaker ipeline 會傳播上一次執行的輸出,而不是重新計算步驟。核取的屬性是步驟類型特有的,會在 依管道步驟類型的預設快取金鑰屬性 中列出。

您必須選擇啟用步驟快取,該功能依預設處於關閉狀態。當您開啟步驟快取時,還必須定義逾時。此逾時定義間隔多久的先前執行仍可作為重新執行候選。

步驟快取只會考慮成功的執行,決不會重複使用失敗的執行。當逾時期間內存在多個成功執行時,P SageMaker ipeline 會使用最近一次成功執行的結果。如果逾時期間內沒有成功執行相符,P SageMaker ipeline 會重新執行步驟。如果執行器找到符合條件之先前的執行,但該執行仍在進行,則這兩個步驟都會繼續執行並在成功時更新快取。

步驟快取的範圍僅限於個別管道,因此即使有步驟簽名相符,您也無法重複使用其他管道中的步驟。

步驟快取適用於下列步驟類型:

開啟步驟快取

若要開啟步驟快取,您必須將 CacheConfig 屬性新增至步驟定義。

CacheConfig 屬性在管道定義檔案中使用下列格式:

{     "CacheConfig": {         "Enabled": false,         "ExpireAfter": "<time>"     } }

Enabled 欄位會指出是否針對特定步驟開啟了快取。您可以將欄位設定為true,這會告訴您 SageMaker 嘗試尋找具有相同屬性之步驟的先前執行。或者,您可以將欄位設定為false,這表示每次管線執行時都 SageMaker 要執行步驟。 ExpireAfter是定義逾時期限的 ISO 8601 持續時間格式的字串。ExpireAfter 持續時間可以是年、月、週、日、小時或分鐘值。每個值由一個數字組成,後跟一個表示持續時間單位的字母。例如:

  • “30d” = 30 天

  • “5y” = 5 年

  • “T16m” = 16 分鐘

  • “30dT5h” = 30 天 5 小時。

以下討論說明使用 Amazon SageMaker Python 開發套件為新管道或預先存在的管道開啟快取的程序。

為新管道開啟快取

對於新管道,請使用 enable_caching=True 初始化 CacheConfig 執行個體,並將其作為管道步驟輸入提供。下列範例會為訓練步驟開啟逾時時間為 1 小時的快取:

from sagemaker.workflow.pipeline_context import PipelineSession from sagemaker.workflow.steps import CacheConfig cache_config = CacheConfig(enable_caching=True, expire_after="PT1H") estimator = Estimator(..., sagemaker_session=PipelineSession()) step_train = TrainingStep( name="TrainAbaloneModel", step_args=estimator.fit(inputs=inputs), cache_config=cache_config )

為既有的管道開啟快取

若要為既有、已定義之管道開啟快取,請開啟步驟的 enable_caching 屬性,並將 expire_after 設定為逾時值。最後,使用 pipeline.upsert()pipeline.update() 更新管道。再次執行後,下列程式碼範例會為訓練步驟開啟逾時時間為 1 小時的快取:

from sagemaker.workflow.pipeline_context import PipelineSession from sagemaker.workflow.steps import CacheConfig from sagemaker.workflow.pipeline import Pipeline cache_config = CacheConfig(enable_caching=True, expire_after="PT1H") estimator = Estimator(..., sagemaker_session=PipelineSession()) step_train = TrainingStep( name="TrainAbaloneModel", step_args=estimator.fit(inputs=inputs), cache_config=cache_config ) # define pipeline pipeline = Pipeline( steps=[step_train] ) # additional step for existing pipelines pipeline.update() # or, call upsert() to update the pipeline # pipeline.upsert()

或者,在定義 (既有) 管道之後更新快取組態,允許一次持續的程式碼執行。下列程式碼範例會示範此方法:

# turn on caching with timeout period of one hour pipeline.steps[0].cache_config.enable_caching = True pipeline.steps[0].cache_config.expire_after = "PT1H" # additional step for existing pipelines pipeline.update() # or, call upsert() to update the pipeline # pipeline.upsert()

如需有關 Python SDK 參數如何影響快取的詳細程式碼範例和討論,請參閱 Amazon SageMaker Python SDK 文件中的快取組態

關閉步驟快取

如果您變更任何未針對其步驟類型在 依管道步驟類型的預設快取金鑰屬性 中列出的屬性,管道步驟不會重新執行。不過,您可能會決定仍然要重新執行管道步驟。在這種情況下,您需要關閉步驟快取。

若要關閉步驟快取,請在步驟定義中將步驟定義之 CacheConfig 屬性中的 Enabled 屬性設定為 false,如下列程式碼片段所示:

{     "CacheConfig": {         "Enabled": false,         "ExpireAfter": "<time>"     } }

請注意,如果 Enabledfalse,則 ExpireAfter 屬性會被忽略。

若要使用 Amazon SageMaker Python SDK 關閉管道步驟的快取,請定義管道步驟的管道、關閉enable_caching屬性,然後更新管道。

再次執行後,下列程式碼範例會為訓練步驟關閉快取:

from sagemaker.workflow.pipeline_context import PipelineSession from sagemaker.workflow.steps import CacheConfig from sagemaker.workflow.pipeline import Pipeline cache_config = CacheConfig(enable_caching=False, expire_after="PT1H") estimator = Estimator(..., sagemaker_session=PipelineSession()) step_train = TrainingStep( name="TrainAbaloneModel", step_args=estimator.fit(inputs=inputs), cache_config=cache_config ) # define pipeline pipeline = Pipeline( steps=[step_train] ) # update the pipeline pipeline.update() # or, call upsert() to update the pipeline # pipeline.upsert()

或者,在定義管道之後關閉 enable_caching 屬性,允許一次持續的程式碼執行。下列程式碼範例會示範此解決方案:

# turn off caching for the training step pipeline.steps[0].cache_config.enable_caching = False # update the pipeline pipeline.update() # or, call upsert() to update the pipeline # pipeline.upsert()

如需有關 Python SDK 參數如何影響快取的詳細程式碼範例和討論,請參閱 Amazon SageMaker Python SDK 文件中的快取組態

依管道步驟類型的預設快取金鑰屬性

在決定是否要重複使用先前的配管步驟或重新執行步驟時,P SageMaker ipeline 會檢查某些屬性是否已變更。如果該組屬性與逾時時間內的所有先前執行不同,則步驟會再次執行。這些屬性包括輸入成品、應用程式或演算法規格以及環境變數。

下列清單顯示每個配管步驟類型,以及如果變更,則會啟動步驟重新執行的屬性。如需有關使用哪些 Python SDK 參數來建立下列屬性的詳細資訊,請參閱 Amazon SageMaker Python 開發套件文件中的快取組態

  • AppSpecification

  • 環境

  • ProcessingInputs。此屬性包含預先處理指令碼的相關資訊。

  • AlgorithmSpecification

  • CheckpointConfig

  • DebugHookConfig

  • DebugRuleConfigurations

  • 環境

  • HyperParameters

  • InputDataConfig。此屬性包含訓練指令碼的相關資訊。

  • HyperParameterTuningJobConfig

  • TrainingJobDefinition。此屬性由多個子屬性組成,並非所有子屬性都會導致步驟重新執行。可能會導致重新執行 (如果已變更) 的子屬性包括:

    • AlgorithmSpecification

    • HyperParameterRanges

    • InputDataConfig

    • StaticHyperParameters

    • TuningObjective

  • TrainingJobDefinitions

  • AutoML JobConfig。此屬性由多個子屬性組成,並非所有子屬性都會導致步驟重新執行。可能會導致重新執行 (如果已變更) 的子屬性包括:

    • CompletionCriteria

    • CandidateGenerationConfig

    • DataSplitConfig

    • Mode

  • AutoML JobObjective

  • InputDataConfig

  • ProblemType

  • DataProcessing

  • 環境

  • ModelName

  • TransformInput

  • ClarifyCheckConfig

  • CheckJobConfig

  • SkipCheck

  • RegisterNewBaseline

  • ModelPackageGroupName

  • SuppliedBaselineConstraints

  • QualityCheckConfig

  • CheckJobConfig

  • SkipCheck

  • RegisterNewBaseline

  • ModelPackageGroupName

  • SuppliedBaselineConstraints

  • SuppliedBaselineStatistics

  • ClusterId

  • StepConfig

快取資料存取控制

SageMaker 管線執行時,它會快取與管線啟動之 SageMaker工作相關聯的參數和中繼資料,並儲存這些參數和中繼資料,以便在後續執行中重複使用。除了快取的管道步驟之外,還可透過各種來源存取此中繼資料,包括下列類型的來源:

  • Describe*Job 請求

  • CloudWatch 日誌

  • CloudWatch 活動

  • CloudWatch 度量

  • SageMaker 搜索

請注意,對清單中每個資料來源的存取權都是由其自己的一組 IAM 許可控制。移除特定角色對某個資料來源的存取權不會影響對其他資料來源的存取層級。例如,帳戶管理員可能會移除發起人角色之 Describe*Job 請求的 IAM 許可。雖然發起人無法再提出 Describe*Job 請求,但只要有執行管道的許可,就仍然可以使用快取步驟從管道執行中擷取中繼資料。如果帳戶管理員想要從特定 SageMaker 工作中完全移除中繼資料的存取權,他們必須移除每個提供資料存取權的相關服務的權限。