ソフトウェア技術者のため のFPGA入門 機械学習編

機械学習技術 人工知能技術 自然言語処理技術 セマンティックウェブ技術 オントロジー技術 検索技術 データベース技術 アルゴリズム デジタルトランスフォーメーション技術 Visualization & UX ワークフロー&サービス ITインフラ技術 コンピュータのハードウェア 本ブログのナビ

サマリー

FPGA(Field Programmable Gate Array)は、プログラム可能なハードウェアデバイスであり、高速な演算処理を行うことができるものになる。もう少し具体的に述べると、コンピュータは”コンピューターを構成する計算要素と半導体チップについて“で述べているようにトランジスタスイッチの組み合わせで計算を行えるようになっており、この組み合わせ(繋げ方)をハード的にプログラムしたものがFPGAとなる。

FPGAは、従来のCPUやGPUと比較して、並列処理が得意であり、高速な処理が可能で、電力効率が高いため、省エネルギーなデバイスでもある。このFPGAに機械学習を適用することで、従来のCPUでは実現できない高速でリアルタイムなデータ処理 の実現が期待されている。

FPGAを使用した機械学習アプリケーションには、画像認識、音声認識、自然言語処理などがあり、画像認識にはCNNの概要とアルゴリズム及び実装例について“で述べている畳み込みニューラルネットワーク(CNN)が、音声認識には再帰型ニューラルネットワーク(RNN)が、自然言語処理には、Transformerモデルの概要とアルゴリズム及び実装例について“でも述べているトランスフォーマー(Transformer)がよく使用されるため、それらをFPGAに実装したものが用いられる。

機械学習にFPGAを適用する際の課題点は、FPGAはプログラミングが難しいため、専門的な知識が必要であること、またFPGAボードやツールなどのコストが高いことなどがある。そのため、FPGAを使用した機械学習は、大規模なデータセットや高速な処理が必要な場合に限定される。

ここでは「ソフトウェア技術者のため のFPGA入門 機械学習編」をベースに、FPGAへの機械学習の適用について述べる。

FPGA以外の機械学習やAIへのハードウェアアプローチに関しては”Thinking Machines  機械学習とそのハードウェア実装“や”半導体の設計プロセスへのAIの適用およびAIアプリケーション用半導体チップについて“を参照のこと。

ソフトウェア技術者のため のFPGA入門 機械学習編

FPGAとはField Programmable Gate Arrayの略で、再構成可能なハードウェアを指す。FPGAの中身は回路を構成するためのロジック、DSP、RAMや専用のハードウェア・マクロなどがあり、現在のFPGA業界はXillinx社とIntel社(旧Altera社、2015年にIntel社が買収)の二社のデバイスが市場の大半を占めている。

ソフトウェアからFPGAやASICなどのハードウェアを開発する手法は古くからあり、ハードウェア業界では一般に高位合成と呼ばれている。

近年、AIやディープラーニングの勉強会でFPGA関連のコミュニティベースでの勉強会などで、ソフトウェアから高位合成でもFPGAを開発する発表が行われている。高位合成が目立つようになってきたのは、高位合成ツール本体の価格が下がってきていること、またC言語からの高位合成だけでなく、Java・Python・bubyといった言語からも高位合成できるツールなども登場し、FPGAを使うためにわざわざ専用の言語(従来のVerilogやHDL、VHDL等)を使う必要性がなくなりつつあるところにある。

ソフトウェア・エンジニアの中には、「ハードウェア」というだけで毛嫌いするものもいるが、このように様々なツールが登場したおかげで高位合成の敷居も上上に下がり、その出番が多くなっている。

またFPGAを利用したハードウェア・アクセラレーションとソフトウェアとの連携は画像認識などの機械学習や深層学習といった学習アルゴリズムだけではなく、検索エンジンと組み合わせた使用など多種多様なアプリケーションで使われつつある。

FPGAを利用することの利点は、独自回路設計や並列処理を用いた高速化等がある。

以下に詳細を示す。

第一章 プログラムできるハードウェア

基礎知識:FPGAとは
FPGAの得意分野
独自回路の設計
並列処理
CPUとFPGAの違い
CPUでのソフトウェア処理
FPGAでのハードウェア処理
処理性能
CPUでの処理
FPGAでの処理
パイプライン化
CPUのパイプライン
FPGAのパイプライン
割り込みによる実行の長段
可変できるbit長
ソフトウェアのFPGA化にあたって
FPGA開発言語(HDL :Hardware Description Language)
Verlog HDL
VHDL
FPGAの処理構成
組み合わせ回路
フリップフロップ(レジスタ)
FPGAの開発フロー

第二章 開発環境の整備

SDSoCとは
開発環境(Linux環境)
SDSoCのダウンロード
インストール
SDx Development Enviroments
Select Destination Directory
Installation Summary
Installation Progress
インストール完了
Vivado Manager
ライセンスの取得
起動とライセンスの設定
評価ボード
ZYBO
MicroZed
ZC702
ZC706
ZCU102
ZedBoard

第三章 ハードウェア・プログラミング (スタートアップ編)

プロジェクトの作成
プロジェクト
ソースコードの作成
コンパイル
実機で動作確認
FPGA化する関数の指定

第四章 機械学習ソフトウェア

アルゴリズムを確立する
ソースコード
関数の構成
ソフトウェアの動作確認

第五章ハードウェア・プログラミング(組み込み編)

SDSoCに適用
関数のFPGA化
SDSoCのpragmaで転送方式の指定
FPGA化する階層を1つ上げる
2つの関数をFPGA化
上位関数CNNLayerを対象

第六章 ハードウェア・プログラミング(チューニング編)

アルゴリズムの把握
FPGA化関数のトレース
データアクセスの修正
上位関数のトレース
メモリアクセス
ソースコードのリファクタリング
メモリアクセスとリファクタリング例
生成される回路規模
HLSプラグマの適用
エミュレータ

コメント

  1. […] ソフトウェア技術者のため のFPGA入門 機械学習編 […]

タイトルとURLをコピーしました