Yapıtlardan MLflow'daki modellere

Aşağıdaki makalede, MLflow yapıtı ile MLflow modeli arasındaki farklar ve birinden diğerine nasıl geçiş yapılır açıklanmaktadır. Ayrıca Azure Machine Learning'in kolaylaştırılmış dağıtım iş akışlarını etkinleştirmek için MLflow modeli kavramını nasıl kullandığını da açıklar.

Yapıt ile model arasındaki fark nedir?

MLflow hakkında bilginiz yoksa, günlük yapıtları veya dosyalar ile MLflow modellerini günlüğe kaydetme arasındaki farkın farkında olmayabilirsiniz. İkisi arasında bazı temel farklılıklar vardır:

Yapıt

Yapıt, denemenin çalıştırmasından veya işinden oluşturulan (ve yakalanan) herhangi bir dosyadır. Yapıt bir pickle dosyası olarak seri hale getirilmiş bir modeli, PyTorch veya TensorFlow modelinin ağırlıklarını, hatta doğrusal regresyon katsayılarını içeren bir metin dosyasını temsil edebilir. Bazı yapıtların modelin kendisiyle hiçbir ilgisi de olabilir; bunun yerine, modeli çalıştırmak için yapılandırmalar veya ön işleme bilgileri ya da örnek veriler vb. içerebilir. Yapıtlar çeşitli biçimlerde gelebilir.

Yapıtları zaten günlüğe kaydedilmiş olabilirsiniz:

filename = 'model.pkl'
with open(filename, 'wb') as f:
  pickle.dump(model, f)

mlflow.log_artifact(filename)

Model

MLflow'daki bir model de bir yapıttır. Ancak bu tür yapıtlar hakkında daha güçlü varsayımlarda bulunuruz. Bu tür varsayımlar, kaydedilen dosyalar ile ne anlama gelenler arasında net bir sözleşme sağlar. Modellerinizi yapıt (basit dosyalar) olarak günlüğe kaydettiğinizde, çıkarım için modelin nasıl yükleneceklerini öğrenmek için model oluşturucusunun bu dosyaların her biri için ne anlama geldiğini bilmeniz gerekir. Tam tersine MLflow modelleri, MLmodel biçiminde belirtilen sözleşme kullanılarak yüklenebilir.

Azure Machine Learning'de günlük modelleri aşağıdaki avantajlara sahiptir:

  • Puanlama betiği veya ortam sağlamadan bunları gerçek zamanlı veya toplu iş uç noktalarına dağıtabilirsiniz.
  • Modelleri dağıttığınızda dağıtımlarda otomatik olarak bir swagger oluşturulur ve Test özelliği Azure Machine Learning stüdyosu kullanılabilir.
  • Modelleri doğrudan işlem hattı girişi olarak kullanabilirsiniz.
  • Sorumlu yapay zeka panosunu modellerinizle birlikte kullanabilirsiniz.

MLflow SDK'sını kullanarak modelleri günlüğe kaydedebilirsiniz:

import mlflow
mlflow.sklearn.log_model(sklearn_estimator, "classifier")

MLmodel biçimi

MLflow, yapıtlar ve temsil ettikleri şey arasında bir sözleşme oluşturmanın bir yolu olarak MLmodel biçimini benimser. MLmodel biçimi, varlıkları bir klasörde depolar. Bu varlıklar arasında adlı MLmodelbir dosya vardır. Bu dosya, bir modelin nasıl yüklenip kullanılabileceğini gösteren tek gerçek kaynaktır.

Aşağıdaki ekran görüntüsünde Azure Machine Learning stüdyosu örnek bir MLflow modelinin klasörü gösterilmektedir. Model adlı credit_defaults_modelbir klasöre yerleştirilir. Bu klasörün adlandırılması için belirli bir gereksinim yoktur. klasörü, dosyayı diğer model yapıtları arasında içerir MLmodel .

A screenshot showing assets of a sample MLflow model, including the MLmodel file.

Aşağıdaki kod, eğitilen fastai bir görüntü işleme modelinin MLmodel dosyasının nasıl görünebileceğini gösteren bir örnektir:

MLmodel

artifact_path: classifier
flavors:
  fastai:
    data: model.fastai
    fastai_version: 2.4.1
  python_function:
    data: model.fastai
    env: conda.yaml
    loader_module: mlflow.fastai
    python_version: 3.8.12
model_uuid: e694c68eba484299976b06ab9058f636
run_id: e13da8ac-b1e6-45d4-a9b2-6a0a5cfac537
signature:
  inputs: '[{"type": "tensor",
             "tensor-spec": 
                 {"dtype": "uint8", "shape": [-1, 300, 300, 3]}
           }]'
  outputs: '[{"type": "tensor", 
              "tensor-spec": 
                 {"dtype": "float32", "shape": [-1,2]}
            }]'

Model tatları

MLflow, kullanılabilecek çok sayıda makine öğrenmesi çerçevesini göz önünde bulundurarak, tüm makine öğrenmesi çerçevelerinde çalışmak üzere benzersiz bir anlaşma sağlamanın bir yolu olarak flavor kavramını kullanıma sunms. Bir çeşit, belirli bir çerçeveyle oluşturulan belirli bir model için neler bekleyebileceğinizi gösterir. Örneğin, TensorFlow'un bir TensorFlow modelinin nasıl kalıcı ve yüklü olması gerektiğini belirten kendi özelliği vardır. Her model türü belirli bir çerçeve için modelin nasıl kalıcı hale getirileceğini ve yüklendiğini gösterdiğinden, MLmodel biçimi tüm modellerin desteklemesi gereken tek bir serileştirme mekanizmasını zorlamaz. Bu karar, her bir aromanın MLmodel standardıyla uyumluluktan ödün vermeden en iyi deneyimlerine göre en iyi performansı veya en iyi desteği sağlayan yöntemleri kullanmasına olanak tanır.

Aşağıdaki kod, bir model için flavorsfastai bölümün bir örneğidir.

flavors:
  fastai:
    data: model.fastai
    fastai_version: 2.4.1
  python_function:
    data: model.fastai
    env: conda.yaml
    loader_module: mlflow.fastai
    python_version: 3.8.12

Model imzası

MLflow'da model imzası, modelin belirtiminin önemli bir parçasıdır çünkü modelle modeli çalıştıran sunucu arasında bir veri sözleşmesi görevi görür. Model imzası, modelin giriş türlerini dağıtım zamanında ayrıştırma ve zorlama için de önemlidir. bir imza varsa, MLflow modelinize veri gönderildiğinde giriş türlerini zorlar. Daha fazla bilgi için bkz . MLflow imza zorlama.

İmzalar, modeller günlüğe kaydedildiğinde gösterilir ve dosyanın bölümünde MLmodel kalıcı hale getirilirsignature. MLflow'daki Otomatik Kapsam özelliği, imzaları otomatik olarak en iyi şekilde çıkartır. Ancak, elde ettiğiniz imzalar ihtiyacınız olan imzalar değilse modelleri el ile günlüğe kaydetmeniz gerekebilir. Daha fazla bilgi için bkz . Modelleri imzalarla günlüğe kaydetme.

İki tür imza vardır:

  • Sütun tabanlı imza: Bu imza tablo verileri üzerinde çalışır. MLflow, bu imza türüne sahip modeller için nesneleri giriş olarak sağlar pandas.DataFrame .
  • Tensor tabanlı imza: Bu imza n boyutlu dizilerle veya tensorlarla çalışır. Bu imzaya sahip modeller için MLflow giriş olarak sağlar numpy.ndarray (veya adlandırılmış-tensorlar söz konusu olduğunda sözlüğü numpy.ndarray ).

Aşağıdaki örnek ile eğitilen bir görüntü işleme modeline fastaikarşılık gelir. Bu model, şekillerin RGB gösterimiyle (işaretsiz tamsayılar) şeklin (300, 300, 3) tensorları olarak temsil edilen bir dizi görüntü alır. Model, iki sınıf için tahmin toplu işlemlerini (olasılıklar) verir.

MLmodel

signature:
  inputs: '[{"type": "tensor",
             "tensor-spec": 
                 {"dtype": "uint8", "shape": [-1, 300, 300, 3]}
           }]'
  outputs: '[{"type": "tensor", 
              "tensor-spec": 
                 {"dtype": "float32", "shape": [-1,2]}
            }]'

Bahşiş

Azure Machine Learning, bir MLflow modelinin dağıtımı için bir imza içeren bir swagger dosyası oluşturur. Bu, Azure Machine Learning stüdyosu kullanarak dağıtımları test etme işlemini kolaylaştırır.

Model ortamı

Çalıştırılacak modelin gereksinimleri dosyada conda.yaml belirtilir. MLflow bağımlılıkları otomatik olarak algılayabilir veya yöntemini çağırarak mlflow.<flavor>.log_model() bunları el ile belirtebilirsiniz. İkinci seçenek, ortamınıza dahil edilen kitaplıklar kullanmayı amaçladığınız kitaplıklar değilse yararlı olabilir.

Aşağıdaki kod, çerçeveyle oluşturulan bir model için kullanılan bir ortam örneğidir fastai :

conda.yaml

channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
  - mlflow
  - astunparse==1.6.3
  - cffi==1.15.0
  - configparser==3.7.4
  - defusedxml==0.7.1
  - fastai==2.4.1
  - google-api-core==2.7.1
  - ipython==8.2.0
  - psutil==5.9.0
name: mlflow-env

Dekont

MLflow ortamı ile Azure Machine Learning ortamı arasındaki fark nedir?

MLflow ortamı model düzeyinde çalışırken, Azure Machine Learning ortamı çalışma alanı (kayıtlı ortamlar için) veya işler/dağıtımlar (anonim ortamlar için) düzeyinde çalışır. Azure Machine Learning'de MLflow modellerini dağıttığınızda, modelin ortamı oluşturulur ve dağıtım için kullanılır. Alternatif olarak, bu davranışı Azure Machine Learning CLI v2 ile geçersiz kılabilir ve belirli bir Azure Machine Learning ortamını kullanarak MLflow modellerini dağıtabilirsiniz.

Predict işlevi

Tüm MLflow modelleri bir predict işlev içerir. Bu işlev, kod içermeyen dağıtım deneyimi kullanılarak bir model dağıtıldığında çağrılır. İşlevin predict döndürdüğü (örneğin, sınıflar, olasılıklar veya tahmin), eğitim için kullanılan çerçeveye (yani, türe) bağlıdır. Ne döndüreceklerini öğrenmek için her bir aromanın belgelerini okuyun.

Aynı durumlarda, çıkarım yürütme şeklini değiştirmek için bu predict işlevi özelleştirmeniz gerekebilir. Bu gibi durumlarda, tahmin yönteminde farklı bir davranışa sahip modelleri günlüğe kaydetmeniz veya özel bir modelin modelini günlüğe kaydetmeniz gerekir.

MLflow modellerini yüklemeye yönelik iş akışları

MLflow modelleri olarak oluşturulan modelleri aşağıdakiler gibi çeşitli konumlardan yükleyebilirsiniz:

  • modellerin günlüğe kaydedildiği çalıştırmadan doğrudan
  • modellerinin kaydedildiği dosya sisteminden
  • modellerinin kayıtlı olduğu model kayıt defterinden.

MLflow, konumdan bağımsız olarak bu modelleri yüklemek için tutarlı bir yol sağlar.

Modelleri yüklemek için kullanılabilecek iki iş akışı vardır:

  • Günlüğe kaydedilen aynı nesneyi ve türleri yeniden yükleyin: MLflow SDK'sını kullanarak modelleri yükleyebilir ve eğitim kitaplığına ait türleri içeren modelin bir örneğini alabilirsiniz. Örneğin, ONNX modeli bir ModelProto süre döndürür ve scikit-learn ile eğitilen bir karar ağacı modeli bir DecisionTreeClassifier nesne döndürür. Günlüğe kaydedilen aynı model nesnesini ve türlerini geri yüklemek için kullanın mlflow.<flavor>.load_model() .

  • Çıkarım çalıştırmak için modeli geri yükleyin: MLflow SDK'sını kullanarak modelleri yükleyebilir ve MLflow'un bir işlev olacağını garanti ettiği bir predict sarmalayıcı elde edebilirsiniz. Hangi aromayı kullandığınız önemli değildir, her MLflow modelinin bir predict işlevi vardır. Ayrıca, MLflow bu işlevin , numpy.ndarrayveya dict[string, numpyndarray] (modelin imzaya bağlı olarak) türündeki pandas.DataFramebağımsız değişkenler kullanılarak çağrılabileceğini garanti eder. MLflow, modelin beklediği giriş türüne tür dönüştürmeyi işler. Çıkarım çalıştırmak için modeli geri yüklemek için kullanın mlflow.pyfunc.load_model() .