Dlib (C++) Kütüphanesinin Ubuntu 16.04 için CUDA-cuDNN Konfigurasyonu ile Kurulumu ve Qt ile Kullanılması
Dlib yapay öğrenme - makine öğrenmesi (machine learning) algoritmalarını içeren C++ kütüphanesidir ve günlük hayatımızda karşılaştığımız problemleri çözmek için kullanabileceğimiz kompleks yazılımlar geliştirebileceğimiz bir araçtır. Yüz tanıma (face recognition), yüz tespiti (face detection), yüz modelleme (facial landmarks) gibi uygulamaları Dlib kütüphanesi ile kolayca geliştirebilirsiniz. Dlib C++ programlama dili ile kullanılan bir araç olmasının yanında Python programlama dili ile de kullanılabilmektedir. Python ile kullanmak için kurulumunuzu ona göre yapmanız gerekmektedir. Bu yazımda C++ dili için kurulum yapılacaktır ilerleyen günlerde Python dili için kurulumun nasıl yapıldığını anlatmayı planlıyorum. Ayrıca bu kurulum da cuDNN konfigurasyonu da yer alacaktır böylece DLib kütüphanesi kullanarak geliştirdiğiniz algoritmalarınızı GPU üzerinde çalıştırabileceksiniz. Aşağıdaki adımları takip ederek Ubuntu 16.04 işletim sisteminize Dlib kurulumunu yapabilir ve Qt ile uygulama geliştirebilirsiniz.
Kurulumu cuDNN ile yapmak için bilgisayarınıza önceden cuDNN kurulumu yapılmış olması gerekmektedir. Önceki yazımı takip ederek bilgisayarınıza cuDNN kurabilirsiniz.
Ubuntu 16.04 için cuDNN Kurulumu
Kurulumu cuDNN ile yapmak için bilgisayarınıza önceden cuDNN kurulumu yapılmış olması gerekmektedir. Önceki yazımı takip ederek bilgisayarınıza cuDNN kurabilirsiniz.
Ubuntu 16.04 için cuDNN Kurulumu
Adım 1.
Dlib kütüphanesinin en son yayınlanan versiyonu sitesinden indirilir (Bu yazıda 19.13 versiyonu indirildi).
Adım 2.
İndirilen sıkıştırılmış dosya çıkarılır.
Adım 3.
dlib-19.13 klasörü içerisine "build" adında boş bir klasör oluşturulur.
Adım 4.
Kurulum için cmake-gui'den faydalanacağız. Eğer cmake-gui kurulu değilse aşağıdaki kodu çalıştırarak cmake-gui'nin kurulumunu gerçekleştirebilirsiniz.
sudo apt install cmake-gui
cmake-gui açılır ve "source code" kısmında dlib-19.13 klasörü içerisinde yer alan "dlib" klasörü seçilir. "build" kısmında ise dlib-19.13 klasörü içerisinde oluşturduğumuz boş klasör seçilir. Derleme bu klasör içerisine gerçekleştirilecektir. Daha sonra aşağıda yer alan "Configure" tuşuna basınız ve açılan pencerede varsayılan (default) yerel derleyicilerin derlemede kullanılmasını seçiniz.
Konfigürasyon bittiğinde aşağıdaki ekran görüntüsündeki gibi bir uyarı alabilirsiniz.
Bu uyarıda BLAS kütüphanesinin sisteminizde yüklü bulunmadığı ve eğer bu kütüphaneyi yüklerseniz kodunuzun daha hızlı çalışacağı uyarısı verilmiş. Bende bu uyarıyı dikkate alarak aşağıdaki kod parçasını çalıştırdım ve sistemime BLAS kütüphanesini kurdum. Ayrıca CUDA kurulumu yapmadıysanız olası göreceğiniz sonuçlar aşağıdaki ekran görüntüsünde çizilen alanlarda belirtilmiştir.
sudo apt-get install libopenblas-dev liblapack-dev
CUDA ve BLAS kurulumu yapılan bir bilgisayarda "Configure" tuşuna basınca aşağıdaki ekran görüntüsüne benzer bir sonuç elde edersiniz.
Adım 5.
Daha sonra cmake-gui'de yer alan "Generate" tuşuna basınız.
Adım 6.
Son aşamada "build" klasörü içerisinde aşağıdaki kod parçası çalıştırılarak derlemenin/kurulumun tamamlanması beklenir.
sudo make install
Adım 7.
Dlib kütüphanesinin derleme işlemi başarı ile bitmiştir.
Bu adımda Qt ile kullanılması anlatılacaktır. Qt'nin Ubuntu 16.04'e kurulumu için önceki yazımı takip edebilirsiniz.
Ubuntu 16.04 için Qt Kurulumu
Ubuntu 16.04 için Qt Kurulumu
Sisteminize Qt kurulumu yaptıktan sonra Qt Creator açılır ve yeni proje oluşturulduktan sonra proje dosyasına (.pro uzantılı dosya) dlib kütüphanesinin derlendiği klasörün yolu aşağıdaki gibi tanımlanır.
Kurulum esnasında cuda ve blas ile derleme yapılmadıysa sadece dlib kütüphanesinin derlendiği klasörün yolunu tanımlamamız yeterlidir.
LIBS += -L"/home/eyyup/Downloads/dlib-19.13_blas_cuda/build"
LIBS += -ldlib
LIBS += -L"/home/eyyup/Downloads/dlib-19.13_blas_cuda/build"
LIBS += -ldlib
Kurulum esnasında CUDA ve BLAS ile derleme yapıldıysa dlib kütüphanesinin derlendiği klasörün yolu ile CUDA ve BLAS kütüphanelerinin yolunu da tanımlamamız gerekmektedir.
LIBS += -L"/home/eyyup/Downloads/dlib-19.13_blas_cuda/build"
LIBS += -ldlib
LIBS += -L"/usr/lib"
LIBS += -lopenblas
LIBS += -lcudnn
LIBS += -L"/usr/local/cuda/lib64"
LIBS += -lcublas
LIBS += -lcudart
LIBS += -lcurand
LIBS += -lcusolver
LIBS += -L"/home/eyyup/Downloads/dlib-19.13_blas_cuda/build"
LIBS += -ldlib
LIBS += -L"/usr/lib"
LIBS += -lopenblas
LIBS += -lcudnn
LIBS += -L"/usr/local/cuda/lib64"
LIBS += -lcublas
LIBS += -lcudart
LIBS += -lcurand
LIBS += -lcusolver
Qt proje dosyasında (.pro) kütüphane tanımlanırken -L(kütüphane yolu), -l(kütüphane) şeklinde önekleri kullanılmaktadır.
Aşağıdaki video'da CUDA ve BLAS olmadan yapılan kurulum (derleme) işlemi gösterilmektedir.
Aşağıdaki video'da CUDA ve BLAS ile kurulum (derleme) işlemi gösterilmektedir.
Burada Derin Öğrenme çalışmalarında başlagıç seviyesinde kullanılan Mnist, El Yazısı Rakamlardan oluşan veri setini sınıflandıran LeNet örneği çalıştırıldığında intel i7-8700K 6 çekirdekli yeni nesil işlemci de 3429 saniye yani 57 dakika 15 saniye sürmektedir. Aynı kod hiçbir değişiklik yapılmadan NVIDIA GTX 1080 ekran kartı üzerinde çalıştırıldığında 52 saniye sürmektedir. Bu örnekte GPU, CPU'ya göre 65 kat daha hızlı çalışmaktadır.
LeNet CPU (intel i7-8700K) sonuç
LeNet GPU (NVIDIA GTX 1080) sonuç
Artık projelerinizde Dlib kütüphanesini kullanabilirsiniz.