모델이 미세 조정되면 모델을 배포하고 자체 애플리케이션에서 사용할 수 있습니다.
모델을 배포할 때 모델을 추론할 수 있도록 설정하면 시간당 호스팅 요금이 부과됩니다. 그러나 미세 조정된 모델은 사용할 준비가 될 때까지 Azure AI Foundry에 비용 없이 저장할 수 있습니다.
Azure OpenAI는 표준,글로벌 표준 (미리 보기) 및 프로비전된 처리량 (미리 보기)과 같은 다양한 비즈니스 및 사용 패턴에 맞는 호스팅 구조에서 미세 조정된 모델에 대한 배포 유형을 선택할 수 있습니다.
미세 조정된 모델의 배포 유형 및 모든 배포 유형의 개념에 대해 자세히 알아봅니다.
미세 조정된 모델을 배포하세요
사용자 지정 모델을 배포하려면 배포할 사용자 지정 모델을 선택한 다음 배포를 선택합니다.
모델 배포 대화 상자가 열립니다. 대화 상자에서 배포 이름에 이름을 입력한 다음, 만들기를 선택하여 사용자 지정 모델의 배포를 시작합니다.
Azure AI Studio의 배포 창에서 배포 진행률을 모니터링할 수 있습니다.
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())
variable |
Definition |
token |
권한 부여 토큰을 생성하는 방법에는 여러 가지가 있습니다. 초기 테스트를 위한 가장 쉬운 방법은 Azure Portal에서 Cloud Shell을 시작하는 것입니다. 그런 다음 az account get-access-token 를 실행합니다. 이 토큰을 API 테스트를 위한 임시 권한 부여 토큰으로 사용할 수 있습니다. 새 환경 변수에 저장하는 것이 좋습니다. |
subscription |
연결된 Azure OpenAI 리소스에 대한 구독 ID. |
resource_group |
Azure OpenAI 리소스의 리소스 그룹 이름. |
resource_name |
Azure OpenAI 리소스 이름. |
model_deployment_name |
미세 조정된 새 모델 배포의 사용자 지정 이름입니다. 채팅 완료 호출을 수행할 때 코드에서 참조되는 이름입니다. |
fine_tuned_model |
이전 단계의 미세 조정 작업 결과에서 이 값을 검색합니다.
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 기여자 권한이 있어야 합니다. 원본 테넌트에 대한 토큰과 대상 테넌트에 대해 하나씩 두 개의 서로 다른 토큰을 생성해야 합니다.
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"
}
}
}'
variable |
Definition |
token |
권한 부여 토큰을 생성하는 방법에는 여러 가지가 있습니다. 초기 테스트를 위한 가장 쉬운 방법은 Azure Portal에서 Cloud Shell을 시작하는 것입니다. 그런 다음 az account get-access-token 를 실행합니다. 이 토큰을 API 테스트를 위한 임시 권한 부여 토큰으로 사용할 수 있습니다. 새 환경 변수에 저장하는 것이 좋습니다. |
subscription |
연결된 Azure OpenAI 리소스에 대한 구독 ID. |
resource_group |
Azure OpenAI 리소스의 리소스 그룹 이름. |
resource_name |
Azure OpenAI 리소스 이름. |
model_deployment_name |
미세 조정된 새 모델 배포의 사용자 지정 이름입니다. 채팅 완료 호출을 수행할 때 코드에서 참조되는 이름입니다. |
fine_tuned_model |
이전 단계의 미세 조정 작업 결과에서 이 값을 검색합니다.
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 기여자 권한이 있어야 합니다. 원본 테넌트에 대한 토큰과 대상 테넌트에 대해 하나씩 두 개의 서로 다른 토큰을 생성해야 합니다.
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를 사용하여 사용자 지정된 모델을 배포하는 방법에 대한 자세한 내용은 az cognitiveservices account deployment
을(를) 참조하세요.
콘솔 창에서 이 Azure CLI 명령을 실행하려면 다음 <자리 표시자를> 사용자 지정 모델에 해당하는 값으로 바꿔야 합니다.
Placeholder |
Value |
<YOUR_AZURE_SUBSCRIPTION> |
Azure 구독의 이름 또는 ID입니다. |
<YOUR_RESOURCE_GROUP> |
Azure 리소스 그룹의 이름입니다. |
<YOUR_RESOURCE_NAME> |
Azure OpenAI 리소스의 이름입니다. |
<YOUR_DEPLOYMENT_NAME> |
모델 배포에 사용하려는 이름입니다. |
<당신의_세밀하게_조정된_모델_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"
Important
사용자 지정된 모델을 배포한 후 배포가 15일 이상 비활성 상태로 유지되면 배포가 삭제됩니다. 모델을 15일 이상 전에 배포하고 15일 연속으로 완료 또는 채팅 완료를 호출하지 않은 경우 사용자 지정된 모델의 배포가 비활성 상태입니다.
비활성 배포 삭제는 기본 사용자 지정된 모델을 삭제하거나 영향을 주지 않으며 사용자 지정된 모델을 언제든지 다시 배포할 수 있습니다.
Azure AI Foundry 모델 가격 책정의 Azure OpenAI에 설명된 대로 배포된 각 사용자 지정(미세 조정된) 모델은 완료 또는 채팅 완료 호출이 모델에 대해 이루어지는지 여부에 관계없이 시간당 호스팅 비용이 발생합니다. Azure OpenAI를 사용하여 비용을 계획하고 관리하는 방법에 대한 자세한 내용은 Azure OpenAI에 대한 비용 관리 계획의 지침을 참조하세요.
배포된 미세 조정된 모델을 사용합니다.
사용자 지정 모델을 배포한 후에는 배포된 다른 모델과 마찬가지로 사용할 수 있습니다.
Azure AI Foundry 포털에서 Playgrounds를 사용하여 새 배포를 실험할 수 있습니다. 배포된 다른 모델과 마찬가지로 사용자 지정 모델 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
표준 배포는 배포된 지역에 제한된 데이터 보존을 사용하여 토큰당 지불 청구 모델을 제공합니다.
Models |
미국 동부2 |
미국 중북부 |
스웨덴 중부 |
스위스 서부 |
o4-mini |
✅ |
|
✅ |
|
GPT-4.1 |
|
✅ |
✅ |
|
GPT-4.1-mini |
|
✅ |
✅ |
|
GPT-4.1-nano |
|
✅ |
✅ |
|
GPT-4o |
✅ |
|
✅ |
|
GPT-4o-mini |
|
✅ |
✅ |
|
GPT-35-Turbo(1106) |
✅ |
✅ |
✅ |
✅ |
GPT-35-Turbo(0125) |
✅ |
✅ |
✅ |
✅ |
글로벌 표준
글로벌 표준 미세 조정 배포는 비용 절감을 제공하지만 사용자 지정 모델 가중치는 Azure OpenAI 리소스의 지리 외부에 일시적으로 저장될 수 있습니다.
글로벌 표준 배포는 다음 모델에 대해 모든 Azure OpenAI 지역에서 사용할 수 있습니다.
- o4-mini
- GPT-4.1
- GPT-4.1-mini
- GPT-4.1-nano
- GPT-4o
- GPT-4o-mini
개발자 계층
개발자 가 미세 조정한 배포는 시간당 호스팅 비용 없이 글로벌 표준 과 비슷한 환경을 제공하지만 가용성 SLA는 제공하지 않습니다. 개발자 배포는 프로덕션용이 아닌 모델 후보 평가를 위해 설계되었습니다.
개발자 배포는 다음 모델에 대해 모든 Azure OpenAI 지역에서 사용할 수 있습니다.
- GPT-4.1
- GPT-4.1-mini
- GPT-4.1-nano
프로비전된 처리량
Models |
미국 중북부 |
스웨덴 중부 |
GPT-4.1 |
|
✅ |
GPT-4o |
✅ |
✅ |
GPT-4o-mini |
✅ |
✅ |
프로비전된 처리량 미세 조정 배포는 대기 시간에 민감한 에이전트 및 애플리케이션에 대한 예측 가능한 성능을 제공합니다. 기본 모델과 동일한 지역 프로비전된 처리량(PTU) 용량을 사용하므로 이미 지역 PTU 할당량이 있는 경우 지원 지역에 미세 조정된 모델을 배포할 수 있습니다.
배포 정리
배포를 삭제하려면 Deployments - 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를 사용할 수도 있습니다.
다음 단계