Share via


將模型從 HuggingFace 中樞部署到 Azure 機器學習線上端點以進行即時推斷

Microsoft 已與 Hugging Face 合作,將開放原始碼模型從 Hugging Face Hub 帶入 Azure 機器學習。 Hugging Face 是轉換程式的建立器,這是一個廣受歡迎的程式庫,用於建立大型語言模型。 具有數千個開放原始碼模型的 Hugging Face 模型中樞。 與 Azure Machine Learning 的整合可讓您將所選的開放原始碼模型,部署到 Azure 上安全且可擴充的推斷基礎結構。 您可以從 Azure Machine Learning 模型目錄中的數千個轉換程式模型搜尋,並透過引導式精靈輕鬆地將模型部署至受控線上端點。 部署之後,受控線上端點會提供您安全的 REST API,以即時為模型評分。

注意

來自 Hugging Face 的模型須受 Hugging Face 模型詳細資料頁面上的可用第三方授權條款之限制。 您有責任遵守模型的授權條款。

使用線上端點進行即時推斷的優點

Azure Machine Learning 中的受控線上端點可協助您在 Azure 中,以周全的方式將模型部署至強大的 CPU 和 GPU 機器。 受控線上端點負責服務、調整、保護和監視您的模型,讓您免除設定和管理基礎結構的額外負荷。 當您部署模型時,虛擬機會代表您布建。 您可以讓多個部署後置並且將流量分割或對映至這些部署。 對映流量可協助您在實際執行流量上測試新版本的模型,而不需釋出實際執行環境。 分割流量可讓您在觀察效能時,將實際執行的流量逐漸提高至新模型版本。 自動調整可讓您根據工作負載,動態增加或減少資源。 您可以根據使用率計量及/或特定排程來設定調整。 根據使用率計量進行調整的一個範例是,如果 CPU 使用率高於 70%,則新增節點。 排程型調整的一個範例是根據尖峰上班時間新增節點。

使用 Studio 部署 HuggingFace 中樞模型

若要尋找部署模型,請開啟 Azure Machine Learning 工作室中的模型目錄。 選取 HuggingFace 中樞集合。 依工作或授權進行篩選,並搜尋模型。 選取模型圖格以開啟模型頁面。

部署模型

選擇即時部署選項,以開啟快速部署對話方塊。 請指定下列選項:

  • 選取 GPU 或 CPU 的範本。 CPU 執行個體類型很適合用於測試,而 GPU 執行個體類型能在實際執行環境中提供更好的效能。 大型模型不適合用於 CPU 執行個體類型。
  • 選取執行個體類型。 此執行個體清單會篩選出模型預期部署的執行個體,而不會用盡記憶體。
  • 選取執行個體的數目。 一個執行個體足以進行測試,但建議您考慮將兩個以上的執行個體用於實際執行。
  • 選擇性地指定端點和部署名稱。
  • 選取部署。 然後,系統會將您導覽至端點頁面,這個過程可能需要幾秒鐘的時間。 部署需要幾分鐘的時間,才能根據模型大小和執行個體類型來完成。

Animation showing the location of the model catalog within the Azure Machine learning studio

注意:如果您想要部署至現有的端點,請從快速部署對話方塊中選取 More options,並使用完整的部署精靈。

測試已部署的模型

部署完成之後,您可以在端點頁面中找到模型的 REST 端點,可用來為模型評分。 尋找選項以新增更多部署、管理流量及調整端點中樞。 您也可以使用端點頁面上的 [測試] 分頁,透過範例輸入來測試模型。 模型頁面上會顯示範例輸入。 您可以在 Hugging Face 中樞推斷 API 文件中找到輸入格式、參數和範例輸入。

使用 Python SDK 部署 HuggingFace 中樞模型

設定 Python SDK

尋找要部署的模型

瀏覽 Azure Machine Learning 工作室中的模型目錄,並尋找您要部署的模型。 複製您想要部署的模型名稱。 匯入必要的程式庫。 目錄中顯示的模型會從 HuggingFace 登錄列出。 使用您從模型目錄和 HuggingFace 登錄複製的模型名稱,建立 model_id。 使用此範例中的最新版本來部署 bert_base_uncased 模型。

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    ManagedOnlineEndpoint,
    ManagedOnlineDeployment,
    Model,
    Environment,
    CodeConfiguration,
)
registry_name = "HuggingFace"
model_name = "bert_base_uncased"
model_id = f"azureml://registries/{registry_name}/models/{model_name}/labels/latest"

部署模型

建立線上端點。 然後,建立部署。 最後,將所有流量設定為使用此部署。 您可以從模型目錄中的模型頁面開啟快速部署對話方塊,以找到模型的最佳 CPU 或 GPU instance_type。 請確定您使用具有配額的 instance_type

import time
endpoint_name="hf-ep-" + str(int(time.time())) # endpoint name must be unique per Azure region, hence appending timestamp 
ml_client.begin_create_or_update(ManagedOnlineEndpoint(name=endpoint_name) ).wait()
ml_client.online_deployments.begin_create_or_update(ManagedOnlineDeployment(
    name="demo",
    endpoint_name=endpoint_name,
    model=model_id,
    instance_type="Standard_DS2_v2",
    instance_count=1,
)).wait()
endpoint.traffic = {"demo": 100}
ml_client.begin_create_or_update(endpoint_name).result()

測試已部署的模型

建立一個檔案,其中包含可提交至上線端點以進行評分的輸入。 下方是 fill-mask 類型的程式碼範例輸入,因為我們部署了 bert-base-uncased 模型。 您可以在 Hugging Face 中樞推斷 API 文件中找到輸入格式、參數和範例輸入。

import json
scoring_file = "./sample_score.json"
with open(scoring_file, "w") as outfile:
    outfile.write('{"inputs": ["Paris is the [MASK] of France.", "The goal of life is [MASK]."]}')   
response = workspace_ml_client.online_endpoints.invoke(
    endpoint_name=endpoint_name,
    deployment_name="demo",
    request_file=scoring_file,
)
response_json = json.loads(response)
print(json.dumps(response_json, indent=2))

使用 CLI 部署 HuggingFace 中樞模型

設定 CLI

尋找要部署的模型

瀏覽 Azure Machine Learning 工作室中的模型目錄,並尋找您要部署的模型。 複製您想要部署的模型名稱。 目錄中顯示的模型會從 HuggingFace 登錄列出。 使用此範例中的最新版本來部署 bert_base_uncased 模型。

部署模型

您需要 modelinstance_type 才能部署模型。 您可以從模型目錄中的模型頁面開啟快速部署對話方塊,以找到模型的最佳 CPU 或 GPU instance_type。 請確定您使用具有配額的 instance_type

目錄中顯示的模型會從 HuggingFace 登錄列出。 使用此範例中的最新版本來部署 bert_base_uncased 模型。 根據模型名稱和登錄的完整 model 資產識別碼是 azureml://registries/HuggingFace/models/bert-base-uncased/labels/latest。 我們會建立用於 az ml online-deployment create 內嵌命令的 deploy.yml 檔案。

建立線上端點。 然後,建立部署。

# create endpoint
endpoint_name="hf-ep-"$(date +%s)
model_name="bert-base-uncased"
az ml online-endpoint create --name $endpoint_name 

# create deployment file. 
cat <<EOF > ./deploy.yml
name: demo
model: azureml://registries/HuggingFace/models/$model_name/labels/latest
endpoint_name: $endpoint_name
instance_type: Standard_DS3_v2
instance_count: 1
EOF
az ml online-deployment create --file ./deploy.yml --workspace-name $workspace_name --resource-group $resource_group_name

測試已部署的模型

建立一個檔案,其中包含可提交至上線端點以進行評分的輸入。 作為 fill-mask 類型程式碼範例輸入的 Hugging Face,適用於我們部署的模型 (bert-base-uncased 模型)。 您可以在 Hugging Face 中樞推斷 API 文件中找到輸入格式、參數和範例輸入。

scoring_file="./sample_score.json"
cat <<EOF > $scoring_file
{
  "inputs": [
    "Paris is the [MASK] of France.",
    "The goal of life is [MASK]."
  ]
}
EOF
az ml online-endpoint invoke --name $endpoint_name --request-file $scoring_file

Hugging Face 模型範例程式碼

請造訪此連結來尋找各種案例的 hugging face 模型範例程式碼,包括權杖分類、翻譯、問題解答和零樣本分類。

疑難排解:部署錯誤和不支援的模型

HuggingFace 中樞有數千個模型,每天有數百個更新。 只有集合中最受歡迎的模型經過測試,其他模型可能會失敗,並顯示下列其中一個錯誤。

閘道模型

閘道模型要求使用者同意分享其連絡資訊,並接受模型擁有者的條款及條件,才能存取模型。 嘗試部署這類模型將會失敗,並顯示 KeyError

需要執行遠端程式碼的模型

模型通常會使用轉換程式 SDK 中的程式碼,但有些模型會執行模型存放庫中的程代碼。 這類模型必須將 trust_remote_code 參數設為 True。 造訪此連結,以深入瞭解如何使用遠端程式碼。 這類模型不支援記住安全性。 嘗試部署這類模型將會失敗,並顯示下列錯誤:ValueError: Loading <model> requires you to execute the configuration file in that repo on your local machine. Make sure you have read the code there to avoid malicious use, then set the option trust_remote_code=True to remove this error.

具有不正確權杖化工具的模型

模型套件中未正確指定或遺漏的權杖化工具可能會導致 OSError: Can't load tokenizer for <model> 錯誤。

遺漏程式庫

某些模型需要額外的 Python 程式庫。 您可以在本機執行模型時安裝遺漏的程式庫。 需要標準轉換程式庫以外之特殊程式庫的模型將會失敗,並顯示 ModuleNotFoundErrorImportError 錯誤。

記憶體不足

如果您看到 OutOfQuota: Container terminated due to insufficient memory,請嘗試透過更多記憶體使用 instance_type

常見問題集

模型權重儲存在哪裡?

Hugging Face 模型會透過 HuggingFace 登錄,包含在 Azure Machine Learning 模型目錄中。 Hugging Face 會建立及管理此登錄,並可供 Azure Machine Learning 作為社群登錄使用。 模型權數並未裝載在 Azure 上。 權數會直接從 Hugging Face 中樞下載到這些模型部署時,工作區中的線上端點。 AzureML 中的 HuggingFace 登錄可作為目錄,以協助探索及部署 Azure Machine Learning 中的 HuggingFace 中樞模型。

如何部署模型以進行批次推斷? 目前不支援將這些模型部署至批次端點以進行批次推斷。

我可以使用來自 HuggingFace 登錄的模型作為作業的輸入,以便使用轉換程式 SDK 微調這些模型嗎? 由於模型權數不會儲存在 HuggingFace 登錄中,因此您無法使用這些模型做為作業的輸入來存取模型權數。

如果我的部署失敗或推斷無法如預期般運作,如何取得支援?HuggingFace 是社群登錄,Microsoft 支援並未涵蓋此登錄。 檢閱部署記錄,並找出問題是否與 Azure Machine Learning 平台相關,或專屬於 HuggingFace 轉換程式。 任何平台問題,請洽詢 Microsoft 支援部門。 例如,無法建立線上端點,或對端點 REST API 的驗證無法運作。 針對轉換程式的特定問題,請使用 HuggingFace 論壇HuggingFace 支援

什麼是社群登錄? 社群登錄是由受信任的 Azure Machine Learning 合作夥伴所建立的 Azure Machine Learning 登錄,可供所有 Azure Machine Learning 使用者取用。

使用者可以在哪裡提交 Azure 機器學習中關於 Hugging Face 的問題和疑慮?Azure Machine Learning 討論論壇中提交您的問題。

區域可用性

Hugging Face 集合目前僅適用於公用雲端的所有區域。