1 Şubat 2023 Çarşamba

Veri Bilimcileri Azure Machine Learning ile Artık Daha Üretken ve Daha Güçlü

Azure Machine Learning, MLOps ve Microservice yaklaşımlarına uygun bir çalışma ortamı sunan ismiyle müsemma bir bulut hizmetidir. Azure üzerindeki farklı hizmetlerle ve Github ile entegre çalışarak Makine Öğrenimi projelerini kurumsal ölçekte, yüksek kalitede, değişen tüketim taleplerine cevap verecek esneklikte, istenirse otonom olarak, sürekli geliştirmeye ve iyileştirmeye açık olacak şekilde sürdürme imkanı verir.

Bu yazımızda kurumsal ölçekteki Makine Öğrenimi projelerinde dikkat edilmesi gereken bir kaç noktaya, Azure Machine Learning hizmetine ait bileşenlere ve bu hizmetin öne çıkan yeteneklerine odaklanalım istiyorum.

Uzun soluklu Makine Öğrenimi projeleri geliştirmeye niyetlenmeden önce bazı kavram ve metodolojiler hakkında bilgi sahibi olmak ve bu bilginin uygulanabilmesi için gerekli ortamı ve araçları hazır etmek gerekir. 

Kurumsal ölçekte başarılı bir Makine Öğrenimi projesi yürütmek için İstatistiksel tekniklerin ve matematiksel algoritmaların arka planında neler olup bittiğinin derinlemesine biliniyor olması açıkçası önem sırası bakımından pek de üst sıralarda sayılmaz.

Bazılarının bu cümleyle irkildiğini tahmin edebiliyorum. Hemen bu noktada küçük bir savunma yapayım; Bir Matematikçi olarak böyle bir cümleyi kurmak benim için de kolay değil. Lakin proje bütününe ve günümüzdeki araçların geldiği noktaya baktığımızda buna hak vermemek elde değil. 

Burada akademik bilginin önemsiz olduğunu ifade etmiyorum. Makine Öğrenimi konusundaki esaslara hakim olmak zaten gerekli. Bununla birlikte derinlemesine bir akademik bilgi sadece nadir noktalarda etkili sonuçlar elde etmemizi sağlayan avantajlar doğuruyor. Ancak bu avantajlara kavuşmak bir hayli maliyetli olabiliyor. Artık alet işler el övünür dönemindeyiz.

Bir Makine Öğrenimi projesinin hayata geçirilmesinin 12 ay sürdüğünü varsayalım. Bu sürenin yaklaşık 3 ayı model seçme, eğitme ve optimize etmeyle geçer. Üstelik bu süre zarfında en çok kullanılan teknik deneme yanılmadır. Geri kalan sürede kabaca verinin hazır edilmesi, eğitilmiş modelin yayınlanması, sahadaki yansımasının izlenmesi, sürekli iyileştirme ve geliştirme için gerekli otomasyonların kurulması, değişen talep yoğunluğuna cevap verecek dinamik bir alt yapının inşa edilmesi gibi konulara odaklanılır.

Bu sebeple başarılı Makine Öğrenimi projelerini hayata geçirebilmek için CRISP-DM gibi veri bilimi yaşam döngülerini yönetme konusunda kabul görmüş bazı metodolojilere ve özetle iş birliğini, sürdürebilirliği baz alan MLOps kavramına hakim olmak ve elbette bu bilgileri projelerimize uygulayabilecek araçlara sahip olmak gerekir.

İşte tam da bu noktada Azure ML hizmeti karşımıza çıkıyor ve bize başarılı bir uygulama sahası sunuyor.

Bu bulut hizmetinin Makine Öğrenimi projelerinde işlerimizi nasıl da kolaylaştırabileceğine hizmetin bileşenlerini incelerken değinelim.

Azure ML Bileşenleri Neler?

Azure ML hizmetini aktif ettiğimizde her şeyi kapsayan bir Workspace oluşur. Çalışma ortamı içerisindeki bileşenleri yönetmek için Azure Machine Learning Studio ortamına geçiş yaparız.


Soldaki menüde yer alan gruplamaya sadık kalarak Azure ML hizmetinin bileşenlerini ve özelliklerini inceleyelim.

Authoring Bölümü 

Bu bölüm geliştirme odaklı yardımcılara ayrılmış durumda. Kod, arayüz veya sihirbaz yardımıyla geliştirmeye başlayabilirsiniz.

Notebooks: Bu bölümde herhangi bir dildeki scriptlerinizi depolayabilir ve çalıştırabilirsiniz. Eğer tüm makine öğrenimi sürecini scriptlerle yönetmek istiyorsanız ve scrtipleri çalıştırmak için bir makine yatırımı yapmamışsanız, bu bölümü kullanabilirsiniz. 

Notebook, VSCode, RStudio, Terminal vs. gibi uygulamalar ile düzenleyebildiğimiz scriptleri  AzureML Spark Compute (şimdilerde preview durumda) üzerinde çalıştırabilirsiniz. Dilerseniz ihtiyaçlarınıza cevap verebilecek kapasitede yeni bir Compute Instance oluşturup ek uygulamalar yükleyerek (Docker Image yardımıyla) compute içeriğini zenginleştirebilirsiniz.

Automated ML: Makine öğrenimi sürecinde problem tipi belirlendikten sonra verinin hazırlanması Feature Engineering, Feature Selection gibi çalışmalarla kullanışlı hale getirilmesi ve ardından Train, Validation, Test olarak bölümlendirilmesi gerekir. Sonrasında sahadaki ihtiyaca ve maliyetlere göre tahmin başarısını ölçebileceğimiz bir hedef metrik belirlenmesi, ardından bu hedefe uygun çıktının elde edilebilmesi için Makine Öğrenimi algoritmalarının veriye uygulanması ve sonrasında algoritmaların hyperparameterlerinin optimize edilmesi gerekir. Bu süreç her ne kadar uzman görüşü ile yönetilse de çoğunlukla deneme yanılma şeklinde ilerler.

İşte bu noktada orta seviye veri bilimcilerinin görevini üstlenebilecek, ileri seviye veri bilimcilerinin de işlerini kolaylaştıracak olan Automated ML Job sihirbazını devreye alabilirsiniz. Adım adım hedef ve kısıtlarınızı belirtip model eğitme denemelerini tetikleyebilir, sonrasında her deneme hakkında detaylı bilgiye, değerlendirmeye ve eğitilmiş modele ulaşabilirsiniz.

Designer: Satır satır kod yazmak uzun vadede iyi bir seçenek olsa da kısa vadede çıktı üretmek için ara yüzleri kullanmak daha cazip olabilmektedir. Bazen kod karmaşasına boğulmadan hızlıca bir sonucu ulaşmayı arzularız. Belki iyi bilinen, belki fazla yatırım yapmak istemediğimiz bir problemi çözmek, bir prototip geliştirmek veya sadece keşif amaçlı bir makine öğrenimi çalışması yapmak isteyebiliriz. 

Bu bölümde önceden hazırlanmış bazı işlevsel kutucukları sürükle bırak ile bir birine bağlayabilir bir iş akışı oluşturabiliriz. 


Designer menüsündeki Classic prebuilt tabında veri hazırlama, model geliştirme ve modelin web service olarak yayınlanması gibi bir çok konuda hazır işlevler mevcut. Şimdilerde artık Custom tabı ile kendi işlevsel kutucuklarımızı (Component) hazırlayabilme ve özel akışlar oluşturma imkanına da kavuşmuş durumdayız.

Assets Bölümü

Makine Öğrenimi nesneleri ve projelerin sağlıklı şekilde yürütülebilmesi için gerekli olan nesneleri ilgili alt bölümlerde kaydedebilir, versiyonlayabilir daha sonra ulaşıp kullanabiliriz.

Data: Azure ML hizmeti veri depolanabilecek diğer Azure hizmetlerine (Blob Storage, Azure SQL vs.)  ait bağlantıyı Datastore adıyla kullanıma sunmaktadır. Datastore üzerinden veri kaynaklarına erişebilirsiniz. Ek olarak verilerinizi Tablo, File veya Folder şeklinde Azure ML hizmetine kaydedebilir verideki değişimi takip etmenizi sağlayacak Data Drift Detector tanımlayabilirsiniz.

Jobs: Daha önce bu menünün olduğu yerde Experiment mevcuttu. Sanırım odaklanma daha kolay olsun diye artık direk jobları ana menü olarak görmekteyiz.

Normalde bir Experiment oluşturulur ve tüm çalışabilecek şeyler (Script, AutoML, Hyperdrive, Pipeline vs) bu Experiment'a gönderilir (Submit). Bu çalışmalar bir job nesnesi olarak görüntülenebilir. Hatta bu jobların çalışma esnasındaki (run) hallerini de ayrı bir nesne olarak ele alabiliriz.

Jobların çalışma sırasındaki ve sonrasındaki durumu, ortaya çıkan nesneler, metrikler ve bir takım değerlendirmeler anlık olarak takip edilebilir.

Components: Designer bölümündeki Custom tabında kullanabileceğiniz özel işlevlerinizi buraya kaydedebilirsiniz. Component oluşturmak için Python SDK v2 veya Azure ML CLI v2 kullanmanız gerekli. Componentleri bir yapboz parçası gibi tekrar tekrar farklı akışlar içerisinde kullanabilmek oldukça işlevsel.

Pipelines: Veri temizliği, model eğitme, scorelama gibi bağımsız ve anlamlı iş akışlarınızı Designer bölümünde arayüzle veya scriptlerle oluşturup bu bölüme kaydedebilirsiniz. İş akışlarını daha sonra bir tetikleyici (Schedule, Alert, REST API vs.) ile tetikleyebilirsiniz.

Environments: Çalışan her şey için bir compute gücü gerekiyor. Bu compute üzerinde hangi işletim sisteminin kullanılacağı, hangi ayarların yapılacağı, hangi scriptlerin çalıştırılacağı, hangi uygulamaların ve paketlerin kurulu olacağı belirlenebilmektedir. Bu şekilde çalışacak şeyler için gerekli olan Docker imageın nasıl inşa edileceğini tarif etmiş oluyoruz.

Scriptlerin, Jobların ve web servicein çalıştırılacağı ortamın tarif edilebilmesi için Dockerfile ve Conda Specification dosyaları (yaml formatında tanımlar içerir) kullanılır. İşte bu tarif Environments nesnesi olarak kaydedilebilir.

Bazı Environmentlar Microsoft tarafından önceden kaydedilmiş olsa da zamanla yenilerine ihtiyaç duyarız.

Models: Eğitilen makine öğrenimi modellerinin kaydedildiği bölümdür. Modelleri versiyonlayabilir, model hakkında metadata depolayabilir, dilediğinizde modeli bilgisayarınıza indirebilirsiniz.

Endpoints: Makine öğrenimi çalışmaları sonucunda elde edilen modellerin başarısından eminseniz artık modeli kullanıma açmak isteyebilirsiniz. Modeli son kullanıcıya ulaştırmak için bir web service inşa etmek en yaygın yöntemdir. Bu web servicee gelen isteğin nasıl tahminleceğini (Score) ifade eden bir script dosyasına ve bu dosyanın çalışacağı ortamı belirtmek için bir Environment nesnesine ihtiyaç duymaktayız.

Genel olarak iki farklı tahminleme ihtiyacı ile karşılaşıyoruz; 

İlki muhtemelen bir satırlık küçük bir veri ile yapılan tahminlemedir. Mesela acil servise gelen bir hasta hakkında bir kaç kolonluk özet bilgi ile kalp krizi geçirme ihtimalini tahmin etmek isteyebilirsiniz. Bu çıkarımsal çalışmaya Real-Time Inference denir. 

İkincisi daha fazla satırla yani yığın halindeki veri ile yapılan tahminlemedir. Mesela günlük veya haftalık hasta kayıtlarına bakılarak bir segmentasyon yapmak veya bu hastaların şeker hastası olma ihtimalini tahmin etmeye çalışmak isteyebilirsiniz. Bu çıkarımsal çalışmaya Batch Inference denir.

Batch Inference yığın halindeki veri ile yapıldığı için daha büyük bir compute gücüne ihtiyaç duyulur. Muhtemelen bu iş için eğitimde kullandığınız bir clusteri tercih etmek istersiniz.

Real-Time inference için Container Instance (Test amaçlı), Azure Kubernetes Service veya Managed seçenekleri sunulur. Son kullanıcının talep yoğunluğunu yönetebilmek için otomatik veya elle ölçeklendirme ve trafiğin yeni modelle eski model arasında paylaştırılması gibi yeteneklere yer verilmiştir.

Manage Bölümü

Bu bölümde çalışacak her şeyin arkasında yer alan makine gücünü yani Computeleri oluşturup yöntebiliyor, Azure ML hizmetinin bağlanabileceği hizmetleri belirtiyor, bir resim ve metin etiketleme projesi geliştirebiliyoruz.

Compute: Bu bölümde scriptleriniz, joblarınız ve web serviceleriniz için gerekli olan işlemci gücünü yönetebilirsiniz. 

Notebook veya scriptlerinizi çalıştırmak gibi bir nedenden dolayı tek bir makineye ihtiyaç duyduğunuzda Compute Instance oluşturabilirsiniz.

Model eğitmek veya Batch Inference gibi yoğun işlemler için yatay ölçeklendirme ihtiyacı doğmaktadır. Bu ihtiyaca cevap vermek için Compute Cluster oluşturabilirsiniz.

Real-Time inference için bir web service yayınlanır. Bu web service hizmetinin ihtiyaç halinde ölçeklenebilmesi için Kubernetes Cluster oluşturabilirsiniz.

Eğer daha önce Azure üzerinde bir HDInsight cluster, Sanal Makine veya Databricks cluster oluşturmuş iseniz bu gücü Attach Compute bölümündeki tanımlama ile Azure ML için de kullanabilirsiniz.

Linked Services: Azure ML çalışma ortamının erişebileceği diğer Azure hizmetleri burada tanımlanabilir. Mesela Synapse Analytics hizmetini Azure ML'e entegre edebilirsiniz.

Data Labeling: Resim ve metin işleme çalışmalarında en çok zaman alan aşamalardan herhalde en uzunu etiketleme aşamasıdır. Bu bölüm birden fazla kişinin etiketleme projesi yürütebilmesi için ideal bir çalışma ortamı sunmaktadır. Ayrıca bazı ek yeteneklerle bu tarz projelerin konforu her geçen gün artmaktadır.

Dahası var mı?

Azure ML hizmeti diğer bazı Azure hizmetlerinden de destek alır. Bunların bazıları; Docker imagelarının kaydedilmesi için Container Registry, test amaçlı container hizmeti için Container Instance, monitorlemek için Application Insight, logların kaydedilmesi için Azure Blob Storage, şifre ve sertifikaların depolanması için Key Vault, sürekli entegrasyon ve sürekli geliştirme süreçlerinin kurulması için GitHubs ve Azure DevOps hizmetleridir. 

Ayrıca Spark tarafında yaygın şekilde kullanılan MLFlow gibi makine öğrenimi yaşam döngüsünü yönetmeyi sağlayan açık kaynak platformları da destekleyip Spark ML ile Azure ML arasında doğal bir entegrasyonu da mümkün kılar.

Azure ML Bileşenlerini Nasıl Kullanabilirim?

Azure ML hizmetini Azure ML Studio ile büyük oranda kullanabilirsiniz. Fakat tüm yeteneklerin kilidini açmak için Azure ML SDK'lar ile çalışmanızı gerekir. 

Azure ML SDK'larla ilgili bir değişimin olduğu dönemdeyiz. Bu serüven hakkında kısa bir bilgi vereyim.

Azure ML bileşenlerini scriptler ile yönetmek için Python SDK, Azure CLI veya R SDK kullanıyorduk. R SDK 2021 sonu itibari ile artık desteklenmiyor. Bu haber R dili ile Azure ML üzerinde çalışmayacağınız anlamına gelmiyor. Sadece Azure ML hizmetinin bileşenlerini R dili ile artık yönetemeyeceğiniz anlamına geliyor. 

Python ve Azure CLI desteği versiyon 1 olarak hala kullanımda ve ne zaman desteğin kesileceğine dair herhangi bir açıklama şu aralar mevcut değil. Fakat yeni bir Python SDK ve Azure CLI için ML extension duyurusu versiyon 2 olarak yapıldı ve genel kullanıma açıldı. Tüm yeniliklerin bu yeni yaklaşım üzerinden kullanılabilir olacağı belirtildi.

Python kullanıcıları SDK v1'e göre daha kolay bir yaklaşımla Python SDK v2'yi kullanabilir. Python yazmadan diğer dillerle makine öğrenimi yapmak isteyen geliştiriciler tüm Azure ML yetneklerini Azure ML CLI v2 ile benzer mantıkta komut satırından yönetebilir.

Azure ML CLI v2 kullanımı Visual Studio Code'un Azure Machine Learning bileşeni ile çok daha kolay hale geliyor. Tüm Azure ML yeteneklerini yaml dosyaları halinde tarif edebilir, VS Code ile Azure ML CLI v2 komutlarının bu yaml dosyalarını Workspacee iletmesini sağlayabilirsiniz.


Yukarıda bahsi geçen bileşenler ve komut desteğini göz önüne aldığımızda Azure Machine Learning hizmeti uçtan uca Makine Öğrenimi projelerini hayata geçirebilmek konusunda sınıf atlatacak nitelikte olduğunu söyleyebiliriz. 

Eğer daha yakından bakarsanız çok daha fazlasının olduğunu görebilirsiniz. Koddaki, modeldeki ve verideki değişimin takip edilip bir sürecin tetiklenebilmesi, modellerin ölçeklenebilir compute gücü ile eğitilmesi, eğitilmiş modellerin versiyonlanarak web serviceler şeklinde son kullanıcıya yayınlanması ve talep trafiğinin yönlendirmesi gibi görünen ihtiyaçlara cevap verdiği gibi mahremiyet ve adalet gibi bazı etik ve kanuna dayalı görünmeyen ama baş ağrıtabilecek konularda da çözümler sunmaktadır. 

Makine öğrenimi çalışmaları sonucu ortaya çıkabilecek ihlallerin, adaletsizliğin belirlenebilmesi ve modelin açıklanabilmesi çoğu zaman göz ardı edilir. Bu konudaki bir ihmal para ve imaj kaybına sebep olabilir. Kanunlara göre hapis cezası ile bile sonuçlanabilir. 

Bu konularla ilgili Azure ML hizmeti üzerindeki yeteneklerin bir kısmı şu aralar her ne kadar preview aşamasında olsa da tatmin edici sonuçlar elde etmek ve gerekli önlemleri alabilmek pekala mümkün.

Azure ML Hizmeti işin anlaşılmasından, eğitilmiş modelin yayınlanmasına kadar geçen tüm ML sürecini yönetebilme, veri bilimcisinin etik ve kanuni sorumluluklarını yerine getirebilme ve değişen talepler için dinamik compute gücü sağlama konusunda etkileyici çözümler sunuyor. 

Azure Machine Learning hizmetini, makine öğrenimi projeleriniz için bir doğal yaşam alanı haline getirmeniz müşterilerinize, firmanıza ve ekiplerinize rahat bir nefes aldıracaktır.