paint-brush
无需 GPU 即可运行 Llama!使用 LLMWare 和 Quantized Dragon 进行量化 LLM经过@shanglun
3,225 讀數
3,225 讀數

无需 GPU 即可运行 Llama!使用 LLMWare 和 Quantized Dragon 进行量化 LLM

经过 Shanglun Wang12m2024/01/07
Read on Terminal Reader

太長; 讀書

随着 GPU 资源变得更加有限,小型化和专业法学硕士正在慢慢受到重视。今天我们探索量化,这是一种尖端的小型化技术,使我们能够在没有专门硬件的情况下运行高参数模型。
featured image - 无需 GPU 即可运行 Llama!使用 LLMWare 和 Quantized Dragon 进行量化 LLM
Shanglun Wang HackerNoon profile picture
0-item

介绍

随着法学硕士技术获得更多主流采用以及生态系统开始成熟,组织开始认识到使用法学硕士技术的局限性和成本。许多原本热衷于LLM技术应用的企业已经放弃了集中式举措,转而采取鼓励分散式努力的策略,将ChatGPT和Claude等服务纳入其工作流程中。


造成这种现象的原因有几个。缺乏 LLM 专业知识、MLOps 要求以及对专用 GPU 基础设施的依赖都是实施大规模 AI 计划的障碍。然而,其中最棘手的问题是对 GPU 的依赖。


在本文中,我们将讨论 GPU 依赖带来的具体困难,探索潜在的解决方案,并查看来自该领域先驱公司之一的令人兴奋的示例。

GPU 可用性对法学硕士的限制


大多数公开可用的高性能模型,例如 GPT-4、Llama 2 和 Claude,都依赖于高度专业化的 GPU 基础设施。 GPT-4 是最大的商用模型之一,以运行在 8 个 A100 GPU 集群上而闻名。 Llama 2 的 70B 型号要小得多,但仍至少需要 A40 GPU 才能以合理的速度运行。


这种级别的 GPU 要求实际上排除了在本地运行这些模型的可能性 - 假设您能找到卖家,A100 GPU 的价格接近 25,000 美元。获得 GPU 后,您需要专业技能来设置和维护服务器。很少有组织愿意花费这样的费用来试验法学硕士技术。


为了解决这个问题,一些初创公司和云提供商开发了广泛的 PaaS 产品。我在过去的文章和项目中使用过的一些服务(例如 Replicate)允许用户租用 GPU 服务器并按所使用的计算时间付费。其他提供商,如 OpenAI 和 Anthropic,将其模型作为每个代币的 API 提供,进一步抽象了基础设施的复杂性。然而,这些服务需要将数据发送到外部网络,这使得注重隐私的组织无法使用这些服务。此外,随着 GPU 使用率超过可用性,其中许多服务在需求高峰期间会出现短缺,这使得它们成为生产关键型工作负载的不可靠选择。


此外,无论如何收费,GPU 时间对于大型计算任务来说都是昂贵的 - 毕竟,拥有和运营这些 GPU 的公司需要投资回报。虽然这些成本对于实验用例来说几乎可以忽略不计,但商业用例通常需要嵌入大型上下文、微调或多镜头示例。这些成本构成了采用的重大障碍,特别是对于拥有大型数据集或缺乏美国大型公司财务资源的组织而言。


在上一篇文章中,我们探讨了参数压缩作为减少对 GPU 依赖的一种策略。在今天的文章中,我们将探讨另一种令人兴奋的技术,称为量化。


然而,在我们深入探索之前,我们可能想先了解一些有关量化的知识。

量化(可选阅读)

在本节中,我们将简要介绍量化的基础知识。但是,如果您只是寻找一种在计算机上本地运行强大的 LLM 的方法,您可以暂时跳过本节,稍后再回来。我们今天将使用 LLMWare 公司的技术,该公司构建了一些令人惊叹的工具,使您可以开始使用量化模型,而无需深入了解其背后的C/C++ 实现的细节。

什么是量化?

量化是一种旨在通过使用较低精度的数值类型来减少运行 LLM 的计算和内存需求的技术。许多流行的开源模型,例如Llama、Falcon和Alpaca,都使用PyTorch作为底层框架。默认情况下,PyTorch 模型使用 32 位浮点,这意味着单个参数占用 GPU 内存中的 32“位”。量化的目的是用 16 位浮点数、8 位整数、甚至 4 位整数来替换这些参数。成功的量化可以显着提高计算速度并减少内存使用,这意味着大型模型可以在低端 GPU、嵌入式图形芯片甚至 CPU 上运行。这个想法已经存在了一段时间——随着技术的成熟,PyTorch 本身增加了对 16 位浮点和模型编译的支持,但由于 PyTorch 框架中的早期设计决策,进展缓慢。

量化会降低性能吗?

此时,人们很自然地想知道,这不会严重降低模型的准确性吗?简短的回答是肯定的,但前提是你不小心这样做。每一次优化都伴随着固有的权衡,但通过一些专门的技术,研究人员已经能够从高度量化的模型中获得令人难以置信的稳定性能。虽然我们不会讨论极端的技术细节,但让我们回顾一下目前使用的最常见策略的大致情况。如果您想了解更多信息,可以在 HuggingFace 的指南中找到更多相关信息。


校准量化

在量化过程中,校准数据集通过模型运行。记录每个参数的值,并使用范围来确定如何量化参数。假设校准数据集代表模型将遇到的输入,这会提高所得模型的准确性。


量化感知

校准量化发生在训练之后,而量化感知训练则尝试在训练期间优化模型。在模型训练时,激活会经过“假量化”,模拟量化过程可能引入的错误。然后,该模型能够适应错误,从而产生一个更稳健的模型,可以专门适应潜在的失真。

Llama.cpp 和 GGUF

虽然 PyTorch 的量化和优化长期以来一直受到框架设计的阻碍,但最近的两项开源技术突破了这些障碍,使量化技术更容易为大众所接受。下面让我们简要介绍一下它们。


骆驼.cpp

Llama.cpp 是 Georgi Gerganov 的一个项目,旨在将 Llama 模型移植到 C/C++ 中。这摆脱了 PyTorch 引入的复杂性,并且本机实现允许直接实现量化。因此,生成的模型可以使用高达 4 位整数量化来运行,从而无需专门的 GPU 即可运行高参数数 Llama 模型。


此后,社区对该项目进行了扩展,纳入了一系列开源模型,其中包括 Falcon 和 Mistral 等流行模型。


GGUF

GGUF 是 Llama.cpp 用于存储和传输模型信息的文件格式。量化模型以此格式存储,以便最终用户可以加载和运行它们。 GGUF 是 GGML 的后继格式,旨在通过提供更多的可扩展性、向后兼容性和稳定性来改进 GGML,同时仍允许快速开发。


通用文件格式的开发为开源社区扩展 Llama.cpp 以优化其他模型打开了大门,TheBloke 和 LLMWare 等创新者在过去几个月一直致力于将流行的开源模型小型化。

LLMWare 的量化龙模型

在今天的示例中,我们将使用 LLMWare 提供的开源库和量化模型,它为快速构建专门的 RAG 工作流程提供了方便的工具。

LLMWare 是谁?

LLMWare 是一家专注于法律和金融行业的生成式人工智能公司,一直积极参与量化社区。正如我之前所写,他们对隐私意识领域的关注使他们成为小型化技术试验和创新的自然候选者。


之前,我写过有关他们的 RAG 优化 BLING 模型的文章,该模型从 1 到 30 亿个参数模型中挤出令人难以置信的性能,用于合同审查和财务分析等专门任务。虽然大多数具有此类参数数量的开源模型往往仅对玩具问题有用,但 LLMWare 能够通过对这些模型进行针对性任务的训练来生成可用于生产的性能。这些微型模型无需外部 GPU 即可运行,从而提高隐私性和可扩展性。

什么是龙?

Dragon 是法学硕士的集合,可以被认为是其 BLING 表兄弟的更强大版本。 Dragon 的初衷是使用相同的指令微调技术训练更高参数的模型,为需要更高性能并能够使用低端 GPU 的用户提供选择。


增加的参数数量产生了更强大的模型,可以利用更大的上下文窗口并生成更复杂的输出,但要求用户拥有更专业的硬件,例如嵌入 GPU 的笔记本电脑或连接 GPU 的云计算容器。然而,它们仍然比超大型模型有所改进,超大型模型需要等待稀缺的 A40 或 A100 GPU 的访问。

量子龙,两全其美

鉴于上述情况,很容易看出为什么量化对 LLMWare 的 AI 工具套件有显着的推动作用。通过量化,用户可以在与 BLING 模型相同的环境中运行 Dragon-tier 模型,从而可以在商用计算机上进行更强大的分析。


上个月,LLMWare 发布了多个 Dragon 模型的量化版本。今天,我们将通过法律分析 RAG 问题来评估建立在 Llama 之上的 LLMWare Dragon 模型,并将其与类似的 BLING 模型进行比较。有兴趣的人还可以探索其他模型 - 在撰写本文时,LLMWare 提供了基于 Mistral 的模型和基于 Yi 的模型。此外, LLMWare通过与 ctransformers 库的紧密集成,使在 Llama.cpp 模型上运行推理变得轻而易举,这使得 gguf 模型可以与基于 PyTorch 的模型无缝交换。


我们将使用配备 M1 芯片的 Macbook Air 进行此实验,这意味着我们将仅使用广泛可用的硬件来进行此练习。

测试量子龙

请记住,在我的上一篇文章中,我们构建了一个专注于立法搜索的 RAG 应用程序。我们使用矢量搜索来快速搜索几项大型立法,找到与我们有关合格机会区合作伙伴权益的问题相关的部分,并通过 BLING 模型运行该问题。在今天的文章中,我们将通过 LLMWare 的量化 Dragon 模型运行同样的问题,并确定它是否比 BLING 模型表现更好。


为了专注于模型比较并减少所需的先验知识量,我们将手动进行大量 PDF 解析和向量搜索。这样做的另一个好处是人为地使模型的问题变得更加困难 - LLMWare 的默认嵌入搜索将源材料分块到大约 1000 个标记,但手动处理解析允许我们将上下文增加到大约 3000 个标记。这将帮助我们清楚地展示 Dragon 和 BLING 模型之间的区别。


然而,如果您想按照我上一篇关于 LLMWare 的文章中的设置步骤来利用他们的工具,您应该能够轻松地与 LLMWare 生态系统的其余部分集成。事实上,如果您只是将 BLING 模型的名称替换为本文中的量化 Dragon 模型,一切都应该无缝运行。


话不多说,让我们开始吧!


首先,我们导入所需的依赖项:


 import sklearn import sklearn.metrics # for cosine similarity from llmware.prompts import Prompt import time import os from openai import OpenAI from PyPDF2 import PdfReader client = OpenAI() # the library now loads the key automatically as an environment variable.


我们现在可以加载 PDF。在前面的示例中,我们加载了几项大型立法,但今天,我们将仅关注 2017 年减税和就业法案的 PDF 版本。

 reader = PdfReader([path to PDF of tax cuts and jobs act])


现在我们可以为每个页面生成嵌入:

 embeddings = [] for pg in reader.pages: text = pg.extract_text() embeddings.append(client.embeddings.create( input=text, model="text-embedding-ada-002" ).data[0].embedding)


我们还为我们要问的问题生成嵌入:

 question = 'What is a qualified opportunity zone partnership interest?' q_embed = client.embeddings.create( input=question, model="text-embedding-ada-002" ).data[0].embedding


有了嵌入,我们就可以执行向量搜索。因为我们的搜索空间很小,所以我们可以手动完成此操作。


 cos_sim = [(idx, sklearn.metrics.pairwise.cosine_similarity([e], [q_embed])[0][0]) for idx, e in enumerate(embeddings)]


现在我们可以获取最相关的页面(如果要验证结果,则为索引 132 或页面 133):

 most_relevant = sorted(cos_sim, key=lambda x: x[1], reverse=True)[0][0]


至此,我们已经到了最关键的一步。我们将使用量化的 Llama Dragon 模型实例化 LLMWare Prompter 对象。 Prompter 类在这里很关键,因为它为我们处理提示工程并确保我们的提示与 Dragon 的训练数据的结构一致。提示类还会自动处理 llamacpp 绑定,因此您可以像使用其他模型一样使用量化 Dragon 模型。


 model_name = "llmware/dragon-llama-7b-gguf" prompter = Prompt().load_model(model_name) response = prompter.prompt_main(question, context='\n\n'.join([reader.pages[132].extract_text()]), prompt_name="default_with_context", temperature=0.3)


稍等片刻,您应该会看到函数调用返回。现在打印结果:

 print(response['llm_response'])


您应该看到类似以下内容:

 • A capital or profits interest acquired by the qualified opportunity fund after December 31, 2017, from the partnership solely in exchange for cash; •As of the time such interest was acquired, the partnership was a qualified opportunity zone business (or, in the case of a new partnership, it was being organized for purposes of being a qualified opportunity zone business); •During substantially all of the qualified opportunity fund's holding period for such interest, the partnership qualified as a qualified opportunity zone business.


这是一个很好的答案!


为了进行比较,让我们看看 BLING 模型在同一问题上的表现如何。我们可以预见的问题之一是,大的上下文大小可能会“压倒”较低参数的模型,并导致信息量较少的答案。在我之前的实验中,剪毛美洲驼 2.7b 是解决这个问题的最佳模型之一,所以我决定用它作为 BLING 模型的代表。

 model_name_2 = "llmware/bling-sheared-llama-2.7b-0.1" prompter2 = Prompt().load_model(model_name_2) response = prompter2.prompt_main(question, context='\n\n'.join([reader.pages[132].extract_text()]), prompt_name="default_with_context", temperature=0.3)


经过一些处理后,您应该看到类似这样的内容。


 A qualified opportunity zone partnership interest is a capital or profits interest in a domestic partnership if such interest is acquired by the qualified opportunity fund after December 31, 2017, from the partnership solely in exchange for cash.


响应仍然不错,但缺少 Dragon 模型捕捉到的一些细节。具体来说,答案忽略了持有期限要求和新的业务案例。这符合我们对低参数模型处理更大上下文的困难的预期。有兴趣的读者可以通过使用更低的参数模型或增加给定上下文的大小来扩展此实验。您应该看到效果变得越来越明显,之后模型将给出简短的、混乱的答案。


从这个实验中可以清楚地看出,量化的 Dragon 模型能够在其预期用例中优于低参数模型,而不会明显影响模型的准确性。


这样,我们就使用了量化模型来解决现实世界的用例,并在此过程中了解了其性能特征!

结论

今天,我们探讨了 LLM 量化这个令人兴奋的领域,并了解了像 LLMWare 这样的公司如何利用这些发展来增强他们的专业语言模型。正如我之前所说,小型化是广泛采用人工智能技术最有希望的途径之一。通过结合专业化、微调和量化,人工智能领域的创新者可以创建可扩展且高性能的模型来解决现实世界的问题。


您可以在Github上找到 LLMWare 的 RAG 框架,并在 LLMWare 的Hugging Face 存储库上找到它们的 DRAGON 和 BLING 模型。


顺便说一句,我正在开展一个令人兴奋的项目,旨在利用语言人工智能和小型化来彻底改变发展中国家的教育。我们正在与世界各地杰出的活动家和教育工作者合作,努力弥合全球数字鸿沟。如果您想了解有关我的项目的更多信息,或者只是想谈论 LLM 领域令人兴奋的发展,请随时通过GithubLinkedIn与我联系。