Сегодня прилетело на почту письмо от проекта Ollama, в нём было сказано, что модели для эмбеддинга теперь официально поддерживаются (подробности).
Есть несколько моделей под эти задачи заточенные, но самые любопытные это:
- mxbai-embed-large - так как у неё больше всего параметров (334M) при этом контекст всего 512 токенов
- nomic-embed-text - имеет всего 137M параметров, но при этом размер контекста 8к токенов и разные dimensions от 64 до 768 элементов
- all-minilm - крохотулька на 23M параметров, обычная sbert модель
Ещё бы в репозиторий модель multilingual-e5-large добавить и было бы совсем хорошо.
Чтобы начать использовать эмбеддинги нужно для начала обновить ollama, затем скачать нужную модель:
После чего можно делать инференс:
Полагаю указанные модели будут плохо работать с русским языком, но вечерком это проверю.
Есть несколько моделей под эти задачи заточенные, но самые любопытные это:
- mxbai-embed-large - так как у неё больше всего параметров (334M) при этом контекст всего 512 токенов
- nomic-embed-text - имеет всего 137M параметров, но при этом размер контекста 8к токенов и разные dimensions от 64 до 768 элементов
- all-minilm - крохотулька на 23M параметров, обычная sbert модель
Ещё бы в репозиторий модель multilingual-e5-large добавить и было бы совсем хорошо.
Чтобы начать использовать эмбеддинги нужно для начала обновить ollama, затем скачать нужную модель:
ollama pull mxbai-embed-text
После чего можно делать инференс:
curl http://localhost:11434/api/embeddings -d '{
"model": "nomic-embed-text",
"prompt": "The sky is blue because of Rayleigh scattering"
}'Полагаю указанные модели будут плохо работать с русским языком, но вечерком это проверю.
Ollama
Embedding models· Ollama Blog
Embedding models are available in Ollama, making it easy to generate vector embeddings for use in search and retrieval augmented generation (RAG) applications.
🔥7👍1
Прочёл давеча публикацию под названием "OmniFusion 1.1: мультимодальность теперь и на русском", в ней шла речь про обновление модели OmniFusion, которая была впервые анонсирована в прошлом году на конференции AIJ, данная модель примечательна тем, что является мультимодальной моделью и по словам и продемонстрированным примерам авторов неплохо отвечает на русском языке.
В публикации на Хабр можно почитать выжимку, а на arXiv 2404.06212 будет чуть более подробная техническая информация о модели.
Самая на мой скромный взгляд интересная особенность модели OmniFusion 1.1 в том, что её специально обучали преобразовывать изображения с математическими формулами в код LaTeX (смотри страницу 7), что на мой скромный взгляд может очень пригодится при создании RAG на базе langchain для общения с публикациями на arXiv (через соответствующий ретривер) и/или РИНЦ и т.д. в остальном же она сделана по канонам мультимодальных моделей.
Немного разочаровало, что не был использован подход MoE (Mixture of Experts), полагаю его применят в следующей итерации модели, ещё в публикации на Хабре не указано, что модель основана на базе Mistral 7B, а размер контекста модели равен 32k токенам (подробнее тут).
Веса модели доступны на HuggingFace, а исходники скриптов инференса и ручного дообучения на GitHub, в общем отличная игрушка на вечер :)
ЗЫ. Подписывайтесь на канал моего бота @habr_ai который репостит статьи с Хабра из хабов ИИ и ML.
В публикации на Хабр можно почитать выжимку, а на arXiv 2404.06212 будет чуть более подробная техническая информация о модели.
Самая на мой скромный взгляд интересная особенность модели OmniFusion 1.1 в том, что её специально обучали преобразовывать изображения с математическими формулами в код LaTeX (смотри страницу 7), что на мой скромный взгляд может очень пригодится при создании RAG на базе langchain для общения с публикациями на arXiv (через соответствующий ретривер) и/или РИНЦ и т.д. в остальном же она сделана по канонам мультимодальных моделей.
Немного разочаровало, что не был использован подход MoE (Mixture of Experts), полагаю его применят в следующей итерации модели, ещё в публикации на Хабре не указано, что модель основана на базе Mistral 7B, а размер контекста модели равен 32k токенам (подробнее тут).
Веса модели доступны на HuggingFace, а исходники скриптов инференса и ручного дообучения на GitHub, в общем отличная игрушка на вечер :)
ЗЫ. Подписывайтесь на канал моего бота @habr_ai который репостит статьи с Хабра из хабов ИИ и ML.
Хабр
OmniFusion 1.1: мультимодальность теперь и на русском
В прошлом году на конференции AIJ 2023 мы представили первую версию OmniFusion — мультимодальной языковой модели (LLM), способной поддерживать визуальный диалог и отвечать на вопросы по картинкам....
👍6
Вчера Илья Гусев зарелизил новую версию Saiga на базе недавно вышедшей LLaMA 3
Telegram
Старший Авгур
https://huggingface.co/IlyaGusev/saiga_llama3_8b
Обучал unsloth'ом чуть больше часа на RTX 4090. Сейчас ещё поставил обучение старым кодом. Особо не тыкал, по тестовым промптам вполне неплохо. GGUF будет, но завтра.
Обучал unsloth'ом чуть больше часа на RTX 4090. Сейчас ещё поставил обучение старым кодом. Особо не тыкал, по тестовым промптам вполне неплохо. GGUF будет, но завтра.
🔥10
В субботу решил попробовать проект TorchTune, который зарелизили вот буквально на днях те же human beings которые разрабатывают PyTorch.
Сложно описать словами насколько приятно работать с данным проектом, благодаря ему всё обучение грубо говоря сводится к описанию YAML-конфига и запуску бинарника.
В библиотеке предусмотрено несколько готовых моделей (пока что их немного), утилита сама скачает нужный датасет, сконвертирует его в необходимый формат (instruct или chat) после чего запустит обучение в желаемом режиме (full, lora или qlora). После обучения модель можно квантизировать и сразу выгрузить на HuggingFace, и всё при помощи одного конфига.
Ну и в общем наигравшись с минизадачками решил при его помощи воплотить в жизнь одну свою давнюю мечту ;) подробности постараюсь предоставить в течении недели, ещё много подготовительных шагов нужно пройти до релиза.
PS. Резюмируя, мне кажется, что постепенно большинство перейдут на TorchTune, так что рекомендую не тянуть с его изучением, пока проект ещё очень простой.
Сложно описать словами насколько приятно работать с данным проектом, благодаря ему всё обучение грубо говоря сводится к описанию YAML-конфига и запуску бинарника.
В библиотеке предусмотрено несколько готовых моделей (пока что их немного), утилита сама скачает нужный датасет, сконвертирует его в необходимый формат (instruct или chat) после чего запустит обучение в желаемом режиме (full, lora или qlora). После обучения модель можно квантизировать и сразу выгрузить на HuggingFace, и всё при помощи одного конфига.
Ну и в общем наигравшись с минизадачками решил при его помощи воплотить в жизнь одну свою давнюю мечту ;) подробности постараюсь предоставить в течении недели, ещё много подготовительных шагов нужно пройти до релиза.
PS. Резюмируя, мне кажется, что постепенно большинство перейдут на TorchTune, так что рекомендую не тянуть с его изучением, пока проект ещё очень простой.
🔥19👍4
Всем привет! Хочу поделиться с вами ссылкой на мою свежую статью на Хабре под названием "Обучение модели токсификации текстов с помощью TorchTune, подробное руководство".
В этом гайде я подробно разбираю процесс подготовки "токсичного" датасета и шаги обучения нейросети, которая превращает обычные русскоязычные тексты в "токсичные".
Полезные ссылки:
- EvilFreelancer/toxicator-ru - исходные коды на GitHub
- evilfreelancer/llama2-7b-toxicator-ru - веса модели на HuggingFace
- evilfreelancer/toxicator-ru - датасет, тоже на HuggingFace
Протестировал модель на 100 примерах из dev сплита датасета токсикатора.
Желаю вам приятного чтения и продуктивного дня!
#habr #ai #gpt #llama
В этом гайде я подробно разбираю процесс подготовки "токсичного" датасета и шаги обучения нейросети, которая превращает обычные русскоязычные тексты в "токсичные".
Полезные ссылки:
- EvilFreelancer/toxicator-ru - исходные коды на GitHub
- evilfreelancer/llama2-7b-toxicator-ru - веса модели на HuggingFace
- evilfreelancer/toxicator-ru - датасет, тоже на HuggingFace
Протестировал модель на 100 примерах из dev сплита датасета токсикатора.
Желаю вам приятного чтения и продуктивного дня!
#habr #ai #gpt #llama
Хабр
Обучение модели токсификации текстов с помощью TorchTune, подробное руководство
Приветствую, хабровчане! Сегодня пятница, поэтому предлагаю немного пошалить и поговорить о слегка необычном, но весьма забавном проекте обучения нейросетевой модели на базе LLaMA 2 7B , которая умеет...
👍16🔥7👏3⚡1
Мне что-то так понравилось работать с утилитой TorchTune, что я решил добавить в неё фичу, которая мне была очень нужна на этапе обучения модели "токсикатора", в частности мне очень недоставало возможности передавать на вход тренировки модели несколько датестов. Решил не дожидаться, когда кто-то это сделает и добавил возможность сам.
Вот так можно указывать датасет на данный момент:
А мой фикс добавит возможность делать так:
Аналогично и для компонента
ЗЫ. Единственный момент который важно учитывать заключается в том что формат всех датасетов передаваемых в массиве должен быть идентичным.
Вот так можно указывать датасет на данный момент:
dataset:
_component_: torchtune.datasets.instruct_dataset
source: tatsu-lab/alpaca
А мой фикс добавит возможность делать так:
dataset:
_component_: torchtune.datasets.instruct_dataset
source:
- tatsu-lab/alpaca
- vicgalle/alpaca-gpt4
Аналогично и для компонента
torchtune.datasets.chat_dataset.ЗЫ. Единственный момент который важно учитывать заключается в том что формат всех датасетов передаваемых в массиве должен быть идентичным.
GitHub
Feat: Add support of multiple datasets in config by EvilFreelancer · Pull Request #889 · pytorch/torchtune
…uctors
Context
What is the purpose of this PR? Is it to
add a new feature
fix a bug
update tests and/or documentation
other (please add here)
Please link to any issues this PR addresses.
Cha...
Context
What is the purpose of this PR? Is it to
add a new feature
fix a bug
update tests and/or documentation
other (please add here)
Please link to any issues this PR addresses.
Cha...
👍6👌3🐳2
В общем продолжается история с моим Pull Request в репозиторий TorchTune, к его ревью подключился ведущий разработчик проекта и дал ряд советов, в частности он предложил вместо поля
То есть раньше было так:
А теперь можно будет делать так:
Как видите я тут смиксовал датасет типа Alpaca Instruct и датасет типа LLaMA2 Chat (который на самом деле OpenAI Chat).
Короче жду что ответит мейнтейнер и судя по всему, спустя ещё несколько раундов правок, мой PR таки примут :)
source обрабатывать массив в поле dataset, то есть в этом поле можно будет указать произвольное количество датасетов различных типов, каждый со своим преобразованием и настройками, после чего система выполнит их слияние и преобразование.То есть раньше было так:
dataset:
_component_: torchtune.datasets.instruct_dataset
source: tatsu-lab/alpaca
template: AlpacaInstructTemplate
split: train
seed: null
shuffle: True
А теперь можно будет делать так:
dataset:
- _component_: torchtune.datasets.instruct_dataset
source: vicgalle/alpaca-gpt4
template: AlpacaInstructTemplate
split: train
train_on_input: True
- _component_: torchtune.datasets.chat_dataset
source: ajibawa-2023/Code-290k-ShareGPT
conversation_style: sharegpt
chat_format: Llama2ChatFormat
max_seq_len: 1024
split: train
seed: null
shuffle: True
Как видите я тут смиксовал датасет типа Alpaca Instruct и датасет типа LLaMA2 Chat (который на самом деле OpenAI Chat).
Короче жду что ответит мейнтейнер и судя по всему, спустя ещё несколько раундов правок, мой PR таки примут :)
GitHub
Feat: Add support of multiple datasets in config by EvilFreelancer · Pull Request #889 · pytorch/torchtune
…uctors
Context
What is the purpose of this PR? Is it to
add a new feature
fix a bug
update tests and/or documentation
other (please add here)
Please link to any issues this PR addresses.
Cha...
Context
What is the purpose of this PR? Is it to
add a new feature
fix a bug
update tests and/or documentation
other (please add here)
Please link to any issues this PR addresses.
Cha...
👍10👏5
Сегодня впервые в жизни я стал обладателем профессиональной серверной двухпроцессорной материнской платы.
Раньше я сталкивался с подобным железом только по работе, но вот спустя столько лет смог завести столь прелестного питомца дома :)
Модель: Supermicro X9DRI-LN4F+
Процессоры: 2x Intel Xeon E5-2690 v2 - 10 ядер в каждом, частота 3Ггц
Оперативки: 128Гб, 16 модулей по 8Гб каждый
Пока что в этой крохе будет стоять RTX 3050, но лиха беда начало, платформа есть, а дальше просто буду докупать карточки.
PS. К сожалению материнская плата не влезает в мой корсаровcкий корпус, ибо она E-ATX, так что придется ещё немного потратиться на коробочку подходящую.
#server
Раньше я сталкивался с подобным железом только по работе, но вот спустя столько лет смог завести столь прелестного питомца дома :)
Модель: Supermicro X9DRI-LN4F+
Процессоры: 2x Intel Xeon E5-2690 v2 - 10 ядер в каждом, частота 3Ггц
Оперативки: 128Гб, 16 модулей по 8Гб каждый
Пока что в этой крохе будет стоять RTX 3050, но лиха беда начало, платформа есть, а дальше просто буду докупать карточки.
PS. К сожалению материнская плата не влезает в мой корсаровcкий корпус, ибо она E-ATX, так что придется ещё немного потратиться на коробочку подходящую.
#server
❤15👍5🔥1
Pavel Zloi
Сегодня впервые в жизни я стал обладателем профессиональной серверной двухпроцессорной материнской платы. Раньше я сталкивался с подобным железом только по работе, но вот спустя столько лет смог завести столь прелестного питомца дома :) Модель: Supermicro…
Ну в общем удалось собрать сервер в одну коробочку, в качестве корпуса нашёл на Авито вариант для сбора майнинговой фермы (судя по всему это корпус Cryptone на 4x видеокарты, и судя по "качеству" производитель этого корпуса до майнинговой лихорадки выпускал жестяные мангалы), данный корпус мне понравился прежде всего тем, что я купил его за 2тр и что автор в довесок к нему отдал мне несколько райзеров (к сожалению с x16 на x1, так что для нейросетей не самый лучший вариант).
Сам по себе корпус имеет "два уровня", на первом должна по идее располагаться материнская плата, но к сожалению оказалось, что у моей материнки панель ввода-вывода для подключения периферии слегка сдвинута ближе к центру, но я бы закрыл на это глаза, выкрутил бы заднюю крышку да и дело с концом. Однако, оказалось, что технологические отверстия (куда вкручиваются болтики дабы закрепить материнку внутри) опять же рассчитаны на десктопные материнки, поэтому мать надо было двигать вглубь и заодно просверливать новые отверстия (чего прямо сейчас мне делать не хотелось, но этим я как-нибудь в другой раз займусь). Ну и самое главное, мне хотелось использовать мою малютку RTX 3050 через шину PCI-E x16, а при монтаже материнки на "первом этаже" крепления для видеокарт отсутствуют, так как в майнинговой ферме предполагается, что всё на райзерах, но как я упомянул выше разеры у меня только на x1.
Короче пришлось ставить материнку на "втором этаже", там отверстий тоже не было подходящих, так что я проклеил по периметру и по центру ножки от дивана :) чтобы материнка не соприкасалась с корпусом и лежала на нескользящей диэлектрической поверхности. Плюс на "втором этаже" получилось (после небольших модификаций) поставить видекарту напрямую в слот PCI-E и прикрутить к корпусной рейке.
#server
Сам по себе корпус имеет "два уровня", на первом должна по идее располагаться материнская плата, но к сожалению оказалось, что у моей материнки панель ввода-вывода для подключения периферии слегка сдвинута ближе к центру, но я бы закрыл на это глаза, выкрутил бы заднюю крышку да и дело с концом. Однако, оказалось, что технологические отверстия (куда вкручиваются болтики дабы закрепить материнку внутри) опять же рассчитаны на десктопные материнки, поэтому мать надо было двигать вглубь и заодно просверливать новые отверстия (чего прямо сейчас мне делать не хотелось, но этим я как-нибудь в другой раз займусь). Ну и самое главное, мне хотелось использовать мою малютку RTX 3050 через шину PCI-E x16, а при монтаже материнки на "первом этаже" крепления для видеокарт отсутствуют, так как в майнинговой ферме предполагается, что всё на райзерах, но как я упомянул выше разеры у меня только на x1.
Короче пришлось ставить материнку на "втором этаже", там отверстий тоже не было подходящих, так что я проклеил по периметру и по центру ножки от дивана :) чтобы материнка не соприкасалась с корпусом и лежала на нескользящей диэлектрической поверхности. Плюс на "втором этаже" получилось (после небольших модификаций) поставить видекарту напрямую в слот PCI-E и прикрутить к корпусной рейке.
#server
Pavel Zloi
Ну в общем удалось собрать сервер в одну коробочку, в качестве корпуса нашёл на Авито вариант для сбора майнинговой фермы (судя по всему это корпус Cryptone на 4x видеокарты, и судя по "качеству" производитель этого корпуса до майнинговой лихорадки выпускал…
С радиаторами и вентиляторами заморачиваться не стал, корпус который я взял является классическим горизонтальным корпусом поэтому 120мм вертушку можно просто положить сверху на материнку и она никуда не убежит, ну а 140мм вертушку я вкрутил в соответствующий паз таким образом чтобы поток воздуха был направлен на радиатор. Из-за нестандартного расположения материнки пришлось заранее обжать и подключить пару патчкордов (один в IPMI, другой в eno0), так как после "монтажа" на антрисоль мне до эзернет портов будет не добраться. Ах, да. ещё докупил себе кнопку включения на длинном проводе, в DNS продается комплект.
Дисковые накопители следущие: 1x SSD на 100гб - на нём живёт операционка, 1х ноутбучный HDD на 320Гб - на нём логи, контейнеры и веса моделей буду хранить.
Такой вот жмот эдишни ГПУ сервер у меня получился :) в дальнейшем я его буду тестировать под нагрузкой и смотреть на что он способен, но в ближайшее время вносить изменения в него скорее всего не буду.
#server
Дисковые накопители следущие: 1x SSD на 100гб - на нём живёт операционка, 1х ноутбучный HDD на 320Гб - на нём логи, контейнеры и веса моделей буду хранить.
Такой вот жмот эдишни ГПУ сервер у меня получился :) в дальнейшем я его буду тестировать под нагрузкой и смотреть на что он способен, но в ближайшее время вносить изменения в него скорее всего не буду.
#server
👍13
Ещё одна хорошая новость!
Мои изменения были наконец приняты в TorchTune после нескольких итераций код-ревью.
Так что если вы будете использовать этот проект для обучения своих моделей на нескольких датасетах, помните, что эта фича была добавлена моей скромной персоной :)
Всем хороших выходных!
Мои изменения были наконец приняты в TorchTune после нескольких итераций код-ревью.
Так что если вы будете использовать этот проект для обучения своих моделей на нескольких датасетах, помните, что эта фича была добавлена моей скромной персоной :)
Всем хороших выходных!
🔥34👍5⚡4
Всем привет! Рад поделиться с вами своей новой публикацией на Дзен под названием "Что я знал о чанках? Как нарезать текст с помощью LangChain для LLM и векторного поиска".
В ней я постарался максимально подробно описать процесс нарезки текстов на чанки с использованием LangChain, начиная с базовых методов посимвольной нарезки, заканчивая продвинутыми методами использующими большие языковые модели и модели-эмбеддеры.
text-splitting это репозиторий на GitHub с юпитер-блокнотами демонстрирующими каждый из методов упомянутых в публикации.
Приятного прочтения и успешных экспериментов!
#langchain #chunking #spliting #llm #vectorsearch
В ней я постарался максимально подробно описать процесс нарезки текстов на чанки с использованием LangChain, начиная с базовых методов посимвольной нарезки, заканчивая продвинутыми методами использующими большие языковые модели и модели-эмбеддеры.
text-splitting это репозиторий на GitHub с юпитер-блокнотами демонстрирующими каждый из методов упомянутых в публикации.
Приятного прочтения и успешных экспериментов!
#langchain #chunking #spliting #llm #vectorsearch
Дзен | Статьи
Что я знал о чанках? Как нарезать текст с помощью LangChain для LLM и векторного поиска
Статья автора «Pavel Zloi» в Дзене ✍: Приветствую!
👍17
Сегодня в чатике мы обсуждали тему преобразования текстовой информации в граф знаний.
Используя свой опыт в текстовом чанкинге, я решил провести эксперимент, взял большой текстовый документ, нарезал его на семантически связанные чанки, которые в моём случае выступают в роли узлов графа.
Для вычисления рёбер между узлами из чанков были извлечены эмбеддинги (векторные представления), после чего определяется косинусное расстояние между всеми узлами и фильтруются только те у которых сходство >= 0.9
Полученный граф на картинке.
Ссылка на юпитер-блокнот тут.
Используя свой опыт в текстовом чанкинге, я решил провести эксперимент, взял большой текстовый документ, нарезал его на семантически связанные чанки, которые в моём случае выступают в роли узлов графа.
Для вычисления рёбер между узлами из чанков были извлечены эмбеддинги (векторные представления), после чего определяется косинусное расстояние между всеми узлами и фильтруются только те у которых сходство >= 0.9
Полученный граф на картинке.
Ссылка на юпитер-блокнот тут.
🔥6👍4
Всю прошлую неделю занимался вопросом сбора Parallel Corpora датасета специализированной технической тематики.
Моя идея крайне проста, хочу обучить модель-эмбеддер которая бы могла:
a) участвовать в пайплайне индексации чанков из текстов для векторного поиска, указанные тексты представляют из себя солянку документации на разные темы на русском и английском языках вперемешку
б) пользователь передавая фразы на русском или английском находил в векторной базе то что ему надо
Иными словами, чтобы можно было сказать "how create a helm chart?" или "как создать хельм чарт?", а векторный поиск вернул одни и те же чанки.
На данный момет мои эксперименты привели меня к следующей схеме:
1) берём базовую sentence transformer модель, в моём случае это
2) дообучаем её на домене технической литературы, на данный момент я собрал датасет только про PHP (2 тысячи пар текста), но хочу ещё сделать датасет по Python, Docker, Kubernets и GoLang
3) полученную модель обучить на Parallel Corpora из пар English<>Russian (сравнение выполняю через MSELoss)
Промежуточный результат на картинках, пока что всё очень плохо :)
Моя идея крайне проста, хочу обучить модель-эмбеддер которая бы могла:
a) участвовать в пайплайне индексации чанков из текстов для векторного поиска, указанные тексты представляют из себя солянку документации на разные темы на русском и английском языках вперемешку
б) пользователь передавая фразы на русском или английском находил в векторной базе то что ему надо
Иными словами, чтобы можно было сказать "how create a helm chart?" или "как создать хельм чарт?", а векторный поиск вернул одни и те же чанки.
На данный момет мои эксперименты привели меня к следующей схеме:
1) берём базовую sentence transformer модель, в моём случае это
Snowflake/snowflake-arctic-embed-xs так как я хочу потому использовать её в ollama2) дообучаем её на домене технической литературы, на данный момент я собрал датасет только про PHP (2 тысячи пар текста), но хочу ещё сделать датасет по Python, Docker, Kubernets и GoLang
3) полученную модель обучить на Parallel Corpora из пар English<>Russian (сравнение выполняю через MSELoss)
Промежуточный результат на картинках, пока что всё очень плохо :)
👍14🔥3🤯2