次の方法で共有


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

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

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

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

手記

この記事では、記事の例とガイダンスの基礎として 1 つ以上の AI アプリ テンプレートを使用します。 AI アプリ テンプレートを使用すると、デプロイが容易な保守性の高い参照実装が提供されます。 AI アプリの高品質な開始点を確保するのに役立ちます。

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

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

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

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

3 つの Azure OpenAI リソースの前に Azure API Management を使用したチャット アプリのアーキテクチャを示す図。

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

3 つの Azure OpenAI エンドポイント グループを含む通常のシナリオを示す図。2 つのエンドポイントの最初のグループがトラフィックを成功させます。

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

スロットリング シナリオを示す図で、これは 429 の失敗した応答コードと、クライアントが再試行まで待機する必要がある秒数を示す応答ヘッダーを含みます。

前提 条件

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

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

GitHub Codespaces で開きます。

重要

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

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

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

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

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

    azd up
    

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

  4. デプロイが完了するまで待ってから続行します。 このプロセスには最大 30 分かかる場合があります。

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

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

azd env get-values | grep APIM_GATEWAY_URL

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

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

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

    言語 GitHub Codespaces Visual Studio Code
    .NET GitHub Codespaces で開く 開発コンテナで開く
    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. 次の環境変数を追加します。これは、チャット アプリのバックエンドに、Azure OpenAI 要求にカスタム URL を使用するように指示します。

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

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

    azd up
    

TPM クォータを構成する

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

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

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

    azd up
    

リソースのクリーンアップ

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

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

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

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

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

azd down --purge --force

スイッチは次の機能を提供します。

  • purge: 削除されたリソースは直ちに消去されます。 1 分あたりに Azure OpenAI トークンを再利用できます。
  • force: 削除は、ユーザーの同意を必要とせずに、自動的に行われます。

リソースのクリーンアップ

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

重要

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

  1. GitHub Codespaces ダッシュボードにサインインします。

  2. azure-samples/openai-apim-lb GitHub リポジトリから提供されている現在稼働中のコードスペースを探します。

    状態とテンプレートを含むすべての実行中のコードスペースを示すスクリーンショット。

  3. GitHub Codespaces 項目のコンテキスト メニューを開き、[ 削除]を選択します。

    [削除] オプションが強調表示されている 1 つのコードスペースのコンテキスト メニューを示すスクリーンショット。

ヘルプを受ける

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

サンプル コード

この記事で使用されるサンプルは次のとおりです。

  • RAGを使用したJavaScriptチャットアプリ
  • Azure API Management を備えたロード バランサー

次の手順

  • Azure Monitor で Azure API Management 診断データを表示する
  • Azure Load Testing を使用して、Azure Load Testing サービスを使用してチャット アプリをロード テストします。