Microsoft 已與 Hugging Face 合作,將開放原始碼模型從 Hugging Face 中樞導入 Azure Machine Learning。 Hugging Face 是轉換程式的建立器,這是一個廣受歡迎的程式庫,用於建立大型語言模型。 具有數千個開放原始碼模型的 Hugging Face 模型中樞。 與 Azure Machine Learning 的整合可讓您將所選的開放原始碼模型,部署到 Azure 上安全且可擴充的推斷基礎結構。 您可以從 Azure Machine Learning 模型目錄中的數千個轉換程式模型搜尋,並透過引導式精靈輕鬆地將模型部署至受控線上端點。 部署之後,受控線上端點會提供您安全的 REST API,以即時為模型評分。
Note
來自 Hugging Face 的模型須受 Hugging Face 模型詳細資料頁面上的可用第三方授權條款之限制。 您有責任遵守模型的授權條款。
使用線上端點進行即時推斷的優點
Azure Machine Learning 中的受控線上端點可協助您在 Azure 中,以周全的方式將模型部署至強大的 CPU 和 GPU 機器。 受控線上端點負責服務、調整、保護和監視您的模型,讓您免除設定和管理基礎結構的額外負荷。 當您部署模型時,虛擬機會代表您布建。 您可以有多個部署,並且將流量分割或鏡像至 (部分機器翻譯) 那些部署。 對映流量可協助您在實際執行流量上測試新版本的模型,而不需釋出實際執行環境。 分割流量可讓您在觀察效能時,將實際執行的流量逐漸提高至新模型版本。 自動調整 可讓您根據工作負載動態增加或減少資源。 您可以根據使用率計量、特定排程或兩者的組合來設定調整。 根據使用率計量進行調整的一個範例是,如果 CPU 使用率高於 70%,則新增節點。 排程型調整的一個範例是根據尖峰上班時間新增節點。
使用 Studio 部署 HuggingFace 中樞模型
若要尋找部署模型,請開啟 Azure Machine Learning 工作室中的模型目錄。 選取 [所有篩選條件],然後在 [依集合篩選] 區段中選取 [HuggingFace]。 選取模型圖格以開啟模型頁面。
部署模型
選擇即時部署選項,以開啟快速部署對話方塊。 指定下列選項:
- 選取 GPU 或 CPU 的範本。 CPU 執行個體類型很適合用於測試,而 GPU 執行個體類型能在實際執行環境中提供更好的效能。 大型模型不適合用於 CPU 執行個體類型。
- 選取執行個體類型。 此執行個體清單會篩選出模型預期部署的執行個體,而不會用盡記憶體。
- 選取執行個體的數目。 一個執行個體足以進行測試,但建議您考慮將兩個以上的執行個體用於實際執行。
- 選擇性地指定端點和部署名稱。
- 選取 [部署]。 接著,您會流覽至端點頁面,這可能需要幾秒鐘的時間。 部署需要幾分鐘的時間,才能根據模型大小和執行個體類型來完成。
注意:如果您想要部署至現有的端點,請從快速部署對話方塊中選取 More options,並使用完整的部署精靈。
門控模型
門控模型是指需要在使用前取得模型作者批准的模型。 使用方法:
- 查看 Hugging Face 的內容或微調權杖
- 請透過 Hugging Face 上的模特兒頁面申請存取權
- 建立一個名為
HuggingFaceTokenConnection的自訂金鑰連線,其中金鑰為HF_TOKEN,而值為標記為秘密的 Hugging Face 代幣。 - 建立一個端點,設定
enforce_access_to_default_secret_stores為enabled - 使用新建立的端點部署模型
測試已部署的模型
部署完成之後,您可以在端點頁面中找到模型的 REST 端點,可用來為模型評分。 您可以找到選項來新增更多部署、管理流量,以及調整端點中樞。 您也可以使用端點頁面上的 [測試] 分頁,透過範例輸入來測試模型。 模型頁面上會顯示範例輸入。 您可以在 Hugging Face Hub 推理 API 文件中找到輸入格式、參數和範例輸入。
使用 Python SDK 部署 HuggingFace 中樞模型
尋找要部署的模型
瀏覽 Azure Machine Learning 工作室中的模型目錄,並尋找您要部署的模型。 複製您想要部署的模型名稱。 匯入必要的程式庫。 目錄中顯示的模型會從 HuggingFace 登錄列出。 使用您從模型目錄和 model_id 登錄複製的模型名稱,建立 HuggingFace。 使用此範例中的最新版本來部署 bert_base_uncased 模型。
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration,
)
ml_client = MLClient(
credential=DefaultAzureCredential(),
subscription_id="<your-subscription-id>",
resource_group_name="<your-resource-group>",
workspace_name="<your-workspace-name>"
)
registry_name = "HuggingFace"
model_name = "bert_base_uncased"
model_version = "25"
model_id = f"azureml://registries/{registry_name}/models/{model_name}/versions/{model_version}"
部署模型
建立線上端點。 然後,建立部署。 最後,將所有流量設定為使用此部署。 您可以從模型目錄中的模型頁面開啟快速部署對話方塊,以找到模型的最佳 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 = ml_client.online_endpoints.get(endpoint_name)
endpoint.traffic = {"demo": 100}
ml_client.begin_create_or_update(endpoint).result()
測試已部署的模型
建立一個檔案,其中包含可提交至上線端點以進行評分的輸入。 本節中的範例程式碼允許 fill-mask 類型的輸入,因為我們已經部署 bert-base-uncased 模型。 您可以在 Hugging Face Hub 推理 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 中樞模型
尋找要部署的模型
瀏覽 Azure Machine Learning 工作室中的模型目錄,並尋找您要部署的模型。 複製您想要部署的模型名稱。 目錄中顯示的模型會從 HuggingFace 登錄列出。 使用此範例中的最新版本來部署 bert_base_uncased 模型。
部署模型
您需要 model 和 instance_type 才能部署模型。 您可以從模型目錄中的模型頁面開啟快速部署對話方塊,以找到模型的最佳 CPU 或 GPU instance_type。 請確定您使用具有配額的 instance_type。
目錄中顯示的模型會從 HuggingFace 登錄列出。 使用此範例中的最新版本來部署 bert_base_uncased 模型。 根據模型名稱和登錄的完整 model 資產識別碼是 azureml://registries/HuggingFace/models/bert-base-uncased/labels/latest。 我們會建立用於 deploy.yml 內嵌命令的 az ml online-deployment create 檔案。
建立線上端點。 然後,建立部署。
# create endpoint
endpoint_name="hf-ep-"$(date +%s)
model_name="bert-base-uncased"
model_version="25"
az ml online-endpoint create --name $endpoint_name
# create deployment file.
cat <<EOF > ./deploy.yml
name: demo
model: azureml://registries/HuggingFace/models/$model_name/versions/$model_version
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 Hub 推理 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 程式庫。 您可以在本機執行模型時安裝遺漏的程式庫。 需要標準轉換程式庫以外之特殊程式庫的模型會失敗,並顯示 ModuleNotFoundError 或 ImportError 錯誤。
記憶體不足
如果您看到 OutOfQuota: Container terminated due to insufficient memory,請嘗試透過更多記憶體使用 instance_type。
常見問題集
模型權數會儲存在哪裡?
Hugging Face 模型會透過 HuggingFace 登錄,包含在 Azure Machine Learning 模型目錄中。 Hugging Face 會建立及管理此登錄,並可供 Azure Machine Learning 作為社群登錄使用。 模型權數並未裝載在 Azure 上。 權數會直接從 Hugging Face 中樞下載到這些模型部署時,工作區中的線上端點。
HuggingFace Azure Machine Learning 中的登錄可作為目錄,以協助探索及部署 Azure Machine Learning 中的 HuggingFace 中樞模型。
支援哪些型號?
Azure 支援符合下列準則的 Hugging Face 模型:
- 在 Hugging Face Hub 上必須有
Transformers、Diffusers或Sentence-Transformers標籤 - 具有 支援的任務,例如
chat-completion、image-to-task或embeddings - 模型權重採用 Safetensors 格式,且模型不需要
trust_remote_code
如何部署模型以進行批次推斷? 目前不支援將這些模型部署至批次端點以進行批次推斷。
我可以使用HuggingFace登錄中的模型作為作業輸入,然後使用Transformers SDK微調這些模型嗎?
由於模型權數不會儲存在登錄中 HuggingFace ,因此您無法使用這些模型做為作業的輸入來存取模型權數。
如果我的部署失敗或推斷無法如預期般運作,如何取得支援?HuggingFace 是社群登錄,Microsoft支持並未涵蓋。 檢閱部署記錄,並找出問題是否與 Azure Machine Learning 平台相關,或專屬於 HuggingFace 轉換程式。 如果有任何平台問題,例如無法建立線上端點或端點 REST API 無法驗證,請聯絡 Microsoft 客服。 對於 transformer 專屬的問題,可以在 GitHub 建立議題、使用 HuggingFace 論壇,或使用 HuggingFace 支援。
什麼是社群登錄? 社群登錄是由受信任的 Azure Machine Learning 合作夥伴所建立的 Azure Machine Learning 登錄,可供所有 Azure Machine Learning 使用者取用。
使用者可以在哪裡提交有關 Azure Machine Learning 內 Hugging Face 的問題和疑慮? 在 Azure Machine Learning 討論論壇 中提交您的問題,或開啟 GitHub 問題。
區域可用性
Hugging Face 集合目前僅適用於公用雲端的所有區域。