Makine Öğrenmesi Modellerini Yükleme ve Sunma
Başlangıçta joblib/keras modelini yükleme, iş parçacığı güvenli çıkarım, toplu tahmin uç noktaları.
Makine Öğrenmesi Modellerini Yükleme ve Sunma, CoddyKit'te ücretsiz bir Learn AI with Python dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn AI with Python öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn AI with Python kursu toplamda 4 dersten oluşur.
Yükleme Sorunu
Bir modeli diskten yüklemek yavaştır. Her istekte yeniden yüklerseniz gecikme hızla artar. Çözüm: modeli başlangıçta bir kez yükleyin ve tüm isteklerde yeniden kullanın.
Başlatma Olayı
@app.on_event("startup") kancası, sunucu başlatıldığında bir kez çalışır; bu nedenle herhangi bir istek gelmeden önce modeli yüklemek için ideal yerdir.
from fastapi import FastAPI
import joblib
app = FastAPI()
@app.on_event("startup")
def load_model():
app.state.model = joblib.load("model.joblib")İş Parçacığı Güvenli Depolama için app.state
app.state, model gibi paylaşılan nesneleri saklamak için önerilen yerdir. Başlangıçta bir kez saklanıp istekler sırasında yalnızca okunduğundan, değiştirilebilir modül düzeyi global değişkenlerin sakıncalarını önler.
from fastapi import Request
@app.post("/predict")
def predict(req: PredictRequest, request: Request):
model = request.app.state.model
return {"prediction": model.predict([req.features])[0]}Neden Global Değişken Kullanılmamalı?
Basit bir modül globali çalışır; ancak yükleme işlemini içe aktarma zamanına bağlar ve sınamayı veya değiştirmeyi zorlaştırır. app.state, nesnenin yaşam döngüsünü uygulamaya bağlar; bu daha temiz ve FastAPI'nin önerdiği bir yaklaşımdır.
Modern lifespan Yaklaşımı
Daha yeni FastAPI, on_event yerine lifespan bağlam yöneticisini kullanır; bu yönetici hem başlatmayı hem de kapatmayı tek bir yerde ele alır.
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app):
app.state.model = joblib.load("model.joblib") # startup
yield
app.state.model = None # shutdown
app = FastAPI(lifespan=lifespan)Modeli Önceden Isıtma
Çerçeveler ilk çağrıda gerektiğinde başlatıldığından, ilk tahmin çoğu zaman yavaştır. Gerçek kullanıcının ilk isteğinin zaten hızlı olması için başlangıçta deneme tahminiyle modeli warm edin.
@app.on_event("startup")
def load_and_warm():
app.state.model = joblib.load("model.joblib")
app.state.model.predict([[0.0, 0.0, 0.0, 0.0]]) # warm-upÖn Isıtma Neden Önemli?
Ön ısıtma olmadan dağıtımdan sonraki ilk istek birçok kat daha yavaş olabilir; bu durum uç gecikmeye zarar verebilir ve sağlık kontrollerinin başarısız olmasına yol açabilir. Başlangıçta yapılan tek bir deneme çıkarımı, bu maliyeti kritik yolun dışında karşılar.
Bir Toplu Tahmin Uç Noktası
Bir çağrıda çok sayıda satır için tahmin yapmak, modeller bir toplu işlem üzerinde vektörleştirme yaptığı için çok sayıda tekil çağrıdan çok daha verimlidir. Bir özellik vektörleri listesi kabul edip bir tahminler listesi döndürün.
class BatchRequest(BaseModel):
items: list[list[float]]
@app.post("/predict/batch")
def predict_batch(req: BatchRequest, request: Request):
model = request.app.state.model
preds = model.predict(req.items)
return {"predictions": preds.tolist()}Tekil ve Toplu Karşılaştırması
- Tekil: tek girdi, çağrı başına en düşük gecikme, basit istemciler.
- Toplu: aynı anda çok sayıda girdi, çok daha yüksek aktarım hızı, çevrim dışı puanlama için ideal.
Her ikisini sunmak, gerçek zamanlı ve toplu kullanım senaryolarını kapsar.
Uç Noktalarda state İçinden Okuma
Her uç nokta, modeli yeniden yüklemeden paylaşılan modele request.app.state.model üzerinden erişir; böylece tüm istekler bellekteki tek bir örneği paylaşır.
Birleştirme
Üretime hazır bir kurulum için modeli lifespan/başlatma sırasında load and warm edin, app.state içinde saklayın ve state içinden okuyan hem tekil hem de toplu tahmin uç noktaları sunun. Bu, gecikmeyi en aza indirir ve aktarım hızını en üst düzeye çıkarır.
Hızlı Kontrol
Model sunma bilginizi sınayın.
Özet
Modeli startup/lifespan aracılığıyla bir kez yüklediniz, iş parçacığı güvenli yeniden kullanım için app.state içinde sakladınız, bir warm-up deneme tahmini eklediniz ve aktarım hızı için bir toplu uç nokta sundunuz. Sırada API'yi Docker ile paketleme var.
Sıkça Sorulan Sorular
“Makine Öğrenmesi Modellerini Yükleme ve Sunma” dersi ücretsiz mi?
Evet — “Makine Öğrenmesi Modellerini Yükleme ve Sunma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn AI with Python kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn AI with Python kursu toplamda 4 dersten oluşur.
“Makine Öğrenmesi Modellerini Yükleme ve Sunma” dersinde ne öğreneceğim?
Başlangıçta joblib/keras modelini yükleme, iş parçacığı güvenli çıkarım, toplu tahmin uç noktaları. Learn AI with Python ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn AI with Python öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn AI with Python, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Makine Öğrenmesi Modellerini Yükleme ve Sunma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn AI with Python dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn AI with Python dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Makine Öğrenmesi Mühendisleri için FastAPI Temelleri
- İstek ve Yanıt için Pydantic Şemaları
- Makine Öğrenmesi Modellerini Yükleme ve Sunma
- Model API'sini Docker ile Konteynerleştirme