Всякий раз, когда выходит новая хорошая публичная ИИ модель, Хабр наполняется вопросами "Как нам её попробовать" и неправильными ответами, будто нужно платить за какие-то сервисы или иметь железа на сто лямов. Поэтому я вновь напишу инструкцию, как запустить новейший mixtral-8x7 на многих средних компьютерах.
Требования к железу
Модель весит около 30Гб, в зависимости от квантования. К ним добавить 10Гб на технические нужды. И сколько там ещё нужно для ОС и браузера. И вот этот суммарный размер нужно раскидать между всеми видеокартами Nvidia и оперативной памятью компьютера. Можно просто засунуть всё в 64Гб оперативки. Это будет медленно, но всё равно вполне применимо. Лучше назначить часть задач видеокарте Nvidia. Тогда и оперативки хватит 32Гб. Ещё лучше — повесить все вычисления туда, но для этого нужно 1–2 карты с суммарной памятью в 48Гб. По ОС — поддерживаются и форточки, и пингвинчики, и яблочки — но последних ни разу не пробовал. Видеокарты только Nvidia. Причём версия драйвера должна быть не от лета 2033 — либо старее, либо самая новая. Для карт AMD есть костыль совместимости, но он работает только в Линуксе. Статья написана с упором на Windows 10–11, а пользователи Линукса и без меня инструкцию прочитают.
Применение
В чистом виде от такой модели толку немного. Можно поговорить на разные приличные (ага) темы, попрактиковать английский. Ещё модель «читала» википедию и документацию к популярным библиотекам, и неплохо отвечает на новичковые вопросы по ним. Может выдать из памяти пример кода, реализующего ту или иную задачу. Или анекдот на заданную тему, в общем всё. Но главное — используемая программа имеет REST API, полностью повторяющий таковой от OpenAI, а значит, её можно использовать вместо аккаунта OpenAI с любой другой программой, которая позволит ввести свой адрес к API. Вот тут уже начинается разгуляй: там и анализ документов, и интеграция с IDE и куча всего.
Скачивание
Kobold.cpp — программа для запуска, качать отсюда. Обратите внимание, нужна ли вам поддержка CUDA (это поддержка видеокарт Nvidia).
Mixtral-8x7B-Instruct-v0.1-GGUF — сама модель. Качать здесь. На странице вы найдёте список вариантов квантизации. К сожалению, выбирать стоит только между Q-4-M или Q-5-M. Вторая весит чуть больше, и думает чуть дольше, и даёт результаты чуть лучше. А все остальные варианты либо сломанные, либо неоптимальные. Для других моделей Q-3-M будет хорошим выбором.
Сложите оба файла в одну папку.
Теперь важный хак, если собираетесь пользоваться видеокартой. Откройте панель настройки Nvidia → Manage 3D Settings → Program Settings. Нажмите кнопку Add, выбирайте файл Kobold.cpp.exe. Когда он выбран в списке 1, среди настроек внизу найдите CUDA — Sysmem Fallback Policy и выберите Prefer No Sysmem Fallback. Нажмите «Применить» Если этого не сделать, то при неправильных настройках видеопамяти Kobold.cpp может обрушить винду или заблокировать видеопамять до перезагрузки. Глобально эту опцию выставлять не надо — современные игры не оценят.
Запуск
Kobold.cpp на Windows не требует установки. Это один EXE‑шник, который просто работает. К сожалению, он не запоминает некоторые настройки между запусками, поэтому я нахожу, что проще запускать его из командной строки: терминал‑то ваши команды запомнит. Поэтому, откройте в проводнике папку, куда всё скачали, щёлкните по адресу в заголовке и введите вместо него «pwsh» или, если вылезла ошибка, то «powershell». Откроется окно командной строки с выбранной папкой в качестве текущей. Вводите команду.\koboldcpp.exe --model .\mixtral-8x7b-instruct-v0.1.Q4_K_M.gguf
Это запустит программу без использования GPU. Чтобы ими воспользоваться, Добавьте к команде параметры--usecublas --gpulayers 23
Где 23 — это количество слоёв модели, которые требуется сгрузить на видеокарту. В Mixtral всего 33 слоя, они разного размера, но так совпало, что хорошим стартовым значением будет объём видеопамяти в Гб минус 1. Если указать слишком много, то будет какой‑нибудь CUDA Error или просто зависание.
И ещё имеет смысл добавить--contextsize 4096
Размер контекста — это, грубо говоря, сколько слогов разговора модель помнит при ответе. Число должно быть степенью двойки, до 32,768 включительно. По умолчанию там идёт 2048, что явно маловато.
Всё, запускайте команду. Оно должно довольно долго прогрузиться и вывести в консоль много строк текста, из которых нам важны следующие:
llm_load_tensors: using CUDA for GPU acceleration
Означает, что видеокарта успешно используется.
llm_load_tensors: VRAM used: 19564.84 MiB
Эта строка выводится перед тем, как программа начнёт закачивать модель в видеопамять (несмотря на совершённый глагол). Если написанный размер больше, или чуть меньше, чем имеющаяся у вас видеопамять, немедленно закройте консоль. Это убъёт программу надёжнее, чем Ctrl+C. Всё равно ничего, кроме зависания, уже не получится. Вы перенесли в видеокарту слишком много слоёв.
Сразу после этой строки всё может задуматься на пару минут, это нормально.
llama_new_context_with_model: total VRAM used: 20293.85 MiB (model: 19564.84 MiB, context: 729.00 MiB)
Означает, что в памяти размечено столько места под модель и контекст. Важно понимать, что ещё должно остаться место для винды и браузера.
Please connect to custom endpoint at http://localhost:5001
Самая приятная строка, означает, что всё заработало.
Зажав Ctrl, щёлкните по адресу. Должен появиться синий интерфейс KoboldUI. Теперь нужно ввести настройки под Mixtral — они отличаются от настроек под предыдущие модели. Вот скриншоты, какие значения нужно ввести. Размер контекста должен быть равен тому, что вы указали в командной строке. С температурой можно поиграться в диапазоне от 1 до 2. Всё остальное менять не стоит. Дело в том, что в случае Mixtral все трюки для сокращения числа повторов только дают больше повторов, поэтому их надо отключить.
Ну и наконец можно пользоваться. Жмите наверху Scenario → New Instruct и вводите свой запрос.
Комментарии (5)
ivanstor
19.12.2023 16:24На 36 cores, 2.8 ГГц, 256Гб, без GPU запускается и работает, все варианты дискретизации: 5, 6, 8. Но медленно, первые единицы минут на запрос. Русский понимает, отвечает на английском. В скрипте запуска нужно поставить --threads %NUMBER_OF_PROCESSORS%-2.
В моем случае: --threads 34.
Ответы адекватные.
Сильно не углублялся, но тест "Муму" проходит :-).MountainGoat Автор
19.12.2023 16:24У вас 36 ядер настоящих, или HyperThreading? Я всегда ставлю по числу настоящих ядер, и это установка по умолчанию в Kobold.CPP. Если ставить больше, получается медленнее. Всё равно процесс упирается в скорость оперативной памяти.
Для референса, на AMD 3950X без GPU он читает 20 токенов в секунду, пишет 4. Чтение видеокартой ускоряется только когда вся сеть туда поместилась, а вот письмо - пропорционально.
Длинные диалоги нужно вести в режиме Dialog, тогда он не будет пытаться читать то, что уже прочитал. Если предыдущие вопросы уже не нужны, их надо сбрасывать кнопкой New Session.
На русском он говорить пытается, но лучше бы не пытался. В материалы обучения Mixtral русский язык не входил.
Пример
Как правильно доить козу? Ответь на русском языке.
Коза - это травоядное животное, которое primarily consumes различные виды трав, листьев и побегов растений. Чтобы правильно доить козу, необходимо соблюдать следующие шаги:
Обеспечьте чистоту: Перед дойкой козы, убедитесь, что её вымени и копыта чистые. Очистите area around udder and teats using wet wipes or warm water.
Привяжите козу: Привяжите козу к стойлу или другому подходящему месту, используя мягкую и комфортную веревку или цепь. Убедитесь, что коза feels comfortable and not stressed during the milking process.
Обеспечьте спокойную атмосферу: Создайте спокойную и расслабленную атмосферу, убедившись, что коза не отвлекается на внешние факторы, такие как шум или передвижение других животных.
Настройте оборудование: Если вы используете доильную машину, убедитесь, что она полностью собрана и готова к использованию. Если вы доите вручную, подготовьте ёмкость для сбора молока.
Начните доить козу: Начните доить козу, нажимая на сосок и массируя area around udder, чтобы помочь молоку течь. You can use your hands or a milking machine. Продолжайте этот процесс, пока молоко не перестанет течь.
Очистите соски: После доить козу, очистите соски и area around udder using warm water and clean towels. Это поможет предотвратить инфекции и поддержать гигиену.
Убедитесь, что коза получает достаточное количество воды и пищи: После доить козу, убедитесь, что она получает достаточное количество воды и пищи для поддержания здоровья и well-being.
Впрочем, когда я пытаюсь говорить на русском на компьютерные темы, у меня примерно так же получается.
ivanstor
19.12.2023 16:24Разумеется настоящих. Компьютер используется для расчетов и я в курсе насчет HyperThreading. Материнка двухсокетная, на зионах.
За пояснения спасибо. Надо попробовать запустить с RTX 4090, она на том же компе, сравнить скорость.
ilriv
Как её обучать?