Azure OpenAI Serviceの監視について考えてみた

先日JBSではアイプリシティ チャットを発表しました。

www.jbs.co.jp

現在アイプリシティ チャットをJBS社内で提供していますので、2023年5月9日時点でサービス提供の際にAzure OpenAI Serviceの監視について調べたことや実際の監視項目について書きたいと思います。

監視する項目

監視に関してはドキュメントがあるので迷ったらこちらを見ることをお勧めします。

Azure OpenAI Service の監視 - Azure Cognitive Services | Microsoft Learn

そのうえでまず考えるのはどのような項目を監視したほうが良いかですが、監視したい観点は主に3点かと思います。

  • リソース使用量のひっ迫が近いか知りたい
  • 料金を知りたい
  • 不正なAPIの利用がないか知りたい

それぞれについて考えていきたいと思います。

リソース使用量のひっ迫が近いか知りたい

Azure OpenAI Serviceはクォータ制限があり1分間のトークン数と呼び出し回数の上限が決まってます。

Azure OpenAI Service のクォータと制限 - Azure Cognitive Services | Microsoft Learn

項目 制限数
モデルごとの 1 分あたりの呼び出し数 Davinci-models (002 以降): 120
ChatGPT モデル (プレビュー): 300
GPT-4 モデル (プレビュー): 18
その他すべてのモデル: 300
モデルごとの 1 分あたりのトークン数 Davinci-models (002 以降): 40,000
ChatGPT モデル: 120,000
その他すべてのモデル: 120,000

ChatGPTのモデルを利用しているので呼び出し回数は1分あたり300回、トークン数は120,000になります。

呼び出し数

呼び出し数はTotal Callsで確認できます。また時間の粒度を1分にすることでクォータ制限に迫っているかも確認することができます。

トークン数

トークン数に関してのメトリックになりそうなのは先ほどのドキュメントを見ると"TokenTransaction"という項目がありこれで確認したいのですが

Azure OpenAI Service の監視 - Azure Cognitive Services | Microsoft Learn

実際にAzure Portalのメトリックから表示できるトークン関連のメトリックは以下の3つでした

  • Generated Completion Tokens
  • Processed Inference Tokens
  • Processed Prompt Tokens

ドキュメントの情報とは異なりますがProcessed Inference Tokensの説明を見るとMetric IDがTokenTransactionになっているのでトークン数はこちらのメトリックで良いのかなと考えます。

 

ちなみにそれぞれのメトリックを取ってみました。やはりProcessed Inference Tokensに集約されている感じですかね。

料金が知りたい

Azureの利用料金はEA/ESA契約であればコスト分析から確認することができます。

 

クイック スタート - コスト分析の使用を開始する - Microsoft Cost Management | Microsoft Learn

全体としてのコストは、こちらのコスト管理から確認することが出来ます。

ただし、呼び出しをしたユーザーごとの課金をするためにはトークン数とモデルを取得する必要があるので、アプリケーション側で利用履歴を取る必要があります。(JBS社内ではユーザごとの課金は行っていません)

不正なAPIの利用がないか知りたい

Azure OpenAI Serviceは診断設定で以下のlogを設定することができます。

  • Audit Logs
  • Request and Response Logs
  • Trace Logs

まずTrace Logsは現在使用不可で設定しても取得することができません。

次にAudit Logsですが、こちらはリソースからAPIキーの取得などの監査が可能です。意図していないキーの取得などがあればこちらのログから確認ができます。

そしてRequest and Response Logsは呼び出しの要求や応答を取得することができますが、要求の詳細(APIへの送信内容やレスポンスの内容)は取得することができません。また呼び出し元のIPアドレスも第3オクテットまで取得できます。(第4オクテットはマスクされる)

診断設定だけでAPI利用の詳細の取得は難しいので、上記以上のログが必要であれば呼び出すアプリケーションにログ取得の仕組みを構築する必要があります。

そもそも不正な利用をされないようにAzure Key vaultを使いキー情報を保護したり、ManagedIDなどを使ってAzureAD認証するなどを行う必要があります。

AzureADでの認証はこちらのブログで紹介しています。

blog.jbs.co.jp

Azure Key Vault の概要 - Azure Key Vault | Microsoft Learn

 

まとめ

メトリックについて

メトリックについてはクォータの監視として必要な呼び出し数とトークン数が取れることは確認できましたので閾値を設定しアラートの設定も行っています。

また呼び出し数やトークン数の他にもデータ量なども見ることができます。

診断ログ

診断設定から以下のログが設定可能だが取得出来ないものもある。まとめると下記です。

ログ名 説明

Audit Logs

呼び出しごとの監査ではなく、APIキー等にアクセスした監査のログ
Request and Response Logs 呼び出しの要求と応答の成否や呼び出しIP(第3オクテットまで)は記録されるが要求や応答の詳細な内容は記録されない
Trace Logs 使用不可

 

なお、今回の内容はChatGPT(gpt-35-turbo)のモデルのログを元にしています。現在プレビューということもあり、このあたりのドキュメントや仕様は日々変わっていますので、GAされた際には異なる可能性があります。

執筆担当者プロフィール
上田 英治

上田 英治(日本ビジネスシステムズ株式会社)

エンジニアとしてインフラ構築、システム開発やIoT基盤構築等を経験し、現在はクラウドアーキテクトとして先端技術の活用提案や新規サービスの立ち上げを担当。

担当記事一覧