リアルタイム推論のために、Hugging Face ハブから Azure Machine Learning オンライン エンドポイントにモデルをデプロイする

Microsoft Hugging Face と提携し、Hugging Face Hub から Azure Machine Learning にオープンソース モデルを取り込みます。 Hugging Face は、大規模な言語モデルの構築用として幅広い人気のあるライブラリであるトランスフォーマーの作成元です。 何千ものオープンソース モデルを持つ Hugging Face モデル ハブ。 Azure Machine Learningと統合することで、任意のオープンソース モデルをデプロイして、セキュリティで保護されたスケーラブルな推論インフラストラクチャをAzureにデプロイできます。 ガイド付きウィザードを使うと、Azure Machine Learning モデル カタログの何千ものトランスフォーマー モデルから検索して、マネージド オンライン エンドポイントにモデルを簡単にデプロイできます。 マネージド オンライン エンドポイントをデプロイすると、リアルタイムでモデルにスコアを付けるセキュリティで保護された REST API が提供されます。

Note

Hugging Face のモデルには、Hugging Face モデルの詳細ページで入手可能なサード パーティ ライセンス条項が適用されます。 モデルのライセンス条項に準拠するのは、お客様の責任です。

リアルタイム推論にオンライン エンドポイントを使用する利点

Azure Machine Learning のマネージド オンライン エンドポイントは、強力な CPU と GPU を備えた Azure のマシンにモデルをターンキー方式でデプロイするのに役立ちます。 マネージド オンライン エンドポイントは、モデルの提供、スケーリング、セキュリティ保護、監視を行うので、基になるインフラストラクチャを設定して管理する必要はありません。 モデルをデプロイすると、仮想マシンがプロビジョニングされます。 複数のデプロイを行い、 トラフィックを分割したり 、それらのデプロイにトラフィックをミラー化したりできます。 ミラー トラフィックは、運用環境にリリースすることなく、運用トラフィックで新しいバージョンのモデルをテストするのに役立ちます。 トラフィックを分割すると、パフォーマンスを観察しながら、新しいモデル バージョンへの運用トラフィックを徐々に増やすことができます。 自動スケーリングを使うと、ワークロードに基づいてリソースを動的に増やしたり減らしたりできます。 使用状況メトリック、特定のスケジュール、またはその両方の組み合わせに基づいてスケーリングを構成できます。 たとえば、CPU 使用率が 70% を超えた場合にノードを追加するのは、使用率メトリックに基づくスケーリングの例です。 ピークの営業時間に基づいてノードを追加するのは、スケジュールに基づくスケーリングの例です。

Studio を使用して Hugging Face Hub モデルをデプロイする

デプロイするモデルを見つけるには、Azure Machine Learning スタジオでモデル カタログを開きます。 [すべてのフィルター] を選択し、[コレクションによるフィルター] セクションで [HuggingFace] を選択します。 モデルのタイルを選んで、モデルのページを開きます。

モデルをデプロイする

リアルタイム デプロイ オプションを選んで、クイック デプロイ ダイアログを開きます。 次のオプションを指定します。

  • GPU または CPU 用のテンプレートを選びます。 CPU インスタンスの種類はテストに適しており、GPU インスタンスの種類は運用環境でより優れたパフォーマンスを提供します。 大規模なモデルは、CPU インスタンスの種類には適合しません。
  • インスタンスの種類を選びます。 このインスタンスの一覧はフィルター処理され、メモリ不足なしでモデルをデプロイできるインスタンスのみが表示されます。
  • インスタンスの数を選びます。 テストには 1 つのインスタンスで十分ですが、運用環境では 2 つ以上のインスタンスを検討してください。
  • 必要に応じて、エンドポイントとデプロイ名を指定します。
  • 展開 を選択します。 その後、エンドポイント ページに移動します。数秒かかる場合があります。 モデルのサイズとインスタンスの種類によっては、デプロイが完了するまで数分かかります。

注: 既存のエンドポイントにデプロイする場合は、クイック デプロイ ダイアログから [More options] を選んで、完全なデプロイ ウィザードを使います。

限定的モデル

ゲート モデルは、使用する前にモデルの作成者からの承認を必要とするモデルです。 これらのモデルを使用するには:

  1. Hugging Face の読み取りアクセス トークンまたはきめ細かなアクセス トークンを用意します。
  2. Hugging Face のモデルのページからアクセスを要求します。
  3. キー HuggingFaceTokenConnectionと値がシークレットとしてマークされた Hugging Face トークンを使用して、HF_TOKENという名前のカスタム キー接続を作成します。
  4. enforce_access_to_default_secret_stores に設定して、enabledを作成します。
  5. 新しく作成されたエンドポイントを使用してモデルをデプロイします。

デプロイしたモデルをテストする

デプロイが完了すると、モデルの REST エンドポイントが [エンドポイント ] ページに表示されます。 このエンドポイントを使用して、モデルにスコアを付けます。 デプロイの追加、トラフィックの管理、エンドポイント ハブのスケーリングを行うオプション があります 。 エンドポイント ページの [ テスト ] タブを使用して、サンプル入力でモデルをテストします。 サンプル入力は、モデル ページで入手できます。 入力形式、パラメーター、サンプル入力については、 Hugging Face Hub 推論 API のドキュメントを参照してください

Python SDK を使用して HuggingFace ハブ モデルをデプロイする

Python SDKを設定します。

デプロイするモデルを見つける

Azure Machine Learning スタジオでモデル カタログを参照し、デプロイするモデルを見つけます。 デプロイするモデルの名前をコピーします。 必要なライブラリをインポートします。 カタログで示されるモデルの一覧は、HuggingFace レジストリから表示されます。 モデル カタログからコピーしたモデル名と model_id レジストリを使って、HuggingFace を作成します。 この例では、最新バージョンの bert-base-uncased モデルをデプロイします。

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    ManagedOnlineEndpoint,
    ManagedOnlineDeployment,
)
from azure.identity import DefaultAzureCredential

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_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 = ml_client.online_endpoints.get(endpoint_name)
endpoint.traffic = {"demo": 100}
ml_client.begin_create_or_update(endpoint).result()

デプロイしたモデルをテストする

スコア付けのためにオンライン エンドポイントに送信できる入力を含むファイルを作成します。 このセクションのコード サンプルでは、bert-base-uncased モデルをデプロイしたので、fill-maskの種類の入力を許可します。 入力形式、パラメーター、サンプル入力については、 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 = 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 を使用して Hugging Face ハブのモデルをデプロイする

CLI を設定します

デプロイするモデルを見つける

Azure Machine Learning スタジオでモデル カタログを参照し、デプロイするモデルを見つけます。 デプロイするモデルの名前をコピーします。 カタログで示されるモデルの一覧は、HuggingFace レジストリから表示されます。 この例では、最新バージョンの bert-base-uncased モデルをデプロイします。

モデルをデプロイする

モデルをデプロイするには、 model 値と instance_type 値が必要です。 モデル カタログのモデル ページからクイック デプロイ ダイアログを開くと、モデルに最適な CPU または GPU の instance_type を見つけることができます。 必ず、自分がクォータを持っている instance_type を使ってください。

カタログで示されるモデルの一覧は、HuggingFace レジストリから表示されます。 この例では、最新バージョンの bert-base-uncased モデルをデプロイします。 モデル名およびレジストリに基づいた完全修飾modelアセットIDが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

デプロイしたモデルをテストする

スコア付けのためにオンライン エンドポイントに送信できる入力を含むファイルを作成します。 Hugging Face には、デプロイされたbert-base-uncased モデルのfill-maskの種類に対するコード サンプル入力が用意されています。 入力形式、パラメーター、サンプル入力については、 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 Model のサンプル コード

このリンクに従って、トークンの分類、翻訳、質問応答、ゼロショット分類など、さまざまなシナリオ向けの Hugging Face Model サンプル コードを入手できます。

トラブルシューティング: デプロイ エラーとサポートされていないモデル

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 read the code 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を使用してみてください。

よく寄せられる質問

モデルの重みはどこに格納されますか?

HuggingFace レジストリを介して、Azure Machine Learning モデル カタログに、Face モデルを抱きしめるモデルが表示されます。 Hugging Face は、このレジストリを作成して管理し、コミュニティ レジストリとしてAzure Machine Learningで使用できるようにします。 モデルの重みは Azure ではホストされていません。 これらのモデルをデプロイすると、ワークスペース内のオンライン エンドポイントによって、Hugging Face ハブから直接重みがダウンロードされます。 Azure Machine LearningのHuggingFace レジストリは、Azure Machine Learningで Hugging Face Hub モデルを検出してデプロイするのに役立つカタログとして機能します。

サポートされているモデルは何ですか?

Azureでは、次の条件を満たす Hugging Face モデルがサポートされています。

  • モデルには、Hugging Face Hub の TransformersDiffusers、または Sentence-Transformers タグがあります。
  • モデルには、chat-completionimage-to-textembeddingsなどのサポートされているタスクがあります。
  • モデルの重みは Safetensors 形式であり、モデルには trust_remote_codeは必要ありません。

バッチ推論用のモデルをデプロイするにはどうすればよいですか? 現時点では、バッチ推論のためにこれらのモデルをバッチ エンドポイントにデプロイすることはできません。

トランスフォーマー SDK を使用してこれらのモデルを微調整できるように、 HuggingFace レジストリのモデルをジョブへの入力として使用できますか。 モデルの重みは HuggingFace レジストリに格納されないため、これらのモデルをジョブへの入力として使用してモデルの重みにアクセスすることはできません。

デプロイが失敗した場合、または推論が期待どおりに機能しない場合にサポートを受ける方法HuggingFaceはコミュニティ レジストリであり、Microsoftサポートでは対応していません。 デプロイ ログを確認して、問題が Azure Machine Learning プラットフォームに関連しているか、Hugging Face トランスフォーマーに固有であるかどうかを確認します。 オンライン エンドポイントを作成できない、エンドポイント REST API に対する認証が機能しないなどのプラットフォームの問題については、Microsoft サポートにお問い合わせください。 トランスフォーマー固有の問題については、 GitHub で問題を作成するか、 HuggingFace フォーラムを使用するか、 HuggingFace サポートを使用してください。

コミュニティ レジストリとは 信頼されたAzure Machine Learning パートナーは、コミュニティ レジストリをAzure Machine Learningレジストリとして作成します。 すべてのAzure Machine Learningユーザーがアクセスできます。

ユーザーは Azure Machine Learning 内で Hugging Face に関する質問や問題をどこに送信できますか? Azure Machine Learning ディスカッション フォーラムで質問を送信するか、GitHub イシューを開きます。

リージョン別の提供状況

現在、Hugging Face Collection はパブリック クラウドのすべてのリージョンでのみ使用できます。