داشبورد توسعه‌دهنده
پرسش از هوش مصنوعی
پرسش از هوش مصنوعی

برنامه‌ریزی تنظیم دقیق از طریق AvalAI

هشدار

ویژگی پیاده‌سازی نشده!

ایجاد job تنظیم دقیق در حال حاضر در AvalAI در حال توسعه است و هنوز در دسترس نیست. این صفحه یک راهنمای برنامه‌ریزی و مهاجرت است: از آن برای آماده‌سازی dataset، eval و معیارهای rollout استفاده کنید، اما تا وقتی AvalAI endpoint و مدل‌های پایه پشتیبانی‌شده را اعلام نکرده، مثال‌های ایجاد job را اجرا نکنید.

تنظیم دقیق یک مدل پایه را با مثال‌های شما برای یک وظیفه مشخص تطبیق می‌دهد. راهنمای فعلی OpenAI برای supervised fine-tuning بر workflow مبتنی بر eval، مثال‌های JSONL باکیفیت، و تکرار روی داده پیش از دست‌کاری hyperparameterها تأکید می‌کند. در AvalAI همین فرایند آماده‌سازی را به کار ببرید، اما training میزبانی‌شده را وابسته به route، مدل و حساب بدانید.

این راهنما با اقتباس از مستندات رسمی OpenAI درباره fine-tuning، best practiceهای fine-tuning، Direct Preference Optimization و Reinforcement Fine-Tuning تهیه شده و برای endpointها، وضعیت دسترسی و معیارهای rollout در AvalAI تطبیق داده شده است.

  • نتایج با کیفیت بالاتر نسبت به پرامپت‌نویسی به تنهایی.
  • آموزش بر روی مثال‌های بیشتر از آنچه در یک پرامپت جای می‌گیرد.
  • صرفه‌جویی در توکن به دلیل پرامپت‌های استنتاج کوتاه‌تر.
  • درخواست‌های با تاخیر کمتر (با استفاده از یک مدل کوچک‌تر تنظیم دقیق شده).

مدل‌هایی که از طریق AvalAI قابل دسترسی هستند معمولا بر روی مجموعه داده‌های وسیعی از پیش آموزش دیده‌اند. در حالی که مهندسی پرامپت و یادگیری کم‌شات مؤثر هستند، تنظیم دقیق مدل را بر روی بسیاری از مثال‌های خاص آموزش می‌دهد و رفتار آن را سفارشی می‌کند. پس از تنظیم دقیق، اغلب به پرامپت‌های ساده‌تری در زمان استنتاج نیاز دارید.

چرخه عمر تنظیم دقیق:

  1. آماده‌سازی و آپلود داده‌های آموزشی.
  2. شروع یک کار تنظیم دقیق از طریق API AvalAI وقتی قابلیت فعال شد.
  3. ارزیابی نتایج (به عنوان مثال با استفاده از راهنمای ارزیابی‌ها) و در صورت نیاز تکرار بر روی داده‌ها.
  4. استفاده از مدل تنظیم دقیق شده خود برای استنتاج.

برای جزئیات صورتحساب در مورد آموزش تنظیم دقیق و استفاده از مدل، به صفحه قیمت‌گذاری AvalAI مراجعه کنید.

مرز دسترسی در AvalAI

در دسترس بودن تنظیم دقیق به provider بالادستی، مدل، route و حساب بستگی دارد. منبع فعلی data/models.json هیچ مدل پایه قابل تنظیم دقیق را منتشر نکرده است، بنابراین امروز فرض نکنید هیچ مدلی از طریق AvalAI قابل آموزش است.

وقتی AvalAI تنظیم دقیق میزبانی‌شده را فعال کند، بررسی اجمالی مدل‌ها، مرجع API تنظیم دقیق و اطلاعیه‌های انتشار را برای فهرست دقیق مدل‌های پایه، methodهای پشتیبانی‌شده، محدودیت‌های آموزش، نگه‌داری فایل و شرایط billing بررسی کنید.

مستندات عمومی OpenAI در حال حاضر می‌گوید platform تنظیم دقیق میزبانی‌شده OpenAI برای کاربران جدید OpenAI در حال جمع شدن است. این وضعیت را به AvalAI تعمیم ندهید: تا وقتی AvalAI route پشتیبانی‌شده را منتشر نکرده، fine-tuning در AvalAI را unavailable بدانید و timelineهای OpenAI را فقط context مخصوص همان provider تلقی کنید.

انتخاب روش بهینه‌سازی

مستندات فعلی OpenAI روش‌های adaptation مدل را به supervised fine-tuning، vision fine-tuning، direct preference optimization و reinforcement fine-tuning تقسیم می‌کند. در AvalAI همه روش‌های training میزبانی‌شده را تا زمان اعلام route و مدل پایه، فقط شکل سازگاری آینده بدانید.

روشمناسب برایاستفاده نکنید وقتی
تنظیم دقیق نظارت‌شده (SFT)tone، format، instruction-following پایدار و کاهش هزینه/تاخیر بعد از اینکه prompting جواب می‌دهد.می‌خواهید دانش factual تازه اضافه کنید؛ به‌جای آن از RAG یا ابزارها استفاده کنید.
تنظیم دقیق بیناییتشخیص visual دامنه‌ای وقتی مدل پایه از image training پشتیبانی می‌کند.task عمدتا متنی است، یا understanding تصویری عمومی می‌خواهید، یا route ارائه‌دهنده پشتیبانی ندارد.
Direct Preference Optimization (DPO)همسو کردن preferenceهای ذهنی مثل style، ادب، ranking یا رفتار refusal ترجیحی.pairهای قابل اعتماد از پاسخ preferred و rejected ندارید.
Reinforcement Fine-Tuning (RFT)taskهای reasoning پیچیده با reward قابل اندازه‌گیری و grader متخصص.متخصصان توافق ندارند، مدل پایه صفر درصد موفقیت دارد، یا task با حدس شانسی قابل پاداش گرفتن است.

RFT به طراحی eval بسیار حساس است. قبل از training، graderها را آماده کنید، مطمئن شوید مدل چند نمونه را از قبل حل می‌کند، و validation set جدا نگه دارید تا reward hacking را پیدا کند. اگر AvalAI بعدا RFT را ارائه کند، انتظار داشته باشید محدود به routeهای مشخص مدل‌های reasoning باشد و پیش از deploy به safety screening نیاز داشته باشد.

پیش از fine-tuning بهینه‌سازی کنید

فقط وقتی سراغ fine-tuning بروید که مداخله‌های ارزان‌تر را با eval سنجیده‌اید:

  1. انتخاب مدل: مدل قوی‌تر یا مناسب‌تر را امتحان کنید، یا در صورت پشتیبانی reasoning effort را افزایش دهید.
  2. بهبود پرامپت: دستورالعمل‌ها، محدودیت‌ها و قرارداد خروجی را شفاف‌تر کنید.
  3. مثال و context: few-shot example، context بازیابی‌شده یا RAG دستی با embeddings اضافه کنید.
  4. ابزارها: APIهای قطعی، lookup پایگاه داده، calculator یا guardrail check را با function calling در دسترس مدل بگذارید.
  5. مدل‌های کمکی: classifier، moderation، evaluator یا routing model کوچک را اطراف فراخوانی اصلی اضافه کنید.
  6. Fine-tuning: از SFT برای نمونه‌های برچسب‌دار، از DPO برای pairهای preferred/rejected و از RFT برای taskهای reasoning با grader استفاده کنید.

Fine-tuning روی پرامپت ضعیف می‌تواند رفتار ضعیف را تثبیت کند. بهترین پرامپت production و دستورالعمل‌های tool را در مثال‌های training نگه دارید، مگر اینکه evalها نشان دهند حذفشان امن است.

چک‌لیست آمادگی RFT

پیش از برنامه‌ریزی reinforcement fine-tuning، همه موارد زیر را تأیید کنید:

  • reviewerهای متخصص درباره شکل پاسخ خوب توافق دارند.
  • یک grader می‌تواند task را بدون قضاوت پنهان انسانی در زمان training امتیازدهی کند.
  • score پایه eval نه نزدیک صفر است و نه تقریبا کامل.
  • مدل پایه روی بخشی از مثال‌ها موفق می‌شود، بنابراین reinforcement می‌تواند یک قابلیت موجود را بهتر کند.
  • task با حدس شانسی یا pattern matching سطحی قابل بازی‌دادن نیست.
  • مجموعه‌های training، validation و evaluation نهایی از هم جدا هستند تا داده eval وارد training نشود.

چه زمانی از تنظیم دقیق استفاده کنیم

تنظیم دقیق نیاز به سرمایه‌گذاری دقیق دارد. ابتدا، سعی کنید نتایج را با استفاده از موارد زیر بهینه کنید:

  • مهندسی پرامپت: دستورالعمل‌ها و مثال‌ها را اصلاح کنید. به راهنمای مهندسی پرامپت مراجعه کنید .
  • زنجیره‌سازی پرامپت: وظایف پیچیده را به پرامپت‌های متوالی تقسیم کنید.
  • فراخوانی تابع: به مدل امکان استفاده از ابزارها/داده‌های خارجی را بدهید. به راهنمای فراخوانی تابع مراجعه کنید .

تنظیم دقیق را در موارد زیر در نظر بگیرید:

  • نیاز به تنظیم مداوم یک سبک، لحن یا قالب خاص دارید.
  • نیاز به خروجی‌های قابل اعتماد برای دستورالعمل‌های پیچیده دارید.
  • نیاز به مدیریت صحیح بسیاری از موارد مرزی خاص دارید.
  • مهارت مورد نظر به سختی تنها از طریق پرامپت‌نویسی قابل بیان است ("نشان بده، نگو").
  • می‌خواهید با استفاده از یک مدل کوچک‌تر تنظیم‌شده برای رسیدن به کیفیت یک مدل بزرگ‌تر، به طور بالقوه هزینه/تاخیر را کاهش دهید.

کار اولیه مهندسی پرامپت حتی اگر تنظیم دقیق انجام دهید ارزشمند است، زیرا بهترین پرامپت‌ها اغلب در داده‌های آموزشی گنجانده می‌شوند.

آماده‌سازی مجموعه داده شما

مجموعه‌ای متنوع از مکالمات نمایشی را در قالبی که توسط API تکمیل چت AvalAI انتظار می‌رود، ایجاد کنید.

  • قالب: فایل JSONL، که در آن هر خط یک شی JSON است که یک مثال آموزشی را نشان می‌دهد.
  • ساختار: هر مثال شامل لیستی از messages است، که هر پیام دارای role (system, user, یا assistant) و content است.
  • هدف‌گذاری: مثال‌هایی را شامل کنید که به طور خاص به حوزه‌هایی می‌پردازند که مدل پایه در آن‌ها شکست می‌خورد یا الزامات را برآورده نمی‌کند. پیام‌های assistant باید حاوی خروجی ایده‌آل مورد نظر باشند.

قالب مثال (ربات طعنه‌آمیز)

json
{"messages": [{"role": "system", "content": "Marv یک ربات چت واقعی است که طعنه‌آمیز هم هست."}, {"role": "user", "content": "پایتخت فرانسه کجاست؟"}, {"role": "assistant", "content": "پاریس، انگار همه این را نمی‌دانند."}]}
{"messages": [{"role": "system", "content": "Marv یک ربات چت واقعی است که طعنه‌آمیز هم هست."}, {"role": "user", "content": "چه کسی «رومئو و ژولیت» را نوشت؟"}, {"role": "assistant", "content": "اوه، فقط یک آقایی به نام ویلیام شکسپیر. تا حالا اسمش را شنیده‌ای؟"}]}
{"messages": [{"role": "system", "content": "Marv یک ربات چت واقعی است که طعنه‌آمیز هم هست."}, {"role": "user", "content": "فاصله ماه تا زمین چقدر است؟"}, {"role": "assistant", "content": "حدود ۳۸۴٬۴۰۰ کیلومتر. چندتایی کمتر یا بیشتر، انگار که واقعا مهم است."}]}

مثال‌های چند نوبتی و وزن‌دهی

می‌توانید چندین نوبت را در یک مثال بگنجانید. به طور پیش‌فرض، مدل بر روی تمام پیام‌های assistant آموزش می‌بیند. برای رد شدن از آموزش در یک نوبت دستیار خاص، "weight": 0 را به آن شی پیام اضافه کنید. از "weight": 1 (یا حذف کلید وزن) برای نوبت‌هایی که می‌خواهید مدل از آن‌ها یاد بگیرد استفاده کنید.

json
{
  "messages": [
    {
      "role": "system",
      "content": "Marv واقعی و طعنه‌آمیز است."
    },
    {
      "role": "user",
      "content": "پایتخت فرانسه؟"
    },
    {
      "role": "assistant",
      "content": "پاریس",
      "weight": 0
    },
    {
      "role": "user",
      "content": "لطفا طعنه‌آمیزتر."
    },
    {
      "role": "assistant",
      "content": "پاریس، انگار که راز بزرگی است.",
      "weight": 1
    }
  ]
}

ساخت پرامپت‌ها در داده‌ها

گنجاندن بهترین پرامپت سیستمی و پرامپت‌های کاربر (که در طول مهندسی پرامپت شناسایی کرده‌اید) در هر مثال آموزشی به طور کلی بهترین نتایج را به همراه دارد، به خصوص با مثال‌های کمتر (<۱۰۰).

اگر دستورالعمل‌ها را در داده‌های آموزشی برای صرفه‌جویی در هزینه‌ها کوتاه یا حذف کنید، مدل ممکن است به طور ضمنی آن دستورالعمل‌ها را یاد بگیرد، که باعث می‌شود نادیده گرفتن آن‌ها بعدا در زمان استنتاج دشوارتر شود. آموزش مدل صرفا از طریق نمایش (بدون دستورالعمل در داده‌ها) ممکن است به طور قابل توجهی به مثال‌های بیشتری نیاز داشته باشد.

توصیه‌های تعداد مثال

  • حداقل: ۱۰ مثال مورد نیاز است.
  • شروع توصیه شده: ۵۰-۱۰۰ مثال با کیفیت بالا، سپس ارزیابی روی holdout set پیش از افزودن داده بیشتر.
  • ارزیابی: بررسی کنید که آیا مدل بهبود نشان می‌دهد یا خیر. بهبود واضح نشان می‌دهد که افزودن داده‌های بیشتر احتمالا به پیشرفت بیشتر کمک خواهد کرد. عدم بهبود ممکن است به معنای بازنگری در تنظیم وظیفه یا ساختار داده باشد.

تقسیم آموزش/اعتبارسنجی

مجموعه داده خود را به مجموعه‌های آموزشی و اعتبارسنجی تقسیم کنید. ارائه یک فایل اعتبارسنجی هنگام ایجاد کار تنظیم دقیق به AvalAI (یا ارائه دهنده زیربنایی) اجازه می‌دهد تا معیارها را در طول آموزش محاسبه کند و به شما بازخورد در مورد بهبود مدل بدهد. اطمینان حاصل کنید که هیچ همپوشانی بین داده‌های آموزشی و اعتبارسنجی وجود ندارد.

validation set را پیش از شروع training بسازید و ثابت نگه دارید. از آن برای مقایسه مدل پایه، هر checkpoint تنظیم‌شده و هر جایگزین prompt/tool استفاده کنید. برای workflowهای شبیه RFT، علاوه بر validation set یک test set نهایی جدا نگه دارید، چون خود grader می‌تواند هدف optimization شود.

محدودیت‌های توکن

مثال‌های آموزشی در صورت فراتر رفتن از حداکثر طول زمینه مدل برای آموزش، کوتاه می‌شوند. برای محدودیت‌های خاص مدل‌های قابل تنظیم دقیق موجود از طریق AvalAI، به بررسی اجمالی مدل‌ها مراجعه کنید. اطمینان حاصل کنید که کل توکن‌ها در هر مثال (مجموع فیلدهای content) در محدوده قرار می‌گیرد. از یک کتابخانه توکنایزر (مانند tiktoken برای مدل‌های OpenAI) برای شمارش دقیق توکن‌ها استفاده کنید.

تخمین هزینه‌ها (از قیمت‌گذاری AvalAI استفاده کنید)

برای هزینه‌های تنظیم دقیق به صفحه قیمت‌گذاری AvalAI مراجعه کنید. فرمول کلی این است:

(هزینه پایه AvalAI برای هر ۱ میلیون توکن آموزشی / ۱٬۰۰۰٬۰۰۰) *
کل توکن‌ها در فایل آموزشی *
تعداد دوره‌ها

(هزینه پایه AvalAI برای هر ۱ میلیون توکن آموزشی / ۱٬۰۰۰٬۰۰۰) * کل توکن‌ها در فایل آموزشی * تعداد دوره‌ها

مثال: یک فایل ۱۰۰ هزار توکنی که برای ۳ دوره روی یک مدل قابل تنظیم دقیق آینده از طریق AvalAI آموزش داده شود، هزینه‌ای بر اساس نرخ خاص AvalAI برای همان مدل خواهد داشت.

توکن‌های اعتبارسنجی معمولا هزینه ندارند.

بررسی قالب‌بندی داده‌ها

قبل از آپلود، فایل JSONL خود را اعتبارسنجی کنید:

  • هر خط باید یک شی JSON معتبر باشد.
  • هر شی باید یک کلید messages داشته باشد.
  • هر پیام باید role و content داشته باشد.
  • نقش‌ها باید system, user, یا assistant باشند.
  • باید حداقل یک پیام assistant در هر مثال وجود داشته باشد (مگر اینکه از فرمت‌های خاصی مانند DPO استفاده کنید).
  • تعداد توکن‌ها در هر مثال را در برابر محدودیت‌های مدل بررسی کنید.

کیفیت داده قبل از کمیت داده

راهنمای best-practice تنظیم دقیق در OpenAI پیشنهاد می‌کند پیش از تغییر hyperparameterها یا افزودن حجم زیادی مثال، کیفیت و توزیع داده را اصلاح کنید:

  • مثال‌هایی اضافه کنید که دقیقا رفتاری را نشان می‌دهند که مدل پایه هنوز در آن شکست می‌خورد.
  • تناقض، خطای نگارشی، drift سبک و claim ناامن را از پیام‌های هدف assistant حذف کنید.
  • توزیع training را به production نزدیک کنید. اگر refusal، tool call یا پاسخ‌های بلند در داده بیش از حد زیاد باشند، مدل تنظیم‌شده احتمالا همان‌ها را بیش از حد تولید می‌کند.
  • اجازه ندهید مثال‌ها قابلیت ناممکن آموزش دهند؛ مثلا نگویند action کامل شده وقتی برنامه واقعا نمی‌تواند آن action را انجام دهد.
  • guideline برچسب‌گذاری را بین annotatorها یکسان نگه دارید؛ کیفیت مدل به میزان توافق انسانی درباره پاسخ مطلوب محدود می‌شود.
  • dataset کوچک‌تر و باکیفیت را به dataset بزرگ و noisy ترجیح دهید. فقط وقتی evalها نشان می‌دهند dataset فعلی کمک می‌کند، داده را بیشتر کنید.

وقتی کیفیت داده پایدار شد، کمیت را آگاهانه افزایش دهید. یک‌بار روی dataset فعلی و یک‌بار روی subset کوچک‌تر fine-tune کنید، نتیجه eval را مقایسه کنید و از فاصله کیفیت برای تخمین سود احتمالی اضافه‌کردن مثال‌های بیشتر استفاده کنید. این روش امن‌تر از فرض کردن این است که فایل بزرگ‌تر نویز labelها را جبران می‌کند.

آپلود فایل آموزشی

وقتی تنظیم دقیق میزبانی‌شده فعال شد، فایل JSONL اعتبارسنجی‌شده خود را با API فایل‌های سازگار با AvalAI آپلود کنید و purpose را روی fine-tune بگذارید. تا آن زمان، این بخش را template مهاجرت بدانید و داده را محلی اعتبارسنجی کنید.

python
# مثال پایتون: آپلود فایل از طریق نقطه پایانی سازگار با AvalAI
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",  # آدرس پایه
)

try:
    file_response = client.files.create(
        file=open("my_training_data.jsonl", "rb"), purpose="fine-tune"
    )
    training_file_id = file_response.id
    print(f"File uploaded successfully: {training_file_id}")
except FileNotFoundError:
    print("Error: Training file not found.")
except Exception as e:
    print(f"An error occurred during file upload: {e}")

پردازش فایل ممکن است پس از آپلود زمان ببرد.

ایجاد یک کار تنظیم دقیق

فقط پس از اعلام پشتیبانی AvalAI از v1/fine_tuning/jobs برای حساب و مدل شما، job را از طریق API شروع کنید.

python
# مثال پایتون: ایجاد کار تنظیم دقیق از طریق AvalAI
# فرض می‌شود 'training_file_id' از مرحله آپلود فایل به دست آمده است
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",  # آدرس پایه
)

try:
    job = client.fine_tuning.jobs.create(
        training_file=training_file_id,
        model="fine-tunable-model-id",  # از شناسه مدل پایه قابل تنظیم دقیق پشتیبانی‌شده استفاده کنید
        # پارامترهای اختیاری:
        # validation_file="validation_file_id",
        # hyperparameters={"n_epochs": 3}, # یا {"learning_rate_multiplier": 2, "batch_size": 1}
        # suffix="my-custom-model-name", # حداکثر ۶۴ کاراکتر
        # method={"type": "dpo", "dpo": {"hyperparameters": {"beta": 0.1}}} # برای DPO
    )
    print(f"Fine-tuning job created: {job.id}")
    print(f"Status: {job.status}")
except Exception as e:
    print(f"An error occurred creating the fine-tuning job: {e}")
  • model: باید شناسه مدل پایه قابل تنظیم دقیق موجود از طریق AvalAI باشد.
  • training_file: شناسه‌ای که از آپلود فایل بازگردانده شده است.
  • validation_file (اختیاری): شناسه مجموعه اعتبارسنجی آپلود شده شما.
  • hyperparameters (اختیاری): سفارشی کردن n_epochs, learning_rate_multiplier, batch_size. پیش‌فرض‌ها اغلب مناسب هستند. برای جزئیات به مرجع API مراجعه کنید.
  • suffix (اختیاری): یک جز نام سفارشی به شناسه مدل تنظیم دقیق شده خود اضافه کنید (حداکثر ۶۴ کاراکتر).
  • method (اختیاری): روش تنظیم دقیق را مشخص کنید، به عنوان مثال {"type": "dpo", ...} برای تنظیم دقیق ترجیحی. پیش‌فرض supervised است.

کارها در صف قرار می‌گیرند و می‌توانند از چند دقیقه تا چند ساعت طول بکشند. ممکن است پس از تکمیل، یک اعلان ایمیل دریافت کنید (وابسته به ارائه دهنده).

راهنمای عملی وضعیت job

وقتی AvalAI تنظیم دقیق میزبانی‌شده را فعال کند، وضعیت job را فقط برچسب پیشرفت ندانید؛ آن را سیگنال عملیاتی در نظر بگیرید:

وضعیتاقدام پیشنهادی
validating / preparingمطمئن شوید فایل‌ها با purpose="fine-tune" آپلود شده‌اند و JSONL، محدودیت token، قالب تصویر و فیلدهای خاص method معتبر هستند.
queuedپیش از شروع training، نسخه dataset، شناسه مدل، hyperparameterها، method و eval suite مورد انتظار را ثبت کنید.
runningبسته به method، eventها را برای loss، validation loss، token accuracy، reward metrics، خطاهای grader و parse errorها پایش کنید.
succeededبلافاصله deploy نکنید. eval suite ثابت، safety checkها و مقایسه کنار هم با مدل پایه را اجرا کنید.
failed / cancelledjob ID، event log، file IDها و request ID را برای پشتیبانی و postmortem نگه دارید.

برای jobهای طولانی‌مدت شبیه RFT، چرخه training در OpenAI الگوهایی مثل pause/resume و ارزیابی checkpoint دارد. در AvalAI این موارد را featureهای مشروط بدانید: فقط وقتی استفاده کنید که AvalAI endpointهای مربوط به route شما را منتشر کرده باشد، و هر checkpoint را پیش از ارتقا روی مجموعه held-out ارزیابی کنید.

می‌توانید کارها را به صورت برنامه‌نویسی مدیریت کنید:

python
# مثال پایتون: مدیریت کارهای تنظیم دقیق از طریق AvalAI
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",  # آدرس پایه
)

try:
    # لیست ۱۰ کار اخیر
    recent_jobs = client.fine_tuning.jobs.list(limit=10)
    print("Recent Jobs:", recent_jobs.data)

    # بازیابی وضعیت یک کار خاص
    job_id = "ftjob-xxxxxxxxxxxx"  # با شناسه کار خود جایگزین کنید
    job_status = client.fine_tuning.jobs.retrieve(job_id)
    print(f"Job {job_id} Status:", job_status)
    fine_tuned_model_id = job_status.fine_tuned_model

    # لیست رویدادها برای یک کار
    events = client.fine_tuning.jobs.list_events(job_id=job_id, limit=10)
    print(f"Events for {job_id}:", events.data)

    # لغو یک کار در حال انجام (در صورت نیاز)
    # cancel_status = client.fine_tuning.jobs.cancel(job_id)
    # print(f"Cancel Status for {job_id}:", cancel_status)

    # حذف یک مدل تنظیم دقیق شده (نیاز به مجوزهای مناسب)
    if fine_tuned_model_id:
        # delete_status = client.models.delete(fine_tuned_model_id)
        # print(f"Deletion status for {fine_tuned_model_id}:", delete_status)
        pass  # در صورت نیاز خط حذف را از حالت کامنت خارج کنید

except Exception as e:
    print(f"An error occurred managing fine-tuning jobs: {e}")

استفاده از یک مدل تنظیم دقیق شده

پس از موفقیت یک کار آینده، فیلد fine_tuned_model در وضعیت کار حاوی شناسه مدل جدید شما خواهد بود (مانند ft:fine-tunable-model-id:avalai-org:my-suffix:xxxxxx). از این شناسه در پارامتر model فراخوانی‌های API تکمیل چت خود استفاده کنید.

python
# مثال پایتون: استفاده از مدل تنظیم دقیق شده از طریق AvalAI
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",  # آدرس پایه
)

fine_tuned_model_id = "ft:fine-tunable-model-id:avalai-org:my-suffix:xxxxxx"  # با شناسه مدل خود جایگزین کنید

try:
    completion = client.chat.completions.create(
        model=fine_tuned_model_id,
        messages=[
            {
                "role": "system",
                "content": "Marv یک ربات چت واقعی است که طعنه‌آمیز هم هست.",
            },  # پرامپت سیستمی ممکن است همچنان مفید باشد
            {"role": "user", "content": "پایتخت فرانسه کجاست؟"},
        ],
    )
    print(completion.choices[0].message.content)
except Exception as e:
    print(f"An error occurred using the fine-tuned model: {e}")
نسخه معادل Responses API

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. messages به input منتقل می‌شود و متن نهایی از response.output_text خوانده می‌شود.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

response = client.responses.create(
    model=fine_tuned_model_id,
    instructions="Marv یک ربات چت واقعی است که طعنه‌آمیز هم هست.",
    input="پایتخت فرانسه کجاست؟",
)

print(response.output_text)
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

مدل ممکن است چند دقیقه طول بکشد تا پس از تکمیل کار، به طور کامل برای استنتاج در دسترس قرار گیرد.

تجزیه و تحلیل مدل تنظیم دقیق شده شما

پیشرفت آموزش را از طریق موارد زیر نظارت کنید:

  • رویدادها: نقطه پایانی list_events معیارهای ثبت شده در طول آموزش (loss، accuracy) را نشان می‌دهد. به دنبال کاهش loss و افزایش accuracy باشید.
json
{
  "object": "fine_tuning.job.event",
  "id": "ftevent-...",
  "created_at": ...,
  "level": "info",
  "message": "Step 100/200: training loss=0.25, validation loss=0.30",
  "data": {
    "step": 100,
    "train_loss": 0.25,
    "valid_loss": 0.30, // در بچ در طول گام

    "train_mean_token_accuracy": 0.91,
    "valid_mean_token_accuracy": 0.89, // در بچ در طول گام

    // "full_valid_loss": 0.28, // در مجموعه اعتبارسنجی کامل در پایان دوره

    // "full_valid_mean_token_accuracy": 0.90 // در مجموعه اعتبارسنجی کامل در پایان دوره

  },
  "type": "metrics"
}
  • فایل‌های نتیجه: پس از تکمیل، شی کار حاوی result_files است. این فایل‌های CSV را از طریق API فایل‌ها دانلود کنید تا معیارهای دقیق گام به گام را ببینید.
  • ارزیابی دستی: پاسخ‌ها را از مدل تنظیم دقیق شده خود و مدل پایه بر روی یک مجموعه آزمایشی نگه داشته شده تولید کنید و کیفیت را به صورت مقایسه کنار هم بررسی کنید.
  • ارزیابی‌ها: از چارچوب‌های ارزیابی سیستماتیک (راهنمای ارزیابی‌ها) برای مقایسه کمی استفاده کنید.

checkpointها و ارتقا

اگر route ارائه‌دهنده checkpointهای میانی برگرداند، آن‌ها را مانند مدل‌های کاندیدای جداگانه ارزیابی کنید:

  1. مدل نهایی، هر checkpoint، مدل پایه و baseline فعلی prompt-only را روی همان eval set ثابت مقایسه کنید.
  2. برای انتخاب checkpoint، metricهای validation را به metricهای training ترجیح دهید؛ بهبود فقط روی training می‌تواند نشانه overfit باشد.
  3. در RFT، خروجی grader و traceهای reward را بررسی کنید، نه فقط reward تجمیعی. مدل ممکن است یاد بگیرد grader ضعیف را راضی کند بدون اینکه کیفیت قابل مشاهده برای کاربر بهتر شود.
  4. checkpoint را فقط وقتی promote کنید که safety checkها pass شده باشند و rollout plan مسیر rollback به model ID قبلی داشته باشد.

تکرار

  • کیفیت داده‌ها: اگر نتایج ضعیف هستند، داده‌های آموزشی را برای خطاها، ناهماهنگی‌ها، کمبود اطلاعات لازم یا عدم تعادل بررسی کنید. داده‌های با کیفیت بالا بسیار مهم هستند.
  • کمیت داده‌ها: اگر مدل بهبود نشان می‌دهد اما کامل نیست، افزودن مثال‌های با کیفیت بالا اغلب کمک می‌کند، به خصوص برای موارد مرزی. دو برابر کردن داده‌ها می‌تواند منجر به دستاوردهای قابل توجهی شود.
  • فراپارامترها: n_epochs را تنظیم کنید (اگر کم‌برازش است افزایش دهید، اگر بیش‌برازش/از دست دادن تنوع است کاهش دهید) یا learning_rate_multiplier (اگر همگرا نمی‌شود افزایش دهید) اگر تنظیمات پیش‌فرض بهینه نیستند.

راهنمای best-practice OpenAI پیشنهاد می‌کند ابتدا با hyperparameterهای پیش‌فرض آموزش دهید و فقط بر اساس شواهد eval آن‌ها را تغییر دهید: اگر مدل در taskهای محدود کم‌برازش دارد، epoch را زیاد کنید؛ اگر تنوع را از دست می‌دهد یا overfit می‌شود، epoch را کم کنید؛ و learning rate را فقط وقتی training همگرا نمی‌شود تغییر دهید.

برای trainingهای شبیه RFT، علاوه بر این‌ها train_reward_mean، valid_reward_mean، reward مربوط به هر grader، خطاهای parse نمونه، خطاهای grader و میزان reasoning token را پایش کنید. افزایش reward در training همراه با ثابت ماندن یا افت reward در validation معمولا یعنی مدل یا grader overfit شده است. نرخ بالای parse error معمولا یعنی schema پاسخ یا variableهای grader باید قبل از training بیشتر اصلاح شوند.

تنظیم دقیق بینایی (وابسته به مدل)

اگر مدل پایه موجود از طریق AvalAI از بینایی پشتیبانی می‌کند، می‌توانید تصاویر را در داده‌های تنظیم دقیق خود (فرمت JSONL) بگنجانید.

  • قالب: از قالب پیام استاندارد تکمیل چت استفاده کنید، از جمله بخش‌های محتوای image_url برای نقش user. تصاویر می‌توانند URL یا URL داده Base64 باشند.
json
{
  "messages": [
    {
      "role": "system",
      "content": "پنیر را شناسایی کنید."
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "این چیست؟"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://...",

            "detail": "low"
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": "Danbo"
    }
  ]
}
  • الزامات: مستندات ارائه دهنده را از طریق AvalAI برای فرمت‌های تصویر پشتیبانی شده (معمولا PNG، JPEG، WEBP، GIF غیر متحرک)، محدودیت‌های اندازه (مانند <۱۰ مگابایت) و محدودیت‌های محتوا (معمولا بدون افراد/چهره/کودکان/کپچا) بررسی کنید.
  • هزینه: از detail: "low" برای تصاویر استفاده کنید تا تعداد توکن و هزینه آموزش به طور قابل توجهی کاهش یابد.

تنظیم دقیق ترجیحی (DPO) (وابسته به مدل)

بهینه‌سازی ترجیح مستقیم (DPO) بر اساس پاسخ‌های ترجیحی در مقابل غیرترجیحی تنظیم دقیق می‌کند.

  • قالب داده: هر خط JSONL به input (مانند پیام‌های کاربر)، preferred_output (لیست پیام دستیار ایده‌آل) و non_preferred_output (لیست پیام دستیار نامطلوب) نیاز دارد.
json
{
  "input": {
    "messages": [
      {
        "role": "user",
        "content": "هوای سانفرانسیسکو چطور است؟"
      }
    ]
  },
  "preferred_output": [
    {
      "role": "assistant",
      "content": "آفتابی، حداکثر دما ۶۸ درجه فارنهایت."
    }
  ],
  "non_preferred_output": [
    {
      "role": "assistant",
      "content": "امروز خوب است."
    }
  ]
}
  • روش: هنگام ایجاد کار، method={"type": "dpo", ...} را مشخص کنید.
  • فراپارامتر بتا: پایبندی به رفتار قبلی در مقابل ترجیحات جدید را کنترل می‌کند (۰=تهاجمی، ۲=محافظه‌کار، پیش‌فرض="auto").
  • انباشتگی: اغلب مفید است که ابتدا تنظیم دقیق نظارت شده (SFT) را بر روی پاسخ‌های ترجیحی اجرا کنید، سپس DPO را بر روی مدل SFT حاصل اجرا کنید.

بررسی کنید که آیا DPO برای مدل پایه‌ای که از طریق AvalAI انتخاب می‌کنید پشتیبانی می‌شود یا خیر.

معیارهای ایمنی و استقرار

صرفا به این دلیل که job تنظیم دقیق تمام شده، مدل را deploy نکنید. پیش از انتشار:

  • همان eval suite را روی مدل پایه، مدل تنظیم‌شده و baseline فعلی prompt-only اجرا کنید.
  • failure sliceها را بر اساس زبان، segment کاربر، نوع سند، نوع refusal و مسیر tool-use بررسی کنید.
  • safety checkهای مربوط به policy، privacy، hallucination، prompt-injection و data-exfiltration را اجرا کنید.
  • مطمئن شوید مدل تنظیم‌شده ادعای انجام actionهایی را نمی‌کند که محصول شما واقعا انجام نمی‌دهد.
  • مسیر rollback به مدل پایه یا checkpoint قبلی تنظیم‌شده داشته باشید.
  • برای هر release، model ID، نسخه dataset آموزشی، eval run ID، request ID و tagهای feedback production را log کنید.

برای دامنه‌های regulated یا high-impact، پیش از upload داده training و پیش از فعال‌سازی مدل برای کاربران، human review الزامی کنید.