モデルを微調整したら、デプロイして、独自のアプリケーションで使用できます。
モデルをデプロイする際は、モデルを推論に使用できるようにしますが、これには、1 時間ごとのホスティング料金が発生します。 ただし、微調整されたモデルは、使用する準備ができるまで、Azure AI Foundry に無料で格納できます。
Azure OpenAI では、さまざまなビジネスパターンと使用パターンに適合するホスティング構造上の微調整されたモデルのデプロイの種類 ( Standard、 Global Standard (プレビュー)、 プロビジョニングスループット (プレビュー) ) の選択肢が提供されます。 詳細については、微調整されたモデルのデプロイの種類およびすべてのデプロイの種類の概念に関する記事を参照してください。
微調整されたモデルをデプロイする
カスタム モデルをデプロイするには、デプロイするカスタム モデルを選択し、[デプロイ] を選択します。
[モデルのデプロイ] ダイアログ ボックスが開きます。 このダイアログ ボックスで [デプロイ名] を入力し、[作成] を選択して、カスタム モデルのデプロイを開始します。
デプロイの進行状況は、Azure AI Foundry ポータルの [デプロイ] ペインで監視できます。
リージョン間でのデプロイは、UI ではサポートされていませんが、Python SDK または REST ではサポートされています。
import json
import os
import requests
token = os.getenv("<TOKEN>")
subscription = "<YOUR_SUBSCRIPTION_ID>"
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name = "gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-21"}
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}
deploy_data = {
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-35-turbo-0125.ft-b044a9d3cf9c4228b5d393567f693b83
"version": "1"
}
}
}
deploy_data = json.dumps(deploy_data)
request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'
print('Creating a new deployment...')
r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)
print(r)
print(r.reason)
print(r.json())
変数 |
定義 |
トークン |
認証トークンを生成するには、複数の方法があります。 初期テストを行うための最も簡単な方法は、Azure portal から Cloud Shell を起動することです。 次に、az account get-access-token 実行します。 このトークンは、API テストの一時的な認証トークンとして使用できます。 これを新しい環境変数に格納することをお勧めします。 |
サブスクリプション |
関連付けられている Azure OpenAI リソースのサブスクリプション ID。 |
リソースグループ |
Azure OpenAI リソースのリソース グループ名。 |
リソース名 |
Azure OpenAI のリソース名。 |
モデルデプロイメント名 |
微調整された新しいモデル デプロイのカスタム名。 これは、チャット入力候補の呼び出しを行うときにコードで参照される名前です。 |
ファインチューニングされたモデル |
この値は、前の手順の微調整ジョブの結果から取得します。 これは gpt-35-turbo-0125.ft-b044a9d3cf9c4228b5d393567f693b83 のようになります。 その値を deploy_data json に追加する必要があります。 また、ftchkpt-e559c011ecc04fc68eaa339d8227d02d 形式で表示されるチェックポイント ID を渡すと、チェックポイントをデプロイすることもできます。 |
リージョン間でのデプロイ
微調整では、微調整されたモデルを、モデルが最初に微調整された場所とは異なるリージョンにデプロイすることがサポートされています。 別のサブスクリプション/リージョンにデプロイすることもできます。
唯一の制限は、新しいリージョンが微調整もサポートする必要があることと、サブスクリプション間でデプロイする場合、デプロイ用の認可トークンを生成するアカウントがソース サブスクリプションと宛先サブスクリプションの両方にアクセスできる必要があることです。
以下は、あるサブスクリプション/リージョンで微調整されたモデルを別のサブスクリプション/リージョンにデプロイする例です。
import json
import os
import requests
token= os.getenv("<TOKEN>")
subscription = "<DESTINATION_SUBSCRIPTION_ID>"
resource_group = "<DESTINATION_RESOURCE_GROUP_NAME>"
resource_name = "<DESTINATION_AZURE_OPENAI_RESOURCE_NAME>"
source_subscription = "<SOURCE_SUBSCRIPTION_ID>"
source_resource_group = "<SOURCE_RESOURCE_GROUP>"
source_resource = "<SOURCE_RESOURCE>"
source = f'/subscriptions/{source_subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_resource}'
model_deployment_name = "gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-21"}
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}
deploy_data = {
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": <"FINE_TUNED_MODEL_NAME">, # This value will look like gpt-35-turbo-0125.ft-0ab3f80e4f2242929258fff45b56a9ce
"version": "1",
"source": source
}
}
}
deploy_data = json.dumps(deploy_data)
request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'
print('Creating a new deployment...')
r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)
print(r)
print(r.reason)
print(r.json())
同じサブスクリプションであるが、異なるリージョン間でデプロイするには、サブスクリプションとリソース グループがソース変数と宛先変数の両方で同一であり、ソースと宛先のリソース名のみが一意である必要があります。
テナント間のデプロイ
az account get-access-token --tenant
でアクセス トークンを生成するために使用するアカウントには、ソースと宛先の両方の Azure OpenAI リソースに対する、Cognitive Services OpenAI 共同作成者のアクセス許可が必要です。 ソーステナント用と宛先テナント用に 1 つずつ、2 つの異なるトークンを生成する必要があります。
import requests
subscription = "DESTINATION-SUBSCRIPTION-ID"
resource_group = "DESTINATION-RESOURCE-GROUP"
resource_name = "DESTINATION-AZURE-OPENAI-RESOURCE-NAME"
model_deployment_name = "DESTINATION-MODEL-DEPLOYMENT-NAME"
fine_tuned_model = "gpt-4o-mini-2024-07-18.ft-f8838e7c6d4a4cbe882a002815758510" #source fine-tuned model id example id provided
source_subscription_id = "SOURCE-SUBSCRIPTION-ID"
source_resource_group = "SOURCE-RESOURCE-GROUP"
source_account = "SOURCE-AZURE-OPENAI-RESOURCE-NAME"
dest_token = "DESTINATION-ACCESS-TOKEN" # az account get-access-token --tenant DESTINATION-TENANT-ID
source_token = "SOURCE-ACCESS-TOKEN" # az account get-access-token --tenant SOURCE-TENANT-ID
headers = {
"Authorization": f"Bearer {dest_token}",
"x-ms-authorization-auxiliary": f"Bearer {source_token}",
"Content-Type": "application/json"
}
url = f"https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}?api-version=2024-10-01"
payload = {
"sku": {
"name": "standard",
"capacity": 1
},
"properties": {
"model": {
"format": "OpenAI",
"name": fine_tuned_model,
"version": "1",
"sourceAccount": f"/subscriptions/{source_subscription_id}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_account}"
}
}
}
response = requests.put(url, headers=headers, json=payload)
# Check response
print(f"Status Code: {response.status_code}")
print(f"Response: {response.json()}")
次の例は、REST API を使用して、カスタマイズしたモデルのモデル デプロイを作成する方法を示しています。 REST API により、カスタマイズしたモデルのデプロイの名前が生成されます。
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1"
}
}
}'
変数 |
定義 |
トークン |
認証トークンを生成するには、複数の方法があります。 初期テストを行うための最も簡単な方法は、Azure portal から Cloud Shell を起動することです。 次に、az account get-access-token 実行します。 このトークンは、API テストの一時的な認証トークンとして使用できます。 これを新しい環境変数に格納することをお勧めします。 |
サブスクリプション |
関連付けられている Azure OpenAI リソースのサブスクリプション ID。 |
リソースグループ |
Azure OpenAI リソースのリソース グループ名。 |
リソース名 |
Azure OpenAI のリソース名。 |
モデルデプロイメント名 |
微調整された新しいモデル デプロイのカスタム名。 これは、チャット入力候補の呼び出しを行うときにコードで参照される名前です。 |
ファインチューニングされたモデル |
この値は、前の手順の微調整ジョブの結果から取得します。 これは gpt-35-turbo-0125.ft-b044a9d3cf9c4228b5d393567f693b83 のようになります。 その値を deploy_data json に追加する必要があります。 また、ftchkpt-e559c011ecc04fc68eaa339d8227d02d 形式で表示されるチェックポイント ID を渡すと、チェックポイントをデプロイすることもできます。 |
リージョン間でのデプロイ
微調整では、微調整されたモデルを、モデルが最初に微調整された場所とは異なるリージョンにデプロイすることがサポートされています。 別のサブスクリプション/リージョンにデプロイすることもできます。
唯一の制限は、新しいリージョンが微調整もサポートする必要があることと、サブスクリプション間でデプロイする場合、デプロイ用の認可トークンを生成するアカウントがソース サブスクリプションと宛先サブスクリプションの両方にアクセスできる必要があることです。
以下は、あるサブスクリプション/リージョンで微調整されたモデルを別のサブスクリプション/リージョンにデプロイする例です。
curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1",
"source": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}"
}
}
}'
同じサブスクリプションであるが、異なるリージョン間でデプロイするには、サブスクリプションとリソース グループがソース変数と宛先変数の両方で同一であり、ソースと宛先のリソース名のみが一意である必要があります。
テナント間のデプロイ
az account get-access-token --tenant
でアクセス トークンを生成するために使用するアカウントには、ソースと宛先の両方の Azure OpenAI リソースに対する、Cognitive Services OpenAI 共同作成者のアクセス許可が必要です。 ソーステナント用と宛先テナント用に 1 つずつ、2 つの異なるトークンを生成する必要があります。
curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-01" \
-H "Authorization: Bearer <DESTINATION TOKEN>" \
-H "x-ms-authorization-auxiliary: Bearer <SOURCE TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1",
"sourceAccount": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}"
}
}
}'
Azure CLI を使用してモデルをデプロイする
次の例は、Azure CLI を使用して、カスタマイズしたモデルをデプロイする方法を示しています。 Azure CLI を使用する場合、カスタマイズしたモデルのデプロイの名前を指定する必要があります。 Azure CLI を使用して、カスタマイズしたモデルをデプロイする方法の詳細については、「az cognitiveservices account deployment
」を参照してください。
コンソール ウィンドウでこの Azure CLI コマンドを実行するには、次の<プレースホルダー>を、カスタマイズしたモデルの対応する値に置き換える必要があります。
プレースホルダー |
価値 |
<YOUR_AZURE_SUBSCRIPTION> |
Azure サブスクリプションの名前または ID。 |
<YOUR_RESOURCE_GROUP> |
Azure リソース グループの名前。 |
<YOUR_RESOURCE_NAME> |
Azure OpenAI リソースの名前。 |
<YOUR_DEPLOYMENT_NAME(あなたのデプロイメント名)> |
モデル デプロイに使用する名前。 |
<YOUR_FINE_TUNED_MODEL_ID> |
カスタマイズしたモデルの名前。 |
az cognitiveservices account deployment create
--resource-group <YOUR_RESOURCE_GROUP>
--name <YOUR_RESOURCE_NAME>
--deployment-name <YOUR_DEPLOYMENT_NAME>
--model-name <YOUR_FINE_TUNED_MODEL_ID>
--model-version "1"
--model-format OpenAI
--sku-capacity "1"
--sku-name "Standard"
重要
カスタマイズしたモデルをデプロイした後、デプロイが 15 日間を超えて非アクティブのままである場合、デプロイは削除されます。 カスタマイズされたモデルのデプロイは、モデルが 15 日以上前にデプロイされ、15 日間連続して完了またはチャット完了の呼び出しが行われなかった場合、"非アクティブ" になります。
非アクティブなデプロイは削除されても、基になるカスタマイズしたモデルは削除されず、影響を受けることもありません。カスタマイズしたモデルはいつでも再デプロイできます。
Azure AI Foundry Models の価格に関する Azure OpenAI で説明されているように、デプロイされるカスタマイズされた (微調整された) 各モデルでは、完了またはチャット完了の呼び出しがモデルに対して行われているかどうかに関係なく、1 時間ごとのホスティング コストが発生します。 Azure OpenAI を使用したコストの計画と管理の詳細については、「Azure OpenAI のコストを管理する計画」のガイダンスを参照してください。
デプロイ済みの微調整されたモデルを使用する
カスタム モデルは、デプロイ後、他のデプロイ済みモデルと同様に使用できます。 Azure AI Foundry ポータルの [プレイグラウンド] を使用して、新しいデプロイを試すことができます。 カスタム モデルでは、他のデプロイ済みモデルと同様に、temperature
や max_tokens
などの同じパラメーターを引き続き使用できます。
import os
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-02-01"
)
response = client.chat.completions.create(
model="gpt-35-turbo-ft", # model = "Custom deployment name you chose for your fine-tuning model"
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
{"role": "user", "content": "Do other Azure services support this too?"}
]
)
print(response.choices[0].message.content)
curl $AZURE_OPENAI_ENDPOINT/openai/deployments/<deployment_name>/chat/completions?api-version=2024-10-21 \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{"messages":[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},{"role": "user", "content": "Do other Azure services support this too?"}]}'
プロンプト キャッシュ
Azure OpenAI の微調整では、一部のモデルでプロンプト キャッシュをサポートしています。 プロンプト キャッシュを使用すると、プロンプトの先頭に同じ内容が含まれている長いプロンプトについて、要求の全体的な待機時間とコストを削減できます。 プロンプト キャッシュの詳細については、プロンプト キャッシュの概要に関するページを参照してください。
デプロイの種類
Azure OpenAI の微調整では、次の種類のデプロイがサポートされています。
スタンダード
Standard デプロイは、呼び出し単位の支払いの課金モデルが提供され、各リージョンで使用できるモデルとスループットは、制限される場合があります。
モデル |
リージョン |
GPT-4o-finetune |
米国東部 2、米国中北部、スウェーデン中部 |
gpt-4o-mini-2024-07-18 |
米国中北部、スウェーデン中部 |
GPT-4-finetune |
米国中北部、スウェーデン中部 |
GPT-35-Turbo-finetune |
米国東部 2、米国中北部、スウェーデン中部、スイス西部 |
GPT-35-Turbo-1106-finetune |
米国東部 2、米国中北部、スウェーデン中部、スイス西部 |
GPT-35-Turbo-0125-finetune |
米国東部 2、米国中北部、スウェーデン中部、スイス西部 |
グローバル標準
Global Standard 微調整デプロイを選択すると、コスト削減を図ることができますが、カスタム モデルの重みは、Azure OpenAI リソースの地理的な場所の外部に一時的に格納される場合があります。
モデル |
リージョン |
GPT-4.1-ファインチューン |
米国東部 2、米国中北部、スウェーデン中部 |
GPT-4.1-mini-finetune |
米国東部 2、米国中北部、スウェーデン中部 |
GPT-4.1-nano-finetune(GPT-4.1のナノファインチューニング) |
米国東部 2、米国中北部、スウェーデン中部 |
GPT-4o-finetune |
米国東部 2、米国中北部、スウェーデン中部 |
GPT-4o-mini-finetune |
米国東部 2、米国中北部、スウェーデン中部 |
プロビジョニングされたスループット
モデル |
リージョン |
GPT-4o-finetune |
米国中北部、スウェーデン中部 |
GPT-4o-mini-finetune |
米国中北部、スウェーデン中部 |
プロビジョニングされたスループット の微調整されたデプロイは、待機時間の影響を受けやすいエージェントとアプリケーションに 対して予測可能なパフォーマンス を提供します。 ベース モデルと同じリージョン プロビジョニング スループット (PTU) 容量が使用されるため、リージョン PTU クォータが既にある場合は、微調整されたモデルをサポート リージョンにデプロイできます。
デプロイをクリーンアップする
デプロイを削除するには、Deployments - Delete REST API を使用して、デプロイ リソースに HTTP DELETE を送信します。 デプロイの作成時と同様に、次のパラメーターを含める必要があります。
- Azure サブスクリプション ID
- Azure リソース グループ名
- Azure OpenAI リソースの名前
- 削除するデプロイの名前
デプロイを削除する REST API の例を次に示します。
curl -X DELETE "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>"
デプロイは、Azure AI Foundry ポータルで削除することもできます。また、Azure CLI を使用することもできます。
次のステップ