Ошибка при развертывании модели PyTorch с помощью конвейера SageMaker и модели регистрации

#pytorch #amazon-cloudformation #amazon-sagemaker #endpoint #mlops

Вопрос:

Может ли кто-нибудь привести пример развертывания модели pytorch с использованием конвейера SageMaker?

Я использовал шаблон MLOps (шаблон MLOps для построения моделей, обучения и развертывания) студии SageMaker для создания проекта MLOps.

Шаблон использует конвейеры sagemaker для построения конвейера для предварительной обработки, обучения и регистрации модели. И сценарий развертывания реализован в файле YAML и использует для запуска CloudFormation. Сценарий развертывания будет запущен автоматически при регистрации модели.

Шаблон использует модель xgboost для обучения данных и развертывания модели. Я хочу использовать Pytorch и развернуть его. Я успешно заменил pytorch на xgboost и успешно обработал данные, обучил модель и зарегистрировал модель. Но я не использовал inference.py в моей модели. Поэтому я получаю ошибку при развертывании модели.

Журнал ошибок при обновлении конечной точки:

 FileNotFoundError: [Errno 2] No such file or directory: '/opt/ml/model/code/inference.py'
 

Я попытался найти пример использования inference.py для модели pytorch, но я не смог найти ни одного примера, в котором использовались бы конвейеры sagemaker и RegisterModel.

Любая помощь будет признательна.

Ниже вы можете увидеть часть конвейера для обучения и регистрации модели.

 from sagemaker.pytorch.estimator import PyTorch
from sagemaker.workflow.pipeline import Pipeline
from sagemaker.workflow.steps import (
    ProcessingStep,
    TrainingStep,
)
from sagemaker.workflow.step_collections import RegisterModel

pytorch_estimator = PyTorch(entry_point= os.path.join(BASE_DIR, 'train.py'),
                            instance_type= "ml.m5.xlarge",
                            instance_count=1,
                            role=role,
                            framework_version='1.8.0',
                            py_version='py3',
                            hyperparameters = {'epochs': 5, 'batch-size': 64, 'learning-rate': 0.1})

step_train = TrainingStep(
        name="TrainModel",
        estimator=pytorch_estimator,

        inputs={
                "train": sagemaker.TrainingInput(
                            s3_data=step_process.properties.ProcessingOutputConfig.Outputs[
                            "train_data"
                            ].S3Output.S3Uri,
                            content_type="text/csv",
                        ),
                "dev": sagemaker.TrainingInput(
                            s3_data=step_process.properties.ProcessingOutputConfig.Outputs[
                            "dev_data"
                            ].S3Output.S3Uri,
                            content_type="text/csv"
                        ),
                "test": sagemaker.TrainingInput(
                            s3_data=step_process.properties.ProcessingOutputConfig.Outputs[
                            "test_data"
                            ].S3Output.S3Uri,
                            content_type="text/csv"
                        ),
        },
)
step_register = RegisterModel(
            name="RegisterModel",
            estimator=pytorch_estimator,
            model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts,
            content_types=["text/csv"],
            response_types=["text/csv"],
            inference_instances=["ml.t2.medium", "ml.m5.large"],
            transform_instances=["ml.m5.large"],
            model_package_group_name=model_package_group_name,
            approval_status=model_approval_status,
        )
    
pipeline = Pipeline(
            name=pipeline_name,
            parameters=[
                processing_instance_type,
                processing_instance_count,
                training_instance_type,
                model_approval_status,
                input_data,
            ],
            steps=[step_process, step_train, step_register],
            sagemaker_session=sagemaker_session,
        )