NVIDIA Jetson TX2 の設定
NVIDIA Jetson TX2 でこのチュートリアルを実行するには、ソースイメージを用意して、Lambda 関数を設定します。GPU を推論に使用するには、Jetpack 3.3 でボードのイメージを作成するときに、デバイスに CUDA 9.0 と cuDNN 7.0 をインストールする必要があります。ローカルデバイスリソースも追加する必要があります。
AWS IoT Greengrass ソフトウェアをインストールできるように Jetsonを設定する方法については、「他のデバイスの設定」を参照してください。
Lambda 関数用に静的な PNG あるいは JPG 画像をダウンロードして、画像分類に使用します。この例は小さいイメージファイルで最適に動作します。
inference.py
ファイルがあるディレクトリ (あるいは、このディレクトリのサブディレクトリ) に画像ファイルを保存します。これは、ステップ 3: Lambda 推論関数を作成する でアップロードした Lambda 関数デプロイパッケージにあります。注記
代わりに、Jetson ボードにカメラを設置して、ソースイメージをキャプチャすることもできます。ただし、最初に静的イメージから開始することを強くお勧めします。
Lambda 関数の設定を編集します。「ステップ 4: Lambda 関数を Greengrass グループに追加する」の手順に従います。
[メモリ制限] の値を増やします。指定されたモデルを GPU モードで使用するには、2048 MB を使用します。
[タイムアウト] の値を 5 分に増やします。これにより、リクエストの早過ぎるタイムアウトがなくなります。セットアップ後、推論の実行には数分かかります。
[Lambda のライフサイクル] で、[Make this function long-lived and keep it running indefinitely] を選択します。
[/sys ディレクトリへの読み込みアクセス] の [Enable] を選択します。
必要なローカルデバイスリソースを追加します。
グループの設定ページで、[Resources (リソース)] を選択します。
[ローカル] タブで、[ローカルリソースの追加] を選択します。
各リソースを定義します。
[リソース名] と [デバイスパス] には、次の表の値を使用します。テーブルの行ごとに 1 つのデバイスリソースを作成します。
[リソースタイプ] で、[デバイス] を選択します。
[グループ所有者のファイルアクセス許可] で、[リソースを所有する Linux グループの OS グループアクセス許可を自動的に追加] を選択します。
[Lambda function affiliations (Lambda 関数の所属)] で、Lambda 関数への [読み取りと書き込みアクセス] を許可します。
名前
デバイスパス
nvhost-ctrl
/dev/nvhost-ctrl
nvhost-gpu
/dev/nvhost-gpu
nvhost-ctrl-gpu
/dev/nvhost-ctrl-gpu
nvhost-dbg-gpu
/dev/nvhost-dbg-gpu
nvhost-prof-gpu
/dev/nvhost-prof-gpu
nvmap
/dev/nvmap
AWS IoT Greengrass ML Inference のトラブルシューティング
テストに成功しなかった場合は、以下のトラブルシューティング手順を実行できます。Raspberry Pi のターミナルで以下のコマンドを実行します。
エラーログを確認する
root ユーザーに切り替え、
log
ディレクトリに移動します。AWS IoT Greengrass ログへのアクセスには root アクセス許可が必要です。sudo su cd /greengrass/ggc/var/log
runtime.log
でエラーがないかどうかを確認します。cat system/runtime.log | grep 'ERROR'
ユーザー定義の Lambda 関数ログでもエラーがないかどうかを確認できます。
cat user/
your-region
/your-account-id
/lambda-function-name
.log | grep 'ERROR'詳細については、「ログでのトラブルシューティング」を参照してください。
Lambda 関数が正常にデプロイされていることを確認する
/lambda
ディレクトリ内のデプロイされた Lambda の内容を一覧表示します。コマンドを実行する前に、プレースホルダーの値を置き換えます。cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:
region
:account
:function:function-name
:function-version
ls -laディレクトリに、「ステップ 3: Lambda 推論関数を作成する」でアップロードした
optimizedImageClassification.zip
デプロイパッケージと同じ内容が含まれていることを確認します。.py
ファイルと依存関係がディレクトリのルートにあることを確認します。
推論モデルが正常にデプロイされていることを確認する
Lambda ランタイムプロセスのプロセス識別番号 (PID) を見つけます。
ps aux | grep
lambda-function-name
出力では、Lambda ランタイムプロセスの行の 2 列目に PID が表示されます。
Lambda ランタイム名前空間を入力します。コマンドを実行する前に、
pid
プレースホルダーの値を置き換えてください。注記
このディレクトリとその内容は、Lambda ランタイム名前空間にあるため、通常の名前空間には表示されません。
sudo nsenter -t
pid
-m /bin/bashML リソース用に指定したローカルディレクトリの内容を一覧表示します。
注記
ML リソースのパスが
ml_model
以外の場合は、ここで置き換えてください。cd /ml_model ls -ls
以下のファイルが表示されます。
56 -rw-r--r-- 1 ggc_user ggc_group 56703 Oct 29 20:07 model.json 196152 -rw-r--r-- 1 ggc_user ggc_group 200855043 Oct 29 20:08 model.params 256 -rw-r--r-- 1 ggc_user ggc_group 261848 Oct 29 20:07 model.so 32 -rw-r--r-- 1 ggc_user ggc_group 30564 Oct 29 20:08 synset.txt
Lambda 関数で /dev/dri/renderD128
が見つからない
このエラーは、OpenCL から必要な GPU デバイスに接続できない場合に発生します。Lambda 関数に必要なデバイスでデバイスリソースを作成する必要があります。
次のステップ
次は、最適化された他のモデルを試します。詳細については、Amazon SageMaker Neo のドキュメントを参照してください。