在过去的几个月里,大型语言模型(llm)获得了极大的关注,这些模型创造了令人兴奋的前景,特别是对于从事聊天机器人、个人助理和内容创作的开发人员。
大型语言模型(llm)是指能够生成与人类语言非常相似的文本并以自然方式理解提示的机器学习模型。这些模型使用广泛的数据集进行训练,这些数据集包括书籍、文章、网站和其他来源。通过分析数据中的统计模式,LLM可以预测给定输入后最可能出现的单词或短语。
以上是目前的LLM的一个全景图。
在本文中,我将演示如何利用LLaMA 7b和Langchain从头开始创建自己的Document Assistant。
背景知识
1、LangChain 🔗
LangChain是一个令人印象深刻且免费的框架,它彻底改变了广泛应用的开发过程,包括聊天机器人、生成式问答(GQA)和摘要。通过将来自多个模块的组件无缝链接,LangChain能够使用大部分的llm来创建应用程序。
2、LLaMA 🦙
LLaMA是由Facebook的母公司Meta AI设计的一个新的大型语言模型。LLaMA拥有70亿到650亿个参数的模型集合,是目前最全面的语言模型之一。2023年2月24日,Meta向公众发布了LLaMA模型,展示了他们对开放科学的奉献精神(虽然我们现在用的都是泄露版)。
3、什么是GGML
GGML是一个用于机器学习的张量库,它只是一个c++库,允许你在CPU或CPU + GPU上运行llm。它定义了用于分发大型语言模型(llm)的二进制格式。GGML使用了一种称为量化的技术,该技术允许大型语言模型在消费者硬件上运行。
4、量化
我们都知道,模型的权重是浮点数。就像表示大整数(例如1000)比表示小整数(例如1)需要更多的空间一样,表示高精度浮点数(例如0.0001)比表示低精度浮点数(例如0.1)需要更多的空间。量化大型语言模型的过程涉及降低表示权重的精度,以减少使用模型所需的资源。GGML支持许多不同的量化策略(例如4位、5位和8位量化),每种策略在效率和性能之间提供不同的权衡。
下面是量化后模型大小的对比:
5、Streamlit🔥
Streamlit 是一个用于构建数据科学和机器学习应用程序的开源 Python 库。它旨在使开发人员能够以简单快速的方式构建交互式应用程序,无需繁琐的前端开发。Streamlit 提供了一组简单的 API,可用于创建具有数据探索、可视化和交互功能的应用程序。只需要通过简单的 Python 脚本就可以创建一个 Web 应用程序。可以利用 Streamlit 的丰富组件库来构建用户界面,例如文本框、滑块、下拉菜单和按钮,以及可视化组件,例如图表和地图。
1、建立虚拟环境和项目结构
设置虚拟环境为运行应用程序提供了一个受控和隔离的环境,确保其依赖关系与其他系统范围的包分离。这种方法简化了依赖关系的管理,并有助于维护不同环境之间的一致性。
然后就是创建我们的项目,一个好的结构会加速我们的开发,如下图所示
在models的文件夹中,我们要存储下载的llm,setup_env.bat将从pipfile中安装所有依赖项。而run_app.bat则是直接运行我们的app。(以上2个文件都是windows环境下的脚本)
2、在本地机器上安装LLaMA
为了有效地使用模型,必须考虑内存和磁盘。由于模型需要完全加载到内存中,因此不仅需要有足够的磁盘空间来存储它们,还需要足够的RAM在执行期间加载它们。比如65B模型,即使在量化之后,也需要40gb的RAM。
所以为了在本地运行,我们将使用最小版本的LLaMA,也就是LLaMA 7B。虽然它是最小的版本,但是LLaMA 7B也提供了很好的语言处理能力,我们能够高效地实现预期的结果。
为了在本地CPU上执行LLM,我们使用GGML格式的本地模型。这里直接从Hugging Fa