بمجرد ضبط النموذج الخاص بك، يمكنك نشر النموذج واستخدامه في التطبيق الخاص بك.
عند نشر النموذج، فإنك تجعل النموذج متاحا للاستدلال، وهذا يتطلب رسوم استضافة كل ساعة. ومع ذلك، يمكن تخزين النماذج الدقيقة في Azure الذكاء الاصطناعي Foundry دون أي تكلفة حتى تصبح جاهزا لاستخدامها.
يوفر Azure OpenAI اختيارات أنواع النشر للنماذج الدقيقة على بنية الاستضافة التي تناسب أنماط العمل والاستخدام المختلفة: قياسي، معيار عالمي (معاينة) ومعدل النقل المقدم (معاينة). تعرف على المزيد حول أنواع التوزيع للنماذج الدقيقةومفاهيم جميع أنواع التوزيع.
توزيع النموذج الذي تم ضبطه بدقة
لنشر النموذج المخصص، حدد النموذج المخصص الذي تريد نشره، ثم حدد Deploy.
يتم فتح مربع الحوار Deploy model . في مربع الحوار، أدخل اسم النشر ثم حدد إنشاء لبدء نشر النموذج المخصص.
يمكنك مراقبة تقدم النشر الخاص بك في جزء Deployments في مدخل Azure الذكاء الاصطناعي Foundry.
لا تدعم واجهة المستخدم التوزيع عبر المناطق، بينما تدعم 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())
متغير |
التعريف |
رمز مميز |
هناك طرق متعددة لإنشاء رمز مميز للتخويل. أسهل طريقة للاختبار الأولي هي تشغيل Cloud Shell من مدخل Microsoft Azure. ثم قم بتشغيل az account get-access-token . يمكنك استخدام هذا الرمز المميز كرمز تخويل مؤقت لاختبار واجهة برمجة التطبيقات. نوصي بتخزين هذا في متغير بيئة جديد. |
الاشتراك |
معرف الاشتراك لمورد Azure OpenAI المقترن. |
مجموعة الموارد |
اسم مجموعة الموارد لمورد Azure OpenAI. |
resource_name |
اسم مورد Azure OpenAI. |
model_deployment_name |
الاسم المخصص لنشر النموذج الجديد الذي تم ضبطه. هذا هو الاسم الذي سيتم الرجوع إليه في التعليمات البرمجية الخاصة بك عند إجراء مكالمات إكمال الدردشة. |
fine_tuned_model |
استرداد هذه القيمة من نتائج مهمة الضبط الدقيقة في الخطوة السابقة. سيكون شكلها على هذا النحوgpt-35-turbo-0125.ft-b044a9d3cf9c4228b5d393567f693b83 . ستحتاج إلى إضافة هذه القيمة إلى deploy_data json. بدلا من ذلك يمكنك أيضا نشر نقطة تحقق، عن طريق تمرير معرف نقطة التحقق الذي سيظهر بالتنسيق ftchkpt-e559c011ecc04fc68eaa339d8227d02d |
توزيع عبر المناطق
يدعم الضبط الدقيق نشر نموذج دقيق في منطقة مختلفة عن المنطقة التي تم فيها ضبط النموذج في الأصل. يمكنك أيضا النشر إلى اشتراك/منطقة مختلفة.
القيود الوحيدة هي أن المنطقة الجديدة يجب أن تدعم أيضا الضبط الدقيق وعند نشر الاشتراك المشترك، يجب أن يكون للحساب الذي ينشئ رمز التخويل للنشر حق الوصول إلى كل من اشتراكات المصدر والوجهة.
فيما يلي مثال على نشر نموذج تم ضبطه بدقة في اشتراك/منطقة إلى أخرى.
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
أذونات مساهم OpenAI للخدمات المعرفية لكل من موارد Azure 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 لإنشاء نشر نموذج للنموذج المخصص. تنشئ واجهة برمجة تطبيقات REST اسما لنشر النموذج المخصص.
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"
}
}
}'
متغير |
التعريف |
رمز مميز |
هناك طرق متعددة لإنشاء رمز مميز للتخويل. أسهل طريقة للاختبار الأولي هي تشغيل Cloud Shell من مدخل Microsoft Azure. ثم قم بتشغيل az account get-access-token . يمكنك استخدام هذا الرمز المميز كرمز تخويل مؤقت لاختبار واجهة برمجة التطبيقات. نوصي بتخزين هذا في متغير بيئة جديد. |
الاشتراك |
معرف الاشتراك لمورد Azure OpenAI المقترن. |
مجموعة الموارد |
اسم مجموعة الموارد لمورد Azure OpenAI. |
resource_name |
اسم مورد Azure OpenAI. |
model_deployment_name |
الاسم المخصص لنشر النموذج الجديد الذي تم ضبطه. هذا هو الاسم الذي سيتم الرجوع إليه في التعليمات البرمجية الخاصة بك عند إجراء مكالمات إكمال الدردشة. |
fine_tuned_model |
استرداد هذه القيمة من نتائج مهمة الضبط الدقيقة في الخطوة السابقة. سيكون شكلها على هذا النحوgpt-35-turbo-0125.ft-b044a9d3cf9c4228b5d393567f693b83 . ستحتاج إلى إضافة هذه القيمة إلى deploy_data json. بدلا من ذلك يمكنك أيضا نشر نقطة تحقق، عن طريق تمرير معرف نقطة التحقق الذي سيظهر بالتنسيق ftchkpt-e559c011ecc04fc68eaa339d8227d02d |
توزيع عبر المناطق
يدعم الضبط الدقيق نشر نموذج دقيق في منطقة مختلفة عن المنطقة التي تم فيها ضبط النموذج في الأصل. يمكنك أيضا النشر إلى اشتراك/منطقة مختلفة.
القيود الوحيدة هي أن المنطقة الجديدة يجب أن تدعم أيضا الضبط الدقيق وعند نشر الاشتراك المشترك، يجب أن يكون للحساب الذي ينشئ رمز التخويل للنشر حق الوصول إلى كل من اشتراكات المصدر والوجهة.
فيما يلي مثال على نشر نموذج تم ضبطه بدقة في اشتراك/منطقة إلى أخرى.
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
أذونات مساهم OpenAI للخدمات المعرفية لكل من موارد Azure 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، يجب تحديد اسم لنشر النموذج المخصص. لمزيد من المعلومات حول كيفية استخدام Azure CLI لنشر نماذج مخصصة، راجع az cognitiveservices account deployment
.
لتشغيل أمر Azure CLI هذا في نافذة وحدة تحكم، يجب استبدال العناصر النائبة<>بالقيم المقابلة للنموذج المخصص:
عنصر نائب |
القيمة |
<YOUR_AZURE_SUBSCRIPTION> |
اسم اشتراك Azure أو معرفه. |
<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 OpenAI في تسعير Azure الذكاء الاصطناعي Foundry Models، فإن كل نموذج مخصص (مضبوط) يتم توزيعه يتحمل تكلفة استضافة كل ساعة بغض النظر عما إذا كان يتم إجراء عمليات إكمال أو مكالمات إكمال الدردشة إلى النموذج. لمعرفة المزيد حول تخطيط التكاليف وإدارتها باستخدام Azure OpenAI، راجع الإرشادات الواردة في خطة لإدارة تكاليف Azure OpenAI.
استخدام النموذج الذي تم توزيعه بدقة
بعد نشر النموذج المخصص الخاص بك، يمكنك استخدامه مثل أي نموذج آخر تم نشره. يمكنك استخدام Playgrounds في مدخل Azure الذكاء الاصطناعي 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 أنواع التوزيع التالية.
قياسي
توفر عمليات النشر القياسية نموذج فوترة الدفع لكل مكالمة، وقد يكون النموذج المتاح في كل منطقة وكذلك معدل النقل محدودا.
نماذج |
المنطقة |
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، شمال وسط الولايات المتحدة، وسط السويد، غرب سويسرا |
معيار عالمي
توفر عمليات النشر العالمية المضبطة القياسيةتوفيرا في التكاليف، ولكن قد يتم تخزين أوزان النموذج المخصص مؤقتا خارج جغرافية مورد Azure OpenAI.
نماذج |
المنطقة |
GPT-4.1-finetune |
شرق الولايات المتحدة 2 وشمال وسط الولايات المتحدة ووسط السويد |
GPT-4.1-mini-finetune |
شرق الولايات المتحدة 2 وشمال وسط الولايات المتحدة ووسط السويد |
GPT-4.1-nano-finetune |
شرق الولايات المتحدة 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
- اسم مجموعة موارد Azure
- اسم مورد Azure OpenAI
- اسم النشر المراد حذفه
فيما يلي مثال واجهة برمجة تطبيقات REST لحذف عملية نشر:
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 الذكاء الاصطناعي Foundry، أو استخدام Azure CLI.
الخطوات التالية