はじめに
こんにちはProduct Teamのマネージャーのよしだです。エモーションテックでは、生成AIを活用したテキストAI分析サービス「TopicScan®︎」を提供しております。「ChatGPT」の登場以来、生成AIの進化は目覚ましく、日々新しいモデルが登場しています。TopicScanも常に最新のモデルを活用し、お客様により良い体験を提供できるよう努めています。しかし、Azure OpenAI Service (以下Azure OpenAI)のモデル管理は決して簡単なものではありません。モデルのアップデートは頻繁に行われるため、公式ドキュメントの更新が追いつかないこともあります。今回はTopicScanで利用しているAzure OpenAIのモデルをどのように管理しているかの一部を紹介させていただきます。
この記事はエモーションテック Advent Calendar 2024の20日目の記事です。
前提
以前Azure OpenAIの負荷分散方法の記事で紹介させていたただいた通りAzure OpenAI にはTPM (Tokens-per-Minute) という利用制限があり、サブスクリプション、リージョン、モデル毎に割り当てられています。 そのため、アプリケーションから呼び出し可能な合計TPMを多くするためにも弊社では複数のサブスクリプション、リージョンに数十個のAzure OpenAIのリソースを作成しています。
モデル管理の課題
Azure OpenAIのモデルの追加、モデルの更新をしたい際に公式ドキュメントを確認しても更新が遅れているため正しい値がわからないことがあります(アップデートが激しいのでドキュメントの更新が遅れてしまうのは仕方がないとは思います)。例えば、最新モデルだと各モデルのデプロイできるリージョンやTPMが正しく記載されていないことがあります。ウェブコンソール(Azure Portal)でデプロイできるモデルと適切なTPMの値を確認することは可能ですが、サブスクリプションごとに画面を切り替えながら全てのリソースを確認する必要があり、負荷分散のために多くのサブスクリプションを持つ弊社では大変な作業になってしまいます。そこで、Azure CLIを利用してAzure OpenAIのモデル管理する方法を考えました。 Azure CLIを使ったモデル情報収集の検討 まずは改めて何を調べたいのかを整理します。
CLIで調べたい情報
リージョン
Azure OpenAIはリージョンごとにデプロイできるモデルが異なるため、Azure CLIでリージョン名を指定しながら調べる必要があります。そこでAzureに存在するリージョン名の一覧を取得する必要があります。 全てのリージョンごとにモデルをAzure CLIで調べると実行時間がかなりかかるのと、Azure OpenAIが使えるリージョンが限られるためリージョン名を直接指定するようにしました。 モデル名、バージョン モデルごとにバージョンがあるため、今利用できるものを調べる必要があります。
SKU名
Azure OpenAIには複数のデプロイ方法があるため利用できる方式を確認します。Standard以外にGlobalStandardの対応しているモデルを確認するときに有用です。
モデルの使用量と上限
モデルごとにクォータ制限があるため確認をします。上限値だけではなく使用量を確認するのは、バージョン違いのモデルの管理を容易にするためです。例えば、GPT-3.5 Turbo 0613とGPT-3.5 Turbo 1106を考えます。Azure OpenAIはサブスクリプションのリージョンごとのモデルごとに上限が決まっています(この場合だとモデル名 GPT-3.5 Turbo)。一方のモデルバージョンでTPM上限までデプロイしてしまうとバージョン違いのモデルは利用できなくなります。
Azure CLIによるモデル情報収集
CLIのサブスクリプションを切り替える
サブスクリプションごとのモデル管理をしたいため、Azure CLIでアクティブなサブスクリプションを切り替える必要があります。 こちら を参考にします。
例えば、以下のようなコマンドで切り替えを行います。
az account set --subscription ${AZ_SUBSCRIPTION}
モデル名、バージョン、SKU名
こちら を参考にします。 例えば、以下のようなコマンドで確認します。
az cognitiveservices model list -l ${region} | jq -r '.[] | select(.kind == "OpenAI") | .model | [.name, .version, .skus[].usageName // "null"]
モデルの使用量と上限
こちら を参考にします。 例えば、以下のようなコマンドで確認します。
az cognitiveservices usage list -l ${region} | jq -r ".[] | select(.name.value == "${model_usage_name}") | [.name.value, .currentValue, .limit]
モデル管理ツールの作成
先ほどのコマンドをつかってシェルスクリプトで各サブスクリプションのモデルの状況を確認できるツールを作成します。 弊社で作成したツールの出力結果を示します(以下出力結果は昔実行した結果の一部です)。
subscription,region,model_name,model_version,model_usage_name,current_value,limit [お使いのサブスクリプション名],"westus3",gpt-4,1106-Preview,OpenAI.Standard.gpt-4-turbo,0.0,80.0 [お使いのサブスクリプション名],"westus3",text-embedding-ada-002,2,OpenAI.Standard.text-embedding-ada-002,0.0,350.0 [お使いのサブスクリプション名],"westus3",text-embedding-3-large,1,OpenAI.Standard.text-embedding-3-large,0.0,350.0
こちらの結果の場合、current_valueが0.0であるGPT-4 1106-Preview、text-embedding-ada-002、text-embedding-3-large がデプロイ可能だとわかります。
おわりに
今回、弊社でのAzure OpenAIのモデル管理方法の一部を紹介させていただきました。Azure OpenAIのモデルの管理は大変であるため、管理を担当されている方の参考になれば幸いです。
エモーションテックについて
エモーションテックは顧客体験マネジメント(CXマネジメント)を通じて企業が顧客のニーズを理解し顧客に最適なサービスを提供でき、従業員体験を通じて従業員がイキイキと働けるように支援をしております。生成AIもプロダクト内にも今後積極的に取り入れていく予定です。ご興味のある方はぜひ採用ページからご応募をお願いいたします。