AI

21Q2.02A

TVM を使ってディープラーニングを手軽に FPGA で高速化 (3)

みなさんこんにちは。この記事は「TVM を使ってディープラーニングを手軽に FPGA で高速化」の第3回目です。前回に引き続き、今回は Xilinx Kria KV260 ボードでの TVM Vitis-AI Integration を動作させます。 Kria KV260 Xilinx Kria KV260 は Vision AI スターターキットとして販売される FPGA ボードであり、Xilinx が提供するビルド済みのAIアクセラレーションアプリを利用することができます。KV...
21Q2.02A

TVM を使ってディープラーニングを手軽に FPGA で高速化 (2)

みなさんこんにちは。この記事は「TVMを使ってディープラーニングを手軽に FPGA で高速化」の第2回目です。 今回は TVM Vitis-AI Integration を利用して、DNN モデルを Ultra96V2 向けにコンパイルし、実際に実行してみます。 本記事で紹介する手順は TVM Vitis-AI Integration に基づいています。本記事は以下の環境で実行しています。 Avnet Ultra96-V2PYNQ v2.6DPU-PYNQ v1.2.0ホスト...
21Q2.02A

TVMを使ってディープラーニングを手軽にFPGAで高速化 (1)

こんにちは、フィックスターズの丸岡です。 フィックスターズでは、多種多様なハードウェア向けのソフトウェアの高速化や、その知見を活かしたアルゴリズムの提案、ソフトウェアシステムの開発などに貢献させていただいています。近年では機械学習 (Machine Learning, ML) 分野の急速な発達や DX (Digital Transformation) の推進によって、ML を含んだアプリケーション開発の需要が増えています。ML の中でも特にディープニューラルネットワーク (Deep Ne...
20Q2.10B

NNgenとFPGAで作るニューラルネットワーク・アクセラレータ (5)

前回までは、学習済みモデルから、VGG-11 専用のハードウェアを構築したりしました。 第5回 (最終回) では、NNgen を活用するために、NNgen で利用可能な演算や入力の紹介をします。加算、減算、畳み込みといった基本的な演算から、Extern と呼ばれる CPU 上のソフトウェアと連携を可能にする特殊なものまで、いろいろあります。 データの入力 (placeholder, variable, constant) 演算の前に、データや重みを入力するインタフェースをみて...
20Q2.10B

NNgenとFPGAで作るニューラルネットワーク・アクセラレータ (4)

本コースの第3回目と第4回目では、NNgen とニューラルネットワーク・フレームワーク Pytorch を用いて、学習済みのモデルを SoC 型の FPGA の Ultra96-V2 上で動かしてみます。 今回の第4回は、PYNQ と Jupyter を用いて、Ultra96 上で、第3回で開発した VGG-11 専用回路を実際の FPGA システム上で動かします。 Ultra96 向け PYNQ の構築 まず、Ultra96 向けの PYNQ のリポジトリの Release...
20Q2.01A

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

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

広がり続ける FPGA の応用と人工知能への活用 (5)

前回は高いスループット、超低遅延と低消費電力を同時に実現する Vitis AI について解説しました。さらに FPGA を使用して画像認識をおこなうまでのフローを ACRi ルームの環境を使用してひととおり体験しました。シリーズ最終回となる今回は FPGA を取り巻く環境、最新テクノロジーそして将来への展望について概観し、本シリーズを総括したいと思います。 広がる FPGA の応用分野 これまで4回にわたり FPGA を使用することによってどのような効果が得られるか、そしてその技術...
20Q2.01A

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

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

NNgen と FPGA で作るニューラルネットワーク・アクセラレータ (3)

本コースの第3回目と第4回目では、NNgen とニューラルネットワーク・フレームワーク Pytorch を用いて、学習済みのモデルを SoC 型の FPGA の Ultra96-V2 上で動かしてみます。 今回の第3回では、学習済みモデルから FPGA のビットストリームを生成するところまで進めます。 環境構築 まずは、第1回ブログと同様に、NNgen を実行する環境を構築します。 Ubuntu 18.04.4 LTSmacOS 10.15.6 でも大丈夫です。Pyth...
20Q2.01A

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

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

広がり続ける FPGA の応用と人工知能への活用 (4)

前回は Vitis 開発環境が従来の課題をどのように解決するかについて解説しました。さらに ACRi ルーム (FPGA 利用環境) を使って実際にツールとハードウェアを動かしてみました。 今回は高いスループット、超低遅延と低消費電力を同時に実現する Vitis AI について解説します。さらに FPGA を使用して画像認識をおこなうまでのフローを ACRi ルームの FPGA 環境を使用してひととおり体験しましょう。 Vitis AI とは Vitis AI 開発環境は、エ...
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.03B

広がり続ける FPGA の応用と人工知能への活用 (3)

前回は FPGA を活用することで低遅延、高スループット、低消費電力を実現できるしくみについて解説しました。そしてそのメリットをより多くの方に享受いただくための開発環境として Vitis が誕生したことをお話ししました。 今回はその開発環境について解説します。さらに、8月からオープンとなった ACRi ルーム (FPGA 利用環境) を使って実際にツールとハードウェアを動かしてみましょう。 統合ソフトウェアプラットフォーム "Vitis" とは ザイリンクス社 Vitis (...
20Q2.01A

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

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

NNgen と FPGA で作るニューラルネットワーク・アクセラレータ (2)

本コースの第2回目は、ニューラルネットワークのモデル記述からどのようにハードウェアが生成されるか、NNgen コンパイラの仕組みを紹介します。 NNgen の全体構成 第1回の記事からの再掲ですが、NNgen のコンパイラ構成は下図の通りです。 NNgen でハードウェア化するニューラルネットワークのモデル表現方法は、NNgen のオペレータを組み合わせて、プログラマが計算グラフを定義する方法と、Tensorflow や Pytorch などの一般的な DNN フレームワーク...
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.10B

NNgen と FPGA で作るニューラルネットワーク・アクセラレータ (1)

はじめに 皆さん、こんにちは。本コースを担当する東京大学の高前田です。 私たちの研究室、CASYS (Laboratory for Computer Architecture and Systems) では、コンピュータアーキテクチャ (コンピュータの構造や設計技術、コンピュータそのものの在り方) を中心に、FPGA や専用ハードウェアによるカスタムコンピューティング、機械学習処理などの計算対象アルゴリズムとハードウェアの協調設計、ハードウェア設計を支援する高位合成コンパイラなど、...
20Q2.01A

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

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