Türkçe Haberler
Son haberler
Yapay Zeka ve Teknoloji

cuda-convnet'in İçinde: AlexNet'in Çift GPU Katmanları ve ImageNet Dönemi

Açıklayıcı görsel: bir işlemci çipi detayı; makalede tartışılan NVIDIA GPU'su değildir.
Açıklayıcı görsel: bir işlemci çipi detayı; makalede tartışılan NVIDIA GPU'su değildir.

2012'deki AlexNet dönüm noktası; düşük seviyeli GPU mühendisliğine (cuda-convnet) ve bölünmüş çift GPU mimarisine dayanıyordu ve daha derin, daha verimli bilgisayarlı görü modellerine yönelik hızlı bir yarışı doğrudan tetikledi.

1. cuda-convnet Kaputun Altında Nasıl Çalışıyordu

NVIDIA cuDNN'i geliştirmeden önce Alex Krizhevsky, erken Fermi mimarili GPU'lardan (GTX 580) azami hızı almak için cuda-convnet'i ham CUDA C++ ile yazdı. Modern kütüphaneler genellikle konvolüsyonları devasa matris çarpımlarına (im2col) açar; bu da çok büyük miktarda bellek tüketir. Her GTX 580'de yalnızca 3 GB VRAM bulunduğundan Krizhevsky doğrudan, bellek tasarruflu GPU rutinleri geliştirdi.

  • Önce-Batch Bellek Düzeni (CHWN). Modern çerçeveler varsayılan olarak NCHW (Batch, Kanal, Yükseklik, Genişlik) kullanır; bu düzen tek bir görüntünün tüm piksellerini bellekte yan yana koyar. Krizhevsky tensörleri CHWN sırasıyla saklayarak batch boyutunu (N) sona yerleştirdi. Bir warp içindeki 32 GPU iş parçacığı 32 farklı görüntüyü tam olarak aynı piksel konumunda işlediğinde, bellek okumaları tamamen ardışık (coalesced) oluyor ve VRAM bant genişliği en üst düzeye çıkıyordu.
  • Paylaşılan Bellekte Döşeme (Tiling). Genel VRAM'den okuma yüzlerce saat çevrimi sürerken, çip üzerindeki Paylaşılan Bellek (GTX 580'de Streaming Multiprocessor başına yalnızca 48 KB) yalnızca birkaç çevrim alır. İş parçacığı blokları, görüntü piksellerinin ve filtre ağırlıklarının küçük 2B parçalarını Paylaşılan Belleğe yüklüyor ve nihai sonuçları VRAM'e geri yazmadan önce düzinelerce iç çarpım hesaplıyordu.
  • Warp Düzeyinde Yazmaç Yeniden Kullanımı. Krizhevsky her iş parçacığı bloğuna, birden fazla filtre için bir çıktı pikseli döşemesini aynı anda hesaplatıyordu. Filtre ağırlıklarını hızlı GPU yazmaçlarında tutarak Paylaşılan Bellekten yüklenen tek bir görüntü yaması aynı anda birçok filtrede yeniden kullanıldı ve bellek trafiği önemli ölçüde azaldı.

2. AlexNet'in Belirli Katmanları ve Çift GPU Bölünmesi

AlexNet, toplamda yaklaşık 60 milyon parametreye sahip 8 öğrenilen katman (5 konvolüsyonel ve 3 tam bağlantılı) içeriyordu. Tek bir GTX 580, aktivasyonlar, ağırlıklar ve gradyanlar için gereken 3 GB+ VRAM'e sahip olmadığından Krizhevsky ağı dikey olarak iki paralel akışa böldü.

KatmanTürToplam Filtre / NöronGPU Başına BölünmeGPU'lar Arası İletişim
GirdiRGB Görüntü224 × 224 × 3Her iki GPU'ya kopyalanırYok
Conv 111×11 Conv (adım 4) + MaxPool96 filtreGPU başına 48 filtreYalıtılmış (Senkronizasyon yok)
Conv 25×5 Conv + MaxPool256 filtreGPU başına 128 filtreYalıtılmış (Yalnızca kendi GPU'sunun Conv 1'ini okur)
Conv 33×3 Conv384 filtreGPU başına 192 filtreTam Senkronizasyon (Her iki GPU'dan gelen 256 haritanın tamamını okur)
Conv 43×3 Conv384 filtreGPU başına 192 filtreYalıtılmış (Yalnızca kendi GPU'sunun Conv 3'ünü okur)
Conv 53×3 Conv + MaxPool256 filtreGPU başına 128 filtreYalıtılmış (Yalnızca kendi GPU'sunun Conv 4'ünü okur)
FC 6Tam Bağlantılı + Dropout4.096 nöronGPU başına 2.048 nöronTam Senkronizasyon (Tüm Conv 5 çıktılarına bağlanır)
FC 7Tam Bağlantılı + Dropout4.096 nöronGPU başına 2.048 nöronTam Senkronizasyon (Tüm FC 6 nöronlarına bağlanır)
FC 8Tam Bağlantılı (Softmax)1.000 sınıf1.000 sınıf (Birleşik)Tam Senkronizasyon (Nihai ImageNet tahminlerini üretir)
  • Doğal Özellik Uzmanlaşması. İlginç şekilde, 1. ve 2. katmanlar GPU'lar arasında hiç iletişim kurmadığından iki kart tutarlı biçimde uzmanlaşmış roller geliştirdi. Bir GPU renkten bağımsız kenar ve doku algılayıcılarını (gri tonlamalı Gabor benzeri filtreler) öğrenirken, diğer GPU renge özgü lekeler ve tonlar konusunda uzmanlaştı.
  • PCIe Darboğazlarını En Aza İndirme. Verileri anakartın PCIe veri yolu üzerinden aktarmak yavaştı. Krizhevsky, GPU'lar arası iletişimi kesinlikle Conv 3 ve Tam Bağlantılı katmanlarla sınırlayarak GPU'ların veri aktarımlarında beklemeden tam hızda hesaplama yapmasını sağladı.

3. ImageNet Döneminde Sonra Ne Oldu

AlexNet'in zaferi, ImageNet yarışmasında yıllık bir yarışı ateşledi ve ağları yalnızca üç yıl içinde 8 katmandan 150'den fazla katmana taşıdı.

  • 2013 – ZFNet (Görselleştirme & Ayarlama). Matthew Zeiler ve Rob Fergus, AlexNet'in gizli katmanların içinde gerçekte ne gördüğünü görselleştirmek için dekonvolüsyon tekniklerini ortaya koydu. AlexNet'in ilk katman filtre boyutunu 11×11'den 7×7'ye küçülterek ve adımı azaltarak ZFNet, ImageNet top-5 hata oranını %15,3'ten %14,8'e düşürdü.
  • 2014 – VGGNet (Tekdüze 3×3 Filtrelerle Derinlik). Oxford'daki araştırmacılar, çok sayıda küçük 3×3 konvolüsyonu (16 veya 19 katmana kadar) üst üste yığmanın, tek büyük filtreler (11×11 veya 5×5 gibi) kullanmaktan daha iyi çalıştığını kanıtladı. Üst üste konmuş iki 3×3 katman, daha az parametreyle ve ek doğrusal olmayan ReLU aktivasyonlarıyla aynı 5×5 görüş alanını kapsar ve hata oranlarını %7,3'e düşürdü.
  • 2014 – GoogLeNet / Inception (Çok Ölçekli Verimlilik). Google, aynı katman içinde 1×1, 3×3 ve 5×5 konvolüsyonları paralel çalıştıran ve çıktıları birleştiren Inception modülünü tanıttı. GoogLeNet, pahalı işlemlerden önce kanal derinliğini sıkıştırmak için ucuz 1×1 konvolüsyonlar kullanarak 22 katmana ve %6,7 hata oranına ulaştı; üstelik AlexNet'ten 12 kat daha az parametre kullandı.
  • 2015 – ResNet (Atlamalı Bağlantılar & 152 Katman). Daha fazla katman yığmak, geri yayılım sırasında gradyanlar kaybolduğu için sonunda eğitim doğruluğunun düşmesine yol açtı. Microsoft Research bunu, verinin doğrudan kimlik kısayolları aracılığıyla katmanları atlamasına izin veren Artık Bağlantılarla (atlamalı bağlantılar) çözdü. Bu, 152 katmanlı ağların önünü açtı ve %3,57 top-5 hata oranına ulaşarak ilk kez insan düzeyindeki kıyaslama performansını (~%5) aştı.

Diğer haberler: Yapay Zeka ve Teknoloji