Infinity-Instruct-3M-0625-Yi-1.5-9B项目介绍
项目概述
Infinity-Instruct-3M-0625-Yi-1.5-9B是一个开源的监督式指令微调模型,这个模型不基于人类反馈的强化学习(RLHF)。它是在Infinity-Instruct-3M和Infinity-Instruct-0625数据集上进行微调的,并且在AlpacaEval 2.0和MT-Bench评测中表现出色。
最新进展
- 2024年7月9日,发布了多个模型的权重,包括InfInstruct-Mistral-7B 0625、InfInstruct-Qwen2-7B 0625、InfInstruct-Llama3-8B 0625和InfInstruct-Yi-1.5-9B 0625。
- 同日,发布了Infinity-Instruct-0625聊天数据集,这是Infinity-Instruct-0613的升级版本。
- 2024年6月28日,发布了InfInstruct-Llama3-70B 0613的模型权重,它在AlpacaEval 2.0中的表现与GPT4-0613相当。
- 2024年6月21日,发布了InfInstruct-Mistral-7B 0613模型权重,相较于Mixtral 8x7B v0.1、Gemini Pro和GPT-3.5表现突出。
训练细节
Infinity-Instruct-3M-0625-Yi-1.5-9B在百万级指令数据集Infinity-Instruct上进行了训练。首先,它通过Infinity-Instruct-3M数据集提升了Yi-1.5-9B的基础能力(数学&编程),形成了基础指令模型Infinity-Instruct-3M-Yi-1.5-9B。随后,通过进一步的微调,形成了更强大的聊天模型Infinity-Instruct-3M-0625-Yi-1.5-9B。
训练的超参数如下:
epoch: 3
lr: 1e-5
min_lr: 0
lr_warmup_steps: 40
lr_decay_style: cosine
weight_decay: 0.0
adam_beta1: 0.9
adam_beta2: 0.95
global_batch_size: 528
clip_grad: 1.0
利用FlagScale工具,我们可以串联多个训练样本去除填充符,并运用多种加速技术,从而有效降低训练成本。
基准测试
在两个最受欢迎的指令遵循基准测试中评估了Infinity-Instruct-3M-0625-Yi-1.5-9B。MT-Bench是一个多回合挑战性问题集,包括代码、数学和例行对话。AlpacaEval2.0基于AlpacaFarm评估集,这两个基准都使用GPT-4对模型答案进行判断。
模型 | MT-Bench | AlpacaEval2.0 |
---|---|---|
OpenHermes-2.5-Mistral-7B* | 7.5 | 16.2 |
Mistral-7B-Instruct-v0.2 | 7.6 | 17.1 |
Llama-3-8B-Instruct | 8.1 | 22.9 |
Yi-1.5-9B-Chat | 8.2 | 22.9 |
InfInstruct-3M-0625-Yi-1.5-9B* | 8.0 | 20.5 |
*模型为无RLHF微调。
如何使用
Infinity-Instruct-3M-0625-Yi-1.5-9B采用与Yi-1.5-9B-Chat相同的聊天模板。以下是如何在对话场景中应用此模型的代码示例:
from transformers import AutoModelForCausalLM, AutoTokenizer, LogitsProcessorList
import torch
device = "cuda"
model = AutoModelForCausalLM.from_pretrained("BAAI/Infinity-Instruct-3M-0625-Yi-1.5-9B",
torch_dtype=torch.bfloat16,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("BAAI/Infinity-Instruct-3M-0625-Yi-1.5-9B")
prompt = "Give me a short introduction to large language model."
messages = [
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)
logits_processor = LogitsProcessorList(
[
MinLengthLogitsProcessor(1, eos_token_id=tokenizer.eos_token_id),
TemperatureLogitsWarper(0.7),
]
)
generated_ids = model.generate(
model_inputs.input_ids,
logits_processor=logits_processor,
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]
print(response)
免责声明
与该项目相关的资源,包括代码、数据和模型权重,仅限学术研究使用,不可用于商业用途。由于输出结果受随机性等无法控制变量的影响,因此无法保证所有输出的准确性。项目方不对模型输出内容承担法律责任,也不对因使用相关资源和输出结果而导致的任何损失负责。
引用
有关Infinity Instruct数据集和微调模型发展及特性的详细信息,将很快在arXiv发布。
@article{InfinityInstruct2024,
title={Infinity Instruct},
author={Beijing Academy of Artificial Intelligence (BAAI)},
journal={arXiv preprint arXiv:2406.XXXX},
year={2024}
}