Diffusers documentation
HunyuanVideo
HunyuanVideo
HunyuanVideo هو نموذج تحويل انتشاري (diffusion transformer) يحتوي على 13 مليار معامل، مصمّم ليكون منافسًا لنماذج الفيديو الأساسية المغلقة المصدر، ولتمكين وصول أوسع للمجتمع. يستخدم هذا نموذجًا معماريًا “من تدفق مزدوج إلى تدفق مفرد” لمعالجة رموز الفيديو والنص بشكل منفصل أولًا، ثم دمجها وإدخالها إلى التحويل (transformer) لدمج المعلومات متعددة الوسائط. يُستخدم نموذج لغة كبير متعدد الوسائط (MLLM) مُدرَّب مسبقًا كمُشفِّر (encoder) لأنه يتمتع بمواءمة أفضل بين الصورة والنص، ووصف أفضل لتفاصيل الصور والاستدلال، ويمكن استخدامه كتعلمي بلا أمثلة (zero-shot learner) إذا أُضيفت تعليمات النظام إلى أوامر المستخدم. أخيرًا، يستخدم HunyuanVideo مُشفِّرًا ذاتيًا متغيرًا (variational autoencoder) سببيًا ثلاثي الأبعاد لمعالجة بيانات الفيديو بكفاءة أعلى عند الدقة ومعدل الإطارات الأصليين.
يمكنك العثور على جميع نقاط التفتيش الأصلية لنموذج HunyuanVideo تحت منظمة Tencent.
انقر على نماذج HunyuanVideo في الشريط الجانبي الأيمن لمزيد من الأمثلة على مهام توليد الفيديو.
تستخدم الأمثلة أدناه نقطة تحقق من hunyuanvideo-community لأن الأوزان مخزنة في تخطيط متوافق مع Diffusers.
يُبيّن المثال أدناه كيفية توليد فيديو مُحسَّن للذاكرة أو لسرعة الاستدلال.
راجع دليل تقليل استهلاك الذاكرة لمزيد من التفاصيل حول تقنيات توفير الذاكرة المختلفة.
يتطلب نموذج HunyuanVideo المُكمَّم أدناه حوالي 14 جيجابايت من ذاكرة الفيديو (VRAM).
import torch
from diffusers import AutoModel, HunyuanVideoPipeline
from diffusers.quantizers import PipelineQuantizationConfig
from diffusers.utils import export_to_video
# quantize weights to int4 with bitsandbytes
pipeline_quant_config = PipelineQuantizationConfig(
quant_backend="bitsandbytes_4bit",
quant_kwargs={
"load_in_4bit": True,
"bnb_4bit_quant_type": "nf4",
"bnb_4bit_compute_dtype": torch.bfloat16
},
components_to_quantize="transformer"
)
pipeline = HunyuanVideoPipeline.from_pretrained(
"hunyuanvideo-community/HunyuanVideo",
quantization_config=pipeline_quant_config,
dtype=torch.bfloat16,
)
# model-offloading and tiling
pipeline.enable_model_cpu_offload()
pipeline.vae.enable_tiling()
prompt = "A fluffy teddy bear sits on a bed of soft pillows surrounded by children's toys."
video = pipeline(prompt=prompt, num_frames=61, num_inference_steps=30).frames[0]
export_to_video(video, "output.mp4", fps=15)يكون التجميع بطيئًا في المرة الأولى، لكن الاستدعاءات اللاحقة للخط الأنابيب تكون أسرع.
import torch
from diffusers import AutoModel, HunyuanVideoPipeline
from diffusers.quantizers import PipelineQuantizationConfig
from diffusers.utils import export_to_video
# quantize weights to int4 with bitsandbytes
pipeline_quant_config = PipelineQuantizationConfig(
quant_backend="bitsandbytes_4bit",
quant_kwargs={
"load_in_4bit": True,
"bnb_4bit_quant_type": "nf4",
"bnb_4bit_compute_dtype": torch.bfloat16
},
components_to_quantize="transformer"
)
pipeline = HunyuanVideoPipeline.from_pretrained(
"hunyuanvideo-community/HunyuanVideo",
quantization_config=pipeline_quant_config,
dtype=torch.bfloat16,
)
# model-offloading and tiling
pipeline.enable_model_cpu_offload()
pipeline.vae.enable_tiling()
# torch.compile
pipeline.transformer.to(memory_format=torch.channels_last)
pipeline.transformer = torch.compile(
pipeline.transformer, mode="max-autotune", fullgraph=True
)
prompt = "A fluffy teddy bear sits on a bed of soft pillows surrounded by children's toys."
video = pipeline(prompt=prompt, num_frames=61, num_inference_steps=30).frames[0]
export_to_video(video, "output.mp4", fps=15)ملاحظات
يدعم HunyuanVideo تقنية LoRAs من خلال load_lora_weights().
عرض مثال على الكود
import torch from diffusers import AutoModel, HunyuanVideoPipeline from diffusers.quantizers import PipelineQuantizationConfig from diffusers.utils import export_to_video # quantize weights to int4 with bitsandbytes pipeline_quant_config = PipelineQuantizationConfig( quant_backend="bitsandbytes_4bit", quant_kwargs={ "load_in_4bit": True, "bnb_4bit_quant_type": "nf4", "bnb_4bit_compute_dtype": torch.bfloat16 }, components_to_quantize="transformer" ) pipeline = HunyuanVideoPipeline.from_pretrained( "hunyuanvideo-community/HunyuanVideo", quantization_config=pipeline_quant_config, dtype=torch.bfloat16, ) # load LoRA weights pipeline.load_lora_weights("https://huggingface.co/lucataco/hunyuan-steamboat-willie-10", adapter_name="steamboat-willie") pipeline.set_adapters("steamboat-willie", 0.9) # model-offloading and tiling pipeline.enable_model_cpu_offload() pipeline.vae.enable_tiling() # use "In the style of SWR" to trigger the LoRA prompt = """ In the style of SWR. A black and white animated scene featuring a fluffy teddy bear sits on a bed of soft pillows surrounded by children's toys. """ video = pipeline(prompt=prompt, num_frames=61, num_inference_steps=30).frames[0] export_to_video(video, "output.mp4", fps=15)راجع الجدول أدناه للحصول على قيم الاستدلال الموصى بها.
معامل القيمة الموصى بها نوع بيانات مُشفّر النص torch.float16نوع بيانات transformer torch.bfloat16نوع بيانات vae torch.float16num_frames (k)4 * k+ 1جرّب قيم
shiftأدنى (2.0إلى5.0) للفيديوهات ذات الدقة المنخفضة وقيمshiftأعلى (7.0إلى12.0) للصور ذات الدقة العالية.
HunyuanVideoPipeline
فئة diffusers.HunyuanVideoPipeline
< source >( text_encoder: LlamaModeltokenizer: LlamaTokenizertransformer: HunyuanVideoTransformer3DModelvae: AutoencoderKLHunyuanVideoscheduler: FlowMatchEulerDiscreteSchedulertext_encoder_2: CLIPTextModeltokenizer_2: CLIPTokenizer )
المعاملات
- text_encoder (
LlamaModel) — Llava Llama3-8B. - tokenizer (
LlamaTokenizer) — مُقسِّم من Llava Llama3-8B. - transformer (HunyuanVideoTransformer3DModel) — نموذج Transformer مشروط لإزالة الضوضاء من كامنات الصورة المُرمّزة.
- scheduler (FlowMatchEulerDiscreteScheduler) —
جدول زمني يُستخدم بالاقتران مع
transformerلإزالة الضوضاء من كائنات الصورة المُرمّزة. - vae (AutoencoderKLHunyuanVideo) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.
- text_encoder_2 (
CLIPTextModel) — CLIP، وتحديداً التنوع clip-vit-large-patch14. - tokenizer_2 (
CLIPTokenizer) — مُقسِّم من الفئة CLIPTokenizer.
خط أنابيب لتوليد الفيديو من النص باستخدام HunyuanVideo.
يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).
__call__
< source >( prompt: str | list[str] = Noneprompt_2: str | list[str] = Nonenegative_prompt: str | list[str] = Nonenegative_prompt_2: str | list[str] = Noneheight: int = 720width: int = 1280num_frames: int = 129num_inference_steps: int = 50sigmas: list[float] = Nonetrue_cfg_scale: float = 1.0guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']prompt_template: dict[str, typing.Any] = {'template': '<|start_header_id|>system<|end_header_id|>\n\nDescribe the video by detailing the following aspects: 1. The main content and theme of the video.2. The color, shape, size, texture, quantity, text, and spatial relationships of the objects.3. Actions, events, behaviors temporal relationships, physical movement changes of the objects.4. background environment, light, style and atmosphere.5. camera angles, movements, and transitions used in the video:<|eot_id|><|start_header_id|>user<|end_header_id|>\n\n{}<|eot_id|>', 'crop_start': 95}max_sequence_length: int = 256 ) → ~HunyuanVideoPipelineOutput or tuple
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. إذا لم يُعرَّف، يجب تمريرprompt_embedsبدلاً من ذلك. - prompt_2 (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات المرسل إلىtokenizer_2وtext_encoder_2. إذا لم يُعرَّف، فسيتم استخدامpromptبدلاً منه. - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا لم يكنtrue_cfg_scaleأكبر من1). - negative_prompt_2 (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي توجيه توليد الصورة إليها، والتي تُرسل إلىtokenizer_2وtext_encoder_2. إذا لم يُعرَّف، يُستخدمnegative_promptفي جميع مُشفّرات النص. - height (
int، القيمة الافتراضية720) — ارتفاع الصورة المولّدة بالبكسل. - width (
int، القيمة الافتراضية1280) — عرض الصورة المولّدة بالبكسل. - num_frames (
int، القيمة الافتراضية129) — عدد الإطارات في الفيديو المولّد. - num_inference_steps (
int، القيمة الافتراضية50) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال. - sigmas (
list[float]، اختياري) — قيم sigmas مخصصة لاستخدامها في عملية إزالة الضوضاء مع المجدولين الذين يدعمون معاملsigmasفي طريقةset_timestepsالخاصة بهم. إذا لم يُعرَّف، فسيتم استخدام السلوك الافتراضي عند تمريرnum_inference_steps. - true_cfg_scale (
float، اختياري، القيمة الافتراضية 1.0) — يتم تفعيل التوجيه الحر من التصنيف (مقياس التوجيه) الحقيقي عندما يكونtrue_cfg_scale> 1 و يتم توفيرnegative_prompt. - guidance_scale (
float, القيمة الافتراضية هي6.0) — يتم تفعيل مقياس التوجيه المدمج بإعدادguidance_scale> 1. قيم أعلى لـguidance_scaleتشجّع النموذج على توليد صور أكثر توافقًا معpromptعلى حساب انخفاض جودة الصورة.تُقدِّم النماذج المُقطَّرة عبر التوجيه تقريبًا للتوجيه الحقيقي الحر من المُصنِّف عند
guidance_scale> 1. راجع الورقة البحثية لمزيد من التفاصيل. - num_videos_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) —torch.Generatorلجعل التوليد حتميًا. - latents (
torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدامgeneratorالعشوائي المُقدَّم. - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة (مثل وزن الموجهات). إذا لم تُقدَّم، يتم توليد التضمينات النصية من معامل الإدخالprompt. - pooled_prompt_embeds (
torch.FloatTensor، اختياري) — تضمينات نصية مجمّعة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص المجمّعة من معامل الإدخالprompt. - negative_prompt_embeds (
torch.FloatTensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - negative_pooled_prompt_embeds (
torch.FloatTensor، اختياري) — تضمينات نصية مجمعة سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن المحفّز. إذا لم تُقدَّم، فسيتم توليد تضمينات negative_prompt_embeds المجمعة من معامل الإدخالnegative_prompt. - prompt_attention_mask (
torch.Tensor، اختياري) — قناع الانتباه (Attention mask) الخاص بـprompt_embeds. مطلوب عند تمريرprompt_embedsمباشرة. - negative_prompt_attention_mask (
torch.Tensor، اختياري) — قناع الانتباه (Attention mask) الخاص بـnegative_prompt_embeds. مطلوب عند تمريرnegative_prompt_embedsمباشرة. - output_type (
str، اختياري، الافتراضي"pil") — صيغة مخرجات الصورة المولّدة. اختر بينPIL.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاعHunyuanVideoPipelineOutputبدلاً من tuple عادي. - attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorإذا تم تحديده، كما هو معرَّف تحتself.processorفي diffusers.models.attention_processor. - prompt_template (
dict, اختياري) — القالب المستخدم لتنسيق الموجه قبل الترميز. الافتراضي هو قالب النموذج الافتراضي. - max_sequence_length (
int، اختياري، القيمة الافتراضية 256) — أقصى طول تسلسل يُستخدم لمشفّر الاستعلام. - callback_on_step_end (
Callable،PipelineCallback،MultiPipelineCallbacks، اختياري) — دالة أو فئة فرعية منPipelineCallbackأوMultiPipelineCallbacksتُستدعى في نهاية كل خطوة إزالة ضوضاء أثناء الاستدلال، مع الحُجج التالية:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). ستتضمنcallback_kwargsقائمة بجميع المصفوفات كما حددتهاcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list، اختياري) — قائمة مدخلات المصفوفات (tensors) لدالةcallback_on_step_end. سيتم تمرير المصفوفات المحددة في القائمة كحجةcallback_kwargs. لن تتمكن من تضمين متغيرات غير مدرجة في خاصية._callback_tensor_inputsلفئة خط الأنابيب (pipeline) الخاص بك.
يعيد
~HunyuanVideoPipelineOutput أو tuple
إذا كان return_dict هو True، يُعاد HunyuanVideoPipelineOutput، وإلا يُعاد tuple
حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool
تُشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى “غير آمن للعمل” (nsfw).
دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.
أمثلة:
>>> import torch
>>> from diffusers import HunyuanVideoPipeline, HunyuanVideoTransformer3DModel
>>> from diffusers.utils import export_to_video
>>> model_id = "hunyuanvideo-community/HunyuanVideo"
>>> transformer = HunyuanVideoTransformer3DModel.from_pretrained(
... model_id, subfolder="transformer", torch_dtype=torch.bfloat16
... )
>>> pipe = HunyuanVideoPipeline.from_pretrained(model_id, transformer=transformer, torch_dtype=torch.float16)
>>> pipe.vae.enable_tiling()
>>> pipe.to("cuda")
>>> output = pipe(
... prompt="A cat walks on the grass, realistic",
... height=320,
... width=512,
... num_frames=61,
... num_inference_steps=30,
... ).frames[0]
>>> export_to_video(output, "output.mp4", fps=15)HunyuanVideoPipelineOutput
فئة diffusers.pipelines.hunyuan_video.pipeline_output.HunyuanVideoPipelineOutput
< source >( frames: Tensor )
المعاملات
- frames (
torch.Tensorأوnp.ndarrayأو قائمة[قائمة[PIL.Image.Image]]) — قائمة من مخرجات الفيديو - يمكن أن تكون قائمة متداخلة بطولbatch_size,حيث تحتوي كل قائمة فرعية على سلاسل صور PIL منزوعة الضوضاء بطولnum_frames.كما يمكن أن تكون مصفوفة NumPy أو متجه Torch بشكل(batch_size, num_frames, channels, height, width).
فئة الإخراج لخطوط أنابيب HunyuanVideo.