Мы с коллегами из Yandex Research сделали новый метод квантизации LLM’ок - AQLM. Он позволяет сжимать модели вплоть до 2 бит на параметр, что открывает тонну возможностей от запуска Llama 2 70b на RTX 3090 до, потенциально, меньших моделей на мобилках. Статья доступна на arXiv, код лежит на GitHub.
Про качество: AQLM бьет по качеству все существующие методы в диапазоне 2-3 бит на параметр: AQLM 2 бита лучше чем QuIP# 2 бита и даже мощнее GPTQ 3 бита.
Про готовые модели: мы выложили готовые квантизованные модели на хаб. Лламы от 7b до 70b и Mixtral в разных конфигурациях. Для быстрого инференса мы написали несколько кернелов на CUDA, Triton и Numba. Они оптимизированы под различные сетапы квантизации, и либо немного уступают, либо заметно превосходят fp16 по скорости генерации.
Про использование: весь продвинутый код инференса завернут в одну либу, и устанавливается просто через pip install aqlm. После этого можно смело подгружать любые модели с хаба через .from_pretrained(..., trust_remote_code=True), и оптимальные кернелы будут выбираться и компилироваться на ходу за кулисами.
Про метод: мы применяем квантизацию групп соседних весов для эффективного использования их взаимной информации. Более конкретно, мы представляем все блоки весов (размером около 1x8) в матрице суммой некоторого количества векторов из небольшого обучаемого списка (Additive Quantization). Детали и бэкграунд подробно описаны в статье.
Про качество: AQLM бьет по качеству все существующие методы в диапазоне 2-3 бит на параметр: AQLM 2 бита лучше чем QuIP# 2 бита и даже мощнее GPTQ 3 бита.
Про готовые модели: мы выложили готовые квантизованные модели на хаб. Лламы от 7b до 70b и Mixtral в разных конфигурациях. Для быстрого инференса мы написали несколько кернелов на CUDA, Triton и Numba. Они оптимизированы под различные сетапы квантизации, и либо немного уступают, либо заметно превосходят fp16 по скорости генерации.
Про использование: весь продвинутый код инференса завернут в одну либу, и устанавливается просто через pip install aqlm. После этого можно смело подгружать любые модели с хаба через .from_pretrained(..., trust_remote_code=True), и оптимальные кернелы будут выбираться и компилироваться на ходу за кулисами.
Про метод: мы применяем квантизацию групп соседних весов для эффективного использования их взаимной информации. Более конкретно, мы представляем все блоки весов (размером около 1x8) в матрице суммой некоторого количества векторов из небольшого обучаемого списка (Additive Quantization). Детали и бэкграунд подробно описаны в статье.