2022/02/26

NVIDIA DeepStreamの推論結果をRedisに送信するサンプルアプリケーションの実行環境を構築する

概要

NVIDIA DeepStream SDKには,推論結果をサーバに送信するためのGst-nvmsgbrokerプラグインが用意されています. このGst-nvmsgbrokerプラグインはRedisのほか,プロトコルアダプタライブラリを使用することで,Kafka,Azure IoTやAMQPなどの各種プロトコルに対応します.

Gst-nvmsgbrokerプラグインを使用したサンプルアプリケーションとプロトコルアダプタライブラリはいくつか用意されていますが,これらのライブラリには各種サーバへの接続方法の記載はあれど,各種サーバの構築方法は紹介されていません. 私はRedisも含めてデータベースの構築や運用の経験がなかったので,サンプルアプリケーションを実行するまでに結構時間がかかってしまいました. そこで本記事では,私が構築したNVIDIA DeepStreamの推論結果をRedisに送信するサンプルアプリケーションの実行環境について紹介します.

本記事で紹介する実行環境は,GitHubで公開しています.See README.md for a quick start in English.

私の開発環境は下記のとおりです.

OS Ubuntu 20.04.3 LTS (amd64)
GPU GeForce GTX 1070 Ti
Driver Version 510.47.03
CUDA Version 11.6
Docker version 20.10.12, build e91ed57
docker-compose version 1.29.2, build 5becea4c
DeepStream nvcr.io/nvidia/deepstream:6.0-devel
Gst-nvmsgbrokerプラグインを使用したサンプルアプリケーション

列挙しておきます.非公式のものも含めて他にもある場合はコメントで教えていただけると幸いです. この記事ではC実装のdeepstream-test4を取り上げますが,C実装のdeepstream-test5やPython実装のdeepstream-test4も今回構築した実行環境で試すことができます.

実行環境の構成

実行環境はdocker-compose.ymlにまとめています.3つのDockerコンテナが起動します.

  • redis
    • RedisのDockerコンテナです
  • redisinsight
    • ウェブブラウザからアクセスして使用する,RedisのGUIツール,RedisInsightのDockerコンテナです.必須ではありませんが,サンプルアプリケーションの動作確認に便利です
  • nvds
    • DeepStreamのDockerコンテナです.C実装のdeepstream-test4のビルド済みバイナリとソースコードも含まれています
実行方法
  1. GitHubからdocker-compose.ymlをダウンロードします.
  2. 1
    2
    $ cd deepstream-test4-c-redis/
  3. Dockerコンテナを起動します.初回はDockerイメージのダウンロードがあり起動に時間を要する場合があります
  4. 1
    2
    3
    4
    5
    6
    $ docker-compose up -d
    Creating network "deepstream-test4-c-redis_frontend" with the default driver
    Creating volume "deepstream-test4-c-redis_redisinsight" with default driver
    Creating redis ... done
    Creating nvds         ... done
    Creating redisinsight ... done
  5. Redisが使用できるかどうか確認します.テストデータの登録と取得を行います
  6. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ docker exec -it redis /bin/bash
    root@redis:/data# redis-cli
    127.0.0.1:6379> set testKey testValue
    OK
    127.0.0.1:6379> keys *
    1) "testKey"
    127.0.0.1:6379> get testKey
    "testValue"
    127.0.0.1:6379> exit
    root@redis:/data# exit
  7. テストデータの登録結果をRedisInsightで確認します
    • ウェブブラウザで http://localhost:8001 にアクセスします
    • 「EULA AND PRIVACY SETTINGS」が表示されたら,内容にしたがってCONFIRMを押下します
    • RedisInsightのスクリーンショット
    • Redisに接続します.「I already have a database」を選択します
    • RedisInsightのスクリーンショット
    • 「Connect to a Redis Database」を選択します
    • RedisInsightのスクリーンショット
    • 下図のように入力し,ADD REDIS DATABASEを押下します
    • RedisInsightのスクリーンショット
    • Redisデータベース,localが追加されました.localを選択します
    • RedisInsightのスクリーンショット
    • 左のメニューからBrowserを選択すると,testKeyが登録されていることがわかります.なお下図では他にds-metaが登録されていますが,これは以降の手順でサンプルアプリケーションを実行した後で登録されるものです
    • RedisInsightのスクリーンショット
  8. サンプルアプリケーションを実行します.入力動画はDockerイメージに含まれるサンプル動画を使用します.実行中は物体検出結果を表示するウィンドウが表示され,自動的に終了します
  9. 1
    2
    3
    4
    $ xhost +
    $ docker exec -it nvds /bin/bash
    # cd sources/apps/sample_apps/deepstream-test4/
    # deepstream-test4-app -i ../../../../samples/streams/sample_720p.h264 -p /opt/nvidia/deepstream/deepstream-6.0/lib/libnvds_redis_proto.so --conn-str="redis;6379" -t ds-meta -s 0
  10. 推論結果がRedisに送信されていることをCUIで確認します."ds-meta"のKeyが増えています
  11. 1
    2
    3
    4
    5
    $ docker exec -it redis /bin/bash
    root@redis:/data# redis-cli
    127.0.0.1:6379> keys *
    1) "ds-meta"
    2) "testKey"
  12. 推論結果がRedisに登録されていることをRedisInsightで確認します
    • ウェブブラウザで http://localhost:8001 にアクセスし,Redisデータベースのlocalを選択します
    • 左のメニューからStreamsを選択すると,ds-metaが登録されていることがわかります.metadataに推論結果が含まれています
    • RedisInsightのスクリーンショット
関連プロジェクト

推論結果の送信先としてRedisではなくKafkaを使用する場合の実行環境も構築しました.下記で公開しています.

製品紹介

0 件のコメント:

コメントを投稿