Pavel Zloi – Telegram
Pavel Zloi
2.19K subscribers
582 photos
49 videos
2 files
836 links
директор ИИ · инженер‑интегратор
@eprogrammist | https://github.com/EvilFreelancer

20 лет в IT
∈ 10 лет в разработке
∈ 3 года в ML/AI

Поддержать автора:
https://pay.cloudtips.ru/p/937f48ac
Download Telegram
Сегодня прилетело на почту письмо от проекта 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"
}'


Полагаю указанные модели будут плохо работать с русским языком, но вечерком это проверю.
🔥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.
👍6
12 апреля 1961 советский космонавт Юрий Гагарин впервые в истории нашей планеты совершил орбитальный облёт Земли.

Так что, поздравляю всех с Днем Космонавтики!
❤‍🔥18👍73🎉1🏆1
В субботу решил попробовать проект TorchTune, который зарелизили вот буквально на днях те же human beings которые разрабатывают PyTorch.

Сложно описать словами насколько приятно работать с данным проектом, благодаря ему всё обучение грубо говоря сводится к описанию 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
👍16🔥7👏31
Мне что-то так понравилось работать с утилитой 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.

ЗЫ. Единственный момент который важно учитывать заключается в том что формат всех датасетов передаваемых в массиве должен быть идентичным.
👍6👌3🐳2
В общем продолжается история с моим Pull Request в репозиторий TorchTune, к его ревью подключился ведущий разработчик проекта и дал ряд советов, в частности он предложил вместо поля 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 таки примут :)
👍10👏5
Сегодня впервые в жизни я стал обладателем профессиональной серверной двухпроцессорной материнской платы.

Раньше я сталкивался с подобным железом только по работе, но вот спустя столько лет смог завести столь прелестного питомца дома :)

Модель: 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
Pavel Zloi
Ну в общем удалось собрать сервер в одну коробочку, в качестве корпуса нашёл на Авито вариант для сбора майнинговой фермы (судя по всему это корпус Cryptone на 4x видеокарты, и судя по "качеству" производитель этого корпуса до майнинговой лихорадки выпускал…
С радиаторами и вентиляторами заморачиваться не стал, корпус который я взял является классическим горизонтальным корпусом поэтому 120мм вертушку можно просто положить сверху на материнку и она никуда не убежит, ну а 140мм вертушку я вкрутил в соответствующий паз таким образом чтобы поток воздуха был направлен на радиатор. Из-за нестандартного расположения материнки пришлось заранее обжать и подключить пару патчкордов (один в IPMI, другой в eno0), так как после "монтажа" на антрисоль мне до эзернет портов будет не добраться. Ах, да. ещё докупил себе кнопку включения на длинном проводе, в DNS продается комплект.

Дисковые накопители следущие: 1x SSD на 100гб - на нём живёт операционка, 1х ноутбучный HDD на 320Гб - на нём логи, контейнеры и веса моделей буду хранить.

Такой вот жмот эдишни ГПУ сервер у меня получился :) в дальнейшем я его буду тестировать под нагрузкой и смотреть на что он способен, но в ближайшее время вносить изменения в него скорее всего не буду.

#server
👍13
Ещё одна хорошая новость!

Мои изменения были наконец приняты в TorchTune после нескольких итераций код-ревью.

Так что если вы будете использовать этот проект для обучения своих моделей на нескольких датасетах, помните, что эта фича была добавлена моей скромной персоной :)

Всем хороших выходных!
🔥34👍54
Здравствуйте, товарищи! Поздравляю всех с Днём Победы!
27🫡5👍1
Всем привет! Рад поделиться с вами своей новой публикацией на Дзен под названием "Что я знал о чанках? Как нарезать текст с помощью LangChain для LLM и векторного поиска".

В ней я постарался максимально подробно описать процесс нарезки текстов на чанки с использованием LangChain, начиная с базовых методов посимвольной нарезки, заканчивая продвинутыми методами использующими большие языковые модели и модели-эмбеддеры.

text-splitting это репозиторий на GitHub с юпитер-блокнотами демонстрирующими каждый из методов упомянутых в публикации.

Приятного прочтения и успешных экспериментов!

#langchain #chunking #spliting #llm #vectorsearch
👍17
Сегодня в чатике мы обсуждали тему преобразования текстовой информации в граф знаний.

Используя свой опыт в текстовом чанкинге, я решил провести эксперимент, взял большой текстовый документ, нарезал его на семантически связанные чанки, которые в моём случае выступают в роли узлов графа.

Для вычисления рёбер между узлами из чанков были извлечены эмбеддинги (векторные представления), после чего определяется косинусное расстояние между всеми узлами и фильтруются только те у которых сходство >= 0.9

Полученный граф на картинке.

Ссылка на юпитер-блокнот тут.
🔥6👍4
Всю прошлую неделю занимался вопросом сбора Parallel Corpora датасета специализированной технической тематики.

Моя идея крайне проста, хочу обучить модель-эмбеддер которая бы могла:
a) участвовать в пайплайне индексации чанков из текстов для векторного поиска, указанные тексты представляют из себя солянку документации на разные темы на русском и английском языках вперемешку
б) пользователь передавая фразы на русском или английском находил в векторной базе то что ему надо

Иными словами, чтобы можно было сказать "how create a helm chart?" или "как создать хельм чарт?", а векторный поиск вернул одни и те же чанки.

На данный момет мои эксперименты привели меня к следующей схеме:
1) берём базовую sentence transformer модель, в моём случае это Snowflake/snowflake-arctic-embed-xs так как я хочу потому использовать её в ollama
2) дообучаем её на домене технической литературы, на данный момент я собрал датасет только про PHP (2 тысячи пар текста), но хочу ещё сделать датасет по Python, Docker, Kubernets и GoLang
3) полученную модель обучить на Parallel Corpora из пар English<>Russian (сравнение выполняю через MSELoss)

Промежуточный результат на картинках, пока что всё очень плохо :)
👍14🔥3🤯2