本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立推論最佳化任務
您可以使用 Studio 或 SageMaker AI Python 建立推論最佳化任務SDK。任務會套用您選擇的技術來最佳化模型。如需詳細資訊,請參閱最佳化技術。
推論最佳化任務的執行個體定價
當您建立套用量化或編譯的推論最佳化任務時, SageMaker AI 會選擇要用來執行任務的執行個體類型。您需要根據使用的執行個體付費。
如需可能的執行個體類型及其定價詳細資訊,請參閱 Amazon SageMaker AI 定價頁面上的推論最佳化定價
對於套用投機解碼的任務,您不需要支付額外費用。
如需您可以最佳化的支援模型,請參閱 支援的模型參考。
請完成下列步驟,以在 Studio 中建立推論最佳化任務。
開始建立最佳化任務
-
在 SageMaker AI Studio 中,透過下列任一路徑建立最佳化任務:
-
若要建立 JumpStart 模型的任務,請執行下列動作:
-
在導覽功能表中,選擇 JumpStart。
-
在所有公有模型頁面上,選擇模型提供者,然後選擇其中一個支援最佳化的模型。
-
在模型詳細資訊頁面上,選擇最佳化。此按鈕僅適用於支援最佳化的模型。
-
在建立推論最佳化任務頁面上,某些 JumpStart 模型會要求您簽署最終使用者授權合約 (EULA),然後才能繼續。如果要求,請檢閱授權合約區段中的授權條款。如果您的使用案例可接受這些術語,請選取我接受 的核取方塊EULA,然後閱讀條款和條件。
-
-
若要為微調 JumpStart 模型建立任務,請執行下列動作:
-
在導覽功能表中,於任務下,選擇訓練。
-
在訓練任務頁面上,選擇您用來微調 JumpStart模型的任務名稱。這些任務在任務類型欄中有類型JumpStart訓練。
-
在訓練任務的詳細資訊頁面上,選擇最佳化。
-
-
若要為自訂模型建立任務,請執行下列動作:
-
在導覽功能表中,於任務下,選擇推論最佳化。
-
選擇 Create new job (建立新任務)。
-
在建立推論最佳化任務頁面上,選擇新增模型。
-
在新增模型視窗中,選擇自訂模型。
-
針對自訂模型名稱,輸入名稱。
-
針對 S3 URI,輸入 Amazon S3 中存放模型成品URI的位置。
-
-
-
在建立推論最佳化任務頁面上,針對任務名稱,您可以接受 SageMaker AI 指派的預設名稱。或者,若要輸入自訂任務名稱,請選擇任務名稱欄位,然後選擇輸入任務名稱。
設定最佳化組態
-
針對部署執行個體類型,選擇您要最佳化模型的執行個體類型。
執行個體類型會影響您可以選擇的最佳化技術。對於使用GPU硬體的大多數類型,支援的技術是量化和推測解碼。如果您選擇使用自訂矽的執行個體,例如 AWS Inferentia 執行個體 ml.inf2.8xlarge,則支援的 技術為編譯,可用來編譯該特定硬體類型的模型。
-
選取 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 會為您選取此選項。
-
-
針對輸出,輸入 Amazon S3 中位置URI的 。在那裡, SageMaker AI 會存放您的任務建立之最佳化模型的成品。
-
(選用) 展開進階選項,以更精細地控制 IAM 角色VPC、 和 環境變數等設定。如需詳細資訊,請參閱下方的進階選項。
-
當您完成設定任務時,請選擇建立任務。
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
設定您的專案
-
在您的應用程式程式碼中,匯入必要的程式庫。下列範例會匯入 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
-
初始化 SageMaker AI 工作階段。下列範例使用
Session()
類別:sagemaker_session = Session()
定義您的模型
-
建立
SchemaBuilder
執行個體,並提供輸入和輸出範例。當您定義模型時,您會將此執行個體提供給ModelBuilder
類別。透過它, SageMaker AI 會自動產生串列和還原序列化輸入和輸出的串連函數。如需使用
SchemaBuilder
和ModelBuilder
類別的詳細資訊,請參閱 使用 在 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)
-
定義您的 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 模型的 ID,例如jumpstart-model-id
meta-textgeneration-llama-3-70b
。注意
如果您想要使用投機式解碼進行最佳化,而且想要使用 SageMaker AI 草稿,則必須啟用網路隔離。若要啟用它,請在初始化
ModelBuilder
執行個體時包含下列引數:enable_network_isolation=True,
如需網路隔離的詳細資訊,請參閱網路隔離。
使用量化進行最佳化
-
若要執行量化任務,請使用
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
", )在此範例中,
將 取代為 ML 執行個體,例如instance-type
ml.p4d.24xlarge
。
將 取代為您存放任務建立之最佳化模型的 S3 位置路徑。s3://output-path
optimize()
方法會傳回物件,您可以使用該Model
物件將模型部署至端點。 -
當任務完成時,部署模型。下列範例使用
deploy()
方法:predictor = optimized_model.deploy( instance_type="
instance-type
", accept_eula=True, )在此範例中,
將 取代為 ML 執行個體,例如instance-type
ml.p4d.24xlarge
。deploy()
方法會傳回預測器物件,您可以使用此物件將推論請求傳送至託管模型的端點。
使用 SageMaker AI 草擬模型透過投機解碼進行最佳化
當您使用投機式解碼來最佳化模型時,您可以選擇使用 SageMaker AI 提供的草擬模型,也可以使用自己的模型。下列範例使用 SageMaker AI 草稿模型。
先決條件
若要使用投機式解碼和 SageMaker AI 草稿模型進行最佳化,您必須在定義模型時啟用網路隔離。
-
若要執行推測解碼任務,請使用
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", }, )在此範例中,
將 取代為 ML 執行個體,例如instance-type
ml.p4d.24xlarge
。optimize()
方法會傳回物件,您可以使用該Model
物件將模型部署至端點。 -
當任務完成時,部署模型。下列範例使用
deploy()
方法:predictor = optimized_model.deploy(accept_eula=True)
deploy()
方法會傳回預測器物件,您可以使用此物件將推論請求傳送至託管模型的端點。
使用自訂草稿模型,透過推測解碼進行最佳化
您必須先將模型成品上傳到 Amazon S3,才能將自訂草稿模型提供給 SageMaker AI。
下列範例示範提供自訂草稿模型的一種可能方式。這些範例會從 Hugging Face Hub 下載草擬模型,將其上傳至 Amazon S3,並將 S3 URI 提供給speculative_decoding_config
引數。
-
如果您想要從 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
, )在此範例中,將
取代為 Hugging Face Hub 模型的 ID,例如model-id
meta-llama/Meta-Llama-3-8B
。
將 取代為本機目錄。download-dir
將 取代為您的使用者存取權杖。若要了解如何取得您的存取權杖,請參閱 Hugging Face 文件中的使用者存取權杖hf-access-token
。 如需
huggingface_hub
程式庫的詳細資訊,請參閱 Hugging Face 文件中的 Hub 用戶端程式庫。 -
若要讓下載的模型可供 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
", )在此範例中,
將 取代為限定詞,協助您區分 S3 中的草稿模型,例如prefix
spec-dec-custom-draft-model
。upload_data()
方法會傳回模型成品URI的 S3。 -
若要執行推測解碼任務,請使用
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 + "/", }, )在此範例中,
將 取代為 ML 執行個體,例如instance-type
ml.p4d.24xlarge
。optimize()
方法會傳回物件,您可以使用該Model
物件將模型部署至端點。 -
當任務完成時,部署模型。下列範例使用
deploy()
方法:predictor = optimized_model.deploy(accept_eula=True)
deploy()
方法會傳回預測器物件,您可以使用此物件將推論請求傳送至託管模型的端點。
使用編譯進行最佳化
-
若要執行編譯任務,請使用
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
", )在此範例中,將
設定為具有加速硬體的 ML 執行個體類型。例如,對於使用 AWS Inferentia 的加速推論,您可以將 類型設定為 Inf2 執行個體,例如instance-type
ml.inf2.48xlarge
。
將 取代為您存放任務建立之最佳化模型的 S3 位置路徑。s3://output-path
-
當任務完成時,部署模型。下列範例使用
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 變數
。