次の方法で共有


Azure Container Apps で RAG を使用して Azure OpenAI for Java チャットをスケーリングする

アプリケーションに負荷分散を追加して、Azure OpenAI サービス トークンとモデル クォータの制限を超えてチャット アプリを拡張する方法について説明します。 この方法では、Azure Container Apps を使用して、3 つの Azure OpenAI エンドポイントと、受信トラフィックを 3 つのエンドポイントのいずれかに送信するプライマリ コンテナーを作成します。

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

  • チャット アプリ

    • チャットアプリをまだデプロイしていない場合は、ロードバランサーサンプルがデプロイされるまで待ちます。

    • チャット アプリを既に 1 回デプロイした場合は、ロード バランサーのカスタム エンドポイントをサポートするように環境変数を変更し、再デプロイします。

    • チャット アプリは、次の言語で利用できます。

  • ロードバランサーアプリ

メモ

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

Azure OpenAI と Azure Container Apps の負荷分散のアーキテクチャ

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

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

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

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

コンテナー アプリは、一連の Azure OpenAI リソースの前に配置されます。 コンテナー アプリは、通常のシナリオと制限されたシナリオの 2 つを解決します。 トークンとモデルのクォータを使用できる 通常のシナリオでは、Azure OpenAI リソースはコンテナー アプリとアプリ サーバーを通じて 200 を返します。

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

リソースがクォータ制限のために 調整されたシナリオにある場合、コンテナー アプリは別の Azure OpenAI リソースを直ちに再試行して、元のチャット アプリ要求を満たすことができます。

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

必須コンポーネント

  • Azure サブスクリプション。 無料で1つ作成

  • 目的の Azure サブスクリプション内の Azure OpenAI に付与されたアクセス権。 現時点では、このサービスへのアクセスは申請によってのみ許可されます。 Azure OpenAI へのアクセスを申請するには、https://aka.ms/oai/access のフォームに入力してください。

  • Dev コンテナーは両方のサンプルで使用でき、この記事を完了するために必要なすべての依存関係が含まれています。 開発コンテナーは、ブラウザーの GitHub Codespaces で実行することも、Visual Studio Code を使用してローカルで実行することもできます。

    • GitHub アカウント。

Container Apps ロード バランサーのサンプル アプリを開く

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

GitHub Codespaces で開きます。

重要

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

Azure Container Apps ロード バランサーをデプロイする

  1. Azure Developer CLI にサインインして、プロビジョニングとデプロイの手順に対する認証を提供します。

    azd auth login --use-device-code
    
  2. プロビジョニング後の手順で Azure CLI 認証を使用するように環境変数を設定します。

    azd config set auth.useAzCliAuth "true"
    
  3. ロード バランサー アプリをデプロイします。

    azd up
    

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

  4. デプロイが完了するまで待ってから続行します。

デプロイ エンドポイントを取得する

  1. 次のコマンドを使用して、コンテナー アプリのデプロイされたエンドポイントを表示します。

    azd env get-values
    
  2. CONTAINER_APP_URL 値をコピーします。 次のセクションで使用します。

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

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

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

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

    azd env set OPENAI_HOST azure_custom
    
  5. 次の環境変数を追加します。 前のセクションで示したURLを <CONTAINER_APP_URL> に置き換えてください。 このアクションは、チャット アプリのバックエンドに、Azure OpenAI 要求のカスタム URL の値を通知します。

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

    azd up
    

これで、クォータを使い果たすことなく、多数のユーザーにスケーリングするように構築されているという確信を持ってチャット アプリを使用できるようになりました。

ログをストリーミングしてロード バランサーの結果を表示します

  1. Azure portal で、リソース グループを検索します。

  2. グループ内のリソースの一覧から、Azure Container Apps リソースを選択します。

  3. [監視]>[ログ ストリーム] を選択してログを表示します。

  4. ログでトラフィックを生成するには、チャット アプリを使用します。

  5. Azure OpenAI リソースを参照するログを探します。 3 つの各リソースのログ コメントには、Proxying to https://openai3で始まる数値 ID があります。ここで、3 は 3 番目の Azure OpenAI リソースを示します。

    ログ コメントを示すために 2 つのログ行が強調表示された Azure Container Apps ストリーミング ログを示すスクリーンショット。

要求がクォータを超えたという状態をロード バランサーが受信すると、ロード バランサーは自動的に別のリソースにローテーションされます。

TPM クォータを構成する

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

  • デプロイ容量エラーが発生した場合: 値を小さくします。
  • より高い容量が必要です。値を上げてください。
  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 と Visual Studio Code をクリーンアップする

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

重要

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

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

  2. azure-samples/openai-aca-lb GitHub リポジトリから提供されている現在実行中のコードスペースを見つけます。

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

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

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

ヘルプを受ける

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

サンプル コード

この記事では、次のサンプルを使用します。

次のステップ

  • Azure Load Testing を使用して、チャット アプリをロード テストします。