29 Ekim 2017 Pazar

Derin Öğrenme Başlangıç Seti - Donanım Ve Yazılım

Merhabalar dostlarım. Bu yayınımda Derin Öğrenme'ye(Deep Learning)  başlamak için yazılımsal ve donanımsal olarak nelere neden ihtiyacımız var detaylı bir şekilde anllatmaya çalıştım.
Bu yayını Deep Learning'e giriş seti olarak görebilirsiniz.

Hatırlarsanız daha önceki yayınlarımızda makine öğrenmesi ve deep learning(DL) hakkında konuşmuştuk. DL'e teorik olarak bir giriş yaptıktan sonra bunları uygulama vaktimizin geldiğini düşündüm.

Öncelikle makine öğrenmesi yayınımda elimizdeki verinin artmasından ve bu veriyi işleyecek donanımın güçlenmesinden bahsetmiştik.
Daha hızlı veri işlememiz, matematiksel hesaplamaların daha hızlı yapıldığı anlamına gelmekte. Nasıl mı?
Bilgisayarımızdaki CPU(Central Processing Unit) yani Merkezi İşlem Birimi bu hesaplamaları yapmakla görevlidir. Hesaplamalar Core(çekirdek) ile yapılmaktadır ve her bir Core bir zamanda sadece bir hesaplama yapabilir. CPU'da ki Core'ların sayısı az olsada oldukça güçlüdürler.
Örnek bir CPU fotoğrafı:

GPU(Graphics Processing Unit) yani Grafik İşlemci Ünitesi ise CPU'dan daha zayıf Core'lar içerse de sayıca çok fazla olduğu için hesaplamaları farklı Core'lara bölerek yapar ve dolayısıyla CPU'dan daha hızlı hesaplama yapabilir.
Bu olayı daha iyi anlamak için şöyle yapalım:
Örneğin bir kazan çorba düşünelim. Sizce bu koca kazanı hızlı(bir saniyede 2 kaşık) içen bir adam mı önce bitirir yoksa normal hızda(bir saniyede 1 kaşık) içen 20 kişi mi ? Tabiki normal hızda içen 20 kişi daha hızlı bitirecektir.

Örnek bir GPU fotoğrafı:

Örnek bir CPU ve GPU'daki Core sayısı karşılaştırma görseli:


Bizlerde DL çalışmalarımızda daha hızlı hesaplama yapabilmek için GPU'ları tercih etmekteyiz. DL hesaplamalarını hızlandırmak için yapılmış alternatif makineler tabiki de bulunmaktadır. Örneğin Google'un çıkardığı TPU'lar oldukça iyi gözüküyor. Yazımızın ilerleyen bölümlerinde tekrar bahsedeceğiz. Başka bir örnek olarak da VPU verilebilir.
Örnek bir TPU:

Peki bu güçlü makineleri neye göre seçeceğiz ?

İki iyi seçeneğiniz var, projenize bu makinelerden birini alabilir ya da projenizi internete bağlayarak uzaktaki makineye erişmek. Bu konuda ne alanda çalıştığınızın önemli olduğunu belirtmek isterim. Gelin bu durumları biraz inceleyelim.

Örneğin bir otonom araç yapacaksınız bu örneğimizde dron ya da bir araba düşünelebilir.
Aracın kendi kendine gidebilmesi için sensörlerinden aldığı veriyi(fotoğraf ve radar verileri gibi) makineye taşıyıp yön ve hız gibi verileri hesapladıktan sonra donanıma geri dönüt(dönme açısı ve hız verisi gibi) vermesi gerekmektedir. Buradaki veri aktarımın hızı nereye döneceğine karar vermesi kadar önemli bir yer tutmaktadır. Yoksa veri aktarımı yaparken araç kaza yapabilir veya yanlış yola sapabilir. Dolayısıyla veri işlemenin aracın içinde(local) yapılması gerekir.
Eş zamanlı işlem yapabilmesi veri akışına ve verinin işlenişine bağlıdır.


Peki nasıl bir makine ?

Arabalar için düşünecek olursak. Araba büyük olduğu için yer sorununuzun olmadığını biliyoruz. Bu nedenle normal boyutta GPU'lu makine kullanabiliriz.
Otonom araçlarda kullanılan NVIDIA Drive PX2 kartı:


Fakat dron gibi küçük, uçabilen ve enerji deposu küçük olan bir araç düşündüğümüzde bu boyutta bir kart kullanamayacağımızı görebiliriz.
Örnek dron fotoğrafları:

Peki bunlar için nasıl bir ürün kullanılabilir ?
Aklınıza hemen fiyatı ucuz olan, kredi kartı boyutundaki bilgisayar Raspberry Pi gelmiş olabilir fakat bu geliştirme kartı bizim büyük DL algoritmalarını işleyecek güce(hıza) sahip değil.
Örnek bir Raspberry Pi Zero fotoğrafı:


Peki ya ne kullanabilirim ?
Bu konuda birçok çözüm yolu bulunabilsede ben size popüler olan iki tanesinden bahsedeceğim.

NVIDIA Jetson
Bu da kredi kartı kartı boyutunda bir bilgisayar fakat bu bir GPU yani DL algoritmalarınızı gönül rahatlığıyla çalıştırabileceğiniz bir makine.
Jetson TX1 fotoğrafı:

Jetson TX2 Developer Kit ise tamamen bir bilgisayar. Üzerinde USB, HDMI, SD kart bağlantıları ve hatta Wi-Fi anteni ve bir kamerası bile var. Üzerine rahatlıkla Ubuntu kurabilir; klavye, fare ve ekran bağlayarak bir bilgisayar gibi de kullanabilirsiniz. NVIDIA JetPack yazılımını kurarak da hızlı bir başlangıç yapabilirsiniz. JetPack kurulumu ile DL için en popüler yazılım ve kütüphaneler otomatik olarak kurmuş da olacaksınız.
Jetson TX2 Developer Kit:

Jetson ile yapılmış küçük bir robot:


İkinci seçenek ise bir USB Stick. İntel'in çıkardığı bilgisayarınıza takarak DL algoritmanızı daha hızlı çalıştırabileceğiniz ürünün adı: Movidius Neural Compute Stick
Bu ürünü isterseniz Raspberry Pi'nize takarak kullanabilirsiniz:


Apple bu yıl(2017) çıkarttığı yeni iPhone'lar ile birlikte, telefonların içerisinde kullandığı ve daha verimli nöral işleme yapabilecek A11 Bionic adlı işlemcisini de tanıttı:
Donanımın ne kadar önemli olduğunu görebiliyoruz.


Peki ya bir donanım almak istemiyorsanız ?

Bu seçenekte ise eş zamanlı bir işleme yapmadığımız ya da sadece modeli eğitmek için kullandığımız donanımları inceleyeceğiz. Yani hesaplama hızı(modelin eğitimi daha ön planda) yine önemli olsun fakat veri alışverişi hızı önemli olmasın. Diyelim ki DL modelinizi eğiteceksiniz ve daha sonra kullanacaksınız.
Yani kısa süre için ihtiyacınız var ve bir donanım alıp bir sürü para vermek istemiyorsunuz.
O zaman sizlere bir Cloud lazım. İnternet üzerinden bağlanıp yazılımınızı güçlü bir makinede çalıştırabilir ve işiniz bittikten sonra makineyi kapatabilirsiniz. Ve kullandığınız kadar ödersiniz.
Not: Cloud uzun süreli kullanımlarda günümüzde pahalı bir seçenek olacaktır.

Cloud Sağlayıcıları:

En popüler üç Cloud servisine örnek verecek olursak, Amazon'un AWS'i, Google'un kendi TPU'larını kullanabileceğiniz Google Cloud Platform'u ve Floyd Hub'u örnek verebiliriz.

Donanımı tamamladık peki ya şimdi ?

Öncelikle DL modellerimizi oluşturabileceğimiz bir programlama dili seçelim.
Biliyorsunuz ki Python programlama dili oldukça popüler. Özellikle de yapay zeka, makine öğrenmesi ve derin öğrenme gibi konularda. Yapılan akademik ve ticari çalışmalarda bunu görmekteyiz.
Bunun en büyük nedeni, temiz bir syntax'ı olması ve kolay okunabilir olması. Önemli bir diğer neden ise, Python ile birçok platforma uygulama geliştirebiliyor olmamız. Masaüstü bilgisayarlardan tutun web uygulamalarına kadar birçok alana yayılmış durumda. Blogumda kısa bir tur ile bunu rahatça görebilirsiniz.

Ayrıca yaptığımız matematiksel işlemlerdeki kodlamayı kolaylaştırmak için, Python ile birlikte bazı kütüphaneler de kullanılmakta. Bunlardan en popülerlerinden biri de Numpy kütüphanesidir.
Numpy hakkında daha fazla bilgi almak için buraya tıklayınız.

Daha önce "İnsanda Ve Makinede Öğrenme" yayınımda da anlattığımız gibi Deep Learning alanında çok büyük matematiksel işlemler yapılmaktadır. Bu hesaplamaların daha optimize(hızlı ve verimli) çalışması için bazı kütüphaneler de kullanılmakta.
Örneğin Google'ın yayınladığı TensorFlow kütüphanesi bunlardan biri.

Yukarıda anlattığımız Google'un TPU'su(Tensor Processing Unit) yine Google'ın kendi kütüphanesi TensorFlow ile daha verimli çalışması için çıkartılmıştır.
TensorFlow hakkında daha fazla bilgi almak için buraya tıklayınız.
TensorFlow içerisinde bir de TensorBoard bulunmaktadır. TensorBoard bir görselleştirme uygulamasıdır modelinizi eğitirken, modelin başarı durumunu canlı bir şekilde grafikile izlemenizi sağlaması başta olmak üzere birçok getirisi daha bulunmaktadır.

TensorBoard ekran görüntüsü:


Sizlere Keras kütüphanesinden bahsetmek isterim. En popüler ve en sevdiğim kütüphanelerdendir.
Keras kütüphanesi arka planda TensorFlow, Theano ve CNTK gibi kütüphaneler kullanmaktadır. Bu kütüphaneler hakkında da yazımızın devamında konuşacağız.
Keras ile modelinizi basit ve hızlı bir şekilde oluşturduktan sonra arkaplanda hangi kütüphaneyi kullanacağınızı seçiyorsunuz ve o kütüphaneyi arkaplanda kullanarak DL modelinizi çalıştırıyor. Model oluşturma konusunda sizlere müthiş bir kolaylık sağlıyor.
Keras'da diğer kütüphaneler gibi başlı başına bir konu dolayısıyla bu konuyu başka yayınlarıma bırakıyorum.
Keras hakkında daha fazla bilgi almak için buraya tıklayınız.

New York Üniversitesi ve FaceBook'un desteklediği Torch'da popüler DL kütüphaneleri içerisinde. Torch, Lua dili ile kullanılmakta. Lua dili ile kullanılması nedeniyle şu anda durumu pek iyi değil.
PyTorch adında Python ile kullanılan bir kütüphane daha piyasaya sürüldü ve şu an FaceBook bu kütüphanenin arkasında. Çok yeni bir kütüphane fakat dokümantasyon ve örnek proje sayısı hızla artmakta özellikle de akademik alanda.
Bir diğer en popüler kütüphaneye bakacak olursak da Berkeley, Kaliforniya Üniversitesi'in çıkardığı Caffe'dir.
Piyasaya sürülen Caffe2, FaceBook'un kolları altında destek görüyor.

Montréal Üniversitesi'nin çıkardığı Theano ise oldukça başarılı bir kütüphaneydi özellikle tek GPU çalışmalarda fakat şu anda canlılığını bitirdi ve desteklerini kaybetti.

Microsoft'un CNTK kütüphanesi ve Amazon'un MXNet kütüphanesi de popüler kütüphaneler arasında.


Ayrıca sizlere son olarak NVIDIA'nın DIGITS'inden de bahsetmek istiyorum.
Eğer ellerimi kodlara değmek istemiyorum diyorsanız bu program tam size göre.

Kısaca özetleyecek olursak DIGITS web sayfasında çalışan bir arayüz ve bu program ile modellerinizi eğitebiliyor, anlık donanım durumunu ve model başarısını grafikli bir arayüzde izleyebiliyorsunuz.
Grafik arayüzü üzerinden modeller oluşturuyor ve görsel olarak inceleyebiliyorsunuz. İsterseniz kod yazarak da erişim sağlayabilirsiniz. Veri setlerini ve modelleri düzenli bir şekilde izleyebiliyorsunuz.
Bol görselli ve temiz bir arayüz.


DIGITS'ın şu anda desteklediği Deep Learning kütüphaneleri: Caffe, Torch, ve Tensorflow.

Aktif olarak GitHub'da projelerimi açık kaynak olarak yayınlamaktayım: GitHub - Arda Mavi
DL projelerimi inceleyebilirsiniz, isterseniz geliştirebilirsiniz ve kaynak gösterdiğiniz sürece kendi projelerinizde de kullanabilirsiniz.

Bu yayın ile birlikte Deep Learning'e giriş çatal-bıçak setimizi de hazırlamış olduk.

Umarım yararlı bir yayın olmuştur.
Sorularınızı, isteklerinizi ve önerilerinizi bekliyorum.
Daha fazla insana ulaşabilmem için yayınımı paylaşırsanız sevinirim.
İyi çalışmalar dilerim.

Share this

0 Comment to "Derin Öğrenme Başlangıç Seti - Donanım Ve Yazılım"

Yorum Gönder