在AWS sagemaker中部署我的模型时,导入matplotlib失败

时间:2020-07-15 09:50:06

标签: python amazon-web-services deep-learning pytorch amazon-sagemaker

我已经成功部署了我的AWS模型。

但是在测试时我遇到了运行时错误:“ 将matplotlib.pyplot导入为plt ”。我认为这是由于我使用的pytorch框架版本(framework_version = 1.2.0)。当我也使用更高版本时,我也面临同样的问题。

PyTorchModel(model_data=model_artifact,
                 role = role,
                 framework_version=1.2.0,
                 entry_point='predict.py',
                 predictor_cls=ImagePredictor)

当我使用version = 1.0.0时,我还有其他问题。即我无法从子目录导入库,并且部署本身失败。

例如:我在“代码”目录中有一些代码文件。

 from Code.CTModel import NetWork  ---> **this line will fail as "No module named Code" when i use version=1.0.0**

最终,我想了解如何使用/导入在子目录下编写的库。

2 个答案:

答案 0 :(得分:1)

听起来您想将一些其他代码库注入SageMaker PyTorch服务容器。您可能需要深入研究源代码,以了解如何构建PyTorch服务容器以进一步对其进行自定义:https://github.com/aws/sagemaker-pytorch-inference-toolkit,或构建自己的映像。

稍微研究一下源代码,我看到容器启用了导入任意代码的功能,但是只有在启用“多模型模式”时才可以。您可以验证代码是否在模型目录中的“代码”目录下并且是否启用了“多模型模式”吗?

    def initialize(self, context):
        # Adding the 'code' directory path to sys.path to allow importing user modules when multi-model mode is enabled.
        if (not self._initialized) and ENABLE_MULTI_MODEL:
            code_dir = os.path.join(context.system_properties.get("model_dir"), 'code')
            sys.path.append(code_dir)
            self._initialized = True

参考:https://github.com/aws/sagemaker-pytorch-inference-toolkit/blob/c4e7abc49aeebc2f9b6035337548a90e4330113d/src/sagemaker_pytorch_serving_container/handler_service.py#L47

如果这一切对您来说似乎很复杂,那么您可能需要研究一些标准化的格式来序列化PyTorch模型,例如https://onnx.ai/。如果您想通过contact@modelzoo.dev与我联系,我很想了解您打算在这里做什么的更多信息。我正在对platform进行Beta测试,该代码可以在一行代码中进行部署,并且很乐意在此处进行测试。

答案 1 :(得分:-1)

让我对查询进行一些高级介绍:source_dir中有predict.py,jupyter笔记本,Code(Direcotry),Evoludation(目录)和其他.py文件。

--Code
  --ResNet.py
  --Densenet.py
  --DataLoader.py
--Evaluation 
  --Evaluation.py 
--predict.py
--CT_Code.ipynb

当我在本地系统中从jupyter Notebook执行预测文件时,所有模块均已正确导入,并且一切正常。但是当我在sagemaker笔记本中部署同样的东西时,遇到了我的问题中提到的问题。(无法从Code目录和一些基本模块(如imageio,PIL,Matplotlib )导入库