Diffusers documentation
خطوط أنابيب ومكوّنات المجتمع
خطوط أنابيب ومكوّنات المجتمع
خطوط أنابيب المجتمع هي فئات DiffusionPipeline تختلف عن التنفيذ الأصلي للورقة البحثية. فهي توفر وظائف إضافية أو توسّع تنفيذ خط الأنابيب الأصلي.
اطّلع على خطوط الأنابيب المجتمعية في diffusers/examples/community مع أمثلة على الاستدلال والتدريب حول كيفية استخدامها.
تُخزَّن خطوط أنابيب المجتمع إما على Hub أو في مستودع GitHub الخاص بـ Diffusers. خطوط أنابيب Hub قابلة للتخصيص بالكامل (المجدول، النماذج، كود خط الأنابيب، إلخ) بينما خطوط أنابيب GitHub محدودة بكود خط الأنابيب المخصص فقط. قارن بين نوعي خطي الأنابيب في الجدول أدناه.
| GitHub | المركز | |
|---|---|---|
| الاستخدام | custom_pipeline="<filename_without_.py>" | معرّف مستودع Hub أو trust_remote_code=True عندما يشير _class_name إلى مخصص |
| عملية المراجعة | افتح طلب سحب (Pull Request) على GitHub وخضع لعملية مراجعة من فريق Diffusers قبل الدمج. هذه الخيار أبطأ. | ارفع مباشرةً إلى مستودع في Hub دون مراجعة. هذه هي الخيار الأسرع. |
| الظهور | مشمولة في مستودع Diffusers الرسمي وتوثيقه. | مُدرج في ملفك الشخصي على Hub ويعتمد على استخدامك الخاص والترويج لكسب الظهور. |
تحميل خط أنابيب مجتمعي
قم بتحميل أي نوع من خطوط أنابيب المجتمع عن طريق تمرير custom_pipeline إلى from_pretrained().
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-3-medium-diffusers",
custom_pipeline="pipeline_stable_diffusion_3_instruct_pix2pix",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)أضف الحجة custom_revision إلى from_pretrained() لتحميل خط أنابيب المجتمع من إصدار محدد (على سبيل المثال، v0.30.0 أو main). بشكل افتراضي، يتم تحميل خطوط أنابيب المجتمع من أحدث إصدار مستقر من Diffusers.
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-3-medium-diffusers",
custom_pipeline="pipeline_stable_diffusion_3_instruct_pix2pix",
custom_revision="main",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)في حين يقوم مستودع Hugging Face بمسح الملفات، يجب عليك أيضاً فحص كود خط أنابيب المستودع والتأكد من أنه آمن.
توجد عدة طرق لتحميل خط أنابيب المجتمع.
مرّر مسارًا إلى
custom_pipelineلتحميل خط أنابيب مجتمعي محلي. يجب أن يحتوي المجلد على ملفpipeline.pyيحتوي على فئة خط الأنابيب.import torch from diffusers import DiffusionPipeline pipeline = DiffusionPipeline.from_pretrained( "stabilityai/stable-diffusion-3-medium-diffusers", custom_pipeline="path/to/pipeline_directory", trust_remote_code=True, dtype=torch.float16, device_map="cuda" # or "mps", "xpu", "cpu" )يُؤيَّد الحُجّة
custom_pipelineأيضًا بواسطة from_pipe()، وهو مفيد لـ إعادة استخدام خطوط الأنابيب دون استخدام ذاكرة إضافية. فهو يحدّ من استخدام الذاكرة إلى أكبر خط أنابيب محمّل فقط.import torch from diffusers import DiffusionPipeline pipeline_sd = DiffusionPipeline.from_pretrained( "emilianJR/CyberRealistic_V3", dtype=torch.float16, device_map="cuda" # or "mps", "xpu", "cpu" ) pipeline_lpw = DiffusionPipeline.from_pipe( pipeline_sd, custom_pipeline="lpw_stable_diffusion" )يُعدّ أسلوب from_pipe() مفيداً بشكل خاص لتحميل خطوط أنابيب المجتمع، نظراً لأن العديد منها لا يحتوي على أوزان مُسبقة التدريب. وعادةً ما تضيف خطوط أنابيب المجتمع ميزة فوق خط أنابيب قائم مسبقاً.
مكوّنات المجتمع
تتيح لك مكوّنات المجتمع بناء خطوط أنابيب باستخدام محوّلات وUNets وVAEs ومجدولات مخصّصة لا تدعمها مكتبة Diffusers. وتحتاج هذه المكوّنات إلى وحدات Python خاصة بها.
تُظهر هذه القسم كيفية استخدام المستخدمين لمكونات المجتمع لبناء خط أنابيب مجتمع باستخدام showlab/show-1-base كمثال.
- حمّل المكونات المطلوبة، وهي المجدول ومعالج الصور. يتم استيراد مشفر النص بشكل عام من Transformers.
from transformers import T5Tokenizer, T5EncoderModel, CLIPImageProcessor
from diffusers import DPMSolverMultistepScheduler
pipeline_id = "showlab/show-1-base"
tokenizer = T5Tokenizer.from_pretrained(pipeline_id, subfolder="tokenizer")
text_encoder = T5EncoderModel.from_pretrained(pipeline_id, subfolder="text_encoder")
scheduler = DPMSolverMultistepScheduler.from_pretrained(pipeline_id, subfolder="scheduler")
feature_extractor = CLIPImageProcessor.from_pretrained(pipeline_id, subfolder="feature_extractor")في الخطوتين 2 و3، يجب أن تتطابق تنسيقات التنفيذ المخصص لـ UNet و pipeline مع التنسيقات المعروضة في ملفاتهما حتى يعمل هذا المثال.
- حمّل UNet مخصصًا مُنفَّذًا مسبقًا في showone_unet_3d_condition.py. تم تغيير اسم فئة UNet3DConditionModel إلى التنفيذ المخصص
ShowOneUNet3DConditionModel، لأن UNet3DConditionModel موجودة مسبقًا في Diffusers. يجب وضع جميع المكونات المطلوبة لفئةShowOneUNet3DConditionModelفيshowone_unet_3d_condition.py.
from showone_unet_3d_condition import ShowOneUNet3DConditionModel
unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet")- حمّل كود خط الأنابيب المخصص (المنفَّذ مسبقًا في pipeline_t2v_base_pixel.py). يحتوي هذا النص البرمجي على فئة
TextToVideoIFPipelineمخصصة لتوليد مقاطع الفيديو من النص. تمامًا كما هو الحال مع UNet المخصص، يجب وضع أي كود مطلوب لـTextToVideoIFPipelineفيpipeline_t2v_base_pixel.py.
قم بتهيئة TextToVideoIFPipeline باستخدام ShowOneUNet3DConditionModel.
import torch
from pipeline_t2v_base_pixel import TextToVideoIFPipeline
pipeline = TextToVideoIFPipeline(
unet=unet,
text_encoder=text_encoder,
tokenizer=tokenizer,
scheduler=scheduler,
feature_extractor=feature_extractor,
)
pipeline = pipeline.to("cuda") # or "mps", "xpu", "cpu"- ادفع خط الأنابيب إلى Hub لمشاركته مع المجتمع.
pipeline.push_to_hub("custom-t2v-pipeline")بعد دفع خط الأنابيب بنجاح، أجرِ التغييرات التالية.
- غيّر خاصية
_class_nameفي model_index.json إلى["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"]. - ارفع
showone_unet_3d_condition.pyإلى مجلد unet الفرعي. - ارفع
pipeline_t2v_base_pixel.pyإلى مستودع خط الأنابيب repository.
لتشغيل الاستدلال، أضف الحجة trust_remote_code أثناء تهيئة خط الأنابيب للتعامل مع كل ما يحدث في الخلفية.
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"<change-username>/<change-id>", trust_remote_code=True, dtype=torch.float16
)كإجراء احترازي إضافي عند استخدام
trust_remote_code=True، قم بتمرير تجزئة الالتزام (commit hash) إلى معاملrevisionفي from_pretrained() للتأكد من أن الكود لم يتم تحديثه بكود خبيث جديد (ما لم تكن تثق تماماً بأصحاب النموذج).
الخطوات التالية
- اطّلع على المشكلة #841 لمزيد من السياق حول سبب إضافة خطوط أنابيب المجتمع لمساعدة الجميع على مشاركة أعمالهم بسهولة دون أن يتباطأوا.
- اطّلع على مستودع stabilityai/japanese-stable-diffusion-xl كمثال إضافي على خط أنابيب مجتمعي يستخدم أيضًا ميزة
trust_remote_code.