机器学习推理故障排除 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

机器学习推理故障排除

使用本节中的故障排除信息和解决方案可帮助解决机器学习组件问题。有关公有机器学习推理组件,请参阅以下组件日志中的错误消息:

Linux or Unix
  • /greengrass/v2/logs/aws.greengrass.DLRImageClassification.log

  • /greengrass/v2/logs/aws.greengrass.DLRObjectDetection.log

  • /greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log

  • /greengrass/v2/logs/aws.greengrass.TensorFlowLiteObjectDetection.log

Windows
  • C:\greengrass\v2\logs\aws.greengrass.DLRImageClassification.log

  • C:\greengrass\v2\logs\aws.greengrass.DLRObjectDetection.log

  • C:\greengrass\v2\logs\aws.greengrass.TensorFlowLiteImageClassification.log

  • C:\greengrass\v2\logs\aws.greengrass.TensorFlowLiteObjectDetection.log

如果组件安装正确,则组件日志将包含用于推理的库的位置。

无法获取库

在 Raspberry Pi 设备上部署期间,如果安装程序脚本无法下载所需的库,则会发生以下错误。

Err:2 http://raspbian.raspberrypi.org/raspbian buster/main armhf python3.7-dev armhf 3.7.3-2+deb10u1 404 Not Found [IP: 93.93.128.193 80] E: Failed to fetch http://raspbian.raspberrypi.org/raspbian/pool/main/p/python3.7/libpython3.7-dev_3.7.3-2+deb10u1_armhf.deb 404 Not Found [IP: 93.93.128.193 80]

再次运行 sudo apt-get update 并部署您的组件。

Cannot open shared object file

在 Raspberry Pi 设备上部署期间,如果安装程序脚本无法下载所需的 opencv-python 依赖关系,您可能会看到类似以下内容的错误。

ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory

运行以下命令以手动安装 opencv-python 依赖关系:

sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev

Error: ModuleNotFoundError: No module named '<library>'

当 ML 运行时库或其依赖关系未正确安装时,您可能会在 ML 运行时组件日志(variant.DLR.logvariant.TensorFlowLite.log)中看到此错误。以下情况下可能会出现此错误:

  • 如果您使用默认处于启用状态的 UseInstaller 选项,则此错误表示 ML 运行时组件无法安装运行时或其依赖关系。执行以下操作:

    1. 配置 ML 运行时组件以禁用 UseInstaller 选项。

    2. 安装 ML 运行时及其依赖关系,并使其可供运行 ML 组件的系统用户使用。有关更多信息,请参阅下列内容:

  • 如果您不使用 UseInstaller 选项,则此错误表示没有为运行 ML 组件的系统用户安装 ML 运行时或其依赖关系。执行以下操作:

    1. 检查是否为运行 ML 组件的系统用户安装了该库。将 ggc_user 替换为系统用户的名称,并将 tflite_runtime 替换为要检查的库的名称。

      Linux or Unix
      sudo -H -u ggc_user bash -c "python3 -c 'import tflite_runtime'"
      Windows
      runas /user:ggc_user "py -3 -c \"import tflite_runtime\""
    2. 如果未安装该库,请为该用户安装。将 ggc_user 替换为系统用户的名称,并将 tflite_runtime 替换为库的名称。

      Linux or Unix
      sudo -H -u ggc_user bash -c "python3 -m pip install --user tflite_runtime"
      Windows
      runas /user:ggc_user "py -3 -m pip install --user tflite_runtime"

      有关每个 ML 运行时的依赖关系的更多信息,请参阅以下内容:

    3. 如果问题仍然存在,请为其他用户安装该库,以确认此设备是否可以安装该库。例如,该用户可以是您的用户、根用户或管理员用户。如果您无法为任何用户成功安装该库,则可能是您的设备不支持该库。请查阅库的文档,查看要求并排查安装问题。

未检测到支持 CUDA 的设备

当您使用 GPU 加速时,可能会看到以下错误。运行以下命令为 Greengrass 用户启用 GPU 访问权限。

sudo usermod -a -G video ggc_user

没有此类文件或目录

以下错误表示运行时组件无法正确设置虚拟环境:

  • MLRootPath/greengrass_ml_dlr_conda/bin/conda: No such file or directory

  • MLRootPath/greengrass_ml_dlr_venv/bin/activate: No such file or directory

  • MLRootPath/greengrass_ml_tflite_conda/bin/conda: No such file or directory

  • MLRootPath/greengrass_ml_tflite_venv/bin/activate: No such file or directory

检查日志,确保所有运行时依赖关系均已正确安装。有关安装程序脚本所安装库的更多信息,请参阅以下主题:

默认情况下,MLRootPath 设置为 /greengrass/v2/work/component-name/greengrass_ml。要更改此位置,请直接在部署中包含 DLR 运行时TensorFlow Lite 运行时 运行时组件,并在配置合并更新中为 MLRootPath 参数指定修改后的值。有关配置组件的更多信息,请参阅更新组件配置

注意

对于 DLR 组件 v1.3.x,您可以在推理组件的配置中设置 MLRootPath 参数,默认值为 $HOME/greengrass_ml

RuntimeError: module compiled against API version 0xf but this version of NumPy is <version>

在运行 Raspberry Pi OS Bullseye 的 Raspberry Pi 上运行机器学习推理时,您可能会看到以下错误。

RuntimeError: module compiled against API version 0xf but this version of numpy is 0xd ImportError: numpy.core.multiarray failed to import

之所以出现此错误,是因为 Raspberry Pi OS Bullseye 包含的 NumPy 版本比 OpenCV 所需的版本要早。要修复这一问题,请运行以下命令将 NumPy 升级到最新版本。

pip3 install --upgrade numpy

picamera.exc.PiCameraError: Camera is not enabled

在运行 Raspberry Pi OS Bullseye 的 Raspberry Pi 上运行机器学习推理时,您可能会看到以下错误。

picamera.exc.PiCameraError: Camera is not enabled. Try running 'sudo raspi-config' and ensure that the camera has been enabled.

之所以出现此错误,是因为 Raspberry Pi OS Bullseye 包含一个与 ML 组件不兼容的新摄像机堆栈。要修复这一问题,请启用旧摄像机堆栈。

启用旧摄像机堆栈
  1. 运行以下命令以打开 Raspberry Pi 配置工具。

    sudo raspi-config
  2. 选择接口选项

  3. 选择旧摄像机以启用旧摄像机堆栈。

  4. 重启 Raspberry Pi。

内存错误

当设备内存不足,组件进程中断时,通常会出现以下错误。

  • stderr. Killed.

  • exitCode=137

我们建议至少有 500 MB 的内存来部署公有机器学习推理组件。

磁盘空间错误

no space left on device 错误通常在设备没有足够的存储时发生。在再次部署组件之前,请确保设备上有足够的可用磁盘空间。我们建议至少有 500 MB 的可用磁盘空间来部署公有机器学习推理组件。

超时错误

公有机器学习组件会下载大于 200 MB 的大型机器学习模型文件。如果在部署期间下载超时,请检查您的互联网连接速度并重试部署。