paint-brush
DNN'ler için 2 Kat Hızlanmayı Ortaya Çıkarma: Sadece 1 Dakikada Entegre Sinir Ağlarıyla Modelleri Dönüştürmeile@thestage
1,192 okumalar
1,192 okumalar

DNN'ler için 2 Kat Hızlanmayı Ortaya Çıkarma: Sadece 1 Dakikada Entegre Sinir Ağlarıyla Modelleri Dönüştürme

ile TheStage AI6m2023/08/31
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Bu makalede, 4x görüntü süper çözünürlüklü EDSR modelini bir INN'ye dönüştürme sürecinde size rehberlik edeceğiz, ardından modelin yapılandırılmış budamasının nasıl elde edileceğini göstereceğiz. Son olarak, INN'yi tekrar ayrı bir DNN'ye dönüştüreceğiz ve verimli çıkarım için onu bir Nvidia GPU'ya yerleştireceğiz.
featured image - DNN'ler için 2 Kat Hızlanmayı Ortaya Çıkarma: Sadece 1 Dakikada Entegre Sinir Ağlarıyla Modelleri Dönüştürme
TheStage AI HackerNoon profile picture
0-item
1-item


İntegral Sinir Ağları (INN'ler), bir kez eğitilen, herhangi bir ince ayar gerektirmeden isteğe bağlı kullanıcı tanımlı boyuta dönüştürülebilen esnek mimarilerdir. Ses dalgaları (müzik) istenilen herhangi bir örnekleme oranında (ses kalitesi) örneklenebildiğinden, INN'ler veri ve parametrelerin şeklini (DNN kalitesi) dinamik olarak değiştirebilir.


INN uygulamaları. Çıkarım sırasında, donanım veya veri koşullarına bağlı olarak ağın boyutu dinamik olarak değiştirilebilir. Boyut küçültme yapılandırılmıştır ve otomatik olarak sinir ağının sıkıştırılmasına ve hızlandırılmasına yol açar.



TheStage.ai ekibi, "İntegral Sinir Ağları" başlıklı makalelerini IEEE/CVF CVPR 2023 konferansında sundu. Bu çalışma, etkinlikte yer alan yalnızca 12 'Ödül Adayı' makalesinden biri olarak kabul edildi. INN'ler, temel katmanları temsil etmek için sürekli parametreleri ve integral operatörleri birleştiren yeni bir sinir ağları sınıfıdır. Çıkarım aşamasında, INN'ler sürekli ağırlıklardan ayrık örnekleme yoluyla sıradan bir DNN temsiline dönüştürülür. Bu tür ağların parametreleri, filtre ve kanal boyutları boyunca süreklidir ve bu, yalnızca bu boyutlar boyunca yeniden ayrıklaştırma yoluyla ince ayar yapmadan yapılandırılmış budamaya yol açar.


Bu makalede, 4x görüntü süper çözünürlüklü EDSR modelini bir INN'ye dönüştürme sürecinde size rehberlik edeceğiz, ardından modelin yapılandırılmış budamasının nasıl elde edileceğini göstereceğiz. Son olarak INN'yi tekrar ayrı bir DNN'ye dönüştüreceğiz ve verimli çıkarım için onu bir Nvidia GPU'ya yerleştireceğiz. Bu makale şu şekilde ilerleyecektir:


  1. INN'lere kısa bir giriş.
  2. Süper çözünürlüklü görev için EDSR ağına genel bakış.
  3. Tek bir kod satırında entegre EDSR elde etmek için TorchIntegral çerçeve uygulaması.
  4. INN'de ince ayar yapılmadan INN'nin yapısal budaması (hızlı boru hattı).
  5. Budanmış modelleri Nvidia GPU'larına dağıtın.


Daha fazla bilgi ve güncelleme için lütfen aşağıdaki kaynakları kontrol edin:

INN proje sitesi

INN projesi Github

Bu makalenin destek kodu


Ayrık EDSR'nin özellik haritaları.


INN EDSR'nin özellik haritaları. INN'lerde kanalların sürekli olarak organize edildiğini görmek kolaydır.


İnce ayar yapmadan DNN'lerin budanması için INN'ler

INN'lerdeki katmanların yerini integral operatörleri alır, ancak integral operatörlerinin pratik değerlendirmesi, sayısal entegrasyon yöntemlerinin kullanımı için giriş sinyallerinin ayrıklaştırılmasını gerektirir. INN'lerdeki katmanların, ayrıklaştırma sonrasında klasik DNN katmanlarıyla (tamamen bağlantılı, evrişimler) örtüşecek şekilde tasarlandığı ortaya çıktı.


İntegral tam bağlı katman değerlendirmesine genel bakış.


EDSR 4x Görüntü Süper Çözünürlüklü budama

Görüntü süper çözünürlüğü, bir görüntünün bilinen veya bilinmeyen bir bozulma operatörüyle geliştirilmesi gereken, iyi bilinen bir bilgisayarlı görme görevidir. Bir bozunma operatörü olarak bikübik alt örneklemeyi kullanan klasik süper çözünürlüklü formu göz önünde bulunduruyoruz.


Süper çözünürlüklü görüntü görevleri için, difüzyon modellerine ve transformatörlere dayalı üst düzey sinir ağları da dahil olmak üzere pek çok mimari kullanılabilir. Bu belgede 4x EDSR mimarisine odaklanacağız. EDSR mimarisi, ResNet'i (birçok derin öğrenme probleminde yaygın olarak kullanılan) ve sonunda 4x örnekleme bloğunu içerdiğinden gösterimimiz için çok uygundur. EDSR'nin şematik bir açıklaması aşağıdaki şekillerde bulunabilir.


EDSR mimarisi. EDSR mimarisi bir dizi Artık Bloktan ve onu takip eden bir üst örnek bloktan oluşur. Bu üst örnekleme bloğu çeşitli evrişimlerden ve Üst Örnekleme katmanlarından oluşur.


Sol: Artık blok mimarisi. Sağda: 4x süper çözünürlük için üst örnekleme bloğu, her Üst Örnekleme katmanının 2x ölçeği vardır.


EDSR mimarisi budamasının özellikleri

Filtrelerin veya kanalların tamamının silinmesini içeren yapılandırılmış budamanın, EDSR'de birincil yapı taşları olarak hizmet veren artık bloklar üzerinde benzersiz etkileri vardır. Her durum girişe Conv -> ReLU -> Conv bloğu eklenerek güncellendiğinden, giriş ve çıkış sinyallerinin aynı sayıda parametreye sahip olması gerekir. Bu, bir budama bağımlılık grafiği oluşturularak TorchIntegral'de verimli bir şekilde yönetilebilir. Aşağıdaki şekil, her bir artık bloğun ikinci evrişiminin tek bir grup oluşturduğunu göstermektedir.


Bağımlılık gruplarının budanması. Bir dizi artık blokta ikinci evrişim tek bir grup oluşturur.


Bir artık bloktaki ikinci evrişimi budamak için, her bir artık bloktaki tüm ikinci evrişimleri budamak gerekir. Bununla birlikte, daha esnek bir kurulum için, tüm kalan bloklarda birinci evrişimlerin filtrelerini ve dolayısıyla ikinci evrişimin kanallarını budayız.


EDSR modelinin INN EDSR'ye dönüştürülmesi

Önceden eğitilmiş DNN'lerden dönüşümler için, daha düzgün enterpolasyonla özel filtre kanalları permütasyon algoritmamızı kullanırız. Permütasyon algoritması, DNN'lerin ağırlıklarının sürekli işlevlerden örneklenmiş gibi görünmesini sağlarken model kalitesini korur.


DNN'den INN'ye dönüşüm. Ayrık ağırlıkları değiştirmek için Gezgin Satıcı Problemi formülasyonunu kullanıyoruz. Permütasyondan sonra, önceden eğitilmiş DNN'de kalite düşüşü yaşanmadan daha yumuşak ağırlıklar elde ettik.


 import torch import torchintegral as inn from super_image import EdsrModel # creating 4x EDSR model model = EdsrModel.from_pretrained("eugenesiow/edsr", scale=4).cuda() # Transform model layers to integral. # continous_dims and discrete dims define which dimensions # of parameters tensors should be parametrized continuously # or stay fixed size as in discrete networks. # In our case we make all filter and channel dimensions # to be continuous excluding convolutions of the upsample block. model = inn.IntegralWrapper(init_from_discrete=True)( model, example_input, continuous_dims, discrete_dims ).cuda()


Entegrasyon ızgara ayarı: DNN'lerin yapılandırılmış eğitim sonrası budaması

Entegrasyon ızgara ayarı, filtrelerinin kullanıcı tanımlı sayılar için örneklenmesi gereken parametre tensörlerini (SGD optimizasyonu altında) sorunsuz bir şekilde seçen işlemdir. Filtre/kanal silme yöntemlerinden farklı olarak INN'ler, enterpolasyon işlemi nedeniyle birkaç ayrı filtreyi birleştirebilen filtreler üretir.


INN'ler, filtre ve kanal boyutları boyunca parametrelerin tensörü üzerinde yumuşak indekse göre seçim işlemi sunar.


 # Set trainable gird for each integral layer # Each group should have the same grid # During the sum of continuous signals # We need to sample it using the same set of points for group in model.groups: new_size = 224 if 'operator' in group.operations else 128 group.reset_grid(inn.TrainableGrid1D(new_size)) # Prepare model for tuning of integration grid model.grid_tuning() # Start training train(model, train_data, test_data)


Entegrasyon ızgarası ayarı, küçük bir kalibrasyon seti üzerinde gerçekleştirilebilen hızlı bir optimizasyon işlemidir . Bu optimizasyonun sonucu yapısal olarak sıkıştırılmış bir DNN'dir. Tek bir Nvidia A4000 üzerinde yapılan testler, Div2k veri kümesinin tamamında entegrasyon ızgarası ayarının 4 dakika gerektirdiğini gösteriyor. 4x A4000'deki dağıtılmış kurulum, neredeyse 4 kat hızlanma sağlayarak yalnızca 1 dakikalık bir optimizasyon süresi sağlar.


Deneylerimiz sırasında, 500 görüntünün, 4000 görüntüden oluşan tam bir Div2k tren seti ile aynı sonucu verdiğini gördük.


Verim

Ortaya çıkan INN modeli kolaylıkla ayrı bir modele dönüştürülebilir ve herhangi bir NVIDIA GPU'ya yerleştirilebilir. RTX A4000'de 64x64 giriş çözünürlüğüyle saniye başına kare (FPS) sağlıyoruz. Sıkıştırılmış model neredeyse 2 kat hızlanma sağlıyor. Budanmış INN modelini ayrık bir modele dönüştürmek için aşağıdaki kod satırı kullanılabilir:


 model = model.transform_to_discrete() # then model can be compiled, for instance # compilation can add an additional 1.4x speedup for inference model = torch.compile(model, backend='cudagraphs') 


Sol. 4x Bikübik büyütülmüş görüntü. Sağ. INN kullanan %50 sıkıştırılmış EDSR modeli.


Modeli

Boyut FP16

FPS RTX A4000

PSNR

EDSR orij.

75MB

170

30.65

INN EDSR %30

52 MB

230

30.43

INN EDSR %40

45MB

270

30.34

INN EDSR 50%

37MB

320

30.25

Çözüm

Bu makalede CVPR2023 ödül adayı makalesi “İntegral Sinir Ağları”na genel bir bakış sunduk. 4x EDSR modelinin eğitim sonrası budaması için uygulandı ve tek satır kodla neredeyse 2 kat hızlanma ve entegrasyon ızgarasında 1 dakikalık ince ayar elde edildi.


Gelecek makalelerimizde INN'lerin daha fazla uygulamasını sunacağız ve verimli model dağıtımına ilişkin daha fazla ayrıntıyı ele alacağız. Bizi izlemeye devam edin:


INN proje sitesi

INN projesi Github

Bu makalenin destek kodu


İlginiz için teşekkür ederiz!


Burada da yayınlandı.