Закажи экспресс-аудит своего дела онлайн всего за 199 ₽
и получи рекомендации по улучшению - Жми сюда !

TurboQuant: оправдывают ли себя показатели сжатия и производительности?

Как это повышает эффективность без потери точности? Действительно ли это оправдывает ажиотаж?

TurboQuant: оправдывают ли себя показатели сжатия и производительности?

# Введение

TurboQuant — это новый набор алгоритмов и библиотека, недавно выпущенные Google. Его цель — применение передовых методов квантования и сжатия к большим языковым моделям (LLM) и векторным поисковым системам — незаменимым элементам систем генерации с дополненной информацией (RAG) — для существенного повышения их эффективности. Было показано, что TurboQuant успешно снижает потребление кэш-памяти до 3 бит, не требуя переобучения модели и не жертвуя точностью.

Как это работает, и действительно ли это оправдывает шумиху? Цель этой статьи — ответить на эти вопросы посредством описания и практического примера использования.

# TurboQuant в двух словах

Хотя LLM-системы и векторные поисковые системы используют многомерные векторы для обработки информации с впечатляющими результатами, это требует огромных объемов памяти, что потенциально может привести к серьезным узким местам в так называемом кэше «ключ-значение» (KV) — быстродоступном «цифровом справочнике», содержащем часто используемую информацию для поиска в реальном времени. Управление большими длинами контекста масштабирует доступ к кэшу KV линейным образом, что серьезно ограничивает объем памяти и скорость вычислений.

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

TurboQuant — это набор алгоритмов нового поколения для расширенного сжатия без потери точности. Он оптимально решает проблему избыточного использования памяти, применяя двухэтапный процесс, дополненный двумя взаимодополняющими методами:

  • PolarQuant: Это метод сжатия, применяемый на первом этапе. Он сжимает высококачественные данные путем преобразования векторных координат в полярную систему координат. Это упрощает геометрию данных и устраняет необходимость хранения дополнительных констант квантования — основной причины увеличения объема памяти.
  • QJL (квантованный метод Джонсона-Линденштрауса): второй этап процесса сжатия. Он направлен на устранение возможных искажений, внесенных на предыдущем этапе, выступая в качестве математического инструмента проверки, который применяет небольшое однобитное сжатие для удаления скрытых ошибок или остаточных искажений, возникающих в результате применения PolarQuant.

Оправдывает ли TurboQuant свою популярность?

Согласно экспериментальным результатам и имеющимся данным, короткий ответ — да . Благодаря отсутствию дорогостоящей нормализации данных, необходимой в традиционных подходах к квантованию, 3-битный TurboQuant обеспечивает восьмикратное увеличение производительности по сравнению с 32-битными неквантованными ключами на ускорителе на базе графического процессора H100.

# Оценка TurboQuant

Следующий пример кода на Python иллюстрирует, как разработчики могут выполнить это локально. Программа может быть запущена в локальной среде разработки (IDE) или в среде блокнотов Google Colab, что позволяет провести концептуальное сравнение между неквантованными векторами и быстрым сжатием TurboQuant.

Для работы репозиториев TurboQuant требуются определённые ядра. Чтобы этот пример заработал, сначала выполните следующие установки — предпочтительно в среде ноутбука, если только у вас нет достаточного места на диске локального компьютера.

Сначала установите TurboQuant:

pip install turboquant

В среде Google Colab просто установите библиотеку и убедитесь, что в качестве аппаратного ускорителя во время выполнения выбран графический процессор T4 (доступен в бесплатном тарифе Colab), чтобы следующий код выполнялся корректно.

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

import torch import time from transformers import AutoModelForCausalLM, AutoTokenizer from turboquant import TurboQuantCache

Мы загрузим не очень большой LLM, например TinyLlama/TinyLlama-1.1B-Chat-v1.0, обученный для генерации текста, и соответствующий ему токенизатор. Мы указываем использование 16-битной десятичной точности с плавающей запятой: этот вариант обычно более эффективен на современном оборудовании.

model_id = «TinyLlama/TinyLlama-1.1B-Chat-v1.0″ tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id, device_map=»auto», torch_dtype=torch.float16)

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

prompt = «Подробно объясните историю Вселенной.» * 20 inputs = tokenizer(prompt, return_tensors=»pt»).to(«cuda»)

Следующая функция является ключевой для измерения и сравнения времени выполнения и использования памяти в процессе генерации текста, при этом используется 3-битное квантование TurboQuant (use_tq=True или отключено, use_tq=False). Для обеспечения корректных измерений предварительно очищается кэш.

def run_unified_benchmark(use_tq=False): torch.cuda.empty_cache() # Инициализация конкретного типа кэша cache = TurboQuantCache(bits=3) if use_tq else None start_time = time.time() with torch.no_grad(): # Запуск модели для генерации выходных токенов outputs = model.generate(**inputs, max_new_tokens=100, past_key_values=cache) duration = time.time() — start_time # Изоляция кэш-памяти # Вместо измерения всей модели размером 2 ГБ, мы измеряем размер сгенерированного кэша # Для модели размером 1,1 млрд: [Слои: 22, Головы: 32, Размеры голов: 64] num_tokens = outputs.shape[1] elements = 22 * 32 * 64 * num_tokens * 2 # Ключ + Значение if use_tq: mem_mb = (элементов * 3) / (8 * 1024 * 1024) # 3-битное вычисление else: mem_mb = (элементов * 16) / (8 * 1024 * 1024) # 16-битное вычисление return duration, mem_mb

В итоге мы выполняем этот процесс дважды — по одному разу с каждым из двух указанных параметров — и сравниваем результаты:

base_time, base_mem = run_unified_benchmark(use_tq=False) tq_time, tq_mem = run_unified_benchmark(use_tq=True) print(f»— ВЕРДИКТ —«) print(f»Базовый кэш (FP16): {base_mem:.2f} МБ») print(f»Кэш TurboQuant (3-бит): {tq_mem:.2f} МБ») print(f»Ускорение: {base_time / tq_time:.2f}x») print(f»Сохраненная память: {base_mem — tq_mem:.2f} МБ»)

Результаты:

— ВЕРДИКТ — Базовый (FP16) кэш: 42,45 МБ Кэш TurboQuant (3-бит): 7,86 МБ Ускорение: 0,61x Сэкономленная память: 34,59 МБ

Коэффициент сжатия впечатляет и достигает 5,4x по отношению к объему памяти кэша ключ-значение. Но как насчет ускорения? Соответствует ли оно ожиданиям от TurboQuant? Не совсем, но это нормально, поскольку используемая нами последовательность все еще считается короткой для крупномасштабных сценариев, для которых предназначен TurboQuant, и мы запускаем это в локальной, а не крупномасштабной инфраструктуре. Истинный прирост скорости с TurboQuant происходит по мере того, как длина контекста и используемые аппаратные ускорители масштабируются вместе. Возьмем кластер корпоративного уровня из графических процессоров H100 и длинные RAG-запросы, содержащие более 32 000 токенов: в таких сценариях трафик памяти значительно сокращается, и можно ожидать увеличения пропускной способности до 8 раз с TurboQuant.

В итоге, существует компромисс между пропускной способностью памяти и задержкой вычислений, и вы можете дополнительно подтвердить это, попробовав другие настройки размеров входных и выходных данных, например, умножив входную строку на 200 и установив max_new_tokens=250, вы можете получить что-то вроде:

— ВЕРДИКТ — Базовый (FP16) кэш: 421,44 МБ Кэш TurboQuant (3-бит): 79,02 МБ Ускорение: 0,57x Сэкономленная память: 342,42 МБ

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

# Завершение

В этой статье был представлен TurboQuant и рассмотрен вопрос о том, оправдывает ли он ажиотаж в отношении сжатия и производительности по сравнению с другими традиционными методами квантования, используемыми в LLM и других крупномасштабных моделях вывода.

Иван Паломарес Карраскоса — лидер, писатель, спикер и консультант в области искусственного интеллекта, машинного обучения, глубокого обучения и магистратуры. Он обучает и направляет других в применении ИИ в реальном мире.

Источник: www.kdnuggets.com

✅ Найденные теги: TurboQuant, новости, Показатели, Производительность, Сжатие

Добавить комментарий

Нет других записей в этой рубрике.

Новости других рубрик