模型简介
模型特点
模型能力
使用案例
🚀 OpenLLaMA:LLaMA的开源复现版本
本仓库展示了对Meta AI的LLaMA大语言模型的宽松许可开源复现。我们发布了在1万亿个token上训练的70亿和30亿参数模型,以及在6000亿个token上训练的130亿参数模型的预览版本。我们提供预训练的OpenLLaMA模型的PyTorch和JAX权重,以及评估结果和与原始LLaMA模型的对比。更多详细信息请参阅OpenLLaMA项目主页。
🚀 快速开始
本项目提供了Meta AI的LLaMA大语言模型的开源复现版本,包括不同参数规模的模型,并提供了多种格式的权重和评估结果。以下将详细介绍权重的加载、使用方法,以及模型的训练和评估情况。
✨ 主要特性
- 开源复现:提供Meta AI的LLaMA大语言模型的开源复现版本。
- 多模型发布:发布了70亿、30亿参数模型,以及130亿参数模型的预览版本。
- 多格式权重:提供PyTorch和JAX格式的预训练模型权重。
- 评估对比:提供评估结果,并与原始LLaMA模型进行对比。
📦 安装指南
文档未提及具体安装步骤,可参考相关框架的官方文档进行安装:
💻 使用示例
基础用法
使用Hugging Face Transformers库加载模型并进行推理:
import torch
from transformers import LlamaTokenizer, LlamaForCausalLM
model_path = 'openlm-research/open_llama_3b'
# model_path = 'openlm-research/open_llama_7b'
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进行评估
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框架配合使用的EasyLM格式,另一种是可与Hugging Face transformers库配合使用的PyTorch格式。我们的训练框架EasyLM和检查点权重均根据Apache 2.0许可进行宽松许可。
⚠️ 重要提示
目前建议避免使用Hugging Face的快速分词器,因为我们观察到自动转换的快速分词器有时会给出错误的分词结果。可以通过直接使用
LlamaTokenizer
类,或为AutoTokenizer
类传入use_fast=False
选项来避免此问题。
数据集和训练
我们在Together发布的RedPajama数据集上训练模型,该数据集是对LLaMA训练数据集的复现,包含超过1.2万亿个token。我们遵循与原始LLaMA论文完全相同的预处理步骤和训练超参数,包括模型架构、上下文长度、训练步骤、学习率调度和优化器。我们的设置与原始设置的唯一区别在于使用的数据集:OpenLLaMA采用RedPajama数据集,而不是原始LLaMA使用的数据集。
我们使用基于JAX的训练管道EasyLM在云TPU - v4上训练模型。我们结合使用普通数据并行和完全分片数据并行(也称为ZeRO阶段3)来平衡训练吞吐量和内存使用。总体而言,我们的70亿参数模型在每个TPU - v4芯片上达到了超过2200个token/秒的吞吐量。
评估
我们使用lm-evaluation-harness在广泛的任务上对OpenLLaMA进行了评估。LLaMA的结果是通过在相同的评估指标上运行原始LLaMA模型生成的。我们注意到我们的LLaMA模型结果与原始LLaMA论文略有不同,我们认为这是由于不同的评估协议造成的。在lm-evaluation-harness的这个问题中也报告了类似的差异。此外,我们还展示了由EleutherAI在Pile数据集上训练的60亿参数模型GPT - J的结果。
原始LLaMA模型在1万亿个token上进行训练,GPT - J在5000亿个token上进行训练。我们在下表中展示了结果。OpenLLaMA在大多数任务上表现出与原始LLaMA和GPT - J相当的性能,并在某些任务上优于它们。
任务/指标 | GPT - J 6B | LLaMA 7B | OpenLLaMA 7B | OpenLLaMA 3B | OpenLLaMA 13B 600BT |
---|---|---|---|---|---|
anli_r1/acc | 0.32 | 0.35 | 0.33 | 0.33 | 0.33 |
anli_r2/acc | 0.34 | 0.34 | 0.36 | 0.32 | 0.35 |
anli_r3/acc | 0.35 | 0.37 | 0.38 | 0.35 | 0.38 |
arc_challenge/acc | 0.34 | 0.39 | 0.37 | 0.34 | 0.39 |
arc_challenge/acc_norm | 0.37 | 0.41 | 0.38 | 0.37 | 0.42 |
arc_easy/acc | 0.67 | 0.68 | 0.72 | 0.69 | 0.74 |
arc_easy/acc_norm | 0.62 | 0.52 | 0.68 | 0.65 | 0.70 |
ddboolq/acc | 0.50 | 0.56 | 0.53 | 0.49 | 0.71 |
hellaswag/acc | 0.36 | 0.36 | 0.63 | 0.43 | 0.54 |
hellaswag/acc_norm | 0.66 | 0.73 | 0.72 | 0.67 | 0.73 |
openbookqa/acc | 0.29 | 0.29 | 0.30 | 0.27 | 0.30 |
openbookqa/acc_norm | 0.38 | 0.41 | 0.40 | 0.40 | 0.41 |
piqa/acc | 0.75 | 0.78 | 0.76 | 0.75 | 0.77 |
piqa/acc_norm | 0.76 | 0.78 | 0.77 | 0.76 | 0.78 |
record/em | 0.88 | 0.91 | 0.89 | 0.88 | 0.90 |
record/f1 | 0.89 | 0.91 | 0.90 | 0.89 | 0.90 |
rte/acc | 0.54 | 0.56 | 0.60 | 0.58 | 0.65 |
truthfulqa_mc/mc1 | 0.20 | 0.21 | 0.23 | 0.22 | 0.22 |
truthfulqa_mc/mc2 | 0.36 | 0.34 | 0.35 | 0.35 | 0.35 |
wic/acc | 0.50 | 0.50 | 0.51 | 0.48 | 0.49 |
winogrande/acc | 0.64 | 0.68 | 0.67 | 0.62 | 0.67 |
平均 | 0.51 | 0.53 | 0.55 | 0.52 | 0.56 |
我们从基准测试中移除了任务CB和WSC,因为我们的模型在这两个任务上表现异常出色。我们推测训练集中可能存在基准数据污染。
联系我们
我们非常希望得到社区的反馈。如果您有任何问题,请提出问题或与我们联系。
OpenLLaMA由以下人员开发: Xinyang Geng* 和 Hao Liu*,来自伯克利人工智能研究实验室。 *贡献相同
致谢
我们感谢Google TPU Research Cloud项目提供部分计算资源。我们特别感谢TPU Research Cloud的Jonathan Caton帮助我们组织计算资源,感谢Google Cloud团队的Rafi Witten和Google JAX团队的James Bradbury帮助我们优化训练吞吐量。我们还感谢Charlie Snell、Gautier Izacard、Eric Wallace、Lianmin Zheng和我们的用户社区提供的讨论和反馈。
OpenLLaMA 13B模型是与Stability AI合作训练的,我们感谢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}
}
📄 许可证
本项目采用Apache 2.0许可证。



