本地部署开源大模型教程:LangChain + Streamlit + Llama
在过去的几个月里,大型语言模型(LLM)获得了极大的关注。这些模型创造了令人兴奋的前景,特别是对于从事聊天机器人、个人助理和内容创作的开发人员。
![图:LLM 全景示意图]
大型语言模型(LLM)是指能够生成与人类语言非常相似的文本并以自然方式理解提示的机器学习模型。这些模型使用广泛的数据集进行训练,包括书籍、文章、网站和其他来源。通过分析数据中的统计模式,LLM 可以预测给定输入后最可能出现的单词或短语。
在本文中,我将演示如何利用 LLaMA 7B 和 LangChain 从头开始创建自己的文档助手。
背景知识
在这篇文章中,我将展示从头开始创建自己的文档助手的过程,利用 LLaMA 7B 和 LangChain。LangChain 是一个专门为与 LLM 无缝集成而开发的开源库。
以下是该教程的结构概述:
- 设置虚拟环境和创建文件结构
- 在你的本地机器上设置 LLM
- 将 LLM 与 LangChain 整合并定制 PromptTemplate
- 文件检索和答案生成
- 使用 Streamlit 建立应用程序
1. LangChain
LangChain 是一个令人印象深刻且免费的框架,它彻底改变了广泛应用的开发过程,包括聊天机器人、生成式问答(GQA)和摘要。通过将来自多个模块的组件无缝链接,LangChain 能够使用大部分的 LLM 来创建应用程序。
2. LLaMA
LLaMA 是由 Meta AI 设计的一个新的大型语言模型。LLaMA 拥有 70 亿到 650 亿个参数的模型集合,是目前最全面的语言模型之一。考虑到 LLaMA 的卓越能力,我们选择利用这个强大的语言模型来达到我们的目的。具体来说,我们将采用最小的 LLaMA 版本,称为 LLaMA 7B。即使在这个缩小的版本中,LLaMA 7B 也提供了重要的语言处理能力,使我们能够有效地实现我们的预期结果。
官方研究论文:LLaMA: Open and Efficient Foundation Language Models
为了在本地 CPU 上执行 LLM,我们需要一个 GGML 格式的本地模型。有几种方法可以实现这一点,但最简单的方法是直接从 Hugging Face Models 资源库下载 bin 文件。在我们的案例中,我们将下载 Llama 7B 模型。这些模型是开源的,可以免费下载。
3. 什么是 GGML
GGML 是一个用于机器学习的张量库,它只是一个 C++ 库,允许你在 CPU 或 CPU + GPU 上运行 LLM。它定义了用于分发大型语言模型(LLM)的二进制格式。GGML 使用了一种称为量化的技术,该技术允许大型语言模型在消费者硬件上运行。
4. 量化
我们都知道,模型的权重是浮点数。就像表示大整数需要更多的空间一样,表示高精度浮点数比表示低精度浮点数需要更多的空间。量化大型语言模型的过程涉及降低表示权重的精度,以减少使用模型所需的资源。GGML 支持许多不同的量化策略(例如 4 位、5 位和 8 位量化),每种策略在效率和性能之间提供不同的权衡。
下面是量化后模型大小的对比参考:
![图:量化前后模型大小对比]
5. Streamlit
Streamlit 是一个用于构建数据科学和机器学习应用程序的开源 Python 库。它旨在使开发人员能够以简单快速的方式构建交互式应用程序,无需繁琐的前端开发。Streamlit 提供了一组简单的 API,可用于创建具有数据探索、可视化和交互功能的应用程序。只需要通过简单的 Python 脚本就可以创建一个 Web 应用程序。
1. 建立虚拟环境和项目结构
在模型的文件夹中,将存储下载的 LLM,而 pip 文件将位于根目录。
设置虚拟环境为运行应用程序提供了一个受控和隔离的环境,确保其依赖关系与其他系统范围的包分离。这种方法简化了依赖关系的管理,并有助于维护不同环境之间的一致性。
然后就是创建我们的项目,一个好的结构会加速我们的开发:
![图:项目文件结构示意]
- 在
models的文件夹中,我们要存储下载的 LLM。 setup_env.bat将从pipfile中安装所有依赖项。run_app.bat则是直接运行我们的 App。(以上 2 个文件都是 Windows 环境下的脚本)


