# タイトルは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分、て。
試しに定義を作って、アサインして動作見て、アサイン取り消して定義を修正して、、、の作業が捗らない。