在Graphcore IPU上高效部署Meta开源Llama 2
Llama-2是Meta公司最新推出的开源大型语言模型(LLM),相比Llama早期版本,该升级版具有更好的语言理解和更快的推理速度。由于其性能可与更大型的模型相媲美,而且其宽松开源许可证允许其在商业应用中使用和分发,因此它被誉为大型语言模型采用和商业化的游戏规则改变者。
Graphcore拟未在Llama 2推出后迅速完成了其在IPU处理器上的高效能部署,IPU用户不但可以在自己机房的PCIe卡C600或者Bow Pod系统上直接部署Llama 2,还可以利用我们通过云端IPU免费提供的该模型前期试用。
什么是 Llama-2?
Llama 2是一种大型语言模型,与2023年2月发布的上一代模型相比有了显著改进。最初的Llama仅授权用于研究,而根据新的开源许可,Llama-2甚至可以用于商业应用。
最新版Llama的训练数据量增加了40%,根据Meta的随附论文[1],其性能与ChatGPT和Palm等专有模型相当,并优于一些广受赞誉的开源LLM。
Llama-2模型库[2]提供多种模式尺寸,包括7B、13B和70B参数版本,这使应用部署变得切实可行,而且无需在基础设施上花费巨资。
在您机房的C600和
IPU Pod/Bow Pod系统上
快速部署Llama 2
基于Graphcore近期开源的PopTransformer库,Graphcore工程团队快速完成了Llama 2的适配工作,正如我们在之前文章中所介绍的,我们对大模型推理的关键优化技术均已集成在PopTransformer以及Poplar软件栈中,因此只需一个工程师一天的时间,就可以完成Llama2模型的适配和部署。
运行在IPU上的Llama2模型拥有令人惊艳的推理性能,以Llama2-13B为例,在最大上下文长度为16384的情况下,其单个token的推理延时为12.4毫秒,更多性能数据详见下表。
极低的推理延时正是IPU的显著优势之一,这意味着在相同延时要求下,如果开发者选择在IPU上部署模型,则可以将模型升级为更大尺寸的版本,进而充分发挥大模型的优势,让用户拥有更好的使用体验。
以上性能数据来自Graphcore Mk2系列,Llama 2同样可以直接部署在Graphcore的PCIe加速卡C600上,相比Mk2,C600拥有更高的算力同时原生支持FP8精度推理,在不损失模型性能的基础上,进一步降低内存占用。此外,C600支持以Scaleout方式部署模型,可以更加灵活的支持多卡并行(TensorParallel),流水线运行(Pipeline)等提高模型Throughput的技术,显著提高模型部署的性价比。
查看IPU上的开源Llama 2代码,传送门:
https://github.com/graphcore/PopTransformer/tree/main/examples/llama2
查看PopTransformer代码和模型库请至查看代码,请至:
https://github.com/graphcore/PopTransformer
申请试用和评估C600,请至:
https://www.graphcore.ai/zh-cn/reserve-your-first-c600-card
在云端IPU上
免费使用Llama-2
如您的机房还未部署IPU产品,我们还在云端IPU上提供了免费的Llama 2前期试用。
随附的notebook将指导您在Graphcore IPU上使用Paperspace Gradient notebook创建和配置推理流水线,该notebook预打包了库和前提文件,因此您可以轻松开始使用Llama-2。
新用户可以通过Paperspace提供的六小时免费试用,在免费的IPU-Pod4上试用Llama-2。如果要实现更高性能,您也可以升级到IPU-Pod16。
01 请求访问模型权重
如要下载和使用预训练的Llama-2基本模型和微调的Llama-2聊天检查点,您需要在Hugging Face网站上验证Hugging Face Hub并创建读取访问标记[3]。执行以下内容后,系统会提示您需要该标记的访问权限:
Llama-2在Meta许可[4]下开源,您需要接受该许可才能访问模型权重和标记器。Hugging Face hub中的模型卡也是门控模型,因此您需要通过模型卡申请访问权限(参见llama-2-7b-chat[5]、llama-2-13b-chat[6])。
02 选择模型权重
Meta发布了7B、13B和70B参数版本的模型。Llama-2-7B和Llama-2-13B适合在我们的Paperspace免费版环境中使用Graphcore IPU-Pod4系统。用户还可以扩展到付费的IPU-Pod16系统,以获得更快的推理速度。
03 创建推理流水线
我们的下一个目标是建立推理流水线。我们将指定最大序列长度和迷你批尺寸。在IPU上部署一个模型之前,我们需要通过编译过程将其转换为可执行的格式。
我们在创建流水线时进行这一步骤。在编译之前定义好所有输入维度至关重要。我们提供了必要的配置,帮助您无缝运行。取决于模型的大小,编译步骤可能需要15到30分钟,但我们也会在缓存中提供预编译的执行文件,将这一步骤缩短到1分钟。
选择更长的序列长度或更大的批次大小将占用更多的IPU存储。这意味着增加其中一项可能就需要减少另一项。您接下来可以尝试通过调整这些超参数来提高系统效率。
请记住,如果您进行了更改,流水线将需要重新编译,取决于模型的大小,这可能需要10到30分钟。
如果您想尝试另一个参数数量不同的模型,请在前一个单元中选择不同的检查点,然后重新运行此步骤,将正确的模型加载到IPU上。
04 运行推理
调用您刚刚创建的llama_pipeline对象,从提示中生成文本。
在流水线调用中,您可以利用其中的一些可选参数控制生成行为:
temperature:表示您想要更多还是更少的创造性输出。值1.0意味着模型的默认行为。temperature大于1.0会让下个标记的分布变得更加平缓,从而更有可能产生更多不寻常的下个标记。temperature必须为零或正值。
k:表示只能对最高k个可能的标记进行采样。这被称为“top k”采样。您可以将该值设置为0,从而禁用top k采样,并从所有可能的标记中进行采样。K的值必须大于0并且小于config.model.embedding.vocab_size,也就是32000。K的默认值为5。
output_length:该值设置了标记的最大输出长度。模型通常在生成它的end_key文本时停止生成,但我们也可以通过制定output_length选项在此之前就停止生成。将output_length设置为None时,该选项将被禁用。默认值为“None”。
您可以从不同的用户输入开始,尝试这些可选参数。例如,我们可以使用提示“如果我被困在荒岛上,我该如何获得帮助?”,然后设置temperature=0.4,并将top-K采样设置为10。
提示Llama 2
使用您自己的开源LLM的好处之一就是能够控制系统提示,这在通过API和聊天应用提供的模型上是无法实现的。这让您可以预先定义您生成式文本代理的行为,注入个性,并为终端客户或客户应用提供更简洁的体验。
如欲查看完整的系统提示和格式,您可以调用流水线上的last_instruction_prompt属性。
让我们看看这个Llama 2提示指南[7]中描述的默认提示格式。
Llama-2适合我吗?
Llama-2是一个非常强大的模型,可用于构建您自己的生成式文本和聊天应用,它的性能颇具竞争力,并具有非常宽松的研究和商业化许可。Llama-2性能优越,存储占用较小,对于生产中的广泛采用和部署来说,它是一个非常可行且经济高效的模型。
有关如何在C600和IPU Pod/Bow Pod系统上以及云上构建和扩展Llama 2应用的问题,请联系Graphcore:
https://www.graphcore.cn/getstarted/
[1]https://arxiv.org/abs/2302.13971
[2]https://huggingface.co/meta-llama
[3]https://huggingface.co/login?next=%2Fsettings%2Ftokens
[4]https://ai.meta.com/resources/models-and-libraries/llama-downloads/
[5]https://huggingface.co/meta-llama/Llama-2-7b-chat
[6]https://huggingface.co/meta-llama/Llama-2-13b-chat
[7]https://huggingface.co/blog/llama2#how-to-prompt-llama-2
获取更多Graphcore资讯,阅读深度技术文章,并与其他创新者们一起交流,请至中国官网graphcore.cn,以及关注Graphcore微信、微博和知乎创新社区。
Graphcore中国官网
Graphcore官方微信
Graphcore微博创新社区
Graphcore知乎创新社区
微信扫码关注该文公众号作者