20Q2.01A

20Q2.01A

FPGA で始めるエッジディープラーニング (10)

みなさんこんにちは。この記事は ACRi ブログの Deep Learning コースの第10回目です。 最終回となるこの回では、より大規模なネットワークに対して推論を行う際に問題となる計算量の増加をどのように解決すべきか、一般的に使用されている方針を述べていきます。 演算コストの低下手法 まずは演算コスト自体を低下する方法について述べていきます。 量子化 量子化は、通常 fp32 で構成される重みやアクティベーション (各層の入出力) のビットを減らすことです。...
20Q2.01A

FPGA で始めるエッジディープラーニング (9)

みなさんこんにちは。この記事は ACRi ブログの Deep Learning コースの第9回目です。 前回までの記事で、推論カーネルのタスク並列性・ループ並列性を順に抽出してきました。この記事では、推論カーネルのデータ並列性を抽出していきます。 データ並列性 データ並列性は処理対象となるデータ間の並列性を示します。 以下のコードは単純なベクトルの加算処理ですが、c の計算と c の計算の間には依存がないため同時に計算することができます。この並列性がデータ並列性となりま...
20Q2.01A

FPGA で始めるエッジディープラーニング (8)

みなさんこんにちは。この記事は ACRi ブログの Deep Learning コースの第8回目です。 この記事では、前回タスク並列化を施した推論カーネルに対し、ループ並列化を行い層間の実行時間のバランスをとっていきます。 また、現在のカーネルでは外部メモリアクセスが非効率的なため、内部の計算でなくメモリアクセスがボトルネックとなっています。この状態ではループ並列化を行っても結局メモリアクセスがボトルネックとなってしまうため、まずは簡単な修正をカーネルに施しメモリアクセスを効率化し...
20Q2.01A

FPGA で始めるエッジディープラーニング (7)

みなさんこんにちは。この記事は ACRi ブログの Deep Learning コースの第7回目です。 この記事からは、前回までに作成したネットワークモデルに対して実際に並列性の抽出を行い、処理速度が向上していくことを確認していきます。まずは現在実装しているモデルのアーキテクチャについて確認し、どのような並列化が可能か検討していきます。 並列化手法の検討 現状の推論モジュールのブロック図は下図のようになっています。maxpool2d, relu については紙面の都合で省略して...
20Q2.01A

FPGA で始めるエッジディープラーニング (6)

みなさんこんにちは。この記事は ACRi ブログの Deep Learning コースの第6回目です。 この記事では、前回の記事で作った推論関数を Alveo U200 ボード上で動作させていきます。このデザインは ACRi ルーム の Alveo U200 搭載サーバー上で動作を確認済みです。 また、このブログに記載しているコードは で公開しています。コードの権利、ライセンスに関してはライセンスファイルを参照するようにして下さい。興味がある方はコードをダウンロード後、READM...
20Q2.01A

FPGA で始めるエッジディープラーニング (5)

みなさんこんにちは。この記事は、ACRi ブログの Deep Learning コースの第5回目です。 前回の記事までで、畳み込み層、全結合層、プーリング層、活性化関数 ReLU の全ての C 実装が完成しました。今回の記事では、これらの層を結合して推論関数全体を作っていきます。 モデルの実装 第2回で作成した推論モデルの図を以下に再掲します。 最初に 1x28x28 の画像を入力し、その後 Conv2d -> ReLU -> MaxPool2d と...
20Q2.01A

FPGA で始めるエッジディープラーニング (4)

みなさんこんにちは。この記事は、ACRiブログのDeep Learningコースの第4回目です。 前回の記事では、畳み込み層の C 実装、結果確認を行いました。今回の記事では、残りの未実装レイヤーである全結合層、プーリング層、活性化関数 ReLU の実装をしていきます。 各層の実装 全結合層 全結合層は入力ベクトル X に対して重み行列 W をかけ、その後バイアス B を加算する処理です。第2回の記事の図を以下に再掲しますが、この図の通りに計算が行えれば良いです。 ...
20Q2.01A

FPGA で始めるエッジディープラーニング (3)

みなさんこんにちは。この記事は、ACRi ブログの Deep Learning コースの第3回目です。 前回の記事では、MNIST データセットに対するネットワークモデルの作成・学習を行いました。この記事からは FPGA 上で推論処理を動かすために、まずは C++ で推論処理コードを記載していきます。 C++ 実装の初回のこの記事では、畳み込み層をターゲットに C++ 実装を始めます。具体的な内容は、(1) 畳み込み層の実装、(2) 動作確認 (C 検証、C/RTL 協調検証) で...
20Q2.01A

FPGA で始めるエッジディープラーニング (2)

みなさんこんにちは。この記事は、ACRi ブログの Deep Learning コースの第2回目です。 前回の記事では、Deep Learning とは何か、FPGA で Deep Learning するメリットについて話しました。このコースのこれ以降の記事では、FPGA をターゲットとした Deep Learning 用デザインの開発を始めていきます。特にこの記事では、まずは Python 上で学習コードを動作させ、FPGA 上で動かすためのネットワークモデルを作成します。 これ...
20Q2.01A

FPGA で始めるエッジディープラーニング (1)

みなさんこんにちは。このコースでは近年 AI に使われていることでも話題のディープラーニングを、FPGA を用いて実装する技術について紹介していきます。 このコースでは、ディープラーニングと FPGA 双方の理解を深めることを目標とし、以下の手順で FPGA 上で実際に動作するデザインを作成していきます。 C/C++ でディープラーニングによる推論を行うコード作成高位合成 (HLS: High Level Synthesis) により C/C++ コードをハードウェア記述言語に変換...
タイトルとURLをコピーしました