license: apache-2.0
datasets:
- tiiuae/falcon-refinedweb
- bigcode/starcoderdata
- togethercomputer/RedPajama-Data-1T
OpenLLaMA:LLaMA的开源复现项目
摘要:我们发布OpenLLaMA的公开预览版,这是一个基于宽松许可证的开源项目,旨在复现Meta AI的LLaMA模型。本次发布包含3B、7B和13B参数规模的系列模型,采用不同数据混合训练。我们的模型权重可直接替代现有实现中的LLaMA模型。
本仓库展示了Meta AI LLaMA大语言模型的开源复现版本(基于宽松许可证)。我们发布了基于1万亿token训练的3B/7B/13B系列模型,提供PyTorch和JAX格式的预训练权重,同时包含与原始LLaMA模型的评估对比结果。v2版本模型优于采用不同数据混合训练的旧版v1模型。更多细节请参阅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_3b_v2'
tokenizer = LlamaTokenizer.from_pretrained(model_path)
model = LlamaForCausalLM.from_pretrained(
model_path, torch_dtype=torch.float16, device_map='auto',
)
prompt = 'Q: 现存最大的动物是什么?\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]))
高级用法请参考transformers LLaMA文档。
使用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框架中使用权重时,请参考EasyLM的LLaMA文档。需注意:与原始LLaMA不同,OpenLLaMA的分词器和权重均为全新训练,因此无需获取原始LLaMA的分词器和权重。
数据集与训练
v1模型基于RedPajama数据集训练。v2模型采用Falcon refined-web数据集、StarCoder数据集及RedPajama中的维基百科、arXiv、书籍和StackExchange子集的混合数据。我们完全遵循原始LLaMA论文的预处理步骤和训练超参数,包括模型架构、上下文长度、训练步数、学习率调度和优化器。唯一区别在于数据集:OpenLLaMA使用开放数据集而非原始LLaMA的专有数据。
我们使用基于JAX的EasyLM训练框架在云TPU-v4上训练模型,结合常规数据并行与全分片数据并行(ZeRO第三阶段)来平衡训练吞吐量和内存使用。7B模型的整体吞吐量超过2200 token/秒/TPU-v4芯片。
评估结果
我们使用lm-evaluation-harness在多任务上评估OpenLLaMA。LLaMA结果通过相同评估指标在原始模型上运行得到。需注意我们的LLaMA结果与原始论文略有差异,这可能是评估协议不同所致(类似差异见该issue)。同时列出EleutherAI基于Pile数据集训练的6B参数模型GPT-J的结果。
原始LLaMA训练1万亿token,GPT-J训练5000亿token。如下表所示,OpenLLaMA在多数任务上表现与原始LLaMA和GPT-J相当,部分任务更优。
(此处保留原表格内容,仅翻译表头)
任务/指标 |
GPT-J 6B |
LLaMA 7B |
LLaMA 13B |
OpenLLaMA 3Bv2 |
OpenLLaMA 7Bv2 |
OpenLLaMA 3B |
OpenLLaMA 7B |
OpenLLaMA 13B |
(后续表格数据保持不变) |
|
|
|
|
|
|
|
|
我们移除了CB和WSC任务的基准测试,因模型在这两个任务上表现异常高,推测可能是训练数据存在基准污染。
联系方式
欢迎社区反馈。如有疑问,请提交issue或联系我们。
OpenLLaMA由伯克利AI研究所的Xinyang Geng*与Hao Liu*开发。
*同等贡献
致谢
感谢Google TPU研究云计划提供的部分计算资源。特别感谢TPU Research Cloud的Jonathan Caton协助协调资源,Google Cloud团队的Rafi Witten和Google JAX团队的James Bradbury优化训练吞吐量。同时感谢Charlie Snell、Gautier Izacard、Eric Wallace、Lianmin Zheng及社区用户的讨论与反馈。
OpenLLaMA 13B v1模型与Stability AI合作训练,感谢其提供的计算资源。特别感谢David Ha和Shivanshu Purohit的协调与工程支持。
引用
如果在研究或应用中使用了OpenLLaMA,请引用以下BibTeX:
@software{openlm2023openllama,
author = {Geng, Xinyang and Liu, Hao},
title = {OpenLLaMA: An Open Reproduction of LLaMA},
month = May,
year = 2023,
url = {https://github.com/openlm-research/open_llama}
}
@software{together2023redpajama,
author = {Together Computer},
title = {RedPajama-Data: An Open Source Recipe to Reproduce LLaMA training dataset},
month = April,
year = 2023,
url = {https://github.com/togethercomputer/RedPajama-Data}
}
@article{touvron2023llama,
title={Llama: Open and efficient foundation language models},
author={Touvron, Hugo and Lavril, Thibaut and Izacard, Gautier and Martinet, Xavier and Lachaux, Marie-Anne and Lacroix, Timoth{\'e}e and Rozi{\`e}re, Baptiste and Goyal, Naman and Hambro, Eric and Azhar, Faisal and others},
journal={arXiv preprint arXiv:2302.13971},
year={2023}
}