16 Şubat 2020 Pazar

SQL Server 2019 üzerinde Makine Öğrenimi - 1 (Machine Learning Services in Database (R and Python))

Farklı platformlarca yayınlanan araştırmalara göre Veri Bilimi çalışmalarında en sık kullanılan diller sıralamasında Python, R, SQL, Scala başı çekmektedir. 

Özellikle Python, R ve SQL kullanımı ve kaynakları bir hayli yaygın. KDNuggets'in 2015-2017 yılları arasındaki araştırmasında da bu dillerin en üstte konumlandığını görüyoruz.


SQL'in yaygın olarak kullanılan yapısal sorgulama dili olduğu aşikar. R daha çok akademik çevrelerce geliştirilen ve kullanılan zengin kütüphane havuzuna sahip veri işleme, görselleştirme ve makine öğrenimi gibi daha bir çok çalışmayı yapabileceğiniz bir dildir. Python ise programlama dünyasında bir çok platformda kullanılabildiği için giderek daha fazla kullanıcı kitlesine sahip olup Veri Bilimi çalışmalarında R'a yakın geniş bir kütüphane havuzu sunan ve her geçen gün Veri Bilimi alanında zenginliği ve popülaritesi artan bir dildir. Scala ise JVM üzerinde çalışan java benzeri bir dil olup hadoop, spark platformlarında büyük verileri işlerken yüksek performans sunduğu için çokça tercih edilmektedir. Daha performanslı diller de mevcut ancak popülaritesi düşük olduğu için yazımızın odağının dışında tutuyoruz.

Microsoft uzun zaman önce bu diller ile Veri Bilimi çalışmaları yapabileceğimiz çeşitli platformlar sundu ve bir yandan da yeni platformları sunmaya, geliştirmeye devam etmektedir. Bunların bir kısmı bulut tabanlı bir kısmı ise kendi kaynaklarınız üzerinde çalışabiliyor. Bunların bazıları ücretsiz bazıları da lisanslama veya kullandıkça öde usulüyle ücretli olarak hizmete sunulmaktadır.

Zamanla bu ürünlerin her birine göz atarız ancak bu yazıda SQL Server üzerinde gelen Machine Learning Services in Database özelliğine odaklanalım istiyorum. ML in Database ile verilerinizi SQL Server dışına çıkarmadan SQL, R, Pyhton ve Java dilleri ile işleyebilir, görselleştirebilir, makine öğrenimi teknikleri ile modeller eğiterek tahminlemeler yapabilirsiniz.

Bu özellik ilk olarak SQL Server 2016 ile duyuruldu. Tabi o zamanki adı R in Database olarak geçiyordu. Sonraki versiyonda R ve Python desteği getirildi ve bu özellik SQL Server 2017'de Machine Learning Services in Database olarak isimlendirildi. Son olarak SQL Server 2019 versiyonunda bir miktar daha geliştirildi ve Java desteği getirildi.

Nasıl kurulur?


SQL Server 2019 kurulumunu yaparken Features adımına geldiğinizde Instance Features bölümünde "Machine Learning Service and Language Extention" ve "Shared Features" bölümünde "Machine Learning Server (Standalone)" özelliklerini görebilirsiniz. Microsoft bu özelliklerin ikisini aynı makine kurmanızı önermiyor. Birini tercih etmeniz gerekir. Her ikisinde de hemen hemen aynı şeyleri yapabilirsiniz.


Shared Features kısmındaki "Machine Learning Server (Standalone)" kurulumunu her bir server için bir defa yapabilirsiniz ve "Database Engine Service" kurmanıza gerek yoktur. Yani bağımsız bir Machine Learning Server oluşturabilirsiniz. Bunun bir çok avantajı mevcut. Daha yüksek performanslı çalışmalar yapabilir modelleriniz için web service oluşturabilirsiniz. Bu özelliği kurmak için Installation tabında bir kısa yol daha var. Sonuç olarak yine aynı seçimi yapmanızı sağlan bir kısa yol sadece.

Daha fazlasın için:

Instance Features kısmındaki "Machine Learning Service and Language Extention" özelliği ise "Database Engine Service" kurmanızı zorunlu kılar ve aynı makineye birden fazla kurulum yapmanıza imkan tanır. Bu özellik sayesinde SQL sorgularımız içerisinde bir procedure ile kurulumda seçtiğim dillerde yazdığımız kodları çalıştırabiliriz. Bu özellik sayesinde örneğin müşteri listesine okurken bir yandan da eğittiğimiz bir model yardımıyla bu müşterinin potansiyel alıcı olup olmadığını tahminleyebiliriz. Bir ürünün muhtemel fiyatını tahmin etmek, bir anomali tespiti yapmak üstelik bunları veriyi SQL Server dışına çıkarmadan yapabilmek mümkün, harika ve oldukça kolay.

Daha fazlası için:

Kurulumu tamamladığınızda Java, R ve Python için bir takım bileşenler yüklenir. Kurulum sonrasında SQL Server Launchpad servisi (Python ve R tarafına odaklanırsak) bazı örnekler, R ve Python çalışma ortamları, bir takım araçlar, önceden eğitilmiş modeller ve ek R ve Python paketleri kullanıma hazır hale gelmektedir.


Kurulum sonrasında dillere ait bileşenlerin bulunduğu klasörleri ve Launchpad serivisini görebilirsiniz.


Nasıl Çalışır?


En basit haliyle; sp_execute_external_script isimli procedureün parametrelerinde belirtiğimiz script ve scriptin dili, Launchpad serivisi tarafından algılanır ve o dilin ilgili 'runtime'ında çalıştırılmak üzere gönderilir. Çalışma tamamlandığında ise sonuçlar yine Launchpad servisi üzerinden SQL Server'a iletilir. Kullanılan dile göre arada bir takım dll ve exe de devreye girer. 

Bu çalışma mantığı Linux ve Windows için hemen hemen aynıdır. İletişimi sağlayan Launchpad servisi olduğu için harici scriptler çalıştırılırken bu servis mutlaka açık tutulmalıdır.

Bir Python kodu için süreç aşağıdaki gibi işler. R kodu için çalışan alternatif exe ve dll isimlerini de hemen sağda belittim.

Nasıl Yapılır?


Öncelikle external script özelliğini SQL Server Instance seviyesinde aktif etmek gerekir. Ardından hem SQL Server hem de Launchpad servisi yeniden başlatılmalıdır.

Şu kodlarla external script özelliğini aktif edebilirsiniz:

--Python ve R kodlarını çalıştırabilmek için
sp_configure 'external scripts enabled',1
RECONFIGURE

--Engine ve Launchpad servislerini restart et.

--restart sonrası kontrol et.
sp_configure 'external scripts enabled'


Sonrasında sp_execute_external_script procedure yardımıyla kurduğunuz dillere ait scriptleri kolayca çalıştırabilirsiniz:



Bir giriş örneği olarak R ve Python dillerine özel aşağıdaki kodlarla x ve y değişkenlerine değer atayalım ve x+y*x sonucunu hesaplayalım.

--R
EXEC sp_execute_external_script
    @language = N'R',  
    @script = N'
x < - 10
y < - 20

print(x+y*x)
'

--Python
EXEC sp_execute_external_script
    @language = N'Python',  
    @script = N'
x = 10
y = 20

print(x+y*x)
'

İlk çalıştırmada ortam hazırlandığı için sonuç biraz geç gelecektir. Ancak sonraki çalıştırmalarda yüksek hızda sonuçlar alabilirsiniz. Procedureün çalışması tamamlandığında print ettiğiniz bilgilileri Messages kısmından görüntüleyebilirsiniz. Daha sonraki çalışmalarda bu procesure üzerinden tablo da döndürerek Result kısmından tabloyu görüntüleyebileceğiz.




Bu yazımızı kurulum ve özellikle ilk tanışma çerçevesinde tutalım. Serinin devamında biraz daha derine dalıp temel bir makine öğrenimi çalışmasının nasıl yapıldığına ve SQL Server içerisinde eğitilen modellerin nasıl depolanıp kullanıldığına odaklanacağız.

Faydalı olması dileğiyle...

Hiç yorum yok:

Yorum Gönder