Azure Machine Learning ile model eğitimi ve yayına alma rehberi
Beceri rehberi

Azure Machine Learning ile model eğitimi ve yayına alma rehberi

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Azure Machine Learning'de model kaydı, puanlama betiği, yönetilen çevrimiçi uç nokta, yerel sınama, bulut dağıtımı ve mavi/yeşil güvenli geçiş adımları.

Eğitimden dağıtıma: akışın büyük resmi

Azure Machine Learning'de bir modelin yayına alınması, eğitilmiş model dosyasının gerçek zamanlı çağrılabilen bir web servisine dönüştürülmesidir. Akış kabaca şudur: modeli bir çalışma alanında eğitip kaydedersiniz, ona çalışma ortamını ve puanlama kodunu eşlersiniz, sonra yönetilen bir çevrimiçi uç noktaya (managed online endpoint) dağıtırsınız ve istekleri bu uç nokta üzerinden gönderirsiniz.

Bu akışın bütün parçaları birbirine bağlıdır: model dosyası ile ortamın bağımlılıkları uyuşmazsa servis ayağa kalkmaz; puanlama betiği modelin beklediği girdi biçimini bilmiyorsa sonuç hatalı çıkar. Bu yüzden dağıtımdan önce her parçayı ayrı ayrı doğrulamak, hataları bulmayı kolaylaştırır.

Model eğitimi ve kaydı

Eğitim, çalışma alanındaki işlem kaynağında bir betik veya iş (job) olarak çalıştırılır; deney takibi için metrikleri, parametreleri ve çıktıları kaydedersiniz. Böylece bir modelin hangi veriyle, hangi ayarlarla üretildiği sonradan izlenebilir. MLflow ile günlükleme, Azure Machine Learning ile birlikte kullanılabilen yaygın bir yoldur.

Eğitim bittiğinde modeli çalışma alanına sürümlü bir varlık olarak kaydedin. CLI ile model tanımı bir YAML dosyasında verilir ve kayıt komutu çalıştırılır; Python SDK ile aynı işlem model nesnesi oluşturarak yapılır. Kayıtlı model, dağıtım tanımında ad ve sürümüyle referans verilebilen sabit bir varlıktır. Bu, yeniden üretilebilirlik açısından önemlidir: dağıtımda dosya yolu yerine kayıtlı model kullanmak, kimin neyi ne zaman yayına aldığını izlenebilir kılar.

Puanlama betiği: init ve run

Puanlama betiği, modelin servis olarak nasıl çağrılacağını tanımlar ve belirli fonksiyonlar içermelidir. Bunlar init ve run fonksiyonlarıdır. init fonksiyonu, kap (container) başlatıldığında bir kez çalışır ve modeli belleğe yükler. run fonksiyonu ise her istekte çağrılır; gelen girdiyi alır, modele verir ve sonucu döndürür. Model dosyasının yolu, dağıtım sırasında tanımlanan AZUREML_MODEL_DIR ortam değişkeniyle bulunur.

Örnek betik (scikit-learn regresyon modeli için):

import os, json, joblib, numpy

def init(): global model model_path = os.path.join(os.getenv("AZUREML_MODEL_DIR"), "model", "model.pkl") model = joblib.load(model_path)

def run(raw_data): data = json.loads(raw_data)["data"] return model.predict(numpy.array(data)).tolist()

Girdi biçimini (örneğin "data" anahtarı altında bir sayı listesi) baştan sözleşme olarak sabitleyin; istemci ve betik aynı biçime göre yazılırsa entegrasyon hataları azalır. Modelin yüklenmesi her istekte değil yalnızca init içinde yapılmalıdır, aksi halde her çağrı yavaşlar.

Uç nokta ve dağıtımı tanımlamak

Azure Machine Learning'de uç nokta ve dağıtım ayrı kavramlardır. Uç nokta, istemcinin çağırdığı kararlı adrestir; ad, bölge içinde benzersiz olmalı ve bir kimlik doğrulama modu (anahtar, Azure Machine Learning belirteci ya da Microsoft Entra belirteci) belirlemelidir. Dağıtım ise modeli barındıran kaynaklar kümesidir: model, kod yolu, puanlama betiği, ortam, örnek türü ve örnek sayısı. Tek bir uç noktanın altında birden çok dağıtım olabilir.

En kısa yol, CLI ile YAML tanımları vermektir. Uç noktanın YAML'ında ad ve kimlik doğrulama modu (örneğin anahtar), dağıtımın YAML'ında ise model, kod yapılandırması (code_configuration altında kod yolu ve puanlama betiği), ortam, örnek türü ve örnek sayısı yer alır. Üretim iş yükleri için tek bir örnek yerine birden fazla örnek kullanmak ve örnek sayısını bakım için ayrılan ek kotayı düşünerek planlamak gerekir; ayrıntı Microsoft belgelerinde yer alır.

Önce yerelde, sonra bulutta

Dağıtımı doğrudan buluta çıkarmak yerine önce yerel uç noktada sınayın. CLI ve Python SDK, yerel uç nokta ve yerel dağıtım oluşturmayı destekler (Docker gerekir). Komutlar yerel bayrağıyla aynıdır:

az ml online-endpoint create --local -n <uc-nokta-adi> -f endpoint.yml az ml online-deployment create --local -n blue --endpoint <uc-nokta-adi> -f blue-deployment.yml az ml online-endpoint invoke --local --name <uc-nokta-adi> --request-file sample-request.json az ml online-deployment get-logs --local -n blue --endpoint <uc-nokta-adi>

Yerelde bağımlılık eksikliği, yanlış dosya yolu ya da girdi biçimi hatası hızlıca ortaya çıkar. Yerel uç noktalar trafik kuralları, kimlik doğrulama ve sağlık yoklaması ayarlarını desteklemez ve uç nokta başına tek dağıtımla sınırlıdır; bu nedenle yerel sınama yalnızca kod ve ortam doğrulamasıdır. Betiğiniz temel hataları geçtikten sonra bulut dağıtımına geçin.

Bulutta dağıtım, çağırma ve güncelleme

Bulutta dağıtım, yerel komutların bayraksız halidir. Uç noktayı oluşturur, ardından dağıtımı oluşturur ve ilk dağıtıma trafiğin tamamını yönlendirirsiniz:

az ml online-endpoint create --name <uc-nokta-adi> -f endpoint.yml az ml online-deployment create --name blue --endpoint <uc-nokta-adi> -f blue-deployment.yml --all-traffic az ml online-endpoint invoke --name <uc-nokta-adi> --request-file sample-request.json

Kod, model ya da ortam değiştiğinde YAML'ı güncelleyip az ml online-deployment update komutunu çalıştırırsınız. Maliyet açısından önemli bir uyarı: yönetilen uç noktada dağıtıma atanan sanal makineler sürekli maliyet doğurur; sınama bittikten sonra az ml online-endpoint delete ile uç noktayı silmeyi unutmayın.

İstemci tarafında uç nokta adresine ve kimlik doğrulama anahtarına ihtiyaç duyulur. Bu sırlar kaynak koduna ya da paylaşılan dosyalara yazılmamalı; gizli anahtar deposundan okunmalıdır.

Güvenli geçiş: mavi/yeşil dağıtım ve trafik yansıtma

Yeni bir model sürümünü doğrudan tüm trafiğe açmak risklidir. Uç noktada yeni bir dağıtım (örneğin green) oluşturup trafiğin küçük bir bölümünü ona yönlendirmek mavi/yeşil stratejisidir; sorun çıkmazsa yönlendirme oranı artırılır, çıkarsa mavi dağıtıma dönülür. Trafik yansıtma (mirroring) ise istekleri yeni dağıtıma kopyalar ama yanıtı istemciye döndürmez; metrikler ve günlükler kaydedilir, böylece canlı veriyle sessiz sınama yapılır. Belirli bir isteği doğrudan bir dağıtıma yönlendirmek için azureml-model-deployment başlığı kullanılabilir.

Bu mekanizma eski ve yeni modelin aynı gerçek isteklerdeki tutarlılığını karşılaştırmayı mümkün kılar. Üretimde izleme için Azure Monitor entegrasyonuyla gecikme, istek sayısı ve hata oranını izleyin; model kalitesini ayrıca iş metriklerine bağlayın.

Sık yapılan hatalar ve Mindset bağlamı

En sık hatalar şunlardır: ortamın bağımlılıklarını eğitimdeki sürümlerle eşitlememek, modeli her istekte yeniden yüklemek, girdi biçimini belgelememek, doğrudan buluta çıkıp yerelde sınamamak, uç noktayı sınamadan sonra silmemek ve kimlik doğrulama anahtarını koda yazmak. Bir de kayıtlı modeli ya da kapsayıcı imajını sildiğinizde, onlara bağlı dağıtımların yeniden oluşturma sırasında hata verebileceğini unutmayın.

Azure Machine Learning eğitimi platform ve çalışma ortamı, pipeline tasarımı, model kayıt ve dağıtım süreçleri, sorumlu yapay zeka ve açıklanabilirlik, MLOps ve CI/CD entegrasyonu başlıklarını içerir. Veri bilimciler, makine öğrenmesi mühendisleri ve MLOps ekipleri için uygundur; kurumsal ekiplerde modeli kodlayan kişi ile dağıtımı üstlenen kişinin aynı kayıt ve dağıtım standardını paylaşmasını destekler.

İlgili Mindset programı

Azure Machine Learning

Sık sorulanlar

Sık sorulan sorular

Azure Machine Learning'de yönetilen çevrimiçi uç nokta ile Kubernetes uç noktası arasındaki fark nedir?

Yönetilen uç noktada Azure işlem kaynağını, ölçeklemeyi, işletim sistemi güncellemelerini ve izlemeyi sizin yerinize yönetir; Microsoft bunu önerilen yol olarak sunar. Kubernetes uç noktasında kendi kümenizi siz yönetirsiniz. Trafik yansıtma yönetilen uç noktada desteklenir, Kubernetes uç noktasında desteklenmez.

Puanlama betiği şart mı?

MLflow veya Triton gibi desteklenen biçimlerde kodsuz dağıtım yapılabilir ve puanlama betiği otomatik üretilir; AutoML modelleri de kodsuz dağıtılabilir. Özel girdi işleme ya da özel mantık gerekiyorsa kendi puanlama betiğinizi (init ve run fonksiyonlarıyla) sağlarsınız.

Dağıtımı yerelde test etmek için ne gerekir?

Docker Engine'in kurulu ve çalışır olması gerekir. CLI veya Python SDK ile yerel uç nokta ve dağıtım oluşturulur. Yerel uç noktalar trafik kuralı, kimlik doğrulama ve sağlık yoklaması ayarlarını desteklemez, uç nokta başına tek dağıtımla sınırlıdır; yalnızca kod ve ortam doğrulaması içindir.

Yeni model sürümünü canlıya risksiz nasıl alırım?

Aynı uç noktaya yeni bir dağıtım ekleyin ve trafiğin küçük bir bölümünü ona yönlendirin; sorun yoksa oranı kademeli artırın. Alternatif olarak trafik yansıtma ile yeni dağıtıma canlı istekleri kopyalayıp yanıtı istemciye döndürmeden metrikleri inceleyin. Sorun çıkarsa trafiği eski dağıtıma geri verin.

Dağıtım maliyeti nasıl kontrol edilir?

Yönetilen uç noktada ek bir hizmet bedeli yoktur; dağıtıma atanan işlem ve ağ kaynakları ücretlendirilir. Sınama uç noktalarını işiniz bitince silin, gereksiz büyük örnek türü seçmeyin ve otomatik ölçeklemeyi yük desenine göre ayarlayın. Maliyeti uç nokta ve dağıtım düzeyinde izlemek mümkündür.

Azure ML ile Model Dağıtımı: Uç Nokta Adımları