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