Diffusers documentation
LLaDA2
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 وضعين:
| الوضع | threshold | editing_threshold | max_post_steps |
|---|---|---|---|
| الجودة | 0.7 | 0.5 | 16 |
| السرعة | 0.5 | None | 16 |
مرّر 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
< source >( model: Anyscheduler: BlockRefinementSchedulertokenizer: Any | None = None )
خط أنابيب لتوليد النصوص عبر الانتشار المنفصل بأسلوب LLaDA2 باستخدام التحسين التكراري على مستوى الكتل.
تحتفظ هذه المسار الوظيفي بسلسلة قالب مملوءة بـmask_token_id وتُحسّنها على شكل كتل. في كل خطوة تحسين، تُسحب رموز مرشحة للكتلة النشطة وتُثبَّت مجموعة فرعية منها بناءً على درجة الثقة.
من المتوقع أن يقبل النموذج قناع الانتباه وposition_ids، وأن يعيد قيم اللوجيت على شكل [batch, seq, vocab_size].
__call__
< source >( 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
< source >( sequences: torch.LongTensortexts: list[str] | None = None )