MLflow modellerini günlüğe kaydetme, yükleme, kaydetme ve dağıtma

MLflow Modeli , makine öğrenmesi modellerini paketlemek için apache Spark üzerinde toplu çıkarım veya REST API aracılığıyla gerçek zamanlı hizmet sunma gibi çeşitli aşağı akış araçlarında kullanılabilen standart bir biçimdir. biçimi, modeli farklı model sunma ve çıkarım platformları tarafından anlaşılabilen farklı türlerde (python işlevi, pytorch, sklearn vb.) kaydetmenize olanak tanıyan bir kural tanımlar.

Modelleri günlüğe kaydetme ve yükleme

Bir modeli günlüğe kaydettiğinizde, MLflow otomatik olarak günlükleri ve conda.yaml dosyaları kaydederrequirements.txt. Model geliştirme ortamını yeniden oluşturmak ve (önerilen) veya condakullanarak virtualenv bağımlılıkları yeniden yüklemek için bu dosyaları kullanabilirsiniz.

Ö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.

API komutları

Modeli MLflow izleme sunucusuna kaydetmek için kullanın mlflow.<model-type>.log_model(model, ...).

Çıkarım veya daha fazla geliştirme için daha önce günlüğe kaydedilmiş bir modeli yüklemek için kullanın mlflow.<model-type>.load_model(modelpath); burada modelpath aşağıdakilerden biridir:

  • bir run-relative yolu (örneğin runs:/{run_id}/{model-path})
  • DBFS yolu
  • kayıtlı bir model yolu (örneğin models:/{model_name}/{model_stage}).

MLflow modellerini yükleme seçeneklerinin tam listesi için MLflow belgelerindeki Yapıtlara Başvurma bölümüne bakın.

Python MLflow modellerinde, modeli genel bir Python işlevi olarak yüklemek için başka bir seçenek de kullanılır mlflow.pyfunc.load_model() . Modeli yüklemek ve veri puanını almak için aşağıdaki kod parçacığını kullanabilirsiniz.

model = mlflow.pyfunc.load_model(model_path)
model.predict(model_input)

Alternatif olarak, modeli bir Spark kümesinde puanlama için kullanmak üzere Apache Spark UDF olarak dışarı aktarabilirsiniz; toplu iş olarak veya gerçek zamanlı Spark Akış işi olarak.

# load input data table as a Spark DataFrame
input_data = spark.table(input_table_name)
model_udf = mlflow.pyfunc.spark_udf(spark, model_path)
df = input_data.withColumn("prediction", model_udf())

Günlük modeli bağımlılıkları

Modeli doğru bir şekilde yüklemek için, model bağımlılıklarının not defteri ortamına doğru sürümlerle yüklendiğinden emin olmanız gerekir. Databricks Runtime 10.5 ML ve üzerinde, MLflow geçerli ortam ile modelin bağımlılıkları arasında uyuşmazlık algılanırsa sizi uyarır.

Model bağımlılıklarını geri yüklemeyi basitleştirmeye yönelik ek işlevler Databricks Runtime 11.0 ML ve üzeri sürümlerine dahildir. Databricks Runtime 11.0 ML ve üzeri sürümlerde, aroma modelleri için pyfunc model bağımlılıklarını almak ve indirmek için çağrısı mlflow.pyfunc.get_model_dependencies yapabilirsiniz. Bu işlev, kullanarak yükleyebileceğiniz %pip install <file-path>bağımlılıklar dosyasının yolunu döndürür. Bir modeli PySpark UDF olarak yüklediğinizde, çağrısında mlflow.pyfunc.spark_udf belirtinenv_manager="virtualenv". Bu, PySpark UDF bağlamında model bağımlılıklarını geri yükler ve dış ortamı etkilemez.

Bu işlevi Databricks Runtime 10.5 veya altında MLflow sürüm 1.25.0 veya üzerini el ile yükleyerek de kullanabilirsiniz:

%pip install "mlflow>=1.25.0"

Model bağımlılıklarını (Python ve Python olmayan) ve yapıtları günlüğe kaydetme hakkında ek bilgi için bkz . Model bağımlılıklarını günlüğe kaydetme.

Model sunma için model bağımlılıklarını ve özel yapıtları günlüğe kaydetmeyi öğrenin:

MLflow kullanıcı arabiriminde otomatik olarak oluşturulan kod parçacıkları

Azure Databricks not defterindeki bir modeli günlüğe kaydettiğinizde, Azure Databricks modeli yüklemek ve çalıştırmak için kopyalayıp kullanabileceğiniz kod parçacıklarını otomatik olarak oluşturur. Bu kod parçacıklarını görüntülemek için:

  1. Modeli oluşturan çalıştırmanın Çalıştırmalar ekranına gidin. (Bkz. Çalıştırmalar ekranını görüntülemeye yönelik not defteri denemesini görüntüleyin.)
  2. Yapıtlar bölümüne kaydırın.
  3. Günlüğe kaydedilen modelin adına tıklayın. Sağ tarafta, günlüğe kaydedilen modeli yüklemek ve Spark veya pandas DataFrames üzerinde tahminlerde bulunmak için kullanabileceğiniz kodu gösteren bir panel açılır.

Artifact panel code snippets

Örnekler

Günlük modeli örnekleri için Bkz . Makine öğrenmesi eğitim çalıştırmalarını izleme örnekleri. Çıkarım için günlüğe kaydedilen modeli yükleme örneği için Bkz . Model çıkarımı örneği.

Modelleri Model Kayıt Defteri'ne kaydetme

MLflow Modellerinin tüm yaşam döngüsünü yönetmek için kullanıcı arabirimi ve API kümesi sağlayan merkezi bir model deposu olan MLflow Model Kayıt Defteri'ne modelleri kaydedebilirsiniz. Databricks Unity Kataloğu'ndaki modelleri yönetmek için Model Kayıt Defteri'ni kullanma yönergeleri için bkz . Unity Kataloğu'nda model yaşam döngüsünü yönetme. Çalışma Alanı Modeli Kayıt Defteri'ni kullanmak için bkz . Çalışma Alanı Modeli Kayıt Defteri'ni kullanarak model yaşam döngüsünü yönetme.

API kullanarak model kaydetmek için kullanın mlflow.register_model("runs:/{run_id}/{model-path}", "{registered-model-name}").

Modelleri DBFS'ye kaydetme

Modeli yerel olarak kaydetmek için kullanın mlflow.<model-type>.save_model(model, modelpath). modelpath bir DBFS yolu olmalıdır. Örneğin, proje çalışmanızı depolamak için DBFS konumu dbfs:/my_project_models kullanıyorsanız model yolunu /dbfs/my_project_modelskullanmanız gerekir:

modelpath = "/dbfs/my_project_models/model-%f-%f" % (alpha, l1_ratio)
mlflow.sklearn.save_model(lr, modelpath)

MLlib modellerinde ML İşlem Hatları'nı kullanın.

Model yapıtlarını indirme

Çeşitli API'lere sahip kayıtlı bir model için günlüğe kaydedilen model yapıtlarını (model dosyaları, çizimler ve ölçümler gibi) indirebilirsiniz.

Python API örneği:

from mlflow.store.artifact.models_artifact_repo import ModelsArtifactRepository

model_uri = MlflowClient.get_model_version_download_uri(model_name, model_version)
ModelsArtifactRepository(model_uri).download_artifacts(artifact_path="")

Java API örneği:

MlflowClient mlflowClient = new MlflowClient();
// Get the model URI for a registered model version.
String modelURI = mlflowClient.getModelVersionDownloadUri(modelName, modelVersion);

// Or download the model artifacts directly.
File modelFile = mlflowClient.downloadModelVersion(modelName, modelVersion);

CLI komut örneği:

mlflow artifacts download --artifact-uri models:/<name>/<version|stage>

Çevrimiçi sunum için modelleri dağıtma

Model Kayıt Defteri'nden makine öğrenmesi modellerini REST uç noktaları olarak barındırmak için Model Sunma özelliğini kullanabilirsiniz. Bu uç noktalar, model sürümlerinin kullanılabilirliğine ve aşamalarına göre otomatik olarak güncelleştirilir.

Ayrıca MLflow'un yerleşik dağıtım araçlarını kullanarak üçüncü taraf hizmet çerçevelerine model dağıtabilirsiniz. Aşağıdaki örneğe bakın.