Zhaoming213's picture
Upload 7 files
a4343ab verified
Raw History Blame Contribute Delete
1.83 kB
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
import coremltools as ct
import torch
# 1. 设定模型路径和运行设备(确保该路径下是转换好的标准 transformers 格式)
model_path = "./minimind-3-tinymodel" # 换成你的 SFT 模型本地路径或 HF 仓库名
device = "cuda" if torch.cuda.is_available() else "cpu"
# 2. 加载 Tokenizer 和模型
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, trust_remote_code=True).half().to(device)
model.eval()
# 3. 设置流式输出器
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
print("🤖 SFT 模型加载完成!请输入你的问题(输入 exit 退出):\n" + "=" * 40)
# 4. 简单的单轮/多轮交互循环
while True:
prompt = input("💬 用户: ").strip()
if not prompt or prompt.lower() == 'exit':
break
# 构造符合 SFT 模型的 Chat 结构
messages = [{"role": "user", "content": prompt}]
# 核心:使用 apply_chat_template 自动加上模型的特殊 Chat 标记
input_text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(input_text, return_tensors="pt", truncation=True).to(device)
# 5. 模型流式生成
print("🧠 助手: ", end="")
with torch.no_grad():
model.generate(
input_ids=inputs["input_ids"],
attention_mask=inputs.get("attention_mask"),
max_new_tokens=512,
do_sample=True,
top_p=0.95,
temperature=0.9,
streamer=streamer,
pad_token_id=tokenizer.pad_token_id,
eos_token_id=tokenizer.eos_token_id
)
print("\n" + "-" * 40)