يعد SegMoE إطارًا مثيرًا لإنشاء نماذج نشر مزيج من الخبراء من الصفر! تم دمج SegMoE بشكل شامل ضمن النظام البيئي Hugging Face ويأتي مدعومًا
diffusers 🔥!من بين الميزات والتكاملات التي تم إصدارها اليوم:
جدول المحتويات
ما هو SegMoE؟
تتبع نماذج SegMoE نفس بنية Stable Diffusion. مثل Mixtral 8x7b، يأتي نموذج SegMoE مع نماذج متعددة في واحد. الطريقة التي يعمل بها هذا هي استبدال بعض طبقات التغذية الأمامية بطبقة MoE متفرقة. تحتوي طبقة MoE على شبكة توجيه لتحديد الخبراء الذين يقومون بمعالجة الرموز المميزة بكفاءة أكبر. يمكنك استخدام segmoe حزمة لإنشاء نماذج وزارة التربية والتعليم الخاصة بك! تستغرق العملية بضع دقائق فقط. لمزيد من المعلومات، يرجى زيارة مستودع جيثب. نحن نستلهم من المكتبة الشعبية mergekit للتصميم segmoe. ونحن نشكر المساهمين في mergekit لمثل هذه المكتبة المفيدة.
لمزيد من التفاصيل حول وزارة التربية والتعليم، راجع منشور “الوجه المعانق” 🤗: hf.co/blog/moe.
إصدار SegMoE TL;DR;
- إطلاق إصدارات SegMoE-4×2 وSegMoE-2×1 وSegMoE-SD4x2
- إصدار كود مخصص لوزارة التربية والتعليم
حول الاسم
يتم استدعاء SegMoE MoEs SegMoE-AxB، أين A ويشير إلى عدد نماذج الخبراء MoE-d معًا، بينما يشير الرقم الثاني إلى عدد الخبراء المشاركين في توليد كل صورة. يتم نسخ بعض طبقات النموذج فقط (كتل التغذية الأمامية، أو الانتباه، أو الكل) اعتمادًا على إعدادات التكوين؛ بقية المعلمات هي نفسها كما في نموذج الانتشار المستقر. لمزيد من التفاصيل حول كيفية عمل وزارة التربية والتعليم، يرجى الرجوع إلى منشور “شرح مزيج من الخبراء”.
الاستدلال
نقوم بإصدار 3 عمليات دمج على المحور:
- يحتوي SegMoE 2×1 على نموذجين متخصصين.
- يحتوي SegMoE 4×2 على أربعة نماذج متخصصة.
- يحتوي SegMoE SD 4×2 على أربعة نماذج متخصصة من نوع Stable Diffusion 1.5.
عينات
الصور التي تم إنشاؤها باستخدام SegMoE 4×2
الصور التي تم إنشاؤها باستخدام SegMoE 2×1:

الصور التي تم إنشاؤها باستخدام SegMoE SD 4×2

باستخدام 🤗 الناشرون
من فضلك، قم بتشغيل الأمر التالي لتثبيت segmoe طَرد. تأكد من أن لديك أحدث إصدار من diffusers و transformers مثبتة.
pip install -U segmoe diffusers transformers
يقوم ما يلي بتحميل النموذج الثاني (“SegMoE 4×2”) من القائمة أعلاه، وتشغيل عملية التوليد عليه.
from segmoe import SegMoEPipeline
pipeline = SegMoEPipeline("segmind/SegMoE-4x2-v0", device="cuda")
prompt = "cosmic canvas, orange city background, painting of a chubby cat"
negative_prompt = "nsfw, bad quality, worse quality"
img = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
height=1024,
width=1024,
num_inference_steps=25,
guidance_scale=7.5,
).images[0]
img.save("image.png")
باستخدام نموذج محلي
وبدلاً من ذلك، يمكن أيضًا تحميل نموذج محلي هنا segmoe_v0 هو المسار إلى الدليل الذي يحتوي على نموذج SegMoE المحلي. الخروج من إنشاء SegMoE الخاص بك لتتعلم كيفية بناء SegMoE الخاص بك!
from segmoe import SegMoEPipeline
pipeline = SegMoEPipeline("segmoe_v0", device="cuda")
prompt = "cosmic canvas, orange city background, painting of a chubby cat"
negative_prompt = "nsfw, bad quality, worse quality"
img = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
height=1024,
width=1024,
num_inference_steps=25,
guidance_scale=7.5,
).images[0]
img.save("image.png")
مقارنة
يبدو أن الفهم الفوري يتحسن، كما هو موضح في الصور أدناه. تعرض كل صورة النماذج التالية من اليسار إلى اليمين: SegMoE-2×1-v0، SegMoE-4×2-v0، Base Model (RealVisXL_V3.0)
ثلاث قوارير زجاجية خضراء
دب الباندا مع نظارات الطيار على رأسه
تمثال الحرية بجوار نصب واشنطن التذكاري
تاج محل مع انعكاسه. رسم الفحم التفصيلي.
إنشاء SegMoE الخاص بك
ببساطة قم بإعداد أ config.yaml الملف، مع البنية التالية:
base_model: Base Model Path, Model Card or CivitAI Download Link
num_experts: Number of experts to use
moe_layers: Type of Layers to Mix (can be "ff", "attn" or "all"). Defaults to "attn"
num_experts_per_tok: Number of Experts to use
experts:
- source_model: Expert 1 Path, Model Card or CivitAI Download Link
positive_prompt: Positive Prompt for computing gate weights
negative_prompt: Negative Prompt for computing gate weights
- source_model: Expert 2 Path, Model Card or CivitAI Download Link
positive_prompt: Positive Prompt for computing gate weights
negative_prompt: Negative Prompt for computing gate weights
- source_model: Expert 3 Path, Model Card or CivitAI Download Link
positive_prompt: Positive Prompt for computing gate weights
negative_prompt: Negative Prompt for computing gate weights
- source_model: Expert 4 Path, Model Card or CivitAI Download Link
positive_prompt: Positive Prompt for computing gate weights
negative_prompt: Negative Prompt for computing gate weights
يمكن دمج أي عدد من النماذج. للحصول على معلومات مفصلة حول كيفية إنشاء ملف التكوين، يرجى الرجوع إلى مستودع جيثب
ملحوظة
يتم دعم كلا الطرازين Hugging Face وCivitAI. بالنسبة لنماذج CivitAI، قم بلصق رابط تنزيل النموذج، على سبيل المثال: “https://civitai.com/api/download/models/239306”
ثم قم بتشغيل الأمر التالي:
segmoe config.yaml segmoe_v0
سيؤدي هذا إلى إنشاء مجلد يسمى segmoe_v0 مع الهيكل التالي:
├── model_index.json
├── scheduler
│ └── scheduler_config.json
├── text_encoder
│ ├── config.json
│ └── model.safetensors
├── text_encoder_2
│ ├── config.json
│ └── model.safetensors
├── tokenizer
│ ├── merges.txt
│ ├── special_tokens_map.json
│ ├── tokenizer_config.json
│ └── vocab.json
├── tokenizer_2
│ ├── merges.txt
│ ├── special_tokens_map.json
│ ├── tokenizer_config.json
│ └── vocab.json
├── unet
│ ├── config.json
│ └── diffusion_pytorch_model.safetensors
└──vae
├── config.json
└── diffusion_pytorch_model.safetensors
وبدلاً من ذلك، يمكنك أيضًا استخدام Python API لإنشاء مزيج من نماذج الخبراء:
from segmoe import SegMoEPipeline
pipeline = SegMoEPipeline("config.yaml", device="cuda")
pipeline.save_pretrained("segmoe_v0")
ادفع إلى المحور
يمكن دفع النموذج إلى المركز عبر Huggingface-cli
huggingface-cli upload segmind/segmoe_v0 ./segmoe_v0
يمكن أيضًا دفع النموذج إلى Hub مباشرة من Python:
from huggingface_hub import create_repo, upload_folder
model_id = "segmind/SegMoE-v0"
repo_id = create_repo(repo_id=model_id, exist_ok=True).repo_id
upload_folder(
repo_id=repo_id,
folder_path="segmoe_v0",
commit_message="Initial Commit",
ignore_patterns=["step_*", "epoch_*"],
)
الاستخدام التفصيلي يمكن العثور عليه هنا
إخلاء المسؤولية والعمل المستمر
-
سرعة أبطأ: إذا كان عدد الخبراء لكل رمز أكبر من 1، تقوم وزارة التعليم بإجراء عملية حسابية عبر العديد من نماذج الخبراء. وهذا يجعله أبطأ من طراز SD 1.5 أو SDXL واحد.
-
ارتفاع استخدام VRAM: تقوم MoEs بتشغيل الاستدلال بسرعة كبيرة ولكنها لا تزال بحاجة إلى كمية كبيرة من VRAM (وبالتالي وحدة معالجة الرسومات باهظة الثمن). وهذا يجعل من الصعب استخدامها في الإعدادات المحلية، ولكنها رائعة لعمليات النشر باستخدام وحدات معالجة الرسومات المتعددة. كنقطة مرجعية، يتطلب SegMoE-4×2 24 جيجابايت من VRAM بنصف الدقة.
خاتمة
لقد قمنا ببناء SegMoE لتزويد المجتمع بأداة جديدة يمكنها إنشاء نماذج SOTA Diffusion بسهولة، فقط من خلال الجمع بين النماذج المدربة مسبقًا مع الحفاظ على أوقات الاستدلال منخفضة. نحن متحمسون لرؤية ما يمكنك بناءه به!
موارد إضافية