Квантование
Тема дорожной карты · Глубокое обучение
Квантизация — это процесс замены FP32-весов и активаций на целочисленные форматы пониженной точности (INT8, INT4) или компактные float-форматы (FP16, BF16, FP8), что позволяет сократить потребление памяти и ускорить процесс инференса на CPU, GPU и ускорителях. Этот метод особенно важен для улучшения производительности моделей глубокого обучения в условиях ограниченных ресурсов. Post-training quantization (PTQ) калибрует диапазоны на небольшом датасете, в то время как quantization-aware training (QAT) дообучает модель с симуляцией квантизации, восстанавливая при этом точность. Для моделей языковых логических машин (LLM) стандартами стали методы GPTQ, AWQ и LLM.int8 из библиотеки bitsandbytes. Используйте torch.ao.quantization или TensorFlow Lite и обязательно сравнивайте latency и качество перед выкаткой.
Как это работает
Квантизация представляет собой совокупность техник сжатия и ускорения, которые позволяют улучшить производительность модели без большой потери качества. Процесс квантизации конвертирует FP32-веса в INT8/INT4, что приводит к значительному сокращению потребления памяти (4-8 раз меньше) и ускорению на поддерживаемом аппаратном обеспечении. В дополнение к квантизации, используются такие методы оптимизации, как обрезка (pruning) и дистилляция знаний (knowledge distillation). Обрезка удаляет веса с низкой магнитудой, что может привести к реальному ускорению при использовании структурированной обрезки (structured pruning), хотя неструктурированная обрезка (unstructured pruning) редко приводит к ускорению на GPU. Дистилляция знаний обучает небольшую "ученическую" модель под руководством большой "учительской" модели, что позволяет улучшить производительность и снизить размер модели. Конверсия модели в формат ONNX позволяет использовать специфические для аппаратного обеспечения оптимизации, такие как TensorRT, OpenVINO или CoreML.
Когда применять
Квантизация особенно полезна для улучшения производительности модели при инференсе на масштабе. Post-training quantization (PTQ) обычно применяется для уменьшения размера модели и ускорения инференса, особенно когда используются форматы INT8 и INT4. Например, квантизация до INT8 практически не влияет на качество, в то время как квантизация до INT4 (AWQ/GPTQ) может привести к незначительному снижению точности (менее 2%), но при этом сокращает потребление VRAM в четыре раза. Дистилляция знаний оправдана при жестком ограничении времени выполнения (latency) и наличии большого количиства неотмеченных данных для обучения "учительской" модели. Конверсия модели в формат ONNX служит языком общения между PyTorch и производственными средами выполнения. Важно измерять реальный прирост производительности на целевом аппаратном обеспечении, так как теоретические улучшения не всегда приводят к реальным результатам.
Типичные ошибки
Применение квантизации может привести к нескольким типичным ошибкам. Например, агрессивное применение квантизации до INT4 на маленьких моделях может привести к катастрофическому падению точности, так как квантизация лучше работает на больших моделях. Неструктурированная обрезка с ожиданием ускорения на GPU может привести только к экономии памяти, но не к ускорению времени выполнения. Конверсия модели в формат ONNX может сломать пользовательские операции (custom ops), поэтому важно тщательно тестировать конвертированные модели. Наконец, дистилляция знаний без достаточного количества данных для обучения "учительской" модели может привести к тому, что "ученическая" модель достигнет плато и перестанет улучшать свою производительность.