Diffusers documentation
LLaDA2
LLaDA2
LLaDA2 هو عائلة من نماذج اللغة الانتشارية المنفصلة التي تولّد النص من خلال تحسين تكراري على مستوى الكتل. وبدلا من التوليد التتابعي للرموز واحدًا تلو الآخر، يبدأ LLaDA2 بتسلسل مقنّع بالكامل ثم يكشف الرموز تدريجيًا بناءً على درجة الثقة عبر خطوات تحسين متعددة.
الاستخدام
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 )