次の方法で共有


リアルタイム推論のために 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% を超えた場合にノードを追加するのは、使用率メトリックに基づくスケーリングの例です。 ピークの営業時間に基づいてノードを追加するのは、スケジュールに基づくスケーリングの例です。

スタジオを使用して Hugging Face ハブのモデルをデプロイする

デプロイするモデルを見つけるには、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_storesenabledに設定する
  5. 新しく作成されたエンドポイントを使用してモデルをデプロイする

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

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

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

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,
)

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()

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

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

CLI をセットアップします

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

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

モデルをデプロイする

モデルをデプロイするには、modelinstance_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"
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

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

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

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

Hugging Face ハブには何千ものモデルがあり、毎日何百ものモデルが更新されています。 テストされているのはコレクション内で最も人気のあるモデルのみであり、それ以外は次のいずれかのエラーで失敗する可能性があります。

限定的モデル

限定的モデルでは、ユーザーは、モデルにアクセスするには、連絡先情報を共有することに同意し、モデル所有者の使用条件を受け入れる必要があります。 上記の手順に従わずにこのようなモデルをデプロイしようとすると、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 の TransformersDiffusers、または Sentence-Transformers のいずれかのタグを持っている必要がある
  • chat-completionimage-to-taskembeddings などのサポートされているタスクを持っている
  • モデルの重みが Safetensors 形式であり、モデルで trust_remote_code が必要ない

バッチ推論用のモデルをデプロイする方法 これらのモデルをバッチ推論用のバッチ エンドポイントにデプロイすることは、現在サポートされていません。

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

はコミュニティ レジストリであり、Microsoft サポートの対象ではありません。 デプロイ ログを調べて、問題が Azure Machine Learning プラットフォームに関連するものか、HuggingFace トランスフォーマーに固有かを確認します。 オンライン エンドポイントを作成できない、エンドポイント 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 はパブリック クラウドのすべてのリージョンでのみ使用できます。