

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 故障診斷機器學習推論
<a name="ml-troubleshooting"></a>

使用本節中的疑難排解資訊和解決方案，以協助解決機器學習元件的問題。如需公有機器學習推論元件，請參閱下列元件日誌中的錯誤訊息：

------
#### [ 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`

------

如果元件已正確安裝，則元件日誌會包含用於推論的程式庫位置。

**Topics**
+ [無法擷取程式庫](#rpi-update-error)
+ [Cannot open shared object file](#rpi-import-cv-error)
+ [Error: ModuleNotFoundError: No module named '<library>'](#troubleshooting-venv-errors-not-found)
+ [未偵測到支援 CUDA 的裝置](#troubleshooting-cuda-error)
+ [沒有此類檔案或目錄](#troubleshooting-venv-errors-no-such-file)
+ [RuntimeError: module compiled against API version 0xf but this version of NumPy is <version>](#troubleshooting-rpi-numpy-version-error)
+ [picamera.exc.PiCameraError: Camera is not enabled](#troubleshooting-rpi-camera-stack-error)
+ [記憶體錯誤](#troubleshooting-memory-errors)
+ [磁碟空間錯誤](#troubleshooting-disk-space-errors)
+ [逾時錯誤](#troubleshooting-timeout-errors)

## 無法擷取程式庫
<a name="rpi-update-error"></a>

當安裝程式指令碼無法在 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
<a name="rpi-import-cv-error"></a>

當安裝程式指令碼無法在 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>'
<a name="troubleshooting-venv-errors-not-found"></a>

當 ML 執行期程式庫或其相依性未正確安裝時，您可能會在 ML 執行期元件日誌 (`variant.DLR.log` 或 `variant.TensorFlowLite.log`) 中看到此錯誤。在下列情況下，可能會發生此錯誤：
+ 如果您使用預設啟用的 `UseInstaller`選項，則此錯誤表示 ML 執行期元件無法安裝執行期或其相依性。請執行下列操作：

  1. 設定 ML 執行期元件以停用 `UseInstaller`選項。

  1. 安裝 ML 執行時間及其相依性，並將其提供給執行 ML 元件的系統使用者。如需詳細資訊，請參閱下列內容：
     + [DLR 執行時間 UseInstaller 選項](dlr-component.md#dlr-component-config-useinstaller-term)
     + [TensorFlow Lite 執行時間 UseInstaller 選項](tensorflow-lite-component.md#tensorflow-lite-component-config-useinstaller-term)
+ 如果您不使用 `UseInstaller`選項，此錯誤表示未為執行 ML 元件的系統使用者安裝 ML 執行時間或其相依性。請執行下列操作：

  1. 檢查是否已為執行 ML 元件的系統使用者安裝程式庫。將 *ggc\$1user* 取代為系統使用者名稱，並將 *tflite\$1runtime* 取代為要檢查的程式庫名稱。

------
#### [ 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\""
     ```

------

  1. 如果未安裝程式庫，請為該使用者安裝程式庫。將 *ggc\$1user* 取代為系統使用者的名稱，並將 *tflite\$1runtime* 取代為程式庫的名稱。

------
#### [ 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 執行時間相依性的詳細資訊，請參閱下列內容：
     + [DLR 執行時間 UseInstaller 選項](dlr-component.md#dlr-component-config-useinstaller-term)
     + [TensorFlow Lite 執行時間 UseInstaller 選項](tensorflow-lite-component.md#tensorflow-lite-component-config-useinstaller-term)

  1. 如果問題仍然存在，請為其他使用者安裝程式庫，以確認此裝置是否可以安裝程式庫。例如，使用者可以是您的使用者、根使用者或管理員使用者。如果您無法為任何使用者成功安裝程式庫，您的裝置可能不支援程式庫。請參閱程式庫的文件，以檢閱需求並疑難排解安裝問題。

## 未偵測到支援 CUDA 的裝置
<a name="troubleshooting-cuda-error"></a>

使用 GPU 加速時，您可能會看到下列錯誤。執行下列命令，為 Greengrass 使用者啟用 GPU 存取。

```
sudo usermod -a -G video ggc_user
```

## 沒有此類檔案或目錄
<a name="troubleshooting-venv-errors-no-such-file"></a>

下列錯誤表示執行時間元件無法正確設定虛擬環境：
+ `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 `

檢查日誌，以確保所有執行時間相依性都已正確安裝。如需安裝程式指令碼所安裝程式庫的詳細資訊，請參閱下列主題：
+ [DLR 執行時間](dlr-component.md)
+ [TensorFlow Lite 執行時間](tensorflow-lite-component.md)

根據預設，*MLRootPath* 設定為 `/greengrass/v2/work/component-name/greengrass_ml`。若要變更此位置，請直接在部署中包含 [DLR 執行時間](dlr-component.md)或 [TensorFlow Lite 執行時間](tensorflow-lite-component.md) 執行期元件，並在組態合併更新中指定`MLRootPath`參數的修改值。如需設定元件的詳細資訊，請參閱 [更新元件組態](update-component-configurations.md)。

**注意**  
對於 DLR 元件 v1.3.x，您可以在推論元件的組態中設定 `MLRootPath` 參數，預設值為 `$HOME/greengrass_ml`。

## RuntimeError: module compiled against API version 0xf but this version of NumPy is <version>
<a name="troubleshooting-rpi-numpy-version-error"></a>

當您在執行 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 包含比 OpenCV 所需版本更舊的 NumPy 版本。若要修正此問題，請執行下列命令，將 NumPy 升級到最新版本。

```
pip3 install --upgrade numpy
```

## picamera.exc.PiCameraError: Camera is not enabled
<a name="troubleshooting-rpi-camera-stack-error"></a>

當您在執行 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 元件不相容的新攝影機堆疊。若要修正此問題，請啟用舊版攝影機堆疊。<a name="raspberry-pi-bullseye-enable-legacy-camera-stack"></a>

**啟用舊版攝影機堆疊**

1. 執行下列命令以開啟 Raspberry Pi 組態工具。

   ```
   sudo raspi-config
   ```

1. 選取**界面選項**。

1. 選取**舊版攝影機**以啟用舊版攝影機堆疊。

1. 重新啟動 Raspberry Pi。

## 記憶體錯誤
<a name="troubleshooting-memory-errors"></a>

當裝置沒有足夠的記憶體且元件程序中斷時，通常會發生下列錯誤。
+ `stderr. Killed.`
+ `exitCode=137`

我們建議至少部署 500 MB 的記憶體，以部署公有機器學習推論元件。

## 磁碟空間錯誤
<a name="troubleshooting-disk-space-errors"></a>

`no space left on device` 錯誤通常發生在裝置沒有足夠的儲存空間時。在再次部署元件之前，請確定您的裝置上有足夠的可用磁碟空間。我們建議至少 500 MB 的可用磁碟空間，以部署公有機器學習推論元件。

## 逾時錯誤
<a name="troubleshooting-timeout-errors"></a>

公有機器學習元件會下載大於 200 MB 的大型機器學習模型檔案。如果下載在部署期間逾時，請檢查您的網際網路連線速度，然後重試部署。