Llama CPP
仅在 Node.js 上可用。
此模块基于 node-llama-cpp Node.js 绑定,用于 llama.cpp,允许您使用本地运行的 LLM。这使您可以使用更小的量化模型,该模型能够在笔记本电脑环境中运行,非常适合测试和草稿填充想法,而无需增加费用!
设置
您需要安装主要版本 3
的 node-llama-cpp 模块,以便与您的本地模型通信。
- npm
- Yarn
- pnpm
npm install -S node-llama-cpp@3
yarn add node-llama-cpp@3
pnpm add node-llama-cpp@3
有关安装集成包的常规说明,请参阅此部分。
- npm
- Yarn
- pnpm
npm install @langchain/community @langchain/core
yarn add @langchain/community @langchain/core
pnpm add @langchain/community @langchain/core
您还需要一个本地 Llama 3 模型(或 node-llama-cpp 支持的模型)。您需要将此模型的路径作为参数的一部分传递给 LlamaCpp 模块(请参阅示例)。
开箱即用的 node-llama-cpp
经过调整,可在 MacOS 平台上运行,并支持 Apple M 系列处理器的 Metal GPU。如果您需要关闭此功能或需要支持 CUDA 架构,请参阅 node-llama-cpp 的文档。
给 LangChain.js 贡献者的注意事项:如果您想运行与此模块关联的测试,您需要将本地模型的路径放在环境变量 LLAMA_PATH
中。
安装 Llama3 指南
在您的机器上运行本地 Llama3 模型是一个先决条件,因此这是一个快速指南,用于获取和构建 Llama 3.1-8B(最小的模型),然后对其进行量化,以便它可以在笔记本电脑上舒适地运行。为此,您的机器上需要 python3
(推荐 3.11),还需要 gcc
和 make
,以便可以构建 llama.cpp
。
获取 Llama3 模型
要获取 Llama3 的副本,您需要访问 Meta AI 并请求访问他们的模型。一旦 Meta AI 授予您访问权限,您将收到一封电子邮件,其中包含访问文件的唯一 URL,这将在后续步骤中需要。现在创建一个工作目录,例如
mkdir llama3
cd llama3
现在我们需要转到 Meta AI llama-models
仓库,可以在这里找到。在仓库中,有下载您选择的模型的说明,您应该使用在您的电子邮件中收到的唯一 URL。本教程的其余部分假设您已下载 Llama3.1-8B
,但此后的任何模型都应该有效。下载模型后,请务必保存模型下载路径,这将用于以后。
转换和量化模型
在此步骤中,我们需要使用 llama.cpp
,因此我们需要下载该仓库。
cd ..
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
现在我们需要构建 llama.cpp
工具并设置我们的 python
环境。在这些步骤中,假设您的 python 安装可以使用 python3
运行,并且虚拟环境可以称为 llama3
,请根据您自己的情况进行调整。
cmake -B build
cmake --build build --config Release
python3 -m venv llama3
source llama3/bin/activate
激活您的 llama3 环境后,您应该看到 (llama3)
作为命令提示符的前缀,以告知您这是活动环境。注意:如果您需要返回构建另一个模型或重新量化模型,请不要忘记再次激活环境,如果您更新 llama.cpp
,您将需要重建工具,并可能安装新的或更新的依赖项!现在我们有了一个活动的 python 环境,我们需要安装 python 依赖项。
python3 -m pip install -r requirements.txt
完成此操作后,我们可以开始转换和量化 Llama3 模型,以便通过 llama.cpp
在本地使用。需要转换为 Hugging Face 模型,然后转换为 GGUF 模型。首先,我们需要找到包含以下脚本 convert_llama_weights_to_hf.py
的路径。将此脚本复制并粘贴到您当前的工作目录中。请注意,使用该脚本可能需要您 pip 安装额外的依赖项,请根据需要执行此操作。然后,我们需要转换模型,在转换之前,让我们创建目录来存储我们的 Hugging Face 转换和最终模型。
mkdir models/8B
mkdir models/8B-GGUF
python3 convert_llama_weights_to_hf.py --model_size 8B --input_dir <dir-to-your-model> --output_dir models/8B --llama_version 3
python3 convert_hf_to_gguf.py --outtype f16 --outfile models/8B-GGUF/gguf-llama3-f16.bin models/8B
这应该会在我们创建的目录中创建一个转换后的 Hugging Face 模型和最终的 GGUF 模型。请注意,这只是一个转换后的模型,因此它也大约为 16Gb 大小,在下一步中,我们将把它量化到大约 4Gb。
./build/bin/llama-quantize ./models/8B-GGUF/gguf-llama3-f16.bin ./models/8B-GGUF/gguf-llama3-Q4_0.bin Q4_0
运行此命令应导致在 models\8B-GGUF
目录中创建一个新模型,这个模型名为 gguf-llama3-Q4_0.bin
,这就是我们可以与 langchain 一起使用的模型。您可以使用 llama.cpp
工具测试它,以验证此模型是否正常工作。
./build/bin/llama-cli -m ./models/8B-GGUF/gguf-llama3-Q4_0.bin -cnv -p "You are a helpful assistant"
运行此命令将启动模型以进行聊天会话。顺便说一句,如果您磁盘空间不足,则此小型模型是我们唯一需要的模型,因此您可以备份和/或删除原始的和转换后的 13.5Gb 模型。
用法
import { LlamaCpp } from "@langchain/community/llms/llama_cpp";
const llamaPath = "/Replace/with/path/to/your/model/gguf-llama3-Q4_0.bin";
const question = "Where do Llamas come from?";
const model = await LlamaCpp.initialize({ 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-llama3-Q4_0.bin";
const model = await LlamaCpp.initialize({
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