SageMaker 受管暖集區 - Amazon SageMaker

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

SageMaker 受管暖集區

SageMaker 受管暖集區可讓您在訓練任務完成後保留和重複使用佈建的基礎設施,以減少重複工作負載的延遲,例如反覆實驗或連續執行許多任務。符合指定參數的後續訓練工作會在保留的暖集區基礎設施上執行,藉由減少佈建資源所花費的時間來加快啟動時間。

重要

SageMaker 受管暖集區是可計費的資源。如需詳細資訊,請參閱帳單

運作方式

若要使用 SageMaker 受管暖集區並減少類似連續訓練任務之間的延遲,請建立訓練任務,指定其 中的KeepAlivePeriodInSecondsResourceConfig。此值代表在暖集區中保留已設定的資源,以供後續訓練工作使用的持續時間 (以秒為單位)。如果您需要使用類似的組態執行數個訓練工作,您可以在不同的工作中使用專用的永久性快取目錄,來儲存和重複使用您的資訊,進一步減少延遲和應計費時間。

暖集區生命週期

  1. 建立 KeepAlivePeriodInSeconds 值大於 0 的初始訓練工作。當您執行第一個訓練工作時,這會以典型的啟動時間 “冷啟動” 一個叢集。

  2. 當第一個訓練工作完成時,佈建的資源會在 KeepAlivePeriodInSeconds 值指定的期間內,留在暖集區中保持作用狀態。只要叢集運作狀態良好且暖集區是在指定的 KeepAlivePeriodInSeconds 內,則暖集區狀態為 Available

  3. 暖集區會維持 Available,直到辨識出要重複使用的相符訓練工作,或者直到超過指定的 KeepAlivePeriodInSeconds 並終止。KeepAlivePeriodInSeconds 允許的最大時間長度為 3600 秒 (60 分鐘)。如果暖集區狀態為 Terminated,則此暖集區的生命週期結束。

  4. 如果暖集區辨識出規格相符 (例如執行個體計數或執行個體類型) 的第二個訓練工作,則暖集區會從第一個訓練工作移至第二個訓練工作,以供重複使用。第一個訓練工作暖集區的狀態變成 Reused。第一個訓練工作的暖集區生命週期結束。

  5. 重複使用暖集區的第二個訓練工作的狀態會變成 InUse。訓練工作完成之後,暖集區會在第二個訓練工作指定的 KeepAlivePeriodInSeconds 時間內保持 Available。暖集區可以接續用於後續相符訓練工作,最多至 28 天。

  6. 如果暖集區無法再重複使用,則暖集區狀態為 Terminated。如果使用者終止暖集區以更新修補程式,或超過指定的 KeepAlivePeriodInSeconds,則無法再使用暖集區。

如需暖集區狀態選項的詳細資訊,請參閱 Amazon 參考 WarmPoolStatus 中的 。 SageMaker API

暖集區建立

如果初始訓練工作已順利完成,且 KeepAlivePeriodInSeconds 值大於 0,則會建立暖集區。如果您在叢集啟動後停止訓練工作,則仍會保留暖集區。如果訓練工作因演算法或用戶端錯誤而失敗,則仍會保留暖集區。如果訓練工作因任何其他可能會影響叢集健康狀態的原因而失敗,則不會建立暖集區。

若要驗證是否成功建立暖集區,請檢查訓練工作的暖集區狀態。如果成功佈建暖集區,則暖集區狀態為 Available。如果無法佈建暖集區,則暖集區狀態為 Terminated

符合的訓練任務

若要保留暖集區,它必須在 KeepAlivePeriodInSeconds 值指定的時間內,找到符合的訓練工作。如果下列值相同,則下一個訓練工作即完全相同:

  • RoleArn

  • ResourceConfig 值:

    • InstanceCount

    • InstanceType

    • VolumeKmsKeyId

    • VolumeSizeInGB

  • VpcConfig 值:

    • SecurityGroupIds

    • Subnets

  • EnableInterContainerTrafficEncryption

  • EnableNetworkIsolation

  • 如果您在訓練任務的 True中傳遞訓練任務的 EnableSessionTagChaining設定為 的工作階段標籤SessionChainingConfig,則相符的訓練任務也必須EnableSessionTagChaining設定為 ,True並具有相同的工作階段金鑰。如需詳細資訊,請參閱使用屬性型存取控制 (ABAC) 進行多租戶訓練

這些值都必須相同,暖集區才能移至後續的訓練工作供重複使用。

暖集區最長上限持續時間

單一訓練任務的 KeepAlivePeriodInSeconds 上限為 3600 秒 (60 分鐘),暖集區叢集可繼續執行連續訓練任務的時間最長上限為 28 天。

每個後續訓練工作也必須指定一個 KeepAlivePeriodInSeconds 值。當暖集區移至下一個訓練工作時,它會承襲該訓練工作中 ResourceConfig 內指定的新 KeepAlivePeriodInSeconds 值。通過這種方式,您可以讓暖集區從一個訓練工作移至下一個,最多可以維持 28 天。

如果 KeepAlivePeriodInSeconds 未指定,則暖集區會在訓練工作完成後結束。

使用持久性快取

當您建立暖集區時, 會在磁碟區上 SageMaker 掛載特殊目錄,該目錄會在整個暖集區生命週期內持續存在。此目錄也可用於儲存您要在其他工作中重複使用的資料。

對於需要以下條件的作業,與單獨使用暖集區相比,使用持久性快取可以減少延遲和應計費時間:

  • 以相似的組態多次互動

  • 累加式訓練工作

  • 超參數最佳化

例如,您可以在持久性快取目錄中設置 pip 快取目錄,藉此避免在重複執行時下載相同的 Python 相依性。此目錄的內容完全由您負責管理。以下是您可以放進持久性快取中的資料類型範例,以助於減少延遲和應計費時間。

  • 由 pip 管理的相依性。

  • 由 conda 管理的相依性。

  • 檢查點資訊

  • 訓練期間產生的一切其他資訊。

持久性快取的位置為 /opt/ml/sagemaker/warmpoolcache。環境變數 SAGEMAKER_MANAGED_WARMPOOL_CACHE_DIRECTORY 指向持久性快取目錄的位置。

下列程式碼範例會示範如何設定暖集區,並使用持久性快取來儲存 pip 相依性,以便在後續作業中使用。後續工作必須在參數 keep_alive_period_in_seconds 指定的時間範圍內執行。

import sagemakerfrom sagemaker import get_execution_rolefrom sagemaker.tensorflow import TensorFlow # Creates a SageMaker session and gets execution role session = sagemaker.Session() role = get_execution_role() # Creates an example estimator estimator = TensorFlow( ... entry_point='my-training-script.py', source_dir='code', role=role, model_dir='model_dir', framework_version='2.2', py_version='py37', job_name='my-training-job-1', instance_type='ml.g4dn.xlarge', instance_count=1, volume_size=250, hyperparameters={ "batch-size": 512, "epochs": 1, "learning-rate": 1e-3, "beta_1": 0.9, "beta_2": 0.999, }, keep_alive_period_in_seconds=1800, environment={"PIP_CACHE_DIR": "/opt/ml/sagemaker/warmpoolcache/pip"} )

在先前的程式碼範例中,使用環境參數匯出環境變數 PIP_CACHE_DIRECTORY 以指向目錄 /opt/ml/sagemaker/warmpoolcache/pip。匯出此環境變數將變更 pip 將快取儲存至新地點的位置。您在持久性快取目錄中建立的一切目錄 (包括巢狀目錄) 都可以在後續的訓練執行期間重複使用。在先前的代碼範例中,名為 pip 的目錄被更改為預設位置,以快取使用 pip 安裝的一切相依性。

您也可以使用環境變數從 Python 訓練指令碼中存取持久性快取位置,如下列程式碼範例所示。

import os import shutil if __name__ == '__main__': PERSISTED_DIR = os.environ["SAGEMAKER_MANAGED_WARMPOOL_CACHE_DIRECTORY"] # create a file to be persisted open(os.path.join(PERSISTED_DIR, "test.txt"), 'a').close() # create a directory to be persisted os.mkdir(os.path.join(PERSISTED_DIR, "test_dir")) # Move a file to be persisted shutil.move("path/of/your/file.txt", PERSISTED_DIR)

帳單

SageMaker 受管暖集區是可計費的資源。擷取訓練工作的暖集區狀態,以檢查暖集區的應計費時間。您可以透過 或使用 Amazon SageMaker 主控台直接透過 DescribeTrainingJobAPI命令來檢查暖集區狀態。如需詳細資訊,請參閱 Amazon 參考 WarmPoolStatus 中的 。 SageMaker API

注意

在參數 KeepAlivePeriodInSeconds 指定的時間結束後,暖集區和持久性快取都會關閉,內容並將遭到刪除。

考量事項

使用 SageMaker 受管暖集區時,請考慮下列項目。

  • SageMaker 受管暖集區無法與異質叢集訓練搭配使用。

  • SageMaker 受管暖集區無法與 Spot 執行個體搭配使用。

  • SageMaker 受管暖集區KeepAlivePeriodInSeconds的值限制為 3600 秒 (60 分鐘)。

  • 如果暖集區持續成功符合指定 KeepAlivePeriodInSeconds 數值的訓練工作,叢集最多只能繼續執行 28 天。