Press "Enter" to skip to content

探索对OpenAI模型的开源替代品

介绍

11月在人工智能领域发生了许多重大事件。从GPT存储的推出,到GPT-4-turbo的发布,再到OpenAI的惨败,这一切都引发了一个重要的问题:封闭模型和背后的人员有多可靠?当你在生产中使用的模型因为一些内部公司事件而崩溃时,这将会是一次不愉快的经历。这对于开源模型来说并不是一个问题。您对部署的模型拥有完全控制权。您对数据和模型都有主权。但是是否可以用GPT代替开源模型?值得庆幸的是,许多开源模型已经达到或超过了GPT-3.5模型的性能。本文将探讨一些性能最佳的开源LLMs和LMMs替代方案。

学习目标

  • 讨论开源大型语言模型。
  • 探索最先进的开源语言模型和多模态模型。
  • 对大型语言模型进行轻量化介绍。
  • 了解在本地和云端运行LLMs的工具和服务。

本文作为数据科学博文马拉松的一部分发表。

什么是开源模型?

当模型的权重和架构是自由可用的时,我们称之为开源模型。这些权重是大型语言模型的预训练参数,例如Meta的Llama。这些通常是基础模型或未经调优的原始模型。任何人都可以使用这些模型,并将其在自定义数据上进行微调,以执行下游操作。

但是它们是否是真正的开源?数据呢?由于有关版权内容和数据敏感性的种种问题,大多数研究实验室都不会公开发布训练基础模型时所使用的数据。这也涉及到模型的许可问题。每个开源模型都有类似于任何其他开源软件的许可证。许多基础模型(例如Llama-1)配有非商业许可证,这意味着您不能使用这些模型来赚钱。但是像Mistral7B和Zephyr7B这样的模型配有Apache-2.0和MIT许可证,可以在任何地方使用而不会有顾虑。

开源替代方案

自从Llama发布以来,开源领域一直在追赶OpenAI模型。迄今为止,取得了令人鼓舞的成果。在GPT-3.5发布一年内,我们已经拥有了参数更少但在性能上与GPT-3.5相媲美甚至更好的模型。但是GPT-4仍然是执行从推理和数学到代码生成等各种一般任务的最佳模型。进一步观察开源模型领域的创新和资金支持的步伐,我们很快将会有越来越接近GPT-4性能的模型。现在,让我们讨论一些出色的开源模型的替代方案。

Meta’s Llama 2

Meta在今年7月发布了他们最好的模型Llama-2,并因其令人印象深刻的能力而迅速走红。Meta发布了四个不同参数规模的Llama-2模型,分别是Llama-7b、13b、34b和70b。这些模型在各自的类别中足以击败其他开源模型。但是现在,诸如mistral-7b和Zephyr-7b等多个模型在许多基准测试中优于较小的Llama模型。Llama-2 70b仍然是其类别中最好的之一,可以作为GPT-4在摘要、机器翻译等任务上的替代品。

Llama-2在许多基准测试中表现优于GPT-3.5,并且能够接近GPT-4,使其成为GPT-3.5甚至在某些情况下是GPT-4的一个有价值的替代品。以下图表是由Anyscale提供的Llama和GPT模型的性能比较。

有关Llama-2的更多信息,请参阅HuggingFace上的博客。这些LLM经过微调后在自定义数据集上表现良好。我们可以对模型进行微调,以在特定任务中发挥更好的性能。

不同的研究实验室也发布了经过微调的Llama-2版本。这些模型在许多基准测试中显示出比原始模型更好的结果。这款经过微调的Llama-2模型,Nous-Hermes-Llama2-70b,由Nous Research经过超过300,000个自定义指令进行了微调,使其比原始的meta-llama/Llama-2-70b-chat-hf更好。

查看HuggingFace的排行榜。您可以找到比原始模型效果更好的经过微调的Llama-2模型。这是开源模型的优点之一。根据需求,可以选择多种模型。

Mistral-7B

Mistral-7B发布以来,它已成为开源社区的宠儿。它的性能要远远优于同类模型,并接近GPT-3.5的能力。这个模型可以在许多情况下替代Gpt-3.5,比如摘要、改写、分类等。

少量的模型参数确保了一个较小的模型,可以在本地运行或以比较便宜的价格进行托管。以下是原始的huggingFace空间,Mistral-7b。除了是一个出色的表现者外,Mistral-7b的一个特点是它是一个没有任何审查的原始模型。大多数模型在发布之前都经过了繁重的RLHF,使它们不适用于许多任务。但这使得Mistral-7B适合进行真实世界的特定主题任务。

多亏了充满活力的开源社区,已经存在很多经过微调的替代模型,它们的性能比原始的Mistral-7b模型更好。

OpenHermes-2.5

OpenHermes-2.5是一个经过微调的Mistral模型。它在评估指标(GPT4ALL、TruthfullQA、AgiEval、BigBench)上展现出了显著的结果。对于许多任务来说,它与GPT-3.5几乎无法区分。有关OpenHermes的更多信息,请参阅此HF库:teknium/OpenHermes-2.5-Mistral-7B。

Zephyr-7b

Zephyr-7b是HuggingFace微调的Mistral-7b模型的另一个版本。Huggingface使用DPO(Direct Preference Optimization)对Mistral-7b进行了全面微调。Zephyr-7b-beta在许多任务上与GPT-3.5和Llama-2-70b等更大的模型表现相当,包括写作、人文学科和角色扮演。以下是Zephyr-7b与其他模型在MTbench上的比较。这可以是很多方面可以替代GPT-3.5的好选择。

以下是HuggingFace的官方存储库:HuggingFaceH4/zephyr-7b-beta。

Intel Neural Chat

神经聊天是由Intel对Mistral-7B进行微调的7B LLM 模型。它在所有7B模型中,在Huggingface的排行榜上表现出了卓越的性能。NeuralChat-7b是在用于加速AI任务的Intel芯片Gaudi-2上进行微调和训练的。NeuralChat的出色表现是经过监督微调和优化偏好(DPO)在Orca和slim-orca数据集上的结果。

这里是HuggingFace的NeuralChat仓库:Intel/neural-chat-7b-v3-1。

开源大型多模态模型

在发布了GPT-4 Vision之后,对多模态模型的兴趣有所增加。具有视觉的大型语言模型可以在许多实际用例中发挥重要作用,例如在图像上进行问答和讲述视频。在其中一个用例中,Tldraw发布了一个AI白板,可以利用GPT-4V解释图像并生成代码,让您从白板上的绘画中创建Web组件。

但是开源的进展更快。许多研究实验室发布了诸如Llava、Baklava、Fuyu-8b等大型多模态模型。

Llava

Llava(大语言和视觉助手)是一个具有130亿参数的多模态模型。Llava连接了Vicuna-13b LLM和预训练视觉编码器CLIP ViT-L/14。它经过在Visual Chat和Science QA数据集上微调,实现了与GPT-4V在许多场合上类似的性能。这可用于视觉问答任务。

BakLlava

来自SkunkWorksAI的BakLlava是另一个大型多模态模型。它以Mistral-7b作为基础的LLM增加了Llava-1.5的架构。尽管较小,但在许多场合上表现出与Llava-13b相当的优异结果。当您需要一个较小的具有良好视觉推理能力的模型时,可以考虑使用该模型。

Fuyu-8b

另一个开源选择是Fuyu-8b。它是Adept的一个性能强大的多模态语言模型。Fuyu是一个只有解码器的变压器,没有视觉编码器;这与使用CLIP的Llava不同。

与其他多模态模型不同,它将图像的部分线性投影到变压器的第一层。它将解码器视为图像变压器。以下是Fuyu架构的示例。

有关Fuyu-8b的更多信息,请参阅这篇文章。HuggingFace仓库adept/fuyu-8b

如何使用开源LLM?

现在我们已经了解了一些表现最佳的开源LLM和LMM,问题是如何从开源模型中获得推理。我们有两种方式可以从开源模型获得推理。要么我们在个人硬件上下载模型,要么订阅云服务提供商。现在,这取决于您的用例。即使是较小的模型也需要计算密集型且需要高内存和显存。在商业硬件上进行这些模型的推理非常困难。为了简化这个过程,模型需要进行量化。因此,让我们了解一下模型量化是什么。

量化

量化是减少浮点数精度的技术。通常,实验室会发布具有更高浮点数精度的模型权重和激活函数,以实现最先进的性能。这使得模型的计算量大,并不适合在本地运行或托管在云端。解决这个问题的方法是减少权重和嵌入的精度。这就是所谓的量化。

通常,最先进的模型具有float32精度。在量化中存在不同的情况,从fp32 -> fp16、fp32 -> int8、fp32 -> fp8和fp32 -> fp4。本节将仅讨论量化为int8或8位整数量化。

量化为int8

int8表示只能容纳256个字符(有符号[-128,127]、无符号[0, 256]),而fp32可以具有广泛的数字范围。想法是找到fp32值在[a,b]范围内到int8格式的等效投影。

如果X是在[a,b]范围内的fp32数字,则量化方案为:

X = S*(X_q – z)

  • X_q = 与X相关的量化值
  • S是比例参数。一个正的fp32数字。
  • z是零点。它是与fp32中的值0相对应的int8值。

因此,X_q = round(X/S + z) ∀ X ∈ [a,b]

对于fp3,2,超出[a,b]范围的值被剪裁到最近的表示

X_q = clip( X_q = round(a/S + z) + round(X/S + z) + X_q = round(b/S + z)  )

  • round(a/S + z) 是所述数字格式中的最小值,round(b/S + z) 是最大值。

这是仿射或零点量化的方程。这是关于8位整数量化的内容;还有8位fp8、4位(fp4、nf4)和2位(fp2)的量化方案。有关量化更多信息,请参阅HuggingFace上的文章。

模型量化是一项复杂的任务。有多个开源工具可用于量化LLM,例如Llama.cpp、AutoGPTQ、llm-awq等。Llama cpp使用GGUF量化模型,AutoGPTQ使用GPTQ量化模型,llm-awq使用AWQ格式量化模型。这些都是不同的量化方法,用于减小模型的大小。

因此,如果要使用开源模型进行推断,使用量化模型是有意义的。然而,你会为了一个不花费太多的较小模型而牺牲一些推断质量。

请查看这个HuggingFace存储库中的量化模型:https://huggingface.co/TheBloke

本地运行模型

通常,出于各种需求,我们可能需要在本地运行模型。在本地运行模型时,有很多自由度。无论是构建用于机密文档的定制解决方案还是进行实验,本地LLM比闭源模型提供了更多的自由和心灵安宁。

有多种工具可用于本地运行模型。最流行的工具包括vLLM、Ollama和LMstudio。

VLLM

vLLM是一个用Python编写的开源替代软件,可以让你在本地运行LLM。在vLLM上运行模型需要特定的硬件规格,通常需要大于7的vRAM计算能力和16 GB以上的RAM。你应该可以在Collab上进行测试。vLLM目前支持AWQ量化格式。这些是你可以使用vLLM的模型。下面是如何在本地运行模型的方式。

import vllm 中的 LLM,SamplingParams
prompts = ["你好,我的名字是", "美国总统是", "法国的首都是", "人工智能的未来是"]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
llm = LLM(model="mistralai/Mistral-7B-v0.1")
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"提示: {prompt!r},生成的文本: {generated_text!r}")

vLLM还支持OpenAI端点。因此,您可以将该模型作为现有的OpenAI实现的一种即插即用的替代品。

import openai
# 修改OpenAI的API密钥和API基址以使用vLLM的API服务器。
openai.api_key = "EMPTY"
openai.api_base = "http://localhost:8000/v1"
completion = openai.Completion.create(model="mistralai/Mistral-7B-v0.1", prompt="旧金山是一个")
print("完成结果:", completion)

在这里,我们将使用OpenAI SDK从本地模型推断。

Ollama

Ollama是Go语言的另一种开源替代CLI工具,可让我们在本地硬件上运行开源模型。Ollama支持GGUF量化模型。

在您的目录中创建一个模型文件并运行:

从./mistral-7b-v0.1.Q4_0.gguf创建

从模型文件创建一个Ollama模型。

ollama create example -f Modelfile

现在,运行您的模型。

ollama run example "如何终止一个Python进程?"

Ollama还允许您运行Pytorch和HuggingFace模型。更多信息,请参阅他们的官方存储库。

LMstudio

LMstudio是一款闭源软件,方便您在个人电脑上运行任何模型。如果您想要专门为运行模型而提供的软件,这是理想选择。它具有一个漂亮的用户界面,可用于使用本地模型。它可用于Mac(M1,M2)、Linux(测试版)和Windows。

它还支持GGUF格式的模型。请参阅他们的官方页面获取更多信息。请确保它支持您的硬件规格。

来自云服务提供商的模型

在本地运行模型非常适合实验和定制用途,但在应用程序中使用模型需要将模型托管在云上。您可以通过专用的LLM模型提供商,如< a href=”/?s=Replicate”>Replicate和Brev Dev,将您的模型托管到云上。您可以托管、微调和获得模型的推理。它们提供弹性可扩展的LLM托管服务。资源分配将根据模型的流量变化。

结论

开源模型开发正在以破颈的速度进行。在ChatGPT发布不到一年的时间里,我们已经有了许多在多个基准测试上击败它的模型。这只是个开始,与GPT-4媲美的模型可能就在不远处。最近,人们对闭源模型背后的组织的诚信提出了问题。作为开发者,您不希望您的模型和构建在其上的服务受到危害。开源解决了这个问题。您了解自己的模型,并拥有该模型。开源模型提供了很多自由。您还可以使用OS和OpenAI模型的混合结构来降低成本和依赖性。因此,本文介绍了一些表现出色的开源模型以及与其运行相关的概念。

所以,以下是本文的要点:

  • 公开模型与主权密切相关。开源模型提供了封闭模型所缺乏的可信度。
  • 像Llama-2和Mistral这样的大型语言模型及其微调已在许多任务上击败了GPT-3.5,使它们成为理想的替代品。
  • Llava、BakLlava和Fuyu-8b等大型多模式模型在许多问答和分类任务中显示出潜力。
  • LLM是一个庞大而计算密集的模型。因此,要在本地运行它们,需要量化。
  • 量化是一种通过将权重和激活浮点数转换为较小的位数来减少模型大小的技术。
  • 在本地托管和推理OS模型需要使用LMstudio、Ollama和vLLM等工具。要在云上部署,请使用Replicate和Brev等服务。

常见问题

本文中显示的媒体不归Analytics Vidhya所有,只是作者根据自己的判断使用。

Leave a Reply

Your email address will not be published. Required fields are marked *