を ディープ・ラーニング・フレームワークChainerとXilinx社SDSoCを連携...

1
128 ディープ・ニューラル・ネットワークを FPGA で動かす俺々フレームワークを作る ディープ・ラーニング・フレームワークChainerとXilinx 社SDSoCを連携   ディープ・ニューラル・ネットワークを FPGA で  動かす俺々フレームワークを作る 中原 啓貴 Hiroki Nakahara ディープ・ラーニングを FPGA に実装するには,ディープ・ニューラル・ネットワークの学習と FPGA 実装の両方が必要であり,敷居が高い状 態でした.しかし近年,ディープ・ラーニングのフレームワークの充実と高位合成ツールの普及により,FPGA への実装の敷居は大幅に下がってき ています.ここではディープ・ラーニング・フレームワークである Chainer を使って,畳み込みディープ・ニューラル・ネットワーク(CNN)を設 計し,Zynq 搭載評価ボードに実装する方法を説明します. ニング・フレームワークを用いて学習を行います.こ れまでは全て手で開発していましたが,Pythonベー スのフレームワークが多数出てきており,GPUもサ ポートしていることから,敷居が大幅に下がりまし た.ディープ・ラーニング・フレームワークの比較を 表1 に示します.どれもNumPy形式の学習済みデー タを出力できるので,自分の好みに合ったフレーム ワークを選択できます.筆者は新しい論文の成果を再 現するために,さまざまなフレームワークを使ってい ます. 学習が済んだモデルはファイルに出力し,高位合成 用のC/C++に読み込ませます.HDLでディープ・ ニューラル・ネットワークを設計してもよいのです が,設計時間に対するディープ・ラーニングの進化の 速度を考えると,現時点では割に合わない状況です. 今年も新しいネットワーク・アルゴリズムがどんどん 出てきているので,高位合成ツールを使って即開発・ 即実現が求められると考えています. Xilinx 社 SDSoC を使った事例を紹介 前 回 の 記 事 で は Altera SDK for OpenCL 向 け の C++記述を使いましたが,今回はXilinx社のSDSoC を使って実現します.ディープ・ニューラル・ネット ディープ・ラーニングを FPGA にポーティングするために 1 アルゴリズム進化が激しいので C/C++ のまま FPGA に実装できると良い 筆者はこれまで,ディープ・ラーニングをFPGA にポーティングする方法を紹介してきました (1)〜(4) 前回の記事 (2) で,Chainerで学習した重み係数を Python の NumPy 形式で保存して読み込む方法を説明 しましたが,実は TensorFlow や Caffe,Theano など のディープ・ラーニング・フレームワークでは, NumPy形式での読み書きが可能です.つまりこの方 法は,主流のいろいろなディープ・ラーニング・フ レームワークで流用することができます.この記事を 参考にして,自作のオリジナル・ディープ・ラーニン グFPGAフレームワーク(俺々フレームワーク)を作 成することも可能ですので,ぜひチャレンジしてみて ください(筆者は現在,2値化CNNフレームワークの 開発をしている). 図1 に一般的な FPGA 向けフレームワークのフロー を示します.まず,学習データとディープ・ニューラ ル・ネットワークのモデルを用意し,ディープ・ラー 高位合成ツールを 使ってディープ・ ラーニングを FPGA に! パラ メータ .txt C++ SDSoC SD カード ZedBoard PC Zynq UART SDカードに ファイルを コピー USB ケーブル 重み ファイル ディープ・ニューラル・ ネットワーク ニューラル・ネットワークを C/C++で記述 学習データ (主に画像と 教師ラベル) GPU(またはCPU)で学習と実行 図 1 一般的な FPGA 向けディープ・ラーニングのフロー 現在は,多種多様なディープ・ニューラル・ネットワークのフレームワークが提供されている.多くは GPU による学習の高速化や,NumPy 形式による 学習結果の出力をサポートしている.これらのフレームワークから C/C++ を組み合わせて高位合成を使う,または RTL コードと組み合わせて論理合成し て FPGA にポーティングできる

Transcript of を ディープ・ラーニング・フレームワークChainerとXilinx社SDSoCを連携...

Page 1: を ディープ・ラーニング・フレームワークChainerとXilinx社SDSoCを連携 ディープ … · ディープ・ラーニングをfpgaに実装するには,ディープ・ニューラル・ネットワークの学習とfpga実装の両方が必要であり,敷居が高い状

128 ディープ・ニューラル・ネットワークをFPGAで動かす俺々フレームワークを作る

ディープ・ラーニング・フレームワークChainerとXilinx社SDSoCを連携  ディープ・ニューラル・ネットワークをFPGAで 

動かす俺々フレームワークを作る中原 啓貴 Hiroki Nakahara

 ディープ・ラーニングをFPGAに実装するには,ディープ・ニューラル・ネットワークの学習とFPGA実装の両方が必要であり,敷居が高い状態でした.しかし近年,ディープ・ラーニングのフレームワークの充実と高位合成ツールの普及により,FPGAへの実装の敷居は大幅に下がってきています.ここではディープ・ラーニング・フレームワークであるChainerを使って,畳み込みディープ・ニューラル・ネットワーク(CNN)を設計し,Zynq搭載評価ボードに実装する方法を説明します.

ニング・フレームワークを用いて学習を行います.これまでは全て手で開発していましたが,Pythonベースのフレームワークが多数出てきており,GPUもサポートしていることから,敷居が大幅に下がりました.ディープ・ラーニング・フレームワークの比較を表1に示します.どれもNumPy形式の学習済みデータを出力できるので,自分の好みに合ったフレームワークを選択できます.筆者は新しい論文の成果を再現するために,さまざまなフレームワークを使っています. 学習が済んだモデルはファイルに出力し,高位合成用のC/C++に読み込ませます.HDLでディープ・ニューラル・ネットワークを設計してもよいのですが,設計時間に対するディープ・ラーニングの進化の速度を考えると,現時点では割に合わない状況です.今年も新しいネットワーク・アルゴリズムがどんどん出てきているので,高位合成ツールを使って即開発・即実現が求められると考えています.● Xilinx社SDSoCを使った事例を紹介 前回の記事ではAltera SDK for OpenCL向けのC++記述を使いましたが,今回はXilinx社のSDSoCを使って実現します.ディープ・ニューラル・ネット

ディープ・ラーニングをFPGAにポーティングするために1

● アルゴリズム進化が激しいのでC/C++のままFPGAに実装できると良い

 筆者はこれまで,ディープ・ラーニングをFPGAにポーティングする方法を紹介してきました(1)〜(4). 前回の記事(2)で,Chainerで学習した重み係数をPythonのNumPy形式で保存して読み込む方法を説明しましたが,実はTensorFlowやCaffe,Theanoなどのディープ・ラーニング・フレームワークでは,NumPy形式での読み書きが可能です.つまりこの方法は,主流のいろいろなディープ・ラーニング・フレームワークで流用することができます.この記事を参考にして,自作のオリジナル・ディープ・ラーニングFPGAフレームワーク(俺々フレームワーク)を作成することも可能ですので,ぜひチャレンジしてみてください(筆者は現在,2値化CNNフレームワークの開発をしている). 図1に一般的なFPGA向けフレームワークのフローを示します.まず,学習データとディープ・ニューラル・ネットワークのモデルを用意し,ディープ・ラー

高位合成ツールを使ってディープ・ラーニングをFPGAに!

パラメータ

.txt C++ SDSoC SDカード

ZedBoard

PC

ZynqUART

SDカードにファイルをコピー

USBケーブル

重みファイルディープ・ニューラル・

ネットワークニューラル・ネットワークをC/C++で記述

学習データ(主に画像と 教師ラベル)

GPU(またはCPU)で学習と実行

図1 一般的なFPGA向けディープ・ラーニングのフロー現在は,多種多様なディープ・ニューラル・ネットワークのフレームワークが提供されている.多くはGPUによる学習の高速化や,NumPy形式による学習結果の出力をサポートしている.これらのフレームワークからC/C++を組み合わせて高位合成を使う,またはRTLコードと組み合わせて論理合成してFPGAにポーティングできる