Share via


Ö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

  1. Yerel MLflow yerleşik tatları veya pyfunc kullanarak modeli veya kodu MLflow biçiminde günlüğe kaydedin.
  2. Model günlüğe kaydedildikten sonra Unity Kataloğu'na (önerilir) veya çalışma alanı kayıt defterine kaydedin.
  3. Buradan, modelinizi dağıtmak ve sorgulamak için uç noktaya hizmet veren bir model oluşturabilirsiniz.
    1. Bkz. Uç noktaları sunan özel model oluşturma
    2. 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_pathbelirtilebilir.

  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çin mlflow.pyfunc.PyFuncModel.predict() beklenen biçimde.
    • input_path çağrısı için predictyüklenecek ve kullanılacak giriş verilerini içeren bir dosya tanımlayan.
  • in content_typecsv veya json biçimi.
  • Tahminleri bir dosyaya yazmak için isteğe bağlı output_path . Bu parametreyi atlarsanız, tahminler olarak stdoutyazdı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.
  • kullanarak install_mlflowortamı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ır False.
  • 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_overridekullanarak 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 northcentraluskullanı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-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 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.yamlbir ile model kayıt defterine 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