Buckets:
xDiT
xDiT هو محرك استدلال مصمم للنشر المتوازي واسع النطاق لنماذج التحويلات الانتشارية (DiTs). يوفر xDiT مجموعة من الأساليب المتوازية الفعّالة لنماذج الانتشار، بالإضافة إلى تسريع نواة GPU.
تدعم xDiT أربع طرق متوازية، وهي توازي التسلسل الموحّد وPipeFusion وتوازي CFG وتوازي البيانات. يمكن ضبط الطرق المتوازية الأربع في xDiT بطريقة هجينة، لتحسين أنماط الاتصال بما يناسب أفضل ما يمكن أجهزة الشبكة الأساسية.
تركز التحسينات المستقلة عن التوازي على تسريع أداء وحدة معالجة الرسوميات الواحدة. بالإضافة إلى الاستفادة من مكتبات تحسين الانتباه المعروفة، نعتمد على تقنيات تسريع الترجمة مثل torch.compile وonediff.
يُعرض ملخص xDiT على النحو التالي.
يمكنك تثبيت 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: نهج موحّد للتوازي التسلسلي لتوليد الذكاء الاصطناعي في السياقات الطويلة
بايب فوجن: توازٍ خطّي لأنابيب البقع المزاحة للاستدلال على نماذج محوّلات الانتشار
Xet Storage Details
- Size:
- 5.08 kB
- Xet hash:
- de47d2726c75e19ddf835de831c473ac80b0e60c1b0098aa0ae5498c34b056a3
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.