20Q2.01A

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

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

ホームサービスロボットにおける FPGA の応用例 (5): ORB-SLAMのFPGA実装

ORB-SLAM とは ホームサービスロボットや自動運転車が、家や工場内を自律移動する技術が活発に研究、開発されています。自律移動するには、家具や壁の配置を認識(地図作成)し、自分がどこにいるかを把握(自己位置推定)しなければなりません。これを同時に行うのが SLAM (Simultaneous Localization and Mapping) です。 SLAM には使用するセンサなどによっていくつか種類があります。主に LiDAR やステレオカメラ、単眼カメラなどが使われますが、 O...
20Q2.04B

Synthesijer と高位合成ツールの作り方 (5)

こんにちは。この「Synthesijer と高位合成ツールの作り方」のシリーズでは、全5回を通じて Synthesijer をベースに FPGA 向けの簡単な高位合成処理系を作る方法を紹介していきます。例は Java ですが、お気に入りの言語向けの処理系を開発する足がかりとして利用できるように紹介できればと思ってます。 前回は、Synthesijer における内部情報の変形処理として並列化とチェイニングの様子を紹介しました。最終回となる今回は、高位合成による高速化の効果を楽しめるパイプラ...
20Q2.03B

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

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

IP の世界からこんにちは (5)

IP インテグレータを用いた回路やシステムの設計について学ぶコースも、いよいよ今回が最終回です。前回は、文字送信回路の IP コアを MicroBlaze と組み合わせるための IP コアを作成し、これらを含むブロック図からシステムを合成しました。今回は、このシステムの上で動作するソフトウェアを記述し、動作確認を行います。 なお,今回の内容は基本的に Vivado/Vitis 2019.2 を対象に記述しています。2019.1 以前の Vivado では、こうした 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.08A

新しいコンピューティング・システムとしての FPGA (4) ~ ソフトウェアブリッジドデータ転送

本コースでは、複数の FPGA を用いた計算機システムの構成と、私達が研究開発が行っているカスタム・コンピューティング・システムについて紹介していきます。 第4回では、FPGA を搭載したヘテロジニアスシステム上で、ソフトウェアのみで自由にデータ転送を行える機能、「ソフトウェアブリッジドデータ転送」機能を紹介します。 ソフトウェアブリッジドデータ転送 (SBDT データ転送) 紹介するソフトウェアブリッジドデータ転送 (SBDT データ転送) の目的は、FPGA 搭載ヘテロジ...
20Q2.07A

非同期式回路と FPGA 〜「作ってみる編」(4)

みなさん、こんにちは。このコースでは、ある簡単な例題を非同期式回路として FPGA 上に実装し、ツールを適切に使うことで、正しく動作するものを作る、ということ目指しています。前回は、FPGA 上に実装する例題回路について、詳しく説明しました。また、同期式回路として設計した例題回路についても考えました。 前回述べたように、同期式版例題回路は直ちに FPGA 実装可能ですが、非同期式回路版については、FPGA 実装に当たっていくつか検討する事項があります。今回は、そのうちの一つである、遅延素...
20Q2.01A

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

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

ホームサービスロボットにおける FPGA の応用例 (4): ロボットのための脳型人工知能

前回までホームサービスロボットのシステムと FPGA を統合する方法を紹介しました。今回は、ホームサービスロボットに搭載する「ロボットの脳型人工知能」、特に我々が開発する扁桃体モデルについて紹介します。 ホームサービスロボットに求められる知能 ホームサービスロボットは人と共に暮らし、働くことが期待されています。このために、ホームサービスロボットは様々な知識を獲得する知能を有することが求められます。 我々は、ホームサービスロボットが必要とする知識は大きく分けて2種類あると考えて...
20Q2.04B

Synthesijer と高位合成ツールの作り方 (4)

こんにちは。この「Synthesijer と高位合成ツールの作り方」のシリーズでは、全5回を通じて Synthesijer をベースに FPGA 向けの簡単な高位合成処理系を作る方法を紹介していきます。例は Java ですが、お気に入りの言語向けの処理系を開発する足がかりとして利用できるように紹介できればと思ってます。 前回は、Synthesijer がプログラムをハードウェア・ロジックに変換する過程を紹介しました。今回は、内部情報の変形処理として、前回の例で登場した並列化とチェイニング...
20Q2.03B

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

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

IP の世界からこんにちは (4)

IP インテグレータを用いた回路やシステムの設計について学ぶコースの第4回です。前回までで、シリアル通信による文字送信回路の IP コアを作成し、ブロック図を使った設計で「Hello, FPGA」を PC に送信する回路を作成しました。 今回は、文字送信回路の IP コアを Xilinx 社のソフトプロセッサである MicroBlaze と組み合わせていきます。 テンプレートからの IP の作成 IP パッケージャでテンプレートを生成 第1回 や 第2回 でもざっと紹介...
20Q2.01A

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

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

macOS の「Microsoft Remote Desktop 10」で FPGA 利用環境 (ACRi ルーム) を使う

ACRi の FPGA 利用環境に macOS から接続する方法についてまとめます。 Windows 10から接続する方法についてはこちらの記事を参照してください。 本記事で説明する接続方法は macOS High Sierra 10.13以降を対象とします。本記事では macOS Mojave 10.14.6を用いて説明します。 ssh で FPGA 利用環境を使用する macOS から FPGA 利用環境のサーバに接続するには標準でインストールされているターミナルを利用し...
20Q2.09B

MIG を使って DRAM メモリを動かそう (3)

この記事では、Vivado で MIG の生成方法と DRAM コントローラ全体の Verilog HDL の実装を解説していきます。これまでのように、説明では、Digilent 社の Arty A7-35T FPGA ボードを想定します。 ソースコード: 現時点 (2020年8月) において、ACRi ルーム (ACRi の提供する FPGA 利用環境) で使用可能な Vivado 2019.2 を使いますが、新しい Vivado バージョンにも簡単に移植することができます。 ...
20Q2.08A

新しいコンピューティング・システムとしての FPGA (3) ~ FPGA を搭載したヘテロジニアスシステム

本コースでは、複数の FPGA を用いた計算機システムの構成と、私達が研究開発が行っているカスタム・コンピューティング・システムについて紹介していきます。 第3回では、FPGA を搭載したヘテロジニアスシステムの分類を行い、システムの構成には何が必要かを考えていきます。 FPGA を搭載したヘテロジニアスシステムの分類と特徴 前回は、いろいろな FPGA 接続ネットワークについて紹介しました。今回は、CPU 側を含めたヘテロジニアスシステムとしての観点で、これらのシステムを見...
20Q2.07A

非同期式回路と FPGA 〜「作ってみる編」(3)

みなさん、こんにちは。このコースでは、ある簡単な例題を非同期式回路として FPGA 上に実装し、ツールを適切に使うことで、正しく動作するものを作る、ということ目指しています。前回は、非同期式回路の実行制御のかなめとなるハンドシェイクについて少し詳しく紹介しました。 今回は、いよいよ例題回路を非同期式回路として設計していきたいと思います。 例題回路 まずは、例題として取り上げる回路を説明します。例題なので、簡単で完全なもの、ということで、4ビットの整数 x の2乗 x2 を8ビ...
20Q2.01A

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

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