Training Llama 2 Model on Single GPU with int8 Quantization and LoRA
Training Llama 2 Model on Single GPU with int8 Quantization and LoRA
Llama 2
概述
Llama 2 是一个包含预训练和微调的生成式文本模型的集合,其规模从 70 亿到 700 亿个参数不等。Llama2模型是由Hugo Touvron, Louis Martin, Kevin Stone, Peter Albert等人在Llama 2: Open Foundation and Fine-Tuned Chat Models中提出的。
该论文的摘要如下:
在这项工作中,我们开发并发布了Llama 2,这是一组从70亿到700亿参数的预训练和微调的大型语言模型(LLMs)。我们的微调LLMs,称为Llama 2-Chat,针对对话用例进行了优化。我们的模型在我们测试的大多数基准上胜过开源聊天模型,并且基于我们对有用性和安全性的人类评估,可能是闭源模型的合适替代品。我们提供了关于微调和改进Llama 2-Chat安全性的方法的详细描述,以便社区能够在我们的工作基础上构建,并有助于LLMs的负责任发展。
提示:
- 通过填写此表格可以获得Llama2模型的权重
- 该架构与第一个Llama非常相似,增加了Groupe Query Attention(GQA)此论文之后
- 将
config.pretraining_tp
设置为不同于1的值将激活线性层的更准确但更慢的计算,这应更好地匹配原始logits。 - 原始模型使用
pad_id = -1
,这意味着没有填充令牌。我们不能使用相同的逻辑,请确保使用tokenizer.add_special_tokens({"pad_token":"<pad>"})
添加填充令牌,并相应地调整令牌嵌入大小。您还应设置model.config.pad_token_id
。模型的embed_tokens层用self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx)
初始化,确保编码填充令牌将输出零,因此在初始化时传递它是推荐的。 - 填写表格并获得模型检查点的访问权限后,您应该能够使用已转换的检查点。否则,如果您正在转换自己的模型,请随时使用转换脚本。可以使用以下(示例)命令调用脚本:
1
2python src/transformers/models/llama/convert_llama_weights_to_hf.py \
--input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path
模型详情
注意:使用该模型受 Meta 许可证的约束。为了下载模型权重和分词器,请访问网站并在请求访问之前接受许可证。
Meta 开发并公开发布了 Llama 2 系列大型语言模型(LLMs),这是一系列规模从 70 亿到 700 亿参数的预训练和微调的生成式文本模型。我们的微调 LLMs,称为 Llama-2-Chat,经过优化用于对话应用场景。Llama-2-Chat 模型在我们测试的大多数基准测试中优于开源聊天模型,并在我们的人工评估中在有用性和安全性方面与一些流行的闭源模型(如ChatGPT和PaLM)持平。
模型开发者
Model Developers Meta
不同版本
Llama 2 有不同规模的参数版本,包括 7B、13B 和 70B,以及预训练和微调的变体。
输入输出
输入模型仅支持文本输入。
输出模型仅生成文本。
模型架构
Llama 2 是一种自回归语言模型,采用了优化的 Transformer 架构。微调版本使用有监督的微调(SFT)和基于人类反馈的强化学习(RLHF)来与人类对 helpfulness 和 safety 的偏好保持一致。
训练数据
模型名称 | 训练数据 | 参数规模 | 内容长度 | GQA | Tokens | LR |
---|---|---|---|---|---|---|
Llama 2 | 一种新的公开可用的在线数据混合 | 7B | 4k | ✗ | 2.0T | 3.0 x 10-4 |
Llama 2 | 一种新的公开可用的在线数据混合 | 13B | 4k | ✗ | 2.0T | 3.0 x 10-4 |
Llama 2 | 一种新的公开可用的在线数据混合 | 70B | 4k | ✔ | 2.0T | 1.5 x 10-4 |
注:Token counts 仅指预训练数据。所有模型都使用全局 batch-size 为 4M tokens 进行训练。规模更大的模型(70B)使用 Grouped-Query Attention(GQA)来提高推理可伸缩性。
模型训练日期
Llama 2 在2023年1月至2023年7月之间进行训练。
状态
这是一个在离线数据集上训练的静态模型。随着我们根据社区反馈改进模型的安全性,将发布微调版本的未来版本。
许可证
定制的商业许可证可在以下网址获取:https://ai.meta.com/resources/models-and-libraries/llama-downloads/
研究论文
《Llama-2: Open Foundation and Fine-tuned Chat Models》
使用目的
预期用途
Llama 2 旨在用于英语商业和研究用途。微调模型适用于类似助理的聊天应用,而预训练模型可适应多种自然语言生成任务。
要获得聊天版本的预期功能和性能,需要遵循特定的格式,包括 INST 和 <
不在范围内的用途
- 用于违反适用法律法规(包括贸易合规法)的任何方式。
- 用于除英语以外的其他语言。
- 用于 Llama 2 可接受使用政策和许可协议所禁止的任何其他方式。
硬件和软件
训练因素
我们使用自定义训练库、Meta 的 Research Super Cluster 以及生产集群进行预训练。微调、标注和评估也是在第三方云计算上执行的。
碳足迹
预训练过程中使用了累计 330 万 GPU 小时的计算,使用的硬件类型为 A100-80GB(TDP 为 350-400W)。预计总排放量为 539 tCO2eq,其中 100% 由 Meta 的可持续性计划抵消。
模型 | 时间(GPU 小时) | 功耗(瓦) | 排放碳量(tCO2eq) |
---|---|---|---|
Llama 2 7B | 184,320 | 400 | 31.22 |
Llama 2 13B | 368,640 | 400 | 62.44 |
Llama 2 70B | 1,720,320 | 400 | 291.42 |
总计 | 3,311,616 | 539.00 |
预训练期间的二氧化碳排放量。时间:每个模型训练所需的总 GPU 时间。功耗:用于所使用的 GPU 设备的每个 GPU 的峰值功率容量,调整后的
功耗使用效率。100% 的排放直接由 Meta 的可持续性计划抵消,因为我们正在公开发布这些模型,预训练成本不需要由他人承担。
训练数据
概述
Llama 2 在来自公开来源的数据中预训练了 2 万亿个 tokens。微调数据包括公开可用的指导数据集,以及一百万个新的人工标注示例。预训练和微调数据集均不包含 Meta 用户数据。
数据新鲜度
预训练数据截止日期为 2022 年 9 月,但一些微调数据更近,最多至 2023 年 7 月。
评估结果
在此部分,我们报告了 Llama 1 和 Llama 2 模型在标准学术基准测试上的结果。对于所有评估,我们使用我们的内部评估库。
模型 | 规模 | Code | 常识推理 | 世界知识 | 阅读理解 | 数学 | MMLU | BBH | AGI Eval |
---|---|---|---|---|---|---|---|---|---|
Llama 1 | 7B | 14.1 | 60.8 | 46.2 | 58.5 | 6.95 | 35.1 | 30.3 | 23.9 |
Llama 1 | 13B | 18.9 | 66.1 | 52.6 | 62.3 | 10.9 | 46.9 | 37.0 | 33.9 |
Llama 1 | 33B | 26.0 | 70.0 | 58.4 | 67.6 | 21.4 | 57.8 | 39.8 | 41.7 |
Llama 1 | 65B | 30.7 | 70.7 | 60.5 | 68.6 | 30.8 | 63.4 | 43.5 | 47.6 |
Llama 2 | 7B | 16.8 | 63.9 | 48.9 | 61.3 | 14.6 | 45.3 | 32.6 | 29.3 |
Llama 2 | 13B | 24.5 | 66.9 | 55.4 | 65.8 | 28.7 | 54.8 | 39.4 | 39.1 |
Llama 2 | 70B | 37.5 | 71.9 | 63.6 | 69.4 | 35.2 | 68.9 | 51.2 | 54.2 |
模型在 grouped academic benchmarks 上的整体表现。Code:我们报告模型在 HumanEval 和 MBPP 上的平均 pass@1 分数。常识推理:我们报告 PIQA、SIQA、HellaSwag、WinoGrande、ARC easy 和 challenge、OpenBookQA 和 CommonsenseQA 的平均分数。我们对 CommonSenseQA 进行了 7-shot 结果评估,对其他所有基准测试进行了 0-shot 结果评估。世界知识:我们在 NaturalQuestions 和 TriviaQA 上进行 5-shot 性能评估并报告平均分数。阅读理解:对于阅读理解,我们报告 SQuAD、QuAC 和 BoolQ 的 0-shot 平均分数。数学:我们报告 GSM8K(8-shot)和 MATH(4-shot)基准测试的平均分数。
TruthfulQA 和 Toxigen
模型 | 规模 | TruthfulQA | Toxigen |
---|---|---|---|
Llama 1 | 7B | 27.42 | 23.00 |
Llama 1 | 13B | 41.74 | 23.08 |
Llama 1 | 33B | 44.19 | 22.57 |
Llama 1 | 65B | 48.71 | 21.77 |
Llama 2 | 7B | 33.29 | 21.25 |
Llama 2 | 13B | 41.86 | 26.10 |
Llama 2 | 70B | 50.18 | 24.60 |
预训练 LLMs 在自动安全基准测试上的评估结果。对于 TruthfulQA,我们呈现同时具有真实性和信息量的生成百分比(百分比越高越好)。对于 ToxiGen,我们呈现有害生成的百分比(百分比越小越好)。
TruthfulQA 和 Toxigen(微调版本 LLMs)
模型 | 规模 | TruthfulQA | Toxigen |
---|---|---|---|
Llama-2-Chat | 7B | 57.04 | 0.00 |
Llama-2-Chat | 13B | 62.18 | 0.00 |
Llama-2-Chat | 70B | 64.14 | 0.01 |
不同安全数据集上微调 LLMs 的评估结果。度量标准定义同上。
道德考虑和局限性
Llama 2 是一项具有风险的新技术。迄今为止的测试仅涵盖了英语,并且无法覆盖所有场景。因此,与所有 LLMs 一样,Llama 2 的潜在输出无法事先预测,并且在某些情况下可能会产生不准确、带偏见或其他不可取的响应。因此,在部署任何 Llama 2 应用程序之前,开发人员应根据其特定的模型应用进行安全测试和调整。
请参阅“负责任使用指南”,网址为:https://ai.meta.com/llama/responsible-use-guide/
报告问题
请通过以下方式之一报告任何软件“bug”或模型的其他问题:
- 报告模型问题:[github.com/facebookresearch/llama](https://github
.com/facebookresearch/llama)
- 报告模型生成的有问题内容:developers.facebook.com/llama_output_feedback
- 报告 bug 和安全问题:facebook.com/whitehat/info