Diffusers documentation
LLaDA2
LLaDA2
LLaDA2, blok bazlı iteratif iyileştirme yoluyla metin üreten ayrık difüzyon dil modelleri ailesidir. Otoregresif token-token üretimine alternatif olarak LLaDA2, tamamen maskelenmiş bir diziden başlar ve birden fazla iyileştirme adımında tokenları güvene göre kademeli olarak maskeden çıkar.
Kullanım
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])Geri Çağrılar
Callbacks, her iyileştirme adımının ardından çalışır. callback_kwargs içinde hangi tensörlerin yer alacağını seçmek için callback_on_step_end_tensor_inputs parametresini iletin. Mevcut uygulamada block_x (iyileştirilen dizi penceresi) ve transfer_index (maske doldurma onay maskesi) sağlanır; pencereyi değiştirmek için callback'den {"block_x": ...} döndürün.
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"],
)Önerilen parametreler
LLaDA2.1 modelleri iki modu destekler:
| Mod | threshold | editing_threshold | max_post_steps |
|---|---|---|---|
| Kalite | 0.7 | 0.5 | 16 |
| Hız | 0.5 | None | 16 |
Post-mask düzenlemeyi kapatmak için editing_threshold=None, 0.0 veya negatif bir değer geçirin.
LLaDA2.0 modelleri için düzenlemeyi devre dışı bırakmak için editing_threshold=None veya 0.0 geçirin.
Tüm modeller için: block_length=32, temperature=0.0, num_inference_steps=32.
LLaDA2Pipeline
sınıf diffusers.LLaDA2Pipeline
< source >( model: Anyscheduler: BlockRefinementSchedulertokenizer: Any | None = None )
LLaDA2 tarzı blok bazlı iteratif iyileştirme yoluyla ayrık difüzyon metin üretimi için pipeline.
Bu pipeline, mask_token_id ile doldurulmuş bir şablon dizisini korur ve bloklar halinde inceltir. Her inceltme adımında, aktif blok için aday token'lar örneklenir ve güvene dayalı olarak bir alt küme onaylanır.
Modelin bir dikkat maskesi ve position_ids kabul etmesi ve [batch, seq, vocab_size] biçiminde logitler döndürmesi beklenir.
__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
Parametreler
- prompt (
strveyaList[str], isteğe bağlı) — Prompt metni.use_chat_templateTrueolduğunda (varsayılan) ve bir sohbet şablonuna sahip bir tokenizer mevcut olduğunda, prompt, tokenizasyondan önce bir sohbet mesajı olarak sarılır. - messages (
List[Dict[str, str]], isteğe bağlı) — Kodlanacak sohbet mesajları (ör.[{"role": "user", "content": "Hello"}]). Verildiğindepromptparametresine öncelik verir.apply_chat_templateiçeren bir tokenizer gerektirir. - input_ids (
torch.LongTensor, isteğe bağlı) — Önceden tokenize edilmiş girdi kimlikleri.promptvemessagesparametrelerine göre önceliklidir. - attention_mask (
torch.LongTensor, isteğe bağlı) —input_idsbiçimiyle eşleşen, token başına maske (geçerli istem tokenları için 1, dolgu için 0). Yalnızcainput_idssağlandığında kullanılır. Atlandığında (veinput_idsverildiğinde), tüm konumlar geçerli olarak kabul edilir. Girdilerprompt/messagesüzerinden oluşturulduğunda, tokenizer’ın maskesi otomatik olarak aktarılır. - use_chat_template (
bool, varsayılanTrue) — İstemin bir sohbet şablonuyla sarılıp sarılmayacağı. - add_generation_prompt (
bool, varsayılanTrue) — Sohbet şablonları kullanılırken üretim istemcinin eklenip eklenmeyeceğini belirtir. - gen_length (
int) — Üretilecek jeton sayısı. - block_length (
int, isteğe bağlı) — İnce ayar için blok boyutu. Verilmezse, zamanlayıcının yapılandırılmışblock_lengthdeğeri kullanılır. - num_inference_steps (
int) — Her blok için iyileştirme adım sayısı. - temperature (
float) — Örnekleme sıcaklığı. - top_p (
float, isteğe bağlı) — Nükleer örneklem kesme değeri. - top_k (
int, isteğe bağlı) — Top-k örneklemesi kesme değeri. - sampling_method (
str) — Örnekleme yöntemi (auto,greedy,multinomial). - threshold (
float) — Token'ların onaylanması için güven eşiği. - editing_threshold (
float, isteğe bağlı) — Zaten taahhüt edilmiş (mask olmayan) jetonların düzenlenmesi için güven eşiği. Pozitif olduğunda, bir blokta tüm mask jetonları çözüldükten sonra pipeline ince ayarı sürdürür: model, bu eşiğin üzerindeki bir güvenle farklı bir jeton öngörürse, mevcut jeton değiştirilir. Düzenlemeyi devre dışı bırakmak içinNone,0.0veya negatif bir değer ayarlayın. Varsayılan değer0.5'tir. - max_post_steps (
int) — Bir blokta tüm mask jetonları çözüldükten sonra yapılacak ek iyileştirme iterasyonlarının maksimum sayısı. Yalnızcaediting_thresholdetkinleştirildiğinde kullanılır. Varsayılan değeri16'dır. - minimal_topk (
int) — Adım başına taahhüt edilecek minimum token sayısı. - eos_early_stop (
bool) — Bir blokta EOS taahhüt edildikten sonra durulup durulmayacağı. - eos_token_id (
int, isteğe bağlı) — Erken durdurma için kullanılacak EOS token kimliği. - mask_token_id (
int, isteğe bağlı) — Şablon için kullanılacak mask token kimliği. - generator (
torch.Generator, isteğe bağlı) — Örnekleme için RNG. - output_type (
str, varsayılan"text") — Çıktı biçimi."text"dizileri dizelere çözer (bir tokenizer gerektirir)."seq"yalnızca ham token kimliği dizilerini döndürür. - return_dict (
bool, isteğe bağlı, varsayılanTrue) — Bir tuple yerine LLaDA2PipelineOutput döndürülüp döndürülmemesi. - callback_on_step_end (
CallableveyaPipelineCallback, isteğe bağlı) — Her iyileştirme adımının ardından,callback_on_step_end(self, step: int, timestep: int, callback_kwargs: Dict)imzasıyla çalıştırılan geri çağırma. - callback_on_step_end_tensor_inputs (
List[str], isteğe bağlı) — Geri çağrıya iletilecek tensör anahtarları. İzin verilen anahtarlar:block_x,transfer_index,editing_transfer_index,sampled_tokens,sampled_probs,active_block.
Dönüş değeri
LLaDA2PipelineOutput veya tuple
return_dict True ise LLaDA2PipelineOutput döndürülür,
aksi halde ilk öğesi üretilen token kimlikleri (torch.LongTensor) olan,
ikinci öğesi ise çözümlenmiş metinler (list[str]) olan bir tuple döndürülür; output_type "seq" olduğunda ikinci öğe None olur.
Blok bazlı iyileştirme ile metin üretin.
Örnekler:
>>> 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
sınıf diffusers.LLaDA2PipelineOutput
< source >( sequences: torch.LongTensortexts: list[str] | None = None )