AWS IoT Greengrass Version 1 は 2023 年 6 月 30 日に延長ライフフェーズに参加しました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日以降、 AWS IoT Greengrass V1 は機能、機能強化、バグ修正、またはセキュリティパッチを提供する更新をリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行 AWS IoT Greengrass Version 2することを強くお勧めします。これにより、重要な新機能が追加され、プラットフォームのサポートが追加されます。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ML イメージ分類コネクタ
警告
このコネクタは延長ライフサイクルフェーズに移行しており、 AWS IoT Greengrass では、機能、既存機能の拡張、セキュリティパッチ、バグ修正を提供するアップデートはリリースされません。詳細については、「AWS IoT Greengrass Version 1 メンテナンスポリシー」を参照してください。
ML イメージ分類コネクタは、 AWS IoT Greengrass コアで実行される機械学習 (ML) 推論サービスを提供します。このローカル推論サービスは、SageMaker AI イメージ分類アルゴリズムによってトレーニングされたモデルを使用してイメージ分類を実行します。
ユーザー定義の Lambda 関数は、 AWS IoT Greengrass Machine Learning SDK を使用して、ローカル推論サービスに推論リクエストを送信します。このサービスは、推論をローカルで実行し、入力イメージが特定のカテゴリに属する確率を返します。
AWS IoT Greengrass では、このコネクタの次のバージョンが提供されます。このバージョンは、複数のプラットフォームで使用できます。
コネクタ |
説明と ARN |
---|---|
ML イメージ分類 Aarch64 JTX2 |
NVIDIA Jetson TX2 のイメージ分類推論サービス。GPU アクセラレーションをサポートします。 ARN: |
ML イメージ分類 x86_64 |
x86_64 プラットフォーム用のイメージ分類推論サービス。 ARN: |
ML イメージ分類 ARMv7 |
ARMv7 プラットフォーム用のイメージ分類推論サービス。 ARN: |
バージョンの変更については、「Changelog」を参照してください。
要件
これらのコネクタには以下の要件があります。
-
AWS IoT Greengrass Core ソフトウェア v1.9.3 以降。
-
Python
バージョン 3.7 または 3.8 が Core デバイスにインストールされ、PATH 環境変数に追加されている。 注記
Python 3.8 を使用するには、次のコマンドを実行して、Python 3.7 のデフォルトのインストールフォルダからインストール済みの Python 3.8 バイナリへのシンボリックリンクを作成します。
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7これにより、 AWS IoT Greengrassの Python 要件を満たすようにデバイスが設定されます。
-
Core デバイスにインストールされた Apache MXNet フレームワークの依存関係。詳細については、「AWS IoT Greengrass コアへの MXNet 依存関係のインストール」を参照してください。
-
SageMaker AI モデルソースを参照する Greengrass グループの ML リソース。このモデルは、SageMaker AI イメージ分類アルゴリズムによってトレーニングされる必要があります。詳細については、Amazon SageMakerデベロッパーガイド」の「イメージ分類アルゴリズム」を参照してください。
-
ML フィードバックコネクタが Greengrass グループに追加され、設定されている。これは、コネクタを使用してモデル入力データをアップロードし、予測を MQTT トピックに発行する場合にのみ必要です。
-
以下の IAM ポリシーの例に示すように、ターゲットトレーニングジョブで
sagemaker:DescribeTrainingJob
アクションを許可するために Greengrass グループロールが設定されている。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:DescribeTrainingJob" ], "Resource": "arn:aws:sagemaker:
region
:account-id
:training-job:training-job-name
" } ] }グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、Greengrass グループロールの管理 (コンソール) または Greengrass グループロールの管理 (CLI) を参照してください。
リソースにきめ細かいアクセス権限または条件付きアクセス権限を付与できます (例えば、ワイルドカード * 命名スキームを使用)。ターゲットトレーニングジョブを今後変更する場合は、グループロールを更新してください。
-
このコネクタを操作するには、 AWS IoT Greengrass Machine Learning SDK v1.1.0 が必要です。
コネクタパラメータ
これらのコネクタでは、以下のパラメータを使用できます。
MLModelDestinationPath
-
Lambda 環境内の ML リソースの絶対ローカルパス。これは、ML リソースに指定されたターゲットパスです。
注記
コンソールに ML リソースを作成した場合、これはローカルパスです。
AWS IoT コンソールの表示名: モデルの送信先パス
必須:
true
型:
string
有効なパターン:
.+
MLModelResourceId
-
ソースモデルを参照する ML リソースの ID。
AWS IoT コンソールの表示名: SageMaker ジョブ ARN リソース
必須:
true
型:
string
有効なパターン:
[a-zA-Z0-9:_-]+
MLModelSageMakerJobArn
-
SageMaker AI モデルソースを表す SageMaker AI トレーニングジョブの ARN。モデルは SageMaker AI イメージ分類アルゴリズムによってトレーニングされる必要があります。
AWS IoT コンソールの表示名: SageMaker ジョブ ARN
必須:
true
型:
string
有効なパターン:
^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$
LocalInferenceServiceName
-
ローカル推論サービスの名前。ユーザー定義の Lambda 関数は、 AWS IoT Greengrass Machine Learning SDK の
invoke_inference_service
関数に名前を渡すことでサービスを呼び出します。例については、使用例を参照してください。AWS IoT コンソールの表示名: ローカル推論サービス名
必須:
true
型:
string
有効なパターン:
[a-zA-Z0-9][a-zA-Z0-9-]{1,62}
LocalInferenceServiceTimeoutSeconds
-
推論リクエストが終了するまでの時間 (秒単位)。最小値は 1 です。
AWS IoT コンソールの表示名: タイムアウト (秒)
必須:
true
型:
string
有効なパターン:
[1-9][0-9]*
LocalInferenceServiceMemoryLimitKB
-
サービスがアクセスできるメモリの量 (KB 単位)。最小値は 1 です。
AWS IoT コンソールの表示名: メモリ制限 (KB)
必須:
true
型:
string
有効なパターン:
[1-9][0-9]*
GPUAcceleration
-
CPU または GPU (アクセラレーション) コンピューティングの場合。このプロパティは ML イメージ分類 Aarch64 JTX2 コネクタにのみ適用されます。
AWS IoT コンソールの表示名: GPU アクセラレーション
必須:
true
型:
string
有効な値:
CPU
またはGPU
MLFeedbackConnectorConfigId
-
モデル入力データのアップロードに使用するフィードバック設定の ID。これは、ML フィードバックコネクタに定義されたフィードバック設定の ID と一致する必要があります。
この パラメータは、ML フィードバックコネクタを使用してモデル入力データをアップロードし、予測を MQTT トピックに発行する場合にのみ必要です。
AWS IoT コンソールの表示名: ML フィードバックコネクタ設定 ID
必須:
false
型:
string
有効なパターン:
^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$
サンプルコネクタを作成する (AWS CLI)
以下の CLI コマンドは、ML イメージ分類コネクタを含む初期バージョンで ConnectorDefinition
を作成します。
- 例: CPU インスタンス
-
この例では、ML イメージ分類 Armv7l コネクタのインスタンスを作成します。
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyImageClassificationConnector", "ConnectorArn": "arn:aws:greengrass:
region
::/connectors/ImageClassificationARMv7/versions/2", "Parameters": { "MLModelDestinationPath": "/path-to-model", "MLModelResourceId": "my-ml-resource", "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier", "LocalInferenceServiceName": "imageClassification", "LocalInferenceServiceTimeoutSeconds": "10", "LocalInferenceServiceMemoryLimitKB": "500000", "MLFeedbackConnectorConfigId": "MyConfig0" } } ] }' - 例: GPU インスタンス
-
この例では、NVIDIA Jetson TX2 ボードで GPU アクセラレーションをサポートする ML イメージ分類 Aarch64 JTX2 コネクタのインスタンスを作成します。
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyImageClassificationConnector", "ConnectorArn": "arn:aws:greengrass:
region
::/connectors/ImageClassificationAarch64JTX2/versions/2", "Parameters": { "MLModelDestinationPath": "/path-to-model", "MLModelResourceId": "my-ml-resource", "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier", "LocalInferenceServiceName": "imageClassification", "LocalInferenceServiceTimeoutSeconds": "10", "LocalInferenceServiceMemoryLimitKB": "500000", "GPUAcceleration": "GPU", "MLFeedbackConnectorConfigId": "MyConfig0" } } ] }'
注記
これらのコネクタの Lambda 関数には、存続期間の長いライフサイクルがあります。
AWS IoT Greengrass コンソールでは、グループのコネクタページからコネクタを追加できます。詳細については、「Greengrass コネクタの開始方法 (コンソール)」を参照してください。
入力データ
これらのコネクタは、イメージファイルを入力として受け入れます。入力イメージファイルは jpeg
または png
形式である必要があります。詳細については、「使用例」を参照してください。
これらのコネクタは MQTT メッセージを入力データとして受け入れません。
出力データ
これらのコネクタは、入力イメージで識別されたオブジェクトのフォーマットされた予測を返します。
[0.3,0.1,0.04,...]
予測には、モデルトレーニング中にトレーニングデータセットで使用されたカテゴリに対応する値のリストが含まれます。各値は、イメージが対応するカテゴリに分類される確率を表します。確率が最も高いカテゴリが主要な予測です。
これらのコネクタは MQTT メッセージを出力データとして公開しません。
使用例
次の Lambda 関数の例は、AWS IoT Greengrass Machine Learning SDK を使用して、ML イメージ分類コネクタと対話します。
注記
この SDK は、AWS IoT Greengrass Machine Learning SDK のダウンロードページからダウンロードできます。
この例では、SDK クライアントを初期化し、SDK の invoke_inference_service
関数の同期呼び出しにより、ローカル推論サービスを呼び出します。次に、アルゴリズムタイプ、サービス名、イメージタイプ、イメージコンテンツを渡します。その後、サービスのレスポンスを解析して、確率の結果 (予測) を取得します。
import logging
from threading import Timer
import numpy as np
import greengrass_machine_learning_sdk as ml
# We assume the inference input image is provided as a local file
# to this inference client Lambda function.
with open('/test_img/test.jpg', 'rb') as f:
content = bytearray(f.read())
client = ml.client('inference')
def infer():
logging.info('invoking Greengrass ML Inference service')
try:
resp = client.invoke_inference_service(
AlgoType='image-classification',
ServiceName='imageClassification',
ContentType='image/jpeg',
Body=content
)
except ml.GreengrassInferenceException as e:
logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e))
return
except ml.GreengrassDependencyException as e:
logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e))
return
logging.info('resp: {}'.format(resp))
predictions = resp['Body'].read().decode("utf-8")
logging.info('predictions: {}'.format(predictions))
# The connector output is in the format: [0.3,0.1,0.04,...]
# Remove the '[' and ']' at the beginning and end.
predictions = predictions[1:-1]
count = len(predictions.split(','))
predictions_arr = np.fromstring(predictions, count=count, sep=',')
# Perform business logic that relies on the predictions_arr, which is an array
# of probabilities.
# Schedule the infer() function to run again in one second.
Timer(1, infer).start()
return
infer()
def function_handler(event, context):
return
Machine AWS IoT Greengrass Machine Learning SDK の invoke_inference_service
関数は、次の引数を受け入れます。
引数 |
説明 |
---|---|
|
推論に使用するアルゴリズムタイプの名前。現在は、 必須: 型: 有効な値: |
|
ローカル推論サービスの名前。コネクタを設定したときに 必須: 型: |
|
入力イメージの MIME タイプ。 必須: 型: 有効な値: |
|
入力イメージファイルの内容。 必須: 型: |
AWS IoT Greengrass コアへの MXNet 依存関係のインストール
ML イメージ分類コネクタを使用するには、Apache MXNet フレームワークの依存関係をコアデバイスにインストールする必要があります。コネクタは、このフレームワークを使用して ML モデルを提供します。
注記
これらのコネクタは、プリコンパイルされた MXNet ライブラリにバンドルされているため、MXNet フレームワークをコアデバイスにインストールする必要はありません。
AWS IoT Greengrass には、以下の一般的なプラットフォームとデバイスの依存関係をインストールする (またはインストールのリファレンスとして使用する) スクリプトが用意されています。別のプラットフォームやデバイスを使用している場合は、設定に応じた MXNet ドキュメント
MXNet の依存関係をインストールする前に、必要なシステムライブラリ (指定された最小バージョン) がデバイスに存在することを確認してください。
-
CUDA Toolkit 9.0 と cuDNN 7.0 をインストールします。開始方法チュートリアルの「他のデバイスの設定」の手順に従うことができます。
-
コネクタでコミュニティ管理のオープンなソフトウェアをインストールできるように、ユニバースリポジトリを有効にします。詳細については、Ubuntu ドキュメントの Repositories/Ubuntu
を参照してください。 -
/etc/apt/sources.list
ファイルを開きます。 -
以下の行のコメントが解除されていることを確認してください。
deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
-
-
以下のインストールスクリプトのコピーを Core デバイス上の
nvidiajtx2.sh
というファイルに保存します。- Python 3.7
#!/bin/bash set -e echo "Installing dependencies on the system..." echo 'Assuming that universe repos are enabled and checking dependencies...' apt-get -y update apt-get -y dist-upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev apt-get install -y python3.7 python3.7-dev python3.7 -m pip install --upgrade pip python3.7 -m pip install numpy==1.15.0 python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).' echo 'Dependency installation/upgrade complete.'
注記
OpenCV
がこのスクリプトを使用して正常にインストールしない場合、ソースからビルドしてみることができます。詳細については、OpenCV ドキュメントの「Linux でのインストール 」、またはお使いのプラットフォーム用の他のオンラインリソースを参照してください。 - Python 2.7
#!/bin/bash set -e echo "Installing dependencies on the system..." echo 'Assuming that universe repos are enabled and checking dependencies...' apt-get -y update apt-get -y dist-upgrade apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev python-dev echo 'Install latest pip...' wget https://bootstrap.pypa.io/get-pip.py python get-pip.py rm get-pip.py pip install numpy==1.15.0 scipy echo 'Dependency installation/upgrade complete.'
-
ファイルを保存したディレクトリから、次のコマンドを実行します。
sudo nvidiajtx2.sh
ログ記録とトラブルシューティング
グループ設定に応じて、イベントログとエラーログは、CloudWatch ログ、ローカルファイルシステム、またはその両方に書き込まれます。このコネクタのログにはプレフィックス LocalInferenceServiceName
が使用されます。コネクタが予期しない動作を示した場合は、コネクタのログを確認します。このログには、通常、ML ライブラリの依存関係の不足やコネクタの起動失敗の原因など、デバッグに役立つ情報が含まれています。
AWS IoT Greengrass グループがローカルログを書き込むように設定されている場合、コネクタはログファイルを に書き込みます
。Greengrass のログ記録の詳細については、「AWS IoT Greengrass ログでのモニタリング」を参照してください。greengrass-root
/ggc/var/log/user/region
/aws/
ML イメージ分類コネクタの問題のトラブルシューティングには、以下の情報が役立ちます。
必須のシステムライブラリ
以下の各タブは、ML イメージ分類コネクタごとに必要なシステムライブラリを一覧表示します。
ライブラリ | 最小バージョン |
---|---|
ld-linux-aarch64.so.1 | GLIBC_2.17 |
libc.so.6 | GLIBC_2.17 |
libcublas.so.9.0 | 該当なし |
libcudart.so.9.0 | 該当なし |
libcudnn.so.7 | 該当なし |
libcufft.so.9.0 | 該当なし |
libcurand.so.9.0 | 該当なし |
libcusolver.so.9.0 | 該当なし |
libgcc_s.so.1 | GCC_4.2.0 |
libgomp.so.1 | GOMP_4.0、OMP_1.0 |
libm.so.6 | GLIBC_2.23 |
libpthread.so.0 | GLIBC_2.17 |
librt.so.1 | GLIBC_2.17 |
libstdc++.so.6 | GLIBCXX_3.4.21、CXXABI_1.3.8 |
問題点
症状 | ソリューション |
---|---|
Raspberry Pi で、次のエラーメッセージがログに記録される。カメラは使用していない。 |
次のコマンドを実行してドライバーを無効にします。
このオペレーションは一時的なものであり、シンボリックリンクは再起動後に消えます。再起動時にリンクを自動的に作成する方法については、OS ディストリビューションのマニュアルを参照してください。 |
ライセンス
ML イメージ分類コネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。
-
AWS SDK for Python (Boto3)
/Apache License 2.0 -
botocore
/Apache License 2.0 -
dateutil
/PSF ライセンス -
docutils
/BSD ライセンス、GNU 一般パブリックライセンス (GPL)、Python Software Foundation ライセンス、パブリックドメイン -
jmespath
/MIT ライセンス -
s3transfer
/Apache License 2.0 -
urllib3
/MIT ライセンス
Deep Neural Network Library (DNNL)
/Apache License 2.0 OpenMP* ランタイムライブラリ
/「Intel OpenMP ランタイムライブラリのライセンス」を参照してください。 mxnet
/Apache License 2.0 six
/MIT
Intel OpenMP ランタイムライブラリのライセンス。Intel® OpenMP* ランタイムはデュアルライセンスで、Intel® Parallel Studio XE Suite 製品の一部としての商用 (COM) ライセンスと、BSD オープンソース (OSS) ライセンスがあります。
このコネクタは、Greengrass Core ソフトウェアライセンス契約
変更ログ
次の表に、コネクタの各バージョンにおける変更点を示します。
バージョン |
変更 |
---|---|
2 |
モデル入力データのアップロード、MQTT トピックへの予測の発行、Amazon CloudWatch へのメトリクスの発行のために ML フィードバックコネクタの使用をサポートする |
1 |
初回リリース。 |
Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。
関連情報
-
Amazon SageMaker AI デベロッパーガイド」の「イメージ分類アルゴリズム」