🚀 Unsloth:让Llama 3.1、Gemma 2、Mistral 2微调加速5倍,内存使用降低70%!
Unsloth能够显著提升模型微调效率,降低内存使用。用户可以利用免费的Google Colab笔记本,轻松完成模型微调。微调后的模型可导出为GGUF、vLLM格式,或上传至Hugging Face。
我们提供了Qwen 2.5(所有模型大小)的免费Google Colab Tesla T4笔记本,还有Qwen 2.5对话风格笔记本。

🚀 快速开始
免费微调
所有笔记本都对初学者友好!添加你的数据集,点击“全部运行”,你将获得一个速度提升2倍的微调模型,该模型可以导出为GGUF、vLLM格式,或上传至Hugging Face。
- 此对话笔记本适用于ShareGPT ChatML / Vicuna模板。
- 此文本补全笔记本适用于原始文本。此DPO笔记本可复现Zephyr。
- * Kaggle有2个T4 GPU,但我们只使用1个。由于开销问题,1个T4 GPU的速度是原来的5倍。
✨ 主要特性
Qwen2.5-7B-Instruct介绍
Qwen2.5是通义大语言模型的最新系列。对于Qwen2.5,我们发布了一系列基础语言模型和指令调优语言模型,参数范围从5亿到720亿。Qwen2.5在Qwen2的基础上带来了以下改进:
- 知识更丰富:由于我们在编码和数学领域的专业专家模型,Qwen2.5在编码和数学方面的能力有了极大提升。
- 指令遵循能力提升:在指令遵循、长文本生成(超过8K tokens)、结构化数据理解(如表格)和结构化输出生成(特别是JSON)方面有显著改进。对系统提示的多样性更具鲁棒性,增强了聊天机器人的角色扮演实现和条件设置。
- 长上下文支持:支持长达128K tokens的上下文,并能生成长达8K tokens的文本。
- 多语言支持:支持超过29种语言,包括中文、英文、法文、西班牙文、葡萄牙文、德文、意大利文、俄文、日文、韩文、越南文、泰文、阿拉伯文等。
本仓库包含经过指令调优的7B Qwen2.5模型,具有以下特点:
属性 |
详情 |
模型类型 |
因果语言模型 |
训练阶段 |
预训练和后训练 |
架构 |
带有RoPE、SwiGLU、RMSNorm和注意力QKV偏置的transformers |
参数数量 |
76.1亿 |
非嵌入参数数量 |
65.3亿 |
层数 |
28 |
注意力头数量(GQA) |
Q为28,KV为4 |
上下文长度 |
完整的131,072 tokens,生成8192 tokens |
有关如何部署Qwen2.5处理长文本的详细说明,请参考此部分。
更多详细信息,请参考我们的博客、GitHub和文档。
要求
Qwen2.5的代码已集成在最新的Hugging face transformers
中,我们建议你使用最新版本的transformers
。
使用transformers<4.37.0
时,你会遇到以下错误:
KeyError: 'qwen2'
快速上手
以下是一个使用apply_chat_template
的代码片段,展示了如何加载分词器和模型,以及如何生成内容。
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2.5-7B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "Give me a short introduction to large language model."
messages = [
{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
处理长文本
当前的config.json
设置的上下文长度最大为32,768 tokens。
为了处理超过32,768 tokens的大量输入,我们使用了YaRN技术,该技术可增强模型的长度外推能力,确保在长文本上的最佳性能。
对于支持的框架,你可以在config.json
中添加以下内容以启用YaRN:
{
...,
"rope_scaling": {
"factor": 4.0,
"original_max_position_embeddings": 32768,
"type": "yarn"
}
}
对于部署,我们建议使用vLLM。如果你不熟悉vLLM,请参考我们的文档。目前,vLLM仅支持静态YARN,这意味着缩放因子无论输入长度如何都保持不变,可能会影响短文本的性能。我们建议仅在需要处理长上下文时添加rope_scaling
配置。
评估与性能
详细的评估结果见此博客。
有关GPU内存要求和相应的吞吐量,请参阅此处的结果。
引用
如果你觉得我们的工作有帮助,请引用以下内容:
@misc{qwen2.5,
title = {Qwen2.5: A Party of Foundation Models},
url = {https://qwenlm.github.io/blog/qwen2.5/},
author = {Qwen Team},
month = {September},
year = {2024}
}
@article{qwen2,
title={Qwen2 Technical Report},
author={An Yang and Baosong Yang and Binyuan Hui and Bo Zheng and Bowen Yu and Chang Zhou and Chengpeng Li and Chengyuan Li and Dayiheng Liu and Fei Huang and Guanting Dong and Haoran Wei and Huan Lin and Jialong Tang and Jialin Wang and Jian Yang and Jianhong Tu and Jianwei Zhang and Jianxin Ma and Jin Xu and Jingren Zhou and Jinze Bai and Jinzheng He and Junyang Lin and Kai Dang and Keming Lu and Keqin Chen and Kexin Yang and Mei Li and Mingfeng Xue and Na Ni and Pei Zhang and Peng Wang and Ru Peng and Rui Men and Ruize Gao and Runji Lin and Shijie Wang and Shuai Bai and Sinan Tan and Tianhang Zhu and Tianhao Li and Tianyu Liu and Wenbin Ge and Xiaodong Deng and Xiaohuan Zhou and Xingzhang Ren and Xinyu Zhang and Xipin Wei and Xuancheng Ren and Yang Fan and Yang Yao and Yichang Zhang and Yu Wan and Yunfei Chu and Yuqiong Liu and Zeyu Cui and Zhenru Zhang and Zhihao Fan},
journal={arXiv preprint arXiv:2407.10671},
year={2024}
}
📄 许可证
本项目采用Apache-2.0许可证。