2个不稳定版本
0.2.0 | 2024年7月4日 |
---|---|
0.1.0 | 2024年6月20日 |
#148 in 机器学习
68KB
1.5K SLoC
callm
关于
callm
允许您在本地硬件上直接运行生成式AI模型(如大型语言模型)。
在内部,callm
严重依赖于 candle 库,并使用纯Rust编写 🦀。
支持的模型
模型 | Safetensors | GGUF(量化) |
---|---|---|
Llama | ✅ | ✅ |
Mistral | ✅ | ✅ |
Phi3 | ✅ | ❌ |
Qwen2 | ✅ | ❌ |
线程安全性
虽然管道可以在线程之间安全发送,但 callm
没有经过广泛的线程安全性测试。
请谨慎使用。
可移植性
callm
已知在 Linux 和 macOS 上运行,并在这些平台上进行了测试。尽管 Windows 尚未进行广泛测试,但预计将无需问题即可直接运行。
callm
仍处于早期开发阶段,尚未准备好投入生产。
安装
将 callm
添加到依赖项
$ cargo add callm
启用GPU支持
callm
使用特性来选择性地启用对GPU加速的支持。
NVIDIA(CUDA)
启用 cuda
特性以包括对CUDA设备的支持。
$ cargo add callm --features cuda
Apple(Metal)
启用 metal
特性以包括对Metal设备的支持。
$ cargo add callm --features metal
使用方法
callm
使用构建器模式创建推理管道。
use callm::pipelines::PipelineText;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Build pipeline
let mut pipeline = PipelineText::builder()
.with_location("/path/to/model")
.build()?;
// Run inference
let text_completion = pipeline.run("Tell me a joke about Rust borrow checker")?;
println!("{text_completion}");
Ok(())
}
自定义采样参数
在管道构建期间或之后覆盖默认采样参数。
use callm::pipelines::PipelineText;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Build pipeline with custom sampling parameters
let mut pipeline = PipelineText::builder()
.with_location("/path/to/model")
.with_temperature(0.65)
.with_top_k(25)
.build()?;
// Adjust sampling parameters later on
pipeline.set_seed(42);
pipeline.set_top_p(0.3);
// Run inference
let text_completion = pipeline.run("Write an article about Pentium F00F bug")?;
println!("{text_completion}");
Ok(())
}
指令遵循和聊天模型
如果您正在加载的模型包含聊天模板,您可以通过 run_chat()
使用会话式推理。它接受以下形式的元组切片:(MessageRole, String)
。
use callm::pipelines::PipelineText;
use callm::templates::MessageRole;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Build pipeline
let mut pipeline = PipelineText::builder()
.with_location("/path/to/model")
.with_temperature(0.1)
.build()?;
// Prepare conversation messages
let messages = vec![
(
MessageRole::System,
"You are impersonating Linus Torvalds.".to_string(),
),
(
MessageRole::User,
"What is your opinion on Rust for Linux kernel development?".to_string(),
),
];
// Run chat-style inference
let assistant_response = pipeline.run_chat(&messages)?;
println!("{assistant_response}");
Ok(())
}
文档
请参阅文档以获取完整的API参考。
可以在单独的callm-demos仓库中找到一些示例和工具。
贡献
感谢您对贡献callm
的兴趣!
由于该项目仍处于早期阶段,您的帮助是无价的。以下是一些您可以参与的途径
- 报告问题:如果您遇到任何错误或意外行为,请在GitHub上提交一个问题。这将帮助我们跟踪和修复问题。
- 提交拉取请求:如果您想贡献代码,请Fork存储库,进行更改,并提交拉取请求。我们会尽快审查并合并您的更改。
- 帮助完善文档:如果您在特定领域有专业知识,请帮助我们改进我们的文档。
感谢您的贡献!💪
依赖项
~23–34MB
~620K SLoC