Интересное что-то
522 subscribers
2.72K photos
253 videos
140 files
4.53K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
На HF довольно давно появился пост, который я как-то пропустил, но который хорошо и кратко описывает основные оптимизации при обучении языковых моделей. Пост: ссылка
Есть ещё старый пост на ту же тему от Eleuther: ссылка
А пост ниже — это короткая выжимка от меня, именно по экономии памяти на одной карточке.

🔹Числа с плавающей точкой (IEEE 754) — основной тип для вычислений в языковых моделях, у них есть знак, экспонента и мантисса. Экспонента контролирует диапазон значений, мантисса — точность в рамках этого диапазона. Также напомню, что есть приколы с представлением чисел около нуля (aka денормализованные числа). Есть куча реализаций разной битности:
float: 32 бита, E8M23
tf32: 19 бит, E8M10 (специфичный для Nvidia формат, отсюда все странности)
fp16: 16 бит, E5M10
bf16: 16 бит, E8M7 (экспонента и диапазон как у float)
fp8: 8 бит, E4M3 или E5M2

🔹На что тратится память:
W: Сами веса модели
A: Активации (промежуточные состояния, результат вычисления функции от входа и весов)
G: Градиенты (обновления весов модели при обучении)
O: Состояние оптимизатора (моменты и дисперсия)

При инференсе есть только W и часть A, при обучении есть все 4 категории. Далее у каждого метода стоят буквы, которые обозначают, что именно экономится.

🔹Методы экономии памяти при инференсе:
— Квантование модели (WA): ужимаем тип данных для весов и активаций. В большинстве статьей так и написано: W4A16, что означает, что веса в 4 битах, активации в 16 битах.
— Flash Attention (A): оптимизируем вычисление внимания поблочными вычислениями в кэше GPU, попутно уменьшая сложность по памяти с квадратичной по длине последовательности до линейной.

🔹Дополнительные методы экономии памяти при обучении на одной карточке:
— Смешанная точность (A): имеем рабочую копию в 16 битах (bf16 или fp16), а также мастер-копию в 32 битах. Все операции делаем с рабочей копией и потом обновления весов вливаем в мастер-копию. Вы спросите: а где профит? А профит в том, что активации в 16 битах, а активации — это дофига памяти.
— Квантование оптимизатора (O): ужимаем тип данных для состояний оптимизатора. Чаще всего в 8 бит, перед собственно применением градиентов расквантовываем.
— Аккумуляция градиентов (AG): если мы хотим батч из больше чем одного примера, то A и G тоже раздуются. Но нам совсем не обязательно считать градиенты параллельно, поэтому мы можем считать их последовательно, суммировать, и только потом применять. Если это правильно😁 отмасштабировать, то это теоретически эквивалентно обучению на всём батче.
— Чекпоинты активаций (A): при обучении нам по-хорошему нужны активации на всех слоях, чтобы потом считать по ним градиенты. Но нам сначала нужно дойти до лосса, поэтому мы выкидываем часть промежуточных активаций и пересчитываем их заново на основе оставшихся чекпоинтов тогда, когда они нам реально понадобятся для подсчёта градиентов.
— Адаптеры (GO): основную модель вообще не трогаем, учим только новый маленький набор весов. Градиенты считаем только по нему, и на этом сильно экономим.

На практике используется буквально всё, везде и сразу 🤯
Типичный конфиг:
"model": {
"attn_implementation": "flash_attention_2", // вы поняли
"load_in_4bit": true, // квантование модели
...
},
"trainer": {
"gradient_accumulation_steps": 32, // аккумуляция градиентов
"bf16": true, // смешанная точность
"optim": "adamw_8bit", // квантование оптимизатора
"gradient_checkpointing": true, // чекпоинты активаций
...
},
"lora": {...} // адаптеры
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Katser
Я уже писал про библиотеку TSAD (Time Series Analysis for Simulation of Technological Processes) в канале, но отстраненно, как автор канала. Дам пару комментариев как соавтор и один из контрибьюторов проекта.

· Проект начинался как time series anomaly detection (поэтому TSAD), но потом разросся до time series analysis for diagnostics, и, наконец, решили не ограничиваться диагностикой, а пойти во все задачи промышленности (прогнозирование, оптимизация)
· Идея появилась, потому что просто не было open-source промышленных библиотек, а проблемы с предварительной обработкой данных, EDA, оценкой алгоритмов были
· Текущая цель библиотеки — сделать набор пайплайнов для AutoML в промышленности
· Функционала не достает, но есть несколько супер полезных функций/модулей, уже хорошо проработанных и реализованных:
1️⃣наборы данных для разных задач промышленности (RUL, CPD, outlier detection и др.)
2️⃣проработанная архитектура пайплайнов (самих пайплайнов бы побольше), что позволяет контрибьютить и разрабатывать сами пайплайны решения задач
3️⃣реализованные сложные метрики оценки типа NAB scoring algorithm, вот описание в документации. Их уже несколько лет активно используем в своих реальных проектах

Можно выдергивать и пользоваться этим функционалом в своих проектах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Kali Novskaya
🌸Подборка NeurIPS: LLM-статьи 🌸
#nlp #про_nlp #nlp_papers

Вот и прошёл NeurIPS 2024, самая большая конференция по машинному обучению. Ниже — небольшая подборка статей, которые мне показались наиболее интересными. Про некоторые точно стоит сделать отдельный обзор.

Агенты
🟣StreamBench: Towards Benchmarking Continuous Improvement of Language Agents arxiv  
🟣SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering arxiv  
🟣AgentBoard: An Analytical Evaluation Board of Multi-turn LLM Agents arxiv
 
🟣DiscoveryWorld: A Virtual Environment for Developing and Evaluating Automated Scientific Discovery Agents arxiv 

Бенчмарки
🟣DevBench: A multimodal developmental benchmark for language learning arxiv  
🟣CVQA: Culturally-diverse Multilingual Visual Question Answering Benchmark arxiv  
🟣LINGOLY: A Benchmark of Olympiad-Level Linguistic Reasoning Puzzles in Low-Resource and Extinct Languages arxiv  
🟣CLUE - Cross-Linked Unified Embedding for cross-modality representation learning arxiv  
🟣EmoBench: Evaluating the Emotional Intelligence of Large Language Models arxiv  

LLM
🟣The PRISM Alignment dataset: What Participatory, Representative and Individualised Human Feedback Reveals About the Subjective and Multicultural Alignment of Large Language Models arxiv  
🟣UniGen: A Unified Framework for Textual Dataset Generation via Large Language Models arxiv
🟣A Watermark for Black-Box Language Models arxiv
Please open Telegram to view this post
VIEW IN TELEGRAM
#interesting #petproject

Вот как надо делать пет-проекты
Forwarded from Hacker News
Show HN: Anki AI Utils (Score: 150+ in 16 hours)

Link: https://readhacker.news/s/6kdsm
Comments: https://readhacker.news/c/6kdsm

Hi hn, I am nearly at the end of medical school so it is time I publish and "advertise" my open source scripts/apps for anki! Here's the pitch:
Anki AI Utils is a suite of AI-powered tools designed to automatically improve cards you find challenging. Whether you're studying medicine, languages, or any complex subject, these tools can:
- Explain difficult concepts with clear, ChatGPT-generated explanations.
- Illustrate key ideas using Dall-E or Stable Diffusion-generated images.
- Create mnemonics tailored to your memory style, including support for the Major System.
- Reformulate poorly worded cards for clarity and better retention.
Key Features:
- Adaptive Learning: Uses semantic similarity to match cards with relevant examples.
- Personalized Memory Hooks: Builds on your existing mnemonics for stronger recall.
- Automation Ready: Run scripts daily to enhance cards you struggled with.
- Universal Compatibility: Works across all Anki clients (Windows, Mac, Linux, Android, iOS).
Example:
For a flashcard about febrile seizures, Anki AI Utils can:
- Generate a Dall-E illustration of a toddler holding a teacup next to a fireplace.
- Create mnemonics like "A child stumbles near the fire, dances symmetrically, has one strike, and fewer than three fires."
- Provide an explanation of why febrile seizures occur and their diagnostic criteria.
Call for Contributors:
This project is battle-tested but needs help to become a polished Anki addon. If you’re a developer or enthusiast, join us to make these tools more accessible!
Check out my other projects on GitHub: [Anki AI Utils](https://github.com/thiswillbeyourgithub)
Transform your Anki experience with AI—because learning should be smarter, not harder.
Forwarded from NLP Wanderer
42-ух минутный доклад с NeurIPS 2024 об основных конкурентах архитектуры трансформера

Вам в очень энергичной манере поведают:

- В чем логика заменять трансформер
- Общий таймлайн развития альтернативных архитектур с 2020 года и причем тут LSTM
- Что же там в итоге с линейным атеншеном в 2024том
- Кто же этот такой ваш RWKV, кто за ним стоит и почему он не хочет умирать в 2025том
- Как быть отчаяным ресерчером и в одиночку успешно линеаризовывать opensource LLM без собственного претрейна
- Что еще случилось за год (Jamba, Sana, DNA Models и что еще нас ждет

Смотреть на Ютубе
Forwarded from ИИгорь R&D
#учимпитон

Еще немного полезных хаков. Хочется уметь по конфигу легко и красиво получать объект класса. Но в конфиге только строки (не надо unsafe YAML, это бездна), а чтобы получить объект надо строку с названием типа как-то преобразовать в сам тип. Можно это сделать кучей if-ов или, начиная с питона 3.10, match+case, и там вручную все проверять и создавать объекты. Но это все костыльно и некрасиво. А вот как красиво:

import abc

class Base(abc.ABC):
_registry = {}

def __init_subclass__(cls, /, name: str | None = None, **kwargs):
super().__init_subclass__(**kwargs)
name = name or cls.__name__
if name in Base._registry:
raise ValueError(f"{name} is already registered")
Base._registry[name] = cls

@staticmethod
def get_instance(name: str, *args, **kwargs) -> Base:
return Base._registry[name](*args, **kwargs)


Как это работает. Функция __init_subclass__ вызывается каждый раз, когда в питоне создается класс-наследник (сам класс, не объект!). Тогда в registry по ключу name (по умолчанию тупо имя субкласса) записывается сам класс. Можно зарегистрировать с иным именем. Пользоваться этим так:

class Sub(Base):
def __init__(self, a, b):
pass

class OtherSub(Base, name="Sub2"):
pass


sub = Base.get_instance("Sub", 42, b=2) # create instance of Sub

# create instance of OtherSub by the explicitly specified name
other_sub = Base.get_instance("Sub2")


Основное преимущество — ничего не надо менять нигде в коде при добавлении нового класса-наследника. То есть даже если это библиотечный код, а новый наследник создается в пользовательском коде, то этот наследник зарегистрируется и будет доступен по имени вместе с остальными дочерними классами.
Forwarded from DevFM
Docker в каждый дом

Стрим FastAPI+Docker породил бурное обсуждение, а нужен ли докер в таком небольшом проекте. Наш ответ — обязательно! В современном мире разработки docker является такой же неотъемлемой частью разработки, как и git. Есть некоторые области без докера, например, разработка GUI, операционных систем или микроконтроллеров. Но весь backend, frontend и data science без докера вообще не живут. Давайте посмотрим, какие прямые выгоды даёт докер:

1. Всегда понятно, как запустить код. Dockerfile является однозначной инструкцией по сборке проекта. Bus-factor не мешает жить.

2. Легко включать новых людей в разработку. Инструкция в ридми сводится к docker build & docker run, что понятно даже junior-разработчикам.

3. Деплой можно производить где угодно. В пару команд можно запуститься на компе разработчика, на test или prod сервере, у заказчика на ноутбуке – и везде всё будет одинаково, нужен только сам Docker.

4. Проект одинаково себя ведёт везде. Это упрощает воспроизведение проблемы и сокращает время на багфикс.

5. Нет проблем с конфликтом зависимостей-библиотек. Вы можете на одной машине запустить проекты с условным django 3 и django 4, они никак друг другу не помешают.

6. Легко поднимать зависимости-компоненты. Для любой базы данных берётся готовый докер-образ, меняется конфиг и в одну команду запускается. С выходом на docker compose можно одной командой поднимать сборную солянку из backend, frontend, базы данных, nginx и Let's Encrypt.

7. Просто откатываться к старой версии. Версионирование докер-образов позволяет запустить новую версию, и, если что-то пошло не так, откатиться назад за десятки секунд.

8. Понятные внешние эффекты проекта. В команде docker run указаны проброшенные в контейнер каталоги и порты. Всё остальное изолированно.

В общем, со всех сторон одна польза. Минусы? Требуется изучить новый инструмент и best practices. Кажется, на этом всё. Даже дополнительных накладных расходов на виртуализацию нет. И помните – если docker вам мешает, скорее всего, вы что-то делаете неправильно.

Для запуска нескольких связанных контейнеров пользуйтесь compose, гайд тут. Если ещё нужно управлять множеством серверов, то посмотрите на kubernetes.

#skills #sudo #devfm
Перед новогодними праздниками X5 написали статью про контекстных бандитов и то, как они их применяли в ценообразовании. Здесь рассказывается об основных методах, которые ребята применяли для экспериментов: UCB, Thompson Sampling.

Базово алгоритмы позволяют выбрать лучшую стратегию на основе метрики, например, цены товара, исходя из определенного контекста, изменения среды (данных по пользователю, внешних факторов и др.). В отличие от классических A/B-тестов, контекстные бандиты могут достаточно быстро менять свои решения, адаптируясь к реальным данным. Это значит, что вместо долгих тестов можно сразу получать лучшие результаты.

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

Код обещали выложить в следующей статье, в статье Ozon Tech он уже есть. Байесовская линейная регрессия, Thompson Sampling, СMAB, код тут
Я принес. Подборку классных докладов

В конце этого года я съездил на московский Тимлидконф. Первый день прошел в какой-то сумбурной суете: то круглый стол, то подкаст надо записать, то афтепати уже началось.

А вот во второй день я решил проверить, правда ли конференции уже не те, и доклады – фигня? Сходил на несколько докладов и искренне получил удовольствие.

Настолько мне всё понравилось, что я у каждого из этих спикеров попросил ссылку и разрешение вам сегодня принести эту подборку. Приложу ссылки на эти доклады и мои впечатления о них. Вдруг у вас в обозримом будущем найдется время и желание посмотреть что-то такое.

1. Доклад Миши Трифонова про servant leadership (лидер-слуга). Очень мне близка эта тема. Смотрел и чувствовал, как у меня с Мишей сходятся мысли и интенции не просто в сторону эффективности, а еще и гуманизма и заботы о своей команде. https://youtu.be/vBTSieU2K60
2. Дарья Бородина с докладом про то, как сохранять и восстанавливать энергию, когда забит календарь. И тема актуальная для тех у кого много созвонов в день (eto ya), и Даша очень живо и харизматично выступает, и некоторое побуждение к полезным действиям есть. Мне бы его год назад посмотреть, вот бы мне это время и силы сэкономило 🙂 Сам на практике искал рецепты и доходил до того, что Даша за 40 минут рассказала. https://youtu.be/jbuUGm_5jZc
3. Женя Идзиковский рассказал про нашу психику с понятной айтишникам точки зрения. Легаси, техдолг, баги, способы перепрошивки. Всё как всегда с крутыми и понятными примерами. Секция вопросов и ответов в конце забавная вышла 🙂 https://youtu.be/mTDp1EKSxrU
4. Настя Абрашитова выдала базу для мидл-менеджеров на тему того, что делать, если от вас уходит тимлид. Хорошо структурированная и рациональная инструкция. Вот прям сталкиваешься с такой ситуацией, открываешь доклад и работаешь по шагам. https://youtu.be/AjqQBXdMBQw

Добавляйте в список «Посмотреть позже» и продолжайте резать салаты, больше не отвлекаю в этом году.

С наступающим, кстати! 🎄🎉
Подводим предновогодние итоги 2024 года! 🥂

Ровно год назад я выступал на конференции Яндекса с докладом "Тренды, подходы и проблемы в рекомендательных системах 2023 года". Пролетел год, и давайте посмотрим, что изменилось, если пройтись по основным пунктам.

Помните про "нечестную" оценку моделей в статьях с подглядыванием в будущее? Так вот, открываем главную конференцию по рекомендациям RecSys 24 и что видим? Всё те же грабли! Случайно выбранные статьи из трека full paper используют: user-based split (8 работ: 1, 2, 3, 4, 5, 6, 7, 8 🤯), random split (2 работы: 1, 2) и лишь одна — самый предпочтительный global timeline-based. Подробнее об этих подходах можно почитать здесь. В общем, ситуация, похоже, кардинально не изменилась. 😔

А что по поводу сложности оценки рекомендаций на исторических данных? Все упомянутые 11 статей по-прежнему используют "типичную" парадигму, пытаясь максимально точно предсказать исторические данные. Если модель начинает рекомендовать что-то отличное от исторических данных (но более релевантное), то она в проигрыше. Лично я возлагаю большие надежды на LLM-based evaluation и жду прорыва в этой области в 2025 году. И вот свежий пример — совсем недавно вышла статья про RecSys Arena! Наш старый знакомый SASRec сравнили с LightGCN с помощью GPT-4o. Осталось дело за малым: показать и доказать корреляцию LLM-оценок с результатами А/Б-тестов (и, конечно, научиться воспроизводимо получать такие оценки). Представляете, какие горизонты это откроет?

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

Некачественные имплементации порождают слабые результаты моделей. Год назад я говорил про работы, в которых обнаружили слабые open-source реализации GRU4Rec и BERT4Rec. В этом году мы с коллегами показали, что одна из самых популярных моделей BPR в таких популярных фреймворках как implicit/RecBole/LightFM реализована не самым оптимальным образом, поэтом проигрывает по качеству более качественным имплементациям.

Маленькие датасеты — проблема академических исследований. Из 11 упомянутых выше статей, только одна может похвастаться датасетом с более чем 1 миллионом пользователей. Ещё две работы оперируют данными в районе 100 тысяч, а остальные — и вовсе несколькими десятками тысяч. Проблема в том, что модели, показывающие отличные результаты на скромных 10 тысячах пользователей, могут попросту "потеряться" при масштабировании на миллионы. И те "впечатляющие" приросты метрик, скорее всего, испарятся. 💨

Тренд на LLM & RecSys — в самом разгаре! И это не может не радовать! Алиса от Яндекса уже вовсю рекомендует товары и собирает корзины в Яндекс.Лавке. YouTube Shorts использует LLM для подбора контента, максимально отвечающего вашим интересам. Даже старый добрый EASE прокачали знаниями, полученными от больших языковых моделей. А сколько интересных статей выходит про симуляцию поведения пользователей с помощью LLM! В общем, направление развивается семимильными шагами. 🚀

Тренд на RL & RecSys — небольшая неопределенность. На Turbo ML Conf я делился, как мы завели RL в рекомендательных системах и выиграли у обычного бустинга? Правда, тут же проиграли другому, ещё более качествнному бустингу 🙂. Но я, и коллеги из Яндекса отметили, что на RecSys24 работ по RL & RecSys было на удивление мало. Похоже, этому тренду нужен свежий импульс с прорывными идеями.