Transformers теперь поддерживает квантованные модели GGUF от llama.cpp
Интеграция ggml-ядер в Transformers открывает путь к эффективному локальному инференсу на Apple Silicon без необходимости использовать сторонние рантаймы.
Библиотека Hugging Face Transformers добавила нативную поддержку формата GGUF, позволяя запускать квантованные модели локально через знакомый API PyTorch.
Главные тезисы
- Transformers теперь загружает GGUF модели через стандартный API
- Используются ggml-ядра для ускорения на Apple Silicon
- Оптимизирован цикл генерации токенов в Python
- Поддерживаются архитектуры Qwen3.5 и Qwen3.8
Интеграция GGUF в Transformers
Команда Hugging Face добавила поддержку формата GGUF в библиотеку Transformers. Это позволяет загружать квантованные чекпоинты, оптимизированные для памяти локальных устройств, используя стандартный API библиотеки. Интеграция направлена на то, чтобы сделать локальный инференс более доступным, объединяя удобство Transformers с эффективностью движка llama.cpp.
Формат GGUF, разработанный командой llama.cpp, широко используется для локального инференса и позволяет выбирать уровень квантования в зависимости от доступных ресурсов. Transformers теперь использует ggml-ядра через новый загрузчик, что обеспечивает производительность, близкую к нативному llama.cpp, особенно на архитектуре Apple Silicon.
Технические детали и производительность
Для работы требуется последняя версия Transformers и совместимая версия PyTorch. При загрузке GGUF-файла на устройствах Apple Silicon Transformers автоматически применяет ggml/Metal слои и использует Metal как реализацию механизма внимания (attention). Если ядро недоступно, происходит фоллбэк на деquantизацию с выводом предупреждения.
Сравнение производительности проводилось на MacBook Pro M2 Max с 32 ГБ объединенной памяти. В тесте участвовали три типа моделей: маленькая плотная, большая плотная и MoE (Mixture of Experts). Измерения показывали скорость генерации токенов. Результаты Transformers оказались близки к llama.cpp, хотя условия тестирования не были идентичными: в метрике Transformers учитывалась фаза префилла (prefill), а в llama.cpp — только генерация.
Оптимизация цикла генерации
Помимо ядер, команда оптимизировала цикл генерации в Python:
- Удаление ненужных масок внимания (attention masks) для входных данных без заполнения (padding) на раннем этапе.
- Асинхронное копирование решений о завершении (stopping criteria), что позволяет CPU продолжать планирование операций, пока GPU выполняет вычисления.
Эти изменения улучшают общую производительность генерации для всех моделей Transformers, а не только для GGUF.
Ограничения и поддержка архитектур
На данный момент поддержка ограничена локальным инференсом на Apple Silicon (MPS). Поддерживаются архитектуры Qwen3.5 (плотные и MoE), включая совместимые чекпоинты Qwen3.8. Поддержка других архитектур будет добавляться постепенно.
Работа с батчами и заполнением (padding) требует доработки. Для моделей, чей шаблон чата поддерживает режим «мышления» (thinking), можно добавить соответствующие параметры. Также доступна возможность запуска модели через API, совместимый с OpenAI, используя встроенные инструменты Transformers.
Перспективы развития
Долгосрочная цель — распространение ggml-ядер на модели, которые не поддерживаются напрямую llama.cpp. Поскольку ядра оперируют тензорами, они могут быть интегрированы в другие рабочие процессы Transformers для ускорения операций внимания, нормализации и умножения матриц. Это особенно полезно для новых архитектур, исследовательских моделей и мультимодальных систем (компьютерное зрение, аудио), которые еще не имеют нативной реализации в llama.cpp.