使用 TensorFlow 訓練編譯器執行 SageMaker 訓練工作 - Amazon SageMaker

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

使用 TensorFlow 訓練編譯器執行 SageMaker 訓練工作

您可以使用任何 SageMaker 介面透過訓練編譯器執行 SageMaker 訓練任務:Amazon SageMaker Studio 經典版、Amazon SageMaker 筆記本執行個體和 AWS Command Line Interface. AWS SDK for Python (Boto3)

使用開 SageMaker Python 套件

若要開啟 SageMaker 訓練編譯器,請將compiler_config參數新增至 SageMaker TensorFlow 或 Hugging Face 估算器。匯入 TrainingCompilerConfig 類別並將其執行個體傳遞至 compiler_config 參數。下列程式碼範例顯示開啟「 SageMaker 訓練編譯器」時, SageMaker 估算器類別的結構。

提示

要開始使用 TensorFlow 和變形金剛庫提供的預構建模型,請嘗試使用參考表中提供的批次大小。測試模型模型

注意

SageMaker 的訓練編譯 TensorFlow 器可透過 SageMaker TensorFlowHugging Face 架構估算器取得。

如需符合您的使用案例的資訊,請參閱下列其中一個選項。

TensorFlow
from sagemaker.tensorflow import TensorFlow, TrainingCompilerConfig # the original max batch size that can fit into GPU memory without compiler batch_size_native=12 learning_rate_native=float('5e-5') # an updated max batch size that can fit into GPU memory with compiler batch_size=64 # update the global learning rate learning_rate=learning_rate_native/batch_size_native*batch_size hyperparameters={ "n_gpus": 1, "batch_size": batch_size, "learning_rate": learning_rate } tensorflow_estimator=TensorFlow( entry_point='train.py', instance_count=1, instance_type='ml.p3.2xlarge', framework_version='2.9.1', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) tensorflow_estimator.fit()

若要準備訓練指令碼,請參閱以下頁面。

Hugging Face Estimator with TensorFlow
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig # the original max batch size that can fit into GPU memory without compiler batch_size_native=12 learning_rate_native=float('5e-5') # an updated max batch size that can fit into GPU memory with compiler batch_size=64 # update the global learning rate learning_rate=learning_rate_native/batch_size_native*batch_size hyperparameters={ "n_gpus": 1, "batch_size": batch_size, "learning_rate": learning_rate } tensorflow_huggingface_estimator=HuggingFace( entry_point='train.py', instance_count=1, instance_type='ml.p3.2xlarge', transformers_version='4.21.1', tensorflow_version='2.6.3', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) tensorflow_huggingface_estimator.fit()

若要準備訓練指令碼,請參閱以下頁面。

Hugging Face Estimator with TensorFlow
from sagemaker.huggingface import HuggingFace, TrainingCompilerConfig # choose an instance type, specify the number of instances you want to use, # and set the num_gpus variable the number of GPUs per instance. instance_count=1 instance_type='ml.p3.8xlarge' num_gpus=4 # the original max batch size that can fit to GPU memory without compiler batch_size_native=16 learning_rate_native=float('5e-5') # an updated max batch size that can fit to GPU memory with compiler batch_size=26 # update learning rate learning_rate=learning_rate_native/batch_size_native*batch_size*num_gpus*instance_count hyperparameters={ "n_gpus": num_gpus, "batch_size": batch_size, "learning_rate": learning_rate } tensorflow_huggingface_estimator=HuggingFace( entry_point='train.py', instance_count=instance_count, instance_type=instance_type, transformers_version='4.21.1', tensorflow_version='2.6.3', hyperparameters=hyperparameters, compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) tensorflow_huggingface_estimator.fit()
提示

若要準備訓練指令碼,請參閱以下頁面。

下列清單是使用編譯器執行 SageMaker 訓練工作所需的最小參數集。

注意

使用 SageMaker Hugging Face 估算器時,必須指定、、和compiler_config參數以啟 SageMaker 用「transformers_version訓練編譯器」。tensorflow_version hyperparameters您無法使用 image_uri 手動指定列於 支援的架構 的 Training Compiler 整合式深度學習容器。

  • entry_point (str) — 必要條件。指定訓練指令碼的檔案名稱。

  • instance_count (int) – 必要。指定執行個體數目。

  • instance_type (str) — 必要條件。指定執行個體類型。

  • transformers_version(str) — 僅在使用 SageMaker Hugging Face 估算器時才需要。指定 SageMaker 訓練編譯器支援的 Hugging Face 變壓器程式庫版本。若要尋找可用版本,請參閱 支援的架構

  • framework_versiontensorflow_version (str) — 必要條件。指定 SageMaker 訓練編譯器支援的 TensorFlow 版本。若要尋找可用版本,請參閱 支援的架構

    注意

    使用 SageMaker TensorFlow 估算器時,您必須指定。framework_version

    使用 SageMaker Hugging Face 估計器時,必須同時指定和。transformers_version tensorflow_version

  • hyperparameters (dict) — 選用。指定訓練任務的超參數,例如 n_gpusbatch_sizelearning_rate。當您啟用 SageMaker 訓練編譯器時,請嘗試更大的批次大小並相應地調整學習速率。若要尋找使用編譯器和調整批次大小以改善訓練速度的案例研究,請參閱 測試模型模型SageMaker 訓練編譯器範例筆記本和部落

  • compiler_config(TrainingCompilerConfig 物件) — 必要。包含此參數以開啟 SageMaker 訓練編譯器。下列是 TrainingCompilerConfig 類型的參數。

    • enabled (bool) – 選用。指定TrueFalse開啟或關閉 SageMaker 訓練編譯器。預設值為 True

    • debug (bool) – 選用。若要從編譯器加速型訓練任務接收更詳細的訓練日誌,請將其變更為 True。不過,額外的記錄可能會增加額外負荷,並降低已編譯的訓練任務。預設值為 False

警告

如果您開啟 SageMaker 偵錯工具,可能會影響 SageMaker 訓練編譯器的效能。我們建議您在執行 SageMaker 訓練編譯器時關閉偵錯工具,以確定沒有影響效能。如需詳細資訊,請參閱 考量事項。若要關閉偵錯工具功能,請將下列兩個引數新增至估算器:

disable_profiler=True, debugger_hook_config=False

如果成功啟動使用編譯器的訓練任務,您會在任務初始化階段接收到下列日誌:

  • 搭配 TrainingCompilerConfig(debug=False)

    Found configuration for Training Compiler Configuring SM Training Compiler...
  • 搭配 TrainingCompilerConfig(debug=True)

    Found configuration for Training Compiler Configuring SM Training Compiler... Training Compiler set to debug mode

使用 SageMaker Python SDK 和擴充 SageMaker 架構 Deep Learning Containers

AWS Deep Learning Containers (DLC) 適 TensorFlow 用於改編版本 TensorFlow,其中包括開放原始碼 TensorFlow 架構之上的變更。SageMaker 框架 Deep Learning Contain ers 針對基 AWS 礎設施和 Amazon 進行了優化 SageMaker。有了使用 DLC 的優點, SageMaker 訓練編譯器整合增加了比原生 TensorFlow更多的效能改進。此外,您可以透過延伸 DLC 映像來建立自訂訓練容器。

注意

此 Docker 自訂功能目前僅適用於 TensorFlow.

若要針對您的使用案例擴充及自訂 SageMaker TensorFlow DLC,請使用下列指示。

建立 Dockerfile

使用下列碼頭檔範本來擴充 DLC。 SageMaker TensorFlow 您必須使用 SageMaker TensorFlow DLC 映像檔做為 Docker 容器的基本映像檔。若要尋找 SageMaker TensorFlow DLC 影像 URI,請參閱支援的架構

# SageMaker TensorFlow Deep Learning Container image FROM 763104351884.dkr.ecr.<aws-region>.amazonaws.com/tensorflow-training:<image-tag> ENV PATH="/opt/ml/code:${PATH}" # This environment variable is used by the SageMaker container # to determine user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code # Add more code lines to customize for your use-case ...

如需詳細資訊,請參閱步驟 2:建立並上傳 Dockerfile 和 Python 訓練指令碼

擴充 SageMaker 架構 DLC 時,請考慮下列陷阱:

  • 請勿明確解除安裝或變更 SageMaker 容器中的 TensorFlow 套件版本。這樣做會導致開放原始碼 TensorFlow 套件覆寫 AWS 最佳化的 TensorFlow 套件,這可能會導致效能降低。

  • 注意具有特定 TensorFlow 版本或風格作為依賴項的軟件包。這些套件可能會隱含解除安裝最 AWS 佳化 TensorFlow 並安裝開放原始碼 TensorFlow 套件。

例如,存在一個已知問題,即張量流程/模型和張量流程/文本庫始終嘗試重新安裝開源。 TensorFlow如果您需要安裝這些程式庫來為您的使用案例選擇特定版本,建議您查看適用於 v2.9 或更新版本的 SageMaker TensorFlow DLC Docker 檔案。Dockerfile 路徑通常採用下列格式:tensorflow/training/docker/<tensorflow-version>/py3/<cuda-version>/Dockerfile.gpu。在 Dockerfiles 中,您應該找到代碼行以重新安裝 AWS 託管 TensorFlow 二進製文件(指定給TF_URL環境變量)和其他依賴項。重新安裝區段應如以下範例所示:

# tf-models does not respect existing installations of TensorFlow # and always installs open source TensorFlow RUN pip3 install --no-cache-dir -U \ tf-models-official==x.y.z RUN pip3 uninstall -y tensorflow tensorflow-gpu \ ; pip3 install --no-cache-dir -U \ ${TF_URL} \ tensorflow-io==x.y.z \ tensorflow-datasets==x.y.z

建置並推送至 ECR

若要建置並將 Docker 容器推送至 Amazon ECR,請遵循下列連結中的指示:

使用開發套 SageMaker Python 估算器執行

像往常一樣使用 SageMaker TensorFlow 框架估算器。您必須指定 image_uri 以使用託管於 Amazon ECR 的新容器。

import sagemaker, boto3 from sagemaker import get_execution_role from sagemaker.tensorflow import TensorFlow, TrainingCompilerConfig account_id = boto3.client('sts').get_caller_identity().get('Account') ecr_repository = 'tf-custom-container-test' tag = ':latest' region = boto3.session.Session().region_name uri_suffix = 'amazonaws.com' byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format( account_id, region, uri_suffix, ecr_repository + tag ) byoc_image_uri # This should return something like # 111122223333.dkr.ecr.us-east-2.amazonaws.com/tf-custom-container-test:latest estimator = TensorFlow( image_uri=image_uri, role=get_execution_role(), base_job_name='tf-custom-container-test-job', instance_count=1, instance_type='ml.p3.8xlarge' compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) # Start training estimator.fit()

使用 SageMaker CreateTrainingJob API 作業啟用 SageMaker 訓練編譯器

SageMaker 訓練編譯器組態選項必須透過 CreateTrainingJobAPI 作業的要求語法中的AlgorithmSpecificationHyperParameters欄位來指定

"AlgorithmSpecification": { "TrainingImage": "<sagemaker-training-compiler-enabled-dlc-image>" }, "HyperParameters": { "sagemaker_training_compiler_enabled": "true", "sagemaker_training_compiler_debug_mode": "false" }

若要尋找已實作 SageMaker 訓練編譯器的深度學習容器映像 URI 的完整清單,請參閱支援的架構