大型语言模型(llm)正变得越来越流行,但是它需要很多的资源,尤其时GPU。在这篇文章中,我们将介绍如何使用Python中的llama.cpp库在高性能的cpu上运行llm。,,大型语言模型(llm)正变得越来越流行,但是它们的运行在计算上是非常消耗资源的。有很多研究人员正在为改进这个缺点而努力,比如HuggingFace开发出支持4位和8位的模型加载。但它们也需要GPU才能工作。虽然可以在直接在cpu上运行这些llm,但CPU的性能还无法满足现有的需求。而Georgi Gerganov最近的工作使llm在高性能cpu上运行成为可能。这要归功于他的llama.cpp库,该库为各种llm提供了高速推理。,原始的llama.cpp库侧重于在shell中本地运行模型。这并没有为用户提供很大的灵活性,并且使用户很难利用大量的python库来构建应用程序。而最近LangChain的发展使得我可以可以在python中使用llama.cpp。,在这篇文章中,我们将介绍如何在Python中使用llama-cpp-python包使用llama.cpp库。我们还将介绍如何使用LLaMA -cpp-python库来运行Vicuna LLM。,更详细的安装说明,请参阅llama- pcp -python文档:https://github.com/abetlen/llama-cpp-python#installation-from-pypi-recommended。,只要语言模型转换为GGML格式,就可以被llama.cpp加载和使用。而大多数流行的LLM都有可用的GGML版本。,需要注意的重要一点是,在将原始llm转换为GGML格式时,它们就已被量化过了。量化的好处是在不显著降低性能的情况下,减少运行这些大型模型所需的内存。例如,在不到4GB的RAM中可以加载大小为13GB的70亿个参数模型。,在本文中,我们使用GGML版本的Vicuna-7B,该模型可从HuggingFace下载:https://huggingface.co/CRD716/ggml-vicuna-1.1-quantized。,可以使用以下代码下载模型。该代码还在尝试下载文件之前检查该文件是否已经存在。,下一步是加载模型:,在加载模型时,应该设置两个重要参数。,n_ctx:用于设置模型的最大上下文大小。默认值是512个token。,上下文大小是输入提示符中的令牌数量和模型可以生成的令牌最大数量的总和。具有较小上下文大小的模型生成文本的速度比具有较大上下文大小的模型快得多。,n_batch:用于设置在生成文本时要批处理的提示令牌的最大数量。默认值是512个token。,应该仔细设置n_batch参数。降低n_batch有助于加速多线程cpu上的文本生成。但是太少可能会导致文本生成明显恶化。,下面的代码编写了一个简单的包装器函数来使用LLM生成文本。,llm对象有几个重要的参数:,prompt:模型的输入提示。该文本被标记并传递给模型。,max_tokens:该参数用于设置模型可以生成的令牌的最大数量。此参数控制文本生成的长度。默认值是128个token。,temperature:温度,介于0和1之间。较高的值(如0.8)将使输出更加随机,而较低的值(如0.2)将使输出更加集中和确定。缺省值为1。,top_p:温度采样的替代方案,称为核采样,其中模型考虑具有top_p概率质量的标记的结果。所以0.1意味着只考虑包含前10%概率质量的标记。,echo: 用于控制模型是否返回(回显)生成文本开头的模型提示符。,stop:用于停止文本生成的字符串列表。如果模型遇到任何字符串,文本生成将在该标记处停止。用于控制模型幻觉,防止模型产生不必要的文本。,llm对象返回如下形式的字典对象:,可以使用output”choices”[“text”]从字典对象中提取生成的文本。,生成的文本如下:,在这篇文章中,我们介绍了如何在Python中使用llama.cpp库和llama-cpp-python包。这些工具支持基于cpu的llm高性能执行。,Llama.cpp几乎每天都在更新。推理的速度越来越快,社区定期增加对新模型的支持。在Llama.cpp有一个“convert.py”可以帮你将自己的Pytorch模型转换为ggml格式。,llama.cpp库和llama-cpp-python包为在cpu上高效运行llm提供了健壮的解决方案。如果您有兴趣将llm合并到您的应用程序中,我建议深入的研究一下这个包。,本文源代码:,https://github.com/awinml/llama-cpp-python-bindings
© 版权声明
文章版权归作者所有,未经允许请勿转载。