Xstream API - 1.1 Japanese

Vitis AI ユーザー ガイド (UG1414)

Document ID
UG1414
Release Date
2020-03-23
Version
1.1 Japanese

典型的なエンドツーエンドのワークフローには、ML、ビデオ、データベースのアクセラレーションなどの高速化サービス用の FPGA と、FPGA に実装されていない外部回路用の I/O やコンピューティング用 CPU で構成されるヘテロジニアス コンピューティング ノードが含まれます。Vitis AI は、ストリーミング アプリケーションを Python で作成できるようにする API と関数のセットを提供します。Xstream API は、Xbutler で提供される機能の上に構築されます。Xstream API のコンポーネントは次のとおりです。

  • Xstream ($VAI_PYTHON_DIR/vai/dpuv1/rt/xstream.py) は、複数プロセス間のデータ ストリーミングや実行フロー/依存関係を制御するための一般的なメカニズムを提供します。
  • Xstream チャネル: チャネルは英数字の文字列で定義されます。Xstream ノードは、チャネルにペイロードを公開し、チャネルをサブスクライブしてペイロードを受信できます。デフォルトのパターンは PUB-SUB です。つまり、チャネルのすべてのサブスクライバーは、そのチャネルに公開されたすべてのペイロードを受信します。これらのペイロードは、サブスクライバーがキューをすべて処理するまで、FIFO 順にサブスクライバーのキューに入れられます。
  • Xstream ペイロードには、バイナリ データ (バイナリ ブロブ) とメタデータという 2 つの情報が含まれます。バイナリ ブロブとメタデータは、オブジェクト ストアとして Redis を使用して送信されます。バイナリ ブロブは、大規模データを対象としています。メタデータは、ID、引数、オプションなどの小さなデータ用です。オブジェクト ID は ZMQ を介して送信されます。ZMQ は、ストリーム フロー制御に使用されます。メタデータには id フィールドが必要です。送信の終了を通知するために空のペイロードが使用されます。
  • Xstream ノード: 各 Xstream ノードはストリーム プロセッサとなります。ゼロから複数の入力チャネルをサブスクライブでき、またゼロから複数の出力チャネルに出力できる個別プロセスです。ノードは、その入力チャネルで受信したペイロードの計算を実行できます。計算は、CPU、FPGA、または GPU で実行できます。新しいノードを定義するには、 vai/dpuv1/rt/xsnodes に新しい Python ファイルを追加してください。例として ping.py を参照してください。すべてのノードは、構築時に永久にループする必要があります。ループの各反復で、入力チャネルからペイロードを受信し、出力チャネルにペイロードを送信する必要があります。空のペイロードを受信した場合、ノードは xstream.end() を呼び出して空のペイロードを出力チャネルに転送してから終了する必要があります。
  • Xstream グラフ: $VAI_PYTHON_DIR/vai/dpuv1/rt/xsnodes/grapher.py を使用して、1 つまたは複数のノードを含むグラフを作成します。Graph.serve() が呼び出されると、グラフは各ノードを個別のプロセスとして生成し、それらの入出力チャネルを接続します。グラフですべてのノードを管理します。グラフの例は、neptune/services/ping.py を参照してください。次に例を示します。
    graph = grapher.Graph("my_graph")
      graph.node("prep", pre.ImagenetPreProcess, args)
      graph.node("fpga", fpga.FpgaProcess, args)
      graph.node("post", post.ImagenetPostProcess, args)
     
      graph.edge("START", None, "prep")
      graph.edge("fpga", "prep", "fpga")
      graph.edge("post", "fpga", "post")
      graph.edge("DONE", "post", None)
     
      graph.serve(background=True)
      ...
      graph.stop()
    
  • Xstream ランナー: グラフの入力チャネルにペイロードをプッシュする便利なクラスです。ペイロードは固有の ID を使用して送信されます。その後、ランナーは、送信された ID と一致するグラフの出力ペイロードを待ちます。このランナーは、ブロッキング関数呼び出しのルックアンドフィールを提供することが目的です。Xstream の完全スタンドアロンの例はこちらです。($VAI_ALVEO_ROOT)/ examples/deployment_modes/xs_classify.py