Найти в Дзене
Pavel Zloi

Конвертация моделей Whisper c HuggingFace в формат GGML

Возился тут намедни с кастомными модельками Whisper, у которых, как не трудно догадаться, не было GGML-версий, ну и чтобы их можно было в whisper.cpp использовать пришлось разбираться с темой конвертации весов в указанный формат, так что я решил заодно набросать небольшую инструкцию на эту тему. Ах, да, все работы выполняю на Debian GNU/Linux с установленным на нём Python 3.12 и Python Virtual Environment. Первым делом создадим директорию, в которой будем выполнять работы, после чего перейдём в неё: mkdir whisper-ggml cd whisper-ggml Далее создадим и переключимся на виртуальное окружение python: python3 -m venv venv source venv/bin/activate Поставим необходимые пакеты: pip install torch transformers numpy safetensors Теперь выполним клонирование репозиториев с тулкитом: git clone https://github.com/openai/whisper git clone https://github.com/ggerganov/whisper.cpp Далее скачаем необходимую модель Whisper с HuggingFace: git clone https://huggingface.co/antony66/whisper-large-v3-russian В
Оглавление

Возился тут намедни с кастомными модельками Whisper, у которых, как не трудно догадаться, не было GGML-версий, ну и чтобы их можно было в whisper.cpp использовать пришлось разбираться с темой конвертации весов в указанный формат, так что я решил заодно набросать небольшую инструкцию на эту тему.

Изобржение сгенерировано при помощи DALL-E
Изобржение сгенерировано при помощи DALL-E

Ах, да, все работы выполняю на Debian GNU/Linux с установленным на нём Python 3.12 и Python Virtual Environment.

Подготовка

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

mkdir whisper-ggml
cd whisper-ggml
Наша рабочая директория
Наша рабочая директория

Далее создадим и переключимся на виртуальное окружение python:

python3 -m venv venv
source venv/bin/activate
Переключаемся на виртуальное окружение
Переключаемся на виртуальное окружение

Поставим необходимые пакеты:

pip install torch transformers numpy safetensors
Ставим необходимые пакеты
Ставим необходимые пакеты

Теперь выполним клонирование репозиториев с тулкитом:

git clone https://github.com/openai/whisper
git clone https://github.com/ggerganov/whisper.cpp
Отлично, репозитории скачались
Отлично, репозитории скачались

Далее скачаем необходимую модель Whisper с HuggingFace:

git clone https://huggingface.co/antony66/whisper-large-v3-russian
-6

В моём случае это модель antony66/whisper-large-v3-russian, но это на самом деле принципиально и вы можете скачать любую другую, хоть openai/whisper-tiny, хоть дообученную вами, главное, чтобы это была именно whisper модель.

Конвертация

Теперь у нас есть всё необходимое и мы можем выполнить конвертацию:

python3 ./whisper.cpp/models/convert-h5-to-ggml.py ./whisper-large-v3-russian/ ./whisper/ ./
-7

По завершению работы скрипта в текущей директории появится файл под названием ggml-model.bin, это собственно и есть наша конвертированная модель.

Тестирование (опционально)

Давайте теперь на всякий случай проверим работоспособность полученной модели, для этого, скачаем тестовый образец голоса:

wget https://github.com/salute-developers/golos/raw/refs/heads/master/golos/examples/data/001ce26c07c20eaa0d666b824c6c6924.wav

Данный пример занятен тем, что в нём был задан вопрос на злобу дня:

Шестьдесят тысяч тенге сколько будет стоить?

Скомпилируем специальный бинарник из репозитория whisper.cpp:

cd whisper.cpp
cmake .
make whisper-cli

После чего мы можем выполнить запуск бинарника, явно указав язык на котором говорит диктор из загруженного ранее WAV-файла:

./bin/whisper-cli --language ru --model ../ggml-model.bin --file ../001ce26c07c20eaa0d666b824c6c6924.wav

По завершению работы модели мы должны будем увидеть в консоли текст.

Вывод модели (whisper-cli был собран без поддержки CUDA, поэтому 35 секунд)
Вывод модели (whisper-cli был собран без поддержки CUDA, поэтому 35 секунд)

Как видно модель отработала исправно, вернула текст и показала статистическую информацию, иными словами её можно спокойно использовать, например, в связке с моим проектом EvilFreelancer/docker-whisper-server (подробная инструкция будет в README).

Завершение

Вот в целом и всё, как видно ничего сложного нет, просто нужно немного терпения и, как говорится, пару прямых рук :)

Если вам понравилась статья, не забудьте поставить лайк и подписаться на мой блог на Дзене и Телеграм-канал, чтобы не пропустить множество других интересных публикаций по теме обработки естественного языка и машинного обучения. Ваша поддержка и интерес вдохновляют меня на создание новых и интересных материалов.

Благодарю за внимание и до скорых встреч!