Pavel Zloi
1.27K subscribers
462 photos
42 videos
2 files
720 links
AI/ML, MCP, MLOps, LLM, GPT, GNN, NLP, GCN, Python, AWS, Linux, DevOps

Отправить донат:
https://pay.cloudtips.ru/p/937f48ac

Исходники моих проектов:
https://github.com/EvilFreelancer

Где меня искать:
https://dzen.ru/a/ZGI0ytgNQUkpkIME
Download Telegram
Всем привет! Подхожу к финалу проекта по дообучению GigaChat 20B-A3B на o1 датасете, на этот раз предлагаю вашему вниманию GGUF-чекпоинты модели, вот ссылочки:
- https://huggingface.co/evilfreelancer/o1_gigachat-20b-a3b_gguf
- https://ollama.com/evilfreelancer/o1_gigachat

Доступно четыре уровня квантизации: q8_0, q5_0, q4_0 и q2_k

Если использовать gguf через llama.cpp то шаблон чата должен подтянуться автоматом, а вот с ollama пришлось повозиться.

{{ range .Messages }}
{{ if eq .Role "system" }}system<|role_sep|>{{ .Content }}<|message_sep|>{{ end }}
{{ if eq .Role "user" }}user<|role_sep|>{{ .Content }}<|message_sep|>available functions<|role_sep|>[ ]<|message_sep|>{{ end }}
{{ if eq .Role "assistant" }}assistant<|role_sep|>{{ .Content }}<|message_sep|>{{ end }}
{{ end }}
{{ if .AddGenerationPrompt }}assistant<|role_sep|>{{ end }}

Вот с таким шаблоном и на ollama всё начало работать как следует.

Чтобы запустить через ollama потребуется обновиться до 0.5.6, а ещё желательно включить flash attention через переменные окружения.

Команда:
ollama run evilfreelancer/o1_gigachat

Запустит q8_0 версию по умолчанию.

ЗЫ. На q2_k заметил большую склонность модели к впадению в репиты, поэтому рекомендую поднять repetition_penalty побольше 1.1 по умолчанию.
Добавил в бота PavelGPT обученную мною ранее модельку evilfreelancer/o1_gigachat:20b, на низах через ollama используется GGUF версия модели квантованная до q8_0, выставил её по умолчанию. Модель работает в режиме instruct, так что памяти чата у неё нет.
Всем привет! Вечерком сего дня в районе 19:00 MSK приглашаю всех на стрим, в планах у меня провести эксперимент по созданию бота ассистента для помощи в работе с документацией ManticoreSearch Engine (тг-канал проекта).

Как можно догадаться делать я буду RAG систему полного цикла, а именно: кравлер, конвертер из html в markdown (используя reader-lm модель от jina), чанкер (по главам), эмбеддер (скорее всего это будет BAAI/bge-m3), векторную базу (ChromaDB, FAAIS или ManticoreSearch, решим на месте) и скрипты работы с LLM (самопись).

Помогать мне с этим будет Qwen2.5 Coder 32b, DeepSeek Chat и GigaCode (встроенная в GigaIDE).

В проекте планирую использовать модели доступные через ollama, а векторную базу сделать заменяемой, на низах будет моя evilfreelancer/o1_gigachat-20b-a3b_lora.
Всем привет! Это немного запоздалый отчёт по итогам субботнего стрима.

Если кратко, то на прошедшем стриме я пытался собрать RAG который был бы способен реализовать возможность работы с документами как с графами, в процессе пришло ряд интересных идей, однако, по ходу пьесы зрители стрима накидали массу любопытных ссылок:
- на научную работу "Searching for Best Practices in Retrieval-Augmented Generation"
- на бота @manticoresearch_bot который один из зрителей собрал на коленке пока я там пытался что-то кодить
- на репозиторий RAG_Techniques с коллекцией готовых реализаций RAG используя llama index и langchain

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

После стрима используя методологию "тяп-ляп и готово" реализовал RAG в формате Telegram-бота одним скриптом на python используя llama-index, не заморачивался ни о чём, кроме корректных ссылок на документацию. Данный проект опубликую чуть позже.

PS. Запись стрима залил только в архив ВК так как он не несёт какой бы то ни было ценности, а исходники созданные на стриме можно найти тут.

PPS. Но, мне понравилась идея сделать из векторной базы OpenAI-подобный API-сервер, типа присылаешь ему некий текст, а в ответе получает какие-то документы, вот эту задумку скорее всего развивать буду.
Вчера вечером причёсывал проект небольшого RAG на базе llama-index для документации ManticoreSearch Engine, получился достаточно компактный скриптик.

Если кратко то в момент запуска происходит рекурсивное чтение из директории ./docs содержащей документацию, далее происходит нарезка на чанки через SentenceWindowNodeParser, затем из полученных чанков через API-сервер ollama выполняется извлечение эмбеддингов, которые затем складываются в векторноу базу данных milvus (первая версия бота была на faiss. но в llama index нет реализации для полнотекстового поиска), после чего управление передаётся aiogram-боту.

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

EMBED_MODEL = "bge-m3:567m"
LLM_MODEL = "qwen2.5-coder:7b-instruct-q4_0"
LLM_RERANKER_MODEL = "llama3.1:8b-instruct-q4_0"


Всё что смог запустил через ollama, вот только эмбеддер гибридного поиска не смог побороть, так что он обитает в системной памяти, чтобы ресурсы GPU не тратить.

Исходники выложил на гитхаб, пощупать бота можно тут: @manticoresearch_ai_bot (отвечает обычно в течении минуты).

PS. Полученное решение могу оценить на 3 балла из 5, не фантастика, но благодаря реранкеру лучше чем многие другие, что мне довелось попробовать.
Сегодня занимался тем, что принимал антисанкционные меры в отношении Dockerfile некоторых моих проектиков, вот такие строчки добавил:
# Anti-"sanction" fix
RUN sed -r 's#developer.download.nvidia.com#mirror.yandex.ru/mirrors/developer.download.nvidia.com#g' -i /etc/apt/sources.list.d/cuda-*.list

После этого фикса проблем со сборкой более на наблюдалось.

PS. Кстати, у меня есть ещё и своё зеркало некоторых нужных мне репозиторие, подробнее тут.
Всем привет! За месяц на мой канал подписалось так много новых людей, что даже удалось преодолеть порог в тысячу подписчиков.

Однако, полагаю, что те кто подписался недавно мало знают о моем творчестве на поприще OpenSource, и возможно узнали обо мне благодаря эпопеи с обучением GigaChat или моей попытке собрать RAG для документации ManticoreSearch, поэтому позвольте мне немного рассказать о некоторых других моих самых любопытных и значимых проектах на тему AI и ML:

- impruver это очень удобный набор скриптов для обучения больших языковых моделей
- docker-llama.cpp-rpc представляет из себя скрипты по сборке Docker-контейнеров позволяющих запустить распределенный инференс GGUF моделей через протокол RPC
- docker-whisper-server это упакованный в контейнер сервер whisper.cpp совместимый с API-клиентом от OpenAI
- ruMorpheme - скрипты для обучения модели для извлечения морфем из русских слов

Ссылки на другие мои социальные сети тут.
На гребне хайпа Operator ChatGPT

Как многим должно быть уже известно малоизвестная инди-студия по имени OpenAI выпускающая большие языковые модели ChatGPT намедни зарелизила систему под названием Operator, если кратко то этот проект представляет из себя автоматизацию работы с браузером через визуальную языковую модель (VLM), решил пощупать, но оказалось, что доступ к указанному проекту получили далеко не все, мне вот например ещё не дали.

Посему за неимением доступов к оному проекту решил прошерстить просторы интернетов на предмет наличия публичных аналогов, как оказалось таких проектов предостаточно, самые любопытные из них это:

web-ui

Данный проект реализует похожий подход, но в немного более локализованном формате, он позволяет автоматизировать работу только браузера (а если точнее то Хрома), очень прост в установке, достаточно склонировать реп, скопировать .env из примера. В переменных окружения нужно само собой указать ключик для своей любимой вендорлок нейросети, хотя гипотетически можно и ollama использовать, но у меня это так и не вышло, то на GPU не хочет инференсить, то ошибки в логах.

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

По итогу получилось средненько, плюс оказалось, что полный функционал (включая VLM) хорошо работает только на gpt-4o, так как gpt-4 и 3.5 не умеют работать с изображениями, таки вот нюансики.

#operator
Далее наткнулся на чуть более продвинутый проект, не просто в браузере кнопошки тыкать, а прям полноценно управлять компьютером.

CogAgent


Проект позволяет автоматизировать работу целой рабочий станции (будь то macOS или Windows) используя модель CogAgent 9B, подробности в документации.

Если кратко, то пользователю нужно установить серверную часть на машину с видеокартой на которой будет трудиться нейронка, а клиентскую часть туда где будут происходить мытарства. По умолчанию предполагается, что и сервер и клиент установлены на одной и той же машине, поэтому пути и адреса в примерах ведут на localhost, но можно это дело децентрализовать, что я при помощи виртуалочки с Ubuntu 24.04 и сделал.

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

PS. Серверной части с нейронкой надо 22Гб видеопамяти и это без квантизации, так что потенциально запустить вполне реально и на более слабом железе.

PPS. Модель обучалась на китайском, поэтому в логе работы иероглифы.

#operator
Всем привет! Продолжаю эксперименты по запуску "Operator дома" в виде разных проектов по автоматизации работы на компьютере.

Ну так вот, следующим на очереди в моём списке был проект UI-TARS-desktop, немного провозившись с его запуском мне таки удалось запустить серверную часть, из проблем которые возникли были:
1. в документации предложено использовать vllm собранный под cuda 12.4 (а у меня на сервере установлена 12.6);
2. попытка запустить модель 7B-DPO успехом не увенчалась, ей мало 24Гб VRAM моей RTX 4090, поэтому пришлось запустить 2B-SFT версию модели, которая к слову скушала чуть больше 19Гб VRAM, не знаю почему разработчики сразу не предусмотрели возможность квантизации на лету

Ну и пошёл скачивать клиентскую UI утилиту для работы с сервером, как оказалось разработчик опубликовал версии UI только для macOS и Windows, а вот для моего любимого Debian GNU/Linux клиента не оказалось.

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

Короче потанцевал есть, но его надо ещё развить.

#operator
Далее попробовал активно набирающий звёздочки WebRover

Проект тоже как и Operator и web-ui предполагает автоматизацию задач через браузер, исходные коды предусмотрительно разделёны на две части:

backend

Приложение на python использующее fastapi для имплементации OpenAI-подобного API-сервера, никакие модели локально не запускает, торч не использует, работает исключительно в формате обёртки gpt-4o, возможность выбрать модель отсутствует. Документация для запуска бэкенда кривая, в ней не сказано, что ещё надо поставить fastapi и uvicorn, а команда запуска из README просто ничего не делает.

А вот чтобы запустить бэк надо скопировать содержимое из app на уровень выше, в папку backend, поправить в скрипте main.py в импортах вместо import .webrover сделать import webrover (без точки). Далее запускается это всё не через uvicorn что-то там, а через python main.py.

Чтобы использовать прокси через LangChain нужно добавить параметр openai_proxy в скрипте webrover.py.

llm_openai = ChatOpenAI(
model="gpt-4o", temperature=0,
openai_proxy="socks5://127.0.0.1:1081"
)


Ну и дальше (при условии, что у вас есть волшебные туннели) всё начинает работать как надо.

frontend

Это есть запускаемый через "npm run dev" сайтик на JavaScript, отправляющий запросы на backend, там же отображается лог работы модели, какие операции она выполнила и так далее, в коде захардкожен адрес бэкенда на localhost:8000, поэтому если вам нужна децентрализованная система с API сервером придётся чуть повозиться, НО, бэкенд на самом деле это не просто API-обёртка, это ещё и собственно воркер, который выполняет запросы в браузере, так что разворачивая бэк на удалённой машине (или виртуалке) потребуется графический интерфейс и бинарники хромиума.

———

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

#operator
Pavel Zloi
Вчера вечером думал над сбором датасета для проекта ruMorpheme, данный проект позволяет обучить модель способную извлекать морфемы из предложенных слов, но чтобы обучить такую модель нужен специальный датасет, изначально я использовать словарь Тихонова, однако…
Залил на HuggingFace датасет с морфемами русского языка ruMorphemes, созданный в рамках проекта нейросетевой модели ruMorpheme, датасет был собран скриптом parse.py с сайта morphemeonline.ru, в изначальном наборе данных было примерно 1.5M слов, из них удалось скравлить лишь 183k, остальных на сайте попросту не оказалось.
Хмм, приложение DeepSeek и правда Топ-1 в мировом AppStore, а я думал это фотошоп, пойду пожалуй тоже себе его скачаю.
Приехала моя Intel Arc A770, мне эту карту очень рекомендовали, да и как можно отказаться от этой крохи, которая пусть и не самая шустрая, но занимает всего два слота и имеет на борту аж целых 16Гб VRAM.

#server #intel