Closed4

Azure CLIでAzure OpenAI Serviceの各リージョンで提供されているモデルを調べてみる

kun432kun432

Azure OpenAI Serviceのリージョンごとのサポートは以下のドキュメントにあるが、

https://learn.microsoft.com/en-us/azure/cognitive-services/openai/concepts/models

Azure Portalで見ると、

  • Azure PortalからOpenAI Serviceのリソースを作成するときのリージョンに、ドキュメントに書いてないリージョンが出てくる(Japan EastとかNorth Central USとか)
    • 多分更新が追いついていないだけかな。
  • 以下のような場合がある。
    • ドキュメントに記載されているのに表示されないリージョンがある(South Central US、新規利用停止中とドキュメントには記載されている)
    • ドキュメントに記載されているが表示されないモデルがある(East USのgpt-35-turbo-16kとか)
    • 推測だけど、Azure側のリソースが足りなくて利用できない場合は「表示しない」ということなのかな。

という感じで、Azure OpenAI Servieが非常に人気があるという現状もあるんだろうけど、全体的にわかりにくい印象を持った。

個人的には、

  • そもそもどのリージョンでAzure OpenAIサービスが使えるのかをフラットに知りたい
  • その上で、各リージョンが提供するモデルをフラットにリストアップしたい、利用できるかどうかに関係なく
  • その上で、現在利用できるかどうかをそれを知りたい
  • ドキュメントとAzure Portalを横断せずに、1つのインタフェースでこれを知りたい

ということで、Azure CLIでできないのかを試してみる次第。Azure CLIになれるというのもありで。

※現時点ではできるかどうかはわからない

kun432kun432

リージョン一覧取得。regionTypeに"Physical"と"Logical"があるけど、"Logical"だと「アジア」みたいなデカいくくりの論理的なリージョンになるようなので、"Physical"に限定している。(これが正しいのかはわからない)

$ az account list-locations | jq -r '.[] | select(.metadata.regionType == "Physical") | [.name, .regionalDisplayName] | @tsv'
eastus	(US) East US
eastus2	(US) East US 2
southcentralus	(US) South Central US
westus2	(US) West US 2
westus3	(US) West US 3
australiaeast	(Asia Pacific) Australia East
southeastasia	(Asia Pacific) Southeast Asia
northeurope	(Europe) North Europe
swedencentral	(Europe) Sweden Central
uksouth	(Europe) UK South
westeurope	(Europe) West Europe
centralus	(US) Central US
southafricanorth	(Africa) South Africa North
centralindia	(Asia Pacific) Central India
eastasia	(Asia Pacific) East Asia
japaneast	(Asia Pacific) Japan East
koreacentral	(Asia Pacific) Korea Central
canadacentral	(Canada) Canada Central
francecentral	(Europe) France Central
germanywestcentral	(Europe) Germany West Central
italynorth	(Europe) Italy North
norwayeast	(Europe) Norway East
polandcentral	(Europe) Poland Central
switzerlandnorth	(Europe) Switzerland North
uaenorth	(Middle East) UAE North
brazilsouth	(South America) Brazil South
centraluseuap	(US) Central US EUAP
israelcentral	(Middle East) Israel Central
qatarcentral	(Middle East) Qatar Central
brazilus	(South America) Brazil US
eastusstg	(US) East US STG
northcentralus	(US) North Central US
westus	(US) West US
japanwest	(Asia Pacific) Japan West
jioindiawest	(Asia Pacific) Jio India West
eastus2euap	(US) East US 2 EUAP
westcentralus	(US) West Central US
southafricawest	(Africa) South Africa West
australiacentral	(Asia Pacific) Australia Central
australiacentral2	(Asia Pacific) Australia Central 2
australiasoutheast	(Asia Pacific) Australia Southeast
jioindiacentral	(Asia Pacific) Jio India Central
koreasouth	(Asia Pacific) Korea South
southindia	(Asia Pacific) South India
westindia	(Asia Pacific) West India
canadaeast	(Canada) Canada East
francesouth	(Europe) France South
germanynorth	(Europe) Germany North
norwaywest	(Europe) Norway West
switzerlandwest	(Europe) Switzerland West
ukwest	(Europe) UK West
uaecentral	(Middle East) UAE Central
brazilsoutheast	(South America) Brazil Southeast

リージョン一覧のnameごとにモデルの一覧を参照する。例えば東東京の場合。

$ az cognitiveservices model list -l japaneast | jq -r '.[] | select(.kind == "OpenAI") | .model | [.name, .version] | @tsv'
gpt-35-turbo	0613
gpt-35-turbo-16k	0613
gpt-4	1106-Preview
gpt-4	0613
gpt-4-32k	0613
gpt-4	vision-preview
ada	1
text-embedding-ada-002	2
babbage	1
curie	1
davinci	1

これを繰り返せば全リージョンのモデル一覧が取れる。スクリプト書いてみた。

get_all_model.sh
#!/bin/bash

tmpfile=$(mktemp "/tmp/${0##*/}.tmp.XXXXXX")

az account list-locations | jq -r '.[] | select(.metadata.regionType == "Physical") | [.name, .regionalDisplayName] | @tsv' > $tmpfile

while read region_name region_display_name
do
  models=$(az cognitiveservices model list -l $region_name | jq -r '.[] | select(.kind == "OpenAI") | .model | [.name, .version] | @tsv')
  if [ -n "$models" ]; then
    echo "$models" | sed -e "s/^/${region_display_name}\t${region_name}\t/"
  fi
  sleep 1
done < $tmpfile
$ .bash /get_all_model.sh | sort > /tmp/all_models.lst
/tmp/all_models.lst
(Africa) South Africa North	southafricanorth	ada	1
(Africa) South Africa North	southafricanorth	babbage	1
(Africa) South Africa North	southafricanorth	curie	1
(Africa) South Africa North	southafricanorth	davinci	1
(Africa) South Africa North	southafricanorth	gpt-35-turbo	1106
(Africa) South Africa North	southafricanorth	gpt-4	0613
(Africa) South Africa North	southafricanorth	gpt-4-32k	0613
(Africa) South Africa North	southafricanorth	text-embedding-ada-002	2
(Asia Pacific) Australia East	australiaeast	ada	1
(Asia Pacific) Australia East	australiaeast	babbage	1
(snip)

例えばVisionモデルがリリースされているリージョンを抽出するとか。

$ grep -i "vision" all_models.lst
(Asia Pacific) Japan East	japaneast	gpt-4	vision-preview
(Europe) Sweden Central	swedencentral	gpt-4	vision-preview
(US) West US	westus	gpt-4	vision-preview

東日本とアメリカ東部2を比較してみるとか。

$ diff -y <(grep "japaneast" all_models.lst | awk -F"\t" '{ print $3, $4 }' | sort) <(grep "eastus2" all_models.lst | awk -F"\t" '{ print $3, $4 }' | sort)
ada 1									ada 1
babbage 1								babbage 1
curie 1									curie 1
davinci 1								davinci 1
gpt-35-turbo 0613							gpt-35-turbo 0613
gpt-35-turbo-16k 0613							gpt-35-turbo-16k 0613
gpt-4 0613								gpt-4 0613
gpt-4 1106-Preview							gpt-4 1106-Preview
gpt-4 vision-preview						<
gpt-4-32k 0613								gpt-4-32k 0613
								>       text-embedding-3-large 1
								>       text-embedding-3-small 1
text-embedding-ada-002 2						text-embedding-ada-002 2

定期的に実行した結果をファイルに残しておいて、前回とdiffとれば、新しいモデルがリリースされたら検知とかもできるはず。

kun432kun432

対応していないリージョンだとこういうのが出るんだけど、

Code: NoRegisteredProviderFound
Message: No registered resource provider found for location 'brazilsoutheast' and API version '2023-05-01' for type 'locations/models'. The supported api-versions are '2023-05-01, 2023-06-01-preview, 2023-10-01-preview'. The supported locations are 'global, australiaeast, brazilsouth, westus, westus2, westeurope, northeurope, southeastasia, eastasia, westcentralus, southcentralus, eastus, eastus2, canadacentral, japaneast, centralindia, uksouth, japanwest, koreacentral, francecentral, northcentralus, centralus, southafricanorth, uaenorth, swedencentral, switzerlandnorth, switzerlandwest, germanywestcentral, norwayeast, westus3, jioindiawest, qatarcentral, canadaeast, polandcentral, southindia, italynorth'.

APIバージョンとか気にしないといけないのかな?Azure CLIのオプションにはそういうのなさそうに思えるのだけど、Azure CLI自体をバージョンアップしないといけないとかなんだろうか?

kun432kun432

あとリージョンがよくわからないな。なんだろう"global"リージョンってのは?

$ az cognitiveservices model list -l global | jq -r '.[] | select(.kind == "OpenAI") | .model | [.name, .version] | @tsv'
ada	1
davinci	1
curie	1
このスクラップは3ヶ月前にクローズされました