本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon SageMaker AI 如何提供訓練資訊
本節說明 SageMaker AI 如何讓訓練資訊可供您的 Docker 容器使用,例如訓練資料、超參數和其他組態資訊。
當您傳送CreateTrainingJob
請求至 SageMaker AI 以開始模型訓練時,您可以指定包含訓練演算法之 Docker 映像的 Amazon Elastic Container Registry (Amazon ECR) 路徑。您亦需指定 Amazon Simple Storage Service (Amazon S3) 的位置,其為訓練資料和演算法專屬參數的存放位置。SageMaker AI 可讓 Docker 容器使用此資訊,讓您的訓練演算法可以使用它。本節說明我們如何讓這項資訊可供 Docker 容器使用。如需建立訓練工作的資訊,請參閱 CreateTrainingJob
。如需 SageMaker AI 容器組織資訊方式的詳細資訊,請參閱 SageMaker 訓練和推論工具組。
超參數
SageMaker AI 可讓CreateTrainingJob
請求中的超參數在 /opt/ml/input/config/hyperparameters.json
檔案的 Docker 容器中可用。
以下是 hyperparameters.json
中的超參數組態範例,用來指定在 CreateTrainingJob
作業中 XGBoost 的 num_round
和 eta
超參數。
{ "num_round": "128", "eta": "0.001" }
如需可用於 SageMaker AI 內建 XGBoost 演算法的超參數完整清單,請參閱 XGBoost 超參數。
您可以調整的超參數,依您正在訓練的演算法而定。如需適用於 SageMaker AI 內建演算法的超參數清單,請在使用 Amazon SageMaker AI 內建演算法或預先訓練模型的演算法連結下,在超參數中尋找這些項目。
環境變數
SageMaker AI 會在您的容器中設定下列環境變數:
-
TRAINING_JOB_NAME – 在請求
CreateTrainingJob
的TrainingJobName
參數中指定。 -
TRAINING_JOB_ARN – 訓練工作的 Amazon Resource Name (ARN),會被傳回,以做為
CreateTrainingJob
回應中的TrainingJobArn
。 -
CreateTrainingJob
請求中環境參數指定的所有環境變數。
輸入資料組態
SageMaker AI 可讓您的CreateTrainingJob
請求在 Docker 容器中的 /opt/ml/input/config/inputdataconfig.json
檔案中提供 InputDataConfig
參數中的資料頻道資訊。
舉例來說,假設您在請求中指定三個資料通道 (train
、evaluation
與 validation
),SageMaker AI 提供下列 JSON:
{ "train" : {"ContentType": "trainingContentType", "TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"}, "evaluation" : {"ContentType": "evalContentType", "TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"}, "validation" : {"TrainingInputMode": "File", "S3DistributionType": "FullyReplicated", "RecordWrapperType": "None"} }
注意
SageMaker AI 僅提供容器每個資料通道 (例如,頻道名稱和內容類型) 的相關資訊,如先前範例所示。 S3DistributionType
將設定為FullyReplicated
您指定 EFS 或 FSxLustre 做為輸入資料來源。
訓練資料
CreateTrainingJob
請求中 AlgorithmSpecification
的 TrainingInputMode
參數會指定如何將訓練資料集提供給您的容器。以下是可用的輸入模式:
-
File
模式如果您使用
File
模式做為TrainingInputMode
值,SageMaker AI 會在容器中設定下列參數。-
您的
TrainingInputMode
參數以 “檔案” 形式被寫入inputdataconfig.json
。 -
您的資料通道目錄被寫入
/opt/ml/input/data/
。channel_name
如果您使用
File
模式,SageMaker AI 會為每個頻道建立目錄。例如,如果您有三個頻道名為training
、validation
和testing
,SageMaker AI 會在 Docker 容器中製作下列三個目錄:-
/opt/ml/input/data/training
-
/opt/ml/input/data/validation
-
/opt/ml/input/data/testing
File
模式支援下列資料來源:-
Amazon Simple Storage Service (Amazon S3)
-
Amazon Elastic File System (Amazon EFS)
-
Amazon FSx for Lustre
注意
使用檔案系統資料來源 (例如 Amazon EFS 和 Amazon FSx) 的通道必須使用
File
模式。在這種情況下,通道中提供的目錄路徑掛載於/opt/ml/input/data/
。channel_name
-
-
FastFile
模式如果您使用
FastFile
模式做為TrainingInputNodeParameter
,SageMaker AI 會在容器中設定下列參數。-
與
File
模式類似,在FastFile
模式下,您的TrainingInputMode
參數以 “檔案” 形式被寫入inputdataconfig.json
。 -
您的資料通道目錄被寫入
/opt/ml/input/data/
。channel_name
FastFile
模式支援下列資料來源。-
Amazon S3
如果您使用
FastFile
模式,通道目錄會以唯讀權限掛載。過去
File
模式一向早於FastFile
模式。為了確保向下相容性,只要將TrainingInputMode
參數設定為inputdataconfig.json.
內的File
,支援File
模式的演算法也可以順暢地使用FastFile
模式。注意
使用
FastFile
模式的通道必須使用 “S3Prefix” 的S3DataType
。FastFile
模式會顯示資料夾視圖,使用斜線 (/
) 做為分隔符號,將 Amazon S3 物件分成多個資料夾。S3Uri
字首不應對應至部分的資料夾名稱。例如,如果 Amazon S3 資料集包含s3://amzn-s3-demo-bucket/train-01/data.csv
,則s3://amzn-s3-demo-bucket/train
或s3://amzn-s3-demo-bucket/train-01
不可做為S3Uri
字首。建議在結尾使用斜線來定義對應於資料夾的通道。例如,資料夾
train-01
的s3://amzn-s3-demo-bucket/train-01/
通道。結尾沒有斜線時,若有其他資料夾s3://amzn-s3-demo-bucket/train-011/
或檔案s3://amzn-s3-demo-bucket/train-01.txt/
存在,則通道將不明確。 -
-
Pipe
模式-
TrainingInputMode
參數寫入inputdataconfig.json
:“管道” -
Docker 容器中的資料通道目錄:
/opt/ml/input/data/
channel_name_epoch_number
-
支援的資料來源:Amazon S3
您需要從每個通道的個別的管道讀取。例如,您擁有三個通道,且名稱分別為
training
、validation
與testing
,則需要從下列管道讀取:-
/opt/ml/input/data/training_0, /opt/ml/input/data/training_1, ...
-
/opt/ml/input/data/validation_0, /opt/ml/input/data/validation_1, ...
-
/opt/ml/input/data/testing_0, /opt/ml/input/data/testing_1, ...
請循序讀取管道。例如,如果您有名為
training
的通道,請依此順序讀取管道:-
在讀取模式中開啟
/opt/ml/input/data/training_0
,並閱讀至檔案結尾 (EOF),或者您已完成第一個 epoch,則請盡快關閉管道檔案。 -
關閉第一個管道檔案之後,請尋找
/opt/ml/input/data/training_1
並讀取它,直到完成第二個 epoch,以此類推。
若指定 epoch 的檔案尚不存在,則您可能需要重試執行程式碼,直到該管道建立為止。通道類型之間並沒有順序限制。例如,您可以讀取
training
通道的多個 epoch,但只有在準備好的時候才開始讀取validation
通道。或者,若演算法有需求,您亦可同時讀取這兩個管道。如需 Jupyter 筆記本的範例,其中顯示如何在自帶容器時使用管道模式,請參閱將自有管道模式演算法帶入 Amazon SageMaker AI
。 -
SageMaker AI 模型訓練支援高效能 S3 Express One Zone 目錄儲存貯體,做為檔案模式、快速檔案模式和管道模式的資料輸入位置。若要使用 S3 Express One Zone,請輸入 S3 Express One Zone 目錄儲存貯體的位置,而非 Amazon S3 一般用途儲存貯體。為 IAM 角色提供 ARN 與必要的存取控制和許可政策。如需詳細資訊,請參閱 AmazonSageMakerFullAccesspolicy。您只能使用 Amazon S3 受管金鑰 (SSE-S3) 加密伺服器端加密目錄儲存貯體中的 SageMaker AI 輸出資料。目前不支援使用 AWS KMS 金鑰 (SSE-KMS) 的伺服器端加密,以將 SageMaker AI 輸出資料儲存在目錄儲存貯體中。如需詳細資訊,請參閱 S3 Express One Zone。
分散式訓練組態
如果您使用多個容器執行分散式訓練,SageMaker AI 會提供有關/opt/ml/input/config/resourceconfig.json
檔案中所有容器的資訊。
此 JSON 檔案包含所有容器的資訊,讓您可以啟用容器間的通訊。SageMaker AI 讓此檔案同時適用於 File
和 Pipe
模式演算法。該檔案提供下列資訊:
-
current_host
— 容器網路上目前容器的名稱。例如:algo-1
。您可隨時變更主機值。但請勿針對此變數撰寫具備特定值的程式碼。 -
hosts
— 容器網路上所有容器名稱的清單,依詞典編纂方式排序。例如,三節點叢集的排序為:["algo-1", "algo-2", "algo-3"]
。各容器可利用這些名稱,尋找容器網路上其他容器的位址。您可隨時變更主機值。但請勿針對這些變數撰寫具備特定值的程式碼。 -
network_interface_name
— 對您的容器公開的網路介面名稱。例如,執行訊息傳遞介面 (MPI) 的容器可以使用這項資訊來設定網路介面名稱。 -
/etc/hostname
或/etc/hosts
檔案中的資訊可能有誤,請勿使用該資訊。 -
主機名稱資訊可能無法立即提供演算法容器使用。當叢集中的節點可供使用時,建議您在主機名稱解析作業中新增重試政策。
以下是三節點叢集的第 1 節點範例檔案:
{ "current_host": "algo-1", "hosts": ["algo-1","algo-2","algo-3"], "network_interface_name":"eth1" }