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ı MLmodel
bir 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_model
bir 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ş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 flavors
fastai
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 fastai
karşı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]}
}]'
İpucu
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
Not
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 birDecisionTreeClassifier
nesne döndürür. Günlüğe kaydedilen aynı model nesnesini ve türlerini geri yüklemek için kullanınmlflow.<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 birpredict
işlevi vardır. Ayrıca, MLflow bu işlevin ,numpy.ndarray
veyadict[string, numpyndarray]
(modelin imzaya bağlı olarak) türündekipandas.DataFrame
bağı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ınmlflow.pyfunc.load_model()
.