Instant, controllable, local pre-trained AI models in Rust
Kalosm
Kalosm 是一个 crate 生态系统,可轻松开发使用本地或远程 AI 模型的应用程序。此仓库中有三个主要项目:
Kalosm
Kalosm 是 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 还支持围绕预训练模型的多种实用工具。这些工具包括:
- 为 LLM 提取、格式化和检索上下文:从 txt/html/docx/md/pdf 中提取上下文 对上下文进行分块处理 然后通过向量数据库集成搜索相关上下文
- 从麦克风或文件中转录音频
- 从网页爬取和抓取内容
性能表现
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::*;
/// A fictional character
#[derive(Parse, Schema, Clone, Debug)]
struct Character {
/// The name of the character
#[parse(pattern = "[A-Z][a-z]{2,10} [A-Z][a-z]{2,10}")]
name: String,
/// The age of the character
#[parse(range = 1..=100)]
age: u8,
/// A description of the character
#[parse(pattern = "[A-Za-z ]{40,200}")]
description: String,
}
#[tokio::main]
async fn main() {
// First create a model. Chat models tend to work best with structured generation
let model = Llama::phi_3().await.unwrap();
// Then create a task with the parser as constraints
let task = model.task("You generate realistic JSON placeholders for characters")
.typed();
// Finally, run the task
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 的更完整指南,请访问 Kalosm 网站,示例可在 examples 文件夹 中找到。
- 安装 rust
- 创建新项目:
cargo new kalosm-hello-world
cd ./kalosm-hello-world
- 将 Kalosm 添加为依赖项
# You can use `--features language,metal`, `--features language,cuda`, or `--features language,mkl` if your machine supports an accelerator
cargo add kalosm --features language
cargo add tokio --features full
- 将此代码添加到您的
main.rs文件中
use kalosm::language::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
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?;
}
}
- 使用以下命令运行应用程序:
cargo run --release
Fusor
⚠️ Fusor 仍处于早期开发阶段,尚未准备好投入生产使用。在 0.5 版本中,Fusor 将作为 Kalosm 的后端,以支持 Web 和 AMD。
Fusor 是一个用于量化机器学习推理的 WGPU 运行时。Fusor 可与 gguf 文件格式配合使用,以加载量化模型。它旨在通过 WebGpu 支持多种不同的加速器,包括 Nvidia GPU、AMD GPU 和 Metal。大多数机器学习框架都包含手动优化的内核,这些内核可协同执行一系列操作。Fusor 使用内核融合编译器,将自定义操作链合并为优化的内核,而无需深入编写着色器代码。这会编译为单个内核:
fn exp_add_one(tensor: Tensor<2, f32>) -> Tensor<2, f32> {
1. + (-tensor).exp()
}
社区
如果您对任一项目感兴趣,可加入 discord 参与项目讨论并获取帮助。
贡献
- 在我们的 issue tracker 上报告问题。
- 在 discord 中帮助其他用户
- 若您有意参与贡献,欢迎在 discord 上联系我们
项目介绍
本地人工智能工作流的图形编辑器【此简介由AI生成】
下载使用量
项目总下载次数(含Clone、Pull、 zip 包及 release 下载),每日凌晨更新