Найти в Дзене
Типобезопасные матрицы с const generics
В машинном обучении (ML) на Rust типобезопасные матрицы с const generics особенно ценны, когда архитектура модели имеет фиксированные размеры, известные на этапе компиляции. Это даёт: Это матрицы (таблицы чисел), где размеры (количество строк и столбцов) проверяются на этапе компиляции (когда программа ещё только собирается). Если вы попытаетесь сложить матрицу 2×2 с матрицей 3×3, компилятор сразу выдаст ошибку — программа даже не запустится. Пример: Представьте, что у вас есть коробка для яиц на 10 ячеек. Вы не сможете положить туда 12 яиц — коробка просто не даст. Так и с типобезопасными матрицами: если размеры не совпадают, компилятор не даст программе запуститься...
1 месяц назад
ublk с ML-предсказанием
В этом проекте создаётся виртуальный диск, который использует машинное обучение, чтобы предсказывать, какие данные понадобятся пользователю в следующий момент. Это позволяет ускорить работу с диском, снижая задержки при чтении. Данный код — виртуальное блочное устройство на базе ublk (userspace block driver в Linux) с использованием машинного обучения (LSTM-модель из библиотеки Burn). Устройство работает как loop-device (перенаправляет I/O на файл backing.img размером 100 GiB), но с ML-предсказанием следующего блока для снижения latency при чтении. ublk (userspace block driver в Linux) - Это технология,...
1 месяц назад
CDC (Change Data Capture) ML
t.me/oneRustnoqRust Написать код CDC real-time data processing обладающий следующими свойствами: Тысячи партиций: данные делятся на множество независимых частей (партиций), каждая из которых обрабатывается отдельно. Например, как в супермаркете: вместо одной кассы — десятки, и каждый покупатель идёт к своей. Авто-backpressure: если система не успевает обрабатывать данные, она автоматически замедляет их поступление, чтобы не перегрузиться (как если бы кассир просил покупателей подождать, пока освободится место на ленте). ML-батчинг на GPU: данные собираются в небольшие пакеты (батчи) и анализируются на видеокартах (GPU), что ускоряет процесс...
1 месяц назад
ML атомики
Атомарные операции — это неделимые инструкции (например, atomicAdd, atomicCAS, compare-and-swap), которые обеспечивают безопасный доступ к общей памяти в многопоточных или параллельных средах без использования блокировок (locks). В ML они особенно полезны для ускорения обучения на CPU/GPU и в распределённых системах, где возникают race conditions. Атомарные операции не универсальны: они медленнее обычных инструкций из-за сериализации, поэтому применяются только там, где нужны (sparse updates или high contention). В современных фреймворках (например, Horovod, DDP в PyTorch) чаще используются collectives (allreduce), но atomics остаются ключевыми для low-level оптимизаций и custom кода...
1 месяц назад
Cow (Clone-on-Write) для ML
Cow (Clone-on-Write) - тип, который позволяет переиспользовать данные без копирования, пока это возможно. ML-проекты работают с большими объёмами данных, где лишние аллокации и копии сильно бьют по производительности (особенно на inference). Cow даёт «бесплатную» оптимизацию: пишешь код так, будто у тебя всегда owned-данные, а Rust копирует только когда действительно нужно изменить. Это делает код проще и быстрее, чем ручное ветвление на &str vs String или &[T] vs Vec. Принимаем входной текст как &str, разбиваем его на токены и применяем нормализацию (приведение к нижнему регистру) только когда это действительно нужно...
1 месяц назад
Автоматический поиск зеркал с ML
Создать сервис для автоматического подбора зеркала crates.io обладающий следующими свойствами: Позволить сервису адаптироваться к изменениям зеркал и "учиться" на основе реальных измерений ML. Существует две реализации: TomlConfigWriter модифицирует ~/.cargo/config.toml Программа принимает параметры:...
2 месяца назад
Как использовать &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., 2.], [3., 4.], [5., 6...
4 месяца назад
Валидация 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: String, // Категориальная информация sub_features: Vec<f64>, // Дополнительные признаки } fn read_json_file("train...
4 месяца назад
Использование мутабельного слайса вместо вектора в Rust для ML
Любое программное решение ограничено количеством памяти и CPU. Вектор позволяет хранить неограниченное количество информации, создавая тем самым угрозу работоспособности ПО. При этом рассчитать объем хранимой информации в векторе невозможно, по причине: Мутабельный слайс (&mut [T]) — это всего лишь "вид" на уже существующие данные. Он не выделяет память самостоятельно, а только заимствует её у другой структуры (вектора, массива и т.д.). Сам объект слайса занимает на стеке фиксированный объём — два usize (указатель на данные и длина): use std::mem; fn main() { let vec = vec![1i32, 2, 3, 4, 5]; let slice: &mut [i32] = &mut vec...
4 месяца назад
GraphQL pipeline на Rust
Создать фреймворк для построения асинхронных конвейеров обработки данных с поддержкой параллельных вычислений, состоящие из независимых узлов (nodes), которые обмениваются данными через асинхронные каналы. Каждый узел выполняет специфическую задачу и может работать параллельно с другими узлами. [Node A] --(channel)--> [Node B] --(channel)--> [Node C] Каждый узел: pub enum Data { FilePath(PathBuf), // Путь к файлу FileHash(PathBuf, String), // Путь и хеш файла } pub enum NodeError...
5 месяцев назад
Анализ сетевого трафика на Rust ML
Научиться использованию рекуррентных нейронных сетей (RNN) и LSTM для обнаружения аномалий с использованием ML. Написать анализатор последовательностей сетевых пакетов для выявления низкочастотных атак в HTTP-трафике. RNN — это тип нейронной сети, который специализируется на работе с последовательностями данных, где порядок важен. Например, текст, речь, временные ряды (например, курсы валют или сетевой трафик). Пример: Представьте, что вы читаете книгу. Чтобы понять смысл предложения, вам нужно помнить, что было написано раньше. RNN работает похоже: она "запоминает" предыдущие элементы последовательности, чтобы лучше анализировать текущий...
5 месяцев назад
Как использовать Rust и Lua для работы с ML
Встраивание Lua в Rust-приложения: можно использовать Rust-крейты, такие как mlua (ранее rlua), для создания экземпляра виртуальной машины Lua внутри вашей программы. Это позволяет: Использование Rust для реализации высокопроизводительных ядер: Вы можете разрабатывать и компилировать критические для производительности компоненты ML (например, операции с тензорами, функции активации, слои нейронных сетей) в виде библиотек Rust. Затем эти библиотеки можно сделать доступными для Lua через C-совместимый FFI (Foreign Function Interface). В этом сценарии Lua выступает в роли скриптового языка, который управляет конвейером и вызывает быстрые Rust-библиотеки...
5 месяцев назад