使用 Amazon SageMaker 輕鬆部署 Hugging Face 模型 🏎

今年早些時候,我們宣佈與 Amazon 建立戰略合作關係,旨在讓公司更輕鬆地在 Amazon SageMaker 中使用 Hugging Face,並更快地釋出尖端機器學習功能。我們推出了新的 Hugging Face 深度學習容器 (DLC),用於在 Amazon SageMaker 中訓練 Hugging Face Transformer 模型。
今天,我們很高興與您分享一種新的推理解決方案,它使使用 Amazon SageMaker 部署 Hugging Face Transformers 比以往任何時候都更容易!藉助新的 Hugging Face 推理 DLC,您只需多一行程式碼即可部署訓練好的模型進行推理,或者從模型中心選擇任何 10,000 多個公開可用的模型,並將其部署到 Amazon SageMaker。
在 SageMaker 中部署模型為您提供生產就緒的端點,這些端點可以在您的 AWS 環境中輕鬆擴充套件,並具有內建監控和大量企業級功能。這是一次令人驚歎的合作,我們希望您能充分利用它!
以下是如何使用新的SageMaker Hugging Face 推理工具包來部署基於 Transformers 的模型
from sagemaker.huggingface import HuggingFaceModel
# create Hugging Face Model Class and deploy it as SageMaker Endpoint
huggingface_model = HuggingFaceModel(...).deploy()
就是這樣!🚀
要了解有關使用 Amazon SageMaker Python SDK 訪問和使用新的 Hugging Face DLC 的更多資訊,請檢視下面的指南和資源。
資源、文件和示例 📄
您可以在下面找到將模型部署到 Amazon SageMaker 的所有重要資源。
部落格/影片
- 影片:從 S3 將 Hugging Face Transformers 模型部署到 Amazon SageMaker
- 影片:從模型中心將 Hugging Face Transformers 模型部署到 Amazon SageMaker
示例/文件
- Amazon SageMaker 的 Hugging Face 文件
- 將模型部署到 Amazon SageMaker
- Amazon SageMaker 關於 Hugging Face 的文件
- Python SDK SageMaker 關於 Hugging Face 的文件
- 深度學習容器
- 筆記本:將 10,000 多個 Hugging Face Transformers 模型之一部署到 Amazon SageMaker 進行推理
- 筆記本:將 Hugging Face Transformer 模型從 S3 部署到 SageMaker 進行推理
SageMaker Hugging Face 推理工具包 ⚙️
除了用於推理的 Hugging Face Transformers 最佳化深度學習容器外,我們還為 Amazon SageMaker 建立了一個新的推理工具包。這個新的推理工具包利用 transformers
庫中的 pipelines
,允許無需編寫任何預處理或後處理程式碼即可進行零程式碼部署模型。在下面的“入門”部分中,您將找到兩個如何將模型部署到 Amazon SageMaker 的示例。
除了零程式碼部署之外,推理工具包還支援“自帶程式碼”方法,您可以在其中覆蓋預設方法。您可以在此處的文件中瞭解有關“自帶程式碼”的更多資訊,或者檢視示例筆記本“將自定義推理程式碼部署到 Amazon SageMaker”。
API - 推理工具包描述
我們使用 transformers pipelines
設計了一個 API,讓您可以輕鬆地利用所有 pipelines
功能。該 API 具有與 🤗 Accelerated Inference API 類似的介面,這意味著您的輸入需要定義在 inputs
鍵中,如果您需要額外的受支援的 pipelines
引數,可以將它們新增到 parameters
鍵中。您可以在下面找到請求示例。
# text-classification request body
{
"inputs": "Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days."
}
# question-answering request body
{
"inputs": {
"question": "What is used for inference?",
"context": "My Name is Philipp and I live in Nuremberg. This model is used with sagemaker for inference."
}
}
# zero-shot classification request body
{
"inputs": "Hi, I recently bought a device from your company but it is not working as advertised and I would like to get reimbursed!",
"parameters": {
"candidate_labels": [
"refund",
"legal",
"faq"
]
}
}
入門 🧭
在本指南中,我們將使用新的 Hugging Face 推理 DLC 和 Amazon SageMaker Python SDK 部署兩個 Transformer 模型進行推理。
在第一個示例中,我們部署在 Amazon SageMaker 中訓練的 Hugging Face Transformer 模型進行推理。
在第二個示例中,我們直接將 Hugging Face 模型中心中 10,000 多個公開可用的 Hugging Face Transformers 模型之一部署到 Amazon SageMaker 進行推理。
設定環境
我們將使用 Amazon SageMaker Notebook Instance 作為示例。您可以在此處瞭解如何設定筆記本例項。首先,進入 Jupyter Notebook 或 JupyterLab,使用 conda_pytorch_p36
核心建立一個新筆記本。
注意:使用 Jupyter 是可選的:我們也可以從任何安裝了 SDK、連線到雲以及具有適當許可權的地方(例如筆記型電腦、其他 IDE 或 Airflow 或 AWS Step Functions 等任務排程程式)啟動 SageMaker API 呼叫。
之後,我們可以安裝所需的依賴項。
pip install "sagemaker>=2.48.0" --upgrade
要在 SageMaker 上部署模型,我們需要建立一個 sagemaker
會話並提供具有正確許可權的 IAM 角色。get_execution_role
方法由 SageMaker SDK 提供,作為一種可選的便利。您還可以透過編寫要讓端點使用的特定角色 ARN 來指定角色。此 IAM 角色將稍後附加到端點,例如從 Amazon S3 下載模型。
import sagemaker
sess = sagemaker.Session()
role = sagemaker.get_execution_role()
將訓練好的 Hugging Face Transformer 模型部署到 SageMaker 進行推理
有兩種方法可以部署您在 SageMaker 中訓練的 Hugging Face 模型。您可以在訓練完成後立即部署,或者稍後使用指向 Amazon S3 中儲存模型的 model_data
進行部署。除了下面提到的兩種選項之外,您還可以使用較低級別的 SDK(如 boto3
和 AWS CLI
、Terraform
和 CloudFormation 模板)例項化 Hugging Face 端點。
使用 Estimator 類在訓練後直接部署模型
如果您在訓練後直接部署模型,則需要確保所有必需的模型 artifact 都儲存在您的訓練指令碼中,包括 tokenizer 和模型。直接在訓練後部署的一個好處是 SageMaker 模型容器元資料將包含源訓練作業,從而提供從訓練作業到已部署模型的譜系。
from sagemaker.huggingface import HuggingFace
############ pseudo code start ############
# create HuggingFace estimator for running training
huggingface_estimator = HuggingFace(....)
# starting the train job with our uploaded datasets as input
huggingface_estimator.fit(...)
############ pseudo code end ############
# deploy model to SageMaker Inference
predictor = hf_estimator.deploy(initial_instance_count=1, instance_type="ml.m5.xlarge")
# example request, you always need to define "inputs"
data = {
"inputs": "Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days."
}
# request
predictor.predict(data)
執行請求後,我們可以再次使用以下命令刪除端點。
# delete endpoint
predictor.delete_endpoint()
使用 HuggingFaceModel
類從預訓練檢查點部署模型
如果您已經訓練好模型並希望在稍後部署,則可以使用 model_data
引數指定 tokenizer 和模型權重的位置。
from sagemaker.huggingface.model import HuggingFaceModel
# create Hugging Face Model Class
huggingface_model = HuggingFaceModel(
model_data="s3://models/my-bert-model/model.tar.gz", # path to your trained sagemaker model
role=role, # iam role with permissions to create an Endpoint
transformers_version="4.6", # transformers version used
pytorch_version="1.7", # pytorch version used
)
# deploy model to SageMaker Inference
predictor = huggingface_model.deploy(
initial_instance_count=1,
instance_type="ml.m5.xlarge"
)
# example request, you always need to define "inputs"
data = {
"inputs": "Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days."
}
# request
predictor.predict(data)
執行請求後,我們可以再次使用以下命令刪除端點。
# delete endpoint
predictor.delete_endpoint()
將 10,000+ Hugging Face Transformers 模型之一部署到 Amazon SageMaker 進行推理
要將模型直接從 Hugging Face 模型中心部署到 Amazon SageMaker,我們需要在建立 HuggingFaceModel
時定義兩個環境變數。我們需要定義:
- HF_MODEL_ID:定義模型 ID,它將在建立 SageMaker 端點時自動從huggingface.co/models載入。🤗 Hub 透過此環境變數提供了 10,000 多個模型。
- HF_TASK:定義所用 🤗 Transformers 管道的任務。任務的完整列表可以在這裡找到。
from sagemaker.huggingface.model import HuggingFaceModel
# Hub Model configuration. <https://huggingface.co/models>
hub = {
'HF_MODEL_ID':'distilbert-base-uncased-distilled-squad', # model_id from hf.co/models
'HF_TASK':'question-answering' # NLP task you want to use for predictions
}
# create Hugging Face Model Class
huggingface_model = HuggingFaceModel(
env=hub, # configuration for loading model from Hub
role=role, # iam role with permissions to create an Endpoint
transformers_version="4.6", # transformers version used
pytorch_version="1.7", # pytorch version used
)
# deploy model to SageMaker Inference
predictor = huggingface_model.deploy(
initial_instance_count=1,
instance_type="ml.m5.xlarge"
)
# example request, you always need to define "inputs"
data = {
"inputs": {
"question": "What is used for inference?",
"context": "My Name is Philipp and I live in Nuremberg. This model is used with sagemaker for inference."
}
}
# request
predictor.predict(data)
執行請求後,我們可以再次使用以下命令刪除端點。
# delete endpoint
predictor.delete_endpoint()
常見問題 🎯
問:我可以部署哪些模型進行推理?
答:您可以部署:
- 在 Amazon SageMaker 或其他相容平臺中訓練的任何 🤗 Transformers 模型,並且可以適應 SageMaker Hosting 設計
- 來自 Hugging Face 模型中心的 10,000 多個公開可用的 Transformer 模型中的任何一個,或者
- 您在 Hugging Face 高階帳戶中託管的私有模型!
問:推理工具包支援哪些管道和任務?
答:推理工具包和 DLC 支援任何 transformers
pipelines
。您可以在此處找到完整列表。
問:在託管 SageMaker 端點時,我必須使用 transformers pipelines
嗎?
答:不,您也可以編寫自定義推理程式碼來服務您自己的模型和邏輯,具體請參閱此處的文件。
問:我必須使用 SageMaker Python SDK 才能使用 Hugging Face 深度學習容器 (DLC) 嗎?
答:您可以在不使用 SageMaker Python SDK 的情況下使用 Hugging Face DLC,並使用其他 SDK(例如 AWS CLI、boto3 或 Cloudformation)將模型部署到 SageMaker。DLC 也可透過 Amazon ECR 獲得,並且可以在任何選擇的環境中拉取和使用。
問:我為什麼要使用 Hugging Face 深度學習容器?
答:DLC 是經過全面測試、維護和最佳化的深度學習環境,無需安裝、配置或維護。特別是,我們的推理 DLC 附帶了一個預先編寫的服務堆疊,這大大降低了 DL 服務的技術門檻。
問:Amazon SageMaker 如何保護我的資料和程式碼?
答:Amazon SageMaker 提供多種安全機制,包括靜態加密和傳輸中加密、虛擬私有云 (VPC) 連線以及身份和訪問管理 (IAM)。要了解有關 AWS 雲和 Amazon SageMaker 中安全的更多資訊,您可以訪問Amazon SageMaker 中的安全和AWS 雲安全。
問:這在我的區域可用嗎?
答:有關受支援區域的列表,請訪問AWS 區域表,瞭解所有 AWS 全球基礎設施。
問:您是否為此解決方案提供高階支援或支援 SLA?
答:AWS 技術支援級別可從 AWS 獲得,涵蓋 AWS 產品和服務的開發和生產問題——請參閱 AWS 支援以獲取具體內容和範圍。
如果您有問題需要 Hugging Face 社群幫助回答和/或從中受益,請在 Hugging Face 論壇上釋出。
如果您需要 Hugging Face 團隊的高階支援以加速您的 NLP 路線圖,我們的
提供來自我們開源、科學和機器學習工程團隊的直接指導。