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

投稿

12月, 2017の投稿を表示しています

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

新年明けましておめでとう。 2017年を振り返ると自分が社会人1年目だったということもあり、四苦八苦しながらも成長できた1年だった。まだまだ卵がヒナになったくらいだが、2018年は去年やりたかったけど出来なかったことにチャレンジしてみたい。(^ω^) 新年一発目は去年の末から読み進めている「GPUを支える技術」の続きだ。 とても面白い本なのでじっくりと読んでいるが、他に読みたい本も積んでいるので少し急ぎ足になってしまうかもしれない。(´Д`) 4章 GPUの超並列処理 [前半] 4.3 AMDとARMのSIMT方式のGPU ここではAMD GCNアーキテクチャとARM Bifrost GPUについて取り上げている。 AMDやARMのGPUについて扱っている他の本を見たことがないので、とても貴重なのではないかな?(^ω^) AMD GPU GCNアーキテクチャ AMDは2012年にGCN(Graphics Core Next)という、NVIDIAと同じSIMTを採用したアーキテクチャを導入した。(それまではVLIWというISAだったらしい。) AMD GCNアーキテクチャはコンピュートユニット(CU)とローカルデータシェア、グローバルデータシェアというメモリを持つ。グローバルデータシェアをつかうと、全ての異なるCUの全てのスレッド間でデータの共有を行うことができる。さらに、それはGPUチップ内臓のSRAMでできているため、デバイスメモリと比べて高速である。 また前章で述べたように、AMDのGPUは64つのスレッドを同時に実行する。CUは64個の32-bitの浮動小数点演算機(FP32)と24-bitの整数演算器を持っているが、DPはなく、代わりにFP32で複数サイクルかけて計算できるようになっている。 以下にNVIDIAとの各要素の比較を表にして示す。(マークダウンで書いたテーブルがBloggerでは何故か正しくレンダリングされない。。(;^ω^)) 項目 NVIDIA AMD 計算コア SM CU スレッド間共有メモリ シェアードメモリ ローカルデータシェア 高速グローバルメモリ なし グローバルデータシェア グローバルメモリ デバイスメモリ デバイスメモリ スレッド同時実行数

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

今回は以前話した本ブログのコンセプト「基礎と応用」の応用編ということで、 「A Survey of Model Compression and Acceleration for Deep Neural Networks」の邦訳と簡単な感想を記載しようと思う。 前の投稿ではDeepLearning x HWについての論文をまとめると書いたが、今回はどちらかというとHWに適用する前の段階で、いかにして論理的または経験的にネットワークを圧縮、高速化するかという内容だ。もちろん本文で紹介されている研究には、特定のアーキテクチャに特化させた手法を提案しているものもある。 この論文はIEEE信号処理マガジンに掲載され、2017年10月にarXivに公開されたものである。(この情報あってるかな?? (;^ω^) ) なお、筆者の英語力は期待できるほどのものではないので、あくまで参考程度にとどめておくことをおすすめする。むしろ間違った解釈があればご指摘頂きたい。(´・ω・`) 論文は全部で9章からなるので、1〜2, 3〜5, 6〜7, 8〜9それぞれ分割して、合計4回くらいの投稿にしようと考えている。今回は概要と1、2章を対象にする。 A Survey of Model Compression and Acceleration for Deep Neural Networks Yu Cheng, Duo Wang, Pan Zhou, Member, IEEE, and Tao Zhang, Senior Member, IEEE Paper URI Abstract 近年、DCNN (Deep Convolutional Neural Network)は多くの画像認識タスクにおいて、めざましい成功をおさめている。しかし、実存するDCNNモデルの高価かつメモリ集中な計算は、小メモリ資源のデバイスやレイテンシ要求の厳しいアプリケーションで利用することを難しくしている。このような中で、深いモデルに対してそのモデルパフォーマンスを下げることなく、モデルの圧縮や高速化を実施することは自然な発想であり、ここ数年では特に優れた進展が見受けられる。この論文ではCNNモデルの縮小化と高速化における最先端の技術を調査した。これらの技術は大きく以下の4つに分類される。

GPUを支える技術読み始めた 第3章

今回で第3回目の投稿だが、前回から1週間ほど間が空いてしまった。 一応、可能な限り1週間以内には更新をするということを目標に続けていこうと思っているが、なかなかに忙しく、じっくりと本に浸る時間が取れないのは惜しい。 今年も残すところごく僅かだが、少なくとも後1回は年内に更新できるようにしたい。 3章 GPUと計算処理 3章ではGPUによる3D画像表示のロジックを説明していた。 ただ、既におなじみだが、この辺の部分は流し読みにとどめておいた。 後半に科学技術計算の部分が少しあり、そちらをメインに読み進めたので3章の感想は短めだ。 西川善司さんの「ゲームグラフィックスとGPU」のコラムは面白そうなので後で読み返したい。 グラフィック処理を行うハードウェア構造 Intel HD Graphics Gen 9 GPU coreの基本構成が少し乗っていた。 よく名前を聞くIntel coreシリーズはCPU内にGPUコアを内蔵している。中にはGPUのチップ面積の方が多いものもあるらしい。 計算ユニットにはEUという名前がついており、各EUは毎サイクルで8個の積和演算を行える。このEUが最大で72つ搭載されているため、合計576CUDAコア相当になるらしいが、動作周波数はおそらく違うのだろう。 仮に周波数をintel coreシリーズのCPUから勝手に推定して3GHzとすると \[ \begin{align} &8 \times 72 = 576 \, \mathrm {MAC/cycle} \\ &576 \times (3 \times10^9) = 1728 \, \mathrm {GMACS}\\ &1728 \times 2 = 3456 \, \mathrm {GOPS}\\ \end{align} \] ふむ、だいたい3.4 TOPS (FLOPS??) か。 確か、core i9 7900Xが1TFLOPSちょいなのでオンチップとしては結構高い方なのかも知れない ( ref )。ただ、今年発表されたmovidiusのmyriad Xは4TOPSなので、こちらはハイエンドのオンチップGPUより高速だということになる ( ref )。また、本書の1章?でかるく触れられていたように、L3キャッシュ

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

今年もあと少しになってきたが、なんとか目標だったもう一本を投稿することができて良かった。 私情だが、先日の社内年末パーティでは年間MVPに選出していただいた。\(^o^)/ 非常に嬉しく思うと同時に、いろんな面でサポートをしてくれたHWチームメンバやバックオフィスに感謝したい。 また、来年は社内だけでなくて社外にも影響を与えられるよう頑張っていきたい。 少し気が早いが、来年度の本ブログの方針として「基礎と応用」というコンセプトで書いていきたと考えている。古典的名著と最新の論文の要約などができたら上出来だろうか。(^ω^) 直近だと、DeepLearning × HWに関するの新しめの論文や並列処理技法系の本のまとめを計画している。もしかすると、年内にまだいけるかもしれない。 良い報告もできたところで、早速続きを初めていこうと思う。 4章は個人的には一番楽しみな章でじっくり読んでいる。内容が多いので前半と後半に分割して投稿していく。 4章 GPUの超並列処理 [前半] GPUの並列処理方式 先の章で並列処理方式について以下のように説明した。 SIMD: 1つの計算を幾つかのデータに対して並列に実行する SIMT: 1つの計算を別々の演算機で並列に実行する 4章では上記2つについてもう少し詳しく解説している。 SIMD方式 以下2つのベクトルXと行列Aがあるとする。 \[ \begin{align} \bf{X} &= (a, b, c) \\ \bf{A} &= \left( \begin{array}{ccc} a00 & a01 \\ a10 & a12 \\ a21 & a21 \end{array} \right) \\ \bf{Y} &= \bf{X} \cdot \bf{A} \end{align} \ \] Yを計算する時、SIMDでは先にXの列要素(a)を各演算機にブロードキャストし、Aの行要素(a00, a10, a20)と計算する。この動作をXの列要素分繰り返すことで計算を完了する。 仮に、Xの要素がシェアードメモリ(後述)など、レイテンシのあるメモリに格納されている場合、各ブロードキャストでサイク

GPUを支える技術読み始めた 第2章

2日連続で第2回目の投稿である。 そもそも書き溜めをしてあったり、本ブログを初めたのが土日で比較的時間をとれたのは大きい。 前回でBloggerのエディタではMarkdownやLatexが使えず不便だったので、どうにかならないかと探していたところ、 このブログ を見つけ Classeur というWebエディタを使い始めた。 普段はメモ用として使っているQuiverやAtomと言ったオープンソースの高性能エディタを使うこともできたが、やはり変更のたびに投稿を行わなければいけないのはめんどくさい。ClasseurはMarkdownが使え、かつBloggerと連携して1クリックで更新ができる。いつもながら有益な情報を残してくれた先人に感謝である。 物事を継続するのコツとして、いかにメイン作業以外の手間を減らすが重要だと感じているので、ここでもそれに従うことにする。 もちろん環境の導入やそもそもの事前調査に時間は使ったが、長く続ければ十分にもとがとれるので、初めのうちにやっておいた( ・´ー・`) 上記以外にもLatexを使えるようにするためにMathjaxをBloggerのテンプレートに導入した。 準備は万端、早速書き始めよう。 2章 計算処理の変革 ゲームと画面描画の内容が多く、少し前回と同様に流し読みぎみ。 初期グラフィックボードである1983 年に Intel が発表した iSBX 275というボードは、256 x 256ピクセル解像度で8種類の色を利用可能だった。 続く1996年にha3dfx Interactive社がVoodooシリーズを、1999年にはNVIDIAはGeForde 256を発表した。 GeForce 256を含む初期GPUの主な目的は、3Dグラフィックスに必要なT & L(Transpose & Lighting)処理を高速に行うためであったが、当初の性能はハイエンドCPUに負ける程度であった。その後、ムーアの法則に従って搭載できるトランジスタの量が増えるにつれて、CPUの10倍以上の性能を出せるようになっていく。 当初はTransposeとLightingの処理は別々のパイプラインとなっていたが、 リソースを柔軟に使いまわしすことで、効率を上げるUnified shaderが用いられるよう

GPUを支える技術読み始めた 第1章

待望のブログ第一弾!(誰の?) ということで、「GPUを支える技術」の簡単な要約と感想を書いていこうと思う。 余談だが、Bloggerは本家ではMarkdownをサポートしていないようだ? Web上ではStackEditなるエディタを使ってMarkdownを書いている人がちらほら見られる、、 Blog初心者なんでこの辺はよくわかりませんが、もしかしたら導入していくかも? ここから本題。 GPUを支える技術、今回は諸事情によりPDF版で購入した。 毎度本を買うときは悩むんですよねー、 PDFは便利なんだけど仕事の終わりとか目が疲れてる時には本のほうが集中できたりするんで。 全体の構成はこんな感じ 、 第1章 [入門]プロセッサとGPU 第2章 GPUと計算処理の変遷 第3章 [基礎知識]GPUと計算処理 第4章 [詳説]GPUの超並列処理 第5章 GPUプログラミングの基本 第6章 GPUの周辺技術 第7章 GPU活用の最前線 第8章 プロセッサとGPUの技術動向 (引用: http://gihyo.jp/book/2017/978-4-7741-9056-3) おお、すごく面白そう(^o^) 仕事柄GPUはよく利用するし、詳しい内部アーキテクチャにも興味があるのでちょうどいいかも。 早速、 第1章を読んだので以下に以下にメモ。 1章 概論的な感じ。 その他にはディスプレイやゲームグラフィックス中でのオブジェクトの表示方法について述べている。 CPUはスポーツカー, GPUはバスと例えているのも面白い。 GPUの歴史 NvidiaがGPUを1999年に発売, GPUという命名もNvidia。 初めの10年はinteger演算のみ、その後floatへ。 GPUの性能 CPUとの性能比較が乗っていた。 浮動小数点演算において、Nvidia GTX1080 は intel corei7 6700k の16倍早い。 8,228GFlops / 512GFlops ~= 16.07  ( Latex使いたいな。。) オフチップのメモリバンド幅も約9.4倍多い。 320(GB/s) / 34.1(GB/s) ~= 9.38` オンチップメモリは4倍少ない。(L

コンピュータと機械学習に関するブログ始めました。

みなさん、はじめまして。 tkclimb と申します。(読みづらい) 趣味はコンピュータに関するなにか!?という少し変わった人間ですが、 自分が学んだことや読んだ本や論文の要約を記録するためにブログをはじめました! 自身の理解と同時に読者に役にも立てばなーと、適当に考えています笑 テーマは以下が中心になるかなと思います。 Computer Architecture Machine Learning (Deep Learning) High Performance Computing Mathematics & Algorithm English Second Language !? 偉そうに英語で書いていますが、だいたいコンピュータに関する何かで、内容も基本的なことが多いと思います。そう、何事も基礎から始めることが重要なんです!!(言い訳) また、ESLとかコンピュータとは関係ないものも含んでいます。要するに興味があってやったことや調べたことのまとめという感じです。 日々の忙しさにもまれながら、ぼちぼち更新していけたらなと思いますー 一応更新はTwitterなどでも告知するので、気になる方がいたら目を通してみてください。