Методы прореживания моделей

Масштабируемые модели ИИ с PyTorch Lightning

Sergiy Tkachuk

Director, GenAI Productivity

Когда использовать прореживание?

$$

  • 📱 Полезно при развёртывании моделей на периферийных и встраиваемых устройствах

$$

  • ➕ Сочетается с квантизацией для суммарного повышения эффективности

$$

  • ⚡ Применяйте, когда важно снизить задержку или уменьшить размер модели
Масштабируемые модели ИИ с PyTorch Lightning

Что такое прореживание модели?

$$

  • Удаляет менее важные связи в нейронных сетях
  • Даёт разреженные модели, эффективные при хранении и вычислениях
  • Распространённый подход — L1-прореживание без структуры

пример прореживания

Масштабируемые модели ИИ с PyTorch Lightning

Что такое прореживание модели?

import torch.nn.utils.prune as prune

prune.l1_unstructured(model.fc, name="weight",
                      amount=0.4)

print(model.fc.weight.data)
tensor([[ 0.25, -0.13,  0.05,  0.70],
        [-0.88,  0.31, -0.02,  0.44]]) # Before pruning


tensor([[ 0.25, -0.13,  0.00,  0.70],
        [ 0.00,  0.31,  0.00,  0.44]]) # After pruning (40% weights set to 0)
Масштабируемые модели ИИ с PyTorch Lightning

Как работают маски прореживания

$$

  • Прореживание добавляет бинарную маску к каждому целевому тензору весов.

$$

  • Маска = 1 --> вес сохраняется.
  • Маска = 0 --> вес обнуляется при прямом проходе.

$$

  • Веса остаются в памяти, пока маска не удалена.
Масштабируемые модели ИИ с PyTorch Lightning

Закрепление прореживания

  • По умолчанию прореженные веса остаются частью исходного тензора
  • Чтобы зафиксировать прореживание, удалите репараметризации
  • Разреженный слой преобразуется в стандартный с нулевыми весами
Sequential(
  (fc): Linear(
    in_features=128, out_features=64,
    bias=True
    (weight): PrunedParam()
  )
) # Before prune.remove
import torch.nn.utils.prune as prune

prune.remove(model.fc, 'weight')

# Print model structure
print(model)

Sequential(
  (fc): Linear(in_features=128,
               out_features=64,
               bias=True)
) # After prune.remove
Масштабируемые модели ИИ с PyTorch Lightning

Оценка эффекта прореживания

  • Сравните производительность исходной и прореженной модели
  • Ожидайте небольшого снижения точности при значительной экономии памяти и размера
  • Позволяет оценить, приемлем ли компромисс для развёртывания

pruning_model_tradeoff.png

Масштабируемые модели ИИ с PyTorch Lightning

Давайте потренируемся!

Масштабируемые модели ИИ с PyTorch Lightning

Preparing Video For Download...