На главную > Блог > Категория > 🤖 Как написать собственного ИИ на Rust
ИИ Rust машинное обучение нейросети LLM
Создание искусственного интеллекта — это увлекательное путешествие, которое стало доступнее благодаря экосистеме Rust. В этой статье мы разберём как написать собственный ИИ на Rust — от маленьких обучаемых моделей до развёртывания больших языковых моделей (LLM), с кодом, библиотеками и архитектурными решениями.
Rust предлагает сочетание, которое делает его привлекательным для систем ИИ:
| Библиотека | Назначение | Аналог в Python |
|---|---|---|
| tch-rs | Обёртка над PyTorch C++ API | PyTorch |
| candle | Минималистичный ML-фреймворк | PyTorch |
| linfa | Классическое ML (scikit-learn-подобный) | scikit-learn |
| llama-cpp-rs | Взаимодействие с GGUF-моделями | llama-cpp-python |
Начнём с простого: линейная регрессия. Для этого используем крейт linfa-linear.
[dependencies]
linfa = "0.5.0"
linfa-linear = "0.5.0"
ndarray = "0.15.4"
Создаём синтетический датасет y = 2x + 1 [citation:2].
use ndarray::{Array2, s};
fn generate_data() -> Array2<f64> {
let x = Array2::from_shape_vec((10, 1), vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]).unwrap();
let y = x.mapv(|v| 2.0 * v + 1.0);
ndarray::stack(ndarray::Axis(1), &[x.view(), y.view()]).unwrap()
}
use linfa::prelude::*;
use linfa_linear::LinearRegression;
fn train_model(data: Array2<f64>) -> LinearRegression<f64> {
let (x, y) = (data.slice(s![.., 0..1]).to_owned(), data.slice(s![.., 1..2]).to_owned());
LinearRegression::default().fit(&x, &y).unwrap()
}
fn main() {
let data = generate_data();
let model = train_model(data);
let input = Array2::from_shape_vec((5, 1), vec![11.0, 12.0, 13.0, 14.0, 15.0]).unwrap();
let predictions = model.predict(&input);
println!("Предсказания: {:?}", predictions);
}
Результат:
[[23.0], [25.0], [27.0], [29.0], [31.0]]
, что соответствует 2x+1 [citation:2].
Для глубокого обучения используем tch-rs — обёртку над PyTorch [citation:3][citation:8].
[dependencies]
tch = "0.2.1"
use tch::{nn, nn::Module, nn::OptimizerConfig, Device};
const IMAGE_DIM: i64 = 784;
const HIDDEN_NODES: i64 = 128;
const LABELS: i64 = 10;
fn net(vs: &nn::Path) -> impl Module {
nn::seq()
.add(nn::linear(vs / "layer1", IMAGE_DIM, HIDDEN_NODES, Default::default()))
.add_fn(|xs| xs.relu())
.add(nn::linear(vs / "layer2", HIDDEN_NODES, LABELS, Default::default()))
}
pub fn run() -> anyhow::Result<()> {
let vs = nn::VarStore::new(Device::Cpu);
let model = net(&vs.root());
// ... загрузка данных MNIST ...
let mut opt = nn::Adam::default().build(&vs, 1e-3)?;
for epoch in 0..50 {
// ... итерация по батчам ...
let loss = model.forward(&input).cross_entropy_for_logits(&target);
opt.backward_step(&loss);
}
Ok(())
}
Полный код обучения на MNIST доступен в примерах tch-rs [citation:3][citation:8].
Для работы с современными LLM (LLaMA, Mistral, Qwen) есть два основных подхода:
llama-cpp-rs
Высокоуровневая обёртка над llama.cpp, поддерживает GGUF-формат и CUDA [citation:9].
# Сборка и запуск простого примера
cargo run --release --bin simple -- --prompt "Как убить процесс в Linux —" hf-model TheBloke/Llama-2-7B-GGUF llama-2-7b.Q4_K_M.gguf
candleМинималистичный фреймворк, поддерживающий множество моделей: LLaMA, Mistral, Phi, Whisper, Stable Diffusion и другие [citation:10].
# Пример запуска квантованной модели
cargo run --example quantized --release
llama-cpp-rs или candle.Если не хочется использовать тяжёлые фреймворки, можно построить агента на базе цикла наблюдать → решать → действовать → рефлексировать [citation:6].
llama-cpp-rs или candle).
fn agent_loop() {
loop {
let input = read_input();
let action = ask_model(&input);
execute_action(&action);
log_result(&action);
}
}
| Задача | Рекомендуемый инструмент | Сложность |
|---|---|---|
| Линейная регрессия | linfa-linear | ⭐ |
| Кластеризация (K-Means) | linfa-clustering | ⭐⭐ |
| Нейросеть (MNIST) | tch-rs | ⭐⭐⭐ |
| LLM (локально) | llama-cpp-rs | ⭐⭐⭐ |
| LLM (высокопроизводительно) | candle | ⭐⭐⭐ |
Device::Cpu или Device::Cuda(0) в тензорах [citation:10].tch-rs и linfa активно обновляются.--release при сборке.tch-rs/examples [citation:3][citation:8].Написать собственный ИИ на Rust — вполне реально. У тебя есть выбор:
linfa.tch-rs или candle.llama-cpp-rs или candle.Главное — начать с простого, изучить библиотеки и не бояться экспериментировать.
Дата размещения статьи: 04-07-2026 в 11:56:11