ML&|Sec Feed
1.3K subscribers
1.25K photos
79 videos
291 files
1.94K links
Feed for @borismlsec channel

author: @ivolake
Download Telegram
Faker — полезная библиотека для генерации фиктивных данных. Поддерживает не только английский язык. Для русского нужно прописать fake = Faker(«ru_Ru»)

Перед работой не забудьте сделать pip install Faker

https://faker.readthedocs.io/en/master/

👉@BookPython
🔐🤖 OWASP Top 10 для приложений LLM и GenAI: руководство для разработчиков и практиков

Быстрое внедрение технологий больших языковых моделей и генеративного ИИ опередило создание комплексных протоколов безопасности, что привело к значительным проблемам в безопасности.

Для решения появившихся проблем, сообщество OWASP разработало руководство OWASP Top 10 for Large Language Model Applications с практическими рекомендациями по обеспечению безопасности, разработанными с учетом уникальных задач, стоящих перед LLMs и GenAI.

👉 Читать перевод

#security
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from КПД
EDEN: Communication-Efficient and Robust Distributed Mean Estimation for Federated Learning
[Статья] [Код]

Квантизовать можно веса, можно активации. А что еще можно?

Правильно, градиенты! 👻

И это очень даже нужно и полезно в контексте распределенной оптимизации.
Если обучение на многих хостах, а скорость передачи информации между серверами не очень высока, то на синхронизацию между процессами может уходить основная доля времени, а не на сами вычисления. Дабы уменьшить трафик можно сжимать 🗜 градиенты - прунить, квантовать - что душе угодно. При этом, само собой, хочется их не слишком испортить, иначе все обучение пойдет прахом.

Метод

Идея квантовать градиенты для распределенного не нова - датируется еще 2016 годом (QSGD). Но данная работа предлагает ряд интересных идей (некоторые из которых мы узнаем в литературе вышедшей позднее, а сама статья 2021 года).

1️⃣ Случайные повороты
2️⃣ Оптимальные решетки квантования
3️⃣ Случайный прунинг
4️⃣ Энтропийное кодирование

В тензоре значения могут быть распределены, вообще говоря, самым произвольным и поганым (с точки зрения удобства квантования) образом. Но, известно, что если “повернуть” тензор некоей случайной матрицей, то с большой вероятностью полученные значения будут распределены как N(0, sigma^2). В качестве случайных поворотов используют (кто бы мог подумать!) - случайные Адамаровы матрицы. Каждый процесс хранит seed генерации, а главный сервер, зная этот seed на деквантизации, может применить обратное преобразование.

Решетку квантизации (а тут дело идет о квантовании в 1 и 2 бита) надо выбирать с умом. Потому берут не абы какие, а MSE-оптимальные (для 1 бита находится аналитически, для 2-ух численно).

Дабы увеличить сжатие - можно еще случайным образом запрунить ☠️ часть весов. Маску передавать при этом не надо - она как и вращение задается состоянием случайного генератора.

Решетки квантизации можно еще дотюнить при заданном ограничении на битность посредством Entropy-Constrained Vector Quantization.

Таким образом, каждый процесс квантует градиенты, посылает главному серверу, тот их усредняет и получает средний градиент по всем батчам.

И вся эта кухня идет с теоретическими гарантиями на ошибку аппроксимации.

Эксперименты

Метод валидируют на синтетических распределениях и распределенном обучении. В качестве бейзлайнов рассматривают QSGD, Hadamard + SQ (Stohastic Quantization), Kashin + SQ. В качестве бенчей для распределенного обучения рассматривают EMNIST (с маленькой CNNкой) и Shakespeare (с LSTM). Не самые свежие и впечатляющие бенчи, но что поделаешь 😞.

EDEN наиболее точно приближает исходные данные (в сравнении с бейзлайнами), при этом по скорости не такой быстрый как QSGD, но быстрее Kashin + SQ (ближайший с точки зрения качества подход).

В 4 бита разницы вообще нет между EDEN и float обучением, в 2 и 1 бит появляется некий зазор в качестве, но не критичный, и EDEN стабильно лучше конкурентных подходов.

Вывод

Интересная с точки зрения математики и методологии статья. Кажется, что если бы публикация чуть дотерпела до тех времен (и у авторов был на то ресурс), когда квантовать LLMки стало мейнстримом предложенные идеи были бы обязательно применены в контексте сжатия LLM.
Forwarded from fmin.xyz (Даня Меркулов)
This media is not supported in your browser
VIEW IN TELEGRAM
Почему все используют градиентные методы для обучения больших моделей?

🤩 Продемонстрирую наглядно на примере решения задачи Multidimensional Scaling (MDS). В этой задаче нам надо нарисовать на плоскости объекты, про которые мы знаем только насколько каждый из них далеко друг от друга. Т.е. на входе у нас матрица попарных расстояний, а на выходе координаты объектов на плоскости. Причем эти координаты должны быть такими, чтобы соотношения расстояний между объектами оставалось как можно более близким к исходным. В качестве функции потерь выступает сумма квадратов отклонений расстояний между городами при текущих координатах и заданным значением.

f(X) = ∑ₘ ∑ₙ (Dₘₙ − dₘₙ(X))²

🗣 Несмотря на увеличение размерности, вся траектория метода может быть наглядно продемонстрирована на плоскости. Количество переменных в задаче здесь - 2*(количество городов), т.к. для каждого из городов мы ищем 2 координаты на плоскости.

↗️ По очереди запускается обычный градиентный спуск, требующий знания градиента, и метод Нелдера-Мида из scipy (широко используемый безградиентный метод). Сначала задача решается для 6 самых населенных европейских городов, потом для 15 и для 34 (это все города-миллионики Европы из википедии).

🤔 Видно, что чем больше городов на карте (чем больше размерность задачи), тем больше разрыв между градиентным и безградиентным методами. Это одна из главных причин, по которой для решения задач большой размерности нам нужны не только значение минимизируемой функции, но и её производная.

🤔 Оказывается, у градиентных методов (при наборе разумных предположений) количество итераций, необходимое до сходимости метода, не зависит напрямую от размерности задачи. То есть если вы рассмотрите корректно настроенный градиентный спуск на десятимерной задаче, то ему нужно будет, скажем, не более 20 итераций для сходимости. А если вы возьмёте условно ту же задачу, но 100500-мерную, то ему нужны будут те же 20 итераций. Конечно, стоимость одной итераций растет с ростом размерности задачи, но хотя бы их количество явно не растет.

🤩 Ставь реакцию, если видишь свой город.
💩 Код для построения анимации
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Purple Team Diary's (MRL)
Атаки на текстовые классифкации (Часть 1)

Эти атаки направлены на изменение текста таким образом, чтобы ввести в заблуждение модели обработки естественного языка, что может быть использовано как для тестирования уязвимости моделей, так и для злонамеренных целей.

1. Perturb Word With Synonym (Атака заменяет слова в тексте на их синонимы):

Описание: Эта атака заменяет слова в тексте на их синонимы, чтобы изменить смысл текста и ввести модель в заблуждение.
Пример: Исходный текст: "Кошка сидит на коврике." Атакующий текст: "Питомец сидит на циновке."

Проверка: Атака считается успешной, если модель даёт другое предсказание для атакующего текста по сравнению с исходным. Например, если модель классифицирует исходный текст как "дом" и атакующий текст как "животное", атака успешна.

Последствия: Злоумышленник может изменить результаты анализа тональности, классификации или другого NLP-задания, что может привести к неправильным решениям или выводам.

Рекомендации: Использование моделей, способных к более глубокому пониманию контекста и семантики, таких как BERT или RoBERTa. Применение методов, учитывающих контекстные векторы (contextual embeddings) для улучшения семантического понимания. Регулярное тестирование моделей на наборах данных с синонимами и антонимами.

2. Deep Word Bug (Атака изменяет текст, добавляя или удаляя буквы):

Описание: Эта атака изменяет текст, добавляя или удаляя буквы, чтобы создать ошибки ввода, которые затрудняют распознавание модели.

Пример: Исходный текст: "Быстрая коричневая лиса перепрыгивает через ленивую собаку." Атакующий текст: "Быистраяа кораричневаяя лиисаа пеерпприигиивааетт чеерезз лееннивуюю сообакуу."

Проверка: Атака считается успешной, если модель не может корректно распознать атакующий текст. Например, если модель не может классифицировать атакующий текст, в то время как исходный текст классифицируется корректно, атака успешна.

Последствия: Модель может неправильно интерпретировать текст, что может привести к ошибочным выводам или решениям, особенно в контексте автоматизированного анализа данных.

Рекомендации: Использование моделей, способных к коррекции опечаток и ошибок ввода, таких как T5 или BART. Применение методов, основанных на языковых моделях, для исправления грамматических и орфографических ошибок. Обучение моделей на большом количестве данных с различными вариациями текста.

3. Text Fooler (Атака выбирает слова, которые наиболее важны для предсказания модели):

Описание: Эта атака выбирает слова, которые наиболее важны для предсказания модели, и заменяет их на семантически похожие, но изменяющие смысл.

Пример: Исходный текст: "Мне нравится этот фильм." Атакующий текст: "Мне не нравится этот фильм."

Проверка: Атака считается успешной, если модель даёт противоположное предсказание для атакующего текста. Например, если модель классифицирует исходный текст как "положительный отзыв" и атакующий текст как "отрицательный отзыв", атака успешна.

Последствия: Злоумышленник может изменить результаты анализа тональности или классификации, что может привести к неправильным рекомендациям или решениям.

Рекомендации: Использование моделей, способных к более глубокому пониманию контекста и семантики, таких как XLNet или ALBERT. Применение методов, основанных на внимании (attention mechanisms), для улучшения понимания важных слов в предложении. Регулярное тестирование моделей на наборах данных с измененными ключевыми словами.

#MLSecOps
👍1
Forwarded from Purple Team Diary's (MRL)
Атаки на текстовые классифкации (Часть 2)

4. Genetic Algorithm-based Attack (Атака использует генетические алгоритмы):

Описание: Эта атака использует генетические алгоритмы для поиска оптимальных изменений в тексте, которые вводят модель в заблуждение.

Пример: Исходный текст: "Небо голубое." Атакующий текст: "Небо лазурное."

Проверка: Атака считается успешной, если модель даёт другое предсказание для атакующего текста. Например, если модель классифицирует исходный текст как "день" и атакующий текст как "вечер", атака успешна.

Последствия: Злоумышленник может изменить результаты анализа или классификации, что может привести к неправильным выводам или решениям.

Рекомендации: Использование моделей, способных к более точному определению семантических различий, таких как XLNet или ALBERT. Применение методов, основанных на контрастном обучении (contrastive learning), для улучшения различения семантически близких примеров. Регулярное тестирование моделей на наборах данных с контрастными примерами.

5. BERT Attack (Атака использует модель BERT):

Описание: Эта атака использует модель BERT для генерации атакующих примеров, заменяя слова на те, которые сохраняют семантику, но изменяют предсказание модели.

Пример: Исходный текст: "Я счастлив." Атакующий текст: "Я рад."

Проверка: Атака считается успешной, если модель даёт другое предсказание для атакующего текста. Например, если модель классифицирует исходный текст как "позитивный эмоциональный отклик" и атакующий текст как "нейтральный эмоциональный отклик", атака успешна.

Последствия: Злоумышленник может изменить результаты анализа эмоциональной окраски текста, что может привести к неправильным выводам или решениям.

Рекомендации: Использование более сложных моделей, способных к более глубокому пониманию контекста и семантики, таких как T5 или BART. Применение методов, основанных на мультизадачном обучении (multi-task learning), для улучшения общего понимания текста. Регулярное тестирование моделей на наборах данных с измененными примерами, сгенерированными BERT.

6. Contrastive Learning-based Attack (Атака использует контрастное обучение):

Описание: Эта атака использует контрастное обучение для генерации атакующих примеров, которые сохраняют семантику, но изменяют предсказание модели.

Пример: Исходный текст: "Собака большая." Атакующий текст: "Пёс крупный."

Проверка: Атака считается успешной, если модель даёт другое предсказание для атакующего текста. Например, если модель классифицирует исходный текст как "описание собаки" и атакующий текст как "описание животного", атака успешна.

Последствия: Злоумышленник может изменить результаты анализа или классификации, что может привести к неправильным выводам или решениям.

Рекомендации: Использование моделей, способных к более точному определению семантических различий, таких как XLNet или ALBERT. Применение методов, основанных на контрастном обучении (contrastive learning), для улучшения различения семантически близких примеров. Регулярное тестирование моделей на наборах данных с контрастными примерами.

#MLSecOps
Forwarded from Purple Team Diary's (MRL)
Атаки на текстовые классифкации (Часть 3)

7. Black-box Adversarial Examples Generation (Атака генерирует атакующие примеры в черном ящике):

Описание: Эта атака генерирует атакующие примеры в черном ящике, используя информацию о выходных данных модели.

Пример: Исходный текст: "Машина красная." Атакующий текст: "Автомобиль алый."

Проверка: Атака считается успешной, если модель даёт другое предсказание для атакующего текста. Например, если модель классифицирует исходный текст как "описание цвета" и атакующий текст как "описание транспортного средства", атака успешна.

Последствия: Злоумышленник может изменить результаты анализа или классификации, что может привести к неправильным выводам или решениям.

Рекомендации: Использование моделей, способных к более точному определению семантических различий, таких как ELECTRA или GPT-3. Применение методов, основанных на ансамблевом обучении (ensemble learning), для улучшения устойчивости к атакам. Регулярное тестирование моделей на наборах данных с генерированными примерами в черном ящике.

8. Particle Swarm Optimization-based Attack (Атака использует метод оптимизации роя частиц):

Описание: Эта атака использует метод оптимизации роя частиц для поиска атакующих примеров.

Пример: Исходный текст: "Она читает книгу." Атакующий текст: "Она изучает том."

Проверка: Атака считается успешной, если модель даёт другое предсказание для атакующего текста. Например, если модель классифицирует исходный текст как "чтение" и атакующий текст как "учеба", атака успешна.

Последствия: Злоумышленник может изменить результаты анализа или классификации, что может привести к неправильным выводам или решениям.

Рекомендации: Использование моделей, способных к более точному определению семантических различий, таких как T5 или BART. Применение методов, основанных на ансамблевом обучении (ensemble learning), для улучшения устойчивости к атакам. Регулярное тестирование моделей на наборах данных с оптимизированными примерами.

9. Text Bugger (Атака изменяет текст, добавляя или удаляя буквы):

Описание: Эта атака изменяет текст, добавляя или удаляя буквы, чтобы создать ошибки ввода, которые затрудняют распознавание модели.

Пример: Исходный текст: "Солнце светит." Атакующий текст: "Соолннцее сввеетт."

Проверка: Атака считается успешной, если модель не может корректно распознать атакующий текст. Например, если модель не может классифицировать атакующий текст, в то время как исходный текст классифицируется корректно, атака успешна.

Последствия: Модель может неправильно интерпретировать текст, что может привести к ошибочным выводам или решениям, особенно в контексте автоматизированного анализа данных.

Рекомендации: Использование моделей, способных к коррекции опечаток и ошибок ввода, таких как ELECTRA или GPT-3. Применение методов, основанных на языковых моделях, для исправления грамматических и орфографических ошибок. Обучение моделей на большом количестве данных с различными вариациями текста.

#MLSecOps
👍1
Forwarded from Data Secrets
🕺 Вышла новая крутая книга "Hands-On Large Language Models"

Она разделена на три больших раздела:

1) База LLM (тут все про токены, эмбеддинги, внимание etc)
2) Претрейн (как предобучают LLM и мультимодальные модели, что такое RAG и Topic Modeing)
3) Файнтюнинг

С сегодняшнего дня книга доступна на маркетплейсах и на сайте O’Reilly (а там предусмотрен бесплатный пробный период на 7 дней, и карту вводить не требуется).

Сохраняйте и добавляйте в свой ридинг бэклог!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from PWN AI (Artyom Semenov)
Недавно прошёл первый в России хакатон, где участникам были поставлены задачи, связанные с разработкой решений для LLM security или security for LLM. Мне удалось побывать на этом волшебном мероприятии и посмотреть доклады разных команд.

Среди задач было следующее:

Разработать решение для тестирования безопасности LLM
Разработать решение для мониторинга токсичности и плохих запросов в модель
Разработать решение для извлечение конфиденциальных данных при помощи LLM из сетевого трафика. (типо llm для mitm).

Я хочу выразить свой респект каждой команде. И постараюсь поделить пост на 2 части, описав что сделала та или иная команда. Чем лично мне запомнились решения, и почему вам обязательно стоит обратить на них внимание.

Начнём с категории решений для тестирования LLM.

➡️1. Awesome Team - Red-Teaming-Framework.

Решение позволяющее оценивать модельки на уязвимости связанные с jailbreaks, encoding, adversarial suffix и другое. Авторы вдохновлялись при создании этого инструмента таким инструментом как garak. А в качестве фреймворка для оценки результатов - они прикрутили deepeval. Авторы создали также стенд где размещали результаты тестирования своего инструмента******* на разных моделях. За что мне понравилось это решение ?

1.ое очень простая интеграция для тестирования других моделей.
2.ое некоторое разнообразие доступных атак (да, может оно и не покрывает rag и т.д) - но всё равно это круто.
3.е система оценки результатов
4.е notebooks и документация - это прям огонь

➡️2.LLaMaстеры - llmator.

Решение представляет из себя библиотеку, к которой можно прикрутить модельки из api llmstudio или прописать другое.

Есть поддержка следующих атак:

    "aim_jailbreak",
"base64_injection",
"complimentary_transition",
"do_anything_now_jailbreak",
"RU_do_anything_now_jailbreak",
"ethical_compliance",
"harmful_behavior",
"linguistic_evasion",
"self_refine",
"RU_self_refine",
"sycophancy_test",
"typoglycemia_attack",
"RU_typoglycemia_attack",
"ucar",
"RU_ucar",
"amnesia",
"authoritative_role_impersonation",
"contextual_redirection",
"affirmative_suffix",
"system_prompt_stealer",


Непосредственно код каждой атаки есть в гитхабе, и по сути это также крутая шаблонная система с атаками, которую можно дописывать. В качестве подопытного стенда авторы использовали gandalf. И вы, непосредственно в репозитории можете увидеть эти самые notebooks, где описана интеграция. Собственно мне понравилось то, что его можно интегрировать с RAG, чатботами и т.д. Наличие документации также огромный плюс.

продолжение следует ....
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Purple Team Diary's (MRL)
Установка и настройка MLFlow с PostgreSQL и структурой проекта

MLflow — это открытая платформа для управления жизненным циклом машинного обучения, включая экспериментирование, воспроизведение и развертывание моделей. Предоставляет инструменты для отслеживания экспериментов, управления моделями и их развертыванием, а также для создания и управления проектами машинного обучения.

Шаг 1: Установка PostgreSQL

sudo apt install postgresql postgresql-contrib


Шаг 2: Создание пользователя и базы данных PostgreSQL

Переключаемся на пользователя postgres:
sudo -i -u postgres


Входим в командную строку PostgreSQL:
psql


Создаём нового пользователя для MLFlow и задаём пароль:
CREATE USER mlflow_user WITH PASSWORD 'password';


Создаём базу данных и назначаем владельца:
CREATE DATABASE mlflow_db OWNER mlflow_user;


Шаг 3: Настройка аутентификации (опционально)


Откройте конфигурационный файл PostgreSQL для изменения метода аутентификации:
sudo nano /etc/postgresql/14/main/pg_hba.conf


Замените строку аутентификации peer на md5 для перехода к проверке паролей:
local all   all  md5


После внесения изменений перезапустите PostgreSQL:
sudo systemctl restart postgresql



Шаг 4: Установка пакетов
pip install mlflow psycopg2-binary


Шаг 5: Запуск MLFlow
mlflow server --backend-store-uri=postgresql://mlflow_user:[email protected]:5432/mlflow_db --default-artifact-root file://$(pwd)/artifacts --host 127.0.0.1 --port 8080


* backend-store-uri указывает на PostgreSQL базу данных, где хранятся метаданные экспериментов.
* default-artifact-root задаёт корневую папку для хранения артефактов.
* host и port указывают адрес и порт для локального доступа.

Шаг 6: Структура проекта MLFlow

mlflow_project/
├── data/
│ ├── raw/ # Необработанные данные, загруженные из источника.
│ ├── processed/ # Обработанные данные, подготовленные для обучения модели.
│ └── external/ # Внешние данные, которые могут быть использованы в проекте.
├── notebooks/
│ ├── exploratory/
│ │ ├── 01_data_exploration.ipynb # Ноутбук для исследовательского анализа данных.
│ │ └── 02_feature_analysis.ipynb # Ноутбук для анализа и выбора признаков.
│ ├── experiments/
│ │ ├── 01_experiment_baseline.ipynb # Ноутбук для базового эксперимента с моделью.
│ │ └── 02_experiment_hyperparameter_tuning.ipynb # Ноутбук для настройки гиперпараметров модели.
│ └── production/
│ ├── 01_model_deployment.ipynb # Ноутбук для развертывания модели в production.
│ └── 02_model_monitoring.ipynb # Ноутбук для мониторинга работы модели в production.
├── src/
│ ├── data/
│ │ ├── __init__.py # Пустой файл для инициализации пакета.
│ │ ├── load_data.py # Функции для загрузки данных из различных источников.
│ │ └── preprocess_data.py # Функции для предварительной обработки данных.
│ ├── models/
│ │ ├── __init__.py # Пустой файл для инициализации пакета.
│ │ ├── train_model.py # Функции для обучения модели.
│ │ └── evaluate_model.py # Функции для оценки производительности модели.
│ └── utils/
│ ├── __init__.py # Пустой файл для инициализации пакета.
│ └── helper_functions.py # Вспомогательные функции, используемые в проекте.
├── experiments/
│ └── mlruns/ # Папка для хранения локальных экспериментов (если не указано хранилище артефактов).
├── artifacts/ # Папка для хранения артефактов (моделей, данных и т.д.), созданных в ходе экспериментов.
├── requirements.txt # Файл с зависимостями проекта.
├── README.md # Файл с описанием проекта, инструкциями по запуску и т.д.
├── MLproject # Файл, описывающий MLflow проект.
└── conda.yaml # Файл, описывающий окружение проекта.


#MLOps
Forwarded from ml4se
Automatic Detection of LLM-generated Code: A Case Study of Claude 3 Haiku

The results indicate that Claude 3 tends to generate longer functions, but shorter classes than humans, and this characteristic can be used to detect Claude 3-generated code with ML models with 82% and 66% accuracies for function-level and class-level snippets, respectively.
Ура! Моя книга “Deep Learning with JAX” (в девичестве "JAX in Action") вышла в печать! Я только что получил свои бумажные копии 🙂

https://www.manning.com/books/deep-learning-with-jax

Для тех, кто не следил, JAX -- это питоновская библиотека для высокопроизводительных вычислений и large-scale ML, с отличной поддержкой ускорителей, в частности TPU.

На данный момент JAX является вполне реальной альтернативой TensorFlow и PyTorch (torch.func, в юности functorch, до сих пор пытается угнаться и всё ещё beta), и многие компании, в частности Google DeepMind, Cohere, xAI и прочие, перешли на него. На JAX созданы такие известные модели как AlphaFold, GraphCast, Gemini, Gemma, Grok, и я уже молчу сколько разного рисёча.

JAX -- это больше, чем библиотека для ML, это библиотека для очень разных высокопроизводительных, параллельных и распределённых вычислений. Не просто так его называют “NumPy на стероидах”. За пределами ML/DL, например, JAX активно используется для физических симуляций, и на GitHub есть уже огромное количество производных библиотек.

Сейчас отличное время, чтобы застолбить себе немного будущего :)

Отдельная радость должна быть для любителей функционального программирования, ибо JAX -- это первый фреймворк с большим охватом, работающий в этой парадигме. Очень прикольно использовать функции для трансформации других функций. Написали функцию для обработки одного элемента -- трансформировали в функцию для обработки батча. Написали сложную математическую функцию -- трансформировали в функцию, вычисляющую её производную. Аналогично с компиляцией и распараллеливанием. Никаких hidden state и side-effects, код чист, красив и понятен. А также БЫСТР! (см. https://x.com/fchollet/status/1735420737744507374)

Книга состоит из трёх частей на 370+ страницах.

Part 1: First steps.
Верхнеуровневое введение в JAX для менеджеров и вообще всех, рассказывающее, где и почему стоит использовать JAX. Плюс отдельная глава для тех, кто любит видеть код, где показан полный цикл реализации простой нейросети с использованием большинства фишек JAX.

Part 2: Core JAX.
Основная часть книги, где покрыты все основы JAX, шаг за шагом. От работы с массивами (тензорами), autodiff, компиляция, векторизация, параллелизация и шардирование, случайные числа (в функциональном программировании старые приёмы из NumPy не работают эффективно, зато теперь всё наглядно и воспроизводимо!) и pytrees.

Part 3: Ecosystem.
Большая глава с практическим знакомством с экосистемой высокоуровневых библиотек для DL (Flax, Optax, Orbax, CLU, …), а также примеры использования HuggingFace Transformers/Diffusers, которые давно уже добавили поддержку JAX. Также есть отдельная глава с очень верхнеуровневым и широким обзором того, что есть в JAX и вокруг за пределами нейросетевого мейнстрима.

Много крутых и умных людей читало и ревьюило мою книгу, спасибо куче GDE и не только. И отдельное спасибо Франсуа Шолле за добрые слова 🙂

“A comprehensive guide to mastering JAX, whether you’re a seasoned deep learning practitioner or just venturing into the realm of differentiable programming and large-scale numerical simulations.”
-- François Chollet, Software Engineer, Google

В общем это был прикольный опыт, я доволен результатом, надеюсь, вам тоже понравится.

Ещё отдельное спасибо всем, кто поддерживал GonzoML на Патреоне (https://www.patreon.com/GonzoML). Всем действующим платным членам нашей тесной группы я отправил коды для получения книги бесплатно (проверьте сообщения!) -- у вас будет постоянно обновляемая версия (a JAX очевидно будет меняться!) в онлайн доступе.
https://huggingface.co/datasets/nyuuzyou/chatgpt-in-russia-qa

Оригинальный пост.

А что у нас тут? 600к вопросов (и ответов) с чатгпт-в-россии.рф!
Я, если честно, и не знал, что такой сайт существует.