پرش به محتوا
← همهٔ یادداشت‌ها

آموزش LoRA با Kohya's GUI: از ۲۰ عکس تا فایل نهایی

·۷ دقیقه مطالعه·تیم جی‌پی‌یو

کشوی چوبی یک کابینت موزه با ده‌ها پروانهٔ سنجاق‌شده در ردیف‌های منظم و برچسب‌های دست‌نویس زیر هرکدام.

با آموزش LoRA می‌توانید یک سبک، یک شیء یا یک شخصیت مشخص را به Stable Diffusion یاد بدهید، بدون اینکه کل مدل را دوباره آموزش بدهید. خروجی کار یک فایل کوچک safetensors چند ده مگابایتی است که بعداً در ComfyUI یا Forge کنار مدل پایه بارگذاری می‌شود. در این آموزش با قالب آمادهٔ Kohya's GUI روی یک کارت گرافیک ابری اجاره‌ای، از جمع‌آوری حدود ۲۰ عکس تا گرفتن فایل نهایی پیش می‌رویم.

کل کار روی یک ماشین متوسط حدود دو تا سه ساعت طول می‌کشد که بیشترش صرف آماده‌سازی عکس‌ها می‌شود؛ خودِ آموزش روی یک کارت ۲۴ گیگابایتی برای یک دیتاست ۲۰ عددی معمولاً بین ۲۰ تا ۴۰ دقیقه است. چون هزینه ساعتی و تومانی حساب می‌شود، یک آموزش کامل با اجارهٔ GPU ساعتی چند ده هزار تومان در می‌آید. فقط یک نکتهٔ مهم: دیتاست باید متعلق به خودتان باشد — عکس‌های خودتان، محصول خودتان، یا آثار خودتان. از عکس افراد دیگر LoRA نسازید.

پیش‌نیازها

  • یک حساب در جی‌پی‌یو؛ اگر هنوز ندارید از صفحهٔ ثبت‌نام شروع کنید.
  • یک کلید عمومی SSH ثبت‌شده در /account. ورود به ماشین فقط با کلید انجام می‌شود و رمز عبوری وجود ندارد. جزئیاتش در پست شروع اجاره GPU: اولین ماشین در ۱۰ دقیقه آمده است.
  • موجودی کیف پول. برای این آموزش حدود ۱۰۰ هزار تومان راحت جواب می‌دهد. برای شروع هر ماشین باید حداقل به اندازهٔ یک ساعت از نرخ همان ماشین موجودی داشته باشید.
  • حدود ۲۰ تصویر از سوژه‌تان، ترجیحاً با نور و زاویهٔ متفاوت.

انتخاب ماشین مناسب

آموزش LoRA برخلاف ساخت تصویر، حافظهٔ کارت گرافیک را واقعاً پر می‌کند. برای LoRA روی مدل‌های خانوادهٔ Stable Diffusion 1.5 در رزولوشن ۵۱۲، یک کارت ۱۲ گیگابایتی کافی است. برای SDXL در رزولوشن ۱۰۲۴ روی ۲۴ گیگابایت برنامه‌ریزی کنید تا وسط کار به خطای حافظه نخورید.

در بازار GPU در زمان نوشتن این مطلب، RTX 3060 با ۱۲ گیگابایت VRAM از حدود ۱۵ هزار تومان در ساعت شروع می‌شود که گزینهٔ اقتصادی برای LoRAهای ۵۱۲ است. RTX A4000 با ۱۶ گیگابایت از حدود ۲۳ هزار تومان در ساعت در می‌آید. اگر SDXL می‌خواهید، RTX 3090 با ۲۴ گیگابایت از حدود ۳۱ هزار تومان در ساعت انتخاب متعادلی است و RTX 4090 از حدود ۱۱۳ هزار تومان در ساعت، سریع‌ترین حالت — همهٔ این نرخ‌ها در زمان نوشتن این مطلب. قیمت لحظهٔ اجاره قفل می‌شود و بعد از آن تغییر نمی‌کند. اگر در انتخاب کارت شک دارید، راهنمای انتخاب کارت گرافیک هوش مصنوعی را ببینید.

اجاره و راه‌اندازی قالب

در صفحهٔ ماشین موقع اجاره، قالب Kohya's GUI را انتخاب کنید تا ماشین با همان نرم‌افزار بالا بیاید و لازم نباشد چیزی نصب کنید. بعد از چند دقیقه وضعیت ماشین «آماده» می‌شود و صفحهٔ ماشین دستور SSH، لینک Jupyter، دکمهٔ «پنل ماشین» و فهرست «پورت‌های منتشرشده» را به شما می‌دهد؛ همه یک‌کلیک کپی می‌شوند.

ساده‌ترین راه، زدن دکمهٔ «پنل ماشین» است. اگر ترجیح می‌دهید رابط وب را از روی SSH باز کنید، دستور «تونل امن» همان صفحه را کپی کنید؛ Kohya's GUI به‌صورت پیش‌فرض روی پورت 7860 گوش می‌دهد. اگر لازم شد خودتان رابط را دوباره بالا بیاورید، در پوشهٔ نصب Kohya روی ماشین این را بزنید:

./gui.sh --listen 0.0.0.0 --server_port 7860 --headless

پرچم --headless برای اجرای راه دور ضروری است؛ بدون آن، پنجره‌های انتخاب فایل سیستم‌عامل منتظر می‌مانند و روند آموزش قفل می‌شود.

آماده‌سازی دیتاست

Kohya ساختار پوشه را جدی می‌گیرد و تعداد تکرار هر عکس را از نام پوشه می‌خواند. یک پوشهٔ پروژه با سه زیرپوشه بسازید:

mkdir -p ~/lora/myconcept/{img,log,model}
mkdir -p "$HOME/lora/myconcept/img/10_myconcept style"

عدد ابتدای نام پوشه یعنی هر عکس در هر epoch چند بار دیده شود. با ۲۰ عکس و تکرار ۱۰، در هر epoch دویست قدم آموزش انجام می‌شود. کلمهٔ بعد از زیرخط، نام مفهوم شماست؛ همان کلمه‌ای که بعداً در پرامپت صدایش می‌زنید. یک کلمهٔ نامتداول انتخاب کنید تا با چیزی که مدل از قبل بلد است قاطی نشود.

عکس‌ها را با همان scp معمولی بالا بفرستید. اگر با انتقال فایل آشنا نیستید، پست دانلود مدل هوش مصنوعی روی سرور GPU: scp و rsync همه‌چیز را توضیح داده است:

scp -P <PORT> ./photos/*.jpg <USER>@<HOST>:'~/lora/myconcept/img/10_myconcept style/'

مقدار <USER>، <HOST> و <PORT> را از همان دستور SSH آمادهٔ صفحهٔ ماشین بردارید.

کپشن‌گذاری تصویرها

کنار هر تصویر یک فایل متنی هم‌نام با پسوند .txt بگذارید؛ مثلاً برای image1.jpg فایل image1.txt. اگر این فایل وجود داشته باشد، محتوای آن به‌جای نام پوشه به‌عنوان توضیح تصویر استفاده می‌شود. کپشن خوب، چیزهایی را توصیف می‌کند که نمی‌خواهید مدل یادشان بگیرد: پس‌زمینه، زاویه، نور. هرچه را می‌خواهید بخشی از مفهوم بماند، توصیف نکنید.

در خود رابط Kohya's GUI هم زبانهٔ کپشن‌گذاری خودکار وجود دارد که با BLIP یا WD14 برای همهٔ تصویرها فایل متنی می‌سازد. خروجی‌اش را حتماً یک بار دستی مرور کنید؛ معمولاً چند کپشن اشتباه دارد.

تنظیمات آموزش

در رابط وب به زبانهٔ LoRA بروید و مسیرهای img، log و model را به همان پوشه‌هایی که ساختید وصل کنید. مدل پایه را همان مدلی بگذارید که بعداً قرار است LoRA کنارش استفاده شود. این مقادیر نقطهٔ شروع مطمئنی برای اولین تلاش هستند:

  • رزولوشن: ۵۱۲ برای مدل‌های ۱.۵ و ۱۰۲۴ برای SDXL
  • Network Rank (Dimension): ۳۲ و Network Alpha: ۱۶
  • نرخ یادگیری: 1e-4 برای مدل‌های ۱.۵
  • بهینه‌ساز: AdamW8bit
  • اندازهٔ دسته (batch size): ۱ و تعداد epoch: ۱۰
  • ذخیرهٔ خروجی در هر epoch، تا اگر آخری بیش‌ازحد آموزش‌دیده شد، نسخه‌های میانی را داشته باشید

با ۲۰ عکس، تکرار ۱۰ و ۱۰ epoch در مجموع حدود دو هزار قدم آموزش می‌بینید که برای یک سبک یا یک شیء کافی است.

شروع آموزش و گرفتن خروجی

دکمهٔ Start training را بزنید و به‌جای پنجرهٔ مرورگر، لاگ ترمینال را نگاه کنید؛ آنجا سرعت هر قدم و مقدار loss را می‌بینید. در یک ترمینال SSH دیگر هم می‌توانید مصرف حافظه را ببینید:

watch -n 2 nvidia-smi

وقتی کار تمام شد، فایل‌های .safetensors در پوشهٔ model ساخته می‌شوند. قبل از حذف ماشین حتماً آن‌ها را پایین بکشید، چون دیسک ماشین با حذف ماشین پاک می‌شود و فضای ذخیره‌سازی دائمی وجود ندارد:

scp -P <PORT> '<USER>@<HOST>:~/lora/myconcept/model/*.safetensors' ./

برای تست، فایل را در ComfyUI با گرهٔ Load LoRA امتحان کنید؛ روش کارش در پست نصب مدل و LoRA از Civitai در ComfyUI روی GPU ابری توضیح داده شده است.

اگر به مشکل خوردید

  • CUDA out of memory: اندازهٔ دسته را روی ۱ بگذارید، رزولوشن را پایین بیاورید، یا گزینهٔ gradient checkpointing را روشن کنید. اگر باز هم تکرار شد، کارت با VRAM بیشتر اجاره کنید.
  • پیام «هیچ تصویری پیدا نشد»: تقریباً همیشه مشکل نام پوشه است. باید دقیقاً <عدد>_<نام> باشد و مسیر img به پوشهٔ والد آن اشاره کند، نه به خود پوشهٔ عددی.
  • باز نشدن رابط وب: مطمئن شوید با --listen 0.0.0.0 اجرا شده و پورت در فهرست «پورت‌های منتشرشده» صفحهٔ ماشین هست؛ در غیر این صورت از دستور تونل امن استفاده کنید.
  • خروجی همه‌چیز را شبیه دیتاست می‌کند: بیش‌ازحد آموزش دیده. نسخهٔ epochهای میانی را امتحان کنید یا تکرار را کم کنید.

هزینه و صرفه‌جویی

عکس‌ها را روی لپ‌تاپ خودتان آماده و کپشن‌گذاری کنید، نه روی ماشین اجاره‌ای؛ کارت گرافیک فقط برای خودِ آموزش لازم است. ماشین را بعد از گرفتن خروجی متوقف یا حذف کنید، چون هزینه فقط در حالت «در حال اجرا» دقیقه‌ای کم می‌شود. یک آموزش دو هزار قدمی روی یک کارت ۲۴ گیگابایتی معمولاً کمتر از یک ساعت طول می‌کشد؛ با نرخ‌های بالا یعنی چند ده هزار تومان برای کل کار.

قدم بعدی

اگر می‌خواهید سراغ LoRA برای FLUX.1 بروید، قالب Flux Gym برای همین ساخته شده و به کارت ۲۴ گیگابایتی نیاز دارد. برای دیدن اینکه LoRA ساخته‌شده در یک ورک‌فلو کامل چطور استفاده می‌شود هم آموزش ComfyUI روی GPU ابری: اولین تصویر با SDXL را ببینید.

پرسش‌های متداول

آموزش LoRA چقدر طول می‌کشد؟

برای یک دیتاست ۲۰ تصویری با حدود دو هزار قدم، روی یک کارت ۲۴ گیگابایتی معمولاً بین ۲۰ تا ۴۰ دقیقه. روی کارت‌های ۱۲ گیگابایتی و در رزولوشن ۵۱۲ زمان بیشتر می‌شود ولی هزینهٔ ساعتی کمتر است.

برای آموزش LoRA چقدر VRAM لازم است؟

برای مدل‌های خانوادهٔ ۱.۵ در رزولوشن ۵۱۲، ۱۲ گیگابایت کافی است. برای SDXL در رزولوشن ۱۰۲۴ روی ۲۴ گیگابایت حساب کنید.

چند عکس برای آموزش LoRA لازم است؟

برای یک شیء یا یک سبک، ۱۵ تا ۳۰ تصویر باکیفیت و متنوع معمولاً بهتر از صد تصویر تکراری جواب می‌دهد. تنوع نور، زاویه و پس‌زمینه مهم‌تر از تعداد است.

آیا می‌توانم بدون کارت گرافیک LoRA آموزش بدهم؟

روی CPU عملاً نه. اما لازم نیست کارت بخرید؛ با اجاره کارت گرافیک ساعتی، ماشین را فقط برای همان یک ساعت آموزش بالا می‌آورید و بعد حذفش می‌کنید.

فایل LoRA بعد از آموزش کجاست؟

در زیرپوشهٔ model پروژه، با پسوند .safetensors. حتماً قبل از حذف ماشین آن را دانلود کنید، چون دیسک ماشین با حذف ماشین پاک می‌شود.

تصویر کاور: «JJ Joicey cabinet Haslemere Educational Museum drawer no 14» اثر Haslemere Educational Museum، از ویکی‌مدیا کامنز، لایسنس CC BY-SA 4.0.