Найти в Дзене
Как использовать &self, &mut self, self и mut self — в ML
Повысить производительность в машинном обучении: &self и &mut self позволяют работать с одними и теми же данными в памяти (например, в GPU через CUDA), просто передавая ссылки на них. Повысить безопасность: &mut self — гарантирует, что в любой момент времени только один поток может изменять данные, что полностью исключает ошибки многопоточности. Так же &mut self предотвращает одновременные мутации при многопоточном обучении. 1. &self: Неизменяемое заимствование "Посмотреть, но не трогать" (Неизменяемое заимствование) use ndarray::{array, Axis}; let array = array![[1...
1 месяц назад
Валидация json с Rust ML
🎯 https://github.com/nicktretyakov/json_validate Чтение данных → Извлечение признаков → Нормализация → Обучение моделей → Валидация → Обнаружение аномалий struct ComplexData { id: u64, name: String, features: Vec<f64>, // Основные числовые признаки labels: Option<Vec<String>>, // Метки (могут отсутствовать) nested: HashMap<String, NestedData>, // Вложенные данные timestamp: String, } struct NestedData { value: f64, // Числовое значение category:...
1 месяц назад
Использование мутабельного слайса вместо вектора в Rust для ML
Любое программное решение ограничено количеством памяти и CPU. Вектор позволяет хранить неограниченное количество информации, создавая тем самым угрозу работоспособности ПО. При этом рассчитать объем хранимой информации в векторе невозможно, по причине: Мутабельный слайс (&mut [T]) — это всего лишь "вид" на уже существующие данные. Он не выделяет память самостоятельно, а только заимствует её у другой структуры (вектора, массива и т.д.). Сам объект слайса занимает на стеке фиксированный объём —...
1 месяц назад
GraphQL pipeline на Rust
Создать фреймворк для построения асинхронных конвейеров обработки данных с поддержкой параллельных вычислений, состоящие из независимых узлов (nodes), которые обмениваются данными через асинхронные каналы. Каждый узел выполняет специфическую задачу и может работать параллельно с другими узлами. [Node A] --(channel)--> [Node B] --(channel)--> [Node C] Каждый узел: pub enum Data { FilePath(PathBuf), // Путь к файлу FileHash(PathBuf, String), // Путь и хеш файла } pub enum NodeError...
2 месяца назад
Анализ сетевого трафика на Rust ML
Научиться использованию рекуррентных нейронных сетей (RNN) и LSTM для обнаружения аномалий с использованием ML. Написать анализатор последовательностей сетевых пакетов для выявления низкочастотных атак в HTTP-трафике. RNN — это тип нейронной сети, который специализируется на работе с последовательностями данных, где порядок важен. Например, текст, речь, временные ряды (например, курсы валют или сетевой трафик). Пример: Представьте, что вы читаете книгу. Чтобы понять смысл предложения, вам нужно помнить, что было написано раньше...
2 месяца назад
Как использовать Rust и Lua для работы с ML
Встраивание Lua в Rust-приложения: можно использовать Rust-крейты, такие как mlua (ранее rlua), для создания экземпляра виртуальной машины Lua внутри вашей программы. Это позволяет: Использование Rust для реализации высокопроизводительных ядер: Вы можете разрабатывать и компилировать критические для производительности компоненты ML (например, операции с тензорами, функции активации, слои нейронных сетей) в виде библиотек Rust. Затем эти библиотеки можно сделать доступными для Lua через C-совместимый FFI (Foreign Function Interface)...
2 месяца назад
Инфографика на Rust
[package] name = "ml_infographic" version = "0.1.0" edition = "2021" [dependencies] anyhow = "1.0" crossbeam = "0.8" image = "0.25" linfa = "0.7" linfa-clustering = "0.7" linfa-logistic = "0.7" linfa-svm = "0.7" linfa-kernel = "0.7" ndarray = { version = "0.15", features = ["rayon"] } ndarray-rand = "0.14" polars = { version = "0.43", features = ["lazy", "ndarray"] } plotters = "0.3" rand = "0.8" fn main() -> Result<()> { let mut rng = thread_rng(); let features = 2; // 2D данные let samples_per_cluster...
2 месяца назад
Использование usize и isize в ML на Rust
При работе с машинным обучением на Rust типы usize и isize играют ключевую роль в обеспечении эффективности, безопасности памяти и переносимости кода. Эти типы особенно важны при обработке больших данных, индексации тензоров и управлении памятью. Вот как их можно эффективно использовать в контексте ML: В ML часто работают с многомерными массивами и тензорами. Тип usize является стандартным для индексации, так как его размер соответствует архитектуре платформы (32 или 64 бита), что гарантирует покрытие всего адресного пространства...
3 месяца назад
Атоматизация браузера с ML на Rust
[dependencies] anyhow = "1.0" async-openai = "0.16" async-trait = "0.1" backoff = "0.4" bb8 = "0.8" bb8-redis = "0.17" image = "0.24" ndarray = "0.15" rand = "0.8" redis = "0.23" reqwest = "0.11" serde_json = "1.0" thirtyfour = { version = "0.31", features = ["chrome"] } thiserror = "1.0" tokio = { version = "1.0", features = ["full"] } tract-onnx = "0.18" tracing = "0.1" tracing-subscriber = "0.3" use anyhow::{anyhow, Context, Result}; use async_openai::{ types::{ChatCompletionRequestMessageArgs,...
3 месяца назад
Планировщик на Rust с ML
Tokio для полноценной асинхронной поддержки. Таймер Tokio для неблокирующих задержек. Безблокировочная архитектура с асинхронными мьютексами. Выделенный канал для передачи обучающих данных. Фоновый поток для обучения модели. Неблокирующее прогнозирование во время планирования. Фьючерсы. Система Waker - обрабатывается средой выполнения Tokio use std::collections::{HashMap, BinaryHeap}; use std::sync::{Arc, Mutex}; use std::time::{Duration, Instant}; use tokio::sync::{mpsc, Mutex as AsyncMutex};...
3 месяца назад
Примитивы синхронизации и как их использовать для решения ML задач
Кроме того, существуют экспериментальные подмодули: Arc для совместного использования, RwLock для чтения/записи весов, Mutex и Condvar для ожидания, Barrier для синхронизации эпох, mpsc-каналы для градиентов, атомарные типы для счётчиков и сигналов, Once для одноразовой инициализации, LazyLock для ленивой загрузки данных. use std::sync::{ Arc, RwLock, Mutex, Condvar, Barrier, mpsc::{self, Sender, Receiver}, atomic::{AtomicUsize, AtomicBool, Ordering}, Once, LazyLock }; use std::thread; use std::time::Duration;...
3 месяца назад
Как использовать каналы в Rust для работы с ML
Каналы используются для межпоточного взаимодействия по модели multiple-producer, single-consumer (mpsc), где несколько потоков могут отправлять данные в один канал, но читать — только один поток. Основные способы использования: Передача данных из одного потока в другой: use std::sync::mpsc; use std::thread; let (tx, rx) = mpsc::channel(); thread::spawn(move || { tx.send(42).unwrap(); }); let received = rx.recv().unwrap(); // 42 Клонирование Sender<T> для отправки из нескольких потоков: let (tx, rx) = mpsc::channel(); let tx1 = tx...
3 месяца назад