VMSS (Video Machine-learning Streaming Server) は、「サーバー」プロセスとして機能するソフトウェア アプリケーションであり、複数のビデオ ストリームに動画解析サービスを提供し、サーバー システムにある複数の FPGA リソースを効率的に利用します。Aupera 社とザイリンクスが共同で開発した VMSS フレームワークは、2 つのアクセラレータ カード (Alveo U30 および U50LV) で動作可能です。FPGA に詳しくない開発者でも FPGA プラットフォームを活用でき、さらなる互換性を備えるように管理されています。このソリューションには、VMSS フレームワーク、前処理、機械学習の推論、後処理のプラグインが含まれています。
その他のご質問、またはユーザー エクスペリエンスに関する問題は、vmss@auperatech.com、または vmss@xilinx.com へご連絡ください。
ベンダー: Aupera
更新日: TBD
サイズ: TBD
コンテナー バージョン: aupera_general_vmss:v2.0.0.
この製品を評価または購入する権限を取得します。
無償トライアル版で下のサンプル アプリケーションを実行できます。
このアプリケーションの価格プランを確認して購入します。
このアプリケーションはコンテナー化されており、クラウドまたはオンプレミス上で数分で簡単に実行できます。
オンプレミス | |
---|---|
Alveo U30 製品の詳細および購入 |
|
Alveo U50LV 製品の詳細および購入 |
|
VCK5000 製品の詳細および購入 |
|
運用方法に応じた手順に従ってください。
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
$sudo service rpcbind restart
$sudo service nfs-kernel-server restart
2. /etc/sysctl.conf を変更して、IP 転送の net.ipv4.ip_forward=1 を有効にします。
$sudo vim /etc/sysctl.conf
$sudo service networking restart
$sudo docker pull xilinxpartners/aupera_general_vmss:v1.2
$sudo docker run --cap-add sys_admin --cap-add NET_ADMIN --cap-add NET_RAW --privileged=true --network=bridge --hostname=general -it --log-opt max-size=10m --log-opt max-file=3 -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 start <CONTAINER NAME>
$sudo docker container exec -it <CONTAINER NAME> bash
4. NFS サービスを起動し、NFS ファイル (Docker 内)を抽出します。
/root/nfs.sh
<NFS_ABS_PATH>: に、次のようなファイルとディレクトリが表示されます。
├──Driver
├── EasyDarwin
├── U30
├── VMSS_APP
注記: このシェルは、x86_host が再起動するたびに実行する必要があります。
$sudo docker run --name mongo --rm -d -p 27017:27017 mongo
注記: VMSS Docker コンテナー内のファイル VMSS_APP/server/conf/plugin.cfg を変更して、ホストの IP アドレスに一致するように mongo_url を変更する必要があります。
注記: この手順は、x86_host が再起動するたびに実行する必要があります。
3.1.1 事前に必要なもの
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 など)、<binfile> は 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
完了後、同じフラッシュ ダンプ ファイルを使用して、手順 3 で読み出した 2 番目の card_id (8:00:1 など) をフラッシュ メモリに書き込みます。
5. フラッシュからの FPGA イメージを更新するために、ホストの電源を一度切って、再度電源を入れます (コールドリブート)。
3.2.1 事前に必要なもの
3.2.2 VCK5000 シェル インストール手順
1. XRT 環境を呼び出します。
$cd /opt/xilinx/xrt/
$source setup.sh
2. VCK5000 ボードの PCIe バスを読み出します。
$sudo lspci -d 10ee
画面には次のようなメッセージが表示されます。
07:00.0 Processing accelerators: Xilinx Corporation Device 5044
07:00.1 Processing accelerators: Xilinx Corporation Device 5045
3. tar.gz ファイルを抽出 – 運用パッケージ
$tar -xzvf xilinx-vck5000-es1-gen3x16-platform-2-1_all.deb.tar.gz
4. 運用パッケージを順番にインストールします。
$sudo apt install xilinx-sc-fw-vck5000_4.4.6-2.e1f5e26_all.deb
$sudo apt install xilinx-vck5000-es1-gen3x16-validate_2-3123623_all.deb
$sudo apt install xilinx-vck5000-es1-gen3x16-base_2-3123623_all.deb
5. Alveo XRT xbmgmt ユーティリティを使用して、VCK5000 ボードをフラッシュ メモリに書き込みます。
$sudo /opt/xilinx/xrt/bin/xbmgmt flash --update
6. ホストをコールド リブートしてフラッシュから FPGA イメージを読み込み、FPGA ボードが検出されることを確認します。
$sudo lspci -d 10ee:
VCK5000 シェル インストールの手順の詳細は、 ザイリンクス github 資料をご覧ください。
$cd <NFS_ABS_PATH>/Driver
$sudo ./install.sh
インストール後、VMSS ドライバーがロードされていることを確認します。
$lsmod | grep xocl
$lsmod | grep xdma
u30 デバイス ノードがロードされていることを確認します。
$ls /dev/xdma*_user
注記: x86_host を再起動するときには、VMSS ドライバーが自動的にロードされます。x86_host ノードに xocl または xdma ドライバー、または /dev/xdma*_user デバイス ノードが見当たらない場合は、VMSS ドライバーを再インストールして、sudo docker container restart CONTAINER NAME コマンドを使用して VMSS Docker をリスタートする必要があります。
注記: クレデンシャル ファイル (cred.json) と構成ファイル (conf.json) を U30/drm ディレクトリに配置する必要があります。この資料のセクション 2 を参照してこれらのファイルを生成し、U30/drm にコピーして既存のサンプル ファイルを置き換えます。 また、ファームウェアを更新するために 2 つの U30 デバイスがすべてプログラムされていることを確認し、以下のコマンドを実行してください。
$cd U30 && ./start
この手順で、DRM activative failed というエラー メッセージが表示される場合は、conf.json と cred.json に間違いがないかを確認してください。この手順で、長時間にわたって応答がない場合は、次に示す 2 つの一般的な原因を確認してください。
起動スクリプトが正常に実行されると、最後に次のようなメッセージが表示されます。
ntpdate -u ntp.api.bz
22 Apr 08:15:06 ntpdate[2804]: step time server 114.118.7.161 offset -1530581455.452152 sec
1. VMSS Docker コンテナーに入ります。
$docker container exec -it <CONTAINER NAME> /bin/bash
2. VMSS サーバーを実行します。
$cd VMSS_APP/server
$source set_env.sh
$./vmss_server
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 を参照してください。
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 の文字列です。このコマンドは、指定したセッションの結果を表示します。
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
$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 ドライバーは自動的にロードされます。
$sudo docker run --name mongo --rm -d -p 27017:27017 mongo
注記: VMSS Docker コンテナー内のファイル VMSS_APP/server/conf/plugin.cfg を変更して、ホストの IP アドレスに一致するように mongo_url を変更する必要があります。
注記: この手順は、x86_host が再起動するたびに実行する必要があります。
お問い合わせフォームよりご連絡ください。
${NFS_PATH}U30/drm/license_conf/nodelocked/conf.json
にある Docker イメージ内のノードロック ライセンス構成ファイルを ${NFS_PATH}U30/drm/conf.json
にコピーする必要があります。${NFS_PATH}U30/drm/license_conf/floating/conf.json
にある Docker イメージ内のフローティング ライセンス構成ファイルを ${NFS_PATH}U30/drm/conf.json
にコピーする必要があります。3.1.1 事前に必要なもの
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 など)、<binfile> は 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.1 事前に必要なもの
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 など)、<firmware_file> は xilinx_u50lv_gen3x4_xdma_base_2 のファイル名です。
5. ホストをコールド リブートしてフラッシュから FPGA イメージを読み込み、FPGA ボードが検出されることを確認します。
$sudo lspci -d 10ee:
U50LV シェル インストールの手順の詳細は、 ザイリンクス github 資料をご覧ください。
注記: クレデンシャル ファイル (cred.json) と構成ファイル (conf.json) を U30/drm ディレクトリに配置する必要があります。この資料のセクション 2 を参照してこれらのファイルを生成し、U30/drm にコピーして既存のサンプル ファイルを置き換えます。 また、ファームウェアを更新するために 2 つの U30 デバイスがすべてプログラムされていることを確認し、以下のコマンドを実行してください。
$cd U30 && ./start
この手順で、DRM activative failed というエラー メッセージが表示される場合は、conf.json と cred.json に間違いがないかを確認してください。この手順で、長時間にわたって応答がない場合は、次に示す 2 つの一般的な原因を確認してください。
起動スクリプトが正常に実行されると、最後に次のようなメッセージが表示されます。
ntpdate -u ntp.api.bz
22 Apr 08:15:06 ntpdate[2804]: step time server 114.118.7.161 offset -1530581455.452152 sec
1. VMSS Docker コンテナーに入ります。
$docker container exec -it <CONTAINER NAME> /bin/bash
2. VMSS サーバーを実行します。
$cd VMSS_APP/server
$source set_env.sh
$./vmss_server
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 を参照してください。
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 の文字列です。このコマンドは、指定したセッションの結果を表示します。
検出/分類の結果を確認する
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 の文字列です。このコマンドは、指定したセッションの結果を表示します。