Артефакты и модели в MLflow
В этой статье объясняется, как артефакты MLflow и модели MLflow отличаются от других артефактов. В статье также объясняется, как Машинное обучение Azure использовать характеристики модели MLflow для упрощения рабочих процессов развертывания.
Артефакты и модели
В MLflow существуют некоторые фундаментальные различия между ведением журналов простых артефактов файлов и моделями MLflow.
Артефакт
Артефакт — это любой файл, созданный и захваченный из запуска или задания эксперимента. Артефакт может быть сериализованным в виде файла выбора, весами модели PyTorch или TensorFlow или текстовым файлом, содержащим коэффициенты линейной регрессии. Некоторые артефакты не имеют ничего общего с самой моделью, но содержат конфигурации выполнения, предварительно обработанные сведения или примеры данных. Артефакты могут иметь различные форматы.
В следующем примере регистрируется артефакт файла.
filename = 'model.pkl'
with open(filename, 'wb') as f:
pickle.dump(model, f)
mlflow.log_artifact(filename)
Модель
Модель MLflow — это артефакт, для которого вы делаете более строгие предположения, обеспечивающие четкий контракт между сохраненными файлами и тем, что они означают. Однако если файлы модели регистрируются как артефакты, необходимо знать, что означает каждый из файлов и как загружать их для вывода.
Можно регистрить модели MLflow с помощью пакета SDK MLflow, например:
import mlflow
mlflow.sklearn.log_model(sklearn_estimator, "classifier")
Модели MLflow для ведения журнала в Машинное обучение Azure имеют следующие преимущества:
- Модели MLflow можно развертывать в режиме реального времени или пакетных конечных точках без предоставления скрипта оценки или среды.
- При развертывании моделей MLflow развертывания автоматически создают swagger-файл, чтобы использовать функцию тестирования в Студия машинного обучения Azure.
- Модели MLflow можно использовать непосредственно в качестве входных данных конвейера.
- Панель мониторинга ответственного искусственного интеллекта можно использовать с моделями MLflow.
Формат MLmodel
Для моделей, зарегистрированных как простые файлы артефактов, необходимо знать, какой построитель моделей предназначен для каждого файла, прежде чем загрузить модель для вывода. Но для моделей MLflow вы загружаете модель с помощью формата MLmodel, чтобы указать контракт между артефактами и тем, что они представляют.
Формат MLmodel хранит ресурсы в папке, не требующей именования. Среди ресурсов есть файл с именем MLmodel , который является единственным источником истины для загрузки и использования модели.
На следующем рисунке показана папка модели MLflow с именем credit_defaults_model в Студия машинного обучения Azure. Папка содержит файл MLmodel и другие артефакты модели.
В следующем примере показан файл MLmodel для модели компьютерного зрения, обученной с помощью fastai
:
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]}
}]'
Вкусы модели
Учитывая большое количество доступных платформ машинного обучения, MLflow представил концепцию вкуса как способ предоставления уникального контракта для всех платформ машинного обучения. Вариант указывает, что ожидать для указанной модели, созданной с использованием определенной платформы. Например, TensorFlow имеет собственный вкус, который указывает, как сохранять и загружать модель TensorFlow.
Так как каждый вкус модели указывает, как сохранять и загружать модель для данной платформы, формат MLmodel не применяет единый механизм сериализации, который должны поддерживать все модели. Таким образом, каждый вкус может использовать методы, которые обеспечивают лучшую производительность или поддержку в соответствии с их рекомендациями, без ущерба для совместимости со стандартом MLmodel.
В следующем примере показан flavors
раздел для fastai
модели.
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
Подпись модели
Подпись модели MLflow является важной частью спецификации модели, так как она служит контрактом данных между моделью и сервером, на котором выполняется модель. Подпись модели также важна для синтаксического анализа и применения входных типов модели во время развертывания. Если подпись доступна, MLflow применяет входные типы при отправке данных в модель. Дополнительные сведения см. в разделе о принудительном применении подписи MLflow.
Подписи указываются во время регистрации моделей и сохраняются в signature
разделе MLmodel-файла . Функция автолога в MLflow автоматически делает все возможное для вывода подписей. Тем не менее вы можете вручную записывать модели, если выводимые подписи не являются нужными. Дополнительные сведения см. в разделе "Как регистрировать модели с сигнатурами".
Есть два типа сигнатур:
- Подписи на основе столбцов работают с табличными данными . Для моделей с этим типом подписи MLflow предоставляет
pandas.DataFrame
объекты в качестве входных данных. - Сигнатуры на основе Tensor работают с многомерными массивами или тензорами. Для моделей с этой подписью
numpy.ndarray
MLflow предоставляетnumpy.ndarray
в качестве входных данных или словарь именованных тензоров.
В следующем примере показан signature
раздел для обученной fastai
модели компьютерного зрения. Эта модель получает пакет изображений, представленных как тензоры фигуры (300, 300, 3)
с их представлением RGB в виде целых чисел без знака. Модель выводит пакеты прогнозов как вероятности для двух классов.
signature:
inputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "uint8", "shape": [-1, 300, 300, 3]}
}]'
outputs: '[{"type": "tensor",
"tensor-spec":
{"dtype": "float32", "shape": [-1,2]}
}]'
Совет
Машинное обучение Azure создает swagger-файл для развертывания модели MLflow с доступной подписью. Этот файл упрощает тестирование развертываний с помощью Студия машинного обучения Azure.
Среда модели
Требования для запуска модели указываются в файле conda.yaml . MLflow может автоматически обнаруживать зависимости или вручную указывать их, вызывая mlflow.<flavor>.log_model()
метод. Вызов метода может быть полезен, если библиотеки, включенные в среду MLflow, не являются теми, которые вы хотите использовать.
В следующем примере conda.yaml показана среда для модели, созданной fastai
с помощью платформы:
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
Примечание.
Среда MLflow работает на уровне модели, но среда Машинное обучение Azure работает на уровне рабочей области для зарегистрированных сред или уровне заданий или развертываний для анонимных сред. При развертывании моделей MLflow Машинное обучение Azure создает среду модели и использует ее для развертывания. Вы можете использовать интерфейс командной строки Машинное обучение Azure для переопределения этого поведения и развертывания моделей MLflow в определенной среде Машинное обучение Azure.
Прогнозная функция
Все модели MLflow содержат predict
функцию, которая вызывается при развертывании модели с помощью развертывания без кода. predict
То, что функция возвращает, например классы, вероятности или прогноз, зависит от платформы или вкуса, используемого для обучения. В документации по каждому вкусу описывается, что он возвращает.
Вы можете настроить predict
функцию для изменения способа выполнения вывода. Вы можете либо модели журналов с другим поведением, либо регистрируют настраиваемый вкус модели.
Рабочие процессы для загрузки моделей MLflow
Модели MLflow можно загрузить из следующих расположений:
- Непосредственно из запуска, в котором были зарегистрированы модели
- Из файловой системы, в которой сохраняются модели
- Из реестра моделей, в котором зарегистрированы модели
MLflow обеспечивает согласованный способ загрузки этих моделей независимо от расположения.
Существует два рабочих процесса для загрузки моделей:
Загрузите один и тот же объект и типы, которые были зарегистрированы. Модели можно загрузить с помощью пакета SDK MLflow и получить экземпляр модели с типами, принадлежащими к библиотеке обучения. Например, модель Open Neural Network Exchange (ONNX) возвращает значение
ModelProto
, а модель дерева принятия решений обученаscikit-learn
с возвратомDecisionTreeClassifier
объекта. Используетсяmlflow.<flavor>.load_model()
для загрузки одного и того же объекта модели и типов, которые были зарегистрированы.Загрузите модель для выполнения вывода. Модели можно загрузить с помощью пакета SDK MLflow и получить оболочку с гарантированной
predict
функцией. Это не имеет значения, какой вкус вы используете, так как каждая модель MLflow имеетpredict
функцию.MLflow гарантирует, что эту функцию можно вызвать с помощью аргументов типа
pandas.DataFrame
илиnumpy.ndarray
dict[string, numpyndarray]
в зависимости от подписи модели. MLflow обрабатывает преобразование типов в тип ввода, который ожидает модель. Используетсяmlflow.pyfunc.load_model()
для загрузки модели для выполнения вывода.