Views
No views yet
1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
3from peft import PeftModel
4
5BASE = "Qwen/Qwen2.5-3B-Instruct"
6ADAPTER = "oriewhy/qwen2.5-3b-creepypasta-ru" # или локальный путь к адаптеру
7
8bnb = BitsAndBytesConfig(
9 load_in_4bit=True, bnb_4bit_quant_type="nf4",
10 bnb_4bit_compute_dtype=torch.float16, bnb_4bit_use_double_quant=True,
11)
12tok = AutoTokenizer.from_pretrained(ADAPTER)
13model = AutoModelForCausalLM.from_pretrained(BASE, quantization_config=bnb, device_map="auto")
14model = PeftModel.from_pretrained(model, ADAPTER)
15
16msgs = [{"role": "user", "content": "Напиши крипипасту под названием «Лифт на 13-й этаж»"}]
17inputs = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
18out = model.generate(inputs, max_new_tokens=600, do_sample=True, temperature=0.7,
19 top_p=0.9, repetition_penalty=1.1)
20print(tok.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))| Параметр | Значение |
|---|---|
| Метод | QLoRA (4-bit NF4, double quant) |
| LoRA | r=16, alpha=32, dropout=0.05, target: q/k/v/o/gate/up/down_proj |
| Эпохи | 2 (на практике достаточно 1 — eval_loss выходит на плато) |
| Эффективный batch | 16 (1 × grad_accum 16) |
| Длина последовательности | 512 |
| LR / scheduler | 2e-4 / cosine, warmup 3%, optimizer paged_adamw_8bit |
| Финальный train/eval loss | ~1.82 / ~1.98 |
max_new_tokens может растекаться/повторяться (помогает
repetition_penalty).qwen-research) — это некоммерческая, исследовательская лицензия (НЕ Apache 2.0).
Её условия распространяются на этот производный адаптер: