ほりひログ

所属組織の製品 (Azure とか) に関連する内容が多めだけど、個人の見解であって、所属組織を代表する公式情報ではないです。

面倒なキャパシティ制限はAzure Policyで解決!Azure OpenAI Service #便利なAzure #キャパシティ制限

# タイトルはAIタイトルアシストに作ってもらったSNS向けなもの。

今年の〆は、だいぶ久しく触ってなかったAzure Policy。

Azure OpenAI Serviceでモデルをデプロイする時に、キャパシティの値が指定の値を超えていたらブロックする。

ポリシー定義

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.CognitiveServices/accounts/deployments"
        },
        {
          "field": "Microsoft.CognitiveServices/accounts/deployments/model.format",
          "equals": "OpenAI"
        },
        {
          "anyOf": [
            {
              "field": "Microsoft.CognitiveServices/accounts/deployments/model.name",
              "in": "[parameters('modelNames')]"
            },
            {
              "value": "[length(parameters('modelNames'))]",
              "equals": 0
            }
          ]
        },
        {
          "field": "Microsoft.CognitiveServices/accounts/deployments/sku.capacity",
          "greater": "[parameters('capacityLimit')]"
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {
    "capacityLimit": {
      "type": "Integer",
      "metadata": {
        "displayName": "Capacity Limit",
        "description": "The allowed capacity for the deployment."
      }
    },
    "modelNames": {
      "type": "Array",
      "metadata": {
        "displayName": "Model names",
        "description": "The target model names"
      },
      "defaultValue": []
    }
  }
}

モデルのデプロイメント Microsoft.CognitiveServices/accounts/deployments について、sku.capacityの値を指定の値(上限値)と比べているだけ。
あとmodel.formatでAOAIに限定している。

一応、指定したモデルのデプロイだけキャパシティ制限する、といった工夫は入れてみた。
パラメータmodelNames["gpt-4", "gpt-35-turbo"]みたいにモデルを指定すると、そのモデルのデプロイメント model.name が指定のモデルに含まれているかをチェックする。
限定しなければ(パラメータmodelNamesの長さが0なら)全デプロイメントのキャパシティをチェックする。

何に使うのか。

ハンズオンとかでAzure OpenAI Serviceをプロビジョニングできるサブスクリプションを複数の利用者にシェアする時に*1、各々の利用者が同じリージョンにキャパシティ好き放題でモデルをデプロイしてしまうと、他の人がデプロイできない、みたいな悪影響が出かねない。
そうすると利用者ごとにリージョンを振り分けたり、とかするけど、でも結局一人で全部使い切る輩がいるとまた別リージョンに、、、と面倒*2

そんな時にAzure Policy。
モデルデプロイ時のキャパシティに上限を設定してやることで、好き放題なモデルデプロイをブロックできる。
当然ながら、デプロイした後のキャパシティ変更でも、上限を超えていればブロックする。

Azure Policyのつらみ(愚痴)

便利だしやってても面白いんだけどさぁ。

30分、て。
試しに定義を作って、アサインして動作見て、アサイン取り消して定義を修正して、、、の作業が捗らない。

*1:それが多いシーンなのかはさておき。なくはない。

*2:まぁ1人1リージョンで割り当てればできるだろうけど、あまりやりたくはない。