本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 TensorFlow
如需符合您的使用案例的資訊,請參閱下列其中一個選項。
下列清單是使用編譯器執行 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_version
或tensorflow_version
(str) — 必要條件。指定 SageMaker 訓練編譯器支援的 TensorFlow 版本。若要尋找可用版本,請參閱 支援的架構。注意
使用 SageMaker TensorFlow 估算器時,您必須指定。
framework_version
使用 SageMaker Hugging Face 估計器時,必須同時指定和。
transformers_version
tensorflow_version
-
hyperparameters
(dict) — 選用。指定訓練任務的超參數,例如n_gpus
、batch_size
和learning_rate
。當您啟用 SageMaker 訓練編譯器時,請嘗試更大的批次大小並相應地調整學習速率。若要尋找使用編譯器和調整批次大小以改善訓練速度的案例研究,請參閱 測試模型模型 和 SageMaker 訓練編譯器範例筆記本和部落。 -
compiler_config
(TrainingCompilerConfig 物件) — 必要。包含此參數以開啟 SageMaker 訓練編譯器。下列是TrainingCompilerConfig
類型的參數。-
enabled
(bool) – 選用。指定True
或False
開啟或關閉 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
注意
此 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/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 訓練編譯器組態選項必須透過 CreateTrainingJob
API 作業的要求語法中的AlgorithmSpecification
和HyperParameters
欄位來指定
"AlgorithmSpecification": { "TrainingImage": "
<sagemaker-training-compiler-enabled-dlc-image>
" }, "HyperParameters": { "sagemaker_training_compiler_enabled": "true", "sagemaker_training_compiler_debug_mode": "false" }
若要尋找已實作 SageMaker 訓練編譯器的深度學習容器映像 URI 的完整清單,請參閱支援的架構。