Создадим с нуля небольшой фреймворк машинного обучения на Rust.
Цели
1. Выяснить, заметен ли рост скорости при переходе с Python и PyTorch на Rust и LibTorch, серверную библиотеку PyTorch на C++, особенно в процессе обучения модели. ML-модели становятся крупнее, для их обучения требуется больше вычислительных возможностей, для обычного человека порой нереальных. Один из способов уменьшить рост аппаратных требований — понять, как сделать алгоритмы вычислительно эффективнее. Python в PyTorch — это лишь слой поверх LibTorch. Вопрос в том, стоит ли менять его на Rust. Планировалось использовать крейт Tch-rs для доступа к тензорам и функционалу Autograd DLL-библиотеки LibTorch как «калькулятору градиентов», а затем разработать с нуля на Rust остальное.
2. Сделать код достаточно простым для четкого понимания всех вычислений линейной алгебры и с возможностью легко его расширить при необходимости.
3. Во фреймворке ML-модели должны определяться, насколько это возможно, по аналогичной структуре стандартных Python/PyTorch.
4. Поизучать Rust и не скучать.
Но статья посвящена скорее преимуществам применения Rust в машинном обучении.
• Переходим сразу к конечному результату — вот как маленьким фреймворком создаются нейросетевые модели.
Листинг 1. Определение нейросетевой модели
struct MyModel {
l1: Linear,
l2: Linear,
}
impl MyModel {
fn new (mem: &mut Memory) -> MyModel {
let l1 = Linear::new(mem, 784, 128);
let l2 = Linear::new(mem, 128, 10);
Self {
l1: l1,
l2: l2,
}
}
}
impl Compute for MyModel {
fn forward (&self, mem: &Memory, input: &Tensor) -> Tensor {
let mut o = self.l1.forward(mem, input);
o = o.relu();
o = self.l2.forward(mem, &o);
o
}
}
• Затем модель инстанцируется и обучается.
Листинг 2. Инстанцирование и обучение нейросетевой модели
fn main() {
let (x, y) = load_mnist();
let mut m = Memory::new();
let mymodel = MyModel::new(&mut m);
train(&mut m, &x, &y, &mymodel, 100, 128, cross_entropy, 0.3);
let out = mymodel.forward(&m, &x);
println!("Training Accuracy: {}", accuracy(&y, &out));
}
Для пользователей PyTorch это интуитивно понятная аналогия определения и обучения нейросети на Python. В примере выше показана модель нейросети, используемая затем для классификации. Модель применяется к набору данных Mnist тестов производительности для сравнения двух версий модели: Rust и Python.
• В первом блоке кода создается структура MyModel с двумя слоями типа Linear.
• Второй блок — ее реализация, где определяется ассоциированная функция new, которой инициализируются два слоя и возвращается новый экземпляр структуры.
• В третьем блоке реализуется типаж Compute для MyModel, им определяется метод forward. Затем в функции main загружается набор данных Mnist, инициализируется память, инстанцируется MyModel, а после она обучается в течение 100 эпох с размером пакета 128, потерями перекрестной энтропии и скоростью обучения 0,3.
Очень даже понятно: это то, что потребуется для создания и обучения новых моделей на Rust с помощью маленького фреймворка. Теперь копнем поглубже и разберемся, как это все возможно.
Если вы привыкли создавать ML-модели в PyTorch, то наверняка, глядя на код выше, зададитесь вопросом: «Зачем здесь ссылка на Memory?». Объясним ниже.
Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤4🔥2
🟡 Дайджест полезных материалов из мира Rust за неделю
Почитать:
— Реализуем Type Inference на Rust — Часть #2: Простой Lambda Calculus
— Список популярных утечек с GitHub: Анализ репозиториев компаний
— GADT-like types in Rust
— A Weekly Rust🦀 Pill #4
— ESP32 Standard Library Embedded Rust: PWM Servo Motor Sweep
— Easy Encryption In Rust
— Building a CLI tool in Rust
— Why I changed my mind about rust
— Writing an Equation Solver
— Why I prefer Rust over Go
— Rust references
— Learning Rust 🦀: 08 - Ownership: Functions and References
Хорошего дня!
@rust_code
Почитать:
— Реализуем Type Inference на Rust — Часть #2: Простой Lambda Calculus
— Список популярных утечек с GitHub: Анализ репозиториев компаний
— GADT-like types in Rust
— A Weekly Rust🦀 Pill #4
— ESP32 Standard Library Embedded Rust: PWM Servo Motor Sweep
— Easy Encryption In Rust
— Building a CLI tool in Rust
— Why I changed my mind about rust
— Writing an Equation Solver
— Why I prefer Rust over Go
— Rust references
— Learning Rust 🦀: 08 - Ownership: Functions and References
Хорошего дня!
@rust_code
👍14🔥4❤3😁1🤔1
С опозданием на 2 недели вышел Rust 1.71.1! Эта версия исправляет несколько небольших проблем и устраняет потенциальную проблему безопасности в Cargo.
https://blog.rust-lang.org/2023/08/03/Rust-1.71.1.html
@rust_code
https://blog.rust-lang.org/2023/08/03/Rust-1.71.1.html
@rust_code
blog.rust-lang.org
Announcing Rust 1.71.1 | Rust Blog
Empowering everyone to build reliable and efficient software.
👍15🔥2❤1😁1
ytdlp-gui
Графический интерфейс для yt-dlp, написанный на Rust
Его можно легко установить в GNU/Linux и Windows системах
https://github.com/BKSalman/ytdlp-gui
@rust_code
Графический интерфейс для yt-dlp, написанный на Rust
Его можно легко установить в GNU/Linux и Windows системах
https://github.com/BKSalman/ytdlp-gui
@rust_code
GitHub
GitHub - BKSalman/ytdlp-gui: a very simple GUI for ytdlp written in Rust
a very simple GUI for ytdlp written in Rust. Contribute to BKSalman/ytdlp-gui development by creating an account on GitHub.
👍13🔥2❤1
⚡Легкий способ получать свежие обновлении и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:
Машинное обучение: @ai_machinelearning_big_data
Go: @Golang_google
C#: @csharp_ci
Базы данных: @sqlhub
Python: @python_job_interview
C/C++/: @cpluspluc
Data Science: @data_analysis_ml
Devops: @devOPSitsec
Rust: @rust_code
Javascript: @javascriptv
React: @react_tg
PHP: @phpshka
Docker: @docker
Android: @android_its
Мобильная разработка: @mobdevelop
Linux: linuxacademy
Big Data: t.me/bigdatai
Хакинг: @linuxkalii
Java:@javatg
Собеседования: @machinelearning_interview
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
🔥ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: @english_forprogrammers
📕Ит-книги https://t.me/addlist/BkskQciUW_FhNjEy
Машинное обучение: @ai_machinelearning_big_data
Go: @Golang_google
C#: @csharp_ci
Базы данных: @sqlhub
Python: @python_job_interview
C/C++/: @cpluspluc
Data Science: @data_analysis_ml
Devops: @devOPSitsec
Rust: @rust_code
Javascript: @javascriptv
React: @react_tg
PHP: @phpshka
Docker: @docker
Android: @android_its
Мобильная разработка: @mobdevelop
Linux: linuxacademy
Big Data: t.me/bigdatai
Хакинг: @linuxkalii
Java:@javatg
Собеседования: @machinelearning_interview
💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
🔥ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: @english_forprogrammers
📕Ит-книги https://t.me/addlist/BkskQciUW_FhNjEy
🤮4👍3🔥2😁1
🟡 Дайджест полезных материалов из мира : rust за неделю
Почитать:
— Learning Rust 🦀: 10 - The Struct
— Объяснения по шардинга баз данных
— Appwrite + Rust: Build APIs without technical overhead
— ESP32 Standard Library Embedded Rust: Analog Temperature Sensing using the ADC
— Do your Values align with FP Values?
— ReductStore 1.6.0 has been released with new license and client SDK for Rust
— Driving Complete and Easy Bidirectional Typechecking for Higher-Rank Polymorphism in Rust
— Mastering Rust's Ownership: The Key to Memory Safety and Efficiency
— Port a project from C++ to Rust
— How to load dynamic libraries in Rust?
— Learning Rust 🦀: 09 - Ownership: The Slice type
Посмотреть:
🌐 #08: Функциональное программирование в Rust, замыкания и не только
Хорошего дня!
Почитать:
— Learning Rust 🦀: 10 - The Struct
— Объяснения по шардинга баз данных
— Appwrite + Rust: Build APIs without technical overhead
— ESP32 Standard Library Embedded Rust: Analog Temperature Sensing using the ADC
— Do your Values align with FP Values?
— ReductStore 1.6.0 has been released with new license and client SDK for Rust
— Driving Complete and Easy Bidirectional Typechecking for Higher-Rank Polymorphism in Rust
— Mastering Rust's Ownership: The Key to Memory Safety and Efficiency
— Port a project from C++ to Rust
— How to load dynamic libraries in Rust?
— Learning Rust 🦀: 09 - Ownership: The Slice type
Посмотреть:
🌐 #08: Функциональное программирование в Rust, замыкания и не только
Хорошего дня!
🔥12👍3❤1
Просто спарсь что угодно с помощью языка Rust (ну… или просто скачай файл)
https://habr.com/ru/articles/755728/
https://habr.com/ru/articles/755728/
Хабр
Просто спарсь что угодно с помощью языка Rust (ну… или просто скачай файл)
Известно, что Rust — типобезопасный язык программирования, код которого проверяется компилятором ещё до сборки. С одной стороны это хорошо: меньше вероятности внезапного сбоя в самый неподходящий...
❤6👍3
Опыт написания библиотеки управления акторами на Rust
https://habr.com/ru/articles/755704/
https://habr.com/ru/articles/755704/
❤7
Туториал: Todo веб-приложение на Internet Computer используя Rust и Create React App
https://habr.com/ru/articles/755690/
https://habr.com/ru/articles/755690/
Хабр
Туториал: Todo веб-приложение на Internet Computer используя Rust и Create React App
В этом туториале мы подробно разберём, как именно происходит процесс разработки канистеров на Internet Computer. Мы пройдём полный путь от hello-world проекта, сгенерированного dfx автоматически до...
👍5
Regex engine internals as a library [full]
https://habr.com/ru/articles/755940/
https://habr.com/ru/articles/755940/
Хабр
Regex engine internals as a library [full]
Дисклеймер Это полный перевод большой и сложной статьи по внутреннему устройству крейта regex свежей версии. Перевод большей частью выполнялся для себя, чтобы поднабить скилл в английском. По...
❤6
Как я написал JVM на Rust
https://habr.com/ru/companies/otus/articles/755946/
https://habr.com/ru/companies/otus/articles/755946/
Хабр
Как я написал JVM на Rust
В последнее время я серьезно взялся за изучение языка Rust, и, как поступил бы на моем месте любой адекватный программист, после написания нескольких небольших программ я решил попробовать сделать...
🔥19😁3👍1👎1🤨1
потоковое аудио с синхронизацией в реальном времени для локальных сетей на Rust.
https://github.com/haileys/bark
@rust_code
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - haileys/bark: live sync audio streaming for local networks
live sync audio streaming for local networks. Contribute to haileys/bark development by creating an account on GitHub.
👍11🤔2❤1
Smart-contract developer Road Map
https://habr.com/ru/articles/756542/
https://habr.com/ru/articles/756542/
Хабр
Smart-contract developer Road Map
Прочитав эту статью до конца вы поймете какими навыками вам нужно обладать для того, что бы стать smart-contract разработчиком! В конце статьи прикреплен Solidity developer roadmap. Разработка...
Работа с JSON в Rust. Методичка
https://habr.com/ru/companies/T1Holding/articles/746860/
https://habr.com/ru/companies/T1Holding/articles/746860/
Хабр
Работа с JSON в Rust. Методичка
Привет Хабр! Меня зовут Алексей, я разработчик Группы "Иннотех" холдинга Т1. Цель статьи - познакомить читателя с библиотеками для работы с JSON в Rust. Если вы никогда не парсили JSON на языке Rust и...
👍19🥱2👌1
Как легко перейти с Java на Rust: Особенности и советы
https://habr.com/ru/articles/756984/
https://habr.com/ru/articles/756984/
Хабр
Как легко перейти с Java на Rust: Особенности и советы
После работы над двумя коммерческими проектами на Rust я получил хороший практический опыт в этом языке. Это были backend сервисы для веб-приложений, где Rust использовался для основной бизнес-логики...
⚡12👍6
Разрабатываем свою ORM библиотеку на Rust: Оптимизация и Простота
https://habr.com/ru/articles/757070/
https://habr.com/ru/articles/757070/
Хабр
Разрабатываем свою ORM библиотеку на Rust: Оптимизация и Простота
Почему я решил разработать свою ORM библиотеку? Мои первые шаги в мире ORM были сделаны с помощью библиотеки Diesel. В то время он был одним из немногих вариантов для работы с базами данных на Rust,...
👍5👎5🤔1
Rust 1.72.0: потенциально полезные отключенные элементы, неограниченные константные вычисления
https://habr.com/ru/articles/757158/
https://habr.com/ru/articles/757158/
Хабр
Rust 1.72.0: потенциально полезные отключенные элементы, неограниченные константные вычисления
Команда Rust рада сообщить о новой версии языка — 1.72.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение. Если у вас есть предыдущая...
👍15🔥2❤1
Запускаем IDEA и CLion на Android
https://habr.com/ru/articles/757222/
https://habr.com/ru/articles/757222/
Хабр
Запускаем IDEA и CLion на Android
На современных Android телефонах и планшетах стоит отличное железо - многоядерные CPU с несколькими гигабайтами памяти. Этого всего вполне хватит для запуска даже таких тяжеловесных программ как IDEA...
🌚10😁2👎1🤡1🗿1
This media is not supported in your browser
VIEW IN TELEGRAM
▪Github
@rust_code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥5❤2