Share via


Azure API Management を使用して Azure OpenAI for JavaScript をスケーリングする

アプリにエンタープライズ レベルの負荷分散を追加して、Azure OpenAI トークンとモデルのクォータ制限を超えてチャットアプリを拡張する方法について説明します。 このアプローチでは、Azure API Management を使用して、3 つの Azure OpenAI リソース間でトラフィックをインテリジェントに転送します。

この記事では、2つの個別のサンプルをデプロイする必要があります。

  • チャット アプリ

    • チャットアプリをまだデプロイしていない場合は、ロードバランサーサンプルがデプロイされるまで待ちます。
    • チャットアプリを既に1回デプロイしている場合は、ロードバランサーのカスタムエンドポイントをサポートするように環境変数を変更し、再度デプロイします。
  • Azure API Management の Load balancer

Azure API Management を使用した Azure OpenAI の負荷分散のアーキテクチャ

Azure OpenAIリソースには特定のトークンとモデルのクォータ制限があるため、単一のAzure OpenAIリソースを使用するチャットアプリでは、これらの制限が原因で会話が失敗する傾向があります。

Azure OpenAI リソースが強調表示された、チャット アプリのアーキテクチャを示す図。

これらの制限に達することなくチャット アプリを使用するには、Azure API Management で負荷分散ソリューションを使用します。 このソリューションでは、Azure API Management からチャット アプリ サーバーに単一のエンドポイントがシームレスに公開されます。

3 つの Azure OpenAI リソースの前にある Azure API Management のチャット アプリ アーキテクチャを示している図。

Azure API Management リソースは、API レイヤーとして、一連の Azure OpenAI リソースの前に配置されます。 API レイヤーは、通常と調整の 2 つのシナリオに適用されます。 トークンとモデルのクォータが使用可能な通常のシナリオでは、Azure OpenAI リソースは、API レイヤーとバックエンド アプリ サーバーを介して 200 を返します。

通常のシナリオを示している図。通常のシナリオでは 3 つの Azure OpenAI エンドポイント グループが示されており、2 つのエンドポイントからなる最初のグループがトラフィックを正常に取得している。

リソースがクォータ制限により調整される場合、API レイヤーは、元のチャット アプリの要求を満たすために別の Azure OpenAI リソースをすぐに再試行できます。

429 エラー応答コードと、クライアントが再試行までに待機する秒数を示す応答ヘッダーを含む調整シナリオを表示している図。

前提条件

Azure API Management ロード バランサーのサンプル アプリを開く

GitHub Codespaces は、 Visual Studio Code for the Web をユーザー インターフェイスとして使用して、GitHub によって管理される開発コンテナーを実行します。 最も簡単な開発環境では、GitHub Codespaces を使用して、この記事を完了するために正しい開発者ツールと依存関係がプレインストールされるようにします。

GitHub codespaces で開く

重要

すべての GitHub アカウントでは、2 つのコア インスタンスで毎月最大 60 時間無料で Codespaces を使用できます。 詳細については、「 GitHub Codespaces に月単位で含まれるストレージとコア時間」を参照してください。

Azure API Management ロード バランサーをデプロイする

  1. ロードバランサーをAzureにデプロイするには、Azure開発者CLI (AZD) にサインインします。

    azd auth login
    
  2. サインインの手順を完了します。

  3. ロードバランサーアプリをデプロイします。

    azd up
    

    デプロイのサブスクリプションとリージョンを選択する必要があります。 これらは、チャットアプリと同じサブスクリプションとリージョンである必要はありません。

  4. デプロイが完了するまで待ってから次に進みます。 これには最大 30 分かかることがあります。

ロードバランサーエンドポイントを取得します

次の bash コマンドを実行して、デプロイの環境変数を確認します。 この情報は後で必要になります。

azd env get-values | grep APIM_GATEWAY_URL

ロードバランサーエンドポイントを使用してチャットアプリを再デプロイします

これらは、チャットアプリサンプルで完了します。

  1. 次のいずれかを選択して、チャットアプリサンプルの開発コンテナーを開きます。

    Language Codespaces Visual Studio Code
    .NET GitHub codespaces で開く Dev Containers で開く
    JavaScript GitHub codespaces で開く Dev Containers で開く
    Python GitHub codespaces で開く Dev Containers で開く
  2. Azure Developer CLI (AZD) にサインインします。

    azd auth login
    

    サインインの手順を完了します。

  3. chat-appなどの名前でAZD環境を作成します。

    azd env new <name>
    
  4. 次の環境変数を追加して、チャット アプリのバックエンドに、OpenAI リクエストにカスタム URL を使用するよう指示します。

    azd env set OPENAI_HOST azure_custom
    
  5. 次の環境変数を追加して、チャット アプリのバックエンドに、OpenAI リクエストのカスタム URL の値を伝えます。

    azd env set AZURE_OPENAI_CUSTOM_URL <APIM_GATEWAY_URL>
    
  6. チャットアプリをデプロイします。

    azd up
    

分あたりのトークンのクォータ (TPM) を構成します

既定では、ロードバランサー内の各OpenAIインスタンスは、3万TPM (分あたりのトークン) 容量でデプロイされます。 クォータを使い果たすことなく、多数のユーザーにスケーリングするように構築されているという確信を持ってチャット アプリを使用できます。 次の場合は、この値を変更します。

  • デプロイ容量エラーが発生した場合:値を小さくします。
  • より高い容量を計画する場合は、値を大きくします。
  1. 次のコマンドを使用して、値を変更します。

    azd env set OPENAI_CAPACITY 50
    
  2. ロードバランサーを再デプロイします。

    azd up
    

リソースをクリーンアップする

チャットアプリとロードバランサーの両方を完了したら、リソースをクリーンアップします。 この記事で作成した Azure リソースは、Azure サブスクリプションに課金されます。 今後これらのリソースが必要になるとは思わない場合は、削除して、より多くの料金が発生しないようにします。

チャットアプリのリソースをクリーンアップします

チャットアプリの記事に戻り、それらのリソースをクリーンアップします。

ロード バランサーのリソースをクリーン アップする

次の Azure Developer CLI コマンドを実行して、Azure リソースを削除し、ソース コードを削除します:

azd down --purge --force

スイッチには次の機能が備わっています。

  • purge: 削除されたリソースがすぐに消去されます。 これにより、Azure OpenAI TPM を再利用することができます。
  • force: 削除はサイレントモードで行われ、ユーザーの同意は必要ありません。

GitHub Codespaces をクリーンアップする

GitHub Codespaces 環境を削除すると、アカウントに対して取得するコアごとの無料時間エンタイトルメントの量を最大化できることが保証されます。

重要

GitHub アカウントのエンタイトルメントの詳細については、「 GitHub Codespaces に月単位で含まれるストレージとコア時間」を参照してください。

  1. GitHub Codespaces ダッシュボード (https://github.com/codespaces) にサインインします。

  2. azure-samples/openai-apim-lb GitHub リポジトリをソースとして現在実行中の Codespaces を見つけます。

    実行中のすべての Codespaces のスクリーンショット (ステータスとテンプレートを含む)。

  3. Codespaces アイテムのコンテキスト メニューを開いた後に、[削除] を選択します。

    削除オプションがハイライトされた 1 つの codespace のコンテキスト メニューのスクリーンショット。

ヘルプを参照する

Azure API Managementロードバランサーのデプロイで問題が発生した場合は、リポジトリの Issues に問題を記録します。

サンプル コード

この記事で使用されるサンプルには次のものが含まれます。

次のステップ