Implementacja technik przycinania modelu

Skalowalne modele AI z PyTorch Lightning

Sergiy Tkachuk

Director, GenAI Productivity

Kiedy stosować przycinanie?

$$

  • 📱 Przydatne przy wdrażaniu modeli na urządzeniach brzegowych lub wbudowanych

$$

  • ➕ Można łączyć z kwantyzacją dla zwiększenia efektywności

$$

  • ⚡ Stosuj, gdy priorytetem jest zmniejszenie opóźnień lub rozmiaru modelu
Skalowalne modele AI z PyTorch Lightning

Czym jest przycinanie modelu?

$$

  • Usuwa mniej istotne połączenia w sieciach neuronowych
  • Tworzy rzadkie modele, wydajne pod kątem przechowywania i obliczeń
  • Popularnym podejściem jest niestrukturalne przycinanie L1

Przykład przycinania

Skalowalne modele AI z PyTorch Lightning

Czym jest przycinanie modelu?

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)
Skalowalne modele AI z PyTorch Lightning

Omówienie masek przycinania

$$

  • Przycinanie dodaje binarną maskę do każdego docelowego tensora wag.

$$

  • Maska = 1 --> waga zachowana.
  • Maska = 0 --> waga zerowana podczas przejścia w przód.

$$

  • Wagi są przechowywane w pamięci do momentu usunięcia maski.
Skalowalne modele AI z PyTorch Lightning

Trwałe przycinanie

  • Domyślnie przycięte wagi pozostają częścią oryginalnego tensora
  • Aby sfinalizować przycinanie, należy usunąć reparametryzacje
  • Konwertuje warstwę rzadką na standardową z wyzerowanymi wagami
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
Skalowalne modele AI z PyTorch Lightning

Ocena wpływu przycinania

  • Porównaj wydajność oryginalnego i przyciętego modelu
  • Spodziewaj się niewielkich spadków dokładności, ale znacznych oszczędności pamięci
  • Pomaga ocenić, czy kompromis jest akceptowalny przy wdrożeniu

Kompromis przy przycinaniu modelu

Skalowalne modele AI z PyTorch Lightning

Czas na ćwiczenia!

Skalowalne modele AI z PyTorch Lightning

Preparing Video For Download...