Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, özel ML modelinizi MLflow biçimine dönüştürmeyi öğrenin. MLflow , makine öğrenmesi denemelerinizin yaşam döngüsünü yönetmeye yönelik açık kaynak bir kitaplıktır. Bazı durumlarda, MLflow'un yerleşik model biçemi desteği olmadan bir makine öğrenimi çerçevesi kullanabilirsiniz. Yerleşik MLflow modeli çeşidinin olmaması nedeniyle modeli MLflow'un fluent API'leriyle günlüğe kaydedemez veya kaydedemezsiniz. Bu sorunu çözmek için modelinizi, Azure Machine Learning ve MLflow modellerinin aşağıdaki avantajlarını uygulayabileceğiniz bir MLflow biçimine dönüştürebilirsiniz.
Azure Machine Learning ile MLflow modelleri şunların ek avantajlarından yararlanır:
- Kod dağıtımı yok
- açık kaynak standart biçim olarak taşınabilirlik
- Hem yerel olarak hem de bulutta dağıtım yapabilme
MLflow, scikit-learn, Keras ve PyTorch gibi çeşitli makine öğrenmesi çerçeveleri için destek sağlar. MLflow her kullanım örneğini kapsamayabilir. Örneğin, MLflow'un yerel olarak desteklemediği bir çerçeveye sahip bir MLflow modeli oluşturmak isteyebilirsiniz. İşleri çalıştırırken modelinizin ön işleme veya son işleme yapma şeklini değiştirmek isteyebilirsiniz. MLflow modelleri hakkında daha fazla bilgi edinmek için MLflow'da yapıtlardan modellere bölümüne bakın.
Modelinizi MLflow ile eğitmediyseniz ve Azure Machine Learning'in MLflow kod içermeyen dağıtım teklifini kullanmak istiyorsanız, özel modelinizi MLflow'a dönüştürmeniz gerekir. Daha fazla bilgi için bkz . Özel Python Modelleri.
Önkoşullar
Python 3.10 veya üzeri
Python ortamınıza yüklenen aşağıdaki paketler:
pip install mlflow scikit-learn cloudpickle
Uyarı
Bu makaledeki kod örnekleri scikit-learn ve cloudpickle kullanır. Farklı bir çerçeve kullanıyorsanız, bunun yerine ilgili paketleri yükleyin.
Modeliniz için Python sarmalayıcısı oluşturma
Modelinizi MLflow tarafından desteklenen bir biçime dönüştürebilmeniz için önce modeliniz için bir Python sarmalayıcısı oluşturmanız gerekir. Aşağıdaki kod, bir model için sklearn Python sarmalayıcının nasıl oluşturulacağını gösterir.
# Load training and test datasets
from sys import version_info
import sklearn
import mlflow.pyfunc
PYTHON_VERSION = "{major}.{minor}.{micro}".format(major=version_info.major,
minor=version_info.minor,
micro=version_info.micro)
# Train and save an SKLearn model
sklearn_model_path = "model.pkl"
artifacts = {
"sklearn_model": sklearn_model_path
}
# create wrapper
class SKLearnWrapper(mlflow.pyfunc.PythonModel):
def load_context(self, context):
import pickle
self.sklearn_model = pickle.load(open(context.artifacts["sklearn_model"], 'rb'))
def predict(self, context, model_input, params=None):
return self.sklearn_model.predict(model_input)
Conda ortamı oluşturma
Ardından, tüm gerekli bağımlılıkları içeren yeni MLflow Modeli için Conda ortamı oluşturun. Belirtilmemişse, ortam mevcut yüklemeden türetilecektir. Belirtilmediyse belirtilebilir.
import cloudpickle
conda_env = {
'channels': ['defaults'],
'dependencies': [
'python={}'.format(PYTHON_VERSION),
'pip',
{
'pip': [
'mlflow',
'scikit-learn=={}'.format(sklearn.__version__),
'cloudpickle=={}'.format(cloudpickle.__version__),
],
},
],
'name': 'sklearn_env'
}
MLflow biçimlendirilmiş modelini ve test tahminlerini yükleme
Ortamınız hazır olduktan sonra, SKlearnWrapper , Conda ortamını ve yeni oluşturduğunuz yapıtlar sözlüğünüzü mlflow.pyfunc.save_model() yöntemine aktarın. Bunu yaptığınızda model diskinize kaydedilir.
from mlflow.models import infer_signature
import pickle
mlflow_pyfunc_model_path = "sklearn_mlflow_pyfunc_custom"
# Create a model signature from a sample of your test data.
# Azure Machine Learning uses the signature to generate a scoring schema for deployed endpoints.
test_input = "<insert test data>"
sklearn_loaded = pickle.load(open(sklearn_model_path, 'rb'))
signature = infer_signature(test_input, sklearn_loaded.predict(test_input))
mlflow.pyfunc.save_model(path=mlflow_pyfunc_model_path, python_model=SKLearnWrapper(),
conda_env=conda_env, artifacts=artifacts, signature=signature)
Yeni kaydedilen MLflow biçimlendirilmiş modelinizin kaydetme sırasında değişmediğinden emin olmak için modelinizi yükleyin ve özgün modelinizi karşılaştırmak için bir test tahmini yazdırın.
Aşağıdaki kod, mlflow biçimli modelden bir test tahmini ve sklearn modelden bir test tahmini yazdırır. Karşılaştırma için test tahminlerini diskinize kaydeder.
loaded_model = mlflow.pyfunc.load_model(mlflow_pyfunc_model_path)
input_data = "<insert test data>"
# Evaluate the model
import pandas as pd
test_predictions = loaded_model.predict(input_data)
print(test_predictions)
# load the model from disk
import pickle
loaded_model = pickle.load(open(sklearn_model_path, 'rb'))
result = loaded_model.predict(input_data)
print(result)
MLflow biçimlendirilmiş modelini kaydetme
Modelinizin doğru kaydedildiğini onayladıktan sonra bir test çalıştırması oluşturabilirsiniz. MLflow biçimlendirilmiş modelinizi kaydedin ve model kayıt defterinize kaydedin.
with mlflow.start_run():
mlflow.pyfunc.log_model(name=mlflow_pyfunc_model_path,
python_model=SKLearnWrapper(),
registered_model_name="Custom_mlflow_model",
conda_env=conda_env,
artifacts=artifacts,
signature=signature)
Önemli
Bazı durumlarda, MLflow'un yerleşik model biçemi desteği olmadan bir makine öğrenimi çerçevesi kullanabilirsiniz. Örneğin, vaderSentiment kütüphanesi, duygu analizi için kullanılan standart bir doğal dil işleme (NLP) kütüphanesidir. Yerleşik bir MLflow model çeşidi olmadığından, modeli MLflow modelinin fluent API'leriyle günlüğe kaydedemez veya kaydedemezsiniz. Desteklenen yerleşik bir MLflow model çeşidi olmayan bir modeli kaydetme, günlüğe kaydetme ve kaydetme hakkında bir örnek için bkz. Log MLflow modelleri.