使用Llama.cpp在CPU上快速的运行LLM

这篇具有很好参考价值的文章主要介绍了使用Llama.cpp在CPU上快速的运行LLM。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大型语言模型(llm)正变得越来越流行,但是它需要很多的资源,尤其时GPU。在这篇文章中,我们将介绍如何使用Python中的llama.cpp库在高性能的cpu上运行llm。

使用Llama.cpp在CPU上快速的运行LLM,llama,深度学习,人工智能,神经网络,大语言模型

大型语言模型(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

 pip install llama-cpp-python

更详细的安装说明,请参阅llama- pcp -python文档:https://github.com/abetlen/llama-cpp-python#installation-from-pypi-recommended。

使用LLM和llama-cpp-python

只要语言模型转换为GGML格式,就可以被llama.cpp加载和使用。而大多数流行的LLM都有可用的GGML版本。

需要注意的重要一点是,在将原始llm转换为GGML格式时,它们就已被量化过了。量化的好处是在不显著降低性能的情况下,减少运行这些大型模型所需的内存。例如,在不到4GB的RAM中可以加载大小为13GB的70亿个参数模型。

在本文中,我们使用GGML版本的Vicuna-7B,该模型可从HuggingFace下载:https://huggingface.co/CRD716/ggml-vicuna-1.1-quantized。

下载GGML文件并加载LLM

可以使用以下代码下载模型。该代码还在尝试下载文件之前检查该文件是否已经存在。

 import os
 import urllib.request
 
 
 def download_file(file_link, filename):
     # Checks if the file already exists before downloading
     if not os.path.isfile(filename):
         urllib.request.urlretrieve(file_link, filename)
         print("File downloaded successfully.")
     else:
         print("File already exists.")
 
 # Dowloading GGML model from HuggingFace
 ggml_model_path = "https://huggingface.co/CRD716/ggml-vicuna-1.1-quantized/resolve/main/ggml-vicuna-7b-1.1-q4_1.bin"
 filename = "ggml-vicuna-7b-1.1-q4_1.bin"
 
 download_file(ggml_model_path, filename)

下一步是加载模型:

 from llama_cpp import Llama
 
 llm = Llama(model_path="ggml-vicuna-7b-1.1-q4_1.bin", n_ctx=512, n_batch=126)

在加载模型时,应该设置两个重要参数。

n_ctx:用于设置模型的最大上下文大小。默认值是512个token。

上下文大小是输入提示符中的令牌数量和模型可以生成的令牌最大数量的总和。具有较小上下文大小的模型生成文本的速度比具有较大上下文大小的模型快得多。

n_batch:用于设置在生成文本时要批处理的提示令牌的最大数量。默认值是512个token。

应该仔细设置n_batch参数。降低n_batch有助于加速多线程cpu上的文本生成。但是太少可能会导致文本生成明显恶化。

使用LLM生成文本

下面的代码编写了一个简单的包装器函数来使用LLM生成文本。

 def generate_text(
     prompt="Who is the CEO of Apple?",
     max_tokens=256,
     temperature=0.1,
     top_p=0.5,
     echo=False,
     stop=["#"],
 ):
     output = llm(
         prompt,
         max_tokens=max_tokens,
         temperature=temperature,
         top_p=top_p,
         echo=echo,
         stop=stop,
     )
     output_text = output["choices"][0]["text"].strip()
     return output_text

llm对象有几个重要的参数:

prompt:模型的输入提示。该文本被标记并传递给模型。

max_tokens:该参数用于设置模型可以生成的令牌的最大数量。此参数控制文本生成的长度。默认值是128个token。

temperature:温度,介于0和1之间。较高的值(如0.8)将使输出更加随机,而较低的值(如0.2)将使输出更加集中和确定。缺省值为1。

top_p:温度采样的替代方案,称为核采样,其中模型考虑具有top_p概率质量的标记的结果。所以0.1意味着只考虑包含前10%概率质量的标记。

echo: 用于控制模型是否返回(回显)生成文本开头的模型提示符。

stop:用于停止文本生成的字符串列表。如果模型遇到任何字符串,文本生成将在该标记处停止。用于控制模型幻觉,防止模型产生不必要的文本。

llm对象返回如下形式的字典对象:

 {
   "id": "xxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",  # text generation id 
   "object": "text_completion",              # object name
   "created": 1679561337,                    # time stamp
   "model": "./models/7B/ggml-model.bin",    # model path
   "choices": [
     {
       "text": "Q: Name the planets in the solar system? A: Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune and Pluto.", # generated text
       "index": 0,
       "logprobs": None,
       "finish_reason": "stop"
     }
   ],
   "usage": {
     "prompt_tokens": 14,       # Number of tokens present in the prompt
     "completion_tokens": 28,   # Number of tokens present in the generated text
     "total_tokens": 42
   }
 }

可以使用output"choices"[“text”]从字典对象中提取生成的文本。

使用Vicuna-7B生成文本的示例代码

 import os
 import urllib.request
 from llama_cpp import Llama
 
 
 def download_file(file_link, filename):
     # Checks if the file already exists before downloading
     if not os.path.isfile(filename):
         urllib.request.urlretrieve(file_link, filename)
         print("File downloaded successfully.")
     else:
         print("File already exists.")
 
 
 # Dowloading GGML model from HuggingFace
 ggml_model_path = "https://huggingface.co/CRD716/ggml-vicuna-1.1-quantized/resolve/main/ggml-vicuna-7b-1.1-q4_1.bin"
 filename = "ggml-vicuna-7b-1.1-q4_1.bin"
 
 download_file(ggml_model_path, filename)
 
 
 llm = Llama(model_path="ggml-vicuna-7b-1.1-q4_1.bin", n_ctx=512, n_batch=126)
 
 
 def generate_text(
     prompt="Who is the CEO of Apple?",
     max_tokens=256,
     temperature=0.1,
     top_p=0.5,
     echo=False,
     stop=["#"],
 ):
     output = llm(
         prompt,
         max_tokens=max_tokens,
         temperature=temperature,
         top_p=top_p,
         echo=echo,
         stop=stop,
     )
     output_text = output["choices"][0]["text"].strip()
     return output_text
 
 
 generate_text(
     "Compose an engaging travel blog post about a recent trip to Hawaii, highlighting cultural experiences and must-see attractions.",
     max_tokens=356,
 )

生成的文本如下:

 Hawaii is a state located in the United States of America that is known for its beautiful beaches, lush landscapes, and rich culture. It is made up of six islands: Oahu, Maui, Kauai, Lanai, Molokai, and Hawaii (also known as the Big Island). Each island has its own unique attractions and experiences to offer visitors.
 One of the most interesting cultural experiences in Hawaii is visiting a traditional Hawaiian village or ahupuaa. An ahupuaa is a system of land use that was used by ancient Hawaiians to manage their resources sustainably. It consists of a coastal area, a freshwater stream, and the surrounding uplands and forests. Visitors can learn about this traditional way of life at the Polynesian Cultural Center in Oahu or by visiting a traditional Hawaiian village on one of the other islands.
 Another must-see attraction in Hawaii is the Pearl Harbor Memorial. This historic site commemorates the attack on Pearl Harbor on December 7, 1941, which led to the United States' entry into World War II. Visitors can see the USS Arizona Memorial, a memorial that sits above the sunken battleship USS Arizona and provides an overview of the attack. They can also visit other museums and exhibits on the site to learn more about this important event in American history.
 Hawaii is also known for its beautiful beaches and crystal clear waters, which are perfect for swimming, snorkeling, and sunbathing.

总结

在这篇文章中,我们介绍了如何在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://avoid.overfit.cn/post/257997272e4a454cae9d01556332d6a0

本文作者:Ashwin Mathur文章来源地址https://www.toymoban.com/news/detail-564583.html

到了这里,关于使用Llama.cpp在CPU上快速的运行LLM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用go-llama.cpp 运行 yi-01-6b大模型,使用本地CPU运行,速度挺快的

    https://github.com/ggerganov/llama.cpp LaMA.cpp 项目是开发者 Georgi Gerganov 基于 Meta 释出的 LLaMA 模型(简易 Python 代码示例)手撸的纯 C/C++ 版本,用于模型推理。所谓推理,即是给输入-跑模型-得输出的模型运行过程。 那么,纯 C/C++ 版本有何优势呢? 无需任何额外依赖,相比 Python 代码

    2024年02月20日
    浏览(49)
  • 基于llama.cpp学习开源LLM本地部署

    目录 前言 一、llama.cpp是什么? 二、使用步骤 1.下载编译llama.cpp 2. 普通编译 3. BLAS编译 3.1、OpenBLAS 编译 CPU版 3.2 cuBLAS 编译GPU版本 4. 模型量化 4.1、模型文件下载:

    2024年01月21日
    浏览(41)
  • LLM大模型推理加速实战:vllm、fastllm与llama.cpp使用指南

    随着人工智能技术的飞速发展,大型语言模型(LLM)在诸如自然语言处理、智能问答、文本生成等领域的应用越来越广泛。然而,LLM模型往往具有庞大的参数规模,导致推理过程计算量大、耗时长,成为了制约其实际应用的关键因素。为了解决这个问题,一系列大模型推理加

    2024年04月13日
    浏览(38)
  • [NLP] 使用Llama.cpp和LangChain在CPU上使用大模型-RAG

    下面是构建这个应用程序时将使用的软件工具: 1.Llama-cpp-python  下载llama-cpp, llama-cpp-python [NLP] Llama2模型运行在Mac机器-CSDN博客 2、LangChain LangChain是一个提供了一组广泛的集成和数据连接器,允许我们链接和编排不同的模块。可以常见聊天机器人、数据分析和文档问答等应用。

    2024年02月04日
    浏览(46)
  • 大模型在cpu上使用llama_cpp部署无法加载模型的问题

    错误:gguf_init_from_file: invalid magic characters \\\'tjgg\\\'等,也就是无法加载模型 因为最新版的llama-cpp-python不支持ggml文件格式了 解决方案: 1、降低版本(最简单): pip install llama-cpp-python==0.1.78 2、直接下载对应GGUF的模型 3、利用llama.cpp内部转换函数进行转换 参考出处:TheBloke/Llam

    2024年01月20日
    浏览(47)
  • llama.cpp一种在本地CPU上部署的量化模型(超低配推理llama)

    前不久,Meta前脚发布完开源大语言模型LLaMA, 随后就被网友“泄漏”,直接放了一个磁力链接下载链接。 然而那些手头没有顶级显卡的朋友们,就只能看看而已了 但是 Georgi Gerganov 开源了一个项目llama.cpp ggerganov/llama.cpp: Port of Facebook’s LLaMA model in C/C++ (github.com) 次项目的牛逼

    2023年04月23日
    浏览(42)
  • 【大模型】大模型 CPU 推理之 llama.cpp

    描述 The main goal of llama.cpp is to enable LLM inference with minimal setup and state-of-the-art performance on a wide variety of hardware - locally and in the cloud. Plain C/C++ implementation without any dependencies Apple silicon is a first-class citizen - optimized via ARM NEON, Accelerate and Metal frameworks AVX, AVX2 and AVX512 support for x86 arc

    2024年04月14日
    浏览(42)
  • 在本地使用CPU运行Llama 2模型来实现文档Q&A

    第三方商业大型语言模型(LLM)提供商,如OpenAI的GPT4,通过简单的API调用使LLM的使用更加容易。然而,由于数据隐私和合规等各种原因,我们可能仍需要在企业内部部署或私有模型推理。 开源LLM的普及让我们私有化部署大语言模型称为可能,从而减少了对这些第三方提供商

    2024年02月13日
    浏览(48)
  • 使用GGML和LangChain在CPU上运行量化的llama2

    Meta AI 在本周二发布了最新一代开源大模型 Llama 2。对比于今年 2 月发布的 Llama 1,训练所用的 token 翻了一倍,已经达到了 2 万亿,对于使用大模型最重要的上下文长度限制,Llama 2 也翻了一倍。 在本文,我们将紧跟趋势介绍如何在本地CPU推理上运行量化版本的开源Llama 2。 我

    2024年02月16日
    浏览(48)
  • [llama懒人包]ChatGPT本地下位替代llama-7b,支持全平台显卡/CPU运行

    LLAMA的懒人包: 链接: https://pan.baidu.com/s/1xOw8-eP8QB--u6y644_UPg?pwd=0l08  提取码:0l08 模型来源:elinas/llama-7b-hf-transformers-4.29 模型来源(LoRA):ymcui/Chinese-LLaMA-Alpaca 侵权请通知作者删除 也可以进我的群下载哦:904511841 下面是llama的输入样例   自我介绍一下llama 您好,我是llama。

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包