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.
Akış modelini günlüğe kaydetmeyi ve puanlama hakkında bilgi edinmek için bkz . Akış modelini kaydetme ve yükleme.
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 conda
kullanarak 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-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.
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}
) - Unity Kataloğu birim yolu (örneğin
dbfs:/Volumes/catalog_name/schema_name/volume_name/{path_to_artifact_root}/{model_path}
) - ile başlayan MLflow tarafından yönetilen yapıt depolama yolu
dbfs:/databricks/mlflow-tracking/
- 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:
- 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.)
- Yapıtlar bölümüne kaydırın.
- 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.
Ö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 (eski) 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 Unity Kataloğu birimlerine kaydetme
Modeli yerel olarak kaydetmek için kullanın mlflow.<model-type>.save_model(model, modelpath)
. modelpath
Bir Unity Kataloğu birimleri yolu olmalıdır. Örneğin, proje çalışmanızı depolamak için Unity Kataloğu birimleri konumu dbfs:/Volumes/catalog_name/schema_name/volume_name/my_project_models
kullanıyorsanız model yolunu /dbfs/Volumes/catalog_name/schema_name/volume_name/my_project_models
kullanmanız gerekir:
modelpath = "/dbfs/Volumes/catalog_name/schema_name/volume_name/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
Unity Kataloğu model kayıt defterinde REST uç noktaları olarak kayıtlı makine öğrenmesi modellerini barındırmak için Mozaik AI Modeli 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.