Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается развертывание настраиваемого кода Python с помощью Model Serving. В примере в этой статье рассматриваются рекомендации по добавлению логики предварительной обработки и последующей обработки в модель и ее развертыванию.
Функция pyfuncPython MLflow обеспечивает гибкость для развертывания любого фрагмента кода Python или любой модели Python. Ниже приведены примеры сценариев, в которых может потребоваться использовать руководство.
- Модель требует предварительной обработки перед передачей входных данных в прогнозную функцию модели.
- Платформа модели изначально не поддерживается MLflow.
- Вашему приложению требуется постобработка необработанных выходных данных модели для их использования.
- Сама модель имеет логику ветвления по запросу.
- Вы хотите развернуть полностью пользовательский код в качестве модели.
Создание пользовательской модели функции Python MLflow
MLflow предоставляет возможность регистрировать код Python с помощью формата пользовательских моделей Python.
Существует две необходимые функции при упаковке произвольного кода Python с помощью MLflow:
-
load_context— все, что необходимо загрузить только один раз, чтобы модель работала, должна быть определена в этой функции. Это важно, чтобы система свести к минимуму количество артефактов, загруженных во время функцииpredict, что ускоряет вывод. -
predict— эта функция содержит всю логику, которая выполняется при каждом выполнении входного запроса.
Заметка
Перед развертыванием пользовательского кода в качестве модели полезно убедиться, что модель готова к обслуживанию. См. документацию по MLflow по использованию mlflow.models.predict для проверки моделей перед развертыванием.
Внесите в журнал вашу модель функции на Python
Important
Среды выполнения Databricks Runtime ML по умолчанию включают mlflow-skinny, а не полный пакет mlflow. Когда вы регистрируете модель pyfunc в одной из этих сред выполнения, не указывая pip_requirements, MLflow фиксирует mlflow-skinny в conda.yaml модели. Для обслуживания моделей требуется mlflow (не mlflow-skinny) в conda.yaml, иначе образ контейнера не может быть собран. Всегда указывайте mlflow==<version> в pip_requirements при вызове mlflow.pyfunc.log_model() в среде выполнения Databricks Runtime ML:
# DBR ML ships with mlflow-skinny by default, so specify mlflow explicitly
# to ensure Model Serving compatibility.
mlflow.pyfunc.log_model(
name="model",
python_model=your_model,
pip_requirements=["mlflow==3.8.1"], # use mlflow, not mlflow-skinny
registered_model_name="catalog.schema.model_name",
)
Несмотря на то, что вы пишете модель с пользовательским кодом, можно использовать общие модули кода из вашей организации. С помощью параметра code_path авторы моделей могут фиксировать полные ссылки на код, который загружается в путь и может быть использован в других пользовательских моделях pyfunc.
Например, если модель регистрируется в журнале:
mlflow.pyfunc.log_model(CustomModel(), "model", code_path = ["preprocessing_utils/"])
Код из preprocessing_utils доступен в загруженном контексте модели. Ниже приведен пример модели, которая использует этот код.
class CustomModel(mlflow.pyfunc.PythonModel):
def load_context(self, context):
self.model = torch.load(context.artifacts["model-weights"])
from preprocessing_utils.my_custom_tokenizer import CustomTokenizer
self.tokenizer = CustomTokenizer(context.artifacts["tokenizer_cache"])
def format_inputs(self, model_input):
# insert some code that formats your inputs
pass
def format_outputs(self, outputs):
predictions = (torch.sigmoid(outputs)).data.numpy()
return predictions
def predict(self, context, model_input):
model_input = self.format_inputs(model_input)
outputs = self.model.predict(model_input)
return self.format_outputs(outputs)
Обслуживание модели
После регистрации пользовательской модели pyfunc его можно зарегистрировать в каталоге Unity или реестре рабочих областей и отправить модель в конечную точку обслуживания моделей .
Пример записной книжки
В следующем примере записной книжки показано, как скорректировать выходные данные модели, когда необработанные выходные данные запрашиваемой модели необходимо выполнить постобработку для использования.