LoginSignup
5
1

More than 3 years have passed since last update.

インテルPAC用の実行環境を Docker / コンテナ化してみた話

Last updated at Posted at 2020-12-15

概要

はじめまして。投稿初心者です。
今回は、INTEL PAC WITH INTEL ARRIA® 10 GX FPGA というアクセラレーション用カードを活用して、その実行環境を Docker / コンテナ化するフローについて説明をしたいと思います。
実際にサーバーに INTEL PAC WITH INTEL ARRIA® 10 GX FPGA カードを挿入して、ホスト側からのカードの見え方など確かめてみたいと思います。

もくじ

1.検証環境
2.FPGA を活用したアクセラレーション
3.INTEL PAC WITH INTEL ARRIA® 10 GX FPGA のインターフェース
4.INTEL PAC WITH INTEL ARRIA® 10 GX FPGA 開発環境について
5.Docker/コンテナ化の手順
6.実行結果
7.まとめ

1.検証環境

・使用した FPGA アクセラレーションカード
 -インテル社製 INTEL PAC WITH INTEL ARRIA® 10 GX FPGA を使用
 -Acceleration Stack ver1.2.1
 (Intel® Arria® 10 GX FPGA搭載)
 Download Link : https://www.intel.com/content/www/us/en/programmable/products/boards_and_kits/dev-kits/altera/acceleration-card-arria-10-gx/getting-started.html
image.png

・使用したサーバー
 SuperMicro社製 SYS-7049GP-TRT

・使用した OS 環境
 — CentOS Linux version 7.6 kernel 3.10

・Dockerのインストール手順は、以下のサイトを参考にしました
https://qiita.com/bezeklik/items/a6a7335acaec12edda45

2.FPGA を活用したアクセラレーション

※ 引用 Intel.com
image.png

図のように、アクセラレーションの方式としては、2つの方式がある。
一つは In-line と呼ばれる、外部ネットワークインターフェースを持ち CPUの前後処理をアクセラレートする方法です。
もう一つは Lookasideと呼ばれる、外部ネットワークインターフェースを持たず PCIe 経由で CPU の処理を
アクセラレートする方法です。
INTEL PAC WITH INTEL ARRIA® 10 GX FPGA カードはその両方が実現できるカードです。

3..INTEL PAC WITH INTEL ARRIA® 10 GX FPGA のインターフェース

※ 引用 Intel.com
image.png

左図 Figure1 は、INTEL PAC WITH INTEL ARRIA® 10 GX FPGA カードの内部構造を示しています。
図の下側は FPGA ブロックを示します。FIMは FPGA Interface Manager の略で別名で Blue Bit stream と呼ばれ、
Intel 社から出荷時にプログラムされている領域です。上位の Xeon プロセッサとは、この FIM を介して通信を行います。
ユーザがプログラムできる領域は、現時点では黄色で示された AFU (Accelerator Function Unit)と呼ばれるブロックです。

図の右側には、SW レイヤと FPGA IO の関係を図示しました。
今回の記事の主要ポイントは、Docker/コンテナ化する際に、FPGA開発環境の IO と コンテナを結びつける作業になります。

Host 側からの FPGA IO の 見え方

Docker/コンテナ化の話に移る前に、FPGA の IF がどのように見えるのか、確認したいと思います。

以下のコマンドを使用して確認することができます。
$ ll /dev | grep fpga
crw------- 1 root root 234, 0 11月 26 17:26 ifpga_sec0
crw-rw-rw- 1 root root 236, 0 11月 26 17:26 intel-fpga-fme.0
crw-rw-rw- 1 root root 235, 0 11月 26 17:26 intel-fpga-port.0

Docker/コンテナ化する際に、上記の intel-fpga-fme.0, intel-fpga-port.0 とコンテナ環境を紐づける必要があります

4.INTEL PAC WITH INTEL ARRIA® 10 GX FPGA 開発環境について

INTEL PAC WITH INTEL ARRIA® 10 GX FPGA の開発環境をインストールした後のフォルダ構成を以下に示します。
image.png
/home/***/inteldevstack/a10_gx_pac_ias_1_2_1_pv 配下に実行環境がインストールされます。今回は、
a10_gx_pac_ias_1_2_1_pv 配下の、 /sample/hello_afu/sw を使用してみたいと思います。

※上記のPathは、Acceleration stack for development の場合の Path です。
Acceleration stack for runtime の場合は、intelrtestack/がデフォルトの Path になります。

5.Docker/コンテナ化の手順

手順としては、
 1.Acceleration stack をインストール (今回は Runtime をインストール)
 ※ Acceleration stackには2種類存在し、FPGA内部の開発をしない場合は、Runtime。
 FPGA 内部の開発が必要な場合はDevelopmentを選択する

 2.Docker Image のダウンロード
 3.Docker Image の作成

の順で実施します。

前準備

//まずは前もって Acceleration Stack の 1.2.1 の Runtime をインストール
//前準備

$ cd /home/***/inteldevstack/a10_gx_pac_ias_1_2_1_pv/hw/samples/hello_afu
$ fpgaconf bin/***.gbs
$ cd sw
$ make

Docker 環境のダウンロードと作成

$ docker pull centos:centos7
$ docker run --rm -it \
--name intel_pac \
--mount type=bind,source=/home/***/inteldevstack,destination=/inteldevstack \
--mount type=bind,source=/usr/lib64,destination=/usr/lib64 \
--device /dev/intel-fpga-fme.0:/dev/intel-fpga-fme.0 \
--device /dev/intel-fpga-port.0:/dev/intel-fpga-port.0 \
--cap-add=IPC_LOCK \
centos:centos7

--mount type=bind にて、inteldevstack および usr/lib64 を Docker 内にマウントします。
Docker 内にアクセラレーションスタックをインストール後にIOのみ割りつける方法もありますが、
今回は Host にアクセラレーションスタック開発環境をインストール後に、Dockerにマウントする方法を試しました。

以下のコマンドで、前述した FPGA IO と Docker 環境の紐づけを行っています。

--device /dev/intel-fpga-fme.0:/dev/intel-fpga-fme.0 \
--device /dev/intel-fpga-port.0:/dev/intel-fpga-port.0 \

上記にて、INTEL PAC WITH INTEL ARRIA® 10 GX FPGA 開発環境の Docker 化ができましたので、
Softwareを実際に実行した結果を以下に示します。

6.実行結果

Docker Image ダウンロード

$ docker pull centos:centos7
centos7: Pulling from library/centos
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Image is up to date for centos:centos7
docker.io/library/centos:centos7

Docker の起動

$ docker run --rm -it \
> --name intel_pac \
> --mount type=bind,source=/home/***/inteldevstack,destination=/inteldevstack \
> --mount type=bind,source=/usr/lib64,destination=/usr/lib64 \
> --device /dev/intel-fpga-fme.0:/dev/intel-fpga-fme.0 \
> --device /dev/intel-fpga-port.0:/dev/intel-fpga-port.0 \
> --cap-add=IPC_LOCK \
> centos:centos7
[root@7e83b4eac411 /]#

hello_afu Software フォルダに移動

cd /inteldevstack/a10_gx_pac_ias_1_2_1_pv/hw/samples/hello_afu/sw
[root@7e83b4eac411 sw]#

Software の実行

 ./hello_afu
Running Test
AFU DFH REG = 1000010000000000
AFU ID LO = 9722d43375b61c66
AFU ID HI = 850adcc26ceb4b22
AFU NEXT = 00000000
AFU RESERVED = 00000000
Reading Scratch Register (Byte Offset=00000080) = 00000000
MMIO Write to Scratch Register (Byte Offset=00000080) = 123456789abcdef
Reading Scratch Register (Byte Offset=00000080) = 123456789abcdef
Setting Scratch Register (Byte Offset=00000080) = 00000000
Reading Scratch Register (Byte Offset=00000080) = 00000000
Done Running Test

7.まとめ

・INTEL PAC WITH INTEL ARRIA® 10 GX FPGA は In-line/ lookaside に対応したカード
・FPGA 開発環境を Docker/コンテナ化するためには、FPGA IO と Docker 環境の紐づけが必要
・Docker 環境から SW を実行し FPGA アクセラレーションブロックに簡単にアクセスできた

※Docker 内にアクセラレーションスタックをインストール後にIOのみ割りつける方法もありますが、今回は Host にアクセラレーションスタック開発環境をインストール後に、Dockerにマウントする方法を試しました。
参考になりましたら幸いです。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1