#generative-ai #ai #llm #candle #language-model #gen-ai

callm

在您的硬件上直接运行生成式AI模型

2个不稳定版本

0.2.0 2024年7月4日
0.1.0 2024年6月20日

#148 in 机器学习

MIT许可证

68KB
1.5K SLoC

callm

Latest version on crates.io Documentation on docs.rs License

关于

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