图像归作者所有
在过去的几个月里,大型语言模型 (LLMs)引起了广泛的关注,吸引了全球开发者的兴趣。这些模型为工作在聊天机器人、个人助理和内容创作领域的开发者带来了令人兴奋的前景。LLMs带来的可能性激发了开发者、人工智能和自然语言处理社区的热情。
大型语言模型 (LLMs) 指的是能够生成接近人类语言并以自然方式理解提示的机器学习模型。这些模型使用包括书籍、文章、网站和其他来源的大量数据集进行训练。通过分析数据中的统计模式,LLMs预测给定输入后面最可能出现的单词或短语。
近年来LLMs的发展时间线:大型语言模型综述
通过利用大型语言模型 (LLMs),我们可以将领域特定的数据整合到模型中,以有效地解决问题。当处理模型在初始训练期间无法访问的信息,例如公司的内部文档或知识库时,这一点尤为有利。
为此目的使用的架构称为检索增强生成,或者较少使用的术语是生成式问答。
LangChain是一个卓越且免费的框架,精心设计用于为开发者创建以语言模型为动力的应用程序,特别是大型语言模型 (LLMs)。
LangChain革新了许多应用程序的开发过程,包括聊天机器人、生成式问答 (GQA) 和摘要。通过无缝地将来自多个模块的组件链接🔗在一起,LangChain实现了根据LLMs的强大功能创建出色应用程序的目标。
阅读更多:官方文档
图像归作者所有
在本文中,我将演示从头开始创建自己的文档助手的过程,利用LLaMA 7b和LangChain,这是一个专门为与LLMs无缝集成而开发的开源库。
以下是本文的概述,概述了将详细介绍过程的具体部分:
- 设置虚拟环境和创建文件结构
- 在本地机器上获取LLM
- 将LLM与LangChain集成并自定义PromptTemplate
- 文档检索和答案生成
- 使用Streamlit构建应用程序
设置虚拟环境为运行应用程序提供了一个受控且隔离的环境,确保其依赖关系与全局系统软件包分开。这种方法简化了依赖关系的管理,并有助于在不同环境之间保持一致性。
要为该应用程序设置虚拟环境,我将在我的GitHub存储库中提供pip文件。首先,让我们创建所需的文件结构,如图中所示。或者,您可以直接克隆存储库以获取所需的文件。
图像归作者所有:文件结构
我们将在models文件夹中存储要下载的LLMs,而pip文件将位于根目录中。
要创建虚拟环境并在其中安装所有依赖项,我们可以使用同一目录下的pipenv install
命令,或者直接运行⚙️setup_env.bat
批处理文件,它将从pipfile
安装所有依赖项。这将确保所有必要的软件包和库都安装在虚拟环境中。一旦成功安装了依赖项,我们可以进行下一步,即下载所需的模型。这是存储库的链接👇
LLaMA是Meta AI设计的一种新型大型语言模型,Meta是Facebook的母公司。LLaMA拥有从70亿到650亿个参数不等的多种模型,是最全面的语言模型之一。2023年2月24日,Meta向公众发布了LLaMA模型,展示了他们对开放科学的承诺。
图片来源:LLaMA
考虑到LLaMA的卓越能力,我们选择在本文中使用这个强大的语言模型。具体来说,我们将使用LLaMA的最小版本,即LLaMA 7B。即使在这个较小的尺寸下,LLaMA 7B也具有重要的语言处理能力,使我们能够高效有效地实现我们的期望结果。
官方研究论文:LLaMA:开放和高效的基础语言模型
要在本地CPU上执行LLM,我们需要一个本地的GGML格式模型。有多种方法可以实现这一点,但最简单的方法是直接从Hugging Face Models repository 🤗下载bin文件。在我们的案例中,我们将下载Llama 7B模型。这些模型是开源的,免费下载。
如果您想节省时间和精力,别担心-我已经帮您准备好了。这是您下载模型的直接链接⏬。只需下载任何版本的模型,然后将文件移动到我们根目录中的models目录中,这样您就可以方便地使用该模型。
==GGML是一种用于机器学习的Tensor库,它只是一个C++库,允许您仅使用CPU或CPU + GPU运行LLMs。它定义了一种用于分发大型语言模型 (LLMs) 的二进制格式。GGML利用一种称为==量化==的技术,使得大型语言模型能够在消费者硬件上运行。
LLM的权重是浮点数(小数)。就像表示大整数(例如1000)相比较小整数(例如1)需要更多的空间一样,表示高精度浮点数(例如0.0001)相比较低精度浮点数(例如0.1)需要更多的空间。将大型语言模型进行量化的过程涉及减少权重的表示精度,以减少使用模型所需的资源。GGML支持多种不同的量化策略(例如4位、5位和8位量化),每种策略在效率和性能之间提供不同的平衡。
Llama的量化大小
要有效使用这些模型,需要考虑内存和磁盘要求。由于目前的模型完全加载到内存中,您需要足够的磁盘空间来存储它们,并且在执行过程中需要足够的内存来加载它们。就65B模型而言,即使在量化之后,建议至少有40GB的可用内存。值得注意的是,内存和磁盘需求当前是等价的。
量化在管理这些资源需求方面起着至关重要的作用。除非您可以使用出色的计算资源 🤑🤑🤑
通过减少模型参数的精度并优化内存使用,量化使模型可以在更普通的硬件配置上使用。这确保了在更广泛的设置中运行模型仍然具有可行性和高效性。
这就是Python绑定发挥作用的地方。绑定指的是为两种语言之间创建桥梁或接口的过程,我们将使用llama-cpp-python
,它是对llama.cpp
的Python绑定,它作为纯粹的C/C++下LLaMA模型的推理。llama.cpp
的主要目标是使用4位整数量化来运行LLaMA模型。此集成允许我们有效地利用LLaMA模型,同时发挥C/C++实现的优势和4位整数量化的益处🚀
llama.cpp支持的模型:来源
准备好了GGML模型和我们的所有依赖项(感谢pipfile),现在是时候开始我们与LangChain一起的旅程了。但在深入了解LangChain的精彩世界之前,让我们以惯例的“Hello World”仪式开始 —— 这是我们在探索新语言或框架时遵循的传统,毕竟LLM也是一种语言模型 😄。
图像归作者所有:与CPU上的LLM交互
!_我们已经成功地在CPU上完全离线地执行了我们的第一个LLM,并以完全随机的方式进行了实现(您可以调整超参数的temperature进行调试)。
通过实现这个令人兴奋的里程碑🎯,我们现在已经准备好开始我们的主要目标了:使用LangChain框架对自定义文本进行问答。