ML イメージ分類コネクタ - AWS IoT Greengrass

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 イメージ分類アルゴリズムによってトレーニングされたモデルを使用してイメージ分類を実行します。

ユーザー定義の 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 は、AWS IoT Greengrass Machine Learning SDK のダウンロードページからダウンロードできます。

この例では、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
  1. CUDA Toolkit 9.0 と cuDNN 7.0 をインストールします。開始方法チュートリアルの「他のデバイスの設定」の手順に従うことができます。

  2. コネクタでコミュニティ管理のオープンなソフトウェアをインストールできるように、ユニバースリポジトリを有効にします。詳細については、Ubuntu ドキュメントの Repositories/Ubuntu を参照してください。

    1. /etc/apt/sources.list ファイルを開きます。

    2. 以下の行のコメントが解除されていることを確認してください。

      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
  3. 以下のインストールスクリプトのコピーを 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.'
  4. ファイルを保存したディレクトリから、次のコマンドを実行します。

    sudo nvidiajtx2.sh
x86_64 (Ubuntu or Amazon Linux)
  1. 以下のインストールスクリプトのコピーを 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.'
  2. ファイルを保存したディレクトリから、次のコマンドを実行します。

    sudo x86_64.sh
Armv7 (Raspberry Pi)
  1. 以下のインストールスクリプトのコピーを 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.'
  2. ファイルを保存したディレクトリから、次のコマンドを実行します。

    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.1GLIBC_2.17
libc.so.6GLIBC_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.1GCC_4.2.0
libgomp.so.1GOMP_4.0、OMP_1.0
libm.so.6GLIBC_2.23
libpthread.so.0GLIBC_2.17
librt.so.1GLIBC_2.17
libstdc++.so.6GLIBCXX_3.4.21、CXXABI_1.3.8
ML Image Classification x86_64
[Library] (ライブラリ) 最小バージョン
ld-linux-x86-64.so.2GCC_4.0.0
libc.so.6GLIBC_2.4
libgfortran.so.3GFORTRAN_1.0
libm.so.6GLIBC_2.23
libpthread.so.0GLIBC_2.2.5
librt.so.1GLIBC_2.2.5
libstdc++.so.6CXXABI_1.3.8、GLIBCXX_3.4.21
ML Image Classification Armv7
[Library] (ライブラリ) 最小バージョン
ld-linux-armhf.so.3GLIBC_2.4
libc.so.6GLIBC_2.7
libgcc_s.so.1GCC_4.0.0
libgfortran.so.3GFORTRAN_1.0
libm.so.6GLIBC_2.4
libpthread.so.0GLIBC_2.4
librt.so.1GLIBC_2.4
libstdc++.so.6CXXABI_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 ソフトウェアライセンス契約に従ってリリースされます。

変更ログ

次の表に、コネクタの各バージョンにおける変更点を示します。

バージョン

変更

2

モデル入力データのアップロード、MQTT トピックへの予測の発行、Amazon CloudWatch へのメトリクスの発行のために ML フィードバックコネクタの使用をサポートする MLFeedbackConnectorConfigId パラメータが追加されました。

1

初回リリース。

Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。

以下も参照してください。