Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Model Sunma kullanan özel modeller için destek açıklanmaktadır. Desteklenen model günlüğü seçenekleri ve işlem türleri, kullanıma yönelik model bağımlılıklarının nasıl paketlendiği ve uç nokta oluşturma ve ölçeklendirmeye yönelik beklentiler hakkında ayrıntılar sağlar.
Özel modeller nedir?
Model Sunma, CPU veya GPU işlem kaynaklarını kullanarak herhangi bir Python modelini veya özel kodu üretim sınıfı API olarak dağıtabilir. Databricks bu tür modelleri özel modeller olarak ifade eder. Bu ML modelleri scikit-learn, XGBoost, PyTorch ve HuggingFace transformatörleri gibi standart ML kitaplıkları kullanılarak eğitilebilir ve herhangi bir Python kodu içerebilir.
Özel bir model dağıtmak için
- Yerel MLflow yerleşik türlerini veya pyfunc kullanarak modeli veya kodu MLflow formatında günlüğe kaydedin.
- Model günlüğe kaydedildikten sonra Unity Kataloğu'na (önerilir) veya çalışma alanı kayıt defterine kaydedin.
- Buradan, modelinizi dağıtmak ve sorgulamak için bir model sunucu uç noktası oluşturabilirsiniz.
Databricks'te özel modeller sunma hakkında eksiksiz bir öğretici için bkz. Model sunma öğreticisi.
Databricks, üretken yapay zeka uygulamaları için temel modellerin sunulmasını da destekler. Desteklenen modeller ve işlem teklifleri için Foundation Model API'leri ve Dış modeller'e bakın.
ML modellerini kaydet
ML modelinizi model sunumu için kaydetmek amacıyla farklı yöntemler vardır. Aşağıdaki listede desteklenen yöntemler ve örnekler özetlenmektedir.
Otomatik kaydetme Bu yöntem, ML için Databricks Runtime kullanılırken otomatik olarak etkinleştirilir.
import mlflow from sklearn.ensemble import RandomForestRegressor from sklearn.datasets import load_iris iris = load_iris() model = RandomForestRegressor() model.fit(iris.data, iris.target)MLflow'un yerleşik aromalı bileşenlerini kullanarak log tutma. Daha ayrıntılı denetim için modeli el ile günlüğe kaydetmek istiyorsanız bu yöntemi kullanabilirsiniz.
import mlflow from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_iris iris = load_iris() model = RandomForestClassifier() model.fit(iris.data, iris.target) with mlflow.start_run(): mlflow.sklearn.log_model(model, "random_forest_classifier")Özel günlük kaydı
pyfuncile. Bu yöntemi, rastgele python kodu modellerini dağıtmak veya modelinizle birlikte ek kod dağıtmak için kullanabilirsiniz.import mlflow import mlflow.pyfunc class Model(mlflow.pyfunc.PythonModel): def predict(self, context, model_input): return model_input * 2 with mlflow.start_run(): mlflow.pyfunc.log_model("custom_model", python_model=Model())
İmza ve giriş örnekleri
MLflow'a imza ve giriş örneği eklenmesi önerilir. Modelleri Unity Kataloğu'na kayıt altına almak için imzalar gereklidir.
Aşağıda bir imza örneği verilmiştir:
from mlflow.models.signature import infer_signature
signature = infer_signature(training_data, model.predict(training_data))
mlflow.sklearn.log_model(model, "model", signature=signature)
Aşağıda bir giriş örneği verilmiştir:
input_example = {"feature1": 0.5, "feature2": 3}
mlflow.sklearn.log_model(model, "model", input_example=input_example)
İşlem türü
Model Sunma, modelinizi dağıtmak için çeşitli CPU ve GPU seçenekleri sağlar. GPU ile dağıtım yaparken kodunuzun, çerçeveniz tarafından sağlanan yöntemleri kullanarak GPU üzerinde tahminlerin çalıştırılacağı şekilde ayarlandığından emin olmanız gerekir. MLflow, PyTorch ve Transformers yapılandırmalarıyla günlüğe kaydedilen modeller için bunu otomatik olarak yapar.
CPU_MEDIUM ve CPU_LARGE iş yükü türleri, aynı CPU donanımında her çalışan için daha fazla bellek elde etmek amacıyla eşzamanlılıktan ödün vermenize olanak tanır. Modelinizin standarttan CPU daha fazla belleğe ihtiyacı olduğunda bunları kullanın.
| İş yükü türü | GPU örneği | Memory |
|---|---|---|
CPU |
Eşzamanlılık başına 4 GB | |
CPU_MEDIUM |
Eşzamanlılık başına 8 GB | |
CPU_LARGE |
Eşzamanlılık başına 16 GB | |
GPU_SMALL |
1xT4 | Eşzamanlılık başına 16 GB |
GPU_LARGE |
1xA100 | Eşzamanlılık başına 80 GB |
GPU_LARGE_2 |
2xA100 | Eşzamanlılık başına 160 GB |
GPU_LARGE_4 |
4xA100 | Eşzamanlılık başına 320 GB |
Dağıtım kapsayıcısı ve bağımlılıkları
Dağıtım sırasında üretim sınıfı bir kapsayıcı oluşturulur ve uç nokta olarak dağıtılır. Bu kapsayıcı, MLflow modelinde otomatik olarak yakalanan veya belirtilen kitaplıkları içerir. Temel görüntü bazı sistem düzeyinde bağımlılıklar içerebilir, ancak uygulama düzeyi bağımlılıkların MLflow modelinizde açıkça belirtilmesi gerekir.
Tüm gerekli bağımlılıklar modele dahil değilse, dağıtım sırasında bağımlılık hatalarıyla karşılaşabilirsiniz. Model dağıtım sorunlarıyla karşılaştığınızda Databricks modeli yerel olarak test etmenizi önerir.
Paket ve kod bağımlılıkları
Dağıtımınıza özel veya kişisel kitaplıklar eklenebilir. Bkz. Model Sunma ile özel Python kitaplıklarını kullanma.
MLflow yerel aroma modelleri için gerekli paket bağımlılıkları otomatik olarak yakalanır.
Özel pyfunc modeller için bağımlılıklar açıkça eklenebilir. Loglama gereksinimleri ve en iyi yöntemler hakkında ayrıntılı bilgi için MLflow Modelleri belgelerine ve MLflow Python API referansına bakın.
Şunu kullanarak paket bağımlılıkları ekleyebilirsiniz:
Parametresi
pip_requirements:mlflow.sklearn.log_model(model, "sklearn-model", pip_requirements = ["scikit-learn", "numpy"])Parametresi
conda_env:conda_env = { 'channels': ['defaults'], 'dependencies': [ 'python=3.7.0', 'scikit-learn=0.21.3' ], 'name': 'mlflow-env' } mlflow.sklearn.log_model(model, "sklearn-model", conda_env = conda_env)Otomatik olarak yakalananın ötesindeki ek gereksinimleri eklemek için
extra_pip_requirementskullanın.mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements = ["sklearn_req"])
Kod bağımlılıklarınız varsa, bunlar kullanılarak code_pathbelirtilebilir.
mlflow.sklearn.log_model(model, "sklearn-model", code_path=["path/to/helper_functions.py"],)
Dağıtımdan önce bağımlılıkları doğrulama ve güncelleştirme hakkında bilgi için bkz. Model Sunma için dağıtım öncesi doğrulama.
Beklentiler ve sınırlamalar
Dikkat
Bu bölümdeki bilgiler, temel modellere veya dış modellere hizmet veren uç noktalar için geçerli değildir.
Aşağıdaki bölümlerde, Model Sunumunu kullanarak özel modeller sunmayla ilgili bilinen beklentiler ve sınırlamalar açıklanmaktadır.
Uç nokta oluşturma ve beklentileri güncelleştirme
- Dağıtım süresi: Yeni kaydedilen model sürümünü dağıtmak için modelin ve model ortamının paketlenmesi ve model uç noktasının sağlanması gerekir. Bu işlem yaklaşık 10 dakika sürebilir, ancak model karmaşıklığı, boyutu ve bağımlılıklarına bağlı olarak daha uzun sürebilir.
- Sıfır kapalı kalma süresi güncelleştirmeleri: Azure Databricks, mevcut uç nokta yapılandırmasını yenisi hazır olana kadar tutarak uç noktalarda sıfır kapalı kalma süresi güncelleştirmesi gerçekleştirir. Bunun yapılması, kullanımda olan uç noktaların kesinti riskini azaltır. Bu güncelleştirme işlemi sırasında, geçiş tamamlanana kadar hem eski hem de yeni uç nokta yapılandırmaları için faturalandırılırsınız.
- İstek zaman aşımı: Model hesaplaması 597 saniyeden uzun sürüyorsa istekler zaman aşımına uğrar.
Önemli
Databricks, mevcut Model Sunma uç noktaları üzerinde zaman zaman sıfır kapalı kalma sistem güncelleştirmeleri ve bakım gerçekleştirir. Bakım sırasında Databricks modelleri yeniden yükler. Bir model yeniden yüklenemezse, uç nokta güncelleştirmesi başarısız olarak işaretlenir ve mevcut uç nokta yapılandırması isteklere hizmet etmeye devam eder. Özelleştirilmiş modellerinizin sağlam olduğundan ve istediğiniz zaman yeniden yükleyebildiğinden emin olun.
Uç nokta ölçeklendirme beklentileri
Hizmet uç noktaları, trafiğe ve sağlanan eşzamanlılık birimlerinin kapasitesine göre otomatik olarak ölçeklendirilir.
- Sağlanan eşzamanlılık: Sistemin işleyebileceği en fazla paralel istek sayısı. Sağlanan eşzamanlılık = saniye başına sorgular (QPS) * model yürütme süresi (s) formülünü kullanarak gerekli eşzamanlılığı tahmin edin. Eşzamanlılık yapılandırmanızı doğrulamak için bkz. Uç noktaları sunma için yük testi.
- Ölçeklendirme davranışı: Uç noktaların ölçeği artan trafikle neredeyse hemen artar ve azaltılan trafikle eşleşecek şekilde beş dakikada bir azaltılır. Düğümler, model indirildikten ve sistem durumu denetimlerini geçtikten sonra trafiğe hizmet etmeye hazır olur; model boyutu ve yükleme süresi, bunun ne kadar süreceğini belirler.
- Sıfıra ölçeklendirin: Sıfıra ölçeklendir, uç noktaların 30 dakika etkinlik dışı kaldıktan sonra ölçeği sıfıra düşürmesini sağlayan isteğe bağlı bir özelliktir. Sıfıra ölçeklendirdikten sonraki ilk istek, daha yüksek gecikme süresine yol açan bir "soğuk başlangıç" deneyimi yaşar. Sıfırdan ölçeği artırma işlemi genellikle 10-20 saniye sürer, ancak bazen dakikalar sürebilir. Sıfır gecikme süresinden büyük ölçekte SLA yoktur.
- Yol iyileştirme: Yüksek QPS ve düşük gecikme süreli kullanım örnekleri için yol iyileştirme , performansı geliştirmek için en uygun ve önerilen seçenektir.
- Hızlı dağıtımlar: Daha hızlı uç nokta dağıtım hızı için hızlı dağıtımları kullanın.
Uyarı
Tutarlı çalışma süresi veya garantili yanıt süreleri gerektiren üretim iş yükleri için sıfıra ölçekleme kullanılmamalıdır. Gecikme süresine duyarlı uygulamalar veya sürekli kullanılabilirlik gerektiren uç noktalar için ölçeği sıfıra devre dışı bırakın.
GPU iş yükü sınırlamaları
Gpu iş yükleriyle uç noktalara hizmet sunma sınırlamaları aşağıdadır:
- GPU sunma için kapsayıcı görüntüsü oluşturma işlemi, model boyutu ve GPU'da sunulan modeller için artan yükleme gereksinimleri nedeniyle CPU sunma için görüntü oluşturma işleminden daha uzun sürer.
- Çok büyük modelleri dağıtırken, kapsayıcı derlemesi ve model dağıtımı 60 dakikalık süreyi aşarsa dağıtım işlemi zaman aşımına uğrayabilir veya depolama sınırlamaları nedeniyle kapsayıcı derlemesi "Cihazda yer kalmadı" hatasıyla başarısız olabilir. Büyük dil modelleri için bunun yerine Temel Model API'lerini kullanın.
- GPU sunma için otomatik ölçeklendirme, CPU sunma işleminden daha uzun sürer.
- Gpu kapasitesi sıfıra ölçeklendirilirken garantilanmaz. GPU uç noktaları, sıfıra ölçeklendirildikten sonra ilk istek için fazladan yüksek gecikme süresi bekleyebilir.
Eski modeller için Anaconda lisanslama bildirimi
Dikkat
Bu bölüm yalnızca MLflow v1.17 veya önceki sürümlerle (Databricks Runtime 8.3 ML veya öncesi) günlüğe kaydedilen modeller için geçerlidir. Daha yeni bir sürüm kullanıyorsanız bu bölümü atlayabilirsiniz.
Aşağıdaki bildirim, eski modellerle Anaconda kullanan müşterilere yöneliktir.
Önemli
Anaconda Inc. anaconda.org kanalları için hizmet koşullarını güncelleştirdi. Yeni hizmet koşullarına bağlı olarak, Anaconda'nın paketleme ve dağıtımına güveniyorsanız ticari lisansa ihtiyacınız olabilir. Daha fazla bilgi için bkz. Anaconda Commercial Edition SSS . Herhangi bir Anaconda kanalını kullanımınız, hizmet koşullarına tabidir.
v1.18'den (Databricks Runtime 8.3 ML veya öncesi) önce günlüğe kaydedilen MLflow modelleri, varsayılan olarak bağımlılık olarak conda kanalıyla (defaults) günlüğe kaydediliyordu. Bu lisans değişikliği nedeniyle Databricks, MLflow v1.18 ve üstü kullanılarak günlüğe kaydedilen modeller için defaults kanalının kullanımını durdurdu. Günlüğe kaydedilen varsayılan kanal, conda-forgetopluluk tarafından yönetilen https://conda-forge.org/öğesine işaret eden şeklindedir.
MLflow v1.18'den önce kanalı modelin conda ortamından dışlamadan defaults bir modeli günlüğe kaydetmişseniz, bu modelin defaults kanala yönelik olarak amaçlamadığınız bir bağımlılığı olabilir.
Modelin bu bağımlılıkta olup olmadığını el ile onaylamak için, günlüğe kaydedilen modelle paketlenmiş dosyadaki channel değeri inceleyebilirsinizconda.yaml. Örneğin, conda.yaml için defaults kanal bağımlılığı aşağıdaki gibi görünebilir:
channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
- mlflow
- scikit-learn==0.23.2
- cloudpickle==1.6.0
name: mlflow-env
Databricks, Anaconda ile olan ilişkiniz kapsamında Anaconda deposunu kullanarak modellerinizle etkileşim kurmanıza izin verilip verilmeyeceğini belirleyemediğinden, Databricks müşterilerini herhangi bir değişiklik yapmaya zorlamaz. Databricks'in kullanımı aracılığıyla Anaconda.com depoyu kullanımınıza Anaconda'nın koşulları altında izin verilirse herhangi bir işlem yapmanız gerekmez.
Modelin ortamında kullanılan kanalı değiştirmek isterseniz, modeli yeni conda.yaml ile model siciline yeniden kaydedebilirsiniz. Kanalı parametresinde conda_envlog_model()belirterek bunu yapabilirsiniz.
API hakkında log_model() daha fazla bilgi için, üzerinde çalıştığınız model çeşidine ilişkin MLflow belgelerine (örneğin, scikit-learn için log_model) bakın.
Dosyalar hakkında conda.yaml daha fazla bilgi için MLflow belgelerine bakın.
Ek kaynaklar
- Uç noktaları sunan özel model oluşturma
- Özel modeller için sorgu sunma uç noktaları
- Model Servisi için Hata Ayıklama Kılavuzu
- Model Sunma ile özel Python kitaplıkları kullanma
- Model Sunma için özel nesneleri paketleme
- Model Sunma ile Python kodu dağıtma
- Hizmet uç noktaları üzerinde yol iyileştirme
- Uç noktalara hizmet veren model için hızlı dağıtımlar
- Model sunum uç noktalarındaki kaynaklara erişimi yapılandırma