Özel modelleri dağıtma
Bu makalede Databricks Model Sunma kullanarak özel modeldağıtma desteği açıklanmaktadır. Ayrıca desteklenen model günlüğü seçenekleri ve işlem türleri, sunum için model bağımlılıklarının nasıl paketlendiği ve uç nokta oluşturma ve ölçeklendirme hakkında ayrıntılar sağlar.
Özel modeller nedir?
Model Sunma, herhangi bir Python modelini ü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 model dağıtmak için
- Yerel MLflow yerleşik tatları veya pyfunc kullanarak modeli veya kodu MLflow biçiminde 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 uç noktaya hizmet veren bir model oluşturabilirsiniz.
- Bkz. Uç noktaları sunan özel model oluşturma
- Bkz. Özel modeller için uç noktaları sunan sorgu.
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. Bkz. Desteklenen modeller ve işlem teklifleri için Temel Model API'leri ve Dış modeller.
Önemli
Anaconda'ya güveniyorsanız ek bilgi için hizmet koşulları bildirimini gözden geçirin.
Log ML modelleri
Model sunma için ML modelinizi günlüğe kaydetmek için farklı yöntemler vardır. Aşağıdaki listede desteklenen yöntemler ve örnekler özetlenmektedir.
Otomatik Kaydetme Ml için Databricks Runtime kullanılırken bu yöntem 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 tatlarını kullanarak günlüğe kaydetme. 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")
ile
pyfunc
özel günlük kaydı. 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 günlüğe kaydetmek 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ü
Not
GPU modeli hizmeti Genel Önizleme aşamasındadır.
Databricks 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'da tahminlerin çalıştırılacağı şekilde ayarlandığından emin olmak önemlidir. MLflow, PyTorch veya Transformers aromalarıyla günlüğe kaydedilen modeller için bunu otomatik olarak yapar.
iş yükü türü | GPU örneği | bellek |
---|---|---|
CPU |
Eşzamanlılık başına 4 GB | |
GPU_SMALL |
1xT4 | 16 GB |
GPU_LARGE |
1xA100 | 80 GB |
GPU_LARGE_2 |
2xA100 | 160 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.
Kapsayıcıya hizmet veren model önceden yüklenmiş bağımlılıklar içermez ve bu da modele tüm gerekli bağımlılıkların dahil edilmemesi durumunda bağımlılık hatalarına yol açabilir. 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 özel 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.
Ş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 yakalananların ötesinde ek gereksinimler eklemek için kullanın
extra_pip_requirements
.mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements = ["sklearn_req"])
Kod bağımlılıklarınız varsa, bunlar kullanılarak code_path
belirtilebilir.
mlflow.sklearn.log_model(model, "sklearn-model", code_path=["path/to/helper_functions.py"],)
Bağımlılık doğrulama
Özel bir MLflow modeli dağıtmadan önce, modelin kullanıma sunulduğunu doğrulamak yararlı olur. MLflow, hem dağıtım ortamını simüle eden hem de değiştirilen bağımlılıkların test edilmesini sağlayan model yapıtının doğrulanmasına olanak tanıyan bir API sağlar.
MLflow Python API'si ve MLflow CLI'sı iki dağıtım öncesi doğrulama API'sivardır.
Bu API'lerden birini kullanarak aşağıdakileri belirtebilirsiniz.
- Model
model_uri
sunma için dağıtılan modelin. - Aşağıdakilerden biri:
input_data
Modelin çağrısı içinmlflow.pyfunc.PyFuncModel.predict()
beklenen biçimde.input_path
çağrısı içinpredict
yüklenecek ve kullanılacak giriş verilerini içeren bir dosya tanımlayan.
- in
content_type
csv
veyajson
biçimi. - Tahminleri bir dosyaya yazmak için isteğe bağlı
output_path
. Bu parametreyi atlarsanız, tahminler olarakstdout
yazdırılır. - Hizmet vermek üzere ortamı oluşturmak için kullanılan bir ortam yöneticisi
env_manager
:- Varsayılan değer:
virtualenv
. Doğrulama için önerilir. local
kullanılabilir, ancak doğrulamaya yönelik olası hatalara açıktır. Genellikle yalnızca hızlı hata ayıklama için kullanılır.
- Varsayılan değer:
- kullanarak
install_mlflow
ortamınızdaki geçerli MLflow sürümünün sanal ortamıyla yüklenip yüklenmeyeceği. Bu ayar varsayılan olarak olarak ayarlanırFalse
. - Sorun giderme veya hata ayıklama için paket bağımlılıklarının farklı sürümlerini güncelleştirme ve test etme. Bunu geçersiz kılma bağımsız değişkenini
pip_requirements_override
kullanarak dize bağımlılığı geçersiz kılmalarının veya eklemelerinin listesi olarak belirtebilirsiniz.
Örneğin:
import mlflow
run_id = "..."
model_uri = f"runs:/{run_id}/model"
mlflow.models.predict(
model_uri=model_uri,
input_data={"col1": 34.2, "col2": 11.2, "col3": "green"},
content_type="json",
env_manager="virtualenv",
install_mlflow=False,
pip_requirements_override=["pillow==10.3.0", "scipy==1.13.0"],
)
Bağımlılık güncelleştirmeleri
Günlüğe kaydedilen modelle belirtilen bağımlılıklarla ilgili herhangi bir sorun varsa, başka bir modeli günlüğe kaydetmek zorunda kalmadan MLflow CLI'sini veya mlflow.models.model.update_model_requirements()
th MLflow Python API'sini kullanarak gereksinimleri güncelleştirebilirsiniz.
Aşağıdaki örnekte, günlüğe kaydedilen modelin pip_requirements.txt
yerinde nasıl güncelleştirilmiş olduğu gösterilmektedir.
Mevcut tanımları belirtilen paket sürümleriyle güncelleştirebilir veya var olmayan gereksinimleri dosyaya pip_requirements.txt
ekleyebilirsiniz. Bu dosya, belirtilen model_uri
konumdaki MLflow modeli yapıtı içindedir.
from mlflow.models.model import update_model_requirements
update_model_requirements(
model_uri=model_uri,
operation="add",
requirement_list=["pillow==10.2.0", "scipy==1.12.0"],
)
Beklentiler ve sınırlamalar
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
Not
Bu bölümdeki bilgiler, temel modellere hizmet veren uç noktalar için geçerli değildir.
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.
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.
Model hesaplaması 120 saniyeden uzun sürerse istekler zaman aşımına uğrar. Model hesaplamanızın 120 saniyeden uzun süreceğini düşünüyorsanız Azure Databricks hesap ekibinize ulaşın.
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 ve bir modelin yeniden yüklenememesi durumunda uç noktayı Başarısız olarak işaretler. Özelleştirilmiş modellerinizin sağlam olduğundan ve istediğiniz zaman yeniden yükleyebildiğinden emin olun.
Uç nokta ölçeklendirme beklentileri
Not
Bu bölümdeki bilgiler, temel modellere hizmet veren uç noktalar için geçerli değildir.
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.
- Ö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.
- Sıfıra ölçeklendirin: Uç noktalar 30 dakika etkinlik dışı kaldıktan sonra ölçeği sıfıra düşürebilir. 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. Gecikme süresine duyarlı uygulamalar için bu özelliği etkili bir şekilde yönetme stratejilerini göz önünde bulundurun.
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ı derleme ve model dağıtımı 60 dakikalık süreyi aşarsa dağıtım işlemi zaman aşımına uyabilir. Bu durumda, işlemin yeniden denenmesi modeli başarıyla dağıtmalıdır.
- 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.
- Bu işlev içinde
northcentralus
kullanılamaz.
Anaconda lisans güncelleştirmesi
Aşağıdaki bildirim, Anaconda kullanan müşteriler içindir.
Ö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(Databricks Runtime 8.3 ML veya öncesi) öncesinde günlüğe kaydedilen MLflow modelleri varsayılan olarak conda defaults
kanalıyla (https://repo.anaconda.com/pkgs/) bağımlılık olarak günlüğe kaydedilir. Bu lisans değişikliği nedeniyle Databricks, MLflow v1.18 ve üzeri kullanılarak günlüğe kaydedilen modeller için kanalın defaults
kullanımını durdurdu. Günlüğe kaydedilen varsayılan kanal, conda-forge
topluluk 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 conda.yaml
değeri inceleyebilirsinizchannel
. Örneğin, kanal bağımlılığı olan bir defaults
model conda.yaml
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
bir ile model kayıt defterine yeniden kaydedebilirsiniz. Kanalı parametresinde conda_env
log_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
- Öğretici: Özel model dağıtma ve sorgulama
- Uç noktaları sunan özel model oluşturma
- Özel modeller için sorgu sunma uç noktaları
- Model Sunma ile özel Python kitaplıkları kullanma
- Model Sunma için özel yapıtları paketleme
- Model Sunma ile Python kodu dağıtma
- Model Sunma uç noktasına birden çok model sunma
- Model sunum uç noktalarındaki kaynaklara erişimi yapılandırma