Llama CPP
仅在 Node.js 上可用。
此模块基于 node-llama-cpp 为 llama.cpp 的 Node.js 绑定,允许您使用本地运行的 LLM。这使您能够使用可以在笔记本电脑环境中运行的更小量化的模型,非常适合在不产生账单的情况下测试和草拟想法!
设置
您需要安装 node-llama-cpp 模块才能与您的本地模型通信。
- npm
- Yarn
- pnpm
npm install -S node-llama-cpp
yarn add node-llama-cpp
pnpm add node-llama-cpp
参见 有关安装集成包的一般说明。
- npm
- Yarn
- pnpm
npm install @langchain/community @langchain/core
yarn add @langchain/community @langchain/core
pnpm add @langchain/community @langchain/core
您还需要一个本地的 Llama 2 模型(或 node-llama-cpp 支持的模型)。您需要将此模型的路径作为参数的一部分传递给 LlamaCpp 模块(请参阅示例)。
开箱即用的 node-llama-cpp
针对在具有 Apple M 系列处理器 Metal GPU 支持的 MacOS 平台上运行进行了优化。如果您需要关闭此功能或需要 CUDA 架构的支持,请参阅 node-llama-cpp 的文档。
针对 LangChain.js 贡献者的说明:如果您想运行与此模块相关的测试,您需要将本地模型的路径放入环境变量 LLAMA_PATH
中。
安装 Llama2 指南
在您的机器上运行本地 Llama2 模型是先决条件,因此这是一个快速指南,介绍如何获取和构建 Llama 7B(最小模型),然后对其进行量化,以便它可以在笔记本电脑上舒适地运行。为此,您需要在机器上安装 python3
(推荐使用 3.11),以及 gcc
和 make
,以便能够构建 llama.cpp
。
获取 Llama2 模型
要获取 Llama2 的副本,您需要访问 Meta AI 并请求访问他们的模型。Meta AI 授予您访问权限后,您将收到一封包含访问文件的唯一 URL 的电子邮件,这将在后续步骤中需要。现在创建一个工作目录,例如
mkdir llama2
cd llama2
现在我们需要将 Meta AI 的 llama
仓库放到位,以便我们可以下载模型。
git clone https://github.com/facebookresearch/llama.git
一旦到位,我们就可以切换到该目录并运行下载器脚本以获取我们将要使用的模型。注意:从这里开始,假设所用模型是 llama-2–7b
,如果您选择其他模型,请不要忘记相应地更改对模型的引用。
cd llama
/bin/bash ./download.sh
此脚本将要求您提供 Meta AI 发送给您的 URL(见上文),您还需要选择要下载的模型,在这种情况下,我们使用的是 llama-2–7b
。一旦此步骤成功完成(这可能需要一些时间,llama-2–7b
模型大约 13.5Gb),应该会出现一个新的 llama-2–7b
目录,其中包含模型和其他文件。
转换和量化模型
在此步骤中,我们需要使用 llama.cpp
,因此我们需要下载该仓库。
cd ..
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
现在我们需要构建 llama.cpp
工具并设置我们的 python
环境。在这些步骤中,假设您的 python 安装可以使用 python3
运行,并且虚拟环境可以称为 llama2
,请根据您的情况进行调整。
make
python3 -m venv llama2
source llama2/bin/activate
激活您的 llama2 环境后,您应该看到 (llama2)
作为命令提示符的前缀,让您知道这是活动的
python3 -m pip install -r requirements.txt
完成此操作后,我们可以开始转换和量化 Llama2 模型,以便通过 llama.cpp
本地使用。首先,我们需要转换模型,在转换之前,让我们创建一个目录来存储它。
mkdir models/7B
python3 convert.py --outfile models/7B/gguf-llama2-f16.bin --outtype f16 ../../llama2/llama/llama-2-7b --vocab-dir ../../llama2/llama/llama-2-7b
这应该在刚刚创建的目录中创建一个名为 gguf-llama2-f16.bin
的转换后的模型。请注意,这只是一个转换后的模型,因此它的尺寸也约为 13.5Gb,在下一步中,我们将把它量化到大约 4Gb。
./quantize ./models/7B/gguf-llama2-f16.bin ./models/7B/gguf-llama2-q4_0.bin q4_0
运行此命令将创建一个名为gguf-llama2-q4_0.bin
的新模型,位于models\7B
目录中,这是我们可以与 langchain 一起使用的模型。可以使用llama.cpp
工具测试该模型是否正常工作。
./main -m ./models/7B/gguf-llama2-q4_0.bin -n 1024 --repeat_penalty 1.0 --color -i -r "User:" -f ./prompts/chat-with-bob.txt
运行此命令启动模型进行聊天会话。顺便说一句,如果你磁盘空间不足,这个小型模型是我们唯一需要的模型,因此你可以备份和/或删除原始模型和转换后的 13.5Gb 模型。
使用
import { LlamaCpp } from "@langchain/community/llms/llama_cpp";
const llamaPath = "/Replace/with/path/to/your/model/gguf-llama2-q4_0.bin";
const question = "Where do Llamas come from?";
const model = new LlamaCpp({ modelPath: llamaPath });
console.log(`You: ${question}`);
const response = await model.invoke(question);
console.log(`AI : ${response}`);
API 参考
- LlamaCpp 来自
@langchain/community/llms/llama_cpp
流式传输
import { LlamaCpp } from "@langchain/community/llms/llama_cpp";
const llamaPath = "/Replace/with/path/to/your/model/gguf-llama2-q4_0.bin";
const model = new LlamaCpp({ modelPath: llamaPath, temperature: 0.7 });
const prompt = "Tell me a short story about a happy Llama.";
const stream = await model.stream(prompt);
for await (const chunk of stream) {
console.log(chunk);
}
/*
Once
upon
a
time
,
in
the
rolling
hills
of
Peru
...
*/
API 参考
- LlamaCpp 来自
@langchain/community/llms/llama_cpp