|
|
--- |
|
|
library_name: peft |
|
|
model_name: AlterEgo |
|
|
tags: |
|
|
- base_model:adapter:Qwen/Qwen3-4B-Base |
|
|
- lora |
|
|
- sft |
|
|
- transformers |
|
|
- trl |
|
|
licence: license |
|
|
pipeline_tag: text-generation |
|
|
base_model: Qwen/Qwen3-4B-Base |
|
|
--- |
|
|
|
|
|
# AlterEgo |
|
|
|
|
|
This model is a fine-tuned version of [Qwen3-4B-Base](https://huggingface.co/Qwen/Qwen3-4B-Base). |
|
|
It has been trained using [TRL](https://github.com/huggingface/trl). |
|
|
|
|
|
这个模型是使用我的几千条知乎问答微调而成的,可以称为我的“数字分身”。 |
|
|
|
|
|
本项目受到《弹丸论破》的超高校级程序员不二咲千寻的分身程序启发。 |
|
|
|
|
|
## Quick start |
|
|
|
|
|
```python |
|
|
import torch |
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig |
|
|
from peft import PeftModel |
|
|
|
|
|
|
|
|
base_model_id = "Qwen/Qwen3-4B-Base" |
|
|
adapter_path = "hugfaceguy0001/AlterEgo" |
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained(base_model_id) |
|
|
SIMPLE_CHAT_TEMPLATE = ( |
|
|
"{% for message in messages %}" |
|
|
"{{'<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n'}}" |
|
|
"{% endfor %}" |
|
|
"{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}" |
|
|
) |
|
|
tokenizer.chat_template = SIMPLE_CHAT_TEMPLATE |
|
|
|
|
|
base_model = AutoModelForCausalLM.from_pretrained( |
|
|
base_model_id, |
|
|
device_map="auto" |
|
|
) |
|
|
|
|
|
model = PeftModel.from_pretrained(base_model, adapter_path) |
|
|
model = model.merge_and_unload() |
|
|
model.eval() |
|
|
|
|
|
with torch.no_grad(): |
|
|
question = '为什么说学术圈性价比在下降?' |
|
|
messages = [{"role": "user", "content": question}] |
|
|
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True, enable_thinking=False) |
|
|
model_inputs = tokenizer( |
|
|
text, |
|
|
return_tensors="pt", |
|
|
padding=True, |
|
|
).to("cuda") |
|
|
generation_config = GenerationConfig( |
|
|
max_new_tokens=1024, |
|
|
temperature=1.2, |
|
|
do_sample=True, |
|
|
pad_token_id=tokenizer.pad_token_id, |
|
|
stop_texts=["<|endoftext|>","<|im_end|>"], |
|
|
enable_thinking=False, |
|
|
) |
|
|
generated_ids = model.generate( |
|
|
input_ids=model_inputs.input_ids, |
|
|
attention_mask=model_inputs.attention_mask, |
|
|
generation_config=generation_config, |
|
|
) |
|
|
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] |
|
|
print(response) |
|
|
``` |
|
|
|
|
|
## Training procedure |
|
|
|
|
|
我使用我的知乎问答数据,大约4000条,通过TRL库的SFTTrainer,在Qwen3-4B-Base基础上训练了这个LoRA. 为了提高效果,我把模型头(lm_head)也加入了训练。训练使用单张RTX 3090,精度为bfloat16,序列长度为1024,batch size是8,梯度累积步数为4,使用Flash Attention 2, 训练了6个epoch,用时约6小时。 |
|
|
|
|
|
### Framework versions |
|
|
|
|
|
- PEFT 0.18.0 |
|
|
- TRL: 0.25.1 |
|
|
- Transformers: 4.57.3 |
|
|
- Pytorch: 2.9.1 |
|
|
- Datasets: 4.4.1 |
|
|
- Tokenizers: 0.22.1 |
|
|
|
|
|
## Citations |
|
|
|
|
|
|
|
|
|
|
|
Cite TRL as: |
|
|
|
|
|
```bibtex |
|
|
@misc{vonwerra2022trl, |
|
|
title = {{TRL: Transformer Reinforcement Learning}}, |
|
|
author = {Leandro von Werra and Younes Belkada and Lewis Tunstall and Edward Beeching and Tristan Thrush and Nathan Lambert and Shengyi Huang and Kashif Rasul and Quentin Gallou{\'e}dec}, |
|
|
year = 2020, |
|
|
journal = {GitHub repository}, |
|
|
publisher = {GitHub}, |
|
|
howpublished = {\url{https://github.com/huggingface/trl}} |
|
|
} |
|
|
``` |