#model #llm #ggml #language-model #ml-model #inference #llama

llm-base

llm 的基础;为模型实现提供通用结构。不适用于最终用户。

5 个版本

0.1.1 2023年5月8日
0.1.0-rc42023年5月8日
0.1.0-rc32023年5月7日
0.1.0-rc12023年5月4日

#524机器学习

Download history 180/week @ 2024-03-11 88/week @ 2024-03-18 89/week @ 2024-03-25 140/week @ 2024-04-01 183/week @ 2024-04-08 98/week @ 2024-04-15 86/week @ 2024-04-22 87/week @ 2024-04-29 132/week @ 2024-05-06 88/week @ 2024-05-13 90/week @ 2024-05-20 92/week @ 2024-05-27 80/week @ 2024-06-03 83/week @ 2024-06-10 91/week @ 2024-06-17 92/week @ 2024-06-24

每月354 次下载
用于 12 个crate(7个直接使用)

MIT/Apache

145KB
2.5K SLoC

llm

A llama riding a crab, AI-generated

图片由 @darthdeus 提供,使用 Stable Diffusion

Latest version MIT/Apache2 Discord

llm 是一个 Rust 生态系统,用于在大语言模型上运行推理,灵感来自 llama.cpp

主要的crate是 llm crate,它包装了 llm-base 和支持模型crate。

llm 的基础上,还有一个命令行应用程序 llm-cli,它为在支持模型上运行推理提供了一个方便的界面。此CLI可通过最新GitHub发布版获取。

它由 ggml 张量库提供支持,旨在将 Rust 的健壮性和易用性带到大型语言模型的世界。

目前支持以下模型

  • GPT-2
  • GPT-J
  • LLaMA: LLaMA、Alpaca、Vicuna、Koala、GPT4All v1、GPT4-X、Wizard
  • GPT-NeoX: GPT-NeoX、StableLM、Dolly v2(部分,不是相同的张量名称?)
  • BLOOM: BLOOMZ

入门

请确保您已安装 Rust 1.65.0 或更高版本以及 C 工具链[^1]。

llm 是一个 Rust 库,重新导出 llm-base 和模型crate(例如 bloomgpt2 llama)。

llm-cli(二进制名称 llm)是一个基本应用程序,它提供了一个命令行界面到该库。

注意:为了获得最佳效果,请确保以发布模式构建和运行。调试构建将非常慢。

使用 cargo 构建

运行

cargo install --git https://github.com/rustformers/llm llm-cli

llm 安装到您的 Cargo bin 目录,该目录 rustup 可能已添加到您的 PATH

然后可以通过 llm 运行 CLI 应用程序。

从仓库构建

克隆仓库,然后使用以下命令构建

git clone --recurse-submodules [email protected]:rustformers/llm.git
cargo build --release

生成的二进制文件将在 target/release/llm[.exe]

也可以使用 Cargo 直接运行,使用

cargo run --release -- <ARGS>

这对于开发很有用。

获取模型

GGML 文件很容易获取。有关已测试模型的列表,请参阅 已知良好的模型

某些较旧的 GGML 格式不支持本项目,但目标是保持与上游 GGML 项目的功能一致性。有关加载模型的问题或请求支持 受支持的 GGML 模型类型,请 打开 Issue

来自 Hugging Face

Hugging Face 🤗 是开源机器学习领域的领导者,托管了数百个 GGML 模型。 在 Hugging Face 🤗 上搜索 GGML 模型

r/LocalLLaMA

这个 Reddit 社区维护了一个与 GGML 模型相关的 维基,包括获取 GGML 模型 的链接列表(大多数来自 Hugging Face 🤗)。

LLaMA 原始权重

目前,获取原始权重的唯一合法来源是 此仓库

获取权重后,需要将它们转换为与 ggml 兼容的格式。为此,请按照以下步骤操作

警告

要运行 Python 脚本,需要 Python 3.9 或 3.10 版本。截至编写时,3.11 不受支持。

# Convert the model to f16 ggml format
python3 scripts/convert-pth-to-ggml.py /path/to/your/models/7B/ 1

# Quantize the model to 4-bit ggml format
cargo run --release llama quantize /path/to/your/models/7B/ggml-model-f16.bin /path/to/your/models/7B/ggml-model-q4_0.bin q4_0

将来,我们希望提供 更流畅的模型转换方法

注意

llama.cpp 仓库 包含有关如何获取和运行特定模型的附加信息。

运行

例如,尝试以下提示

llm llama infer -m <path>/ggml-model-q4_0.bin -p "Tell me how cool the Rust programming language is:"

一些其他尝试的事情

  • 使用 --help 查看可用选项列表。

  • 如果您有 alpaca-lora 权重,请尝试 repl 模式!

    llm llama repl -m <path>/ggml-alpaca-7b-q4.bin -f examples/alpaca_prompt.txt
    
  • 会话可以加载(--load-session)或保存到文件(--save-session)。要自动加载和保存相同的会话,请使用 --persist-session。这也可以用于缓存提示以减少加载时间

[^1]: 编译 ggml 需要 C 工具链。不需要 C++ 工具链。

Docker

# To build (This will take some time, go grab some coffee):
docker build -t llm .

# To run with prompt:
docker run --rm --name llm -it -v ${PWD}/data:/data -v ${PWD}/examples:/examples llm llama infer -m data/gpt4all-lora-quantized-ggml.bin -p "Tell me how cool the Rust programming language is:"

# To run with prompt file and repl (will wait for user input):
docker run --rm --name llm -it -v ${PWD}/data:/data -v ${PWD}/examples:/examples llm llama repl -m data/gpt4all-lora-quantized-ggml.bin -f examples/alpaca_prompt.txt

Q&A

你为什么这样做?

这不是我的选择。费里斯在我的梦中出现,并要求我以圣甲壳虫的名义重写它。

说真的。

快来吧!我不想卷入争论。你知道的,什么什么内存什么什么货载很棒,别让我说,大家都知道这一点。

我坚持。

哎呀!好吧。在看到llama.cpp的巨大潜力后,我首先想到的是将其变成一个库嵌入到我的项目中。我开始深入研究代码,发现繁重的任务由ggml(一个C库,易于与Rust绑定)完成,整个项目大约有2000行C++代码(绑定起来并不容易)。在尝试了几次(失败)将HTTP服务器构建到工具中后,我意识到如果直接将代码移植到Rust(我更熟悉的环境)中,我会更加高效。

这是真正的理由吗?

哈哈。当然不是。我只是喜欢收集想象中的互联网积分,形式是人们在我开始无意义的寻找重写X东西但用Rust时给我的小星星。

这与llama.cpp有何不同?

这是对llama.cpp的重新实现,它与它之外没有共享任何代码,除了ggml。这是出于各种原因

  • llama.cpp需要一个C++编译器,这可能会在跨编译到更神秘的平台时引起问题。这样的平台的一个例子是WebAssembly,它可能需要一个非标准的编译器SDK。
  • Rust从开发和开源的角度来看更容易使用;它提供了更好的工具来编写由许多其他作者编写的“大型代码”。此外,我们可以轻松地从中受益于更大的Rust生态系统。
  • 我们希望将ggml作为一个可选的后端(见此问题)。

总的来说,我们希望构建一个像其他Rust crate一样易于使用和部署的模型推理解决方案。

哪些应用程序和库使用llm

应用程序

  • llmcord:使用llm生成消息的Discord机器人。

依赖关系

~5.5MB
~67K SLoC