Azure API Management を使用して Azure OpenAI for Python をスケーリングする
アプリにエンタープライズ レベルの負荷分散を追加して、Azure OpenAI トークンとモデルのクォータ制限を超えてチャットアプリを拡張する方法について説明します。 このアプローチでは、Azure API Management を使用して、3 つの Azure OpenAI リソース間でトラフィックをインテリジェントに転送します。
この記事では、2 つの個別のサンプルをデプロイする必要があります。
チャット アプリ
- チャットアプリをまだデプロイしていない場合は、ロードバランサーサンプルがデプロイされるまで待ちます。
- チャット アプリを既に 1 回デプロイしている場合は、ロード バランサーのカスタム エンドポイントをサポートするように環境変数を変更し、再度デプロイします。
Azure API Management の Load balancer
Note
この記事では、記事内の例とガイダンスの土台として、1 つ以上の AI アプリ テンプレートを使用しています。 AI アプリ テンプレートは、適切にメンテナンスされ、デプロイが容易なリファレンス実装を提供します。これは、高品質な AI アプリの作成を開始するために役立ちます。
Azure API Management を使用した Azure OpenAI の負荷分散のアーキテクチャ
Azure OpenAIリソースには特定のトークンとモデルのクォータ制限があるため、単一のAzure OpenAIリソースを使用するチャットアプリでは、これらの制限が原因で会話が失敗する傾向があります。
これらの制限に達することなくチャット アプリを使用するには、Azure API Management で負荷分散ソリューションを使用します。 このソリューションでは、Azure API Management からチャット アプリ サーバーに単一のエンドポイントがシームレスに公開されます。
Azure API Management リソースは、API レイヤーとして、一連の Azure OpenAI リソースの前に配置されます。 API レイヤーは、通常と調整の 2 つのシナリオに適用されます。 トークンとモデルのクォータが使用可能な通常のシナリオでは、Azure OpenAI リソースは、API レイヤーとバックエンド アプリ サーバーを介して 200 を返します。
リソースがクォータ制限により調整される場合、API レイヤーは、元のチャット アプリの要求を満たすために別の Azure OpenAI リソースをすぐに再試行できます。
前提条件
Azure のサブスクリプション。 無料で作成できます
目的の Azure サブスクリプション内の Azure OpenAI に付与されたアクセス権。
現時点では、このサービスへのアクセスは申請によってのみ許可されます。 Azure OpenAI へのアクセスを申請するには、 https://aka.ms/oai/accessのフォームに入力してください。
Dev コンテナーは両方のサンプルで使用でき、この記事を完了するために必要なすべての依存関係が含まれています。 開発コンテナーは、GitHub Codespaces (ブラウザー) または Visual Studio Code を使用してローカルで実行できます。
- Codespaces を使用するには、GitHub アカウントのみが必要です
Azure API Management ロード バランサーのサンプル アプリを開く
GitHub Codespaces は、 Visual Studio Code for the Web をユーザー インターフェイスとして使用して、GitHub によって管理される開発コンテナーを実行します。 最も簡単な開発環境では、GitHub Codespaces を使用して、この記事を完了するために正しい開発者ツールと依存関係がプレインストールされるようにします。
重要
すべての GitHub アカウントでは、2 つのコア インスタンスで毎月最大 60 時間無料で Codespaces を使用できます。 詳細については、「 GitHub Codespaces に月単位で含まれるストレージとコア時間」を参照してください。
Azure API Management ロード バランサーをデプロイする
ロード バランサーを Azure にデプロイするには、Azure Developer CLI (AZD) にサインインします。
azd auth login
サインインの手順を完了します。
ロード バランサー アプリをデプロイします。
azd up
デプロイのサブスクリプションとリージョンを選択する必要があります。 これらは、チャット アプリと同じサブスクリプションとリージョンである必要はありません。
デプロイが完了するまで待ってから次に進みます。 これには最大 30 分かかることがあります。
ロード バランサー エンドポイントを取得します
次の bash コマンドを実行して、デプロイの環境変数を確認します。 この情報は後で必要になります。
azd env get-values | grep APIM_GATEWAY_URL
ロード バランサー エンドポイントを使用してチャット アプリを再デプロイします
これらは、チャット アプリ サンプルで完了します。
次のいずれかを選択して、チャットアプリサンプルの開発コンテナーを開きます。
Language Codespaces Visual Studio Code .NET JavaScript Python Azure Developer CLI (AZD) にサインインします。
azd auth login
サインインの手順を完了します。
chat-app
などの名前でAZD環境を作成します。azd env new <name>
次の環境変数を追加して、チャット アプリのバックエンドに、OpenAI リクエストにカスタム URL を使用するよう指示します。
azd env set OPENAI_HOST azure_custom
次の環境変数を追加して、チャット アプリのバックエンドに、OpenAI リクエストのカスタム URL の値を伝えます。
azd env set AZURE_OPENAI_CUSTOM_URL <APIM_GATEWAY_URL>
チャットアプリをデプロイします。
azd up
分あたりのトークンのクォータ (TPM) を構成します
既定では、ロードバランサー内の各OpenAIインスタンスは、3万TPM (分あたりのトークン) 容量でデプロイされます。 クォータを使い果たすことなく、多数のユーザーにスケーリングするように構築されているという確信を持ってチャット アプリを使用できます。 次の場合は、この値を変更します。
- デプロイ容量エラーが発生した場合:値を小さくします。
- より高い容量を計画する場合は、値を大きくします。
次のコマンドを使用して、値を変更します。
azd env set OPENAI_CAPACITY 50
ロード バランサーを再デプロイします。
azd up
リソースをクリーンアップする
チャット アプリとロード バランサーの両方を完了したら、リソースをクリーンアップします。 この記事で作成した Azure リソースは、Azure サブスクリプションに課金されます。 今後これらのリソースが必要になるとは思わない場合は、削除して、より多くの料金が発生しないようにします。
チャット アプリのリソースをクリーンアップします
チャット アプリの記事に戻り、それらのリソースをクリーンアップします。
ロード バランサーのリソースをクリーン アップする
次の Azure Developer CLI コマンドを実行して、Azure リソースを削除し、ソース コードを削除します:
azd down --purge --force
スイッチには次の機能が備わっています。
purge
: 削除されたリソースがすぐに消去されます。 これにより、Azure OpenAI TPM を再利用することができます。force
: 削除はサイレント モードで行われ、ユーザーの同意は必要ありません。
GitHub Codespaces をクリーンアップする
GitHub Codespaces 環境を削除すると、アカウントに対して取得するコアごとの無料時間エンタイトルメントの量を最大化できることが保証されます。
重要
GitHub アカウントのエンタイトルメントの詳細については、「 GitHub Codespaces に月単位で含まれるストレージとコア時間」を参照してください。
GitHub Codespaces ダッシュボード (https://github.com/codespaces) にサインインします。
azure-samples/openai-apim-lb
GitHub リポジトリをソースとして現在実行中の Codespaces を見つけます。Codespaces アイテムのコンテキスト メニューを開いた後に、[削除] を選択します。
ヘルプを参照する
Azure API Management ロード バランサーのデプロイで問題が発生した場合は、リポジトリの Issues に問題を記録します。
サンプル コード
この記事で使用されるサンプルには次のものが含まれます。
次のステップ
- Azure Monitor で Azure API Management 診断データを表示する
- Azure Load Testing を使用してチャット アプリをロード テストします