Share via


HuggingFace ハブから 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 スタジオでモデル カタログを開きます。 Hugging Face ハブ コレクションを選びます。 タスクまたはライセンスでフィルター処理して、モデルを検索します。 モデルのタイルを選んで、モデルのページを開きます。

モデルをデプロイする

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

  • GPU または CPU 用のテンプレートを選びます。 CPU インスタンスの種類はテストに適しており、GPU インスタンスの種類は運用環境でのパフォーマンスが優れています。 CPU インスタンスの種類には、大きいモデルは適していません。
  • インスタンスの種類を選びます。 このインスタンスの一覧は、メモリを使い切ることなくモデルをデプロイできると予想されるインスタンスに絞り込まれています。
  • インスタンスの数を選びます。 テストには 1 つのインスタンスで十分ですが、運用環境では 2 つ以上のインスタンスを検討することをお勧めします。
  • 必要に応じて、エンドポイントとデプロイ名を指定します。
  • [デプロイ] を選びます。 その後、エンドポイントのページに移動しますが、これはに数秒かかる場合があります。 モデルのサイズとインスタンスの種類によっては、デプロイが完了するまで数分かかります。

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

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

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

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

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

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

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

スコアを付けるためにオンライン エンドポイントに送信できる入力を含むファイルを作成します。 デプロイされたモデル bert-base-uncased に対する fill-mask の種類のコード サンプル入力としての Hugging Face。 入力形式、パラメーター、サンプル入力については、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 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 ハブからお使いのワークスペース内のオンライン エンドポイントに、直接ダウンロードされます。 AzureML の HuggingFace レジストリは、Azure Machine Learning で Hugging Face ハブ モデルを検出してデプロイするのに役立つカタログとして機能します。

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

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

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

コミュニティ レジストリとは コミュニティ レジストリは、信頼できる Azure Machine Learning パートナーによって作成され、すべての Azure Machine Learning ユーザーが利用できる Azure Machine Learning レジストリです。

Azure Machine Learning 内の Hugging Face に関する質問や懸念をユーザーが投稿できる場所はどこですか? Azure Machine Learning ディスカッション フォーラムで質問を送信してください。

リージョン別の提供状況

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