Buckets:
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üven düzeyine göre kademeli olarak maskesini kaldırır.
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[[diffusers.LLaDA2Pipeline]]
diffusers.LLaDA2Pipeline[[diffusers.LLaDA2Pipeline]]
diffusers.LLaDA2Pipeline(model: Any, scheduler: BlockRefinementScheduler, tokenizer: 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 bunu bloklar halinde iyileştirir. Her iyileştirme 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[[diffusers.LLaDA2Pipeline.call]]
__call__(prompt: str | list[str] | None = None, messages: list[dict[str, str]] | None = None, input_ids: torch.LongTensor | None = None, attention_mask: torch.LongTensor | None = None, use_chat_template: bool = True, add_generation_prompt: bool = True, gen_length: int = 2048, block_length: int | None = None, num_inference_steps: int = 32, temperature: float = 0.0, top_p: float | None = None, top_k: int | None = None, sampling_method: str = 'multinomial', threshold: float = 0.7, editing_threshold: float | None = 0.5, max_post_steps: int = 16, minimal_topk: int = 1, eos_early_stop: bool = True, eos_token_id: int | None = None, mask_token_id: int | None = None, generator: torch.Generator | None = None, output_type: str = 'text', return_dict: bool = True, callback_on_step_end: Callable[[int, int, dict], None] | PipelineCallback | MultiPipelineCallbacks | None = None, callback_on_step_end_tensor_inputs: list[str] | None = None)
Parametreler:
prompt (str veya List[str], isteğe bağlı) : İstek metni. use_chat_template True (varsayılan) olduğunda ve sohbet şablonu olan bir tokenizer mevcut olduğunda, istek, tokenizasyondan önce bir sohbet mesajına sarılır.
messages (List[Dict[str, str]], isteğe bağlı) : Kodlanacak sohbet mesajları (ör. [{"role": "user", "content": "Hello"}]). Verildiğinde prompt parametresine öncelik verir. apply_chat_template içeren bir tokenizer gerektirir.
input_ids (torch.LongTensor, isteğe bağlı) : Ön işlenmiş girdi kimlikleri. prompt ve messages üzerinde önceliğe sahiptir.
attention_mask (torch.LongTensor, isteğe bağlı) : input_ids biçimiyle eşleşen, token başına maske (geçerli istem tokenları için 1, dolgu için 0). Yalnızca input_ids sağlandığında kullanılır. Atlandığında (ve input_ids verildiğinde), tüm konumlar geçerli olarak kabul edilir. prompt / messages kullanılarak girdiler oluşturulduğunda, tokenizer'ın maskesi otomatik olarak aktarılır.
use_chat_template (bool, varsayılan True) : İsteğin bir sohbet şablonuyla sarılıp sarılmayacağı.
add_generation_prompt (bool, varsayılan True) : 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_length değeri kullanılır.
num_inference_steps (int) : Blok başına 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 noktası.
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 üzerinde bir güvenle farklı bir jeton öngörürse, mevcut jeton değiştirilir. Düzenlemeyi devre dışı bırakmak için None, 0.0 veya negatif bir değer ayarlayın. Varsayılan değer 0.5'tir.
max_post_steps (int) : Bir blokta tüm mask jetonları çözümlendikten sonra uygulanacak ek iyileştirme iterasyonlarının maksimum sayısı. Yalnızca editing_threshold etkinleştirildiğinde kullanılır. Varsayılan değeri 16'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 maske belirteç kimliği.
generator (torch.Generator, isteğe bağlı) : Örnekleme için RNG.
output_type (str, varsayılan "text") : Çıktı biçimi. "text", dizileri metinlere çözer (bir tokenizer gerektirir). "seq", yalnızca ham token kimliği dizilerini döndürür.
return_dict (bool, isteğe bağlı, varsayılan True) : Bir tuple yerine LLaDA2PipelineOutput döndürülüp döndürülmemesi.
callback_on_step_end (Callable veya PipelineCallback, isteğe bağlı) : İmzası callback_on_step_end(self, step: int, timestep: int, callback_kwargs: Dict) olan, her iyileştirme adımından sonra çalıştırılan geri çağrı.
callback_on_step_end_tensor_inputs (List[str], isteğe bağlı) : Geri çağrıya iletilecek Tensor anahtarları. İzin verilen anahtarlar: block_x, transfer_index, editing_transfer_index, sampled_tokens, sampled_probs, active_block.
Dönüş: LLaDA2PipelineOutput veya tuple
return_dict True ise LLaDA2PipelineOutput döndürülür, aksi takdirde ilk öğesi üretilen token kimlikleri (torch.LongTensor), ikinci öğesi ise çözümlenmiş metinler (list[str]) olan bir tuple döndürülür; output_type "seq" olduğunda ise None döndürülür.
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[[diffusers.LLaDA2PipelineOutput]]
diffusers.LLaDA2PipelineOutput[[diffusers.LLaDA2PipelineOutput]]
diffusers.LLaDA2PipelineOutput(sequences: torch.LongTensor, texts: list[str] | None = None)
Xet Storage Details
- Size:
- 9.96 kB
- Xet hash:
- 1413c4e8358fa6161ced85dea5b52b2662ee093efc0ef757003634134ef27ddb
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.