引言
今天,Meta 发布了 Llama 2,其包含了一系列最先进的开放大语言模型,我们很高兴能够将其全面集成入 Hugging Face,并全力支持其发布。 Llama 2 的社区许可证相当宽松,且可商用。其代码、预训练模型和微调模型均于今天发布了🔥。
通过与 Meta 合作,我们已经顺利地完成了对 Llama 2 的集成,你可以在 Hub 上找到 12 个开放模型 (3 个基础模型以及 3 个微调模型,每个模型都有 2 种 checkpoint: 一个是 Meta 的原始 checkpoint,一个是 transformers
格式的 checkpoint)。以下列出了 Hugging Face 支持 Llama 2 的主要工作:
- Llama 2 已入驻 Hub: 包括模型卡及相应的许可证。
- 支持 Llama 2 的 transformers 库
- 使用单 GPU 微调 Llama 2 小模型的示例
- Text Generation Inference (TGI) 已集成 Llama 2,以实现快速高效的生产化推理
- 推理终端 (Inference Endpoints) 已集成 Llama 2
目录
- 基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback,RLHF) 技术针对对话场景进行了优化。在相当广泛的有用性和安全性测试基准中,Llama 2-Chat 模型的表现优于大多数开放模型,且其在人类评估中表现出与 ChatGPT 相当的性能。更多详情,可参阅其 论文。
图来自 Llama 2: Open Foundation and Fine-Tuned Chat Models 一文
如果你一直在等一个闭源聊天机器人的开源替代,那你算是等着了!Llama 2-Chat 将是你的最佳选择!
模型 许可证 可否商用? 预训练词元数 排行榜得分 Falcon-7B Apache 2.0 ✅ 1,500B 47.01 MPT-7B Apache 2.0 ✅ 1,000B 48.7 Llama-7B Llama 许可证 ❌ 1,000B 49.71 Llama-2-7B Llama 2 许可证 ✅ 2,000B 54.32 Llama-33B Llama 许可证 ❌ 1,500B * Llama-2-13B Llama 2 许可证 ✅ 2,000B 58.67 mpt-30B Apache 2.0 ✅ 1,000B 55.7 Falcon-40B Apache 2.0 ✅ 1,000B 61.5 Llama-65B Llama 许可证 ❌ 1,500B 62.1 Llama-2-70B Llama 2 许可证 ✅ 2,000B * Llama-2-70B-chat* Llama 2 许可证 ✅ 2,000B 66.8 *目前,我们正在对 Llama 2 70B (非聊天版) 进行评测。评测结果后续将更新至此表。
演示
你可以通过 这个空间 或下面的应用轻松试用 Llama 2 大模型 (700 亿参数!):
它们背后都是基于 Hugging Face 的 TGI 框架,该框架也支撑了 HuggingChat,我们会在下文分享更多相关内容。
推理
本节,我们主要介绍可用于对 Llama 2 模型进行推理的两种不同方法。在使用这些模型之前,请确保你已在 Meta Llama 2 存储库页面申请了模型访问权限。
**注意: 请务必按照页面上的指示填写 Meta 官方表格。填完两个表格数小时后,用户就可以访问模型存储库。
使用 transformers
从 transformers 4.31 版本开始,HF 生态中的所有工具和机制都可以适用于 Llama 2,如:
- 训练、推理脚本及其示例
- 安全文件格式 (
safetensors
) - 与 bitsandbytes (4 比特量化) 和 PEFT 等工具
- 帮助模型进行文本生成的辅助工具
- 导出模型以进行部署的机制
你只需确保使用最新的
transformers
版本并登录你的 Hugging Face 帐户。pip install transformers huggingface-cli login
下面是如何使用
transformers
进行推理的代码片段:from transformers import AutoTokenizer import transformers import torch model = "meta-llama/Llama-2-7b-chat-hf" tokenizer = AutoTokenizer.from_pretrained(model) pipeline = transformers.pipeline( "text-generation", model=model, torch_dtype=torch.float16, device_map="auto", ) sequences = pipeline( 'I liked "Breaking Bad" and "Band of Brothers". Do you have any recommendations of other shows I might like?n', do_sample=True, top_k=10, num_return_sequences=1, eos_token_id=tokenizer.eos_token_id, max_length=200, ) for seq in sequences: print(f"Result: {seq['generated_text']}")
Result: I liked "Breaking Bad" and "Band of Brothers". Do you have any recommendations of other shows I might like? Answer: Of course! If you enjoyed "Breaking Bad" and "Band of Brothers," here are some other TV shows you might enjoy: 1. "The Sopranos" - This HBO series is a crime drama that explores the life of a New Jersey mob boss, Tony Soprano, as he navigates the criminal underworld and deals with personal and family issues. 2. "The Wire" - This HBO series is a gritty and realistic portrayal of the drug trade in Baltimore, exploring the impact of drugs on individuals, communities, and the criminal justice system. 3. "Mad Men" - Set in the 1960s, this AMC series follows the lives of advertising executives on Madison Avenue, expl
另外,尽管模型本身的上下文长度 仅 4k 词元,但你可以使用
transformers
支持的技术,如旋转位置嵌入缩放 (rotary position embedding scaling) (推特),进一步把它变长!使用 TGI 和推理终端
Text Generation Inference (TGI) 是 Hugging Face 开发的生产级推理容器,可用于轻松部署大语言模型。它支持流式组批、流式输出、基于张量并行的多 GPU 快速推理,并支持生产级的日志记录和跟踪等功能。
你可以在自己的基础设施上部署并尝试 TGI,也可以直接使用 Hugging Face 的 推理终端。如果要用推理终端部署 Llama 2 模型,请登陆 模型页面 并单击 Deploy -> Inference Endpoints 菜单。
- 要推理 7B 模型,我们建议你选择 “GPU [medium] – 1x Nvidia A10G”。
- 要推理 13B 模型,我们建议你选择 “GPU [xlarge] – 1x Nvidia A100”。
- 要推理 70B 模型,我们建议你选择 “GPU [xxxlarge] – 8x Nvidia A100”。
注意: 如果你配额不够,请发送邮件至 api-enterprise@huggingface.co 申请升级配额,通过后你就可以访问 A100 了。
你还可以从我们的另一篇博文中了解更多有关 如何使用 Hugging Face 推理终端部署 LLM 的知识 , 文中包含了推理终端支持的超参以及如何使用其 Python 和 Javascript API 实现流式输出等信息。
用 PEFT 微调
训练 LLM 在技术和计算上都有一定的挑战。本节,我们将介绍 Hugging Face 生态中有哪些工具可以帮助开发者在简单的硬件上高效训练 Llama 2,我们还将展示如何在单张 NVIDIA T4 (16GB – Google Colab) 上微调 Llama 2 7B 模型。你可以通过 让 LLM 更可得 这篇博文了解更多信息。
我们构建了一个 脚本,其中使用了 QLoRA 和
trl
中的SFTTrainer
来对 Llama 2 进行指令微调。下面的命令给出了在
timdettmers/openassistant-guanaco
数据集上微调 Llama 2 7B 的一个示例。该脚本可以通过merge_and_push
参数将 LoRA 权重合并到模型权重中,并将其保存为safetensor
格式。这样,我们就能使用 TGI 和推理终端部署微调后的模型。首先安装
trl
包并下载脚本:pip install trl git clone https://github.com/lvwerra/trl
然后,你就可以运行脚本了:
python trl/examples/scripts/sft_trainer.py --model_name meta-llama/Llama-2-7b-hf --dataset_name timdettmers/openassistant-guanaco --load_in_4bit --use_peft --batch_size 4 --gradient_accumulation_steps 2
其他资源
总结
Llama 2 的推出让我们非常兴奋!后面我们会围绕它陆陆续续推出更多内容,包括如何微调一个自己的模型,如何在设备侧运行 Llama 2 小模型等,敬请期待!
英文原文: huggingface.co/blog/llama2
原文作者: Philipp Schmid,Omar Sanseviero,Pedro Cuenca,Lewis Tunstall
译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的应用及大规模模型的训练推理。
审校/排版: zhongdongy (阿东)