存取訓練資料 - Amazon SageMaker

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

存取訓練資料

建立訓練工作時,您可以指定訓練資料集的位置,以及存取資料集的輸入模式。對於數據位置,Amazon SageMaker 支持 Amazon 簡單存儲服務(Amazon S3),Amazon Elastic File System(亞馬遜 EFS)和 Amazon FSx for Lustre。輸入模式決定是否要即時串流資料集的資料檔案,或是在訓練工作開始時下載整個資料集。

注意

您的輸入資料集必須與訓練工 AWS 區域 作相同。

SageMaker 輸入模式和 AWS 雲存儲

本節概述了 Amazon S3 的 SageMaker 輸入模式以及 Amazon EFS 和亞馬遜 FSx 中的文件系統的輸入模式。

  • 檔案模式會向訓練容器顯示資料集的檔案系統檢視。如果您沒有明確指定其他兩個選項之一,這就是預設的輸入模式。如果您使用檔案模式,請將訓練資料從儲存位置 SageMaker 下載到 Docker 容器中的本機目錄。訓練會在下載完整資料集之後開始。在檔案模式中,訓練執行個體必須有足夠的儲存空間來容納整個資料集。檔案模式下載速度取決於資料集的大小、檔案的平均大小和檔案的數量。您可以透過提供 Amazon S3 字首、資訊清單檔案或擴增資訊清單檔案來設定檔案模式的資料集。若您的資料集檔案都位於同一個 S3 字首下,應該使用 S3 字首。檔案模式與SageMaker 本機模式相容 (在幾秒鐘內以互動方式啟動 SageMaker 訓練容器)。對於分散式訓練,您可以使用 ShardedByS3Key 選項將資料集分成多個執行個體。

  • 快速檔案模式可讓檔案系統存取 Amazon S3 資料來源,同時利用管道模式的效能優勢。在訓練開始時,快速檔案模式會識別資料檔案,但不會下載它們。可以在不用等待整個資料集下載的情況下開始訓練。這意味著當所提供的 Amazon S3 字首中的檔案較少時,啟動訓練所花費的時間更少。

    與管道模式相反,快速檔案模式可隨機存取資料。但是,當循序讀取資料時,效果最好。快速檔案模式不支援擴增的資訊清單檔案。

    快速檔案模式會使用符合 POSIX 的檔案系統介面公開 S3 物件,就如同檔案在訓練執行個體的區域磁碟上可用一般。當您的訓練指令碼取用資料時,它會隨需串流 S3 內容。這表示您的資料集不再需要放入訓練執行個體儲存空間內,而且您不需要等待資料集下載至訓練執行個體,才能開始訓練執行個體。快速檔案目前僅支援 S3 字首 (不支援資訊清單和擴增資訊清單)。快速文件模式與 SageMaker 本地模式兼容。

  • 管道模式會直接從 Amazon S3 資料來源串流資料。串流可以為訓練任務提供比檔案模式更快的啟動時間和較佳的輸送量。

    直接串流資料時,您可以減少訓練執行個體使用的 Amazon EBS 磁碟區的大小。管道模式僅需足夠的磁碟空間來儲存您的最終模型成品。

    這是另一種流媒體模式,在很大程度上被更新和 simpler-to-use快速的文件模式所取代。在管道模式下,會以高並行性和輸送量從 Amazon S3 預先擷取資料,然後串流到已命名的管道,也因其行為被稱為先進先出 (FIFO) 管道。每個管道只能由單一程序讀取。一個 SageMaker特定的擴展程序,可 TensorFlow 方便地將管道模式集成到本地 TensorFlow 數據加載器中,用於流式傳輸文本,TFRecords 或 RecordIO 文件格式。管道模式還支援管理資料的分割和隨機選取。

  • Amazon S3 Express One Zone 是高效能的單一可用區域儲存類別,可為包括模型訓練在內的最延遲敏感的應用程式提供一致、10 毫秒的資料存取。 SageMaker Amazon S3 Express One Zone 可讓客戶將物件儲存和運算資源分配到單一 AWS 可用區域中,藉此提高資料處理速度來最佳化運算效能和成本。為了進一步提高存取速度並支援每秒數十萬個請求,資料會存放在新的儲存貯體類型 (Amazon S3 目錄儲存貯體) 中。

    SageMaker 模型訓練支援高效能 Amazon S3 Express 單區目錄儲存貯體做為檔案模式、快速檔案模式和管道模式的資料輸入位置。若要使用 Amazon S3 快遞單一區域,請輸入 Amazon S3 快速單區目錄儲存貯體的位置,而不是 Amazon S3 儲存貯體。為 IAM 角色提供 ARN,並提供必要的存取控制和許可政策。請參閱 AmazonSageMakerFullAccesspolicy 以取得詳細資訊。如需詳細資訊,請參閱 Amazon S3 快速單一區域

  • Amazon FSx for Lustre — FSx for Lustre 的輸送量可擴展至數百 GB,還有具有低延遲檔案擷取功能的數百萬 IOPS。開始訓練工作時,請將 FSx for Lustre 檔案系統 SageMaker掛載至訓練實例檔案系統,然後啟動訓練指令碼。掛載本身是一個相對快速的操作,並不取決於儲存在 FSx for Lustre 中的資料集的大小。

    若要存取 FSx for Lustre,您的訓練任務必須連接到 Amazon Virtual Private Cloud (VPC),這需要 DevOps 設定和參與。為了避免資料傳輸成本,檔案系統會使用單一可用區域,而且您需要指定一個 VPC 子網路,以便在執行訓練工作時對應到此可用區域 ID。

  • Amazon EFS — 若要使用 Amazon EFS 做為資料來源,資料必須在進行培訓之前已經存放在 Amazon EFS 中。 SageMaker 將指定的 Amazon EFS 檔案系統掛接到訓練執行個體,然後啟動訓練指令碼。您的訓練任務必須連線至 VPC 才能存取 Amazon EFS。

    提示

    若要進一步了解如何將 VPC 組態指定給 SageMaker 估算器,請參閱 SageMakerPython SDK 文件中的使用檔案系統做為訓練輸入

使用開發套件選擇資料輸入模式 SageMaker

SageMaker Python SDK 提供了通用的估算器類和它的 ML 框架,用於啟動培訓工作的變化。您可以在配置 SageMaker Estimator類或方法時指定其中一種數據輸入模Estimator.fit式。下列程式碼範本顯示兩種指定輸入模式的方法。

使用估算器類別指定輸入模式

from sagemaker.estimator import Estimator from sagemaker.inputs import TrainingInput estimator = Estimator( checkpoint_s3_uri='s3://my-bucket/checkpoint-destination/', output_path='s3://my-bucket/output-path/', base_job_name='job-name', input_mode='File' # Available options: File | Pipe | FastFile ... ) # Run the training job estimator.fit( inputs=TrainingInput(s3_data="s3://my-bucket/my-data/train") )

如需詳細資訊,請參閱 Python SDK 文件中的 SAGEMATOR 估算器類別。 SageMaker

透過估算器擬合方法指定輸入模式

from sagemaker.estimator import Estimator from sagemaker.inputs import TrainingInput estimator = Estimator( checkpoint_s3_uri='s3://my-bucket/checkpoint-destination/', output_path='s3://my-bucket/output-path/', base_job_name='job-name', ... ) # Run the training job estimator.fit( inputs=TrainingInput( s3_data="s3://my-bucket/my-data/train", input_mode='File' # Available options: File | Pipe | FastFile ) )

如需詳細資訊,請參閱 SAGEMATER 估算器. 預估器 .Fit 類別方法和下垂器. input。 TrainingInput開發套件文件中的SageMaker 類別。

提示

若要進一步了解如何使用 Python 開發套件估算器使用 VPC 組態設定適用於 Lustre 或 Amazon EFS 的 Amazon FSx,請參閱 SageMaker Python SDK 文件中的使用檔案系統做為訓練輸入。SageMaker

提示

資料輸入模式與 Amazon S3、Amazon EFS 和 FSx for Lustre 整合,是設定資料來源以獲得最佳實務的最佳建議方式。您可以使用受 SageMaker 管儲存選項和輸入模式,策略性地改善資料載入效能,但並未受到嚴格限制。您可以直接在訓練容器中撰寫自己的資料讀取邏輯。例如,您可以設定為從不同的資料來源讀取、撰寫自己的 S3 資料載入器類別,或在訓練指令碼中使用第三方架構的資料載入功能。但是,您必須確保指定了 SageMaker可以識別的正確路徑。

提示

如果您使用自訂訓練容器,請務必安裝可協助設定SageMaker 訓練工作環境的 SageMaker 訓練工具組。否則,您必須在 Dockerfile 中明確指定環境變數。如需詳細資訊,請參閱使用自有的演算法和模型建立容器

有關如何使用低級 SageMaker API 設置數據輸入模式的更多信息Amazon 如何 SageMaker 提供培訓信息,請參閱,CreateTrainingJobAPI 和TrainingInputModeAlgorithmSpecification的。

設定資料輸入通道以使用 Amazon FSx for Lustre

了解如何使用 Amazon FSx for Lustre 做為您的資料來源,藉由縮短資料載入的時間,提高輸送量並加快訓練。

同步 Amazon S3 和 Amazon FSx for Lustre

若要將您的 Amazon S3 連結至 Amazon FSx for Lustre 並上傳您的訓練資料集,請執行下列動作。

  1. 準備資料集並上傳至 Amazon S3 儲存貯體。例如,假設訓練資料集和測試資料集的 Amazon S3 路徑格式如下。

    s3://my-bucket/data/train s3://my-bucket/data/test
  2. 若要建立一個與訓練資料使用的 Amazon S3 儲存貯體連結的 FSx for Lustre 檔案系統,請按照 Amazon FSx for Lustre 使用者指南內的連結您的檔案系統至 Amazon S3 儲存貯體的步驟。請務必新增端點至您的 VPC,以允許 Amazon S3 存取。如需詳細資訊,請參閱 建立 Amazon S3 VPC 端點。指定資料儲存庫路徑時,請提供包含您的資料集資料夾的 Amazon S3 儲存貯體 URI。例如,根據步驟 1 中的 S3 路徑範例,資料儲存庫路徑應如下所示。

    s3://my-bucket/data
  3. 建立 FSx for Lustre 檔案系統之後,請執行下列命令來檢查組態資訊。

    aws fsx describe-file-systems && \ aws fsx describe-data-repository-association

    這些命令會傳回 FileSystemIdMountNameFileSystemPathDataRepositoryPath。輸出結果應如下列範例所示。

    # Output of aws fsx describe-file-systems "FileSystemId": "fs-0123456789abcdef0" "MountName": "1234abcd" # Output of aws fsx describe-data-repository-association "FileSystemPath": "/ns1", "DataRepositoryPath": "s3://my-bucket/data/"

    完成 Amazon S3 和 Amazon FSx 之間的同步作業後,您的資料集會儲存在 Amazon FSx 中的下列目錄內。

    /ns1/train # synced with s3://my-bucket/data/train /ns1/test # synced with s3://my-bucket/data/test

將 Amazon FSx 檔案系統路徑設定為用 SageMaker 於訓練的資料輸入通道

下列程序會引導您完成將 Amazon FSx 檔案系統設定為 SageMaker 訓練任務資料來源的程序。

Using the SageMaker Python SDK

若要將 Amazon FSx 檔案系統正確設定為資料來源,請設定 SageMaker估算器類別並FileSystemInput使用下列指示。

  1. 配置一個 FileSystemInput 類對象。

    from sagemaker.inputs import FileSystemInput train_fs = FileSystemInput( file_system_id="fs-0123456789abcdef0", file_system_type="FSxLustre", directory_path="/1234abcd/ns1/", file_system_access_mode="ro", )
    提示

    當您指定 directory_path 時,請務必提供 Amazon FSx 檔案系統路徑,開頭為 MountName

  2. 使用用於 Amazon FSx 檔案系統的 VPC 人雲端組態來設定 SageMaker 估算器。

    from sagemaker.estimator import Estimator estimator = Estimator( ... role="your-iam-role-with-access-to-your-fsx", subnets=["subnet-id"], # Should be the same as the subnet used for Amazon FSx security_group_ids="security-group-id" )
  3. 透過使用 Amazon FSx 檔案系統執行 estimator.fit 方法,啟動訓練任務。

    estimator.fit(train_fs)

若要尋找更多程式碼範例,請參閱 SageMaker Python SDK 文件中的使用檔案系統做為訓練輸入

Using the SageMaker CreateTrainingJob API

作為CreateTrainingJob請求 JSON 的一部分,配置InputDataConfig如下。

"InputDataConfig": [ { "ChannelName": "string", "DataSource": { "FileSystemDataSource": { "DirectoryPath": "/1234abcd/ns1/", "FileSystemAccessMode": "ro", "FileSystemId": "fs-0123456789abcdef0", "FileSystemType": "FSxLustre" } } } ],
提示

當您指定 DirectoryPath 時,請務必提供 Amazon FSx 檔案系統路徑,開頭為 MountName

設定 FSx for Lustre 的提示與考量事項

  1. 當您使用已啟用 EFA 的執行個體 (例如 P4d 和 P3dn) 時,請務必在安全群組中設定適當的輸入和輸出規則。特別是,若要在訓練任務中存 SageMaker 取 Amazon FSx 檔案系統,必須開啟這些連接埠。如需進一步了解,請參閱 Amazon VPC 的檔案系統存取控制

  2. 請確定用來啟動 SageMaker 訓練任務的 IAM 角色可以存取 Amazon FSx。

選擇資料來源和輸入模式的最佳實務

訓練工作的最佳資料來源取決於工作負載特性,例如資料集的大小、檔案格式、檔案平均大小、訓練持續時間、資料載入器讀取模式為循序或隨機,以及模型可以取用訓練資料的速度。下列最佳實務提供指南,讓您開始使用最適合您的使用案例的輸入模式和資料儲存。

This flowchart summarizes and visualizes best practices of choosing the best storage as the data source and input file mode. All of the cases in the flowchart are described in the following sections.

何時使用 Amazon EFS

如果您的資料集儲存在 Amazon Elastic File System 中,您可能有使用 Amazon EFS 儲存的預處理或註釋應用程式。您可以執行訓練任務,設定指向 Amazon EFS 檔案系統的資料通道。如需詳細資訊,請參閱 SageMaker 使用 Amazon FSx 進行 Lustre 和 Amazon EFS 檔案系統的訓練速度。如果無法達成較佳效能,請按照 Amazon Elastic File System 效能指南查看最佳化選項,或考慮使用不同的輸入模式或資料儲存。

針對小型資料集使用檔案模式

如果資料集儲存在 Amazon Simple Storage Service 內,且資料集的總體磁碟區相對較小 (例如小於 50-100 GB),請嘗試使用檔案模式。下載 50 GB 資料集的額外負荷,會因檔案的數量而有所不同。例如,如果將資料集分成 100 MB 的碎片,則大約需要 5 分鐘。這樣的啟動額外負荷是否可接受,主要取決於訓練工作的整體持續時間,因為較長的訓練階段意味著下載階段的佔比較低。

序列化許多小型檔案

如果您的資料集很小 (小於 50-100 GB),但由許多小型檔案 (每個檔案少於 50 MB) 組成,則檔案模式下載額外負荷會增加,因為每個檔案都需要從 Amazon Simple Storage Service 分別下載到訓練執行個體磁碟區。若要減少這種額外負荷和資料遍歷時間,請考慮使用檔案格式 (例如,for 的 TFRecord for 和 RecordIO for MXNet),將這類小型檔案的群組序列化為較少的較大檔案容器 (例如每個檔案 150 MB)。 TensorFlow WebDataset PyTorch

何時使用快速檔案模式

對於檔案較大 (每個檔案大於 50 MB) 的大型資料集,第一個選項是試用快速檔案模式,這比 FSx for Lustre 更容易使用,因為它不需要建立檔案系統或連線至 VPC。快速檔案模式非常適合大型檔案容器 (大於 150 MB),並且對於大於 50 MB 的檔案也很適合。由於快速檔案模式提供 POSIX 介面,因此它支援隨機讀取 (讀取非循序位元範圍)。但是,這不是理想的使用案例,您的輸送量可能會低於循序讀取。不過,如果您有相對較大且運算強度高的機器學習 (ML) 模型,則快速檔案模式仍然可以使訓練管道的有效頻寬飽和,而不會造成 IO 瓶頸。您需要實驗看看。要從文件模式切換到快速文件模式(然後返回),只需在使用 SageMaker Python SDK 定義輸入通道時添加(或刪除)input_mode='FastFile'參數即可:

sagemaker.inputs.TrainingInput(S3_INPUT_FOLDER, input_mode = 'FastFile')

何時使用 Amazon FSx for Lustre

如果您的資料集對於檔案模式而言太大、有許多您無法輕易序列化的小型檔案,或者使用隨機讀取存取權模式,FSx for Lustre 是一個不錯的選項。它的檔案系統可擴展至每秒數百 GB (GB/s) 的輸送量和數百萬 IOPS,這在您有許多小型檔案時非常理想。但是請注意,由於延遲載入以及設定、初始化 FSx for Lustre 檔案系統的額外負荷,可能會有冷啟動問題。

提示

若要進一步了解,請參閱為您的 Amazon SageMaker 訓練任務選擇最佳資料來源。這個 AWS 機器學習部落格進一步討論個案研究和資料來源和輸入模式的效能基準。

以屬性為基礎的存取控制 (ABAC),適用於多租戶訓練

在多租戶環境中,確保每個租用戶的數據被隔離並且只有授權實體可以訪問至關重要。 SageMaker 支援使用以屬性為基礎的存取控制 (ABAC) 來實現訓練工作的隔離。您可以為所有租用戶使用相同的 IAM 角色,而不是為每個租用戶建立多個 IAM 角色,方法是設定工作階段鏈結組態,該設定使用 AWS Security Token Service (AWS STS) 工作階段標籤來請求臨時、有限權限的登入資料供訓練工作存取特定租用戶。如需工作階段標籤的詳細資訊,請參閱在中 AWS STS傳遞工作階段標籤

建立訓練工作時,您的工作階段鏈結組態會用 AWS STS 來要求暫時的安全性登入資料。此請求生成一個會話,該會話被標記。每個 SageMaker 訓練工作只能使用所有訓練工作共用的單一角色來存取特定承租人。透過使用工作階段鏈結實作 ABAC,您可以確保每個訓練工作只能存取工作階段標籤所指定的租用戶,進而有效地隔離並保護每個租用戶。以下部分將引導您完成使用 SageMaker Python SDK 設置和使用 ABAC 進行多租戶培訓工作隔離的步驟。

必要條件

若要開始使用 ABAC 進行多租戶訓練工作隔離,您必須具備下列項目:

  • 在不同位置具有一致命名的租戶。例如,如果租用戶的輸入資料為 Amazon S3 URIs3://your-input-s3-bucket/example-tenant,則該租用戶的 Amazon FSx 目錄應該是,/fsx-train/train/example-tenant且輸出資料應s3://your-output-s3-bucket/example-tenant為 Amazon S3 URI。

  • SageMaker 工作建立角色。您可以使用 Amazon 角色管理員建立任 SageMaker 務建立 SageMaker角色。如需詳細資訊,請參閱使用角色管理員

  • 在其信任原則中具有sts:AssumeRolests:TagSession權限的 SageMaker 執行角色。如需有關 SageMaker 執行角色的詳細資訊,請參閱SageMaker角色

    執行角色也應具有原則,可讓任何以屬性為基礎的多租用戶架構中的租用戶讀取附加至主要標籤的前置詞。以下是範例原則,可限制 SageMaker 執行角色存取與tenant-id金鑰相關聯的值。如需有關命名標籤金鑰的詳細資訊,請參閱 IAM 和 STS 中標記的規則

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::<your-input-s3-bucket>/${aws:PrincipalTag/tenant-id}/*" ], "Effect": "Allow" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::<your-output-s3-bucket>/${aws:PrincipalTag/tenant-id}/*" }, { "Action": "s3:ListBucket", "Resource": "*", "Effect": "Allow" } ] }

建立啟用階段作業標籤鏈結的訓練工作

下列程序說明如何使用 SageMaker Python SDK 建立具有工作階段標籤鏈結的訓練工作,以進行具有 ABAC 功能的多租戶訓練。

注意

除了多租戶資料儲存體之外,您還可以使用 ABAC 工作流程將工作階段標籤傳遞給 Amazon VPC 的執行角色 AWS Key Management Service,以及您允許呼叫的任何其他服務 SageMaker

啟用 ABAC 的工作階段標記鏈結
  1. 匯入boto3和 SageMaker Python 開發套件。啟用 ABAC 的訓練工作隔離功能僅適用於 2.217 版或更新版本的 SageMaker Python SDK。

    import boto3 import sagemaker from sagemaker.estimator import Estimator from sagemaker.inputs import TrainingInput
  2. 設定 AWS STS 和用 SageMaker 戶端以使用承租人標籤的工作階段標籤。您可以變更標籤值以指定不同的承租人。

    # Start an AWS STS client sts_client = boto3.client('sts') # Define your tenants using tags # The session tag key must match the principal tag key in your execution role policy tags = [] tag = {} tag['Key'] = "tenant-id" tag['Value'] = "example-tenant" tags.append(tag) # Have AWS STS assume your ABAC-enabled job creation role response = sts_client.assume_role( RoleArn="arn:aws:iam::<account-id>:role/<your-training-job-creation-role>", RoleSessionName="SessionName", Tags=tags) credentials = response['Credentials'] # Create a client with your job creation role (which was assumed with tags) sagemaker_client = boto3.client( 'sagemaker', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'] ) sagemaker_session = sagemaker.Session(sagemaker_client=sagemaker_client)

    將標記附加"tenant-id=example-tenant"到工作建立角色時,執行角色會擷取這些標記,以使用下列原則:

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::<your-input-s3-bucket>/example-tenant/*" ], "Effect": "Allow" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::<your-output-s3-bucket>/example-tenant/*" }, { "Action": "s3:ListBucket", "Resource": "*", "Effect": "Allow" } ] }
  3. 定義一個估計器,以使用 SageMaker Python SDK 創建一個培訓工作。設定enable_session_tag_chainingTrue以允許您的 SageMaker訓練執行角色從您的工作建立角色擷取標籤。

    # Specify your training input trainingInput = TrainingInput( s3_data='s3://<your-input-bucket>/example-tenant', distribution='ShardedByS3Key', s3_data_type='S3Prefix' ) # Specify your training job execution role execution_role_arn = "arn:aws:iam::<account-id>:role/<your-training-job-execution-role>" # Define your esimator with session tag chaining enabled estimator = Estimator( image_uri="<your-training-image-uri>", role=execution_role_arn, instance_count=1, instance_type='ml.m4.xlarge', volume_size=20, max_run=3600, sagemaker_session=sagemaker_session, output_path="s3://<your-output-bucket>/example-tenant", enable_session_tag_chaining=True ) estimator.fit(inputs=trainingInput, job_name="abac-demo")

SageMaker 只能讀取訓練工作要求中提供的標籤,且不會代表您將任何標籤新增至資源。

ABAC 用於 SageMaker 培訓與 SageMaker 託管溫池兼容。若要將 ABAC 與暖池搭配使用,相符的訓練工作必須具有相同的工作階段標記。如需更多詳細資訊,請參閱 符合的訓練任務