Forwarded from AI[ex]Time (Alex Golubev)
Объемный и очень интересный тех репорт про модель под названием Skywork Open Reasoner 1. Может показаться, что это очередной RL тюн на математические задачи, который обгоняет модели по типу R1-distil, но на самом деле это первый (по крайней мере я не встречал раньше подобных работ) ablation на огромное число факторов, влияющих на процесс обучения с GRPO-like методами. Фильтрация данных, on/off policy trade off, температура при генерации решений, несимметричное клиппирование, token-wise усреднение в лоссе, KL регуляризация и много чего еще — раньше все это встречалось по отдельности в разных работах, а здесь собрано воедино, так еще и со сравнением в одинаковых сетапах.
Но. Помимо этого, авторы заметили следующее: когда модель входит в состоянии низкой энтропии, разнообразие генераций и эффективность обучения снижается. Если такое коллапсирование происходит рано, то прогресс быстро упирается в потолок. Чтобы контролировать этот процесс, предлагается ввести дополнительное слагаемое в лосс, которое будет штрафовать за слишком низкие значения, причем делать это нужно с адаптивным весом, тк энтропия зависит от данных и шага обучения (по этой же причине часто очень тяжело подобрать единый вес для KL-регуляризации). Вообще это супер стандартный подход в классическом RL для поддержания exploration на определенном уровне, но в RL для LLM такое особо не использовали. Ablation на многие факторы проводится как раз с оглядкой на то, как они влияют на динамику энтропии. В общем, репорт на 40 страниц, там очень много познавательных замечаний, советую хотя бы бегло пробежаться.
Но. Помимо этого, авторы заметили следующее: когда модель входит в состоянии низкой энтропии, разнообразие генераций и эффективность обучения снижается. Если такое коллапсирование происходит рано, то прогресс быстро упирается в потолок. Чтобы контролировать этот процесс, предлагается ввести дополнительное слагаемое в лосс, которое будет штрафовать за слишком низкие значения, причем делать это нужно с адаптивным весом, тк энтропия зависит от данных и шага обучения (по этой же причине часто очень тяжело подобрать единый вес для KL-регуляризации). Вообще это супер стандартный подход в классическом RL для поддержания exploration на определенном уровне, но в RL для LLM такое особо не использовали. Ablation на многие факторы проводится как раз с оглядкой на то, как они влияют на динамику энтропии. В общем, репорт на 40 страниц, там очень много познавательных замечаний, советую хотя бы бегло пробежаться.
Forwarded from .ml
Многие компании сёрвят LLM
Кто-то использует готовые инструменты, которые предоставляют OpenAI-compatible эндпоинты: например, DeepSeek, развёрнутый через vllm serve. Кому-то не хватает OpenAI-compatible протокола. А кому-то хочется и того, и другого — например, нам в Точке.
Это непростая инженерная задача, которую нам пришлось решать. Вот мы и написали статью о том, как поднимали свою LLM-инфраструктуру. Текст исключительно инженерный и больше про дизайн всей системы целиком, чем про, например, наши внутренние патчи в популярный фреймворк vllm.
Читайте, комментируйте и рассказывайте, как у вас дела с LLM!
Кто-то использует готовые инструменты, которые предоставляют OpenAI-compatible эндпоинты: например, DeepSeek, развёрнутый через vllm serve. Кому-то не хватает OpenAI-compatible протокола. А кому-то хочется и того, и другого — например, нам в Точке.
С одной стороны, мы хотим уметь ходить в LLM-провайдеры, которые поддерживают общепринятый формат. А с другой стороны у нас есть внутренняя LLM, которую нельзя полностью совместить с OpenAI-протоколом, потому что она поддерживает дополнительные виды контента внутри сообщений и ещё много других плюшек(про них тоже как-нибудь расскажем 👀) .
Это непростая инженерная задача, которую нам пришлось решать. Вот мы и написали статью о том, как поднимали свою LLM-инфраструктуру. Текст исключительно инженерный и больше про дизайн всей системы целиком, чем про, например, наши внутренние патчи в популярный фреймворк vllm.
Читайте, комментируйте и рассказывайте, как у вас дела с LLM!
Forwarded from Тимлид Очевидность | Евгений Антонов
Девятый (последний) месяц. Практика принятия решений
Вот я и закончил курс Стратоплана «Руководитель отдела».
Контент первого, второго, третьего, четвертого, пятого, шестого, седьмого и восьмого месяцев я описывал ранее.
В этот раз была тема внедрения изменений и менеджмента в кризис.
Всё более чем актуально. Нелегкие времена с затянутыми поясками в отрасли уже за окном, а изменения, работа с сопротивлением, контроль за соблюдением новых порядков – регулярная работа и хлеб руководителя.
Множество из рассмотренных материалов я использовал и раньше, но только лишь потому, что интересовался этим и набирал информацию из разрозненных источников: статей, подкастов, докладов. А тут все модели разом структурно выдали, бери да используй как методичку или чек-лист.
Сегодня не хочу углубляться в детали материала, а хочу под конец курса сосредоточиться в целом на подобном длительном обучении и пользе от него. Неважно, Стратоплан это или еще кто-то другой. Тут я больше про долгие объемные многомесячные курсы, а не «стань менеджером за 3 дня» или «освой C++ за 21 день».
Не ходите уставшими
Ребята предупреждают об этом сами, но я тоже скажу. Кажется, что 15 часов в месяц (одна трехдневка) – это не так уж и много. Но всё это оборачивается в то, что у вас выпадает солидный кусок пятницы, который потом надо будет нагнать, и суббота с воскресеньем тоже, ибо после пяти часов обучения чувствуется приличная усталость. И после этого сюрприз-сюрприз уже начинается новая неделя, так что выходит пучок накопленных дел и 12 дней без отдыха в месяц. И так 9 месяцев. Это правда тяжело.
Не прогуливайте практику
К сожалению, я иногда пропускал онлайн занятия из-за разных жизненных событий. Те сессии, где я онлайн практиковался с ребятами в группе, были НАМНОГО понятнее и чаще приводили к применению на практике новых знаний и осваиваемых навыков.
Так что, если вы думаете всё пропускать, а потом посмотреть лекции на х2 и надеетесь на просветление – чуда не случится.
Я уже всё знаю
Хоть для меня и не было ни одной темы, в которой бы я не был более-менее подкован (кроме бюджетирования), но мне понравилось, что разрозненные знания укладываются в общую структурированную систему.
У меня такая история была с ПМной специализацией на Курсере https://www.coursera.org/specializations/product-management. Вроде кучу материалов читал, смотрел и знал, но после прохождения комплексной программы всё по полочкам разложил и перестал вовсе тратить время на потребление фрагментированной информации из разных источников, потому что они все в большинстве своем – лишь повторение и вольный пересказ части целого.
Многое зависит от лекторов
В который раз убеждаюсь, что в обучении очень большую роль играет не только сам материал, но и подача. Какие-то лекторы так завораживают и зажигают, что не хочется отрываться от экрана (а кого-то и хочется позвать в подкаст), а какие-то плавные, монотонные, что где-то ловишь себя на том, что мысль упустил, и возвращаешься обратно.
Отдельное уважение тем, кто может не просто материал начитать, а еще и следит за тем, как реагирует аудитория, какие вопросы задает, кто что не понял. Профессионалы успевают всё это отработать, не продолбать тайминг, не сбиться и не потерять мысль.
Смотрите на отзывы
Прежде чем куда-то надолго погрузиться, да еще и занести деньги, внимательно отнеситесь к отзывам. И лучше бы не тем, которые на главной страничке сайта, а найдите лично людей проходивших и поспрашивайте у них приватно. Так есть шанс, что больше объективности сможете получить.
А если это мультиспециализационные площадки курсов, то спрашивайте про конкретно целевой курс, потому что один курс могут готовить одни люди, и он будет прекрасен и понятен, а другой сделает кто-то на отвали, и получится бестолковая трата времени.
Итог
Учиться и развиваться лично я для себя считаю очень важным. Это и профессионально помогает (но не корочки и сертификаты, а знания и навыки), и в умственном тонусе держит.
Но если перегнуть, можно сильно угореть (когда только создали платформу Stepik, я записался на 5-6 курсов сразу, и жадность фраера сгубила😁)
Вот я и закончил курс Стратоплана «Руководитель отдела».
Контент первого, второго, третьего, четвертого, пятого, шестого, седьмого и восьмого месяцев я описывал ранее.
В этот раз была тема внедрения изменений и менеджмента в кризис.
Всё более чем актуально. Нелегкие времена с затянутыми поясками в отрасли уже за окном, а изменения, работа с сопротивлением, контроль за соблюдением новых порядков – регулярная работа и хлеб руководителя.
Множество из рассмотренных материалов я использовал и раньше, но только лишь потому, что интересовался этим и набирал информацию из разрозненных источников: статей, подкастов, докладов. А тут все модели разом структурно выдали, бери да используй как методичку или чек-лист.
Сегодня не хочу углубляться в детали материала, а хочу под конец курса сосредоточиться в целом на подобном длительном обучении и пользе от него. Неважно, Стратоплан это или еще кто-то другой. Тут я больше про долгие объемные многомесячные курсы, а не «стань менеджером за 3 дня» или «освой C++ за 21 день».
Не ходите уставшими
Ребята предупреждают об этом сами, но я тоже скажу. Кажется, что 15 часов в месяц (одна трехдневка) – это не так уж и много. Но всё это оборачивается в то, что у вас выпадает солидный кусок пятницы, который потом надо будет нагнать, и суббота с воскресеньем тоже, ибо после пяти часов обучения чувствуется приличная усталость. И после этого сюрприз-сюрприз уже начинается новая неделя, так что выходит пучок накопленных дел и 12 дней без отдыха в месяц. И так 9 месяцев. Это правда тяжело.
Не прогуливайте практику
К сожалению, я иногда пропускал онлайн занятия из-за разных жизненных событий. Те сессии, где я онлайн практиковался с ребятами в группе, были НАМНОГО понятнее и чаще приводили к применению на практике новых знаний и осваиваемых навыков.
Так что, если вы думаете всё пропускать, а потом посмотреть лекции на х2 и надеетесь на просветление – чуда не случится.
Я уже всё знаю
Хоть для меня и не было ни одной темы, в которой бы я не был более-менее подкован (кроме бюджетирования), но мне понравилось, что разрозненные знания укладываются в общую структурированную систему.
У меня такая история была с ПМной специализацией на Курсере https://www.coursera.org/specializations/product-management. Вроде кучу материалов читал, смотрел и знал, но после прохождения комплексной программы всё по полочкам разложил и перестал вовсе тратить время на потребление фрагментированной информации из разных источников, потому что они все в большинстве своем – лишь повторение и вольный пересказ части целого.
Многое зависит от лекторов
В который раз убеждаюсь, что в обучении очень большую роль играет не только сам материал, но и подача. Какие-то лекторы так завораживают и зажигают, что не хочется отрываться от экрана (а кого-то и хочется позвать в подкаст), а какие-то плавные, монотонные, что где-то ловишь себя на том, что мысль упустил, и возвращаешься обратно.
Отдельное уважение тем, кто может не просто материал начитать, а еще и следит за тем, как реагирует аудитория, какие вопросы задает, кто что не понял. Профессионалы успевают всё это отработать, не продолбать тайминг, не сбиться и не потерять мысль.
Смотрите на отзывы
Прежде чем куда-то надолго погрузиться, да еще и занести деньги, внимательно отнеситесь к отзывам. И лучше бы не тем, которые на главной страничке сайта, а найдите лично людей проходивших и поспрашивайте у них приватно. Так есть шанс, что больше объективности сможете получить.
А если это мультиспециализационные площадки курсов, то спрашивайте про конкретно целевой курс, потому что один курс могут готовить одни люди, и он будет прекрасен и понятен, а другой сделает кто-то на отвали, и получится бестолковая трата времени.
Итог
Учиться и развиваться лично я для себя считаю очень важным. Это и профессионально помогает (но не корочки и сертификаты, а знания и навыки), и в умственном тонусе держит.
Но если перегнуть, можно сильно угореть (когда только создали платформу Stepik, я записался на 5-6 курсов сразу, и жадность фраера сгубила😁)
Forwarded from Б/У ml (Толик Мастрюков)
Особенность в рекомендательных системах
Контекст
В последнее время основные статьи в рекомендательных системах связанны с применением нейронных сетей.
Выглядит это всегда примерно так для сценария u2i:
1) Есть айтем -> кодируем через nn.Embedding его фичи
2) История пользователя состоит из айтемов -> используем наработку из 1) + encoder/decoder (трансформеры, aka sasrec/bert4rec) для кодирования вектора юзера.
3) Обучаем на задачу близости вектора пользователя со следующим айтемом/множеством айтемов. Возможно доп задачи: sasrec учится на next-item для всей истории, которые в проде он никогда не увидит
И когда пытаешь завести алгоритм для своей задачи - в первую очередь я замечаю popularity bias . Веса соотвествующие векторам наиболее популярных айтемов/фичей айтемов - чаще обновляеются . В первые итерации модель выучивает именно такие объявления рекомендовать - в своих задач я это замечал.
А следующие батчи/эпохи пытается выйти из этого локального минимума состояния и начать показывать более персональный контент. На эту фазу и уходят основные компуты обучения.
Для решения этой проблемы активно используют:
a) random negative sampling
b) in-batch negative sampling
c) и LogQ сверху
На практике мне хватало a) и b) . Добавление c) при существующих a) и b) доп качество не давало
А что в классике
Изначально рекомендательные системы решались на основе матриц соовстречаемости - тык.
Как это выглядело:
1) Есть айтемы и истории пользователя -> строим матрицу как часто 1 айтем встречался с другим айтемом в этой истории
2) К каждому айтему в истории достаем наиболее часто встречающиеся айтемы используя матрицу соовстречаемости - кандидаты айтема.
3) Вместе с айтемом достаем и некий скор (достаем столбец) - меру соовстречаемости. И если для нескольких айтемов в истории совпали кандидаты, то можем сложить/перемножить скоры - и получить финальный скор для каждого кандидата. Потом отобрать топ K
Главная проблема в классике - как сформировать эту матрицу. Хорошее понимание данных и своего домена может помочь в этом. А применение этих методов может дать представление о том, как устроены данные. Примеры простых эвристик:
1) Поделить строчку на сумму в этой строке -> уберем байс популярности айтема (а нужно ли?) -> если ответ да, то будущий трансформер скорее всего не заведется без in-batch ns.
2) Добавить временную составляющую в историю -> учет трендов (а) -> получилось повысить скор - скорее всего трансформер еще выше сможет его выбить
3) Добавить дот продукт от контетных векторов с весом -> возможно колаборативной информации недостаточно и не все паттерны пользователи уже нашли -> скор вырос - в трансформер можно и нужно засунуть контентную часть
Когда что применять
Мне лично легче начать с классики в новом проекте. Буквально за 2-3 часа можно попробовать кучу матриц соовстречаемостей и сформировать представление о данных. Матричный метод легко параллелится на cpu, в отличии от трансформеров, которые ограничены размером батча и гпу памяти.
И когда уже сформирована интуиция как устроены данные, то можно попробовать хитрый трансформер с учетом полученных инсайдов в классике. У меня ходит кратно больше времени (3-4 дня vs 1 день на классику), чтобы завести трансформер. Это связанно с тем, что 1 такая моделька обучается от 3-4 часов , что гораздо медленнее чем матричные методы. Но зато удается выбить качество выше чем у классических алгоритмов.
В заключении
Но стоит ли оно того?
Велком в комменты: А вы часто сравниваете нейронночные методы с матричными в своих проектах? Пытаетесь выбить из классических методов максимум прежде чем тюнить нейронки? Какие другие аномалии замечали при тренировки нейроннок?
Контекст
В последнее время основные статьи в рекомендательных системах связанны с применением нейронных сетей.
Выглядит это всегда примерно так для сценария u2i:
1) Есть айтем -> кодируем через nn.Embedding его фичи
2) История пользователя состоит из айтемов -> используем наработку из 1) + encoder/decoder (трансформеры, aka sasrec/bert4rec) для кодирования вектора юзера.
3) Обучаем на задачу близости вектора пользователя со следующим айтемом/множеством айтемов. Возможно доп задачи: sasrec учится на next-item для всей истории, которые в проде он никогда не увидит
И когда пытаешь завести алгоритм для своей задачи - в первую очередь я замечаю popularity bias . Веса соотвествующие векторам наиболее популярных айтемов/фичей айтемов - чаще обновляеются . В первые итерации модель выучивает именно такие объявления рекомендовать - в своих задач я это замечал.
А следующие батчи/эпохи пытается выйти из этого локального минимума состояния и начать показывать более персональный контент. На эту фазу и уходят основные компуты обучения.
Для решения этой проблемы активно используют:
a) random negative sampling
b) in-batch negative sampling
c) и LogQ сверху
На практике мне хватало a) и b) . Добавление c) при существующих a) и b) доп качество не давало
А что в классике
Изначально рекомендательные системы решались на основе матриц соовстречаемости - тык.
Как это выглядело:
1) Есть айтемы и истории пользователя -> строим матрицу как часто 1 айтем встречался с другим айтемом в этой истории
2) К каждому айтему в истории достаем наиболее часто встречающиеся айтемы используя матрицу соовстречаемости - кандидаты айтема.
3) Вместе с айтемом достаем и некий скор (достаем столбец) - меру соовстречаемости. И если для нескольких айтемов в истории совпали кандидаты, то можем сложить/перемножить скоры - и получить финальный скор для каждого кандидата. Потом отобрать топ K
Главная проблема в классике - как сформировать эту матрицу. Хорошее понимание данных и своего домена может помочь в этом. А применение этих методов может дать представление о том, как устроены данные. Примеры простых эвристик:
1) Поделить строчку на сумму в этой строке -> уберем байс популярности айтема (а нужно ли?) -> если ответ да, то будущий трансформер скорее всего не заведется без in-batch ns.
2) Добавить временную составляющую в историю -> учет трендов (а) -> получилось повысить скор - скорее всего трансформер еще выше сможет его выбить
3) Добавить дот продукт от контетных векторов с весом -> возможно колаборативной информации недостаточно и не все паттерны пользователи уже нашли -> скор вырос - в трансформер можно и нужно засунуть контентную часть
Когда что применять
Мне лично легче начать с классики в новом проекте. Буквально за 2-3 часа можно попробовать кучу матриц соовстречаемостей и сформировать представление о данных. Матричный метод легко параллелится на cpu, в отличии от трансформеров, которые ограничены размером батча и гпу памяти.
И когда уже сформирована интуиция как устроены данные, то можно попробовать хитрый трансформер с учетом полученных инсайдов в классике. У меня ходит кратно больше времени (3-4 дня vs 1 день на классику), чтобы завести трансформер. Это связанно с тем, что 1 такая моделька обучается от 3-4 часов , что гораздо медленнее чем матричные методы. Но зато удается выбить качество выше чем у классических алгоритмов.
В заключении
Но стоит ли оно того?
Велком в комменты: А вы часто сравниваете нейронночные методы с матричными в своих проектах? Пытаетесь выбить из классических методов максимум прежде чем тюнить нейронки? Какие другие аномалии замечали при тренировки нейроннок?
Forwarded from РИСЕРЧОШНАЯ
зависит от сегмента бизнес на маркетплейсах это сработает, на продуктовых сегментах ты никогда (маловероятно) не обучишь такую модель
ease is all you need
ease is all you need
Forwarded from РИСЕРЧОШНАЯ
про обе
в том же вкусвилле трансформеры будут плохо справляться с рекомендацией частотных товаров по двум причинам
а) они не умеют в повторные заказы и счетчики не сильно помогают (собственные покупки)
б) данных не так много, что бы трансформер начал что-то понимать лучше чем классика
а с другой стороны есть sota модели типа ease (elsa, sansa, ease + vae) или тот же tifu knn, которые стоят копейки и их очень тяжело выбить
при том что у них нет проблем с а и б
в том же вкусвилле трансформеры будут плохо справляться с рекомендацией частотных товаров по двум причинам
а) они не умеют в повторные заказы и счетчики не сильно помогают (собственные покупки)
б) данных не так много, что бы трансформер начал что-то понимать лучше чем классика
а с другой стороны есть sota модели типа ease (elsa, sansa, ease + vae) или тот же tifu knn, которые стоят копейки и их очень тяжело выбить
при том что у них нет проблем с а и б
Forwarded from Grig
РИСЕРЧОШНАЯ
про обе в том же вкусвилле трансформеры будут плохо справляться с рекомендацией частотных товаров по двум причинам а) они не умеют в повторные заказы и счетчики не сильно помогают (собственные покупки) б) данных не так много, что бы трансформер начал что…
это смотря какой трансформер, если это просто sasrec/bert4rec, тогда скорее всего да. Но если это какой-нибудь контентный трансформер вообще без айдишников + в него можно прокинуть персонализированные скоры популярности user-item (прям к скору модели), тогда можно и автоэнкодер побить. Да и каталог побольше закрыть можно.
Ну конечно это все при отсутствии пункта б
Ну конечно это все при отсутствии пункта б
Forwarded from РИСЕРЧОШНАЯ
Grig
Да и каталог побольше закрыть можно.
ну если у тебя условный вкусвилл то у тебя никогда не будет проблем с каталогом
прокидывание скоров напрямую странная штука, зачем тебе тащить за собой трансформер если ты скоры от другой модели подкидываешь внутрь него, даже не обучая внутренний слои (какую нибудь доп голову для дистилляции)
от этого модель больше понимать не станет как мне кажется
точно так же ты можешь семантику и в классическую модель передать, даже тот же tfidf который точно так же зачастую бьет семантику трансформеров
что бы вырыть яму ты же лапотой это делать будешь, а не экскаватор вызывать
прокидывание скоров напрямую странная штука, зачем тебе тащить за собой трансформер если ты скоры от другой модели подкидываешь внутрь него, даже не обучая внутренний слои (какую нибудь доп голову для дистилляции)
от этого модель больше понимать не станет как мне кажется
точно так же ты можешь семантику и в классическую модель передать, даже тот же tfidf который точно так же зачастую бьет семантику трансформеров
что бы вырыть яму ты же лапотой это делать будешь, а не экскаватор вызывать
Forwarded from Grig
РИСЕРЧОШНАЯ
ну если у тебя условный вкусвилл то у тебя никогда не будет проблем с каталогом прокидывание скоров напрямую странная штука, зачем тебе тащить за собой трансформер если ты скоры от другой модели подкидываешь внутрь него, даже не обучая внутренний слои (какую…
https://arxiv.org/html/2409.04329v1
Я когда это писал ссылался на эту статью, просто прикидываясь User Personalized score (это не аутпуты модели, просто user-item статистика) можно подтянуть трансформер чаще рекомендовать не только глядя на последние N, а с учетом большей истории. Но на практике, это должно поднять не только utility, но и pop-bias. Модель усложнять не придется
Я когда это писал ссылался на эту статью, просто прикидываясь User Personalized score (это не аутпуты модели, просто user-item статистика) можно подтянуть трансформер чаще рекомендовать не только глядя на последние N, а с учетом большей истории. Но на практике, это должно поднять не только utility, но и pop-bias. Модель усложнять не придется
Forwarded from Grig
РИСЕРЧОШНАЯ
ну если у тебя условный вкусвилл то у тебя никогда не будет проблем с каталогом прокидывание скоров напрямую странная штука, зачем тебе тащить за собой трансформер если ты скоры от другой модели подкидываешь внутрь него, даже не обучая внутренний слои (какую…
семантику в классические алгоритмы никогда не прокидывал, но кажется, что ее проще использовать как отдельный канген.
Тогда действительно, парой лопат получится заменить экскаватор.
А так, все супер ситуативно.
Мало данных или маленький каталог - классические алгоритмы хороши.
Огромный лог данных + каталог на миллион, скорее всего лучше взять трансформер
Тогда действительно, парой лопат получится заменить экскаватор.
А так, все супер ситуативно.
Мало данных или маленький каталог - классические алгоритмы хороши.
Огромный лог данных + каталог на миллион, скорее всего лучше взять трансформер
Forwarded from Dealer.AI
This media is not supported in your browser
VIEW IN TELEGRAM
Делай легче, делай играюче, text-to-lora, кайфуй !
Зачем учить свою LoRA, когда можно взятьинвайт и просто добавить воды описание задачи и получить адаптер без обучения. На самом деле за один forward pass и предварительным обучением гиперсети. Но на инфере действительно за один прямой проход. Sakana.ai снова удивляет.
Работает это при помощи того, что мы берем выходной эмб с модели cls emb для энкодера или last token emb для LLM. Далее инитим гиперсеть случайно (по типу LoRA). После проносим через это опорный эмб с базовой модели и добиваемся, чтобы на выходе из мета-сети получить консистентые отображения. Также используется принцип mutual learning, чтобы обмениваться с LoRA учителя градиентами, как по скрытым состояниям, так и по выходу вероятностей. Т.е. происходит и шеринг весов и дистилляция модели учителя.
Задача тут в том, чтобы получить сеть, которая может порождать LoRA веса схожие с весами учителя и не терять task specific. Скормлено в таком сетапе сотни известных и популярных адаптеров и связанных с ними задач. Авторы так же отмечают трансфер и на unseen задачи. Т.е. обещают свойства out of domain трансфера.
Интересное. Над пробнуть.
Зачем учить свою LoRA, когда можно взять
Работает это при помощи того, что мы берем выходной эмб с модели cls emb для энкодера или last token emb для LLM. Далее инитим гиперсеть случайно (по типу LoRA). После проносим через это опорный эмб с базовой модели и добиваемся, чтобы на выходе из мета-сети получить консистентые отображения. Также используется принцип mutual learning, чтобы обмениваться с LoRA учителя градиентами, как по скрытым состояниям, так и по выходу вероятностей. Т.е. происходит и шеринг весов и дистилляция модели учителя.
Задача тут в том, чтобы получить сеть, которая может порождать LoRA веса схожие с весами учителя и не терять task specific. Скормлено в таком сетапе сотни известных и популярных адаптеров и связанных с ними задач. Авторы так же отмечают трансфер и на unseen задачи. Т.е. обещают свойства out of domain трансфера.
Интересное. Над пробнуть.
Forwarded from Refat Talks: Tech & AI
Есть ли простое локальное AI решение для конфиденциальных данных? Чтобы поставить на свой комп и оно просто работало.
За последний год+ сталкивался с тремя самыми популярными приложениями (c UI) для работы с локальными LLM: OpenWebUI, Msty, AnythingLLM. Все три позволяют работать как с локальными моделями, так и с подключаться к “облачным”, все три не просто чат, но с доступом к локальным файлам и знаниям. Каждое классное по-своему, но для разных задач и типов пользователей. Разберем что к чему.
Msty - красота и простота
Msty сразу цепляет интерфейсом. Это просто красиво сделанное десктопное приложение с фокусом на приватность. Ставишь, выбираешь модель и файлы и сразу работаешь.
Киллер-фичи:
- Самый простой и интуитивно понятный: вот тут качаешь модель, вот тут загружаешь “знания”
- Коннектор к Obsidian (кто пользуется - оценят)
- Delve Mode - кликаешь на любой термин в ответе AI и он разворачивает тему в отдельном чате. Плюс визуализация этих "ветвлений" в виде графа
- Multiverse Chats - можешь запускать несколько моделей одновременно в одном окне. Удобно для сравнения ответов.
- Встроенная библиотека промптов.
Минусы: закрытый код, для себя бесплатно, но платная коммерческая лицензия, ограниченная кастомизация.
AnythingLLM - швейцарский нож для документов
Если нужно работать с документами и строить knowledge base - AnythingLLM ваш выбор. Open source, MIT лицензия, бесплатный для всех.
Сильные стороны:
- Крутой RAG из коробки - загружаешь PDFs, DOCX, даже целые кодовые базы, и AI отвечает на основе этих данных
- AI-агенты с no-code билдером - можешь настроить автоматизацию задач вроде парсинга сайтов
- Встроенный OCR - сканирует текст даже с картинок
- Есть и десктопная версия, и Docker для совместной работы
- Есть API
- Недавно завезли MCP
Подводные камни: интерфейс немного топорный, сложнее настройка и надо чуть больше разбираться чтобы использовать по полной.
OpenWebUI - для гиков и разработчиков
Самое гибкое и расширяемое решение, симпатичное и функциональное. Если ты power user или разработчик - тебе сюда.
Что круто:
- Есть RAG, есть веб-поиск
- Есть даже интеграция с Google Drive (с заморочками, правда)
- Code Interpreter - модель может выполнять код прямо в чате для анализа данных
- Arena Mode для A/B тестирования разных моделей (как у Msty)
- Мощный OCR
- Гибкие права доступа
- Система функций и тулов - можешь подключать внешние API, создавать кастомные интеграции
- MCP и tool use
- API и целая экосистема вокруг
Но это веб-интерфейс, нужно разворачивать через Docker, и для новичков может быть сложновато. А еще потребуется установка ollama, ну в общем, если вы не знаете как работать с терминалом и докером, то будет сложно.
У них в роадмапе есть планы сделать это все в формате отдельного приложения и тогда OpenWebUI будет вне конкуренции.
Перед выбором определись с приоритетами:
- Просто нужно чтобы запустилось и работало - бери Msty
- Хочешь больше крутилок и нужны еще тулы и простые агенты - AnythingLLM
- OpenWebUI дает максимум гибкости, и он самый hackable
Не забывай про железо. Локальные модели жрут ресурсы. Приличные модели потребуют минимум 16GB RAM, лучше 32GB. И если есть нормальная видеокарта - модели будут работать в разы быстрее. Макбуки на M-чипах в этом плане показывают лучший баланс производительности.
Конечно же есть и другие альтернативы (поделитесь если пользовались сами)?
Интересна ли вообще тема локального AI "для себя"?
За последний год+ сталкивался с тремя самыми популярными приложениями (c UI) для работы с локальными LLM: OpenWebUI, Msty, AnythingLLM. Все три позволяют работать как с локальными моделями, так и с подключаться к “облачным”, все три не просто чат, но с доступом к локальным файлам и знаниям. Каждое классное по-своему, но для разных задач и типов пользователей. Разберем что к чему.
Msty - красота и простота
Msty сразу цепляет интерфейсом. Это просто красиво сделанное десктопное приложение с фокусом на приватность. Ставишь, выбираешь модель и файлы и сразу работаешь.
Киллер-фичи:
- Самый простой и интуитивно понятный: вот тут качаешь модель, вот тут загружаешь “знания”
- Коннектор к Obsidian (кто пользуется - оценят)
- Delve Mode - кликаешь на любой термин в ответе AI и он разворачивает тему в отдельном чате. Плюс визуализация этих "ветвлений" в виде графа
- Multiverse Chats - можешь запускать несколько моделей одновременно в одном окне. Удобно для сравнения ответов.
- Встроенная библиотека промптов.
Минусы: закрытый код, для себя бесплатно, но платная коммерческая лицензия, ограниченная кастомизация.
AnythingLLM - швейцарский нож для документов
Если нужно работать с документами и строить knowledge base - AnythingLLM ваш выбор. Open source, MIT лицензия, бесплатный для всех.
Сильные стороны:
- Крутой RAG из коробки - загружаешь PDFs, DOCX, даже целые кодовые базы, и AI отвечает на основе этих данных
- AI-агенты с no-code билдером - можешь настроить автоматизацию задач вроде парсинга сайтов
- Встроенный OCR - сканирует текст даже с картинок
- Есть и десктопная версия, и Docker для совместной работы
- Есть API
- Недавно завезли MCP
Подводные камни: интерфейс немного топорный, сложнее настройка и надо чуть больше разбираться чтобы использовать по полной.
OpenWebUI - для гиков и разработчиков
Самое гибкое и расширяемое решение, симпатичное и функциональное. Если ты power user или разработчик - тебе сюда.
Что круто:
- Есть RAG, есть веб-поиск
- Есть даже интеграция с Google Drive (с заморочками, правда)
- Code Interpreter - модель может выполнять код прямо в чате для анализа данных
- Arena Mode для A/B тестирования разных моделей (как у Msty)
- Мощный OCR
- Гибкие права доступа
- Система функций и тулов - можешь подключать внешние API, создавать кастомные интеграции
- MCP и tool use
- API и целая экосистема вокруг
Но это веб-интерфейс, нужно разворачивать через Docker, и для новичков может быть сложновато. А еще потребуется установка ollama, ну в общем, если вы не знаете как работать с терминалом и докером, то будет сложно.
У них в роадмапе есть планы сделать это все в формате отдельного приложения и тогда OpenWebUI будет вне конкуренции.
Перед выбором определись с приоритетами:
- Просто нужно чтобы запустилось и работало - бери Msty
- Хочешь больше крутилок и нужны еще тулы и простые агенты - AnythingLLM
- OpenWebUI дает максимум гибкости, и он самый hackable
Не забывай про железо. Локальные модели жрут ресурсы. Приличные модели потребуют минимум 16GB RAM, лучше 32GB. И если есть нормальная видеокарта - модели будут работать в разы быстрее. Макбуки на M-чипах в этом плане показывают лучший баланс производительности.
Конечно же есть и другие альтернативы (поделитесь если пользовались сами)?
Интересна ли вообще тема локального AI "для себя"?
Forwarded from Всеволод Викулин | AI разбор
Надеюсь, я не отбил у вас желание разбираться с LLM System Design. Если нет, то продолжаем.
Второй паттерн. Structured output
Вы выдаете желаемую JSON-схему ответа, LLM не может ее нарушить. Работает благодаря 2-м вещам:
1) Ваш формат конвертируется в грамматику. Генерация каждого следующего токена жестко ограничена этой грамматикой. Считайте, что работает регулярка на выходе модели.
2) Базовая модель дообучалась, чтобы понимать по схеме, что вообще от нее хотят.
Удобно задавать через библиотеку Pydantic. Вы просто программируете классы, Pydantic генерирует нужный json. Пример, когда LLM извлекает поля научной статьи:
Optional объясняет, что keywords может быть не у каждой статьи.
Почему важно
- Убирает боль неверных форматов. При условии, что мы все идем к тулам и агентам (подробнее в 3 паттерне), это супер важно.
- Улучшает прозрачность. Все понятно, что модель нашла , а что найти не смогла (там будет None)
- Самодокументация. Вы сами наложили спецификацию на формат данных, потом всем сильно проще будет разобраться в этом коде.
Structured Output и Reasoning
Никто не мешает вам совмещать Structured Output (SO) с рассуждающими моделями. Пусть они выводят свои рассуждения в отдельное (первое) поле:
Есть статьи, которые говорят, что это ломает рассуждающие способности. Решение: пробуйте 2 раза. Сначала рассуждайте без SO, потом извлейкайте ответ с SO (более простой моделью, конечно)
Литература для изучения
- Документация от OpenAI
- Волшебный доклад про Pydantic
- Подробнее про двойной подход в SO + Reasoning
- Туториал по SO для Langchain
Как обычно, любые вопросы жду в комментариях. Все полезные материалы буду помечать хештегом.
#llm_system_design
Второй паттерн. Structured output
Вы выдаете желаемую JSON-схему ответа, LLM не может ее нарушить. Работает благодаря 2-м вещам:
1) Ваш формат конвертируется в грамматику. Генерация каждого следующего токена жестко ограничена этой грамматикой. Считайте, что работает регулярка на выходе модели.
2) Базовая модель дообучалась, чтобы понимать по схеме, что вообще от нее хотят.
Удобно задавать через библиотеку Pydantic. Вы просто программируете классы, Pydantic генерирует нужный json. Пример, когда LLM извлекает поля научной статьи:
from pydantic import BaseModel
class ResearchPaperExtraction(BaseModel):
title: str
authors: list[str]
keywords: Optional[list[str]]
response = client.responses.parse(
model="gpt-4o-2024-08-06",
input=[...],
text_format=ResearchPaperExtraction,
)
Optional объясняет, что keywords может быть не у каждой статьи.
Почему важно
- Убирает боль неверных форматов. При условии, что мы все идем к тулам и агентам (подробнее в 3 паттерне), это супер важно.
- Улучшает прозрачность. Все понятно, что модель нашла , а что найти не смогла (там будет None)
- Самодокументация. Вы сами наложили спецификацию на формат данных, потом всем сильно проще будет разобраться в этом коде.
Structured Output и Reasoning
Никто не мешает вам совмещать Structured Output (SO) с рассуждающими моделями. Пусть они выводят свои рассуждения в отдельное (первое) поле:
class Step(BaseModel):
explanation: str
output: str
Есть статьи, которые говорят, что это ломает рассуждающие способности. Решение: пробуйте 2 раза. Сначала рассуждайте без SO, потом извлейкайте ответ с SO (более простой моделью, конечно)
Литература для изучения
- Документация от OpenAI
- Волшебный доклад про Pydantic
- Подробнее про двойной подход в SO + Reasoning
- Туториал по SO для Langchain
Как обычно, любые вопросы жду в комментариях. Все полезные материалы буду помечать хештегом.
#llm_system_design