2023 年 6 月 30 日に AWS IoT Greengrass Version 1 は延長ライフサイクルフェーズに入りました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日付以降、AWS IoT Greengrass V1 の機能、拡張機能、バグ修正、またはセキュリティパッチを提供するアップデートはリリースされません。AWS IoT Greengrass V1 で稼働中のデバイスは中断されず、引き続き動作し、クラウドに接続できます。重要な新機能や新たなプラットフォームのサポートが追加された AWS IoT Greengrass Version 2 への移行を強くお勧めします。
ML イメージ分類コネクタ
ML イメージ分類コネクタは、AWS IoT Greengrass コアで実行する機械学習 (ML) 推論サービスを提供します。このローカル推論サービスは、SageMaker イメージ分類アルゴリズムによってトレーニングされたモデルを使用してイメージ分類を実行します。
ユーザー定義の Lambda 関数は AWS IoT Greengrass Machine Learning SDK を使用して、ローカル推論サービスに推論リクエストを送信します。このサービスは、推論をローカルで実行し、入力イメージが特定のカテゴリに属する確率を返します。
AWS IoT Greengrass は、このコネクタの以下のバージョンを提供します。これは複数のプラットフォームで使用できます。
- Version 2
-
コネクタ |
説明と ARN |
ML イメージ分類 Aarch64 JTX2 |
NVIDIA Jetson TX2 のイメージ分類推論サービス。GPU アクセラレーションをサポートします。
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationAarch64JTX2/versions/2 |
ML イメージ分類 x86_64 |
x86_64 プラットフォーム用のイメージ分類推論サービス。
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationx86-64/versions/2 |
ML イメージ分類 ARMv7 |
ARMv7 プラットフォーム用のイメージ分類推論サービス。
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationARMv7/versions/2 |
- Version 1
-
コネクタ |
説明と ARN |
ML イメージ分類 Aarch64 JTX2 |
NVIDIA Jetson TX2 のイメージ分類推論サービス。GPU アクセラレーションをサポートします。
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationAarch64JTX2/versions/1 |
ML イメージ分類 x86_64 |
x86_64 プラットフォーム用のイメージ分類推論サービス。
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationx86-64/versions/1 |
ML イメージ分類 Armv7 |
Armv7 プラットフォーム用のイメージ分類推論サービス。
ARN: arn:aws:greengrass:region ::/connectors/ImageClassificationARMv7/versions/1 |
バージョンの変更については、「Changelog」を参照してください。
要件
これらのコネクタには以下の要件があります。
- Version 2
-
-
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 Core への MXNet 依存関係のインストール」を参照してください。
-
SageMaker モデルソースを参照する Greengrass グループの ML リソース。このモデルは、SageMaker イメージ分類アルゴリズムによってトレーニングされている必要があります。詳細については、「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 が必要です。
- Version 1
-
-
AWS IoT Greengrass Core ソフトウェア v1.7 以降。
-
Python バージョン 2.7 が Core デバイスにインストールされ、PATH 環境変数に追加されている。
-
Core デバイスにインストールされた Apache MXNet フレームワークの依存関係。詳細については、「AWS IoT Greengrass Core への MXNet 依存関係のインストール」を参照してください。
-
SageMaker モデルソースを参照する Greengrass グループの ML リソース。このモデルは、SageMaker イメージ分類アルゴリズムによってトレーニングされている必要があります。詳細については、「Amazon SageMaker デベロッパーガイド」の「イメージ分類アルゴリズム」を参照してください。
-
以下の 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.0.0 以降が必要です。
コネクタパラメータ
これらのコネクタでは、以下のパラメータを使用できます。
- Version 2
-
MLModelDestinationPath
-
Lambda 環境内の ML リソースの絶対ローカルパス。これは、ML リソースに指定されたターゲットパスです。
コンソールに ML リソースを作成した場合、これはローカルパスです。
AWS IoT コンソールでの表示名: [Model destination path] (モデルのターゲットパス)
必須: true
タイプ: string
有効なパターン: .+
MLModelResourceId
-
ソースモデルを参照する ML リソースの ID。
AWS IoT コンソールでの表示名: [SageMaker job ARN resource] (SageMaker ジョブ ARN リソース)
必須: true
タイプ: string
有効なパターン: [a-zA-Z0-9:_-]+
MLModelSageMakerJobArn
-
SageMaker モデルソースを表す SageMaker トレーニングジョブの ARN。このモデルは、SageMaker イメージ分類アルゴリズムによってトレーニングされている必要があります。
AWS IoT コンソールでの表示名: [SageMaker job ARN] (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 コンソールでの表示名: [Local inference service name] (ローカル推論サービス名)
必須: true
タイプ: string
有効なパターン: [a-zA-Z0-9][a-zA-Z0-9-]{1,62}
LocalInferenceServiceTimeoutSeconds
-
推論リクエストが終了するまでの時間 (秒単位)。最小値は 1 です。
AWS IoT コンソールでの表示名: [Timeout (second)] (タイムアウト (秒))
必須: true
タイプ: string
有効なパターン: [1-9][0-9]*
LocalInferenceServiceMemoryLimitKB
-
サービスがアクセスできるメモリの量 (KB 単位)。最小値は 1 です。
AWS IoT コンソールでの表示名: [Memory limit (KB)] (メモリ制限 (KB))
必須: true
タイプ: string
有効なパターン: [1-9][0-9]*
GPUAcceleration
-
CPU または GPU (アクセラレーション) コンピューティングの場合。このプロパティは ML イメージ分類 Aarch64 JTX2 コネクタにのみ適用されます。
AWS IoTコンソールでの表示名: [GPU acceleration] (GPU アクセラレーション)
必須: true
タイプ: string
有効な値: CPU
または GPU
MLFeedbackConnectorConfigId
-
モデル入力データのアップロードに使用するフィードバック設定の ID。これは、ML フィードバックコネクタに定義されたフィードバック設定の ID と一致する必要があります。
この パラメータは、ML フィードバックコネクタを使用してモデル入力データをアップロードし、予測を MQTT トピックに発行する場合にのみ必要です。
AWS IoT コンソールでの表示名: [ML Feedback connector configuration ID] (ML フィードバックコネクタ設定 ID)
必須: false
タイプ: string
有効なパターン: ^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$
- Version 1
-
MLModelDestinationPath
-
Lambda 環境内の ML リソースの絶対ローカルパス。これは、ML リソースに指定されたターゲットパスです。
コンソールに ML リソースを作成した場合、これはローカルパスです。
AWS IoT コンソールでの表示名: [Model destination path] (モデルのターゲットパス)
必須: true
タイプ: string
有効なパターン: .+
MLModelResourceId
-
ソースモデルを参照する ML リソースの ID。
AWS IoT コンソールでの表示名: [SageMaker job ARN resource] (SageMaker ジョブ ARN リソース)
必須: true
タイプ: string
有効なパターン: [a-zA-Z0-9:_-]+
MLModelSageMakerJobArn
-
SageMaker モデルソースを表す SageMaker トレーニングジョブの ARN。このモデルは、SageMaker イメージ分類アルゴリズムによってトレーニングされている必要があります。
AWS IoT コンソールでの表示名: [SageMaker job ARN] (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 コンソールでの表示名: [Local inference service name] (ローカル推論サービス名)
必須: true
タイプ: string
有効なパターン: [a-zA-Z0-9][a-zA-Z0-9-]{1,62}
LocalInferenceServiceTimeoutSeconds
-
推論リクエストが終了するまでの時間 (秒単位)。最小値は 1 です。
AWS IoT コンソールでの表示名: [Timeout (second)] (タイムアウト (秒))
必須: true
タイプ: string
有効なパターン: [1-9][0-9]*
LocalInferenceServiceMemoryLimitKB
-
サービスがアクセスできるメモリの量 (KB 単位)。最小値は 1 です。
AWS IoT コンソールでの表示名: [Memory limit (KB)] (メモリ制限 (KB))
必須: true
タイプ: string
有効なパターン: [1-9][0-9]*
GPUAcceleration
-
CPU または GPU (アクセラレーション) コンピューティングの場合。このプロパティは ML イメージ分類 Aarch64 JTX2 コネクタにのみ適用されます。
AWS IoTコンソールでの表示名: [GPU acceleration] (GPU アクセラレーション)
必須: true
タイプ: string
有効な値: CPU
または GPU
サンプルコネクタを作成する (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 コンソールでは、グループの [Connectors] (コネクタ) ページからコネクタを追加できます。詳細については、「Greengrass コネクタの開始方法 (コンソール)」を参照してください。
これらのコネクタは、イメージファイルを入力として受け入れます。入力イメージファイルは jpeg
または png
形式である必要があります。詳細については、「使用例」を参照してください。
これらのコネクタは MQTT メッセージを入力データとして受け入れません。
出力データ
これらのコネクタは、入力イメージで識別されたオブジェクトのフォーマットされた予測を返します。
[0.3,0.1,0.04,...]
予測には、モデルトレーニング中にトレーニングデータセットで使用されたカテゴリに対応する値のリストが含まれます。各値は、イメージが対応するカテゴリに分類される確率を表します。確率が最も高いカテゴリが主要な予測です。
これらのコネクタは MQTT メッセージを出力データとして公開しません。
使用例
次の Lambda 関数の例は、AWS IoT Greengrass Machine Learning SDK を使用して、ML イメージ分類コネクタと対話します。
この例では、SDK クライアントを初期化し、SDK の invoke_inference_service
関数の同期呼び出しにより、ローカル推論サービスを呼び出します。次に、アルゴリズムタイプ、サービス名、イメージタイプ、イメージコンテンツを渡します。その後、サービスのレスポンスを解析して、確率の結果 (予測) を取得します。
- Python 3.7
-
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
- Python 2.7
-
import logging
from threading import Timer
import numpy
import greengrass_machine_learning_sdk as gg_ml
# The inference input image.
with open("/test_img/test.jpg", "rb") as f:
content = f.read()
client = gg_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 gg_ml.GreengrassInferenceException as e:
logging.info('Inference exception %s("%s")', e.__class__.__name__, e)
return
except gg_ml.GreengrassDependencyException as e:
logging.info('Dependency exception %s("%s")', e.__class__.__name__, e)
return
logging.info("Response: %s", resp)
predictions = resp["Body"].read()
logging.info("Predictions: %s", 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]
predictions_arr = numpy.fromstring(predictions, sep=",")
logging.info("Split into %s predictions.", len(predictions_arr))
# Perform business logic that relies on predictions_arr, which is an array
# of probabilities.
# Schedule the infer() function to run again in one second.
Timer(1, infer).start()
infer()
# In this example, the required AWS Lambda handler is never called.
def function_handler(event, context):
return
AWS IoT Greengrass Machine Learning SDK の invoke_inference_service
関数は、以下の引数を受け入れます。
引数 |
説明 |
AlgoType
|
推論に使用するアルゴリズムタイプの名前。現在は、image-classification のみがサポートされます。
必須: true
タイプ: string
有効な値: image-classification |
ServiceName
|
ローカル推論サービスの名前。コネクタを設定したときに LocalInferenceServiceName パラメータに指定した名前を使用します。
必須: true
タイプ: string |
ContentType
|
入力イメージの MIME タイプ。
必須: true
タイプ: string
有効な値: image/jpeg, image/png |
Body
|
入力イメージファイルの内容。
必須: true
タイプ: binary |
AWS IoT Greengrass Core への MXNet 依存関係のインストール
ML イメージ分類コネクタを使用するには、Apache MXNet フレームワークの依存関係をコアデバイスにインストールする必要があります。コネクタは、このフレームワークを使用して ML モデルを提供します。
これらのコネクタは、プリコンパイルされた MXNet ライブラリにバンドルされているため、MXNet フレームワークをコアデバイスにインストールする必要はありません。
AWS IoT Greengrass は、以下の一般的なプラットフォームとデバイスの依存関係をインストールするスクリプト (またはインストールするためのリファレンスとして使用するスクリプト) を提供します。別のプラットフォームやデバイスを使用している場合は、設定に応じた MXNet ドキュメントを参照してください。
MXNet の依存関係をインストールする前に、必要なシステムライブラリ (指定された最小バージョン) がデバイスに存在することを確認してください。
- NVIDIA Jetson TX2
-
-
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.7Python 2.7
- 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
- x86_64 (Ubuntu or Amazon Linux)
-
-
以下のインストールスクリプトのコピーを Core デバイス上の x86_64.sh
というファイルに保存します。
Python 3.7Python 2.7
- Python 3.7
#!/bin/bash
set -e
echo "Installing dependencies on the system..."
release=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
if [ "$release" == '"Ubuntu"' ]; then
# Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so
# this is mostly to prepare dependencies on Ubuntu EC2 instance.
apt-get -y update
apt-get -y dist-upgrade
apt-get install -y libgfortran3 libsm6 libxext6 libxrender1
apt-get install -y python3.7 python3.7-dev
elif [ "$release" == '"Amazon Linux"' ]; then
# Amazon Linux. Expect python to be installed already
yum -y update
yum -y upgrade
yum install -y compat-gcc-48-libgfortran libSM libXrender libXext
else
echo "OS Release not supported: $release"
exit 1
fi
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..."
release=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
if [ "$release" == '"Ubuntu"' ]; then
# Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so
# this is mostly to prepare dependencies on Ubuntu EC2 instance.
apt-get -y update
apt-get -y dist-upgrade
apt-get install -y libgfortran3 libsm6 libxext6 libxrender1 python-dev python-pip
elif [ "$release" == '"Amazon Linux"' ]; then
# Amazon Linux. Expect python to be installed already
yum -y update
yum -y upgrade
yum install -y compat-gcc-48-libgfortran libSM libXrender libXext python-pip
else
echo "OS Release not supported: $release"
exit 1
fi
pip install numpy==1.15.0 scipy opencv-python
echo 'Dependency installation/upgrade complete.'
-
ファイルを保存したディレクトリから、次のコマンドを実行します。
sudo x86_64.sh
- Armv7 (Raspberry Pi)
-
-
以下のインストールスクリプトのコピーを Core デバイス上の armv7l.sh
というファイルに保存します。
Python 3.7Python 2.7
- Python 3.7
#!/bin/bash
set -e
echo "Installing dependencies on the system..."
apt-get update
apt-get -y upgrade
apt-get install -y liblapack3 libopenblas-dev liblapack-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..."
apt-get update
apt-get -y upgrade
apt-get install -y liblapack3 libopenblas-dev liblapack-dev python-dev
# python-opencv depends on python-numpy. The latest version in the APT repository is python-numpy-1.8.2
# This script installs python-numpy first so that python-opencv can be installed, and then install the latest
# numpy-1.15.x with pip
apt-get install -y python-numpy python-opencv
dpkg --remove --force-depends python-numpy
echo 'Install latest pip...'
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
rm get-pip.py
pip install --upgrade numpy==1.15.0 picamera scipy
echo 'Dependency installation/upgrade complete.'
-
ファイルを保存したディレクトリから、次のコマンドを実行します。
sudo bash armv7l.sh
Raspberry Pi では、pip
を使用して機械学習の依存関係をインストールすると、メモリを大量に消費し、デバイスがメモリ不足になって応答しなくなる可能性があります。回避策として、スワップサイズを一時的に増やすことができます。
/etc/dphys-swapfile
で、CONF_SWAPSIZE
変数の値を増やし、次のコマンドを実行して dphys-swapfile
を再起動します。
/etc/init.d/dphys-swapfile restart
ログ記録とトラブルシューティング
グループ設定に応じて、イベントログとエラーログは、CloudWatch ログ、ローカルファイルシステム、またはその両方に書き込まれます。このコネクタのログにはプレフィックス LocalInferenceServiceName
が使用されます。コネクタが予期しない動作を示した場合は、コネクタのログを確認します。このログには、通常、ML ライブラリの依存関係の不足やコネクタの起動失敗の原因など、デバッグに役立つ情報が含まれています。
AWS IoT Greengrass グループがローカルログを書き込むように設定されている場合、コネクタはにログファイルを greengrass-root
/ggc/var/log/user/region
/aws/
に書き込みます。Greengrass のログ記録の詳細については、「AWS IoT Greengrass ログでのモニタリング」を参照してください。
ML イメージ分類コネクタの問題のトラブルシューティングには、以下の情報が役立ちます。
必須のシステムライブラリ
以下の各タブは、ML イメージ分類コネクタごとに必要なシステムライブラリを一覧表示します。
- ML Image Classification Aarch64 JTX2
-
[Library] (ライブラリ) |
最小バージョン |
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 |
- ML Image Classification x86_64
-
[Library] (ライブラリ) |
最小バージョン |
ld-linux-x86-64.so.2 | GCC_4.0.0 |
libc.so.6 | GLIBC_2.4 |
libgfortran.so.3 | GFORTRAN_1.0 |
libm.so.6 | GLIBC_2.23 |
libpthread.so.0 | GLIBC_2.2.5 |
librt.so.1 | GLIBC_2.2.5 |
libstdc++.so.6 | CXXABI_1.3.8、GLIBCXX_3.4.21 |
- ML Image Classification Armv7
-
[Library] (ライブラリ) |
最小バージョン |
ld-linux-armhf.so.3 | GLIBC_2.4 |
libc.so.6 | GLIBC_2.7 |
libgcc_s.so.1 | GCC_4.0.0 |
libgfortran.so.3 | GFORTRAN_1.0 |
libm.so.6 | GLIBC_2.4 |
libpthread.so.0 | GLIBC_2.4 |
librt.so.1 | GLIBC_2.4 |
libstdc++.so.6 | CXXABI_1.3.8、CXXABI_ARM_1.3.3、GLIBCXX_3.4.20 |
問題点
症状 |
ソリューション |
Raspberry Pi で、次のエラーメッセージがログに記録される。カメラは使用していない。Failed to initialize libdc1394
|
次のコマンドを実行してドライバーを無効にします。
sudo ln /dev/null /dev/raw1394
このオペレーションは一時的なものであり、シンボリックリンクは再起動後に消えます。再起動時にリンクを自動的に作成する方法については、OS ディストリビューションのマニュアルを参照してください。
|
ライセンス
ML イメージ分類コネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。
Intel OpenMP ランタイムライブラリのライセンス。Intel® OpenMP* ランタイムはデュアルライセンスで、Intel® Parallel Studio XE Suite 製品の一部としての商用 (COM) ライセンスと、BSD オープンソース (OSS) ライセンスがあります。
このコネクタは、Greengrass Core ソフトウェアライセンス契約に従ってリリースされます。
変更ログ
次の表に、コネクタの各バージョンにおける変更点を示します。
Version |
変更 |
2 |
モデル入力データのアップロード、MQTT トピックへの予測の発行、Amazon CloudWatch へのメトリクスの発行のために ML フィードバックコネクタの使用をサポートする MLFeedbackConnectorConfigId パラメータが追加されました。
|
1 |
初回リリース。
|
Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。
以下も参照してください。