Сейчас расскажу, как установить говорящего на английском ИИ локально и как попользоваться им в режиме прямого доступа. Понадобится компьютер средней паршивости, типа 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, а при работе - заметное замедление ускорение.

Комментарии (12)


  1. MountainGoat Автор
    18.06.2023 12:26
    +2

    Ещё несколько названий моделей, их можно найти в репозитории TheBloke

    • Pygmalion - для чатов. Последний из примеров запросов в статье заточен под него.

    • WizardLM-30B-Uncensored-SuperCOT-Storytelling - обучена говорить длиннее, хорошо придумывает байки и анекдоты.

    • Guanaco - универсальная сеть, хорошо работающая в 13B. Но во первых зацензуренная, во вторых склонна сочинять истории в стиле "шёл я как-то через мост, глядь - ворона мокнет".


  1. Komrus
    18.06.2023 12:26

    За инструкцию - спасибо. Но это про "початиться" с компьютером. Т.е. - про пообщаться письменно...

    А поговорить-то с компьютером как? :) Голосом?


    1. rads
      18.06.2023 12:26
      +1

      Чисто технически, можно использовать связку whisper (а лучше whisperX) и одной из silero-models от snakers4.

      Whisper обеспечит распознание речи, отлично работает на русском языке

      Модели silero достаточно хорошо генерируют речь на нескольких языках.

      И все можно запустить +- на железе домашнего уровня :)

      Цельной end-to-end связки пока не видел, но, думаю, кто-нибудь соберёт в скором времени.


      1. Drun555
        18.06.2023 12:26
        +1

        Home Assistant очень активно работает в этом плане - можно комбинировать разные сервисы (TTS, STT, мозги) в едином интерфейсе.

        https://www.home-assistant.io/voice_control/voice_remote_local_assistant/


    1. Krawler
      18.06.2023 12:26

      Добавьте speech-to-text и text-to-speech и будет вам щастье))


  1. Sing303
    18.06.2023 12:26

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


    1. MountainGoat Автор
      18.06.2023 12:26

      Нужно перекомпилировать llama.dll так, как написано по ссылке. Потом в webui.py в аргументы добавить "--n-gpu-layers 100500". Всё, больше ничего не нужно.

      Ключевое наблюдение - во время загрузки должна появляться строка "offloaded XXX layers to GPU" и прогрессбар из точек. Если они есть - значит работает с GPU. При этом нагрузку на ядро GPU он не показывает.


      1. Sing303
        18.06.2023 12:26

        Перекомпилил как по ссылке сказано, указал --n-gpu-layers 15, запускаю start_windows.bat пишу запрос, модель грузится в ОЗУ, видеопамять не трогает. Видимо есть какой то нюсанс) "offloaded XXX layers to GPU" не отображается в консоли


        1. MountainGoat Автор
          18.06.2023 12:26

          Если хотите, чтобы я помог -- то лог перекомпиляции - на бочку(в pastebin).


          1. Sing303
            18.06.2023 12:26

            Попробовал переустановить, теперь все сломалось и снова ставиться не хочет. Что то там с CUDA https://pastebin.com/jvuPD9HS


            1. MountainGoat Автор
              18.06.2023 12:26
              +1

              Полез у себя пересобирать - та же ошибка! Это вот прямо вчера что-то сломали. bleeding edge такой bleeding. Подождите, я в Гитхабе пошукаю, затем тут напишу.


            1. MountainGoat Автор
              18.06.2023 12:26

              Наберите последнюю команду так: pip install llama-cpp-python==0.1.62 --no-cache-dir тогда всё работает. На попробовать - сгодится.