Yerel Makinenin Ötesinde Ölçeklenebilir Veri Bilimi
Veri bilimi, birçok önemli şeyin kesişimini temsil eden bir terimdir.
Veri bilimi uzmanlığının bazı sacayakları olduğuna inanıyorum; yani:
- İş/alan bilgisi
- Olasılık ve istatistik
- Bilgisayar bilimi ve yazılım programlama
- Yazılı ve sözlü iletişim
Üçüncü sacayağı olarak anılan kısım, bilgisayar bilimi ve yazılım programlamayı anlamakla ilgilidir.
Yükselen veri bilimciler için hemen görünür olmasa da, bu alan genellikle devops, bulut bilişim, veri hatları (pipelines), veri mühendisliği, farklı türde veritabanlarını sorgulama becerisi, üretim yazılım çözümleri geliştirme ve dağıtma gibi unsurları da kapsar.
Ayrıca, veri bilimcilerin sağlam programlama becerileri geliştirmesi gerekir; ancak iyi eğitimli veya deneyimli yazılım mühendisleri kadar bilgisayar bilimi, programlama kavramları ya da genel üretim yazılım mimarisi ve altyapısı konusunda bilgili veya deneyimli olmayabilirler. Veri bilimine başlayan herkes, yerel bilgisayarına Python ve/veya R kurar; ardından Jupyter Notebook Uygulaması veya RStudio gibi yerel bir Entegre Geliştirme Ortamında (IDE) kod yazar ve çalıştırır.
Ek olarak, gelişmiş analitik yaygınlaştıkça ve veri bilimi ekipleri büyüdükçe, içgörülerin, kestirimsel analitiğin, öneri sistemlerinin ve benzerlerinin birlikte sunulmasına yönelik işbirlikçi çözümlere ihtiyaç artar. Yeniden üretilebilir araştırma ve not defteri araçları ile kaynak kod kontrolünün birleştirilmesi işbirliğinin bir parçasıdır; işbirliğine dayalı bulut tabanlı çevrimiçi araçlar ve platformlardan yararlanmak ise bir diğeridir.
İşbirliği gereksinimleri, veri bilimi ekiplerinin dışındakileri de kapsar; zira veri bilimi büyük ölçüde iş hedeflerine ulaşmak için devreye alınır. Bu nedenle, bir veri bilimi projesinin paydaşları arasında yöneticiler, bölüm liderleri ve mimarlar, veri mühendisleri, analistler gibi diğer veri ekibi üyeleri yer alabilir.
Bu makale, veri bilimcilere, özellikle veri bilimi çözümlerini üretime almak veya hesaplama gücünüzü ve yeteneklerinizi genişletmek bağlamında, yerel dizüstü veya masaüstü makinenin ötesinde neler olduğuna dair fikir vermeyi amaçlıyor. Bu konulardaki deneyiminize bağlı olarak, içerik her beceri düzeyinden veri bilimci için ilgili olmalıdır.
Hadi başlayalım!
Bulut Tam Olarak Nedir?
Evet, namıdiğer ve hâlâ sıklıkla tam anlaşılmayan bulut. Her ne kadar kulağa soyut ve varsayımsal gelse de, bulut aslında amaçlanan anlamıyla oldukça somuttur. Bulut kavramına geçmeden önce bazı temel kavramları tanımlayalım.
Kaynakları paylaşmak için birbirine bağlanan bilgisayarlar bir ağ oluşturur; bunun en büyük ve en bilinen örneği İnternet'tir. Birden fazla bilgisayarın bağlandığı Ev ağları, örneğin Yerel Alan Ağı (LAN) veya WiFi Service Set Identifier (SSID), buna başka bir örnektir; ancak çok daha küçüktürler. Burada bahsi geçen kaynaklar; web sayfaları, medya, veri depolama, uygulama sunucuları, yazıcılar vb. olabilir.
Bir ağdaki bilgisayarlara genellikle düğüm (node) denir ve HyperText Transfer Protocol (HTTP), Transmission Control Protocol (TCP)/ Internet Protocol (IP) gibi iyi tanımlanmış protokollerle birbirleriyle iletişim kurarlar. Bu iletişimler durum güncelleme, izleme, istek/yanıt ve pek çok başka amaç için olabilir.
Ayrıca, bilgisayarlar çoğu zaman kurum içinde bulunmaz; yani uygulamalar ve veriler genellikle bir veri merkezindeki bilgisayarlarda barındırılır. Bu yerler; güç, soğutma, güvenlik, felaket koruması vb. çok sayıda bilgisayarı barındırmak ve başarıyla çalıştırmak için gerekli tüm altyapıyı sağlar ve şirketlerin veya genel dış dünyanın erişimine açıktır.
Bilgisayarlar ve depolama zamanla nispeten ucuzladığı için, birçok çözüm artık tek ve çok güçlü, çok pahalı bir makine satın almak yerine, birlikte çalışan ve ölçeklendirilmesi çok maliyetli olmayan birden fazla bilgisayarı kullanır. Bu “birlikte çalışma”nın bir parçası, bilgisayarlardan biri arızalansa bile çözümün otomatik olarak çalışmaya devam etmesini ve sistemin kendisine binen yükü otomatik olarak karşılayacak şekilde ölçeklenebilmesini sağlamaktır.
Twitter, Facebook, Instagram, Snapchat, Netflix ve YouTube, her iki şekilde de ölçeklenmesi gereken bulut tabanlı uygulamalara mükemmel örneklerdir. Uygulamalarının tamamen “çöktüğünü” görmek son derece olası değildir ve platformlarında günde kelimenin tam anlamıyla milyonlarca kullanıcı etkileşimini kaldırabilirler.
Aynı ağa bağlı ve aynı görevi veya görevler kümesini yerine getirmek üzere birlikte çalışan belirli bir bilgisayar grubu bir küme (cluster) olarak adlandırılır. Bir küme tek bir bilgisayar gibi düşünülebilir; ancak tek bir makineye kıyasla performans, erişilebilirlik ve ölçeklenebilirlikte büyük iyileştirmeler sunabilir. Bu faydalar bu yazının ilerleyen kısımlarında ele alınacaktır.
Dağıtık bilişim veya dağıtık sistemler terimi, belirli görevleri yerine getirmek için kümelerden yararlanacak şekilde yazılmış yazılım ve sistemleri ifade eder; örneğin Hadoop, Spark ve MapReduce.
Son olarak bulutun tanımına gelelim. Yukarıda bahsedilen paylaşılan kaynaklara ek olarak, diğer önemli çözüm kaynakları arasında sunucular, servisler, mikro servisler, ağlar vb. yer alır. Bir bulut, genellikle yazılım tabanlı çözümleri barındırmak ve sunmak için, tek bir tarafın sahip olduğu, yönettiği ve idare ettiği, ağla birbirine bağlı bilgisayarlar ve paylaşılan kaynaklar grubunu tanımlar. Bu tanıma göre, İnternet kesinlikle bir ağ olsa da tek bir tarafa ait olmadığı için bir bulut değildir.
Bulut bilişime daha derinlemesine dalmak ve ölçeklenebilir yazılım ile büyük veri mimarileri oluşturmada temel kavramları tartışmak için, bu konudaki üç parçalık ayrıntılı serime göz atın.
Bulutta Veri Bilimi
Bu yazı, bulut bilişimi ve ilgili diğer kavramları, ilgili fikirleri ortaya koyacak kadar derinlikte ele aldı. Yazılım mimarisi ve mühendisliğiyle ilgili maruziyetiniz şu an için yalnızca yerel geliştirme ile sınırlıysa, tüm bunların veri bilimciler için neden önemli olduğunu merak ediyor olabilirsiniz. Sırada bu var.
Veri bilimi sürecine aşinaysanız, çoğu zaman veri bilimi iş akışının büyük bölümünün veri bilimcinin yerel bilgisayarında yürütüldüğünü bilirsiniz. Bilgisayarda Python ve R gibi tercih edilen diller ile veri bilimcinin sevdiği IDE kurulu olur. Diğer temel geliştirme ortamı kurulumu ise, ilgili paketleri Anaconda gibi bir paket yöneticisiyle ya da tek tek manuel olarak kurmaktır.
Geliştirme ortamı kurulduktan ve hazır olduktan sonra, genellikle geriye çoğunlukla yalnızca veri kalarak tipik veri bilimi iş akışı ya da süreci başlar. Yinelemeli iş akışındaki adımlar genellikle şunları içerir:
- Veri edinme
- Veriyi ayrıştırma, birleştirme, düzenleme, dönüştürme ve temizleme
- Veriyi analiz etme ve madencilik, örneğin Keşifsel Veri Analizi (EDA), özet istatistikler, ...
- Model kurma, doğrulama ve test etme; örneğin kestirimsel modeller, öneriler, ...
- Not: Modeller kurulmadığında ise kalıpları veya eğilimleri belirleme, uygulanabilir içgörüler üretme, yararlı bilgi çıkarma, raporlar oluşturma vb. söz konusudur. Burada, bu eğitim her iki durumu da "teslim edilecek çıktı oluşturma" olarak ele alacaktır.
- Modelleri veya teslim edilecek çıktıları ayarlama ve optimize etme
Bazen ise, tüm veri bilimi veya büyük veriyle ilgili görevleri yerel geliştirme ortamında gerçekleştirmek pratik ya da arzu edilir değildir. Bunun başlıca nedenlerinden bazıları şöyledir:
- Veri kümeleri çok büyüktür ve model eğitimi veya diğer analitikler için geliştirme ortamının sistem belleğine (RAM) sığmaz
- Geliştirme ortamının işlem gücü (CPU) görevleri makul veya yeterli bir sürede, hatta hiç gerçekleştiremeyebilir
- Teslim edilecek çıktı bir üretim ortamına dağıtılmalı ve muhtemelen daha büyük bir uygulamanın (örneğin web uygulaması, SaaS platformu, ...) bileşeni olarak entegre edilmelidir
- Daha hızlı ve daha güçlü bir makineyi (CPU, RAM, ...) kullanmayı tercih etmek ve gerekli yükü yerel geliştirme makinesine bindirmemek istenir
Bu durumlar ortaya çıktığında birden fazla seçenek vardır. Veri bilimcinin yerel geliştirme makinesini kullanmak yerine, genellikle hesaplama işi kurum içi bir makineye veya bulut tabanlı bir sanal makineye (örneğin AWS EC2, AWS Elastic Beanstalk) devredilir. Sanal makineleri ve bunların otomatik ölçeklenen kümelerini kullanmanın yararı, ihtiyaç duyuldukça başlatılıp atılabilmeleri ve ayrıca kişinin hesaplama ve veri depolama gereksinimlerine göre uyarlanabilmeleridir.
Teslim edilecek çıktıları daha büyük bir uygulamanın veya veri hattının parçası olarak kullanılmak üzere bir üretim ortamına dağıtma durumunda, dikkate alınması gereken birçok seçenek ve zorluk vardır. Bunun daha ayrıntılı tartışılması bu makalenin kapsamı dışındadır.
Özel geliştirilmiş bulut tabanlı veya üretim veri bilimi çözümleri ve araçlarına ek olarak, Jupyter gibi not defteri araçlarıyla sıklıkla iyi çalışan, saygın sağlayıcılardan sunulan pek çok bulut ve hizmet tabanlı seçenek de mevcuttur. Bunlar büyük ölçüde büyük veri, makine öğrenimi ve yapay zeka API'leri olarak sunulur ve AWS Artificial Intelligence platformu, Databricks, Google Cloud Platform Datalab ve Machine Learning ve daha birçok seçeneği içerir.
Üretim ve geliştirme ortamlarında veri bilimi ve gelişmiş analitik üzerine çok daha ayrıntılı bir tartışma; diller, paketler, çerçeveler ve platformlara yönelik öneriler dahil olmak üzere, üç parçalık serime göz atın. Ölçeklenebilir yazılım ve büyük veri mimarileri serim de bulut bilişim için harika bir tamamlayıcıdır.
Yazılım Mimarisi ve Kalite Öznitelikleri
Yazılım mimarisi, genellikle bulut tabanlı olan ve bir ürün, hizmet veya görev tabanlı bir bilişim sistemini temsil eden bir yazılım sistemi tasarlamayı içerir. Sistem mimarisi veya yazılım mimarisi terimlerini de duyabilirsiniz; her ikisi de aşağı yukarı aynı şeyi ifade eder.
Yazılım mimarisi tasarlamanın bir parçası, uygun programlama dillerini ve teknolojileri (yani yığın), bileşenleri, paketleri, çerçeveleri, platformları vb. seçmektir. Bu, özellikle sistemin amaçlanan kullanım alanı ve diğer önemli ödünler etrafında çokça değerlendirme gerektirebilir. Yazılım mimarisinin bu yönü, bir kişi tarafından —örneğin bir yazılım mimarı— zaman içinde kazanılan beceri, bilgi ve deneyim gerektirir.
Sistem ve yazılım mimarisi ile mühendisliğinin bir diğer kritik yönü, özellikle gerçek dünya üretim çözümleri için, kalite öznitelikleri veya işlevsel olmayan gereksinimler olarak adlandırılanlardır.
İşlevsel olmayan gereksinimler tipik olarak şunları içerir:
- Erişilebilirlik
- Performans
- Güvenilirlik
- Ölçeklenebilirlik (yukarı ve dışa doğru)
- Genişletilebilirlik
- Kullanılabilirlik
- Modülerlik
- Yeniden kullanılabilirlik
Bu makalede, en önemlilerinden dördüne —erişilebilirlik, performans, güvenilirlik ve ölçeklenebilirlik— kısaca göz atacağız. Tartışmanın üst düzey olduğunu ve bu kalite öznitelikleri için metriklere dayalı tanım veya gereksinimlere girmediğini unutmayın.
Erişilebilirlik kelimenin tam anlamıyla, sistemin erişilebilir, diğer bir deyişle düzgün şekilde çalışır durumda olmasıdır. Bu birçok anlama gelebilir ve aynı zamanda güvenilirlik ve ölçeklenebilirliğe güçlü biçimde bağlıdır. “Düzgün şekilde çalışır durumda” demek, sistemin amaçlandığı gibi ve ihtiyaç duyulduğunda çalışmasıdır. Bu, örneğin Facebook veya Netflix gibi sistemi kullanmaya çalışan bir son kullanıcı olabilir ya da örneğin veri işlemek için kullanılan bir dizi bulut tabanlı servis olabilir.
Güvenilirlik, sistemin hatalar veya arızalar olmadan düzgün biçimde çalışabilme yeteneğini ifade eder. Bir sistem bunu ne kadar çok başarabiliyorsa, o kadar hataya dayanıklı olduğu söylenir. Tüm olası kullanım ve uç senaryoları önceden düşünmek ve test etmek zor olduğundan, %100 güvenilirliğe ulaşmak çok güçtür. Ayrıca kod hataları, çevresel sorunlar ve sınırlı kaynaklar (CPU, RAM, disk belleği, ...) gibi pek çok nedenle arızalar meydana gelebilir.
Performans, sistemin görevleri yerine getirme hızını tanımlamak için kullanılan bir terimdir; başka bir deyişle sistemin belirli bir görevi yerine getirmesinin ne kadar zaman aldığıdır. Örneğin YouTube'u ele alalım. Bir video izlemek istediğinizde, videonun makul bir sürede yüklenmesini ve oynatılmasını beklersiniz. Google YouTube'u ne kadar performanslı hale getirirse, video o kadar hızlı yüklenip oynatılır, YouTube kullanıcıları o kadar mutlu olur ve uygulamayı terk etme olasılıkları azalır. Tersi durumda, YouTube faydayı aşacak derecede son derece yavaş çalışsaydı, insanlar kullanmayı bırakırdı. Neyse ki çoğu zaman ilk senaryo geçerlidir, ikincisi değil.
Son olarak, ölçeklenebilirlik belirli uygulamalar için kritik önemdedir ve sistemin, üzerindeki yük artmasına rağmen (yine üst düzeyde tanımlanmış) belirli bir performans düzeyini sürdürebilme yeteneğini ifade eder. Yük, sisteme yapılan eşzamanlı ya da aynı anda gerçekleşen istek sayısını ifade eden bir terimdir.
Ölçeklenebilirliğin gerekli olduğu harika bir örnek, popüler bir spor takımı veya müzik sanatçısı için biletlerin ilk kez satışa çıktığı anlardır. Popülerliğe bağlı olarak, Ticketmaster gibi bir web uygulamasında biletler ilk satışa çıktığında bilet satın alma amacıyla yapılan eşzamanlı isteklerin sayısı yüz binleri bulabilir. Bir sistemin ölçeklenebilme yeteneğine bağlı olarak bu durum performansı büyük ölçüde düşürebilir veya sistemi tamamen kapatabilir. Bu senaryoların hiçbiri iyi değildir.
Bu gereksinimi karşılamak için, sistemi ya yukarı ya da dışa doğru ölçeklendirme teknikleri kullanılır. Yukarı ölçekleme, sistemdeki bilgi işlem aygıtlarının (daha fazla çekirdekli, daha güçlü CPU, ...) ve sistem belleği veya RAM gibi daha büyük kaynaklara sahip, daha güvenilir makinelerle değiştirilmesidir. Bu tür makineler pahalı olabilir.
Dışa doğru ölçekleme ise bunun yerine düşük maliyetli standart (commodity) makinelerin kullanılmasıdır; bu makineler tek tek çok güçlü değildir, ancak bir grup halinde kullanıldıklarında sistemdeki yükü fazlasıyla karşılayabilirler. Bu tekniği kullanan çözümler birden fazla bilgisayar gerektirdiğinden, bilgisayarlardan birinin veya birkaçının (düğümün) arızalanması veya çökmesi (failover) gibi senaryoları otomatik olarak ele almak için sistemlerin uygun şekilde kurulması önemlidir.
Sonuç
Umarım bu makale, yerel geliştirmenin ötesindeki veri biliminin ve gerçek dünya üretim çözümleri bağlamında birçok önemli yönüne ışık tutmuştur. Üretim veri çözümleri üzerinde çalışırken veya ek hesaplama gücü ve kaynaklara ihtiyaç duyulduğunda, bulut tabanlı bilişim ve mimari kavramlarını anlamak önemlidir.
Düşüncelerinizi aşağıdaki yorumlarda paylaşmaktan çekinmeyin. Daha fazla bilgi edinmek isterseniz, Twitter'da @innoarchitech hesabını takip edebilir, InnoArchiTech bültenine kaydolabilir ve InnoArchiTech bloguna göz atabilirsiniz. Hedef Odaklı Yapay Zeka ve Makine Öğrenimi dersime de bakabilirsiniz.
