Aupera

VMSS (Aupera Implementation) – Video Machine-Learning Streaming Server

VMSS (Video Machine-learning Streaming Server) は、「サーバー」プロセスとして機能するソフトウェア アプリケーションであり、複数のビデオ ストリームに動画分析サービスを提供し、サーバー システムにある複数の FPGA リソースを効率的に利用します。Aupera 社とザイリンクスが共同で開発した VMSS フレームワークは、2 つのアクセラレータ カード (Alveo U30 および U50LV) で動作可能です。FPGA に詳しくない開発者でも FPGA プラットフォームを活用でき、さらなる互換性を備えるように管理されています。このソリューションには、VMSS フレームワーク、前処理、機械学習の推論、後処理のプラグインが含まれています。

その他のご質問、またはユーザー エクスペリエンスに関する問題は、vmss@auperatech.com、または vmss@xilinx.com へご連絡ください。

ベンダー: Aupera

更新日: 2021 年 3 月 31 日

サイズ: 4.3G

コンテナー バージョン: general_vmss_v1.2

評価または購入

この製品を評価または購入する権限を取得します。


無償トライアルで下記のサンプル アプリケーションを実行できます。


運用オプション

このアプリケーションはコンテナー化されており、クラウドまたはオンプレミス上で数分で簡単に実行できます。

オンプレミス
Alveo U30
製品の詳細および購入
  • ザイリンクス ランタイム: 202010.2.6.655 および 202020.2.8.726
  • ターゲット プラットフォーム:
    U30 - U30_Rel_v0.9 or RC5_5
Alveo U50LV
製品の詳細および購入
  • ザイリンクス ランタイム:
    202010.2.6.655 および 202020.2.8.726
  • ターゲット プラットフォーム: U50LV - xilinx_u50lv_gen3x4_xdma_base_2

 


評価を開始する

運用方法に応じた手順に従ってください。

Alveo U30/U50

1.

VMSS の Docker およびドライバーのインストール

1.1 事前に必要なもの

  1. Docker イメージ ファイルを 1 つ含む Aupera リリース パッケージ: xilinxpartners/aupera_general_vmss:v1.2
  2. xcu30 デバイスが 2 個搭載された U30 ボードを 1 つ。Satellite Controller ファームウェアのバージョンは、 6.3.2 以上が必要です。
  3. U50LV ボード (1 個)
  4. 1 つの x86 Ubuntu 16.04/18.04 は、U50LV 用に PCIe x16 を 1 つサポートし、U30 用に 2 つの x4 分岐として PCIex8 を 1 つサポートします。ここでは、このコンピューターを 「x86_host」 と呼びます。
  5. x86_host 用のインターネット接続

1.2 VMSS のドライバーおよび Docker のインストール手順

1. x86_host で必要なソフトウェアを準備します。

    $sudo apt update 
$sudo apt install make build-essential nfs-kernel-server docker docker-containerd docker.io 
$sudo docker pull mongo:latest

2. /etc/sysctl.conf を変更して、IP 転送の net.ipv4.ip_forward=1 を有効にします。

    $sudo vim /etc/sysctl.conf 
$sudo service networking restart

3. Docker イメージを読み込んで、Docker の中に入ります。

    $sudo docker load -i general_vmss_${version}.tar 
$docker run --cap-add sys_admin --cap-add NET_ADMIN --cap-add NET_RAW --privileged=true --network=bridge --hostname=general -it -v $(pwd):$(pwd) -w $(pwd) -e NFS_ABS_PATH=$(pwd) --name=<CONTAINER_NAME> <REPOSITORY>:<TAG>  bash

ここで、<REPOSITORY>:<TAG> はリポジトリ名です (例: general_vmss:v1.0)。これは、コマンド 「sudo docker images」 で取得できます。<CONTAINER_NAME> はユーザーが定義したコンテナー名です (例: test)。<NFS_ABS_PATH> は、nfs 共有ディレクトリであり、Docker コンテナーのワークスペースでもあります。nfs を現在のディレクトリとして使用しています。

次回 x86_host を再起動するときは、このシェルを実行する必要はなく、次のコマンドを実行するだけで、Docker コンテナー内に入ることができます。

    $sudo docker container  <CONTAINER NAME> start
$sudo docker container exec -it <CONTAINER NAME> /bin/bash

4. nfs サービスを起動し、nfs ファイル (Docker 内)を抽出します。

    /root/nfs.sh

${NFS_ABS_PATH}: に、次のようなファイルとディレクトリが表示されます。

├── BOOT_full_RC5_5.bin
├── EasyDarwin
├── U30
├── VMSS_APP
├── vmss_drivers.tar.gz
├── xrt_202010.2.6.655-amd64.deb
└── xu30-qspi-burn-58553330_10120113-2.9.3-build111.bin

注記: このシェルは、x86_host が再起動するたびに実行する必要があります。

5. VMSS ドライバー をインストールします (Docker 外)。

    $tar -xzvf vmss_drivers.tar.gz 
      $cd vmss_drivers 
      $sudo ./install.sh

6. VMSS ドライバーのロードが完了したことを確認します (Docker 外)。

    $lsmod | grep xocl 
$lsmod | grep xdma

注記: x86_host が再起動すると、VMSS ドライバーは自動的にロードされます。

7. MongoDB の Docker を実行します (これがない場合はダウンロードが必要)。

    $sudo docker run --name mongo --rm -d -p 27017:27017 mongo

注記: VMSS Docker コンテナー内のファイル VMSS_APP/server/conf/plugin.cfg を変更して、ホストの IP アドレスに一致するように mongo_url を変更する必要があります。
注記: この手順は、x86_host が再起動するたびに実行する必要があります。


2.

評価ライセンスの取得

お問い合わせフォームをご利用のうえ、ご連絡ください。


2.1 ザイリンクス アプリ ストア アカウント

  1. Xilinx App Store アカウントをセットアップします。 (https://appstore.xilinx.com/ -> [Manage Account])
  2. ザイリンクス アプリ ストアから、VMSS 製品の評価ライセンスを取得します。この製品は、フローティング ライセンスまたはノードロック ライセンスで購入できます。

    注記
    : 各 U30 ボードには 2 つのデバイスが搭載されているため、これらを活用するには 2 つのノードが必要になります。

  3. アカウント用として、1 個以上の cred.json file (access key) を作成する必要があります (Manage Account -> Access Key -> Create an Access Key -> Download JSON).このファイルは、FPGA 実行時にアプリ ストアのアカウントを識別するため、${NFS_PATH}U30/drm/cred.json ディレクトリに置いておく必要があります。この NFS_PATH は、Docker が x86_host と通信するためにユーザーが指定した共有ディレクトリです。

2.2 ノードロック ライセンス

  1. ${NFS_PATH}U30/drm/license_conf/nodelocked/conf.json にある Docker イメージ内のノードロック ライセンス構成ファイルを ${NFS_PATH}U30/drm/conf.json にコピーする必要があります。
  2. ストアで購入したノードロック ライセンスを使用するためには、U30 をインターネットに接続して、ライセンス ファイルを生成する必要があります。ライセンス ファイルが生成された後、オフライン中は DRM プロテクションをアンロックできます。そして生成された特定の FPGA の DNA に対してのみ有効になります。

2.3 フローティング ライセンス / 無償トライアル

  1. フローティング ライセンス/無償トライアルの構成ファイルは、license_conf/floating です。${NFS_PATH}U30/drm/license_conf/floating/conf.json にある Docker イメージ内のフローティング ライセンス構成ファイルを ${NFS_PATH}U30/drm/conf.json にコピーする必要があります。
  2. ストアで購入したフローティング ライセンスは、すぐに使用できます。フローティング ライセンスはオフラインで使用できません。

3.

VMSS の一般リリース ファームウェアとシェルのインストール

3.1 U30 ファームウェアのインストール

3.1.1 事前に必要なもの

  • Aupera U30 ファームウェアの QSPI フラッシュ ダンプ ファイル。ファームウェア ファイル名は、xu30-qspi-burn<version and datecode>.bin。
  • xcu30 デバイスが 2 個搭載された 1 個の U30 ボード
  • ザイリンクスの XRT-2.6.655 がインストールされた、PCIe x8 分岐をサポートする x86 Ubuntu 16.04/18.04 マシンを 1 つ (ホストで sudo dpkg -i xrt_202010.2.6.655-xxx.deb を実行)。xrt パッケージはこちらからダウンロード可能。  

3.1.2 U30 ファームウェアのインストール手順

1. XRT 環境を呼び出します。

    $cd /opt/xilinx/xrt/  
$source setup.sh

2. サテライト コントローラー (SC) ファームウェアのバージョンを確認します。

    $sudo /opt/xilinx/xrt/bin/xbmgmt flash --scan

次のようになります。

    Card [0000:07:00.0]
    Card type:          u30
    Flash type:         QSPI_PS
    Flashable partition running on FPGA:
        xilinx_U30_xdma_1_1,[ID=0x5ea44206],[SC=6.3.2]
    Flashable partitions installed in system:   (None)

Card [0000:08:00.0]
    Card type:          u30
    Flash type:         QSPI_PS
    Flashable partition running on FPGA:
        xilinx_U30_xdma_1_1,[ID=0x5ea44206],[SC=6.3.2]
    Flashable partitions installed in system:   (None)

6.3.2 より古いバージョンの場合は、ザイリンクスまたは Aupera 社のサポートに連絡して SC ファームウェアをアップグレードしてください。


3. ボードの PCIe バスを読み出します。

    $sudo lspci -d 10ee:

次のようになります。

    07:00.0 Processing accelerators: Xilinx Corporation Device 503d (rev 02)
07:00.1 Processing accelerators: Xilinx Corporation Device 503c (rev 02)
08:00.0 Processing accelerators: Xilinx Corporation Device 503d (rev 02)
08:00.1 Processing accelerators: Xilinx Corporation Device 503c (rev 02)

BDF ID の 07:00.1 や 08:00.1 は card_id であり、次の手順で使用します。1 つの U30 ボードには 2 つの FPGA デバイス (PCIe エンドポイント) が搭載されています。


4. XRT xbmgmt ユーティリティを使用して、U30 ボードをフラッシュする

    $sudo /opt/xilinx/xrt/bin/xbmgmt flash --shell --card <card_id> --path <binfile>.bin

<card_id> はステップ 2 から読み取った ID (07:00.0 など)、 は Aupera ファームウェアの QSPI フラッシュ ダンプ ファイル名です。
以下のようなプロセスが表示されます。

    Idcode byte[0]=20 
Idcode byte[1]=bb 
Idcode byte[2]=21 
Idcode byte[3]=10 
Idcode byte[4]=44 
Idcode byte[5]=0 
Erasing flash.............................  
Programming flash........................ 
Verifying........................ 
Shell is updated successfully 
Cold reboot machine to load new shell on card

完了後、同じフラッシュ ダンプ ファイルを使用して、手順 2 で読み出した 2 番目の card_id (7:00:1 など) をフラッシュ メモリに書き込みます。


5. フラッシュからの FPGA イメージを更新するために、ホストの電源を一度切って、再度電源を入れます (コールドリブート)。


3.2 U50LV シェルのインストール

3.2.1 事前に必要なもの

  • ザイリンクスの XRT-2.8.726 がインストールされた x86 Ubuntu 16.04/18.04 マシンを 1 つ (sudo apt remove xrt を実行して、手順 3.1.1 で使用した XRT 2.6.655 をアンインストールし、sudo dpkg -i xrt_202020.2.8.726-xxx.deb を実行して、ホストに XRT 2.8.726 をインストールする)。xrt パッケージ バージョンは、こちらからダウンロード可能。
  • PCIe x16 スロットに挿入された U50LV ボード

3.2.2 U50LV シェルのインストール手順

1. XRT 環境を呼び出します。

    $cd /opt/xilinx/xrt/ 
$source setup.sh

2. U50LV ボードの PCIe バスを読み出します。

    $sudo lspci -d 10ee

画面には次のようなメッセージが表示されます。

    07:00.0 Processing accelerators: Xilinx Corporation Device 5060 
07:00.1 Processing accelerators: Xilinx Corporation Device 5061

07:00.1 Processing accelerators: Xilinx Corporation Device 5061
BDF ID 07:00.1 は card_id であり、次の手順で使用します。U50LV ボードには、FPGA デバイス (PCIe エンドポイント) が 1 つのみ搭載されています。


U50LV カードの場合、DPUCAHX8H は標準の gen3x16 プラットフォームではなく、gen3x4 バージョンのターゲット プラットフォームを使用します。このため、gen3x4 バージョンのターゲット プラットフォーム ファイルをダウンロードしてインストールしてください。

CentOS/Redhat 7.4-7.7: Xilinx-u50lv-gen3x4-xdma-2-202010.1-2902115-noarch_rpm.tar.gz
Ubuntu 16.04: Xilinx-u50lv-gen3x4-xdma-2-202010.1-2902115-16.04_deb.tar.gz
Ubuntu 18.04: Xilinx-u50lv-gen3x4-xdma-2-202010.1-2902115-18.04_deb.tar.gz


4. Alveo XRT xbmgmt ユーティリティを使用して、U50 ボードをフラッシュ メモリに書き込みます。

    $sudo /opt/xilinx/xrt/bin/xbmgmt flash --shell --path <firmware_file> --card <card_id>

<card_id>はステップ 2 から読み取った ID (07:00.0 など)、 は xilinx_u50lv_gen3x4_xdma_base_2 のファイル名です。


5. ホストをコールド リブートしてフラッシュから FPGA イメージを読み込み、FPGA ボードが検出されることを確認します。

    $sudo lspci -d 10ee:

U50LV シェル インストールの手順の詳細は、 ザイリンクス github 資料をご覧ください。


4.

VMSS アプリケーション

4.1 事前に必要なもの

  1. U30 および U50LV ボードがインストールされた x86_host と、U30 および U50 のファームウェアを準備する。
  2. RTSP ストリーミング ソース (カメラなど) を準備する。(encode=h264/h265、resolution=1080p、fps=30、gop=3)
  3. "rtsp://admin:admin123@172.16.1.15:554 などの IP カメラから入力として RTSP の URL を取得するか、適切な形式 (ローカルの mp4 ファイル) を使用して RTSP サーバーにローカル ファイルをストリーミングします。

    ヒント: VMSS の Docker には RTSP ストリーミング ツールが含まれており、これを使用して以下の手順でローカル ファイルを RTSP サーバーにストリーミングできます。
    VMSS の Docker 内を確認してください。
    Docker 内の $NFS_ABS_PATH/EasyDarwin ディレクトリに入ります。
    "nohup ./easydarwin -c easydarwin.xml -d 1>/dev/null 2>/dev/null &" を実行すると、デフォルトの RTSP ポート 554 で RTSP サーバーが起動します。
    数秒間待ちます。
    ffmpeg を使用してローカル ファイルをストリーミングします (例: ffmpeg -stream_loop -1 -re -i test.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://localhost:554/vmss-in)。

  4. 86_host で VMSS の Docker が動作している。(1.2 ステップ 3 および 4 を参照)
  5. x86_host で MongoDB の Docker が動作している。(1.2 ステップ 7 を参照)

4.2 U30 ソフトウェアのインストール (Docker 内)

注記: クレデンシャル ファイル (cred.json) と構成ファイル (conf.json) を U30/drm ディレクトリに配置する必要があります。この資料のセクション 2 を参照してこれらのファイルを生成し、U30/drm にコピーして既存のサンプル ファイルを置き換えます。 また、ファームウェアを更新するために 2 つの U30 デバイスがすべてプログラムされていることを確認し、以下のコマンドを実行してください。

    $cd U30 && ./start

この手順で、DRM activative failed というエラー メッセージが表示される場合は、conf.json と cred.json に間違いがないかを確認してください。この手順で、長時間にわたって応答がない場合は、次に示す 2 つの一般的な原因を確認してください。

  • VMSS ドライバーの準備ができていないことが原因。VMMS ドライバー (xocl および xdma) がない場合は、再度インストールが必要です。これは、システム アップデート時にマシンを再起動すると、ドライバーが正しくロードされない場合があるためです。ドライバーを再インストールした後、VMSS の Docker コンテナーを再起動してください。
  • U30 のスタート スクリプトを実行する前に、nfs サービスが起動していないことが原因。root/nfs.sh スクリプトを実行して、nfs サービスを起動してください。

起動スクリプトが正常に実行されると、最後に次のようなメッセージが表示されます。

    ntpdate -u ntp.api.bz
22 Apr 08:15:06 ntpdate[2804]: step time server 114.118.7.161 offset -1530581455.452152 sec

4.3 Docker コンテナーで VMSS クライアントを実行

1. VMSS Docker コンテナーに入ります。

    $docker container exec -it <CONTAINER NAME> /bin/bash

2. VMSS サーバーを実行します:

    $cd VMSS_APP/server
     $source set_env.sh
     $./vmss_server

4.4 Docker コンテナーで VMSS クライアントを実行

1. VMSS Docker コンテナーに入ります。

    $docker container exec -it <CONTAINER NAME> /bin/bash

2. VMSS クライアントを起動してセッションを開きます。

    $cd VMSS_APP/client 
$./vmss_client -c open -p 8001 -f open_stream.json

3. 1 つのセッションを閉じるコマンド:

    $../vmss_client -c close -p 8001 -s 5fcdebd24e4aff0693054073

4. 1 つのセッションを閉じるコマンド:

    $./vmss_client -c clear -p 8001

vmss client の詳細な使用方法については、VMSS_APP/client ディレクトリの README.md を参照してください。


4.5 検出/分類の結果を確認する

1. MongoDB Docker (ホスト内) にログインします。

    $docker exec -it mongo mongo

2. データベース (vmss_db) を開きます。

    Open database vmss_db:

3. データベース (vmss_db) の結果を確認します。

    db.retail.find({ session_uuid: ObjectId("5fc8b1306dedf93052684a49")})

retail はネットワーク名であり、5fc8b1306dedf93052684a49 はセッション ID の文字列です。このコマンドは、指定したセッションの結果を表示します。


5.

結果

検出/分類の結果を確認する

1. MongoDB Docker (ホスト内) にログインします。

    $docker exec -it mongo mongo

2. データベース vmss_db を開きます。

    $use vmss_db

3. データベース vmss_db で結果を確認します。

    db.retail.find({ session_uuid: ObjectId("5fc8b1306dedf93052684a49")})

retail はネットワーク名、5fc8b1306dedf93052684a49 はセッション ID の文字列です。このコマンドは、指定したセッションの結果を表示します。