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 リソースを使用するチャット アプリでは、これらの制限のために会話エラーが発生する傾向があります。
これらの制限に達せずにチャット アプリを使用するには、Container Apps で負荷分散ソリューションを使用します。 このソリューションは、Container Apps からチャット アプリ サーバーに単一のエンドポイントをシームレスに公開します。
コンテナー アプリは、一連の Azure OpenAI リソースの前に配置されます。 コンテナー アプリは、通常のシナリオと制限されたシナリオの 2 つを解決します。 トークンとモデルのクォータを使用できる
リソースがクォータ制限のために
必須コンポーネント
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 アカウントでは、2 つのコア インスタンスで毎月最大 60 時間無料で GitHub 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
デプロイのサブスクリプションとリージョンを選択します。 チャット アプリと同じサブスクリプションとリージョンである必要はありません。
デプロイが完了するまで待ってから続行します。
デプロイ エンドポイントを取得する
次のコマンドを使用して、コンテナー アプリのデプロイされたエンドポイントを表示します。
azd env get-values
CONTAINER_APP_URL
値をコピーします。 次のセクションで使用します。
ロード バランサー エンドポイントを使用してチャット アプリを再デプロイする
これらの例は、チャット アプリのサンプルで完了しています。
次のいずれかの選択肢を使用して、チャット アプリ サンプルの開発コンテナーを開きます。
言語 GitHub Codespaces Visual Studio Code .NET で開く JavaScript で開く Python(プログラミング言語) で開く Azure Developer CLI (
AZD
) にサインインします。azd auth login
サインイン手順を完了します。
chat-app
などの名前を持つAZD
環境を作成します。azd env new <name>
次の環境変数を追加します。これは、チャット アプリのバックエンドに、Azure OpenAI 要求にカスタム URL を使用するように指示します。
azd env set OPENAI_HOST azure_custom
次の環境変数を追加します。 前のセクションで示したURLを
<CONTAINER_APP_URL>
に置き換えてください。 このアクションは、チャット アプリのバックエンドに、Azure OpenAI 要求のカスタム URL の値を通知します。azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
チャット アプリを展開します。
azd up
これで、クォータを使い果たすことなく、多数のユーザーにスケーリングするように構築されているという確信を持ってチャット アプリを使用できるようになりました。
ログをストリーミングしてロード バランサーの結果を表示します
Azure portal で、リソース グループを検索します。
グループ内のリソースの一覧から、Azure Container Apps リソースを選択します。
[監視]>[ログ ストリーム] を選択してログを表示します。
ログでトラフィックを生成するには、チャット アプリを使用します。
Azure OpenAI リソースを参照するログを探します。 3 つの各リソースのログ コメントには、
Proxying to https://openai3
で始まる数値 ID があります。ここで、3
は 3 番目の Azure OpenAI リソースを示します。
要求がクォータを超えたという状態をロード バランサーが受信すると、ロード バランサーは自動的に別のリソースにローテーションされます。
TPM クォータを構成する
既定では、ロード バランサー内の各 Azure OpenAI インスタンスは、30,000 TPM (1 分あたりのトークン数) のキャパシティでデプロイされます。 クォータを使い果たすことなく、多数のユーザーにスケーリングするように構築されているという確信を持ってチャット アプリを使用できます。 次の場合にこの値を変更します。
- デプロイ容量エラーが発生した場合: 値を小さくします。
- より高い容量が必要です。値を上げてください。
値を変更するには、次のコマンドを使用します。
azd env set OPENAI_CAPACITY 50
ロード バランサーを再デプロイします。
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 に月単位で含まれるストレージとコア時間」を参照してください。
GitHub Codespaces ダッシュボードにサインインします。
azure-samples/openai-aca-lb GitHub リポジトリから提供されている現在実行中のコードスペースを見つけます。
コードスペースのコンテキスト メニューを開き、[
削除] を選択します。
ヘルプを受ける
Azure API Management ロード バランサーのデプロイで問題が発生した場合は、リポジトリの Issues Web ページに問題を追加します。
サンプル コード
この記事では、次のサンプルを使用します。
次のステップ
- Azure Load Testing を使用して、チャット アプリをロード テストします。