Merhaba Hackernoon! Bu yazımda MLOps kavramını detaylı bir şekilde ele alacağım. Üstelik bunu 3 şekilde yapacağım. İlk olarak teorik olarak en mantıklı MLOps şeması aracılığıyla. Daha sonra kavramsal olarak yaklaşıma gömülü olan eserler aracılığıyla. Ve son olarak MLOps'u bir bilgi sistemi olarak anlayarak.
Haydi başlayalım.
Bu soru uzun süredir birçok ML sistem geliştirme ekibinin aklını meşgul ediyor. Bu makalede böyle bir sistemden, bir veya daha fazla bileşeninin genel iş mantığının bir kısmını gerçekleştiren eğitimli bir model içeren bir bilgi sistemini anlayacağım.
Sistemin diğer bileşenleri gibi iş mantığının bu bölümünün de değişen iş ve müşteri beklentilerini karşılayacak şekilde güncellenmesi gerekir. MLOps tamamen bu düzenli güncellemeyle ilgilidir.
MLOps'un henüz tek ve kabul edilmiş bir tanımı yoktur. Pek çok yazar bunu vermeye çalıştı ancak aynı zamanda açık ve sistematik bir tanım bulmak da zorlayıcıydı.
Şöyle sayılabilecek bir tane var:
MLOps, üretimde yüksek performanslı modellerin sürekli sunumunu standartlaştırmak ve kolaylaştırmak için ML sistem geliştirmeyi (geliştirme) ve ML sistem dağıtımını (ops) birleştirmeyi amaçlayan bir mühendislik disiplinidir.
MLOps tanımının kritik kısımlarını vurgulayalım:
Yani MLOps, ML modelleri için bir tür DevOps'tur.
Böyle bir mühendislik disiplininin büyük bir BT şirketinden kaynaklandığına inanmak kolaydır. Dolayısıyla, MLOps'un anlamlı bir yaklaşım olarak Google'dan kaynaklandığı teorisine güvenebiliriz; burada D. Sculley, sinirlerini ve zamanını makine öğrenimi modellerinin çıktısını uzantılara aktarma konusundaki sıradan görevlerden kurtarmaya çalışıyordu. D. Sculley artık yaygın olarak "MLOps'un Vaftiz Babası" olarak biliniyor - aynı isimli podcast'i internette bulmak çok kolay.
D. Sculley, modellerle çalışmayı ekibin teknik borcu açısından değerlendirmeye başladı. Evet, modellerin yeni versiyonlarını hızlı bir şekilde piyasaya sürmek mümkün ancak ortaya çıkan sistemi desteklemenin maliyeti şirketin bütçesi üzerinde önemli bir etkiye sahip olacak.
Çalışması gazeteyle sonuçlandı "
Çoğu BT süreci gibi MLOps'un da olgunluk seviyeleri vardır. Şirketlerin şu anda nerede olduklarını ve bir sonraki aşamaya nasıl geçebileceklerini (eğer böyle bir hedef varsa) anlamalarına yardımcı olurlar. Ayrıca genel kabul görmüş vade belirleme yöntemleri, rakipler arasındaki yerinizi belirlemenize olanak tanır.
En kapsamlı şekilde açıklanan ve büyük ölçüde anlaşılır model, analiz firması GigaOm'a aittir. Tüm modellerin Yetenek Olgunluk Modeli Entegrasyonuna (CMMI) en yakın olanıdır. Bu, aynı zamanda 0'dan 4'e kadar 5 seviyeden oluşan organizasyonel süreçlerin iyileştirilmesine yönelik bir dizi metodolojidir.
GigaOm'un modeli, her bir olgunluk düzeyini 5 kategori aracılığıyla ortaya çıkarır: strateji, mimari, modelleme, süreçler ve yönetişim.
Bir makine öğrenimi sistemi oluşturmanın ilk aşamalarında bu modelin rehberliğinde, temel hususlar hakkında önceden düşünebilir ve başarısızlık olasılığını azaltabilirsiniz. Bir olgunluk seviyesinden daha yüksek bir olgunluğa geçiş, ekibe daha önce varlığından haberdar olmadıkları yeni zorluklar sunar.
Google'ın aynı zamanda MLOps olgunluk düzeyleri modeline de sahip olduğunu belirtmekte fayda var. İlk ortaya çıkanlardan biriydi. Kısadır ve 3 seviyeden oluşur:
Bu modelin baykuş boyamanın kullanım kılavuzuna benzediği düşüncesinden kaçmak zor. Öncelikle her şeyi elle yapın, ML işlem hatlarını birleştirin ve MLOps'u sonlandırın. Bununla birlikte, iyi tanımlanmış.
Bugün ML kullanan birçok büyük şirket olgunluk modellerini derledi.
Vurgulanan tüm modeller yaklaşık olarak tek bir noktada birleşiyor. Sıfır seviyesinde herhangi bir makine öğrenimi uygulamasının bulunmaması söz konusudur. Son aşamada MLOps süreçlerinin otomasyonuna sahiptirler. Artımlı süreç otomasyonuyla ilgili olarak ortada her zaman farklı bir şey vardır. Azure, eğitim sürecinin otomasyonuna ve ardından model dağıtımına sahiptir.
MLOps kavramıyla ilgili tüm süreçleri nasıl tanımlıyorsunuz? Şaşırtıcı bir şekilde, üç Alman - makalenin yazarları "
Birbiriyle etkileşim halinde olan birçok unsur olduğundan korkutucu olabilir. Ancak yukarıda bahsedilen olgunluk seviyelerinin birçok özelliği onda da bulunabilir. En azından otomatikleştirilmiş İşlem Hatları, CI/CD, İzleme, Model Kaydı, İş Akışı Düzenleme ve Hizmet Bileşeni.
Bu diyagramı tartışalım ve her biri hakkında daha ayrıntılı olarak konuşalım.
Şemanın ana bölümleri, MLOps'un prosedürel yönlerinin tanımlandığı yatay bloklardır (bunlara A, B, C ve D harfleri atanır). Her biri, şirketin ML hizmetlerinin sorunsuz çalışmasını sağlama çerçevesinde belirli görevleri çözmek için tasarlanmıştır. Şemayı anlama kolaylığı için sıra dışı başlamak daha iyidir.
Bir şirketin ML hizmetleri varsa çalışanlar Jupyter'da çalışır. Birçok şirkette bu, tüm ML geliştirme süreçlerinin merkeze alındığı araçtır. MLOps uygulamalarının uygulanmasını gerektiren görevlerin çoğunun başladığı yer burasıdır.
Bir örnek düşünelim. A Şirketinin bazı süreçlerin bir kısmını makine öğrenimini kullanarak otomatikleştirmesi gerekiyor (ilgili bir departman ve uzmanların olduğunu varsayalım). Görevi çözme yolunun önceden bilinmesi pek olası değildir. Bu nedenle, uygulayıcıların problem bildirimini incelemesi ve onu gerçekleştirmenin olası yollarını test etmesi gerekir.
Bunu yapmak için bir ML mühendisi/ML geliştiricisi, çeşitli görev uygulamalarına yönelik kod yazar ve elde edilen sonuçları hedef metriklerle değerlendirir. Bütün bunlar neredeyse her zaman Jupyter Laboratuvarında yapılır. Böyle bir formda birçok önemli bilgiyi manuel olarak yakalamak ve ardından uygulamaları kendi aralarında karşılaştırmak gerekir.
Bu tür faaliyetlere deney denir. Bu, ilgili sorunları çözmek için daha sonra kullanılabilecek, çalışan bir makine öğrenimi modelinin elde edilmesi anlamına gelir.
Diyagramda gösterilen Blok C, ML deneylerini yürütme sürecini açıklamaktadır.
ML geliştirmedeki birçok karar, şirketteki mevcut verilerin analizine dayanarak alınır. Hedef kalite metrikleri olan bir modeli, düşük kaliteli veriler veya var olmayan veriler üzerinde eğitmek mümkün değildir.
Bu nedenle hangi verileri elde ettiğimizi ve bunlarla neler yapabileceğimizi anlamak önemlidir. Bunu yapmak için örneğin şunları yapabiliriz:
Verilerin daha iyi anlaşılması ancak anlamsal ve yapısal analizle birleştirildiğinde elde edilebilir.
Ancak bazen veri hazırlığı proje ekibinin kontrolünde olur. Bu durumda ek zorluklar garanti edilir. Bazen bu aşamada, veriler çalışmaya uygun olmadığı için projeyi daha da geliştirmenin bir anlamı olmadığı ortaya çıkıyor.
Mevcut verilere güven duyulduğunda ön işleme kurallarını düşünmek gerekir. Uygun verilerden oluşan geniş bir set olsa bile, bunların eksiklikler, çarpık değerler vb. içermediğinin garantisi yoktur. "Giriş veri kalitesi" teriminden ve iyi bilinen "Çöp girişi - çöp çıkışı" tabirinden bahsetmek gerekir. Burada.
Bir model ne kadar iyi kullanılırsa kullanılsın, düşük kaliteli veriler üzerinde kötü sonuçlar üretecektir. Uygulamada birçok proje kaynağı yüksek kaliteli bir veri kümesi oluşturmaya harcanmaktadır.
Bir önceki aşamadan sonra deneyler yapılırken eğitilen modelin metriklerinin dikkate alınması mantıklıdır. Söz konusu blok çerçevesinde deney, ML modelinin eğitimi ve doğrulanmasının ilişkilendirilmesinden oluşur.
Deney, hazırlanan veri seti üzerinde seçilen hiperparametre seti ile modelin istenen versiyonunun eğitiminin klasik şemasından oluşur. Bu amaçla veri kümesinin kendisi eğitim, test ve doğrulama örneklerine bölünmüştür:
Doğrulama örnekleri hakkında daha fazla bilgiyi şurada bulabilirsiniz:
Model öğrenme metrikleri iyiyse model kodu ve seçilen parametreler kurumsal bir depoda saklanır.
Deney sürecinin temel amacı, en iyi algoritma seçiminin ve en iyi hiperparametre ayarının seçilmesini içeren model mühendisliğidir.
Deney yürütmenin zorluğu, geliştiricinin ML modeli operasyon parametrelerinin birçok kombinasyonunu kontrol etmesi gerekmesidir. Ve kullanılan matematiksel aparatların farklı varyantlarından bahsetmiyoruz.
Genel olarak çalışma gerektirir. Peki model parametrelerinin kombinasyonları çerçevesinde istenilen metriklere ulaşılamazsa ne yapmalı?
ML modeli işleminin istenen metrikleri elde edilemiyorsa, veri kümesi nesnelerinin özellik açıklamasını yeni özelliklerle genişletmeyi deneyebilirsiniz. Bunlar sayesinde modelin bağlamı genişleyecek ve dolayısıyla istenilen metrikler iyileşebilecektir.
Yeni özellikler şunları içerebilir:
Diyagramın Özellik Mühendisliği ile ilgili kısmına bakalım.
Blok B1, mevcut kaynak verilerinin dönüştürülmesi ve onlardan özellikler elde edilmesi için bir dizi gereksinim oluşturmayı amaçlamaktadır. Bileşenlerin hesaplanması, ML geliştiricisi tarafından girilen "formüllere" göre çok önceden işlenmiş ve temizlenmiş bu verilerden gerçekleştirilir.
Özelliklerle çalışmanın yinelemeli olduğunu söylemek önemlidir. Bir dizi özellik uygulandığında, başka bir özellik kümesinde hayata geçirilen yeni bir fikir akla gelebilir ve bu sonsuza kadar böyle devam eder. Bu, diyagramda açıkça bir Geribildirim Döngüsü olarak gösterilmiştir.
Blok B2, verilere yeni özellikler eklemenin anında sürecini açıklar.
Veri kaynaklarına bağlanmak ve bunları almak oldukça karmaşık olabilen teknik işlemlerdir. Açıklamanın basit olması açısından, ekibin erişebildiği birkaç kaynak ve bu kaynaklardan verileri kaldırmak için araçlar (en azından Python komut dosyaları) olduğunu varsayacağım.
Veri temizleme ve dönüştürme. Bu aşama neredeyse deney bloğundaki (C) veri hazırlamadaki benzer adımı destekler. Zaten ilk deneylerin setinde, ML modellerini eğitmek için hangi verilere ve hangi formatta ihtiyaç duyulduğuna dair bir anlayış var. Geriye yeni özelliklerin doğru bir şekilde oluşturulup test edilmesi kalıyor ancak bu amaca yönelik veri hazırlama sürecinin mümkün olduğunca otomatikleştirilmesi gerekiyor.
Yeni özelliklerin hesaplanması. Yukarıda belirtildiği gibi, bu eylemler bir veri kümesinin birkaç öğesinin basitçe dönüştürülmesinden oluşabilir. Diğer bir seçenek de aynı veri kümesine tek bir özellik eklemek için ayrı bir büyük işleme hattı çalıştırmaktır. Her iki durumda da, sırayla yürütülen bir dizi eylem vardır.
Sonuç ekleniyor. Önceki eylemlerin sonucu veri kümesine eklenir. Çoğu zaman, veritabanı yükünü azaltmak için özellikler veri kümesine toplu olarak eklenir. Ancak bazen iş görevlerinin yürütülmesini hızlandırmak için bunu anında (akış) yapmak gerekir.
Elde edilen özellikleri mümkün olduğunca verimli kullanmak çok önemlidir: bunları kaydedin ve şirketin diğer makine öğrenimi geliştiricilerinin görevlerinde yeniden kullanın. Şemanın bu amaç için bir Özellik mağazası vardır. Şirket içinde mevcut olmalı, ayrı olarak yönetilmeli ve içerdiği tüm özellikler sürümlendirilmelidir. Özellik deposunda 2 bölüm bulunur: çevrimiçi (akış komut dosyaları için) ve çevrimdışı (toplu komut dosyaları için).
Yazının başında ML sistemi derken, genel iş mantığının bir kısmını gerçekleştiren, bir veya daha fazla bileşeni eğitimli bir model içeren bir bilgi sistemini kastettiğimi belirtmiştim. Geliştirme nedeniyle elde edilen ML modeli ne kadar iyi olursa, işleyişinin etkisi de o kadar büyük olur. Eğitilmiş bir model, gelen talep akışını işler ve yanıt olarak bazı tahminler sağlar, böylece analiz veya karar verme sürecinin bazı bölümlerini otomatikleştirir.
Tahminler üretmek için bir model kullanma sürecine çıkarım, bir modeli eğitmeye ise eğitim denir. İkisi arasındaki farka ilişkin net bir açıklama Gartner'dan ödünç alınabilir. Burada kediler üzerinde pratik yapacağım.
Bir üretim ML sisteminin verimli çalışması için modelin çıkarım metriklerini takip etmek hayati önem taşır. Düşmeye başlar başlamaz model ya yeniden eğitilmeli ya da yenisiyle değiştirilmelidir. Çoğu zaman, giriş verilerindeki değişiklikler (veri kayması) nedeniyle olur. Örneğin, modelin fotoğraflardaki kekleri tanıyabildiği bir iş sorunu var ve bu ona girdi olarak veriliyor. Örnekteki Chihuahua köpekleri denge içindir:
Orijinal veri setindeki model Chihuahua köpekleri hakkında hiçbir şey bilmediğinden yanlış tahminde bulunuyor. Bu nedenle veri setini değiştirip yeni deneyler yapmak gerekiyor. Yeni modelin bir an önce üretime geçmesi gerekiyor. Hiç kimse kullanıcıların Chihuahua köpek görsellerini yüklemelerini yasaklamaz, ancak yanlış sonuçlar elde edeceklerdir.
Şimdi daha gerçek dünyadan örneklere geçelim. Bir pazar yeri için bir öneri sisteminin geliştirilmesini ele alalım.
Kullanıcının satın alma geçmişine, benzer kullanıcıların satın almalarına ve diğer parametrelere bağlı olarak bir model veya modeller topluluğu, öneriler içeren bir blok oluşturur. Satın alma gelirleri düzenli olarak sayılan ve takip edilen ürünleri içerir.
Bir şeyler olur ve müşterilerin ihtiyaçları değişir. Sonuç olarak, onların tavsiyeleri artık geçerli değildir. Önerilen ürünlere olan talep düşüyor. Bütün bunlar gelirin azalmasına yol açıyor.
Sonraki yöneticiler çığlık atıyor ve her şeyin yarına kadar onarılmasını talep ediyor, bu da hiçbir şeye yol açmıyor. Neden? Yeni müşteri tercihleriyle ilgili yeterli veri yok, dolayısıyla yeni bir model bile yapamıyorsunuz. Öneri oluşturmanın bazı temel algoritmalarını (öğe tabanlı işbirlikçi filtreleme) alıp bunları üretime ekleyebilirsiniz. Bu şekilde öneriler bir şekilde işe yarayacaktır ancak bu yalnızca geçici bir çözümdür.
İdeal olarak süreç, yöneticilerin onlara bunu yapmasını söylemeden, metriklere dayalı olarak yeniden eğitim veya farklı modellerle deneme süreci başlatılacak şekilde kurulmalıdır. Ve en iyisi, sonunda üretimdeki mevcut olanın yerini alacaktı. Diyagramda bu, bazı düzenleme araçlarındaki tetikleyiciler tarafından başlatılan Otomatik ML İş Akışı Ardışık Düzenidir (blok D).
Bu, planın en ağır yüklü bölümüdür. D bloğunun işleyişinde birkaç önemli üçüncü taraf bileşeni yer almaktadır:
Bloğun yapısı, deneme ve özellik geliştirme (B2) bloklarının aşamalarını birleştirir. Bunların otomatikleştirilmesi gereken süreçler olduğu düşünüldüğünde bu şaşırtıcı değil. Temel farklar son 2 aşamadadır:
Geri kalan adımlar yukarıda açıklananlarla aynıdır.
Ayrı olarak, orkestratörün model yeniden eğitim işlem hatlarını çalıştırması için ihtiyaç duyduğu hizmet yapıtlarından bahsetmek istiyorum. Bu, depoda saklanan ve seçilen sunucularda çalışan koddur. Yazılım geliştirmenin tüm kurallarına uygun olarak versiyonlanır ve yükseltilir. Bu kod, modelin yeniden eğitim işlem hatlarını uygular ve sonuç, doğruluğuna bağlıdır.
Çoğu zaman, kodun içinde ardışık düzen adımlarının yürütüldüğü çeşitli makine öğrenimi araçları çalıştırılır, örneğin:
Burada deneyleri otomatikleştirmenin genellikle imkansız olduğunu belirtmekte fayda var. AutoML konseptini de sürece eklemek elbette mümkün. Ancak şu anda deneyin herhangi bir konusu için aynı sonuçlarla kullanılabilecek tanınmış bir çözüm yoktur.
Genel durumda AutoML şu şekilde çalışır:
Otomasyon biraz ele alındı. Daha sonra, modelin yeni bir versiyonunun üretime teslimini organize etmemiz gerekiyor.
Tahminler oluşturmak için ML modeli gereklidir. Ancak ML modelinin kendisi, bunları bu kadar hızlı bir şekilde oluşturamayacak bir dosyadır. İnternette sıklıkla böyle bir çözüm bulabilirsiniz: Bir ekip FastAPI'yi alır ve modelin etrafına bir Python sarmalayıcısı yazar, böylece "yüklemleri takip edebilirsiniz".
ML model dosyasının alındığı andan itibaren olayların ortaya çıkmasının birkaç yolu vardır. Takım gidebilir:
Bunu tüm modeller için yapmak ve gelecekte tüm kod tabanını korumak emek yoğun bir iştir. Bunu kolaylaştırmak için 3 yeni varlığın tanıtıldığı özel servis araçları ortaya çıktı:
Çıkarım Örneği veya Çıkarım Hizmeti , sorguları almak ve yanıt tahminleri oluşturmak için hazırlanan belirli bir makine öğrenimi modelidir. Böyle bir varlık, gerekli makine öğrenimi modeline ve onu çalıştırmak için teknik araçlara sahip bir kapsayıcıya sahip bir Kubernetes kümesindeki bir alt birimi temsil edebilir.
Çıkarım Sunucusu, Çıkarım Örneklerinin/Hizmetlerinin yaratıcısıdır. Çıkarım Sunucusunun birçok uygulaması vardır. Her biri belirli makine öğrenimi çerçeveleriyle çalışabilir ve bu çerçevelerde eğitilen modelleri, giriş sorgularını işlemek ve tahminler oluşturmak için kullanıma hazır modellere dönüştürebilir.
Hizmet Motoru birincil yönetim işlevlerini yerine getirir. Hangi Çıkarım Sunucusunun kullanılacağını, elde edilen Çıkarım Örneğinin kaç kopyasının başlatılması gerektiğini ve bunların nasıl ölçeklendirileceğini belirler.
Göz önünde bulundurulan şemada, model hizmet bileşenleri hakkında böyle bir ayrıntı mevcut değildir, ancak benzer yönler ana hatlarıyla belirtilmiştir:
Sunuma yönelik tam bir yığın örneği için Seldon'daki yığına başvurabiliriz:
Hizmetin uygulanmasına yönelik standartlaştırılmış bir protokol bile mevcut olup, bu tür araçların tümünde desteği fiilen zorunludur. Buna V2 Çıkarım Protokolü denir ve KServe, Seldon ve Nvidia Triton gibi önde gelen pazar oyuncuları tarafından geliştirilmiştir.
Çeşitli makalelerde, tek bir varlık olarak Hizmet Verme ve Dağıtım araçlarına ilişkin referanslar bulabilirsiniz. Ancak her ikisinin de amacındaki farkı anlamak önemlidir. Bu tartışmalı bir konudur, ancak bu makale bunu şu şekilde ortaya koyacaktır:
Modelleri dağıtmak için birçok strateji kullanılabilir ancak bunlar makine öğrenimine özgü değildir. Bu arada, Seldon'un ücretli sürümü birçok stratejiyi destekliyor, böylece bu yığını seçebilir ve her şeyin nasıl çalıştığının keyfini çıkarabilirsiniz.
Model performans ölçümlerinin izlenmesi gerektiğini unutmayın. Aksi takdirde sorunları zamanında çözemezsiniz. Metriklerin tam olarak nasıl takip edileceği büyük sorudur. Arize AI bunun üzerine koca bir iş kurdu ancak kimse Grafana ve VictoriaMetrics'i iptal etmedi.
Yukarıda yazılan her şey göz önüne alındığında, ML komutunun şu olduğu ortaya çıkıyor:
Pahalı görünüyor ve yalnızca bazen haklı görünüyor. Bu nedenle şemada rasyonel hedef belirlemeden sorumlu ayrı bir MLOps Proje Başlatma (A) bloğu bulunmaktadır.
BT yöneticisinin muhakemesine bir örnek, buradaki düşünme biçimini gösterebilir. İlham veren bir proje yöneticisi ona gelir ve bir makine öğrenimi sistemi oluşturmak için yeni bir platform kurulumu ister. Her ikisi de şirketin çıkarına en uygun şekilde hareket ediyorsa BT direktörünün açıklayıcı soruları gelecektir:
BT direktörü bir üniversitede öğretmen olarak görevden alınacak ancak şirketin parasını kurtaracak. Eğer tüm sorular cevaplanmışsa, bir ML sistemine gerçekten ihtiyaç var demektir.
Soruna bağlı. PoC (Kavram Kanıtı) gibi tek seferlik bir çözüm bulmanız gerekiyorsa MLOps'a ihtiyacınız yoktur. Çok sayıda gelen isteğin işlenmesi gerekiyorsa MLOps gereklidir. Özünde bu yaklaşım, herhangi bir kurumsal sürecin optimize edilmesine benzer.
Yönetime MLOps ihtiyacını haklı çıkarmak için aşağıdaki soruların yanıtlarını hazırlamanız gerekir:
Yapılacak bir sonraki şey BT direktörü sınavına tekrar girmektir.
Zorluklar devam ediyor çünkü ekibin aynı zamanda iş süreçlerini ve teknoloji yığınını değiştirme ihtiyacına da ikna olması gerekiyor. Bazen bu, yönetimden bütçe istemekten daha zordur.
Ekibi ikna etmek için şu soruların cevaplarını hazırlamaya değer:
Gördüğünüz gibi bu süreç basit değil.
Burada MLOps şemasına ilişkin ayrıntılı bir çalışmayla işim bitti. Ancak bunlar sadece teorik yönlerdir. Pratik uygulama her zaman birçok şeyi değiştirebilecek ek ayrıntıları ortaya çıkarır.
Bir sonraki makalede şunları tartışacağım:
İlginiz için teşekkür ederiz!