File size: 2,341 Bytes
963aa40 3bcd330 b5abc49 b491ef7 963aa40 87f543c 4416811 e9fe7ab 2c48891 b5abc49 4416811 312ca37 4416811 2c48891 b5abc49 312ca37 b5abc49 87f543c b5abc49 87f543c 312ca37 b5abc49 2c48891 ce4a82b b5abc49 312ca37 b5abc49 312ca37 b491ef7 87f543c 312ca37 87f543c 312ca37 87f543c 2c48891 b5abc49 963aa40 b5abc49 ce4a82b b5abc49 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel, PeftConfig
import torch
# Конфигурация
BASE_MODEL = "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
PEFT_MODEL = "Aleks84/autotrain-5zwfh-fm328"
# 1. Загрузка с исправлением словаря
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
BASE_MODEL,
torch_dtype=torch.float32,
trust_remote_code=True,
low_cpu_mem_usage=True
)
# 2. Принудительная синхронизация размеров
model.resize_token_embeddings(len(tokenizer))
original_embeddings = model.get_input_embeddings().weight.data
new_embeddings = original_embeddings[:len(tokenizer), :]
model.get_input_embeddings().weight.data = new_embeddings
model.lm_head.weight.data = new_embeddings # Для моделей с shared weights
# 3. Загрузка адаптеров с пересчетом весов
peft_config = PeftConfig.from_pretrained(PEFT_MODEL)
model = PeftModel.from_pretrained(
model,
PEFT_MODEL,
config=peft_config,
adapter_name="default",
strict=False # Игнорируем несоответствия размеров
)
# 4. Объединение с проверкой
model = model.merge_and_unload()
model.eval()
def generate_response(message, history):
# Форматирование для Qwen
prompt = "<|im_start|>system\nОтветь как помощник<|im_end|>\n"
for user, assistant in history:
prompt += f"<|im_start|>user\n{user}<|im_end|>\n"
prompt += f"<|im_start|>assistant\n{assistant}<|im_end|>\n"
prompt += f"<|im_start|>user\n{message}<|im_end|>\n<|im_start|>assistant\n"
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(
inputs.input_ids,
max_new_tokens=128,
temperature=0.7,
repetition_penalty=1.1,
pad_token_id=tokenizer.eos_token_id
)
return tokenizer.decode(outputs[0][inputs.input_ids.shape[-1]:], skip_special_tokens=True)
gr.ChatInterface(
fn=generate_response,
title="DeepSeek Assistant",
examples=["Как работает ИИ?", "Напиши код на Python"],
theme=gr.themes.Soft()
).launch() |