Azure Container Apps で RAG を使用して Azure OpenAI for JavaScript チャットをスケーリングする
アプリケーションに負荷分散を追加して、Azure OpenAI トークンとモデル クォータの制限を超えてチャット アプリを拡張する方法について説明します。 この方法では、Azure Container Apps を使用して 3 つの Azure OpenAI エンドポイントを作成し、3 つのエンドポイントのいずれかに受信トラフィックを送信するプライマリ コンテナーを作成します。
この記事では、次の 2 つの個別のサンプルをデプロイする必要があります。
チャット アプリ
チャット アプリをまだデプロイしていない場合は、ロード バランサーのサンプルがデプロイされるまで待ちます。
チャット アプリを既に 1 回デプロイしている場合は、ロード バランサーのカスタム エンドポイントをサポートするように環境変数を変更し、再デプロイします。
チャット アプリは、次の言語で利用できます。
ロード バランサー アプリ
手記
この記事では、記事の例とガイダンスの基礎として 1 つ以上の
Azure Container Apps を使用して Azure OpenAI を負荷分散するためのアーキテクチャ
Azure OpenAI リソースには特定のトークンとモデルのクォータ制限があるため、単一の Azure OpenAI リソースを使用するチャット アプリでは、これらの制限により会話エラーが発生する傾向があります。
これらの制限に達せずにチャット アプリを使用するには、Azure Container Apps で負荷分散ソリューションを使用します。 このソリューションは、Azure Container Apps からチャット アプリ サーバーに単一のエンドポイントをシームレスに公開します。
Azure Container アプリは、一連の Azure OpenAI リソースの前に配置されます。 Container Apps は、通常と調整の 2 つのシナリオを解決します。 トークンとモデルのクォータを使用できる
リソースがクォータ制限などの
前提 条件
Azure サブスクリプション。 無料で作成できる
目的の Azure サブスクリプションで Azure OpenAI に付与されるアクセス。
現時点では、このサービスへのアクセスはアプリケーションによってのみ付与されます。 Azure OpenAI へのアクセスを申請するには、https://aka.ms/oai/accessのフォームに入力します。
開発コンテナー は両方のサンプルで使用でき、この記事を完了するために必要なすべての依存関係があります。 開発コンテナーは、GitHub Codespaces (ブラウザー) で実行することも、Visual Studio Code を使用してローカルで実行することもできます。
- GitHub アカウント
オープンコンテナ アプリ用ローカルバランサーのサンプルアプリケーション
重要
すべての GitHub アカウントでは、コア インスタンスが 2 つあり、毎月最大 60 時間無料で Codespaces を使用できます。 詳細については、GitHub Codespaces の月間ストレージとコア時間の内容に関しては およびを参照してください。
Azure Container Apps ロード バランサーをデプロイする
Azure Developer CLI にサインインして、プロビジョニングとデプロイの手順に対する認証を提供します。
azd auth login --use-device-code
プロビジョニング後の手順で Azure CLI 認証を使用するように環境変数を設定します。
azd config set auth.useAzCliAuth "true"
ロード バランサー アプリをデプロイします。
azd up
デプロイのサブスクリプションとリージョンを選択する必要があります。 これらは、チャット アプリと同じサブスクリプションとリージョンである必要はありません。
デプロイが完了するまで待ってから続行します。
デプロイ エンドポイントを取得する
次のコマンドを使用して、Azure Container アプリのデプロイされたエンドポイントを表示します。
azd env get-values
CONTAINER_APP_URL
値をコピーします。 次のセクションで使用します。
ロード バランサー エンドポイントを使用してチャット アプリを再デプロイする
これらは、チャット アプリのサンプルで完了します。
次のいずれかの選択肢を使用して、チャット アプリ サンプルの開発コンテナーを開きます。
言語 Codespaces Visual Studio Code .NET で開く JavaScript で開く パイソン で開く Azure Developer CLI (AZD) にサインインします。
azd auth login
サインイン手順を完了します。
chat-app
などの名前を持つ AZD 環境を作成します。azd env new <name>
次の環境変数を追加します。これは、OpenAI 要求にカスタム URL を使用するようにチャット アプリのバックエンドに指示します。
azd env set OPENAI_HOST azure_custom
前のセクションの URL の
<CONTAINER_APP_URL>
を置き換えて、次の環境変数を追加します。 このアクションは、OpenAI 要求のカスタム URL の値がチャット アプリのバックエンドに通知されます。azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
チャット アプリを展開します。
azd up
これで、チャット アプリは、クォータを使い切ることなく、多くのユーザーにスケーリングできるように構築されているという確信を持って使用できるようになりました。
ログをストリーミングしてロード バランサーの結果を確認する
Azure portalで、リソース グループを検索します。
グループ内のリソースの一覧から、コンテナー アプリ リソースを選択します。
[監視] - >[ログ配信] を選択してログを表示します。
チャット アプリを使用して、ログにトラフィックを生成します。
Azure OpenAI リソースを参照するログを探します。 3 つの各リソースのログ コメントには、
Proxying to https://openai3
で始まる数値 ID があり、3
は 3 番目の Azure OpenAI リソースを示します。チャット アプリを使用すると、ロード バランサーが要求がクォータを超えたという状態を受信すると、ロード バランサーは自動的に別のリソースにローテーションされます。
TPM クォータを構成する
既定では、ロード バランサー内の各 Azure OpenAI インスタンスは、1 分あたり 30,000 トークン (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 Codespaces ダッシュボード (https://github.com/codespaces) にサインインします。
azure-samples/openai-aca-lb
GitHub リポジトリをソースとして現在実行中の Codespaces を見つけます。コードスペースのコンテキスト メニューを開き、[の削除]
選択します。
ヘルプを受ける
Azure API Management ロード バランサーのデプロイで問題が発生した場合は、リポジトリの Issuesに問題を記録します。
サンプル コード
この記事で使用されるサンプルは次のとおりです。
- `RAG を使用した JavaScript チャットアプリ`
- Azure Container Apps を使用したロード バランサー
次の手順
- Azure Load Testing を使用してチャット アプリをロード テストする