پرش به محتوای اصلی
پرش به محتوای مقاله

یک GPU واحد برای تنظیم دقیق Qwen3 در محیط گوگل کولب

·۲۸ تیر ۱۴۰۵۷ دقیقه مطالعه۱ بازدید
راهنما
آموزش تنظیم دقیق Qwen3 با LoRA در Google Colab با یک GPU
آموزش تنظیم دقیق Qwen3 با LoRA در Google Colab با یک GPU
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

ایجاد یک لایه انتزاعی (Abstraction Layer) با استفاده از YAML که اجازه می‌دهد یک دستور آموزش یکسان، هم روی یک GPU رایگان کولب و هم روی خوشه‌های هزارتایی GPU بدون تغییر کد اجرا شود.

اگر تا امروز تصور می‌کردید برای آموزش مدل‌های زبانی به خوشه‌های گران‌قیمت پردازشی نیاز دارید، باید بدانید که یک GPU رایگان در گوگل کولب اکنون برای اجرای یک خط لوله تولیدی (Production-grade) کافی است. طبق گزارش Marktechpost، چارچوب NVIDIA NeMo AutoModel این امکان را فراهم کرده تا توسعه‌دهندگان بتوانند بدون درگیری با زیرساخت‌های پیچیده، مدل Qwen3-0.6B را شخصی‌سازی کنند. این گردش‌کار اجازه می‌دهد یک آداپتور LoRA (Low-Rank Adaptation) با بهره‌وری بالا در پارامترها ساخته شود، به شرطی که از یک رویکرد مبتنی بر پیکربندی (Configuration-driven) استفاده شود.

در دنیای هوش مصنوعی، تنظیم دقیق (Fine-tuning) — شبیه وقتی به یک پزشک عمومی، تخصص پوست می‌دهیم تا روی یک حوزه خاص خبره شود — همواره مرزی میان شرکت‌های غول‌پیکر با توان پردازشی عظیم و پژوهشگران مستقل بود که از نوت‌بوک‌های محدود استفاده می‌کردند. این رویکرد با حذف موانع سخت‌افزاری محلی برای آموزش مدل‌های سفارشی، دسترسی به تکنولوژی‌های پیشرفته را دموکراتیزه کرده است. همان‌طور که در تحلیل‌های پیشین ما اشاره کردیم، گلوگاه اصلی برای خلق‌کنندگان محتوا و توسعه‌دهندگان، اغلب اصطکاک فنی در انتقال از یک آزمایش محلی به یک استقرار مقیاس‌پذیر است. انویدیا با جداسازی استراتژی آموزش از کد برنامه از طریق دستورالعمل‌های YAML، این مشکل را حل کرده است.

جزئیات فنی و فرآیند استقرار
بر اساس مستندات و آموزش منتشر شده توسط Marktechpost، این گردش‌کار با یک بررسی دقیق محیطی آغاز می‌شود. کاربران باید در دسترس بودن CUDA و پشتیبانی از bfloat16 را تأیید کنند تا اطمینان یابند سخت‌افزار می‌تواند الزامات دقت (Precision) مدل را مدیریت کند. سیستم به‌طور مشخص نام GPU، مجموع حافظه VRAM بر حسب گیگابایت و مقدار بازگشتی تابع torch.cuda.is_bf16_supported() را بررسی می‌کند.

فرآیند با تعریف دایرکتوری‌های کلیدی برای سازماندهی فضای کاری شروع می‌شود: یک دایرکتوری برای مخزن (/content/Automodel)، یک دایرکتوری کاری (/content/automodel_demo) و یک دایرکتوری اختصاصی برای نقاط بازرسی (/content/automodel_demo/checkpoints).

برای مدیریت بهینه دستورات شل (Shell)، این سیستم از یک تابع بازیافتی به نام sh استفاده می‌کند. این تابع کمکی از subprocess.Popen برای استریم کردن خروجی دستورات در لحظه استفاده می‌کند و اگر دستوری با خطا مواجه شود، یک RuntimeError ایجاد می‌کند. این کار تضمین می‌کند که هرگونه خطای نصب بلافاصله شناسایی شود و سیستم به‌طور خاموش با خطا مواجه نشود.

نصب شامل کلون کردن مخزن NeMo AutoModel مستقیماً از گیت‌هاب با عمق ۱ (depth 1) است تا در زمان و فضای دیسک صرفه‌جویی شود. این کار تضمین می‌کند که آخرین کد منبع استفاده شود و سپس بسته در حالت قابل ویرایش (editable mode) از طریق pip -q install -e نصب می‌گردد. کتابخانه‌های پشتیبان شامل pyyaml و تنظیم کارآمد با پارامتر اندک (PEFT) نیز نصب می‌شوند. در نهایت، نصب با وارد کردن nemo_automodel و چاپ ویژگی نسخه (version) تأیید می‌شود.

دستکاری دستورالعمل‌ها برای سخت‌افزار محدود
مرکز این سیستم «دستورالعمل» یا Recipe است؛ یک فایل YAML که مدل، مجموعه داده و بهینه‌ساز را تعریف می‌کند. گردش‌وار در دایرکتوری examples/llm_finetune/qwen در مخزن (یا به‌صورت بازگشتی در تمام پوشه‌های llm_finetune) به‌دنبال دستورالعمل‌های رسمی PEFT برای مدل 0.6B می‌گردد. از آنجا که دستورالعمل‌های رسمی اغلب برای محیط‌های با توان پردازشی بالا طراحی شده‌اند، این گردش‌وار از یک گام اصلاحی برنامه‌ریزی شده با استفاده از یک تابع بازگشتی patch استفاده می‌کند:

  • اصلاح دقت (Precision): اگر GPU از bf16 پشتیبانی نکند، سیستم به‌صورت بازگشتی در فایل YAML جستجو کرده و رشته‌هایی مانند "bf16"، "bfloat16" یا "torch.bfloat16" را به "float32" تغییر می‌دهد.
  • بهینه‌سازی اندازه دسته (Batch Size): برای جلوگیری از خطای کمبود حافظه (OOM) در کولب، مقدار local_batch_size حداکثر به ۴ و global_batch_size حداکثر به ۸ محدود می‌شود.
  • کنترل مدت زمان: مقدار step_scheduler به‌طور صریح تغییر می‌یابد تا آموزش دقیقاً به ۴۰ گام (max_steps) محدود شود. برای تضمین ذخیره وضعیت، ckpt_every_steps نیز روی ۴۰ تنظیم شده و num_epochs برابر با ۱ قرار می‌گیرد.
  • سیستم ذخیره‌سازی: دیکشنری checkpoint به‌طور صریح فعال شده (enabled: True) و مستقیماً به CKPT_DIR تعیین‌شده اشاره می‌کند تا اطمینان حاصل شود که آداپتور به‌درستی ذخیره می‌گردد.

پس از اصلاح، پیکربندی نهایی در فایلی به نام qwen3_0p6b_colab_lora.yaml ذخیره شده و شناسه مدل پایه (Qwen/Qwen3-0.6B) برای استفاده‌های بعدی استخراج می‌شود.

آموزش بر روی مجموعه داده HellaSwag
این گردش‌وار از مجموعه داده HellaSwag برای ارزیابی استدلال مدل در زمینه درک مشترک (Commonsense Reasoning) استفاده می‌کند. تنظیم دقیق از طریق رابط خط فرمان (CLI) automodel اجرا می‌شود که دستورالعمل YAML اصلاح‌شده را پردازش می‌کند.

برای حفظ پایداری در محیط کولب و جلوگیری از رفتارهای نامنظم، چندین متغیر محیطی تنظیم می‌شوند: HF_HUB_ENABLE_HF_TRANSFER روی ۰ و TOKENIZERS_PARALLELISM روی false قرار می‌گیرند. این کار باعث می‌شود جریان لاگ‌های آموزشی قابل‌پیش‌بینی باشد.

سیستم همچنین شامل یک مکانیزم پشتیبان (Fallback) برای تضمین سازگاری با نسخه‌های مختلف ابزار است؛ اگر دستور اصلی automodel [recipe] شکست بخورد، سیستم مجدداً با استفاده از نحو قدیمی CLI تلاش می‌کند: automodel finetune llm -c [recipe].

ارزیابی و استنتاج
پس از اتمام آموزش، سیستم به‌دنبال نقطه بازرسی (Checkpoint) تولید شده توسط LoRA می‌گردد. این جستجو به‌صورت بازگشتی برای یافتن آخرین دایرکتوری حاوی پوشه model یا فایل adapter_model.safetensors انجام می‌شود. سپس کتابخانه PEFT این آداپتور را با استفاده از PeftModel.from_pretrained به مدل پایه Qwen3-0.6B متصل می‌کند.

ارزیابی با مقایسه پاسخ مدل پایه به یک پرامپت خاص انجام می‌شود: "مردی روی پشت‌بام نشسته است. او شروع به کندن تکه‌های پوشش پشت‌بام می‌کند. بعد چه اتفاقی می‌افتد؟"

برای تضمین یک تست علمی و منصفانه، تابع generate از تنظیمات قطعی (Deterministic) استفاده می‌کند:

  • do_sample=False: این گزینه نمونه‌برداری احتمالی را غیرفعال می‌کند.
  • temperature=None و top_p=None: این مقادیر حذف می‌شوند تا خروجی ثابت بماند.
  • max_new_tokens=60: طول پاسخ را محدود می‌کند.

این تنظیمات به توسعه‌دهندگان اجازه می‌دهد دقیقاً ببینند تطبیق LoRA چگونه خروجی مدل را تغییر می‌دهد. پس از ارزیابی، مدل پایه حذف شده و دستور torch.cuda.empty_cache() فراخوانی می‌شود تا VRAM برای دمو API نهایی آزاد شود.

پل ارتباطی API پایتون
علاوه بر CLI، این چارچوب کلاس NeMoAutoModelForCausalLM را ارائه می‌دهد. این API پایتون به عنوان یک جایگزاز مستقیم (Drop-in replacement) برای رابط آشنای Hugging Face عمل می‌کند و به کاربران اجازه می‌دهد مسیرهای اجرای بهینه‌شده انویدیا را بارگذاری کنند، در حالی که همچنان از یک الگوی کدنویسی استاندارد پیروی می‌کنند.

در دموی تکمیلی، مدل از طریق NeMoAutoModelForCausalLM.from_pretrained(MODEL_ID) بارگذاری شده و به CUDA منتقل می‌شود. برای تست قابلیت‌های آن، پرامپتی درباره «ایده کلیدی LoRA» استفاده می‌شود. این موضوع نشان می‌دهد که چارچوب مذکور، API بصری مورد انتظار کاربران از اکوسیستم Hugging Face را حفظ کرده، در حالی که در لایه‌های زیرین از عملکرد NeMo بهره می‌برد. این پیاده‌سازی شامل بلوک‌های try-except برای مدیریت متوجهانه شکست‌های مربوط به نسخه یا سخت‌افزار است.

مقیاس‌پذیری به سمت تولید
مهم‌ترین بینش این گردش‌وار مقیاس‌پذیری آن است. دقیقاً همان دستورالعمل YAML که در یک نوت‌بوک تک-GPU کولب استفاده شد، می‌تواند با استفاده از فلگ --nproc-per-node 8 روی ۸ پردازنده گرافیکی مستقر شود. این امر نیاز به بازنویسی اسکریپت‌های آموزش هنگام انتقال از نوت‌بوک به یک خوشه تولیدی را از بین می‌برد.

گزینه‌های مقیاس‌افزایی (Scale-out) داخلی و بسیار منعطف هستند و موارد زیر را پشتیبانی می‌کنند:

  • تک-گره چند-GPU: استفاده از فلگ --nproc-per-node برای مقیاس‌بندی محلی.
  • خوشه‌های چند-گره (Multi-node): استفاده از فایل‌های ارسالی slurm.sub برای محیط‌های HPC.
  • ارکستراسیون ابری: استقرار از طریق SkyPilot یا لانچرهای Kubernetes.
  • موازی‌سازی پیشرفته: ساختار زیربنایی مبتنی بر SPMD از استقرارهای FSDP2، موازی‌سازی تنسور (Tensor-parallel)، موازی‌سازی کانتکست (Context-parallel)، موازی‌سازی توالی (Sequence-parallel) و موازی‌سازی خط لوله (Pipeline-parallel) پشتیبانی می‌کند.

گسترش دامنه کاربرد
این چارچوب تنها محدود به Qwen نیست. مخزن دستورالعمل‌های گسترده‌ای را در دایرکتوری examples/ برای مودالیته‌های مختلف ارائه می‌دهد:

  • تنظیم دقیق LLM (llm_finetune/): پشتیبانی از SFT و LoRA برای Llama، Qwen، Gemma، Phi و GPT-OSS.
  • پیش-آموزش LLM (llm_pretrain/): مثال‌هایی مانند nanoGPT روی FineWeb و پیش-آموزش DeepSeek-V3.
  • مدل‌های زبان-بینایی (VLM) (vlm_finetune/): پشتیبانی از تنظیم دقیق برای Qwen-VL و Gemma-3-VL.
  • مدل‌های انتشار (Diffusion) (diffusion/): تنظیم دقیق LoRA برای FLUX، Wan و Qwen-Image. این قابلیت‌ها در واقع بخشی از استراتژی گسترده‌تر انویدیا است که محدودیت‌های مقیاس‌پذیری در آموزش مدل‌های پخش (Diffusion) را نیز برطرف می‌کند تا آموزش در ابعاد صنعتی ممکن شود.

این تطابق‌پذیری نشان می‌دهد که انویدیا در حال جایگاه‌سازی AutoModel به عنوان یک «چسب جهانی» میان توزیع مدل‌های Hugging Face و زیرساخت‌های پردازشی با کارایی بالای انویدیا است. با انتزاع پیکربندی سخت‌افزاری در یک فایل YAML، مانع ورود به تنظیمات دقیق پیشرفته به‌طور قابل توجهی کاهش یافته است. برای کسانی که به دنبال بهینه‌سازی استقرارهای خود هستند، گام بعدی بررسی مستندات رسمی NVIDIA NeMo یا استفاده از بازنویسی --model.pretrained_model_name_or_path برای جایگزینی مدل پایه با هر مدل زبانی Hugging Face است.

نتیجه‌گیری
در مجموع، ما یک خط لوله عملی NeMo AutoModel را ایجاد کردیم که شامل اعتبارسنجی محیط، نصب منبع، بررسی دستورالعمل، اصلاح پیکربندی، آموزش LoRA، بازیابی نقطه بازرسی، ارزیابی مدل و استنتاج مستقیم API پایتون بود. مشاهده کردیم که NeMo AutoModel چگونه استراتژی آموزش توزیع‌شده را از کد برنامه جدا کرده و مدل، مجموعه داده، بهینه‌ساز، دقت، موازی‌سازی و رفتار نقاط بازرسی را از طریق دستورالعمل‌های YAML قابل استفاده تعریف می‌کند.

اگرچه ما این گردش‌وار را روی یک GPU واحد در کولب اجرا کردیم، اما همان ساختار مبتنی بر SPMD را حفظ کردیم که برای استقرار‌های بزرگتر FSDP2 و موازی‌سازی تنسور استفاده می‌شود. این به ما یک نقطه شروع فنی برای تطبیق دستورالعمل‌های اضافی مدل‌های زبانی، بینایی-زبانی، پیش-آموزش و انتشار می‌دهد، در حالی که می‌توانیم همین گردش‌وار را از مرحله آزمایش تا زیرساخت‌های چند-گره انویدیا مقیاس‌بندی کنیم.

چرا این موضوع مهم است؟

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

تأثیر برای ایران

به‌دلیل دسترسی رایگان گوگل کولب و ماهیت متن‌باز دستورالعمل‌های NeMo، توسعه‌دهندگان ایرانی می‌توانند بدون نیاز به سرمایه‌گذاری سنگین سخت‌افزاری، مدل‌های تخصصی Qwen3 را برای کاربردهای فارسی بهینه‌سازی کنند.

·نگاه ما
تحریریه دات‌هوش

جداسازی استراتژی آموزش از منطق کد از طریق YAML، در واقع تبدیلِ فرآیند مهندسی مدل به یک فرآیند پیکربندی (Configuration) است. این حرکت انویدیا نشان می‌دهد که هدف نهایی، حذف لایه برنامه‌نویسی زیرساختی برای توسعه‌دهنده و تبدیل GPU به یک کالای مصرفی ساده است که تنها با تغییر یک فایل متنی، از حالت آزمایشگاهی به حالت صنعتی تغییر وضعیت می‌دهد.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.