スキップしてメイン コンテンツに移動

投稿

1月, 2018の投稿を表示しています

GPUを支える技術読み始めた 第5章[後半]

GPUを支える技術読み始めた 第5章[後半] 最近、仕事の忙しさにかまけて全然ブログを更新できていなかったが、なんとかGPUを支える技術の5章までを投稿することができた。 時間がないわけではないのだけどだけど、普通の読書や実装などに時間を割くと、なかなか文章を書く暇がない。。 _| ̄|○ 効率を重視しながらも、重要なところを上手くまとめて復習に役立てられるブログにしていきたい。 第5章 GPUプログラミングの基本[前半] 5.4 GPU プログラムの最適化 GPUで最大限力を発揮するには、その資源を有効に使うプログラム作成する必要がある。 具体的には以下のような点が重要である。 スレッドブロックはSMの数の整数倍にする NVIDIAのGPUはスレッドブロック単位で各SMに割り当てられ計算される。1度の割当で計算しきれない分は2巡目以降にで割り当てられる。この場合、スレッドブロックの数が中途半端だと最後のターンでSMにあまりが出てしまう。ただし、複数カーネルを同時に実行する機能もあるので、他のカーネルがあれば空いたスペースは自動で埋められる。 演算機の計算パイプラインを意識する 演算器が前の計算を行ってからその結果を再度利用するには10サイクルほど要する。NVIDIA GPUはワープ(32スレッド)を同時に計算を行うが、ワープの結果を利用する予定の他のワープはその実行時間分を待つ必要がある。この隙間時間はワープスケジューラが別のワープを演算機に割り当てるが、全部で64ワープしかない、SM1つあたりのレジスタファイルは65,536個(1スレッドあたり32個)しかないということを考慮してプログラムを作成する必要がある。なお、ワープがDDRアクセスを必要とする場合、400〜800サイクルかかることもある。 条件分岐への配慮 以前の章でも説明したとおり、プレディケートによる条件分岐はif, elseの両方

GPUを支える技術読み始めた 第5章[前半]

GPUを支える技術読み始めた 第5章[前半] 新年の休みもとうに終わり、皆さんどうお過ごしだろうか。 ちなみに主は年末読む予定であった本や論文を全く消化できずに今に至ってしまった。 年末年始は時間があったので、ひたすら読んでいたはずなのになぜだ。。_| ̄|○ 読むのが遅いのがいけないのか?翻訳するのが遅いのか??それともそれをまとめるのに時間がかかっているのか。 おそらく全て当てはまるが、時間がかかるものは仕方がないので、少しずつ慣れていくしかないなー。。(-_-;) 余談だが、年末にブログ執筆環境を再構築した。 今まではwebエディタの Classeur を利用していたが、やはり純粋なWebアプリケーションなのでレンダリングやアップデートに問題があった。そこで、今までも利用していたAtomを少しカスタマイズして試してみたが、どうにも動作が重くかつ、vim-modeがいい感じにならずに残念に思っていたところ、vscodeのことを思い出した。どちらもエレクトロンベースだが、vscodeはAtomより全然軽く、markdownプラグインも豊富にあるので、すぐにmarkdown+mathjax環境を構築することができた。いやはや、世の中は便利になったものだ(^ω^) せっかくなので、下に執筆環境のスクリーンショットを自慢げに貼ってみようと思う。(markdownは頻繁に見る必要はないので、普段はプレビューは別のタブで開いている) もしかして、こういうことしてるから時間がかかるのかな??/(^o^)\ それでは、本題に戻ろう。 今回はGPU支える技術の第5章だ。4章と同じく楽しみにしていた章なのでじっくり読んでいきたい。 なお今回も長い章なので、前半と後半に分けてまとめと感想を書いていく。 第5章 GPUプログラミングの基本[前半] GPUの超並列プロセッサでプログラムを実行するには、超並列で実行でき

「A Survey of Model Compression and Acceleration for Deep Neural 」の邦訳と感想 [その3]

「A Survey of Model Compression and Acceleration for Deep Neural Networks」の7,8章だ。一応今回で謝辞を除く全ての章を訳すことができたので、これでこの論文は終りとなる。 ここ最近は読みたい本が多すぎて悶々としていたが、目移りせず無事に最後まで訳せて良かった(;^ω^) A Survey of Model Compression and Acceleration for Deep Neural Networks Benchmarks, Evaluation and Datasets 過去5年の間、ディープラーニングコミュニティはベンチマークモデルに対して多大な努力を図ってきた。CNNの圧縮と高速化に利用されている最もよく知られているモデルの1つはAlexnetである。これはよく圧縮の性能を見積もる際に利用される。他の有名な標準的モデルには、LeNetsやAll-CNN-nets等がある。LeNet-300-100は全結合のネットワークであり、300と100の2つの隠れ層を有している。LeNet-5は、2つの畳み込み層と2つの全結合層を持つ畳み込みネットワークである。 近年、多くの研究で更にたくさんのSOTAなアーキテクチャがベースラインモデルとして用いられている。これはnetwork in network(NIN)うやVGGネット、residual networks(ResNet)などを含む。テーブルⅣは典型的な圧縮手法において、よく用いられているベースラインモデルのサマリである。 モデル圧縮と高速化の質を測るための標準的な基準は、その圧縮率と加速率を測定することである。元のモデル のパラメータの数を 、圧縮後のモデル のパラメータ数を とすると、その圧縮率 は以下で表される。 その他の広く使われている測定法は、研究 1 , 2 において、以下の用に定義さたインデックス空間の節約である。 と はそれぞれ、元のモデルと圧縮後モデルにおけるインデックス空間の次元数である。似たように、 の実行時間 と、 の実行時間 が与えられた時、その高速化率 は以下のように定義される。 実行時間を測定するために、多くの研究がエポックごとのトレーニング時間の平均を用いている一方で、研究

「A Survey of Model Compression and Acceleration for Deep Neural 」の邦訳と感想 [その2]

新年第2弾は同じく昨年の続きである、「A Survey of Model Compression and Acceleration for Deep Neural Networks」の3, 4, 5, 6章だ。初めは4回に分けて論文の翻訳していくと書いたが、少しペースが上がったので今回と次回の計3回で済みそうだ。 少し慣れてきたかな?? (^ω^) A Survey of Model Compression and Acceleration for Deep Neural Networks Ⅲ. Low-Rank Factorization and Sparsity コンボリューション演算はたくさんの深いCNNに影響を与えてきたため、この層を削減することは、圧縮率を改善して全体的な高速化につながるだろう。コンボリューションカーネルは4次元のテンソル見なすことができる。行列分解に基づくアイディアは、この4次元のテンソルの中に大量の冗長性があるため、それらを除去するのに特に有効な方法だろうという直感から導出された。全結合相に関しても2次元行列とみなすことができ、同様に低ランク近似が役に立つ。 長い期間、コンボリューションの高速化に低ランクフィルタが用いられてきた。例えば高次元DCT(Discreate Consine Transform)や、一次元DCTと1次元ウェーブレットをそれぞれに制約されるテンソル積を利用したウェーブレットシステム等である。分離可能な1次元フィルタを学習することは Rigamontiら によって、辞書学習のアイディアとともに導入された。幾つかの単純なCNNモデルに対して、幾つかの低ランク近似とコンボリューションカーネルのクラスタリングスキームが Emilyら によって提示された。彼らは単精度のコンボリューションレイヤに対して、1%の分類誤差で2倍の高速化を達成した。 Speeding up Convolutional Neural Networks with Low Rank Expansions ではテキスト認識において、異なるテンソル分解方法を用いた4.5倍の高速化と1%の誤差の低下を報告した。この低ランク近似はレイヤ毎に行わる。一つの層のパラメータはそれが終わった後に確定され、上位の層は最高正誤差基準に基づいて微調整される。これ