Floneum 是一个 Rust crate 生态系统,旨在简化使用本地或远程 AI 模型的应用程序开发。本仓库包含三个主要项目:
Kalosm 是支撑 Floneum 的、用于 Rust 预训练模型的简单接口。它简化了与预训练的语言、音频和图像模型的交互。
Kalosm 支持多种模型。以下是当前支持的模型列表:
| 模型 | 模态 | 大小 | 描述 | 量化支持 | CUDA + Metal 加速 | 示例 |
|---|---|---|---|---|---|---|
| Llama | 文本 | 1b-70b | 通用语言模型 | ✅ | ✅ | llama 3 聊天 |
| Mistral | 文本 | 7-13b | 通用语言模型 | ✅ | ✅ | mistral 聊天 |
| Phi | 文本 | 2b-4b | 小型推理专注型语言模型 | ✅ | ✅ | phi 3 聊天 |
| Whisper | 音频 | 20MB-1GB | 音频转录模型 | ✅ | ✅ | 实时 Whisper 转录 |
| RWuerstchen | 图像 | 5gb | 图像生成模型 | ❌ | ✅ | rwuerstchen 图像生成 |
| TrOcr | 图像 | 3gb | 光学字符识别模型 | ❌ | ✅ | 文本识别 |
| Segment Anything | 图像 | 50MB-400MB | 图像分割模型 | ❌ | ❌ | 图像分割 |
| Bert | 文本 | 100MB-1GB | 文本嵌入模型 | ❌ | ✅ | 语义搜索 |
Kalosm 还支持围绕预训练模型的各种实用工具,包括:
Kalosm 使用 candle 机器学习库在纯 Rust 中运行模型。它支持量化和加速模型,性能与 llama.cpp 相当:
Mistral 7b
| 加速器 | Kalosm | llama.cpp |
| ------ | --------- | --------- |
| Metal (M2) | 39 t/s | 27 t/s |
Kalosm 支持使用任意解析器进行结构化生成。它使用自定义的解析器引擎、采样器和结构感知加速技术,使得结构化生成甚至比非受控文本生成更快。你可以为任何 Rust 类型添加 #[derive(Parse, Schema)] 以使其可用于结构化生成:
use kalosm::language::*;
/// 一个虚构角色
#[derive(Parse, Schema, Clone, Debug)]
struct Character {
/// 角色姓名
#[parse(pattern = "[A-Z][a-z]{2,10} [A-Z][a-z]{2,10}")]
name: String,
/// 角色年龄
#[parse(range = 1..=100)]
age: u8,
/// 角色描述
#[parse(pattern = "[A-Za-z ]{40,200}")]
description: String,
}
#[tokio::main]
async fn main() {
// 首先创建一个模型。聊天模型通常最适合结构化生成
let model = Llama::phi_3().await.unwrap();
// 然后创建一个带有解析器约束的任务
let task = model.task("You generate realistic JSON placeholders for characters")
.typed();
// 最后,运行任务
let mut stream = task(&"Create a list of random characters", &model);
stream.to_std_out().await.unwrap();
let characters: [Character; 10] = stream.await.unwrap();
println!("{characters:?}");
}
https://github.com/user-attachments/assets/8900f57d-55c8-4d4a-a67b-73beab1e5155
除了正则表达式,你还可以提供自己的语法来生成结构化数据。这允许你将响应约束为你想要的任何结构,包括复杂的数据结构,如 JSON、HTML 和 XML。
本快速入门将引导你运行一个简单的聊天机器人。让我们开始吧!
关于 Kalosm 的更完整指南可在 Kalosm 网站上找到,示例可在 examples 文件夹中找到。
cargo new kalosm-hello-world
cd ./kalosm-hello-world
# 如果你的机器支持加速器,可以使用 `--features language,metal`、`--features language,cuda` 或 `--features language,mkl`
cargo add kalosm --features language
cargo add tokio --features full
main.rs 文件中```rust, no_run
use kalosm::language::*;
async fn main() -> Result<(), Box> {
let model = Llama::phi_3().await?;
let mut chat = model.chat()
.with_system_prompt("You are a pirate called Blackbeard");
loop {
chat(&prompt_input("\n> ")?)
.to_std_out()
.await?;
}
}
5. 运行你的应用程序:
```sh
cargo run --release
⚠️ Fusor 仍处于早期开发阶段,尚未准备好用于生产环境。在 0.5 版本中,Fusor 将作为 Kalosm 和 Floneum 的后端,以支持 Web 和 AMD。
Fusor 是一个用于量化 ML 推理的 WGPU 运行时。Fusor 使用 gguf 文件格式加载量化模型。它利用 WebGpu 来面向多种不同的加速器,包括 Nvidia GPU、AMD GPU 和 Metal。大多数 ML 框架包含手工优化的内核,这些内核将一系列操作一起执行。Fusor 使用内核融合编译器将自定义操作链合并到一个优化的内核中,而无需降级到着色器代码。这将编译为单个内核:
rust, ignore
fn exp_add_one(tensor: Tensor<2, f32>) -> Tensor<2, f32> {
1. + (-tensor).exp()
}
如果你对其中任何一个项目感兴趣,可以加入 Discord 讨论项目并获得帮助。