В век больших моделей, когда не каждая домохозяйка может на своей микроволновке 3090 запустить нормально модный LLM для обучения или инференса, приходится прибегать к нескольким микроволновкам GPU. И тут на рынке, конечно, есть уже и deep speed и horovod. Однако хочется поддержать наших ребят из ШАД, которые сделали свою либу для работы с torch, HF в MultiGPU inference and training.
Поэтому выложу ссылочку сюда, а вы потестите, расскажите своё мнение и передадите дальше.
https://github.com/BlackSamorez/tensor_parallel
Поэтому выложу ссылочку сюда, а вы потестите, расскажите своё мнение и передадите дальше.
https://github.com/BlackSamorez/tensor_parallel
GitHub
GitHub - BlackSamorez/tensor_parallel: Automatically split your PyTorch models on multiple GPUs for training & inference
Automatically split your PyTorch models on multiple GPUs for training & inference - BlackSamorez/tensor_parallel
👍10👎1🤮1
RLHF-critic for efficient sentence embeddings.
В первом своëм разборе про InstructOR обещал рассказать об RL-critic подходе для улучшения retrieval диалоговой системы. В принципе, данный подход можно применять и в любых иных задачах, базирующихся на metric/contrastive learning. А теперь к делу.
Все уже наслышаны про RLHF подход, который якобы даёт улучшение в обучении ChatGPT. Вот и мне было интересно, насколько такой метод обучения/улучшения моделей может быть применим не генеративным моделям, а например классическим поисковым. Рассматривал, естественно свои задачи по ведению диалога.
Что сделал:
1.Взял условно надёжный сет разметки от нашей редакции с пометкой хороший/плохой (порядка 25тыс. диалогов).
2. Обучил на этом модель критика, которая по контексту и ответу определяет релевантность такого сетапа. Пока по-простому, взяв за метрику качества AUC.
3. Зафризил модельку критика и поставил её рядом с нашей core моделькой в е2е пайп обучения.
Напомню, что у нас multitasking.
4. Взял большой сет диалогов, которые были получены с логов, написаны редакцией, скрапингом, ru_open_subtitles и тп. Естественно без разметки на good/bad.
5. Далее врубил обучение на задаче поиска контексту (у нас это 6 реплик) релевантного ответа, путём решения задачи metric learning: сводим вектор контекста с ответами для существующих диалогов, разводим для случайных сэмплированных фраз.
При этом, тут мы и врубаем RL-critic. И самое сладкое как. Мы можем:
А. Использовать просто его как ранкер.
Б. Считать мат.ожидание на батче от relevance score критика, т.е. классик путь PPO.
В. Прокинуть скор в лосс напрямую.
Первый вариант, был бы ок на инференс. Второй , интересно, но нужно придумать PPO.
Третий вариант простой и с него-то и начнём. Идея состоит в том, чтобы докинуть в наш triplet_loss доп штраф за релевантность по мнению критика. Почему штраф? Да потому, что для хороших пар запрос контекст я хочу их подвигать к друг-другу ближе, а негативы отодвигать дальше. Тк у нас есть фикс margin, а теперь ещё и динамическая прибавка, мы получаем, что для каждого триплета у нас будет нечеткая граница от margin и выше. Так мы сможем ранжировать более лучшие позитивы ближе к контексту, а худшие дальше. Тем самым мы передаем свойства ранкинга между собой даже у релевантных ответов.
Лосс до:
max(0, sim(ctxt, resp_neg) -sim(ctxt, resp_pos) + margin)
После:
max(0, sim(ctxt, resp_neg) -sim(ctxt, resp_pos) + (rl_score+1)*margin)
Замеры качества ведём на recall@K. Кроме лосса в архитектуре модели и сэмплирования ничего не меняем.
Что в итоге?
На первой эпохе получаем сразу прирост: recall@10 до 0.127, после 0.393. На последующих gap уменьшается, но сохраняется в среднем разрыв на 6-8 процентных пунктов.
Что дальше?
Следом попробую провести эксперименты по чистому PPO. А пока буду наблюдать за метриками текущего эксперимента, писать свой PPO и держать Вас в курсе.
В первом своëм разборе про InstructOR обещал рассказать об RL-critic подходе для улучшения retrieval диалоговой системы. В принципе, данный подход можно применять и в любых иных задачах, базирующихся на metric/contrastive learning. А теперь к делу.
Все уже наслышаны про RLHF подход, который якобы даёт улучшение в обучении ChatGPT. Вот и мне было интересно, насколько такой метод обучения/улучшения моделей может быть применим не генеративным моделям, а например классическим поисковым. Рассматривал, естественно свои задачи по ведению диалога.
Что сделал:
1.Взял условно надёжный сет разметки от нашей редакции с пометкой хороший/плохой (порядка 25тыс. диалогов).
2. Обучил на этом модель критика, которая по контексту и ответу определяет релевантность такого сетапа. Пока по-простому, взяв за метрику качества AUC.
3. Зафризил модельку критика и поставил её рядом с нашей core моделькой в е2е пайп обучения.
Напомню, что у нас multitasking.
4. Взял большой сет диалогов, которые были получены с логов, написаны редакцией, скрапингом, ru_open_subtitles и тп. Естественно без разметки на good/bad.
5. Далее врубил обучение на задаче поиска контексту (у нас это 6 реплик) релевантного ответа, путём решения задачи metric learning: сводим вектор контекста с ответами для существующих диалогов, разводим для случайных сэмплированных фраз.
При этом, тут мы и врубаем RL-critic. И самое сладкое как. Мы можем:
А. Использовать просто его как ранкер.
Б. Считать мат.ожидание на батче от relevance score критика, т.е. классик путь PPO.
В. Прокинуть скор в лосс напрямую.
Первый вариант, был бы ок на инференс. Второй , интересно, но нужно придумать PPO.
Третий вариант простой и с него-то и начнём. Идея состоит в том, чтобы докинуть в наш triplet_loss доп штраф за релевантность по мнению критика. Почему штраф? Да потому, что для хороших пар запрос контекст я хочу их подвигать к друг-другу ближе, а негативы отодвигать дальше. Тк у нас есть фикс margin, а теперь ещё и динамическая прибавка, мы получаем, что для каждого триплета у нас будет нечеткая граница от margin и выше. Так мы сможем ранжировать более лучшие позитивы ближе к контексту, а худшие дальше. Тем самым мы передаем свойства ранкинга между собой даже у релевантных ответов.
Лосс до:
max(0, sim(ctxt, resp_neg) -sim(ctxt, resp_pos) + margin)
После:
max(0, sim(ctxt, resp_neg) -sim(ctxt, resp_pos) + (rl_score+1)*margin)
Замеры качества ведём на recall@K. Кроме лосса в архитектуре модели и сэмплирования ничего не меняем.
Что в итоге?
На первой эпохе получаем сразу прирост: recall@10 до 0.127, после 0.393. На последующих gap уменьшается, но сохраняется в среднем разрыв на 6-8 процентных пунктов.
Что дальше?
Следом попробую провести эксперименты по чистому PPO. А пока буду наблюдать за метриками текущего эксперимента, писать свой PPO и держать Вас в курсе.
👍9🔥4
Мои дорогие други открыли Yet another community для DS! Присоединяйтесь)
З. Ы. Ссылос ниже👇
З. Ы. Ссылос ниже👇
❤4
Forwarded from Love. Death. Transformers.
Я тут недавно зашел посмотреть насколько живой одс и сильно расстроился - он скорее мертв чем жив, а значит пора начинать делать что то свое. Мы с несколькими знакомыми решили стартануть better data community, своего рода флудилка - свалка по интересам для DSов и сочуствующих.
Инвайт:
https://t.me/+eB60Ru4Geqw4Mzky
Инвайт:
https://t.me/+eB60Ru4Geqw4Mzky
👍7❤6💩2
Классный пост от Ильи об хайпе вокруг современных LLM. В своих прошлых постах я говорил о контроле и достоверности, в данной статье есть и об этом тоже, но ещё и вопросы выч. ресурсов, скорости внедрения и много другое. Бегом читать! 👇😼
Forwarded from Love. Death. Transformers.
Тут Илья Гусев специально для @betterdatacommunity сделал пост про генеративный ai на хабр, г о д н о
habr
habr
Хабр
О «раздутом пузыре» нейросетей
На днях я наткнулся на одно любопытное видео: Моей первой реакцией было Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще? отрицание и...
💩4👍3🤔3
Вот и прошли выходные. Вести с полей. Держу в курсе по эксперименту с RL-critic. Видеокарта плавилась, пыхтела, как могла, но терпела и вот наконец-то сошлось. Итого у нас recall@k 0.82 . До было recall@K 0.8. При этом, старые эксперименты мы делали на horovod на 3-4 видеокарты. Тут эксперимент залез на сингл карту того же класса, да ещё и 2 модели критик и ретривал, мы имеем сходимость к той же метрике:
А. Быстрее.
Б. Меньше денег на обучение.
В общем, попробуйте - мой рекомендасьон. Ещё осталось конечно замерить всякие е2е метрики а-ля SSA/Respect и понять на сколько улучшилось прод поведение в разрезе: релевантность и специфичность, длина сессии и тп.
А. Быстрее.
Б. Меньше денег на обучение.
В общем, попробуйте - мой рекомендасьон. Ещё осталось конечно замерить всякие е2е метрики а-ля SSA/Respect и понять на сколько улучшилось прод поведение в разрезе: релевантность и специфичность, длина сессии и тп.
🔥9👍2
Ты че, пёс!? Это ж бл* гроккинг!!
https://github.com/Sea-Snell/grokking
Фото взято с https://t.me/rlabrats/3067
https://github.com/Sea-Snell/grokking
Фото взято с https://t.me/rlabrats/3067
😁16
Остаётся вопрос в тарифах на интеграцию с ChatGPT 🤔 👇
UPD.
А вот и прайсы.
"Price are 0.002$ per 1,000 tokens. You can think of tokens as pieces of words, where 1,000 tokens is about 750 words. This paragraph is 35 tokens."
UPD.
А вот и прайсы.
"Price are 0.002$ per 1,000 tokens. You can think of tokens as pieces of words, where 1,000 tokens is about 750 words. This paragraph is 35 tokens."
Forwarded from эйай ньюз
Как я уже упоминал, OpenAI пытается позиционировать себя как продавец API к своим жирным SOTA моделям, ведь продукта то у них никакого нет.
Так вот сегодня они наконец открыли публичный API к своим ChatGPT и Whisper (распознавалка речи). Конечно, это не бесплатно. Но теперь любой может встроить AI-бота в свое приложение без усилий.
Одним из первых подсуетился Snap и уже запилил AI-друга для всех скучающих в Снэпчате. С ним можно поболтать, когда чувствуешь себя одиноко. Видимо с живыми пользователями в Снэпчате не очень 🌚
Так вот сегодня они наконец открыли публичный API к своим ChatGPT и Whisper (распознавалка речи). Конечно, это не бесплатно. Но теперь любой может встроить AI-бота в свое приложение без усилий.
Одним из первых подсуетился Snap и уже запилил AI-друга для всех скучающих в Снэпчате. С ним можно поболтать, когда чувствуешь себя одиноко. Видимо с живыми пользователями в Снэпчате не очень 🌚
Telegram
эйай ньюз
🔥OpenAI выпустили новую улучшенную Text Embedding Model: text-embedding-ada-002
1. Во первых, эта модель объединяет в себе возможности 5 старых моделей. Умеет искать текст, код, вычислять похожесть предложений и классифицировать текст:
✔️ text-similarity…
1. Во первых, эта модель объединяет в себе возможности 5 старых моделей. Умеет искать текст, код, вычислять похожесть предложений и классифицировать текст:
✔️ text-similarity…
❤7
RETRO больше не нужен! Говорят ,теперь можно делать мультимодальные инъекции прямо в generative модель.
А действительно, теперь в HF transformers появилась возможность вставлять эмбеды вашей любимой энкодер модели из любой модальности, без регистрации, кросс-энкодеров RETRO-style и смс. Но хорошо бы с дотюном.
Ух... Заживём!!!
За источники спасибо: @AlexWortega, @razzant
А действительно, теперь в HF transformers появилась возможность вставлять эмбеды вашей любимой энкодер модели из любой модальности, без регистрации, кросс-энкодеров RETRO-style и смс. Но хорошо бы с дотюном.
Ух... Заживём!!!
За источники спасибо: @AlexWortega, @razzant
Google DeepMind
Artificial intelligence could be one of humanity’s most useful inventions. We research and build safe artificial intelligence systems. We're committed to solving intelligence, to advance science...
👍5
Что делать с длинными текстами, если не хочешь заводить свой longformer и тп.? Лайфхак.
За появление идеи и мысли об этом спасибо @DmitrySimakov.
Итак, мы как-то в своём докладе, рассказывали о том, как делаем эмбеддинги диалога. По-простому, мы берём кидаем наш контекст длинною К последних реплик (у нас память равна 6) в sentence transformer. Получаем К векторов фраз диалога. Далее их кормим в классик трансформер, который, по-своему, attentive перевзвешивает наши вектора диалога с учётом важности их для последующего вектора ответа. Далее берём в качестве эмбеддинга диалога последний sentence-token вектор. Почему его? Да потому, что в нём лежит информация о последней фразе перед ответом, attentive взвешенная относительно всех предыдущих фраз. Во-первых она помнит текущее состояние, во-вторых всю предыдущую историю контекста. Да, мы пытались брать просто mean-pool по выходам классик трансформера, но это драматически крашило метрики поиска релевантного ответа.
В общем, к чему это я. А теперь представьте, что мы нарезаем наш длинный (больше max seq len) запрос/текст. На такие вот фразы контекста, без перекрытия, просто окном. Далее кормим это по такой же схеме sbert, а затем классик трансформеру. Пусть он сам разберётся, что из этого длинного контекста ему важно, ну а далее подаëм это добро уже в наш MLP или что там у Вас. У нас там, например, мои любимые contrastive штуки;)
Итак, схема ниже. У нас работает, попробуйте и Вы. И дайте знать как оно? А то у меня столько экспериментов в плане, что до этого ещё не скоро доползу...
За появление идеи и мысли об этом спасибо @DmitrySimakov.
Итак, мы как-то в своём докладе, рассказывали о том, как делаем эмбеддинги диалога. По-простому, мы берём кидаем наш контекст длинною К последних реплик (у нас память равна 6) в sentence transformer. Получаем К векторов фраз диалога. Далее их кормим в классик трансформер, который, по-своему, attentive перевзвешивает наши вектора диалога с учётом важности их для последующего вектора ответа. Далее берём в качестве эмбеддинга диалога последний sentence-token вектор. Почему его? Да потому, что в нём лежит информация о последней фразе перед ответом, attentive взвешенная относительно всех предыдущих фраз. Во-первых она помнит текущее состояние, во-вторых всю предыдущую историю контекста. Да, мы пытались брать просто mean-pool по выходам классик трансформера, но это драматически крашило метрики поиска релевантного ответа.
В общем, к чему это я. А теперь представьте, что мы нарезаем наш длинный (больше max seq len) запрос/текст. На такие вот фразы контекста, без перекрытия, просто окном. Далее кормим это по такой же схеме sbert, а затем классик трансформеру. Пусть он сам разберётся, что из этого длинного контекста ему важно, ну а далее подаëм это добро уже в наш MLP или что там у Вас. У нас там, например, мои любимые contrastive штуки;)
Итак, схема ниже. У нас работает, попробуйте и Вы. И дайте знать как оно? А то у меня столько экспериментов в плане, что до этого ещё не скоро доползу...
YouTube
Александр Абрамов | Современные методы обучения Retrieval Based моделей для ведения диалогов
Страница трека : https://ods.ai/tracks/nlp-df2022
Data Fest Online 3 : https://ods.ai/events/datafestonline2022
Наши соц.сети:
Telegram: https://t.me/datafest
Вконтакте: https://vk.com/datafest
Data Fest Online 3 : https://ods.ai/events/datafestonline2022
Наши соц.сети:
Telegram: https://t.me/datafest
Вконтакте: https://vk.com/datafest
🔥12❤1
Мой опыт metric learning losses.
Уже несколько раз ко мне приходили за советом, как лучше готовить sentence transformer для вот этого Kaggle competition.
Мой топ losses:
1. Cross entropy margin loss. Особенно с вариацией full_batching, когда негативы майнятся сразу с батча. Привожу сразу свой доклад про наш sbert и там прекрасно этот лось описан. Важная особенность, что мы не нормируем эмбединги юзаем maxDotProd подход, как в ScaNN.
2. ArcLoss или ArcFace. Тут сопоставимые метрики можно достичь на retrieval тасках, но придётся попотеть с параметрами M и S. Угловой зазор и температура/масштаб сглаживания соответственно.
3/4. SoftMax loss и AdaptiveMargin loss. Примерно одинаковые по импакту на метрики retrieval тасок. При этом AM loss ещё зовут иногда CosFace.
Ниже приведу картинки лосей + метрики тасок которые я для вас замерил проведя обучение на каждом из лосей своего sbert.
Эксперимент:
Для обучения нашей модели мы используем набор данных Stanford Natural Language Inference, содержащий пары предложений с метками, которые указывают на следствие («entailment»), противоречие («contradiction») или отсутствие смысловой связи («neutral») между предложениями. Для этих данных на базе модели BERT мы выучим такое векторное представление, что сходство между соответствующими парами предложений будет больше, чем сходство между противоречащими или нейтральными по отношению друг к другу.
Для замеров используем. Ранговая корреляция Спирмена ρ × 100 между косинусной близостью векторов предложений и метками для различных задач Textual Similarity (STS). STS12-STS16: SemEval 2012-2016, STSb: STS-benchmark, SICK-R: SICK Relatedness dataset.
Уже несколько раз ко мне приходили за советом, как лучше готовить sentence transformer для вот этого Kaggle competition.
Мой топ losses:
1. Cross entropy margin loss. Особенно с вариацией full_batching, когда негативы майнятся сразу с батча. Привожу сразу свой доклад про наш sbert и там прекрасно этот лось описан. Важная особенность, что мы не нормируем эмбединги юзаем maxDotProd подход, как в ScaNN.
2. ArcLoss или ArcFace. Тут сопоставимые метрики можно достичь на retrieval тасках, но придётся попотеть с параметрами M и S. Угловой зазор и температура/масштаб сглаживания соответственно.
3/4. SoftMax loss и AdaptiveMargin loss. Примерно одинаковые по импакту на метрики retrieval тасок. При этом AM loss ещё зовут иногда CosFace.
Ниже приведу картинки лосей + метрики тасок которые я для вас замерил проведя обучение на каждом из лосей своего sbert.
Эксперимент:
Для обучения нашей модели мы используем набор данных Stanford Natural Language Inference, содержащий пары предложений с метками, которые указывают на следствие («entailment»), противоречие («contradiction») или отсутствие смысловой связи («neutral») между предложениями. Для этих данных на базе модели BERT мы выучим такое векторное представление, что сходство между соответствующими парами предложений будет больше, чем сходство между противоречащими или нейтральными по отношению друг к другу.
Для замеров используем. Ранговая корреляция Спирмена ρ × 100 между косинусной близостью векторов предложений и метками для различных задач Textual Similarity (STS). STS12-STS16: SemEval 2012-2016, STSb: STS-benchmark, SICK-R: SICK Relatedness dataset.
Kaggle
Learning Equality - Curriculum Recommendations
Enhance learning by matching K-12 content to target topics
🔥9👍6❤3❤🔥1