Aracılığıyla paylaş


Özel modellere genel bakış

Bu makalede Mozaik AI 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 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 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. Desteklenen modeller ve işlem teklifleri için Foundation Model API'leri ve dış modelleri .

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 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 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ü

Mozaik AI 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 veya Transformers aromalarıyla günlüğe kaydedilen modeller için bunu otomatik olarak yapar.

İş yükü türü GPU örneği Memory
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
GPU_LARGE_4 4xA100 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 ö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. 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 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"],)

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

Not

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ı 297 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.
  • 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.
  • Sunucusuz iyileştirilmiş dağıtımlar: Daha hızlı uç nokta dağıtım hızı için sunucusuz iyileştirilmiş 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

Not

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 ü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 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