Diffusers documentation

LLaDA2

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LLaDA2

LLaDA2 is a family of discrete diffusion language models that generate text through block-wise iterative refinement. Instead of autoregressive token-by-token generation, LLaDA2 starts with a fully masked sequence and progressively unmasks tokens by confidence over multiple refinement steps.

الاستخدام

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

from diffusers import BlockRefinementScheduler, LLaDA2Pipeline

model_id = "inclusionAI/LLaDA2.1-mini"
model = AutoModelForCausalLM.from_pretrained(
    model_id, trust_remote_code=True, dtype=torch.bfloat16, device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
scheduler = BlockRefinementScheduler()

pipe = LLaDA2Pipeline(model=model, scheduler=scheduler, tokenizer=tokenizer)
output = pipe(
    prompt="Write a short poem about the ocean.",
    gen_length=256,
    block_length=32,
    num_inference_steps=32,
    threshold=0.7,
    editing_threshold=0.5,
    max_post_steps=16,
    temperature=0.0,
)
print(output.texts[0])

المكالمات العكسية

تُنفَّذ استدعاءات الأحداث (Callbacks) بعد كل خطوة تحسين. مرّر callback_on_step_end_tensor_inputs لاختيار المصفوفات (tensors) التي سيتم تضمينها في callback_kwargs. في التنفيذ الحالي، يتم توفير block_x (نافذة التسلسل قيد التحسين) وtransfer_index (قناع التثبيت لملء الأقنعة)؛ أعد {"block_x": ...} من استدعاء الحدث لاستبدال النافذة.

def on_step_end(pipe, step, timestep, callback_kwargs):
    block_x = callback_kwargs["block_x"]
    # Inspect or modify `block_x` here.
    return {"block_x": block_x}

out = pipe(
    prompt="Write a short poem.",
    callback_on_step_end=on_step_end,
    callback_on_step_end_tensor_inputs=["block_x"],
)

المعلمات الموصى بها

تدعم نماذج LLaDA2.1 وضعين:

الوضعthresholdediting_thresholdmax_post_steps
الجودة0.70.516
السرعة0.5None16

مرّر editing_threshold=None أو 0.0 أو قيمة سالبة لتعطيل التعديل بعد القناع.

لنماذج LLaDA2.0، عطّل التحرير عن طريق تمرير editing_threshold=None أو 0.0.

لجميع النماذج: block_length=32، temperature=0.0، num_inference_steps=32.

LLaDA2Pipeline

فئة diffusers.LLaDA2Pipeline

< >

( model: Anyscheduler: BlockRefinementSchedulertokenizer: Any | None = None )

خط أنابيب لتوليد النصوص عبر الانتشار المنفصل بأسلوب LLaDA2 باستخدام التحسين التكراري على مستوى الكتل.

تحتفظ هذه المسار الوظيفي بسلسلة قالب مملوءة بـmask_token_id وتُحسّنها على شكل كتل. في كل خطوة تحسين، تُسحب رموز مرشحة للكتلة النشطة وتُثبَّت مجموعة فرعية منها بناءً على درجة الثقة.

من المتوقع أن يقبل النموذج قناع الانتباه وposition_ids، وأن يعيد قيم اللوجيت على شكل [batch, seq, vocab_size].

__call__

< >

( prompt: str | list[str] | None = Nonemessages: list[dict[str, str]] | None = Noneinput_ids: torch.LongTensor | None = Noneattention_mask: torch.LongTensor | None = Noneuse_chat_template: bool = Trueadd_generation_prompt: bool = Truegen_length: int = 2048block_length: int | None = Nonenum_inference_steps: int = 32temperature: float = 0.0top_p: float | None = Nonetop_k: int | None = Nonesampling_method: str = 'multinomial'threshold: float = 0.7editing_threshold: float | None = 0.5max_post_steps: int = 16minimal_topk: int = 1eos_early_stop: bool = Trueeos_token_id: int | None = Nonemask_token_id: int | None = Nonegenerator: torch.Generator | None = Noneoutput_type: str = 'text'return_dict: bool = Truecallback_on_step_end: Callable[[int, int, dict], None] | PipelineCallback | MultiPipelineCallbacks | None = Nonecallback_on_step_end_tensor_inputs: list[str] | None = None ) → LLaDA2PipelineOutput or tuple

المعاملات

  • prompt (str أو List[str]، اختياري) — نص الموجه. عندما يكون use_chat_template هو True (الافتراضي) ويتوفر مُرمِّز (tokenizer) مع قالب محادثة، يُغلَّف الموجه في رسالة محادثة قبل الترميز.
  • messages (List[Dict[str, str]]، اختياري) — رسائل الدردشة التي سيتم ترميزها (مثل [{"role": "user", "content": "Hello"}]). له الأولوية على prompt عند تقديمه. يتطلب مُرمِّزًا (tokenizer) يدعم apply_chat_template.
  • input_ids (torch.LongTensor، اختياري) — معرّفات مدخلات مُجزّأة مسبقًا. لها الأولوية على prompt وmessages.
  • attention_mask (torch.LongTensor، اختياري) — قناع لكل رمز (1 للرموز الصالحة في الاستعلام، 0 للتعبئة) يطابق شكل input_ids. يُستخدم فقط عند تقديم input_ids. عند حذفه (مع تقديم input_ids)، تُعامل جميع المواضع على أنها صالحة. عند بناء المدخلات من prompt / messages، يُنقل قناع مُجزّئ الرموز تلقائيًا.
  • use_chat_template (bool، القيمة الافتراضية True) — ما إذا كان سيتم تغليف الاستعلام في قالب محادثة.
  • add_generation_prompt (bool، القيمة الافتراضية True) — ما إذا كان يجب إضافة موجه التوليد عند استخدام قوالب المحادثة.
  • gen_length (int) — عدد الرموز المراد توليدها.
  • block_length (int، اختياري) — حجم الكتلة للتحسين. إذا لم يُقدَّم، يُستخدم block_length المُهيّأ في المجدول.
  • num_inference_steps (int) — عدد خطوات التحسين لكل كتلة.
  • temperature (float) — درجة حرارة العينة.
  • top_p (float, اختياري) — حدّ عيّنة النواة.
  • top_k (int، اختياري) — حدّ قطع أخذ العينة Top-k.
  • sampling_method (str) — طريقة العينة (auto، greedy، multinomial).
  • threshold (float) — حد الثقة لالتزام الرموز.
  • editing_threshold (float, اختياري) — حد الثقة لتحرير الرموز التي تم التأكيد عليها مسبقًا (غير المقنّعة). عند أن يكون موجبًا، بعد حل جميع الرموز المقنّعة في الكتلة، يستمر خط المعالجة في التحسين: إذا توقع النموذج رمزًا مختلفًا بثقة تتجاوز هذا الحد، يتم استبدال الرمز الموجود. اضبطه على None أو 0.0 أو قيمة سالبة لتعطيل التحرير. القيمة الافتراضية هي 0.5.
  • max_post_steps (int) — الحد الأقصى لعدد تكرارات التحسين الإضافية بعد حل جميع رموز الأقنعة في الكتلة. يُستخدم فقط عند تفعيل editing_threshold. القيمة الافتراضية هي 16.
  • minimal_topk (int) — الحد الأدنى لعدد الرموز التي يجب الالتزام بها في كل خطوة.
  • eos_early_stop (bool) — ما إذا كان يجب التوقف بعد تثبيت EOS في كتلة.
  • eos_token_id (int, اختياري) — معرّف رمز EOS المستخدم للإيقاف المبكر.
  • mask_token_id (int، اختياري) — معرّف رمز القناع (Mask token) المستخدم للقالب.
  • generator (torch.Generator، اختياري) — مولّد الأرقام العشوائية (RNG) للعينات.
  • output_type (str)، القيمة الافتراضية "text") — صيغة الإخراج. "text" يرمز التسلسلات إلى نصوص (يتطلب وجود مرمّز). "seq" يعيد تسلسلات معرّفات الرموز الخام فقط.
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع LLaDA2PipelineOutput بدلاً من tuple.
  • callback_on_step_end (Callable أو PipelineCallback، اختياري) — دالة استجابة تُنفَّذ بعد كل خطوة تحسين، وتوقيعها callback_on_step_end(self, step: int, timestep: int, callback_kwargs: Dict).
  • callback_on_step_end_tensor_inputs (List[str]، اختياري) — مفاتيح المصفوفات التي سيتم تمريرها إلى الاستدعاء العكسي. المفاتيح المسموح بها: block_x، transfer_index، editing_transfer_index، sampled_tokens، sampled_probs، active_block.

يعيد

LLaDA2PipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد LLaDA2PipelineOutput، وإلا يُعاد tuple حيث العنصر الأول هو معرّفات الرموز المولّدة (torch.LongTensor) والعنصر الثاني هو النصوص المُفكّكة (list[str])، أو None عندما يكون output_type هو "seq".

توليد النص مع تحسين على مستوى الكتل.

أمثلة:

>>> import torch
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> from diffusers import BlockRefinementScheduler, LLaDA2Pipeline

>>> model_id = "inclusionAI/LLaDA2.1-mini"
>>> model = AutoModelForCausalLM.from_pretrained(
...     model_id, trust_remote_code=True, dtype=torch.bfloat16, device_map="auto"
... )
>>> tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
>>> scheduler = BlockRefinementScheduler()

>>> pipe = LLaDA2Pipeline(model=model, scheduler=scheduler, tokenizer=tokenizer)
>>> output = pipe(prompt="What is the meaning of life?", gen_length=256)
>>> print(output.texts[0])

LLaDA2PipelineOutput

فئة diffusers.LLaDA2PipelineOutput

< >

( sequences: torch.LongTensortexts: list[str] | None = None )

Update on GitHub