GGUF

Материал из in.wiki
(перенаправлено с «GGML (формат файла)»)
Перейти к навигации Перейти к поиску

GGUF — двоичный формат файла, предназначенный для хранения переносимых моделей машинного обучения, предназначенных для использования в библиотеке GGML и совместимых с ней. Является обобщением предшествующих форматов GGML, GGMF, GGJT, заменяя их.

В настоящее время существуют следующие форматы файлов GGML для LLM:

  • GGML (без версионирования): базовый формат без версионирования и выравнивания.
  • GGMF (с версионированием): то же, что и GGML, но с версионированием. Существует только одна версия.
  • GGJT выравнивает тензоры для использования с mmap. Версии v1, v2 и v3 идентичны, но последние используют другую схему квантования, несовместимую с предыдущими версиями.
  • GGUF - последняя версия формата.

GGML в основном используется в примерах в ggml, тогда как GGJT используется в моделях llama.cpp.

Внутреннее устройство[править | править код]

GGUF — это формат, основанный на существующем GGJT, но вносящий несколько изменений для большей расширяемости и удобства использования.

Важные особенности реализации:

  • Развертывание в виде одного файла: модели легко распространяются и загружаются, не требуя дополнительных внешних файлов.
  • Расширяемость: новые функции могут быть добавлены к исполнителям на основе GGML/новая информация может быть добавлена в модели GGUF без нарушения совместимости с существующими моделями.
  • Совместимость с mmap: модели можно загружать с помощью mmap, что радикально ускоряет их использования.
  • Простота использования: модели можно легко загружать и сохранять, используя небольшой объём кода, без необходимости использования внешних библиотек, независимо от используемого языка.
  • Полная информация: вся информация, необходимая для загрузки модели, содержится в файле модели, и пользователю не требуется предоставлять дополнительную информацию.

Ключевым отличием GGJT от GGUF является использование структуры «ключ-значение» для гиперпараметров (теперь называемой метаданными), а не списка нетипизированных значений. Это позволяет добавлять новые метаданные без нарушения совместимости с существующими моделями и аннотировать модель дополнительной информацией, которая может быть полезна для вывода или идентификации модели.

Соглашение об именовании моделей[править | править код]

GGUF следует соглашению об именовании `<BaseName><SizeLabel><FineTune><Version><Encoding><Type><Shard>.gguf`, где каждый компонент разделяется символом `-`, если он присутствует.

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

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

Компоненты:

  1. BaseName: Описательное имя базового типа или архитектуры модели. Его можно получить из метаданных gguf general.basename, заменив тире пробелами.
  2. SizeLabel: Весовой класс параметра[1], представленный как <expertCount>x<count><scale-prefix>. Его можно получить из метаданных gguf general.size_label, если они доступны, или рассчитать, если они отсутствуют. Поддерживается округлённая десятичная точка в счётчике с однобуквенным префиксом масштаба для упрощения возведения в степень с плавающей запятой, как показано ниже: Q: Квадриллион параметров. T: Триллион параметров. B: Миллиард параметров. M: Миллион параметров. K: Тысяча параметров. При необходимости можно добавить дополнительные <attributes><count><scale-prefix> для указания других интересующих вас атрибутов.
  3. FineTune: Описательное имя для цели тонкой настройки модели (например, Chat, Instruct и т. д.). - Его можно получить из метаданных gguf general.finetune, заменив тире пробелами.
  4. Version: (Необязательно) Обозначает номер версии модели в формате v<Major>.<Minor> Если у модели отсутствует номер версии, предполагается v1.0 (первый публичный выпуск). Эту информацию можно получить из метаданных gguf general.version
  5. Encoding: Указывает схему кодирования весов, примененную к модели. Содержание, сочетание типов и расположение определяются пользовательским кодом и могут меняться в зависимости от потребностей проекта.
  6. Type: Указывает тип файла gguf и его назначение. Если параметр отсутствует, то по умолчанию это типичный файл тензорной модели gguf. LoRA`: Файл GGUF является адаптером LoRA. vocab: Файл GGUF, содержащий только данные словаря и метаданные.
  7. Shard: (Необязательно) Указывает и обозначает, что модель разделена на несколько шардов, в формате <ShardNum>-of-<ShardTotal>. ShardNum: Позиция шарда в этой модели. Должна состоять из 5 цифр, дополненных нулями. Номер шарда всегда начинается с 00001 (например, первый шард всегда начинается с 00001-of-XXXXX, а не с 00000-of-XXXXX). ShardTotal: Общее количество сегментов в этой модели. Должно состоять из 5 цифр, дополненных нулями.

Как минимум, все файлы моделей должны иметь параметры BaseName, SizeLabel и Version, чтобы их можно было легко проверить на соответствие соглашению об именовании GGUF. Примером этой проблемы является то, что Encoding легко ошибочно принимается за FineTune, если Version не указана. Для проверки можно использовать регулярное выражение `^(?<BaseName>[A-Za-z0-9\s]*(?:(?:-(?:(?:[A-Za-z\s][A-Za-z0-9\s]*)|(?:[0-9\s]*)))*))-(?:(?<SizeLabel>(?:\d+x)?(?:\d+\.)?\d+[A-Za-z](?:-[A-Za-z]+(\d+\.)?\d+[A-Za-z]+)?)( ?:-(?<FineTune>[A-Za-z0-9\s-]+))?)?-(?:(?<Version>v\d+(?:\.\d+)*))(?:-(?<Encoding>(?!LoRA|vocab)[\w_]+))?(?:-(?<Type>LoRA|vocab))?(?:-(?<Shard>\d{5}-of-\d{5}))?\.gguf$` который проверит, что вы получили минимальные BaseName, SizeLabel и Version, представленные в правильном порядке.

Структура файла[править | править код]

Файлы GGUF структурированы следующим образом. Они используют глобальное выравнивание, заданное в поле метаданных general.alignment, которое далее обозначается как ALIGNMENT.

При необходимости файл дополняется байтами `0x00` до следующего значения, кратного general.alignment. Поля, включая массивы, записываются последовательно без выравнивания, если не указано иное. По умолчанию модели имеют little-endian порядок байтов. Они также могут иметь big-endian порядок байтов для использования на компьютерах с таким порядком байтов; в этом случае все значения (включая значения метаданных и тензоры) также будут иметь big-endian порядок байтов На момент написания статьи не существует способа определить, имеет ли модель порядок байтов от младшего к старшему; это может быть исправлено в будущих версиях. Если дополнительная информация не предоставлена, предполагается, что модель имеет порядок байтов little-endian.

Структура файла GGUF версии 3.

Сравнение с другими форматами файлов машинного обучения[править | править код]

Ссылки[править | править код]

Примечания[править | править код]

  1. Полезно для понимания сравнительных таблиц с разными моделями.