パソコン実験工房PC Watch出張所 - Supported by パソコン工房

ディープラーニングとハードウェアを考察する

~フィックスターズでディープラーニングを“ディープラーニング”してきた

フィックスターズのオフィス入り口にて。左からフィックスターズの青木氏、青野氏、パソコン工房のスタッフ

 特定用途において、コストパフォーマンスに優れたPCとはどのようなものか、そしてそれを取り巻く周辺機器の必要性を、専門家やライター、および実際にPCを製造するパソコン工房、PC Watchがともに検討。実際にPCを製品化していくとともに、周辺機器およびその活用を幅広く紹介するこのコーナー。

 第4回目は、いま注目のディープラーニング向けに最適なPCとはどんな構成なのか、考察していくことにする。今回ご協力頂くのは、GPUを駆使した汎用演算のサービスやソリューションを展開する国内有数の企業、株式会社フィックスターズで、ディープラーニングなどに携わり、その分野に詳しいエンジニア、青野博之氏と青木亮氏のお二方だ。

青野博之氏
青木亮氏

そもそもディープラーニングとは

【司会】近年、ディープラーニングが流行しており、毎日耳にしていますが、そもそもディープラーニングとは何か理解されていない読者の方々のために、改めて分かりやすく解説をしていただけますか。

【青野】実はディープラーニングという概念の厳密な定義というのは私も把握していないのですが、一般的には“多層のニューラルネットワーク”のことを指していて、“3層以上ある”場合、“ディープ”ラーニングと呼ばれるようです。現実的には、それよりも多くの層のニューラルネットワークを使い、いろいろな問題を解くことになります。

【司会】なぜニューラルネットワークの層を重ねる必要があるのでしょうか。

【青野】層を重ねる目的は特徴量の抽出です。特徴量抽出を自動でできるというのがディープラーニングのメリットですが、それを活かすためには層を重ねる必要があります。

【司会】なるほど。それではなぜ今ディープラーニングが流行しているのでしょうか。やはりIoT(モノのインターネット)やビッグデータが叫ばれるなか、ディープラーニング技術は必要とされているのでしょうか。

【青野】はい、各種センサーから得られた情報はビッグデータとして集まりますが、CPUやGPUの進化によって、そのビッグデータをディープラーニングによって現実的な時間内に処理することが可能になりました。これが、今ディープラーニングが流行している理由の1つです。

 また、勾配消失問題という多層のニューラルネットワークに内在する問題が解決されたことも、ディープラーニングが使われるようになった1つの要因です。これを解説していくとディープラーニングというかニューラルネットワークの基礎から説明しなければならないため、ざっくり説明していきましょう。

 ニューラルネットワークに何か入力すると、答えが出力されます。画像で言うと、画像を与えると、これは何かを答えてくれます。この学習をする時に、答えがわかっている訓練データを入れて、ニューラルネットワーク側で出てきた答えと付き合わせて、合っているかどうかを確認します。間違っている場合は、その誤差を出力側から入力側へ逆伝播することで、誤差が小さくなるようパラメータを調整します。これを繰り返すことで、訓練データに対する誤差が小さくなっていくようパラメータが調整されていきます。

 これまでは、誤差を逆伝播する際にパラメータの更新量がどんどん小さくなってしまい、最終的に入力に近い方はパラメータが更新されないという問題がありました。これが勾配消失問題です。しかし近年、さまざまな手法によって勾配消失問題が解消され、これにより深い層でも正しく学習されるようになりました。

 整理すると、ディープラーニングが流行っている要因は、

1. ビッグデータが集まるようになった点
2. CPUやGPUのパワー向上によって現実的な時間内で処理を終えられるようになった点
3. 勾配消失問題が解決され深い層の学習が可能になった

この3つが主に影響しているものと思われます。

【司会】なるほど。ではディープラーニングがほかの機械学習と比較して優れている点はなんでしょうか。

【青野】これまでの機械学習は、特徴の抽出を人がやっていました。そのため、例えば写真について説明させる機械学習の場合、物体に対しての表現を人が一生懸命設計してあげて、それを前処理でやった上で、サポートベクターマシンやニューラルネットワークなどを通して処理して結果を得ていました。

 それに対してディープラーニングは、特徴の抽出から識別まですべてがネットワークの中に入っているため、これまで人が作業していた特徴抽出を機械が自動で行なってくれる点が革新的なところです。

【司会】ディープラーニングはいつ注目されるようになったのですか。

【青野】ディープラーニングの概念自体はかなり古くからあったようですが、それが大きく注目されるようになったのは、2012年のILSVRCでの物体画像認識コンペティションで、ディープラーニングを用いたチームが圧勝したときでした。このチームはそれまでの認識精度を大きく超える精度を達成し、世界中の研究者に大きな衝撃を与えました。

 そういう意味では、ディープラーニングは画像認識の分野で大きく花を開いたと言えます。

ディープラーニングが応用できる分野

【司会】ディープラーニングが応用できる業種は何が想定されていますか。

【青野】実のところ、処理できるデータの業種は限定されていないと思います。近年は画像認識のみならず、機械翻訳のような、自然言語処理にも使われています。

 画像認識で言うと、顔認識などのセキュリティ分野や、例えば画像に似たものをサジェストしたりですとか、それからやっぱり車載、つまり自動運転といった分野ですね。

【青木】画像認識はの多くは分類問題ですので、対象を分類することで価値が生み出せる分野であれば、どこでも応用できる可能性を秘めています。それをみなさんが模索しているところですね。今は静止画だけでなく動画も高速に処理できますので、自動運転のみならず、工場での厳しい品質検査といった、これまで人間でないと難しかった作業の自動化が実現しています。

 面白いと言う意味では、「PaintsChainer」のような、自動的に線画を着色してくれるサービスや、画像の欠けた部分を自動的に補完するようなものも出てきています。

【青野】それからロボットの分野でも、ディープラーニングによってロボットの動きを良くするといった用途でも使われていますね。例えば部品のつかみ方を覚えさせるといったところですね。

処理の大半を肩代わりするフレームワーク

【司会】それでは、コンピュータの上で具体的にディープラーニングを実現するにあたって、どういったソフトウェアが必要になりますか。

【青野】今はディープラーニングを効率的に実行するためのフレームワークが多数提供されています。各会社で作っているので、そちらを使う感じですね。

 さきほど述べたように、ディープラーニングでは何かを入力して出力を得る順伝播と、誤差を逆伝播してパラメータを最適化する作業を繰り返すわけですが、そういったところをフレームワークが自動的にやってくれます。そのため人間は“こういうネットワークを作りたい”という“設計図”をフレームワークに渡してあげれば、それ以降の面倒な処理をフレームワークが自動的にやってくれます。

 具体的なフレームワーク名は、「TensorFlow」、「Caffe」、「Chainer」といったものがメジャーです。最近はTensorFlowやTheano(Pythonの数値計算ライブラリ)をバックエンドとして使用できるKerasもよく使われています。Kerasを使うことでTensorFlowやTheanoをそのまま使うよりも、より簡単にディープラーニングの計算ができるようになります。

何を重視すれば良いのかが難しい

【司会】では、今回のパソコン工房さんに作って頂くPCというのは、学習(順伝播と逆伝播を繰り返してパラメータを最適化する)の段階を想定したもののほうがいいですか、それとも推論(順伝播によって出力を得る)の段階で使うものと想定した方がいいですか。

【青野】できれば両方で使えるもののほうが面白いとは思います。学習の段階でもっとも演算リソースを要するのはもちろんですが、実は推論でも、例えばリアルタイムに結果を得ようと思うのであれば、それなりの性能が必要となります。もちろん、1分かかっても大丈夫といったリアルタイム性を求めないのでしたら、非力なマシンでも十分ですが。

【司会】それでは学習のフェーズではどの部分を重視すれば良いのでしょうか。やはりGPUですか。

【青野】処理時間の大半はGPUですので、性能を重視する場合はGPUに比重を置いたほうが良いと思います。ほとんどのフレームワークはGPUに対応していて、ディープラーニングの順伝播と逆伝播の計算はいずれもGPU側で行なわれることになるため、GPUの性能が重要ですね。

 一方CPUは基本的に前処理を担います。例えば画像の回転や拡大縮小といった処理です。ディープラーニングは入力するデータが多ければ多いほど、学習の精度が上がりますが、ユーザーは必ずしも多くのデータを所持しているわけではありません。そこで画像を拡大したり縮小したり、はたまた回転させたりして、見せかけ上学習データを増やすようなテクニックがよく使われるのですが、そういった前処理でCPUが使われます。

 もちろん、こういった前処理の部分をGPUで行なうことも可能ですが、初心者が例えばChainerやKerasなどのPythonで提供されているフレームワークを使う場合、前処理にはフレームワークに内蔵されている機能やPythonの画像処理ライブラリを使用することになると思います。

【パソコン工房】そういった処理にはCPUのコア数が多いもののほうが良いのでしょうか。

【青野】マルチスレッド対応した前処理機能を有するフレームワークを使う場合はCPUコア数も効いてくると思われます。 マルチスレッド対応でないフレームワークを使用する場合は、シングルスレッド性能が重要視されます。しかし、複数の学習を同時にさせるといった使い方も可能ですので、結果的にそういった使い方をするのであれば、マルチコアの方が適している可能性もあります。

【パソコン工房】そうすると、初学者にはCPUはクロックが高く、コア数は少なくてもよいということですね。極端な話、Core i3にGeForce GTX 1080 Tiを組み合わせるマシンもアリと。

【青野】そうですね、初学者が高負荷の前処理をCPUで行なわないと仮定するのであれば、アリかと思います。

 それから、どのぐらいの大きさのネットワークを作るかにもよって、必要とするGPUのメモリ量が異なってきます。さらに言えば、少数のサンプルをひとまとめにしたミニバッチと呼ばれる単位で学習を行なうことが多いのですが、そのときのバッチサイズ(いくつサンプルをまとめて計算するか)も必要とされるリソース量に影響してきます。大きいネットワークでもバッチサイズが1ならGPUのメモリに乗る場合もあれば、小さいネットワークでもバッチサイズが100を超えると乗らない場合もあります。このような感じで、GPUにも選択の幅があるので、一概に「このスペック」だと指標を作るのは非常に難しいですね。

【司会】近年、GoogleのTPUのようなディープラーニングに特化したハードウェアも出てきておりますが、そういったものの優位性はどうでしょう。

【青野】ディープラーニングやニューラルネットワークというと、人間の脳を模していて複雑なことをやっていると想像しがちですが、推論時に行なっている計算は実は単純な積和演算と、プーリングという間引き処理が大部分を占めています。多分ディープラーニングが流行り出した時に、それに最適だったプロセッサがたまたまGPUだったので、GPUが多く使われているのだと思います。ただ、推論を行なうだけであればGPUでもまだ機能がリッチだと言えます。その余分な機能を省いて高速化/省電力化したのがTPUだと思われます。

【青木】一般的にハードウェア化のメリットとしては、データ転送速度と演算速度のバランスを問題に最適化できる点が挙げられます。ディープラーニングの推論ではネットワークの形にもよりますが、規模が大きくなると、層間でやりとりするデータ量が増加するため、CPUやGPUにおけるデータ転送速度と演算速度のバランスでは非効率的になるケースが多々出てくると考えられます。

 TPUは、ディープラーニングの推論処理に最適なデータ転送速度と演算速度を得られるようにうまく設計されており、電力あたりの性能ではCPU に比べて83倍、GPUと比べて29倍もの実力差があるようです(参考)。

 Googleのような世界中のユーザーが使うサービスに対してディープラーニングを適用する場合、多くの計算リソースが必要になるため、より低消費電力で高性能なTPUが必要という理由はわかります。とは言え、TPUは一般消費者向けに発売されていませんし、学習フェーズをサポートしていません(第2世代のTPUで対応)。

 話がちょっとずれましたが、現状、お手軽にディープラーニングの学習から推論までを行なうのに適したハードウェアがGPUであるということは間違いないと思います。

【パソコン工房】つまりGPU重視だと一言で言っても、GeForce GTX 1080 TiやTITAN XのようなハイエンドGPUが適しているのか、GeForce GTX 1050のようなエントリークラスでも十分なのか、難しいということですか。

【青野】そうです。ユーザーが解きたい問題の難易度によって、必要とされるネットワークの規模は大きく変わります。基本的にネットワークは大規模であればあるほど精度が上がりますし、分類できる種類も増えます。それはユーザーのニーズ次第といったところですね。

【パソコン工房】ビデオメモリ容量はどの程度あれば良いですか。

【青野】GPUのメモリ容量が不足するとそもそも計算ができないといったことになりかねませんので、コストを考えなければ可能な限り大容量の方がいいですね。

【パソコン工房】単純に挿したカードの枚数に比例して性能は上がるのでしょうか? また、メモリ容量は単一カード分のみ有効なのでしょうか、各ボードに分散可能なのでしょうか。

【青野】複数枚挿しの方が性能は上がると思いますが、4枚挿したからと言って性能が4倍になるというわけではありません。これはモデルを分割するのかデータを分割するのかといった並列化の手法によっても変わってきますが、初心者の方は1枚挿しのほうが余計なことを考えなくてよいぶん、使い勝手が良いかもしれませんね。逆に上級者の方は学習を早く進めたり、単体のGPUでは計算できない大規模のネットワークの学習を行なうといった使い方ができるため、複数枚挿しを選ぶという選択肢もあるのではないでしょうか。

【パソコン工房】ちなみに、Pascalでディープラーニング向けに実装されたFP16(半精度浮動小数点)は実際の使用シーンでは有効に使われているのでしょうか?

【青野】FP16を有効に使うためには、GPUとフレームワークの両方がFP16に対応している必要があります。GPUについては、現行のPascal世代でFP16のpacked演算に対応しているのはTesla P100とQuadro GP100のみのようなので、コンシューマ向けのGPUを使用している限りはあまり使う機会がないのかなと思います。また、GPUがFP16に対応していてもフレームワーク側が対応していないと使えないので、FP16を使いたい場合はフレームワーク側の対応状況も調べておく必要があります。

【パソコン工房】具体的にメインメモリの容量や、ストレージの速さについてはいかがでしょうか。

【青野】そうですね、こちらもデータサイズによるので、一概に「このスペック」とは決められないですね。メインメモリは扱うデータサイズに応じて多ければ多いほど良いですし、メインメモリにデータが乗りきらない場合は、ストレージへのアクセスが増えますので、ストレージ速度も速ければ速いほどよいということになってしまいます。

データはストレージからメモリ上に展開され、前処理した後GPUにデータが送られる

【司会】今回の構成は難しいですね。

【パソコン工房】そうですね。大変貴重なお話を聞かせていただき、ありがとうございました。いただきました内容を基にいくつかモデルを用意いたしますので、検証をお願いできればと思います。

幅広い価格構成のラインナップになる?

 この討論は約1時間半にもおよんだが、ユーザーのニーズに合わせて、広い価格帯で製品ラインナップを用意したほうが良いと言う結論に至った。初学者で小規模なニューラルネットワーク向けには、Core i5やエントリークラスのGeForceを搭載して10万円以下のモデルを用意。将来的な拡張性も考慮したアドバンスモデルは、Intel X99プラットフォームをベースに、Core i7とGeForce GTX 1060、メモリ32GBあたりが妥当だろう。一方、複数バッチを一度に処理できるプロ向けモデルは、アドバンスモデルをベースにメモリやGPU数を強化したモデルを検討する。

 特に、「ディープラーニングを始めるならとりあえず30万円台のPCが必要」という風潮が世の中的にはあるようで、「10万円台のPCでディープラーニングを始められるのか」ということにチャレンジしてみるのが、エントリーモデルの目論みだ。

 後編は、フィックスターズの青野氏と青木氏が、試作機を実際に使い、その可能性と、性能の検証をお届けする。