Поделиться через


Развертывание кода Python с помощью службы моделей

В этой статье описывается, как развернуть код Python с помощью службы моделей.

Функция pyfuncPython MLflow обеспечивает гибкость для развертывания любого фрагмента кода Python или любой модели Python. Ниже приведены примеры сценариев, в которых может потребоваться использовать руководство.

  • Модель требует предварительной обработки перед передачей входных данных в прогнозную функцию модели.
  • Платформа модели изначально не поддерживается MLflow.
  • Приложению требуется, чтобы необработанные выходные данные модели были обработаны после обработки для потребления.
  • Сама модель имеет логику ветвления по запросу.
  • Вы хотите развернуть полностью пользовательский код в качестве модели.

Создание пользовательской модели функции Python MLflow

MLflow предоставляет возможность регистрировать код Python с помощью пользовательского формата моделей Python.

Существует две необходимые функции при упаковке произвольного кода Python с помощью MLflow:

  • load_context — все, что необходимо загрузить только один раз, чтобы модель работала, должна быть определена в этой функции. Это важно, чтобы система свести к минимуму количество артефактов, загруженных во время predict функции, что ускоряет вывод.
  • predict — эта функция содержит всю логику, которая выполняется каждый раз при выполнении входного запроса.

Журнал модели функций Python

Несмотря на то, что вы пишете модель с пользовательским кодом, можно использовать общие модули кода из вашей организации. 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 или реестре рабочих областей и отправить модель в конечную точку обслуживания моделей.

Пример записной книжки

В следующем примере записной книжки показано, как настроить выходные данные модели, когда необработанные выходные данные запрашиваемой модели необходимо выполнить после обработки для потребления.

Настройка выходных данных модели с помощью записной книжки MLflow PyFunc

Получить записную книжку