Как поговорить с компьютером, если у вас не поехала крыша
Сейчас расскажу, как установить говорящего на английском ИИ локально и как попользоваться им в режиме прямого доступа. Понадобится компьютер средней паршивости, типа 16Гб памяти, проц на 8 ядер, а видюха любая и даже без.
Эта отрасль развивается так быстро, что новые изменения происходят каждый день. И не только позитивные. Например, проект, который мы сейчас будем использовать, не так давно выкинул поддержку «устаревших» форматов моделей — на которые до сих пор ссылаются много инструкций. И вообще с документацией всё плохо — где её нет, где устарело, а к одному полезному проекту подробная документация написана на столь высокохудожественном японском, что Google Translate не справляется.
Поэтому здесь я напишу только очень простую и прямолинейную инструкцию, как научить говорить по английски простой домашний компьютер. А уж какие ещё есть варианты — это пусть энтузиасты сами разбираются.
Немножко теории (Можно пропустить)
Самый первый абзац статьи я неспроста начал с системных требований. Везде и по многу раз вы слышали, что для запуска говорящего ИИ нужны суперкомпьютеры за суперденьги. И это в общем-то правда — если запускать их как есть. Но потом придумали квантизацию.
Исходная модель LLama состоит из 65 миллиардов чисел, каждое пусть даже по 4 байта — это примерно 250Гб. Для создания каждого слова ИИ должен проанализировать все данные, часто не один раз, поэтому эти 250Gb недостаточно положить даже в память — слишком долго будет считываться -, а надо класть в видеопамять. Отсюда и требования к супервидюхам. Поэтому разработчики стали искать способы ужиматься.
Сначала модель просто порезали пополам и обнаружили, что она хоть и стала глупее, но далеко не в 2 раза, и ей вполне возможно пользоваться. Тогда её, как ту японскую пилу, стали обрезать больше и больше. Так появился размерный ряд сеток, которые сейчас в ходу: 65В, 30В, 13B, 7B, 4B. Где B означает billion — миллиард чисел. У этих чисел нет тайного смысла, и другие размеры встречаются тоже. Reddit тут же разделился на группу тех, кто утверждает что сети 30В настолько тупые, что пользоваться ими можно только по бедности. И на группу тех, кто утверждает что даже сети 7В умнее всех комментаторов из первой группы. Любые попытки провести непредвзятый тест ломаются об то, что результат тестирования зависит от методики тестирования больше, чем от испытываемого ИИ.
А ещё придумали квантизацию. Представьте мысленным взором весь диапазон возможных значений 4-х байтового числа в виде отрезка на плоскости. Теперь этот отрезок разделяем на 32 части, и любое число заменяем номером отрезка, на который оно попало. Так мы проквантизировали 4 байта до 5 бит. То есть это метод очень грубого округления. И вот оказалось, что если все числа в модели округлить столь грубо, она по прежнему продолжает работать, и работать хорошо! Хуже, чем оригинал, но совсем немного. Например, решает на 20% меньше логических задач или на 12% хуже понимает эмоциональный стиль изложения — примерно о таких ухудшениях мы говорим. Самые расхожие методы квантизации это q4, и q8 — до 4 бит и до 1 байта. Впоследствии появился q5 — как оптимум между параметрами «уменьшение размера» и «прохождение моделью тестов». А прямо сейчас появились ещё методы умной квантизации, когда размер отрезков подбирается разный в разных частях модели для уменьшения отупления. Эти методы обозначают, например, q5_K. Новые методы достигли того, что средний размер квантизации доходит до 2.5 бит, а модель продолжает работать! А это уже означает размер модели в пару гигабайт, и это можно запускать на любой галоше.
Установка
Для простоты установки воспользуемся готовым приложением Oobabooga. Скачайте инсталлятор, распакуйте и запустите. Там написано, что «does not work on AMD» — не обращайте внимание, это про дополнительное ускорение на видеокартах. Мы обойдёмся и так. Для установки запустите файл start_чёто.тама Установщик спросит, какую видеокарту будете использовать. Стоит ответить правдиво, но этот вопрос не будет иметь отношения к тому методу запуска, который мы будем использовать. Ещё установщик предложит скачать несколько моделей на выбор. К сожалению, всё, что он предлагает — безнадёжно устарело. Поэтому тут стоит или отказаться или скачать facebook-350m для тестов работоспособности.
Приложение умеет работать с моделями в нескольких форматах, но мы будем использовать формат GGML как самый адаптированный для простых ПК. Модель формата GGML это один файл (у остальных форматов — папка с файлами), который должен иметь расширение .bin и буквы ggml в названии. Запускать их для нас будет движок llama.cpp через питоньи биндинги llama-cpp-python. Эти названия я вам привожу на случай, если придётся спрашивать на Reddit о проблемах.
Теперь нам нужно скачать саму модель в формате GGML. Самый большой рассадник моделей в Интернете сейчас находится на сайте HuggingFace. К сожалению, чтобы что-то скачать, нужна бесплатная регистрация. Будьте внимательны, ибо не все GGML модели совместимы с llama.cpp — читайте описание. Особенно рекомендую репозиторий TheBloke. Нам нужен ровно один файл с моделью, а не весь репозиторий. Каждая модель имеет описание, которое содержит ссылку на описание оригинальной, не квантизированной модели, где и написано о чём она. Если не охота разбираться, то вот вам ссылки на нынешнего универсала: WizardLM-Uncensored 7B 13B 30B. Каждая страница содержит таблицу, где вы сможете подобрать значение квантизации под имеющуюся у вас оперативную память. Но не забудьте оставить место под винду, браузер и саму Oobabooga которая использует 2Гб на промежуточные результаты. Для примера, на Win11 c 32Gb памяти в притык встаёт 30B q5_k_m если не давать браузеру разжираться.
Кстати, Uncensored это не только про клубничку. Зацензуренная модель откажется говорить с вами про политику, про охоту, про медицину, про преступность и т.д. и т.п.
Выбрали? Наверху есть вкладка Files and versions, там нужно скачать выбранный файл. Никакой Git LFS для скачивания не нужен. Лично меня поразил баг, когда скорость скачивания браузером очень маленькая. Тогда нужно скачать любой качалкой типа wget. Если не знаете таких — то в винде есть встроенная в Powershell качалка. Команда такая: Invoke-WebRequest -URI "ссылка" -o "имя_файла_ggml.bin"
Скачанную модель нужно положить в папку oobabooga / text-generation-webui / models.
Не попутайте с modules
— в нужной папке лежит текстовый файл с подтверждением.
На этом этапе имеет смысл проверить, что у вас с настройками подкачки — попытка загрузить 25 гиговую хрень точно выдавит туда хоть что-нибудь.
Теперь в корневой папке находим и открываем файл webui.py, где в начале есть строка CMD_FLAGS =
. В ней хранятся параметры запуска. Необходимым и достаточным будет CMD_FLAGS = '--notebook --model-menu --auto-launch'
Это означает — работать в режиме блокнота, спрашивать модель на выбор при каждом запуске, автоматически открывать браузер с интерфейсом.
Теперь запускаем, снова щракнув по скрипту start_чёто.тама . После паузы, должен открыться браузер. Если не открылся, в консоли будет ссылка. Референсу ради, вот так выглядит лог правильной загрузки.
Лекарство от тупости
У Oobabooga есть одна проблемка: настройки генерации по умолчанию кривые, из-за них модель несёт бред и повторяет одно и то же. Чтобы это исправить, надо создать файл Default.yaml
в папке text-generation-webui\presets\
, а в нём написать:
Default.yaml
do_sample: true
top_p: 0.95
top_k: 50
temperature: 1.0
repetition_penalty: 1.2
typical_p: 1.0
А затем в папке text-generation-webui
найти файл settings-template.yaml
, сделать его копию с именем template.yaml
, и в неё дописать в конец
preset: Default
prompt: Instruct-WizardLM
Использование
Вообще, об этом можно написать статью, и не одну. Так что очень коротко.
У модели нет никакой памяти. Перед вами — пустой лист блокнота (возможно с текстом, но он не принципиально важен). Вы вводите на лист какой-то текст, жмёте Generate — модель вам рисует ответ на этот текст. Затем она всё внутри себя сбрасывает и как новая. Даже в диалоге, модель ориентируется только на текст предыдущих фраз. При этом текст, который идёт последним, более важен, чем текст, который идёт первым.
Вот вам несколько вариантов запросов для затравки:
List of questions and factual answers.
Question: what is the color of the night?
Factual answer:
Write a story how nordmen and wood elves scared each other so much that a maker of pants became rich overnight.
Tell me a lewd joke about orcs.
Solve this riddle: [riddle here]. Explain your reasoning in detail.
Dr. Livesey's Persona: Dr. Livesey is a happy surgeon who believes that every illness
can be cured by cutting something off from the patient.
This is a dialog between You and Dr.Livesey.
You: Doctor, my butt itches!
Dr.Livesey:
Общее количество текста в окне не может превышать 2048 токенов. Если при большом количестве текста модель вдруг перестала отвечать — скорее всего вы дошли до предела. Придётся часть текста удалить.
Об ускорении на Nvidia
Вопрос использования GPU я сейчас пропустил вот почему. Во первых, для llama.cpp существенный эффект достигается, только если вся модель влезает в видеопамять. Иначе это скорее метод увеличить оперативную память за счёт видео. Во вторых, Nvidia опять подкинуло свинью и в последних нескольких версиях драйверов «ускорение на GPU» оборачивается существенным замедлением. Если всё же хочется поэкспериментировать, то придётся пересобрать llama.cpp из исходников, со включённой поддержкой cuBLAS. Сначала, нужно иметь компилятор на машине. Для линухов сойдёт и gcc, а на винде нужно иметь компилятор Microsoft. Самый простой, пусть и не оптимальный способ им завестись — установить Visual Studio, в процессе установки включить пакет разработки на С++. Затем в Oobaboga вызвать скрипт cmd_чёто.тама и уже в его консоли выполнить вот эти инструкции. Если всё сделано правильно, то при загрузке в консоли вы увидите строки про offloading XX layers to GPU
, а при работе — заметное замедление ускорение.