Buckets:

hf-doc-build/doc / diffusers /v0.43.0 /ar /using-diffusers /custom_pipeline_overview.md
mishig's picture
|
download
raw
11.1 kB

خطوط أنابيب ومكوّنات المجتمع

خطوط أنابيب المجتمع هي فئات 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 كمثال.

  1. حمّل المكونات المطلوبة، وهي المجدول ومعالج الصور. يتم استيراد مشفر النص بشكل عام من 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 مع التنسيقات المعروضة في ملفاتهما حتى يعمل هذا المثال.

  1. حمّل 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")
  1. حمّل كود خط الأنابيب المخصص (المنفَّذ مسبقًا في 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"
  1. ادفع خط الأنابيب إلى 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.

Xet Storage Details

Size:
11.1 kB
·
Xet hash:
70205526c34d1a706f47a9dd2e7720e5d6e1b35461dc60ed57208f75befff7da

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.