Heroku'da Makine Öğrenimi Modellerini Dağıtma
Yayınlanan: 2021-01-05Makine öğrenimi, modeli görünmeyen veriler üzerinde test etmek için Veri çıkarma, temizleme, önemli özellikleri seçme, model oluşturma, doğrulama ve devreye almayı içeren sürekli bir süreçtir.
İlk veri mühendisliği ve model oluşturma aşaması oldukça sıkıcı bir süreç olsa ve Data ile çok fazla zaman harcanmasını gerektirse de, model dağıtımı basit görünebilir, ancak bu kritik bir süreçtir ve hedeflemek istediğiniz kullanım durumuna bağlıdır. Modeli mobil kullanıcılara, web sitelerine, akıllı cihazlara veya diğer herhangi bir IoT cihazına göre ayarlayabilirsiniz.
Modeli ana uygulamaya entegre etmeyi seçebilir, onu SDLC'ye veya buluta dahil edebilirsiniz. Google Cloud Platform, Azure, Amazon Web Services ve Heroku gibi araçların kullanılabilirliği nedeniyle çoğu durumda daha iyi bir seçenek gibi görünen bulut platformunda modeli dağıtmak ve çalıştırmak için çeşitli stratejiler vardır.
Modeli Pub/Sub yolunda göstermeyi tercih edebilirsiniz, ancak modeli üretimde dağıtmak için daha yaygın olarak API (Uygulama Programı Arayüzü) veya REST sarmalayıcı kullanılır. Model karmaşıklığı arttıkça, yaygın olarak Makine Öğrenimi Mühendisleri olarak bilinen bu tür durumları ele almak için farklı ekipler atanır. Bu kadar girişle, bir makine öğrenimi modelinin Heroku platformunda API olarak nasıl dağıtılacağına bakalım.
İçindekiler
Heroku nedir?
Heroku, geliştiricilerin sunucusuz kodlarını barındırmasına olanak tanıyan bir hizmet olarak Platform aracıdır. Bunun anlamı, birinin belirli amaçlar için birine veya diğerine hizmet edecek komut dosyaları geliştirebileceğidir. Heroku platformunun kendisi, hizmet aracı olarak bir altyapı olan AWS'de (Amazon Web Services) barındırılmaktadır.
Heroku ücretsiz bir platformdur ancak 500 saatlik çalışma süresi ile sınırlıdır. Uygulamalar, 30 dakikalık hareketsizlikten sonra uyku moduna giren bir dinamo olarak barındırılır. Bu, uygulamanızın hareketsizlik sırasında tüm boş zamanı tüketmemesini sağlar. Platform Ruby, Java, PHP, Python, Node, Go, Scala'yı destekler. Veri Bilimine yeni başlayanların çoğu, bulutta bir model çalıştırma ve dağıtma deneyimine sahip olmak için bu platforma başvurur.

Modelin Hazırlanması
Artık bu platformdan haberdar olduğunuza göre, modeli de buna göre hazırlayalım. Bir makine öğrenimi modeli eğitildiğinde, ilgili parametreler belleğin kendisinde depolanır. Bu modeli doğrudan yükleyebilmemiz, görünmeyen verileri iletebilmemiz ve çıktıları alabilmemiz için bu modelin ayrı bir dosyada dışa aktarılması gerekiyor.
Genellikle Pickle, Python Nesne Modelini bir bit akışına dönüştüren job-lib, ONNX, PMML veya H20.ai dışa aktarma formatı olan MOJO gibi farklı model formatları uygulanır ve modeli Java uygulamalarına da entegre edilmesini sağlar. Basit olması için, modeli turşu yoluyla dışa aktarmak istediğimizi düşünün, ardından bunu şu şekilde yapabilirsiniz:
ithal turşu
Pkl_Filename = “model.pkl”
dosya olarak open(Pkl_Filename, 'wb') ile:
pickle.dump(model_adı, dosya)
Model artık ayrı bir dosyada saklanıyor ve bir API'ye entegre olarak kullanılmaya hazır.
Sunucu mantığı
Tahminler için bu modele erişim sağlamak için, tüm istemci tarafı isteklerini yeniden yönlendirebilen ve işleyebilen bir sunucu koduna ihtiyacımız var. Python, web geliştirme çerçevelerini destekler ve ünlü bir tanesi Flask'tır.
Birkaç satır kod ile bir sunucu kurmaya izin veren minimalist bir çerçevedir. Minimal bir paket olduğu için, kimlik doğrulama ve RESTful doğası gibi birçok işlevsellik açıkça desteklenmemektedir. Bunlar uzantılarla entegre edilebilir.
Başka bir seçenek de yeni piyasaya sürülen FastAPI çerçevesini seçmektir. Çok daha hızlı, ölçeklenebilir, iyi belgelenmiştir ve birçok entegre paketle birlikte gelir. Şimdilik, basit bir tahmin rotası oluşturmak için balonla devam edelim.
şişeden ithalat şişesi
ithal turşu
uygulama = Şişe(__name__)
dosya olarak open(Filename, 'rb') ile:
model = pickle.load(dosya)
@app.route('/predict', yöntemler = ['GET', 'POST'])

def pred():
# sorgu veya yük yoluyla parametreleri almak için mantığı uygulayın
tahmin = model.predict([elde edilen parametreler])
dönüş {'sonuç': tahmin}
Bu, sunucu mantığıyla nasıl devam edileceğini gösteren kaba bir koddur. Daha iyi uygulama için seçebileceğiniz çeşitli stratejiler vardır.
Kontrol Edin: Streamlit Kullanarak ML Modellerini Dağıtma Kılavuzu
Dağıtım Dosyalarını Ayarlama
Heroku, uygulamamızın gerektirdiği tüm bağımlılıkların bir listesini gerektirir. Buna gereksinim dosyası denir. Uygulamanın kullandığı tüm harici kitaplıkları listeleyen bir metin dosyasıdır. Bu örnekte, dosya içeriği şunları içerecektir:
şişe
sklearn
uyuşuk </p>
pandalar
gunicorn
Son kitaplık olan gunicorn, istemci ve HTTP trafiğini işleyen sunucu için arabirim oluşturan WSGI sunucu uygulamasını kurmamıza izin verir. Heroku ayrıca, uygulamanın giriş noktasını belirtmek için kullanılan Procfile olarak bilinen başka bir dosya talep eder. Sunucu mantık dosyasının main.py adıyla kaydedildiğini düşünün, ardından bu dosyaya yazılacak komut şudur:
web: gunicorn ana: uygulama

"web", dağıttığımız dyno türüdür, "gunicorn", isteği "main" sunucu koduna iletmek ve "ana" içinde "uygulama" aramak için aracı görevi görür. Uygulama, buradaki tüm rotaları yönetir.
Son Dağıtım
Tüm hazırlıklar tamamlandı ve şimdi uygulamayı bulutta çalıştırma zamanı. Heroku'da değilse bir hesap oluşturun, bir uygulama oluştur'a tıklayın, herhangi bir bölge seçin. Bundan sonra GitHub hesabınızı bağlayın ve şu dosyaları içeren depoyu seçin: sunucu kodu, model.pkl, gereksinimleri.txt ve Procfile.
Bundan sonra sadece dağıtım şubesine basın! Başarılı olursa, oluşturulan bağlantıyı ziyaret edin ve uygulamanız yayında olmalıdır. Artık appname.herokuapp.com/predict rotasına istekte bulunabilirsiniz ve tahminleri vermesi gerekir. Makine öğrenimi modelleri hakkında daha fazla bilgi edinin.
Çözüm
Bu, Heroku'nun ne olduğuna, neden gerekli olduğuna ve Flask yardımıyla bir modelin nasıl dağıtılacağına dair bir girişti. Veri Boru Hatları, akış gibi daha gelişmiş özellikler sunan pek çok barındırma platformu vardır, ancak Heroku'nun ücretsiz platform olması, yalnızca konuşlandırmanın tadına varmak isteyen yeni başlayanlar için hala iyi bir seçimdir.
Makine öğrenimi hakkında daha fazla bilgi edinmek istiyorsanız, çalışan profesyoneller için tasarlanmış ve 450+ saat zorlu eğitim, 30'dan fazla vaka çalışması ve ödev, IIIT- sunan IIIT-B & upGrad'ın Makine Öğrenimi ve Yapay Zeka PG Diplomasına göz atın. B Mezun statüsü, 5+ pratik uygulamalı bitirme projesi ve en iyi firmalarla iş yardımı.
Heroku platformunu kullanmanın dezavantajları nelerdir?
Platformun dokümantasyonu kapsamlı olmadığı için Heroku büyük işletmeler için ideal değildir. Diğer bir sorun, filmler veya yüksek çözünürlüklü fotoğraflar gibi hacimli dosya yüklemelerinin işlenmesini zorlaştıran salt okunur dosya sistemidir. Heroku, sınırlı miktarda özelleştirmeye sahip bir hizmet olarak platform sağlayıcısıdır. Heroku, EUR gibi diğer para birimlerinde değil, yalnızca USD cinsinden ödemeleri kabul eder. Kendi para birimlerinde ödeme yapmayı tercih eden işletme sahipleri için bu küçük bir rahatsızlık olabilir. Ayrıca, CRE (Ortak Çalışma Zamanı Ortamı) içinde Heroku, statik IP adresleri sağlamaz.
Heroku'nun AWS'den farkı nedir?
AWS'deki dağıtım prosedürü basit değildir ve sonuç olarak karmaşıklık açısından özellikle kullanıcı dostu değildir. Heroku, kullanımı kolay, kullanıma hazır bir ortam sağlar. Heroku, daha az insan müdahalesi gerektirdiğinden AWS'den daha maliyetlidir. AWS, yüksek veya çok yüksek hesaplama ihtiyaçlarını karşılayabilirken Heroku, mütevazı hesaplama taleplerini karşılayabilir. Heroku, AWS'den farklı olarak düzenli altyapı bakımı gerektirmez. AWS ve Heroku, dağıtım söz konusu olduğunda yıldırım hızındadır.
Heroku'yu ücretsiz olarak ne kadar süre kullanabilirim?
Heroku hesaplarında, ücretsiz uygulamalarda kullanılabilecek bir ücretsiz dino saati havuzu bulunur. Bu, ücretsiz programlardaki 18 saatlik sınırın yerini alır ve gerektiğinde 24 saat çalışmalarını sağlar. Kimliğinizi bir kredi kartıyla doğrularsanız, yeni hesaplar 550 ücretsiz dino saati ve ek 450 saat alır. Heroku, teknolojiyi öğrenmenize ve başlamanıza yardımcı olacak ücretsiz bir plan sunar. Birçok Heroku Eklentisi, Heroku Düğmeleri ve Yapı Paketleri gibi ücretsiz bir plan sağlar.