Diffusers documentation
xDiT
xDiT
xDiT هو محرك استدلال مصمم للنشر المتوازي واسع النطاق لنماذج التحويلات الانتشارية (DiTs). يوفر xDiT مجموعة من الأساليب المتوازية الفعّالة لنماذج الانتشار، بالإضافة إلى تسريع نواة GPU.
تدعم xDiT أربع طرق متوازية، وهي توازي التسلسل الموحّد وPipeFusion وتوازي CFG وتوازي البيانات. يمكن ضبط الطرق المتوازية الأربع في xDiT بطريقة هجينة، لتحسين أنماط الاتصال بما يناسب أفضل ما يمكن أجهزة الشبكة الأساسية.
تركز التحسينات المستقلة عن التوازي على تسريع أداء وحدة معالجة الرسوميات الواحدة. بالإضافة إلى الاستفادة من مكتبات تحسين الانتباه المعروفة، نعتمد على تقنيات تسريع الترجمة مثل torch.compile وonediff.
يُعرض ملخص xDiT على النحو التالي.

pip install xfuser
فيما يلي مثال على استخدام xDiT لتسريع الاستدلال لنموذج Diffusers.
import torch
from diffusers import StableDiffusion3Pipeline
from xfuser import xFuserArgs, xDiTParallel
from xfuser.config import FlexibleArgumentParser
from xfuser.core.distributed import get_world_group
def main():
+ parser = FlexibleArgumentParser(description="xFuser Arguments")
+ args = xFuserArgs.add_cli_args(parser).parse_args()
+ engine_args = xFuserArgs.from_cli_args(args)
+ engine_config, input_config = engine_args.create_config()
local_rank = get_world_group().local_rank
pipe = StableDiffusion3Pipeline.from_pretrained(
pretrained_model_name_or_path=engine_config.model_config.model,
dtype=torch.float16,
).to(f"cuda:{local_rank}")
# do anything you want with pipeline here
+ pipe = xDiTParallel(pipe, engine_config, input_config)
pipe(
height=input_config.height,
width=input_config.height,
prompt=input_config.prompt,
num_inference_steps=input_config.num_inference_steps,
output_type=input_config.output_type,
generator=torch.Generator(device="cuda").manual_seed(input_config.seed), # or "mps", "xpu", "cpu"
)
+ if input_config.output_type == "pil":
+ pipe.save("results", "stable_diffusion_3")
if __name__ == "__main__":
main()
كما ترون، لا نحتاج سوى إلى استخدام xFuserArgs من xDiT للحصول على معاملات التهيئة، ثم تمرير هذه المعاملات مع كائن خط الأنابيب من مكتبة Diffusers إلى xDiTParallel لإكمال موازاة خط أنابيب محدد في Diffusers.
يمكن عرض معاملات وقت التشغيل الخاصة بـ xDiT في سطر الأوامر باستخدام -h، كما يمكنك الرجوع إلى هذا المثال للاستخدام لمزيد من التفاصيل.
يجب تشغيل xDiT باستخدام torchrun لدعم قدراته المتوازية عبر عدة عقد وشرائح GPU متعددة. على سبيل المثال، يمكن استخدام الأمر التالي للاستدلال المتوازي على 8 شرائح GPU:
torchrun --nproc_per_node=8 ./inference.py --model models/FLUX.1-dev --data_parallel_degree 2 --ulysses_degree 2 --ring_degree 2 --prompt "A snowy mountain" "A small dog" --num_inference_steps 50النماذج المدعومة
تدعم xDiT مجموعة فرعية من نماذج Diffusers، مثل Flux.1 وStable Diffusion 3 وغيرها. يمكن العثور على أحدث النماذج المدعومة هنا.
معايرة
اختبرنا نماذج مختلفة على أجهزة متنوعة، وفيما يلي بعض بيانات الاختبار المرجعي.
Flux.1-schnell


Stable Diffusion 3


HunyuanDiT



يمكن العثور على مقاييس أداء أكثر تفصيلاً في صفحة github الخاصة بنا.
مرجع
USP: نهج موحّد للتوازي التسلسلي لتوليد الذكاء الاصطناعي في السياقات الطويلة
بايب فوجن: توازٍ خطّي لأنابيب البقع المزاحة للاستدلال على نماذج محوّلات الانتشار
Update on GitHub