FLUTE: Решение для ускорения вывода LLM с помощью квантованных матричных умножений
Большие языковые модели (LLM) сталкиваются с проблемами в развертывании из-за задержек, вызванных ограничениями пропускной способности памяти. Для решения этих проблем исследователи используют квантование только весов, чтобы сжать параметры LLM до меньшей точности. Этот подход улучшает задержку и снижает требования к памяти GPU. Реализация этого эффективно требует кастомизированных ядер умножения матриц различных типов, которые эффективно перемещают, деквантовывают и обрабатывают веса. Существующие ядра, такие как bits and bytes, Marlin и BitBLAS, показали значительное ускорение, но часто ограничены 4-битным квантованием. Недавние достижения в методах квантования с нечетным битом и неравномерным квантованием подчеркивают необходимость более гибких ядер, способных поддерживать более широкий спектр настроек для максимизации потенциала квантования в развертывании LLM.
Практические решения:
- Offline Matrix Restructuring: Переупорядочивание квантованных весов для оптимизации операций Tensor Core, обработка нестандартных битовых ширин (например, 3-битных) путем разделения весов на битовые срезы и их комбинирование в регистрах.
- Vectorized Lookup in Shared Memory: Оптимизация деквантования с использованием векторизованной таблицы поиска, хранящейся в общей памяти, с доступом к двум элементам одновременно, а также использованием дублирования таблицы для уменьшения конфликтов банков.
- Stream-K Workload Partitioning: Равномерное распределение нагрузки по SM (мультипроцессорам) с использованием декомпозиции Stream-K для устранения проблем квантования в низкобитовых и низкопакетных сценариях.
FLUTE демонстрирует впечатляющую производительность на различных формах матриц на графических процессорах A6000 и A100. Оно показывает эффективность в развертывании LLM через объединенные квантованные матричные умножения, обеспечивая улучшенную производительность в различных сценариях.