建立推論最佳化任務 - Amazon SageMaker AI

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

建立推論最佳化任務

您可以使用 Studio 或 SageMaker AI Python 建立推論最佳化任務SDK。任務會套用您選擇的技術來最佳化模型。如需詳細資訊,請參閱最佳化技術

推論最佳化任務的執行個體定價

當您建立套用量化或編譯的推論最佳化任務時, SageMaker AI 會選擇要用來執行任務的執行個體類型。您需要根據使用的執行個體付費。

如需可能的執行個體類型及其定價詳細資訊,請參閱 Amazon SageMaker AI 定價頁面上的推論最佳化定價資訊。

對於套用投機解碼的任務,您不需要支付額外費用。

如需您可以最佳化的支援模型,請參閱 支援的模型參考

請完成下列步驟,以在 Studio 中建立推論最佳化任務。

開始建立最佳化任務
  1. 在 SageMaker AI Studio 中,透過下列任一路徑建立最佳化任務:

    • 若要建立 JumpStart 模型的任務,請執行下列動作:

      1. 在導覽功能表中,選擇 JumpStart

      2. 在所有公有模型頁面上,選擇模型提供者,然後選擇其中一個支援最佳化的模型。

      3. 在模型詳細資訊頁面上,選擇最佳化。此按鈕僅適用於支援最佳化的模型。

      4. 建立推論最佳化任務頁面上,某些 JumpStart 模型會要求您簽署最終使用者授權合約 (EULA),然後才能繼續。如果要求,請檢閱授權合約區段中的授權條款。如果您的使用案例可接受這些術語,請選取我接受 的核取方塊EULA,然後閱讀條款和條件。

    • 若要為微調 JumpStart 模型建立任務,請執行下列動作:

      1. 在導覽功能表中,於任務下,選擇訓練

      2. 訓練任務頁面上,選擇您用來微調 JumpStart模型的任務名稱。這些任務在任務類型欄中有類型JumpStart訓練

      3. 在訓練任務的詳細資訊頁面上,選擇最佳化

    • 若要為自訂模型建立任務,請執行下列動作:

      1. 在導覽功能表中,於任務下,選擇推論最佳化

      2. 選擇 Create new job (建立新任務)。

      3. 建立推論最佳化任務頁面上,選擇新增模型

      4. 新增模型視窗中,選擇自訂模型

      5. 針對自訂模型名稱,輸入名稱。

      6. 針對 S3 URI,輸入 Amazon S3 中存放模型成品URI的位置。

  2. 建立推論最佳化任務頁面上,針對任務名稱,您可以接受 SageMaker AI 指派的預設名稱。或者,若要輸入自訂任務名稱,請選擇任務名稱欄位,然後選擇輸入任務名稱

設定最佳化組態
  1. 針對部署執行個體類型,選擇您要最佳化模型的執行個體類型。

    執行個體類型會影響您可以選擇的最佳化技術。對於使用GPU硬體的大多數類型,支援的技術是量化推測解碼。如果您選擇使用自訂矽的執行個體,例如 AWS Inferentia 執行個體 ml.inf2.8xlarge,則支援的 技術為編譯,可用來編譯該特定硬體類型的模型。

  2. 選取 Studio 提供的一或多個最佳化技術:

    • 如果您選擇量化,請選擇精確度資料類型的資料類型

    • 如果您選擇推測解碼,請選擇下列其中一個選項:

      • 使用 SageMaker AI 草稿模型 – 選擇使用 SageMaker AI 提供的草稿模型。

        注意

        如果您選擇使用 SageMaker AI 草稿模型,您還必須啟用網路隔離。Studio 會在安全性下提供此選項。

      • 選擇 JumpStart 草稿模型:選擇從 JumpStart目錄中選取模型,以用作您的草稿模型。

      • 選擇您自己的草稿模型 – 選擇使用自己的草稿模型,並提供URI找到它的 S3。

    • 如果您選擇快速載入模型,Studio 會顯示OPTION_TENSOR_PARALLEL_DEGREE環境變數。使用 欄位來設定張量平行處理的程度。該值必須平均除以您為部署執行個體類型選擇的執行個體GPUs中的 數量。例如,若要在使用具有 8 的執行個體時碎片化模型GPUs,請使用值 2、4 或 8。

    • 如果您將部署執行個體類型設定為 AWS Inferentia 或 AWS Trainium 執行個體,Studio 可能會顯示編譯是支援的選項。在這種情況下,Studio 會為您選取此選項。

  3. 針對輸出,輸入 Amazon S3 中位置URI的 。在那裡, SageMaker AI 會存放您的任務建立之最佳化模型的成品。

  4. (選用) 展開進階選項,以更精細地控制 IAM 角色VPC、 和 環境變數等設定。如需詳細資訊,請參閱下方的進階選項

  5. 當您完成設定任務時,請選擇建立任務

    Studio 會顯示任務詳細資訊頁面,其中會顯示任務狀態及其所有設定。

進階選項

您可以在建立推論最佳化任務時設定下列進階選項。

組態下,您可以設定下列選項:

張量平行程度

張量平行處理程度的值。張量平行處理是模型平行處理類型,其中特定模型權重、漸層與最佳化工具狀態會跨裝置分割。值必須平均除以叢集GPUs中的 數目。

字符長度上限

模型要產生的字符數量限制。請注意,模型不一定會產生最多的字符數量。

並行數量

能夠在相同的基礎硬體上執行模型的多個執行個體。使用並行為多個使用者提供預測,並最大化硬體使用率。

批次大小

如果您的模型執行批次推論,請使用此選項來控制模型處理的批次大小。

批次推論會在批次觀察上產生模型預測。對於大型資料集或您不需要立即回應推論請求,這是很好的選擇。

安全性下,您可以設定下列選項:

IAM 角色

讓 SageMaker AI 代表您執行任務IAM的角色。在模型最佳化期間, SageMaker AI 需要您的許可才能:

  • 從 S3 儲存貯體讀取輸入資料

  • 將模型成品寫入 S3 儲存貯體

  • 將日誌寫入 Amazon CloudWatch Logs

  • 發佈指標至 Amazon CloudWatch

您可以將所有這些任務的許可授予 IAM角色。

如需詳細資訊,請參閱如何使用 SageMaker AI 執行角色

加密KMS金鑰

金鑰 in AWS Key Management Service (AWS KMS)。 SageMaker 當 AI 將模型上傳至 Amazon S3 時, SageMaker AI 會使用它們來加密最佳化模型的成品。

VPC

SageMaker AI 會使用此資訊來建立網路介面,並將其連接至模型容器。網路介面會在您的 內為您的模型容器提供VPC未連線至網際網路的網路連線。它們也可讓您的模型連線到私有 中的資源VPC。

如需詳細資訊,請參閱讓 SageMaker AI 託管端點存取 Amazon 中的資源 VPC

啟用網路隔離

如果您想要限制容器的網際網路存取,請啟用此選項。使用網路隔離執行的容器無法進行任何傳出網路呼叫。

注意

當您使用投機式解碼進行最佳化,並使用 SageMaker AI 草稿模型時,必須啟用此選項。

如需網路隔離的詳細資訊,請參閱 網路隔離

進階容器定義下,您可以設定下列選項:

停止條件

指定任務可以執行的時間限制。當任務達到時間限制時, SageMaker AI 會結束任務。使用此選項來限制成本。

標籤

與最佳化任務相關聯的鍵/值對。

如需標籤的詳細資訊,請參閱 中的標記您的 AWS 資源AWS 一般參考

環境變數

定義要在模型容器中設定的環境變數的鍵/值對。

您可以在專案SDK中使用 SageMaker AI Python 來建立推論最佳化任務。首先,您可以使用 ModelBuilder類別定義Model執行個體。然後,您可以使用 optimize()方法執行任務,透過量化、投機式解碼或編譯來最佳化模型。當任務完成時,您可以使用 deploy()方法,將模型部署到推論端點。

如需下列範例中使用之類別和方法的詳細資訊,請參閱 SageMaker AI Python SDK 文件APIs中的 。

設定您的專案
  1. 在您的應用程式程式碼中,匯入必要的程式庫。下列範例會匯入 SDK for Python (Boto3)。它也會從SDK您用來定義和使用模型的 SageMaker AI Python 匯入類別:

    import boto3 from sagemaker.serve.builder.model_builder import ModelBuilder from sagemaker.serve.builder.schema_builder import SchemaBuilder from sagemaker.session import Session from pathlib import Path
  2. 初始化 SageMaker AI 工作階段。下列範例使用 Session()類別:

    sagemaker_session = Session()
定義您的模型
  1. 建立SchemaBuilder執行個體,並提供輸入和輸出範例。當您定義模型時,您會將此執行個體提供給 ModelBuilder類別。透過它, SageMaker AI 會自動產生串列和還原序列化輸入和輸出的串連函數。

    如需使用 SchemaBuilderModelBuilder類別的詳細資訊,請參閱 使用 在 Amazon SageMaker AI 中建立模型 ModelBuilder

    下列範例提供 SchemaBuilder類別的範例輸入和輸出字串:

    response = "Jupiter is the largest planet in the solar system. It is the fifth planet from the sun." sample_input = { "inputs": "What is the largest planet in the solar system?", "parameters": {"max_new_tokens": 128, "top_p": 0.9, "temperature": 0.6}, } sample_output = [{"generated_text": response}] schema_builder = SchemaBuilder(sample_input, sample_output)
  2. 定義您的 SageMaker AI 模型。下列範例會設定參數來初始化ModelBuilder執行個體:

    model_builder = ModelBuilder( model="jumpstart-model-id", schema_builder=schema_builder, sagemaker_session=sagemaker_session, role_arn=sagemaker_session.get_caller_identity_arn(), )

    此範例使用 JumpStart 模型。jumpstart-model-id 將 取代為 JumpStart 模型的 ID,例如 meta-textgeneration-llama-3-70b

    注意

    如果您想要使用投機式解碼進行最佳化,而且想要使用 SageMaker AI 草稿,則必須啟用網路隔離。若要啟用它,請在初始化ModelBuilder執行個體時包含下列引數:

    enable_network_isolation=True,

    如需網路隔離的詳細資訊,請參閱網路隔離

使用量化進行最佳化
  1. 若要執行量化任務,請使用 optimize()方法,並設定 quantization_config 引數。下列範例會在最佳化容器中將 OPTION_QUANTIZE設定為環境變數:

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, quantization_config={ "OverrideEnvironment": { "OPTION_QUANTIZE": "awq", }, }, output_path="s3://output-path", )

    在此範例中,instance-type將 取代為 ML 執行個體,例如 ml.p4d.24xlarges3://output-path 將 取代為您存放任務建立之最佳化模型的 S3 位置路徑。

    optimize() 方法會傳回物件,您可以使用該Model物件將模型部署至端點。

  2. 當任務完成時,部署模型。下列範例使用 deploy()方法:

    predictor = optimized_model.deploy( instance_type="instance-type", accept_eula=True, )

    在此範例中,instance-type將 取代為 ML 執行個體,例如 ml.p4d.24xlarge

    deploy() 方法會傳回預測器物件,您可以使用此物件將推論請求傳送至託管模型的端點。

使用 SageMaker AI 草擬模型透過投機解碼進行最佳化

當您使用投機式解碼來最佳化模型時,您可以選擇使用 SageMaker AI 提供的草擬模型,也可以使用自己的模型。下列範例使用 SageMaker AI 草稿模型。

先決條件

若要使用投機式解碼和 SageMaker AI 草稿模型進行最佳化,您必須在定義模型時啟用網路隔離。

  1. 若要執行推測解碼任務,請使用 optimize()方法,並設定 speculative_decoding_config 引數。下列範例將 ModelProvider 金鑰設定為 SAGEMAKER,以使用 SageMaker AI 提供的草擬模型。

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, speculative_decoding_config={ "ModelProvider": "SAGEMAKER", }, )

    在此範例中,instance-type將 取代為 ML 執行個體,例如 ml.p4d.24xlarge

    optimize() 方法會傳回物件,您可以使用該Model物件將模型部署至端點。

  2. 當任務完成時,部署模型。下列範例使用 deploy()方法:

    predictor = optimized_model.deploy(accept_eula=True)

    deploy() 方法會傳回預測器物件,您可以使用此物件將推論請求傳送至託管模型的端點。

使用自訂草稿模型,透過推測解碼進行最佳化

您必須先將模型成品上傳到 Amazon S3,才能將自訂草稿模型提供給 SageMaker AI。

下列範例示範提供自訂草稿模型的一種可能方式。這些範例會從 Hugging Face Hub 下載草擬模型,將其上傳至 Amazon S3,並將 S3 URI 提供給speculative_decoding_config引數。

  1. 如果您想要從 Hugging Face Hub 下載模型,請將程式huggingface_hub庫新增至您的專案,並使用 snapshot_download()方法下載模型。下列範例會將模型下載至本機目錄:

    import huggingface_hub huggingface_hub.snapshot_download( repo_id="model-id", revision="main", local_dir=download-dir, token=hf-access-token, )

    在此範例中,將 model-id取代為 Hugging Face Hub 模型的 ID,例如 meta-llama/Meta-Llama-3-8Bdownload-dir 將 取代為本機目錄。hf-access-token 將 取代為您的使用者存取權杖。若要了解如何取得您的存取權杖,請參閱 Hugging Face 文件中的使用者存取權杖

    如需huggingface_hub程式庫的詳細資訊,請參閱 Hugging Face 文件中的 Hub 用戶端程式庫

  2. 若要讓下載的模型可供 SageMaker AI 使用,請將其上傳至 Amazon S3。下列範例會使用 sagemaker_session 物件上傳模型:

    custom_draft_model_uri = sagemaker_session.upload_data( path=hf_local_download_dir.as_posix(), bucket=sagemaker_session.default_bucket(), key_prefix="prefix", )

    在此範例中,prefix將 取代為限定詞,協助您區分 S3 中的草稿模型,例如 spec-dec-custom-draft-model

    upload_data() 方法會傳回模型成品URI的 S3。

  3. 若要執行推測解碼任務,請使用 optimize()方法,並設定 speculative_decoding_config 引數。下列範例會將ModelSource金鑰設定為自訂草稿模型URI的 S3:

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, speculative_decoding_config={ "ModelSource": custom_draft_model_uri + "/", }, )

    在此範例中,instance-type將 取代為 ML 執行個體,例如 ml.p4d.24xlarge

    optimize() 方法會傳回物件,您可以使用該Model物件將模型部署至端點。

  4. 當任務完成時,部署模型。下列範例使用 deploy()方法:

    predictor = optimized_model.deploy(accept_eula=True)

    deploy() 方法會傳回預測器物件,您可以使用此物件將推論請求傳送至託管模型的端點。

使用編譯進行最佳化
  1. 若要執行編譯任務,請使用 optimize()方法,並設定 compilation_config 引數。下列範例使用 OverrideEnvironment金鑰在最佳化容器中設定必要的環境變數:

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, compilation_config={ "OverrideEnvironment": { "OPTION_TENSOR_PARALLEL_DEGREE": "24", "OPTION_N_POSITIONS": "8192", "OPTION_DTYPE": "fp16", "OPTION_ROLLING_BATCH": "auto", "OPTION_MAX_ROLLING_BATCH_SIZE": "4", "OPTION_NEURON_OPTIMIZE_LEVEL": "2", } }, output_path="s3://output-path", )

    在此範例中,將 instance-type設定為具有加速硬體的 ML 執行個體類型。例如,對於使用 AWS Inferentia 的加速推論,您可以將 類型設定為 Inf2 執行個體,例如 ml.inf2.48xlarges3://output-path 將 取代為您存放任務建立之最佳化模型的 S3 位置路徑。

  2. 當任務完成時,部署模型。下列範例使用 deploy()方法:

    predictor = optimized_model.deploy(accept_eula=True)

    deploy() 方法會傳回預測器物件,您可以使用此物件將推論請求傳送至託管模型的端點。

使用推論請求測試模型
  • 若要將測試推論請求傳送至部署的模型,請使用預測器物件predict()的方法。下列範例會傳遞 sample_input變數給範例中的 SchemaBuilder類別,以定義您的模型:

    predictor.predict(sample_input)

    範例輸入具有提示 "What is the largest planet in the solar system?"predict() 方法會傳回模型產生的回應,如下列範例所示:

    {'generated_text': ' Jupiter is the largest planet in the solar system. It is the fifth planet from the sun. It is a gas giant with . . .'}

SageMaker AI 草稿模型的限制

對於您使用 SageMaker AI 草稿模型最佳化的任何模型,請注意需求、限制和支援的環境變數。

要求

您必須執行下列動作:

  • 使用 SageMaker AI 提供的模型 JumpStart。

  • 啟用模型部署的網路隔離。

  • 如果您將模型部署到大型模型推論 (LMI) 容器,請使用 0.28.0 版或更新版本的DJLServing容器。

    如需可用的容器,請參閱深度學習容器 GitHub 儲存庫中的大型模型推論容器。

  • 如果您微調 JumpStart 模型,請使用模型權重的安全張量格式。

    如需此格式的詳細資訊,請參閱 Hugging Face 文件中的 Safetensors

限制

您無法執行下列:

  • 在您透過本機模式建立的本機測試環境中使用模型。

    如需本機模式的詳細資訊,請參閱 SageMaker AI Python SDK 文件中的本機模式

  • 透過 AWS Systems Manager 代理程式 (SSM 代理程式) 存取模型容器。SSM 客服人員提供模型容器的 shell 層級存取權,讓您可以使用 Amazon 對程序和日誌命令進行偵錯 CloudWatch。

    如需使用此功能的詳細資訊,請參閱「透過 存取容器 SSM」。

  • 針對程序當機時發生的核心傾印設定模型容器。

    如需模型容器核心傾印的詳細資訊,請參閱ProductionVariantCoreDumpConfig

  • 將模型部署到多模型端點、多容器端點或託管推論元件的端點。

    如需這些端點類型的詳細資訊,請參閱 多模型端點多容器端點推論元件

  • 為模型建立模型套件。您可以使用模型套件來建立發佈的可部署模型 AWS Marketplace。

    如需使用此功能的詳細資訊,請參閱「建立模型套件資源」。

  • 在模型容器中使用您自己的推論程式碼。

  • 使用模型容器中requirements.txt的檔案。這種類型的檔案會列出套件相依性。

  • 啟用 Hugging Face 參數 trust_remote_code

支援的環境變數

您只能使用下列環境變數來設定容器:

  • 大型模型推論 (LMI) 容器的常見環境變數。

    如需這些變數的詳細資訊,請參閱LMI容器文件中的環境變數組態

  • Hugging Face Hub 在其 Git 儲存庫中提供之套件的常見環境變數。

    如需 儲存庫,請參閱開啟 Hugging Face GitHub。

  • 常見 PyTorch 和CUDA環境變數。

    如需這些變數的詳細資訊,請參閱 PyTorch 文件中的 Torch Environment 變數