متن خبر

تنظیم دقیق یک LLM منبع باز با Axolotl با استفاده از بهینه سازی اولویت مستقیم (DPO)

تنظیم دقیق یک LLM منبع باز با Axolotl با استفاده از بهینه سازی اولویت مستقیم (DPO)

شناسهٔ خبر: 834808 -




LLM ها فرصت های جدید بی شماری را برای برنامه های کاربردی هوش مصنوعی باز کرده اند. اگر تا به حال می‌خواهید مدل خود را تنظیم کنید، این راهنما به شما نشان می‌دهد که چگونه این کار را به راحتی و بدون نوشتن هیچ کدی انجام دهید. با استفاده از ابزارهایی مانند Axolotl و DPO، مراحل را مرحله به مرحله طی خواهیم کرد.

LLM چیست؟

مدل زبان بزرگ (LLM) یک مدل هوش مصنوعی قدرتمند است که بر روی مقادیر زیادی از داده های متنی - ده ها تریلیون کاراکتر - آموزش داده شده است تا مجموعه بعدی کلمات را در یک دنباله پیش بینی کند. این تنها در 2-3 سال گذشته با پیشرفت هایی که در محاسبات GPU ایجاد شده است، امکان پذیر شده است، که باعث شده چنین مدل های عظیمی در عرض چند هفته آموزش داده شوند.

احتمالاً قبلاً از طریق محصولاتی مانند ChatGPT یا Claude با LLMها تعامل داشته‌اید و توانایی آنها را برای درک و ایجاد پاسخ‌های شبیه انسان تجربه کرده‌اید.

چرا یک LLM را تنظیم دقیق کنید؟

آیا نمی توانیم فقط از GPT-4o برای همه چیز استفاده کنیم؟ خوب، اگرچه این قدرتمندترین مدلی است که در زمان نوشتن این مقاله داریم، اما همیشه کاربردی ترین انتخاب نیست. تنظیم دقیق یک مدل کوچکتر، از 3 تا 14 میلیارد پارامتر، می تواند نتایج قابل مقایسه با کسری از هزینه را به همراه داشته باشد. علاوه بر این، تنظیم دقیق به شما امکان می دهد مالکیت معنوی خود را داشته باشید و اتکای شما به اشخاص ثالث را کاهش می دهد.

درک مدل های پایه، دستورالعمل و چت

قبل از پرداختن به تنظیم دقیق، ضروری است که انواع مختلف LLM های موجود را درک کنید:

مدل‌های پایه: این مدل‌ها روی مقادیر زیادی متن بدون ساختار، مانند کتاب‌ها یا داده‌های اینترنتی، از قبل آموزش داده شده‌اند. در حالی که آنها درک ذاتی از زبان دارند، برای استنتاج بهینه نشده اند و خروجی های نامنسجمی تولید خواهند کرد. مدل های پایه به عنوان نقطه شروعی برای توسعه مدل های تخصصی تر توسعه یافته اند.

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

مدل‌های چت: همچنین بر اساس مدل‌های پایه ساخته شده‌اند، اما بر خلاف مدل‌های دستورالعمل، مدل‌های چت بر روی داده‌های مکالمه آموزش داده می‌شوند و آنها را قادر می‌سازد تا در گفتگوی رفت و برگشت شرکت کنند.

یادگیری تقویتی و DPO چیست؟

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

DPO شکلی از RL است که در آن مدل با استفاده از جفت پاسخ های خوب و بد برای همان اعلان/مکالمه آموزش داده می شود. با ارائه این جفت ها، مدل یاد می گیرد که از نمونه های خوب استفاده کند و از نمونه های بد اجتناب کند.

زمان استفاده از DPO

DPO به ویژه زمانی مفید است که می خواهید سبک یا رفتار مدل خود را تنظیم کنید، به عنوان مثال:

تنظیمات سبک: طول پاسخ ها، سطح جزئیات، یا درجه اطمینان بیان شده توسط مدل را اصلاح کنید.

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

با این حال، DPO برای آموزش دانش یا حقایق جدید مدل مناسب نیست. برای این منظور، تکنیک‌های تنظیم دقیق نظارت شده (SFT) یا بازیابی-افزایش نسل (RAG) مناسب‌تر هستند.

ایجاد مجموعه داده DPO

در یک محیط تولید، شما معمولاً یک مجموعه داده DPO را با استفاده از بازخورد کاربران خود ایجاد می کنید، به عنوان مثال:

بازخورد کاربر: پیاده سازی مکانیزم شست بالا/پایین در پاسخ ها.

انتخاب های مقایسه ای: ارائه دو خروجی متفاوت به کاربران و درخواست از آنها برای انتخاب بهتر.

اگر اطلاعات کاربر ندارید، می‌توانید با استفاده از LLM‌های بزرگتر و توانمندتر، یک مجموعه داده مصنوعی ایجاد کنید. به عنوان مثال، می‌توانید با استفاده از یک مدل کوچک‌تر پاسخ‌های بد ایجاد کنید و سپس از GPT-4o برای تصحیح آن‌ها استفاده کنید.

برای سادگی، از یک مجموعه داده آماده از HuggingFace استفاده خواهیم کرد: olivermolenschot/alpaca_messages_dpo_test. اگر مجموعه داده را تحلیل کنید، متوجه خواهید شد که حاوی اعلان‌هایی با پاسخ‌های انتخاب شده و رد شده است - اینها نمونه‌های خوب و بد هستند. این داده ها به صورت مصنوعی با استفاده از GPT-3.5-turbo و GPT-4 ایجاد شده اند.

شما به طور کلی حداقل بین 500 تا 1000 جفت داده نیاز دارید تا آموزش موثر و بدون برازش بیش از حد داشته باشید. بزرگترین مجموعه داده های DPO شامل 15000 تا 20000 جفت هستند.

تنظیم دقیق Qwen2.5 3B Instruct با Axolotl

ما از Axolotl برای تنظیم دقیق مدل Qwen2.5 3B Instruct استفاده خواهیم کرد که در حال حاضر از نظر کلاس اندازه در صدر جدول امتیازات OpenLLM قرار دارد. با Axolotl، می‌توانید یک مدل را بدون نوشتن یک خط کد تنظیم کنید - فقط یک فایل پیکربندی YAML. در زیر config.yml است که ما استفاده خواهیم کرد:

 base_model: Qwen/Qwen2.5-3B-Instruct strict: false
# Axolotl will automatically map the dataset from HuggingFace to the prompt template of Qwen 2.5 chat_template: qwen_25 rl: dpo datasets: - path: olivermolenschot/alpaca_messages_dpo_test type: chat_template.default field_messages: conversation field_chosen: chosen field_rejected: rejected message_field_role: role message_field_content: content
# We pick a directory inside /workspace since that's typically where cloud hosts mount the volume output_dir: /workspace/dpo-output
# Qwen 2.5 supports up to 32,768 tokens with a max generation of 8,192 tokens sequence_len: 8192
# Sample packing does not currently work with DPO. Pad to sequence length is added to avoid a Torch bug sample_packing: false pad_to_sequence_len: true
# Add your WanDB account if you want to get nice reporting on your training performance wandb_project: wandb_entity: wandb_watch: wandb_name: wandb_log_model:
# Can make training more efficient by batching multiple rows together gradient_accumulation_steps: 1 micro_batch_size: 1
# Do one pass on the dataset. Can set to a higher number like 2 or 3 to do multiple num_epochs: 1
# Optimizers don't make much of a difference when training LLMs. Adam is the standard optimizer: adamw_torch
# DPO requires a smaller learning rate than regular SFT lr_scheduler: constant learning_rate: 0.00005
# Train in bf16 precision since the base model is also bf16 bf16: auto
# Reduces memory requirements gradient_checkpointing: true
# Makes training faster (only suported on Ampere, Ada, or Hopper GPUs) flash_attention: true
# Can save multiple times per epoch to get multiple checkpoint candidates to compare saves_per_epoch: 1
logging_steps: 1 warmup_steps: 0

راه اندازی محیط ابری

برای اجرای آموزش، از یک سرویس میزبانی ابری مانند Runpod یا Vultr استفاده می کنیم. در اینجا چیزی است که شما نیاز دارید:

تصویر داکر: تصویر winglian/axolotl-cloud:main Docker ارائه شده توسط تیم Axolotl را شبیه سازی کنید.

*نیازهای سخت افزاری: یک GPU VRAM 80 گیگابایتی (مانند یک گره PCIe 1×A100) برای این اندازه از یک مدل بیش از اندازه کافی خواهد بود.

فضای ذخیره سازی: 200 گیگابایت فضای ذخیره سازی حجمی تمام فایل های مورد نیاز ما را در خود جای می دهد.

نسخه CUDA: نسخه CUDA شما باید حداقل 12.1 باشد.

*این نوع آموزش به عنوان یک تنظیم کامل از LLM در نظر گرفته می شود و پس بسیار فشرده VRAM است. اگر می‌خواهید یک آموزش را به صورت محلی و بدون تکیه بر میزبان‌های ابری اجرا کنید، می‌توانید از QLoRA استفاده کنید، که نوعی تنظیم دقیق نظارتی است. اگرچه از نظر تئوری ترکیب DPO و QLoRA امکان پذیر است، اما این کار به ندرت انجام می شود.

مراحل شروع آموزش

    دایرکتوری کش HuggingFace را تنظیم کنید:

 export HF_HOME=/workspace/hf

این تضمین می کند که مدل اصلی در فضای ذخیره سازی حجمی ما بارگیری می شود که پایدار است.

    ایجاد فایل پیکربندی: فایل config.yml را که قبلا ایجاد کردیم در /workspace/config.yml ذخیره کنید.

    شروع آموزش:

 python -m axolotl.cli.train /workspace/config.yml

و voila! آموزش شما باید شروع شود. بعد از اینکه Axolotl مدل و داده های آموزش را دانلود کرد، باید خروجی مشابه این را ببینید:

 [2024-12-02 11:22:34,798] [DEBUG] [axolotl.train.train:98] [PID:3813] [RANK:0] loading model
[2024-12-02 11:23:17,925] [INFO] [axolotl.train.train:178] [PID:3813] [RANK:0] Starting trainer...

آموزش باید فقط چند دقیقه طول بکشد زیرا این مجموعه داده کوچکی از تنها 264 ردیف است. مدل دقیق تنظیم شده در /workspace/dpo-output ذخیره می شود.

بارگذاری مدل در HuggingFace

می توانید مدل خود را با استفاده از CLI در HuggingFace آپلود کنید:

    HuggingFace Hub CLI را نصب کنید:

 pip install huggingface_hub[cli]

    آپلود مدل:

 huggingface-cli upload /workspace/dpo-output yourname/yourrepo

نام کاربری/نام خود را با نام کاربری و نام مخزن واقعی HuggingFace جایگزین کنید.

ارزیابی مدل دقیق تنظیم شده شما

برای ارزیابی، توصیه می شود هر دو مدل اصلی و تنظیم شده را با استفاده از ابزاری مانند استنتاج تولید متن (TGI) میزبانی کنید. سپس، استنتاج را روی هر دو مدل با تنظیم دمای 0 انجام دهید (برای اطمینان از خروجی های قطعی) و به صورت دستی پاسخ های دو مدل را مقایسه کنید.

این رویکرد عملی بینش های بهتری را نسبت به تکیه بر معیارهای کاهش ارزشیابی آموزشی ارائه می دهد، که ممکن است تفاوت های ظریف تولید زبان در LLM را نشان ندهد.

نتیجه گیری

تنظیم دقیق یک LLM با استفاده از DPO به شما این امکان را می‌دهد که مدل‌ها را مطابق با نیازهای برنامه خود سفارشی کنید، در حالی که هزینه‌ها قابل مدیریت است. با دنبال کردن مراحل ذکر شده در این مقاله، می توانید از قدرت ابزارها و مجموعه داده های منبع باز استفاده کنید تا مدلی را ایجاد کنید که با نیازهای خاص شما هماهنگ باشد. چه به دنبال تنظیم سبک پاسخ‌ها یا اجرای اقدامات ایمنی باشید، DPO یک رویکرد عملی برای اصلاح LLM شما ارائه می‌کند.

تنظیم دقیق مبارک!

خبرکاو

ارسال نظر




تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است