Want to Become a Sponsor? Contact Us Now!🎉

LLM
使用ctransformers加速Transformer推断

使用ctransformers加速Transformer推断

Published on

介绍

近年来,基于Transformer的语言模型在自然语言处理领域取得了重大突破,实现了诸如语言生成、问答和文本分类等任务。然而,这些模型通常非常庞大,拥有数十亿甚至数万亿的参数,导致在CPU上运行时计算代价高昂。

ctransformers是一个旨在提高部署这些大型语言模型效率和可访问性的Python库。它为使用优化的C/C++代码实现的Transformer模型提供了Python绑定,并利用量化和AVX指令等技术,极大地加快了CPU硬件上的推断速度。

使用ctransformers,只需几行Python代码就可以加载和运行像GPT-2、GPT-J、GPT-NeoX、Llama等模型。该库提供了一个简单统一的接口来处理各种模型,与Hugging Face Hub和LangChain框架集成,并提供低级API以进行更精细的控制。

Anakin AI - The Ultimate No-Code AI App Builder

什么是ctransformers?

ctransformers在内部使用了GGML库,这是一个专注于在CPU上运行ML模型的张量库。GGML提供了诸如矩阵乘法等常见操作的高效实现,特别适用于量化数据类型。通过将GGML与模型特定的优化内核结合起来,ctransformers能够实现令人印象深刻的性能。

ctransformers最令人兴奋的应用之一是能够在消费硬件上运行像Llama 2这样的大型开源模型。这为大规模语言模型的成本效益和环境友好的部署打开了可能性,使它们更加易于访问并面向更广泛的用户和应用。

在本文中,我们将深入探讨ctransformers的技术细节,探索其功能、性能特点和API。我们将通过代码示例介绍如何加载模型、生成文本,并与LangChain集成。最后,我们将讨论高效CPU推断对自然语言处理(NLP)和人工智能(AI)未来的潜力和影响。

ctransformers的一些关键特性:

  • 统一的接口用于加载和运行各种模型
  • 支持从Hugging Face Hub运行模型
  • 与LangChain框架集成
  • 访问低级C API以获得更多控制权
  • 使用AVX指令进行优化的CPU推断

安装ctransformers

要安装ctransformers,只需使用pip:

pip install ctransformers

对于GPU支持,请使用设置了CT_CUBLAS环境变量的安装:

CT_CUBLAS=1 pip install ctransformers --no-binary ctransformers

ctransformers的基本用法

加载和运行模型的主要类是 AutoModelForCausalLM。下面是如何加载模型的步骤:

from ctransformers import AutoModelForCausalLM
 
# 从本地文件加载
llm = AutoModelForCausalLM.from_pretrained('path/to/ggml-model.bin', model_type='gpt2')
 
# 从Hugging Face Hub加载
llm = AutoModelForCausalLM.from_pretrained('marella/gpt-2-ggml')

model_type 参数指定要加载的模型类型。可选的选项包括 gpt2gptjgpt_neoxdolly-v2starcoder 等。

要生成文本,只需调用模型:

output = llm("AI is going to")
print(output) 

对于更多控制,可以使用生成器接口:

tokens = llm.tokenize("AI is going to")
 
for token in llm.generate(tokens):
    print(llm.detokenize(token))

ctransformers与LangChain集成

ctransformers提供了使用LangChain框架中的模型的包装器:

from ctransformers.langchain import CTransformers
 
llm = CTransformers(model='marella/gpt-2-ggml')
 
# 使用LangChain原语
from langchain import PromptTemplate, LLMChain
 
template = """问题:{question}
回答:"""
 
prompt = PromptTemplate(template=template, input_variables=['question'])
llm_chain = LLMChain(prompt=prompt, llm=llm)
 
question = "什么是AI?"
print(llm_chain.run(question))

运行Llama模型

ctransformers可以运行GGML格式的开源Llama模型。下面是使用Llama 2模型的示例:

from ctransformers import AutoModelForCausalLM
 
model_id = "TheBloke/Llama-2-7B-GGML"
 
config = {
    'max_new_tokens': 256, 
    'repetition_penalty': 1.1,
    'temperature': 0.1
}
 
llm = AutoModelForCausalLM.from_pretrained(
    model_id, 
    model_type="llama",
    config=config
)
 
prompt = "写一首诗来帮我记住前10个元素的周期表"
output = llm(prompt)
print(output)

这将加载转换为GGML格式的7B参数Llama 2模型,并从给定的提示生成一首诗。

config 字典允许指定各种生成参数,如最大令牌数、重复惩罚、温度等。

结论

ctransformers提供了一种简单高效的方式,在CPU上运行大型语言模型,它在底层使用了优化的C/C++实现。凭借简单的Python API、与Hugging Face Hub和LangChain的集成以及对多种模型的支持,它是构建由Transformer驱动的应用程序的强大工具。 能够在CPU上以合理的性能运行像Llama 2这样的模型,为大型语言模型的经济高效部署开辟了新的可能性,也有利于环保。随着开源Transformer模型生态系统的不断发展,像ctransformers这样的库将在使它们易于访问和实用方面发挥重要作用。