Какие методы ускорения нейросетей вы знаете?

«Какие методы ускорения нейросетей вы знаете?» — вопрос из категории Нейронные сети и Deep Learning, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ускорение нейросетей затрагивает как этап инференса, так и обучение. Вот ключевые подходы:

1. Архитектурные оптимизации:

  • Использование эффективных архитектур: Замена стандартных слоев на более легкие (например, свертки с разделяемыми весами в MobileNet, слои сжатия-возбуждения в Squeeze-and-Excitation networks).
  • Дистилляция знаний (Knowledge Distillation): Обучение компактной модели-«студента» имитировать выходы или внутренние представления большой, предобученной модели-«учителя».

2. Сжатие моделей:

  • Прунинг (Pruning): Удаление малозначимых весов или целых нейронов/фильтров из обученной сети с последующим дообучением.
  • Квантование (Quantization): Снижение битности весов и активаций (например, с float32 до int8). Это сильно ускоряет вычисления на CPU/GPU и снижает объем памяти.
    # Пример в TensorFlow Lite
    converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
    converter.optimizations = [tf.lite.Optimize.DEFAULT]
    quantized_tflite_model = converter.convert()

3. Инфраструктурные и вычислительные оптимизации:

  • Использование оптимизированных рантаймов: Запуск модели через TensorRT, ONNX Runtime или OpenVINO, которые применяют графовые оптимизации и используют аппаратно-специфичные инструкции.
  • Оптимизация пайплайна данных: Увеличение размера батча, использование асинхронной загрузки данных, кэширование и предварительная выборка (prefetching).
  • Смешанная точность (Mixed Precision): Использование float16 для вычислений и float32 для хранения мастер-весов при обучении, что ускоряет операции на современных GPU.
  • Градиентный чекпоинтинг (Gradient Checkpointing): Экономия памяти при обучении глубоких сетей за счет пересчета некоторых промежуточных активаций во время обратного прохода, а не их хранения.