SQL应用于LLM的程序开发利器——开源LMQL( 二 )


LMQL语法现在,我们知道了什么是LMQL 。让我们看一个LMQL查询的例子来熟悉它的语法 。
beam(n=3) "Q: Say 'Hello, {name}!'""A: [RESPONSE]" from "openai/text-davinci-003"where len(TOKENS(RESPONSE)) < 20我希望你能猜出它的意思 。但让我们详细讨论一下 。
以下是LMQL查询的方案:

SQL应用于LLM的程序开发利器——开源LMQL

文章插图
Beurer Kellner等人的论文图像(2023)
任何LMQL程序都由5个部分组成:
解码器定义所使用的解码过程 。简单地说,它描述了提取下一个令牌的算法 。LMQL有三种不同类型的解码器:argmax、beam和sample 。你可以从论文中更详细地了解它们 。
实际的查询类似于经典的提示,但使用Python语法 , 这意味着您可以使用循环或if语句等结构 。
在from子句中 , 我们指定了要使用的模型(在我们的示例中为openai/text-davinci-003) 。
Where子句定义约束 。
当您希望在返回中查看令牌的概率时,会使用分布 。我们还没有在这个查询中使用分布,但稍后我们将使用它来获得情绪分析的类概率 。
此外,您可能已经注意到我们的查询{name}和[RESPONSE]中的特殊变量 。让我们讨论一下它们是如何工作的:
{name}是一个输入参数 。它可以是您范围内的任何变量 。这样的参数可以帮助您创建方便的函数,这些函数可以很容易地用于不同的输入 。
[LRESPONSE]是LM将生成的短语 。它也可以称为孔或占位符 。[响应]之前的所有文本都被发送到LM,然后模型的输出被分配给变量 。很方便的是,您可以在稍后的提示中轻松地重用此输出,将其称为{RESPONSE} 。
我们已经简要介绍了主要概念 。让我们自己试试 。
开始设置环境首先,我们需要建立我们的环境 。要在Python中使用LMQL,我们需要首先安装一个包 。毫无疑问,我们可以使用pip 。您需要一个Python≥3.10的环境 。
pip install lmql如果要将LMQL与本地GPU一起使用,请按照文档中的说明进行操作 。
要使用OpenAI模型 , 您需要设置APIKey来访问OpenAI 。最简单的方法是指定OPENAI_API_KEY环境变量 。
import osos.environ['OPENAI_API_KEY'] = '<your_api_key>'然而,OpenAI模型有很多局限性(例如,您将无法获得超过五个类的分发版) 。因此,我们将使用Llama.cpp用本地模型测试LMQL 。
首先,您需要在与LMQL相同的环境中安装Llama.cpp的Python绑定 。
pip install llama-cpp-python如果要使用本地GPU,请指定以下参数 。
CMAKE_ARGS="-DLLAMA_METAL=on" pip install llama-cpp-python然后,我们需要将模型权重加载为.gguf文件 。你可以在HuggingFace模特中心找到模特 。
我们将使用两种型号:
  • Llama-2-7B
  • zephyr-7B-beta
Llama-2–7B是Meta微调生成文本模型的最小版本 。这是一款非常基础的车型,所以我们不应该期望它有出色的性能 。
Zephyr是Mistral车型的微调版本,性能不错 。在某些方面 , 它的性能比10倍大的开源型号Llama-2–70b要好 。然而,Zephyr与ChatGPT或Claude等专有模型之间仍有一些差距 。
SQL应用于LLM的程序开发利器——开源LMQL

文章插图
Tunstall等人的论文图像(2023)
根据LMSYS ChatBot Arena排行榜,Zephyr是性能最好的7B参数型号 。它与更大的型号不相上下 。
SQL应用于LLM的程序开发利器——开源LMQL

文章插图
排行榜截图|来源
让我们为我们的模型加载.gguf文件 。
import osimport urllib.requestdef download_gguf(model_url, filename): if not os.path.isfile(filename): urllib.request.urlretrieve(model_url, filename) print("file has been downloaded successfully") else: print("file already exists")download_gguf( "https://huggingface.co/TheBloke/zephyr-7B-beta-GGUF/resolve/main/zephyr-7b-beta.Q4_K_M.gguf","zephyr-7b-beta.Q4_K_M.gguf")download_gguf( "https://huggingface.co/TheBloke/Llama-2-7B-GGUF/resolve/main/llama-2-7b.Q4_K_M.gguf","llama-2-7b.Q4_K_M.gguf")我们需要下载一些GB , 这样可能需要一些时间(每个型号需要10-15分钟) 。幸运的是,你只需要做一次 。
您可以通过两种不同的方式(文档)与本地模型交互: