【初心者】今話題のFPGAって何?AIを爆速で動かそう!
AIとっても便利だよね
いろんな賢い人の研究によって、AI(人工知能)の精度が近年かなり良くなってきました。たとえば、分類、検出、セグメンテーション、姿勢推定、顔認識など、いろんなことができるようになりました。とっても便利(^^)
その一方で、まだ課題も残っています。
- AIが判断するのに時間がかかってしまう...⏰
- AIが計算する時の消費電力が大きくなってしまう...💡
これらはかなり致命的な問題です。なにか事象が発生してから、反応→判断までが遅いと、自動運転では 重要な事故に つながってしまいます。また、消費電力が大きいと、 でかいバッテリーが必要なので小型化が難しく なります。あと発熱もすごいので、メッチャ熱くなってしまします。🔥
注目を浴びているFPGAってなに?
この課題を解決するために、今注目を浴びているのがFPGAです。
FPGAとは、回路を自由にカスタマイズできるIC です。つまり、AI専用の回路に特化(カスタマイズ)させることで、高速化&省電力化をすることができます。
FPGAって何の略?
FPGAは「Field Programmable Gate Array」の略です。日本語にすると「現場でプログラムできる集積回路(IC)」となります。何言ってんのかよくわかりませんね🤔
ここでいう「現場」とは、「私たちプログラマ自身で」みたいな意味です。たとえば、パソコンのCPUなどの普通のICは、工場でICを作って、出荷されて、私たちの元に届きます。このICは、既に決まったパターンが物理的に彫られており、後で変更することはできません。
しかし、このICパターンを「工場から出荷して私たちの所に届いた後でも変更できるよ」って言ってんのがFPGAです。今回は、この辺の初歩的だけど難しい内容を、できるだけ噛み砕いて解説します。
AIエンジニアとして、AIの知識をもっている方はたくさんいます。一方で、大半のAIエンジニアは、AIを動かしているデバイスや、物理的な電気回路についての理解は浅いです。ワンランク上のAIエンジニア を目指すべく、今注目のFPGAのポイントを分かり易くまとめました。
AI、機械学習、ディープラーニングの基礎から学びたい方は、こちらからどうぞ↓
Created by NekoAllergy
知っておいたほうがいいこと
FPGAの説明に入る前に、FPGAの理解を深めるために知っておいたほうがいい言葉を3つ紹介します。
ハードウェアとソフトウェアの違いって?
FPGAの原理を理解するためには、ハードウェアとソフトウェアを分けて考えることが重要です。
ハードウェアとソフトウェアの違い (※1)(※2)
-
ハードウェアとは:
目に見えるもの。形あるもの。
ICチップのこと。人間で例えると「体」にあたる部分。 -
ソフトウェアとは:
目に見えないもの。形がないもの。
ICチップの中のデータ(電子)の動き。人間で例えると「心」にあたる部分。
物理的にハードウェアが存在し、その中で、ソフトウェアが動くイメージです。私たちがプログラミングをする時は、ソフトウェアを書き換えています。ハードウェアの構成は物理的に固定されているので、形や順番を変えたり、配置を変更したりすることはできません。
ところが、FPGAを使うと...
ところが、FPGAではハードウェアそのものを私たち自身で変更する事ができます。 ハードウェアを変更できると、物理的に最短経路で回路を組むことができるので、高速化することができます。
ってことは、いろいろ道具を使ってカチャカチャ組み立てて、電子工作するってこと?と思った方もいるでしょう。そうではありません! FPGAでは、通常のプログラミング言語を扱う感じでハードウェアを変更することができるんです。
ICチップって何を指しているの?
こんなのをICチップって呼びます (※1)
FPGAを理解するには、ICチップについても知っておくと良いでしょう。
ICとは、簡単に言えば小さな電気回路です。ICチップと呼ばれ、目に見えないくらいに小さい回路が詰まっています。ちなみにICはIntegrated Circuitの略で、「回路がたくさん集まってギュウギュウに詰まっている電気回路」って意味です。
ICチップは物理的に存在して、目に見えているので、「ハードウェア」です。ICは、構成や役割によって呼び名が変わり、CPUと呼んだり、GPUと呼んだり、ASICと呼んだりします。その中の一つとして、FPGAという種類のICがあります。
AppleシリコンM1もICチップです
2020年にはAppleから「AppleシリコンM1」というのが発表され、話題になりました。このM1というのもICチップにあたります(SoCって呼ばれます)。紹介ムービーなんかでは、黒い四角い物体にM1って書かれていて、その中に、キラキラ輝いているICチップが入っているのが見えると思います。これがICの本体です。(※1)
M1の外観。この中のチップを守っている。
M1の中身。虹色になっているのがICチップの本体。
論理ゲートってなに?
さて、ICの中身をもっと詳細にみてみましょう。ICはいろいろな要素から構成されていますが、ICを形作るための最小単位は論理ゲートというものです。小さな計算機だと思えばよいでしょう。
ちなみに
実際には最小単位はトランジスタですが、分かり易くするためここでは割愛します。
IC>論理ゲート>トランジスタ という大小関係です。
論理ゲートには、ANDゲート、ORゲート、NOTゲートのような種類があります。私たちが普段使う計算に、足し算、引き算、掛け算、割り算のような種類があるのと同じイメージです。
この様々な論理ゲート(計算機)を組み合わせることで、いろいろな機能を持ったICが作れます。組み合わせを変えることで、それがCPUと呼ばれたり、GPUと呼ばれたり、メモリと呼ばれたりします。なお、論理ゲートも物理的に存在して、目に見えているので、「ハードウェア」です。
FPGAでは...
FPGAでは、この論理ゲートの組み合わせを私たち自身で変えることができます。論理ゲートの構成を変えるということは、ハードウェアそのものを変えることになります。
組み合わせを変えることで、CPUに生まれ変わったり、GPUやメモリになったりすることもできます。
また、自身でカスタマイズできるので、特定の機能に特化したICも作ることができます。AIを高速で動かせるICを作れます。
代表的なICたち
CPU、GPU、ASIC、FPGAの概要について簡単にご紹介します。
○CPU
CPUは、汎用的に色々な処理に対応できるようにしたICです。
イメージとしては、「取りまとめ役」「何でも屋」「平均点が高い感じ」という感じです。どんな作業をさせられるのか分からないので、いろんな作業を幅広くできるようにしたマルチプレイヤーICです。
CPUは単体では機能できず、メモリと併せて使用します。メモリ内にプログラムとデータを入れておいて、CPUの回路を使って自由に計算を行います。CPUの回路の構成は最初から決まっていて変更はできませんが、メモリ内のプログラムを変えることで、どんな処理でも行うことができます。メモリは絶対に必要なので、CPUとメモリはセットとして考えましょう。
プログラミングの時は...
私たちがプログラミングをする際は、メモリ内のデータを書き換えることで、処理を変えることができます。
CPUは何でもできる。でも...
CPUの回路は汎用性に特化した作りになっているので、メモリに入れたプログラム通りに何でもやってくれます。 しかし、作業によっては、無駄な遠回りをしてしまったりなど、非効率な部分がでてきます。回路の作りが決まっているので苦手な作業だと時間がかかったり、逆に簡単な作業だと使われない回路が大量に発生したりするので、無駄が多くなってしまいます。
○GPU
GPUは、CPUのサポートするもう1つの頭脳です。
さきほどのCPUは、どんな計算もできる何でも屋ですが、作業を一列に並べて順番に行う ことしかできません。そのため、時間がかかったり、効率が悪い動作を行ったりしちゃいます。そんなCPUを助けるのがGPUの役割です。
GPUは、1つの作業を横に並べて一気に攻める「並列計算」が得意です。そのため、画像やグラフィックなどの処理を素早く行うことができます。AI(機械学習)の計算も、同じ作業を繰り返すことが多いので、「CPUだけで計算する」のと、「CPUとGPUを併せて計算する」のとでは、時間がかなり変わってきます。CPUでは10分かかる計算が、GPUを使うと数秒で終わることはよくあります。
AIはどのように動いているのか?
2021年現在、AIを動かしている主流は、CPUとメモリとGPUを使う方法です。CPUとメモリで処理し、GPUがサポートすることで、AIの最大火力を出すイメージです。GPUの性能がどんどん向上してきたので、超高速で処理できるようになりました。
しかし、CPUやGPUはそもそもAIの作業に特化して作られたものではないので、どうしても非効率な動作をするときがあります。そもそもCPUが非効率なので、最適化すればもっと早く処理することができるはずです。
マルチとプロはトレードオフの関係にある
なんでもできるもの(汎用型)(マルチプレイヤー)
⇒できることは多いが、1つ1つの性能は低く、速度も遅い。
1つに特化したもの(特化型)(プロプレイヤー)
⇒できることは限られているが、その範囲内では最高パフォーマンスを発揮する。
プロとマルチはトレードオフの関係にあります。トレードオフとは、「どちらかを取ると、どちらかが劣ってしまう」という意味です。かっこいいやつは勉強できないし、勉強できるやつは面白くないしとかあるでしょう(偏見)。それと同じで、2つのものは同時に手に入れられません。
ICでも同じです。CPUなどの汎用的に何でもできるマルチプレイヤーICは、どうしても速度が遅くなってしまったり、非効率になってしまう処理があったりします。一方でGPUは並列処理に特化しているプロプレイヤーです。同時処理は得意ですが、CPUのように幅広い作業はできません。
○ASIC
ある特定の用途に特化させた「ASIC」というICも登場してきました。ASICはオーダーメイド品のICです。カスタマイズしているので、何でも屋ではなく、求められた性能を最大限に発揮できるプロプレイヤーです。
どんな作業をさせられるかわからないコンピュータやスマホは、すべてマルチプレイヤーであるCPUが使われています。汎用性の高いICは使い勝手が良いからです。しかし、高い性能が要求されたり、消費電力や発熱を抑えたかったり、コストパフォーマンスを高めたいという場合にはそれ専用のICが使われます。
たとえば...
たとえば、カメラの中には専用のIC、プリンターの中には専用のIC、スマホの中には専用のICといったように、それぞれの範囲内で超効率的に動作するICが求められます。それがASICです。ASICは、「こんなICが欲しいな」と思った回路を私たち自身で設計して、ASICを作ってくれる工場(会社)にその設計図を渡します。そして工場では、渡された設計図の通りにICを作り、私たちの元に届けられます。
AppleシリコンM1はAppleが作ったASICです。
AppleシリコンM1はAppleが作ったASICです。MacなどのApple製品が効率的に動作するように特化して作ったICなので、超高速で動いたり、消費電力が小さかったり(発熱がなかったり)できるんですね。
ところが、ASICにはデメリットがあります。
- 完成までに時間がかかる
- 製造代がかかる
完成までに時間がかかってしまう...
たとえば、自分でAI専用の回路を設計したとしましょう。その設計図をASIC製造屋さんに渡して、製造してもらいます。ところが製造する前には、PC上での動作シミュレーションや試作品の作成などを行うので、完成までには少なくても数か月はかかってしまいます。また、いざ完成したとしても、設計ミスがあった場合は、また最初の設計段階からやり直しです。
製造代がかかってしまう...
ASICは完全オーダーメイド品なので、製造代がかかります。そのため、大量発注には向いていますが、ICが1つや2つだけ欲しいという場合は、逆にお金が多くかかってしまいます。
○FPGA
そこで、CPUとASICの良いとこ取りしたICが「FPGA」です!
FPGAの中には、あらかじめたくさんの論理ゲートが用意されていて、それらをつなぎ変えることで、好きなICを作ることができます。たとえるなら、CPUやGPUやASICは「文字が印刷された教科書」で、FPGAは「何も書かれていないノート」と思えばイメージが掴みやすいかもしれません。知識があれば、そのノートに自分オリジナルのCPUやGPUを書くことだってできます。
いいところ1. お金が抑えられる!
設計も製造(回路パターンの書き込み)も、全て自分自身でやるので、設計コストも製造コストも抑えることができます。お金がかからないのは嬉しいですね。
いいところ2. 高速化&低消費電力できる!
自分で自由にパターンを設計できるので、データを最短経路で流すこともできます。その結果、超高速で動作させることができます。また、効率が良くなるので、消費電力が抑えられ発熱も大幅に抑えることができます。CPUのようにまわりくどい方法で無駄な処理する必要はありません。
いいところ3. 開発期間を短縮できる!
また、設計ミスがあったときも大丈夫です。ASICの場合は、大抵完成した後に設計ミスが発覚して、問題箇所を修正した後に、ASIC製造屋さんにまた作ってもらわなくてはなりません。一方でFPGAでは、自分で設計して、その回路パターンをその場で焼き付けるので、ICの開発期間を大幅に短縮することができます。トライ&エラーのサイクルを早くすることができます。
まとめ
FPGAは今後が期待されているICです。
AIエンジニアとして、AIを動かしているデバイスや、物理的な電気回路について理解することで、ワンランク上のAIエンジニア を目指していきましょう!
最後までご覧いただきありがとうございます!
AI、機械学習、ディープラーニングの基礎から学びたい方は、こちらからどうぞ↓
人工知能/AI/機械学習をもっと詳しく
ねこアレルギーのAI
YouTubeで機械学習について発信しています。
お時間ある方は覗いていただけると喜びます。
created by NekoAllergy
参考資料
※2 電気基板の写真引用元
Discussion