Özel modellere genel bakış

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

  1. Yerel MLflow yerleşik türlerini veya pyfunc kullanarak modeli veya kodu MLflow formatında 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 bir model sunucu uç noktası 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. 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_requirements kullanı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