项目简介:OpenLLaMA——LLaMA的开源复刻
OpenLLaMA是对Meta AI大型语言模型LLaMA的开源复刻项目,采用Apache 2.0许可协议。此项目发布了多个版本的模型,包括3B、7B和13B参数规模,均在不同数据集合上进行训练,并可以替代现有LLaMA模型使用。
权重发布、许可和使用
OpenLLaMA提供两种格式的模型权重:适用于EasyLM框架的EasyLM格式以及适用于Hugging Face Transformers库的PyTorch格式。训练框架EasyLM和检查点权重均采用Apache 2.0许可协议。
通过Hugging Face Transformers加载权重
用户可以直接从Hugging Face Hub加载预览检查点。然而,需注意当前不可使用Hugging Face的快速分词器,推荐直接使用LlamaTokenizer
类或在AutoTokenizer
类中设定use_fast=False
。具体代码参考如下:
import torch
from transformers import LlamaTokenizer, LlamaForCausalLM
model_path = 'openlm-research/open_llama_7b_v2'
tokenizer = LlamaTokenizer.from_pretrained(model_path)
model = LlamaForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16, device_map='auto')
prompt = 'Q: What is the largest animal?\nA:'
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
generation_output = model.generate(input_ids=input_ids, max_new_tokens=32)
print(tokenizer.decode(generation_output[0]))
与LM-Eval-Harness结合评价模型
可以使用lm-eval-harness评估模型,同样需避免使用快速分词器。示例代码如下:
tokenizer = self.AUTO_TOKENIZER_CLASS.from_pretrained(pretrained if tokenizer is None else tokenizer, revision=revision + ("/" + subfolder if subfolder is not None else ""), use_fast=False)
通过EasyLM加载权重
使用EasyLM框架的用户可参考LLaMA的EasyLM文档。与原始LLaMA模型不同,OpenLLaMA的分词器和权重均从头训练,无需获取原始模型的分词器和权重。
数据集和训练
版本1模型基于RedPajama数据集训练,而版本2模型则使用了包括Falcon refined-web数据集、StarCoder数据集在内的多种数据混合。
我们与原始LLaMA论文保持相同的预处理步骤和训练超参数, 唯一不同在于使用的训练数据集:OpenLLaMA选择的是开放数据集。
训练架构
OpenLLaMA在云端TPU-v4s上进行模型训练,使用我们开发的基于JAX的EasyLM训练管道。通过普通数据并行和完全分片数据并行(也称为ZeRO阶段3)的结合,平衡了训练吞吐量与内存使用,7B型号的训练吞吐量达到每秒超过2200个tokens。
评估结果
使用lm-evaluation-harness,我们对OpenLLaMA进行了广泛的任务评估。结果显示,OpenLLaMA在大多数任务上的表现与原始LLaMA和6B参数的GPT-J相当,甚至在某些任务上表现更佳。
评估结果对比表中显示了OpenLLaMA相较于其他模型在不同任务中的表现。需要注意的是,个别任务(如CB和WSC)的评估结果异常高,因此我们怀疑可能存在训练集污染。
联系与贡献
OpenLLaMA由伯克利AI研究组的Xinyang Geng和Hao Liu共同开发。如果有任何问题或建议,欢迎通过项目的GitHub页面与我们联系。