2022年7月28日に開催された「CUDA高速化セミナーvol.3 ~ソフトウェア高速化と深層学習~」の当日資料です。
Copyright © Fixstars GroupCUDA 高速化セミナー vol.3ソフトウェア高速化と深層学習
View Slide
Copyright © Fixstars Groupこれまでのウェビナー紹介いまさら聞けない CUDA 高速化入門https://speakerdeck.com/fixstars/imasarawen-kenai-cudagao-su-hua-ru-men画像処理アルゴリズムの高速化https://speakerdeck.com/fixstars/cudagao-su-hua-seminavol-dot-1-hua-xiang-chu-li-arugorizumufalsegao-su-huaCUDA アーキテクチャの進化https://speakerdeck.com/fixstars/cudagao-su-hua-seminavol-dot-2-cudaakitekutiyafalsejin-hua資料は Speaker Deck をご覧くださいhttps://speakerdeck.com/fixstars/
Copyright © Fixstars Group本日のAgenda● フィックスターズのご紹介 (15分)● ソフトウェア高速化と深層学習(60分)○ ソフトウェア高速化○ 深層学習○ GPUと高速化● Q&A● 告知3
Copyright © Fixstars Group発表者紹介冨田 明彦ソリューションカンパニー執行役員前職では組込み向けCPUのデジタル設計に携わる。2008年にフィックスターズへ入社。金融、医療業界において、ソフトウェア高速化業務に携わる。その後、新規事業企画、半導体業界の事業を担当し、現職。4二木 紀行ソリューション第一事業部エグゼクティブエンジニア理化学研究所でスーパーコンピュータを利用したバイオ系の研究に10年以上携わる。2010年にフィックスターズへ入社。GPUプログラムの高速化、分散並列処理、深層学習のアーキテクチャ開発まで、幅広く業務を担当。SC06でゴードン・ベル賞を受賞。博士(薬学)、薬剤師。
Copyright © Fixstars Groupフィックスターズのご紹介
Copyright © Fixstars Groupフィックスターズの強みコンピュータの性能を最大限に引き出す、ソフトウェア高速化のエキスパート集団ハードウェアの知見 アルゴリズム実装力 各産業・研究分野の知見6目的の製品に最適なハードウェアを見抜き、その性能をフル活用するソフトウェアを開発します。ハードウェアの特徴と製品要求仕様に合わせて、アルゴリズムを改良して高速化を実現します。開発したい製品に使える技術を見抜き、実際に動作する実装までトータルにサポートします。
Copyright © Fixstars Groupサービス概要お客様専任のエンジニアが直接ヒアリングを行い、高速化を実現するために乗り越えるべき課題や問題を明確にしていきます。高速化のワークフローコンサルティング先行技術調査性能評価・ボトルネックの特定高速化アルゴリズムの改良・開発ハードウェアへの最適化レポート作成サポートレポートやコードへのQ&A実製品への組込み支援7
Copyright © Fixstars Groupサービス提供分野8半導体自動車産業機器生命科学金融●NAND型フラッシュメモリ向けファームウェア開発●次世代AIチップの開発環境基盤●自動運転の高性能化、実用化●次世代パーソナルモビリティの研究開発●Smart Factory実現への支援●マシンビジョンシステムの高速化●ゲノム解析の高速化●医用画像処理の高速化●AI画像診断システムの研究開発●デリバティブシステムの高速化●HFT(アルゴリズムトレード)の高速化
Copyright © Fixstars Groupサービス領域様々な領域でソフトウェア高速化サービスを提供しています。大量データの高速処理は、お客様の製品競争力の源泉となっています。9組込み高速化画像処理・アルゴリズム開発分散並列システム開発GPU向け高速化FPGAを活用したシステム開発量子コンピューティングAI・深層学習自動車向けソフトウェア開発フラッシュメモリ向けファームウェア開発
Copyright © Fixstars GroupAI・深層学習向け技術支援AIを使うためのハードウェア選定や、高速な計算を実現するソフトウェア開発技術で、お客様の製品開発を支援します。お客様の課題推論精度を維持したまま計算時間を短縮したい組込みデバイス向けにAIモデルを軽量化したいご支援内容AIモデル設計データの前処理・後処理推論精度の改善分散処理による学習高速化モデル圧縮・推論の高速化学習計算を高速化して研究開発を効率化したい精度と計算時間を両立するAIモデルを開発したい
Copyright © Fixstars Group画像処理アルゴリズム開発高速な画像処理需要に対して、経験豊富なエンジニアが責任を持って製品開発をご支援します。お客様の課題高度な画像処理や深層学習等のアルゴリズムを開発できる人材が社内に限られている機能要件は満たせそうだが、ターゲット機器上で性能要件までクリアできるか不安製品化に結びつくような研究ができていないご支援内容深層学習ネットワーク精度の改善様々な手法を駆使して深層学習ネットワークの精度を改善論文調査・改善活動論文調査から最先端の手法の探索性能向上に向けた改善活動を継続アルゴリズム調査・改変課題に合ったアルゴリズム・実装手法を調査製品実装に向けて適切な改変を実施
Copyright © Fixstars GroupGPU向け高速化高性能なGPUの本来の性能を十分に引き出し、ソフトウェアの高速化を実現します。お客様の課題GPUで計算してみたが期待した性能が出ないGPU/CPUを組み合わせた全体として最適な設計がしたいご支援内容GPU高速化に関するコンサルティングCPU・GPU混在環境でのシステム設計アルゴリズムのGPU向け移植GPUプログラム高速化継続的な精度向上原価を維持したまま機能を追加するため、もう少し処理を速くしたい品質確保のため、精度を上げたく演算量は増えるが性能は維持したい
Copyright © Fixstars Group深層学習適用時の課題と本講演でのアプローチ1. 学習・推論に時間がかかりすぎる!132. 学習・推論の処理を速くするには?○ GPU を使う?○ なぜ処理を速くできる?3. 深層学習の高速化に向けて基礎技術をおさえよう!○ ソフトウェアの高速化技術○ 深層学習の仕組み
Copyright © Fixstars Groupソフトウェア高速化と深層学習
Copyright © Fixstars Groupアジェンダ● ソフトウェア高速化○ ソフトウェア高速化とは何か?○ 速度×電力×場所○ 高速化を行うためのハードウェア○ 高速化の手段● 深層学習○ 深層学習と高速化○ ニューラルネットワーク○ 「推論」と「学習」○ 畳み込みニューラルネットワーク(CNN)○ 誤差逆伝播法○ バッチ処理○ 行列計算● GPUと高速化○ 分散並列化○ さらなる高速化15
Copyright © Fixstars Groupソフトウェア高速化とは何か?● プログラムを速くすること● 例えば、あるリストを昇順に並び替えるプログラムが遅いので速くしたい○ 速いアルゴリズムを使用■ 遅い: 隣接する値を比較して入れ替えていくバブルソート■ 速い: ある基準値未満と以上の2グループに分割して処理していくクイックソート○ 既存のライブラリやフレームワークを使用○ 速いコンピュータを使用○ 既にソート済みの数列を使用● 目的を達成できればOK○ 条件と制約 – 高速化をするにあたり検討16
Copyright © Fixstars Group速度×電力×場所17どれだけ速くする必要があるのか?どのくらい電力を使えるのか?どれだけの場所を用意できるのか?
Copyright © Fixstars Group速度● 速度は高速化の主目的● 必要な速度○ 実行される関数の速度○ システム全体の速度● 目的と手段○ 目的を明確にする○ 取りえる手段を確認18
Copyright © Fixstars Group電力● 高速化の対象となるコンピュータ○ 車載デバイス○ スマートフォン○ PC○ クラウドコンピュータ○ スーパーコンピュータ● 電力とコスト○ どれだけの電力が利用できるか?○ 高速化による利益よりも電力のコストが上回っていないか?19
Copyright © Fixstars Group場所● 利用場所は様々○ オフィスのデスク○ サーバルーム○ データセンター○ 自動車○ クラウドサービス● PC内のスペース○ GPUのボードは何枚搭載可能か?● セキュリティ○ ネットワーク利用の有無20
Copyright © Fixstars Group高速化を行うためのハードウェア● CPU● GPU● FPGAとASIC● クラウドコンピューティング● エッジデバイス● 高性能コンピューティング(HPC)● 量子コンピュータ21
Copyright © Fixstars GroupCPU● 一般的なPCに搭載され、プログラムを実行・処理○ 高性能あればより高速に動作● アセンブリに近い低レベルでのコードによりCPU の機能や特性を活用した高速化が可能● 1つのCPU内に複数のコアを搭載○ マルチコア・メニーコア○ 計算処理をそれぞれのコアで分担した並列処理による性能向上が可能22
Copyright © Fixstars GroupGPU● グラフィックス演算処理装置○ 画像処理に特化した演算装置● 画像処理以外の用途に利用● GPUに搭載された数千個のコアを利用することで大規模な並列計算が可能● 大規模な並列計算や浮動小数点数演算が得意○ 深層学習による演算処理と親和性が高い○ さまざまな深層学習系ライブラリを提供○ 学習・推論時の高速演算に利用23
Copyright © Fixstars GroupFPGAとASIC● FPGA (Field Programmable Gate Array)○ プログラミング可能な集積回路○ 作成した集積回路は後から書き換え可能■ 目的に合わせた処理が可能● ASIC(Application Specific Integrated Circuit)○ 設計後の変更が困難○ 初期投資に費用がかかる○ 消費電力が低い○ 動作が高速○ 大量に生産する場合に単価が安い● 集積回路の設計には、Verilog HDLやVHDLなどのハードウェア記述言語を利用24
Copyright © Fixstars Groupクラウドコンピューティング● コンピュータネットワークを介して、コンピュータの処理能力をサービスとして遠隔から提供○ AWS (Amazon Web Services)○ GCP (Google Cloud Platform)● 手元の端末が貧弱であってもクラウド側のサーバが処理をすることで高度で高速な演算が可能● 利用者は電力やスペースの制約を考慮する必要がない● セキュリティの厳しいスタンドアロンのシステムなどでは利用が困難○ ネットワークの外に出せないような機密データ● レイテンシが重要視されるシステムには向かない25
Copyright © Fixstars Groupエッジデバイス● インターネットに接続された装置のこと○ スマートフォン○ インターネット家電● クラウドコンピューティングにより情報を高速に処理可能● エッジデバイス側で高度な処理を行うエッジコンピューティング○ ネットワークの遅延やサーバの負荷を低減し、高性能演算を可能に○ エッジデバイスにおける高速化はシステム全体へ大きく寄与26
Copyright © Fixstars Group高性能コンピューティング(HPC)● HPCとは、科学技術計算などを主とした非常に処理性能が高い計算処理のこと○ 多数のCPUコアと超高速のネットワークシステムを搭載○ ネットワーク上に存在する複数のコンピュータシステムと連携し分散処理27
Copyright © Fixstars Group量子コンピュータ● 従来のコンピュータでは現実的な時間で解くことが困難な問題に対して、量子力学的な現象を利用して効率的に解くためのコンピュータ● 量子力学的な現象○ 2つ以上の状態を同時に取り得る事象○ 「量子ビット」で表現○ 複数の状態を表現できる量子ビットに対して量子力学的な操作を行い、それらを観測することで結果を得る● まだ開発途上の技術○ 一般的に利用できるようになるまでにはしばらくかかる見込み○ 組合せ最適化問題に特化している量子アニーリングマシン○ NISQと呼ばれる誤り訂正機能のない量子コンピュータ28
Copyright © Fixstars Group高速化の手段● 定数倍高速化● アルゴリズムの改善● ライブラリの利用29
Copyright © Fixstars Group定数倍高速化● コンピュータによる計算処理を改良・改善することにより計算量のオーダーを変えずに高速化すること○ 計算負荷の高い除算を減らす○ キャッシュを効率的に利用○ コンパイラのオプションを調整して最適化● 本質的な計算アルゴリズムを変更せずに高速に処理されるような改変全般が対象30
Copyright © Fixstars Groupアルゴリズムの改善● 低レイヤを最適化の対象とした定数倍高速化に対して、アルゴリズムの改善による高速化は極めて効果を期待できる場合がある○ 高速なアルゴリズム○ 近似アルゴリズム○ 並列化アルゴリズム● 計算量オーダーのレベルで高速化○ バブルソート(𝑂 𝑛2 )とクイックソート(𝑂 𝑛 log 𝑛 )31
Copyright © Fixstars Groupライブラリの利用● 最適化されたライブラリやフレームワークの使用して高速化● GPUを利用した汎用深層学習ライブラリ○ PyTorch○ TensorFlow● NVIDIA GPUによる深層学習用ライブラリcuDNN○ 深層学習ライブラリのコア技術として組み込まれる● 推論の実行に関しては、複数レイヤにまたがる処理に対してメモリ使用量の削減やカーネルの最適化を行うTensorRT● 数値演算の高速化○ Intel CPU用のMKL (Math Kernel Library)○ NVIDIA GPU用のcuBLAS32
Copyright © Fixstars Group高速化を行う前に● 調査・分析・検証○ 対象を調べて必要なことを見つける● プロファイリング○ 対象を調べる方法の一つであり、各関数の実行時間や呼び出し回数などがわかる● ボトルネック○ 最も時間のかかる場所のことであり、そこを改善することにより全体の性能が顕著に向上● リファクタリング○ 直接の性能を向上させるものではなく、改善や改良を行う際に高い作業効率が期待できる33
Copyright © Fixstars Group深層学習と高速化● 深層学習について○ 単純なニューラルネットワークから始まり、複雑なCNNやRNNなどの様々なアーキテクチャが存在する○ 「学習」によりニューラルネットワークモデルを作り、そのモデルを使って「推論」を行う● 高速化の必要性○ 深層学習のアーキテクチャのほとんどは膨大な計算を行う必要がある○ 深層学習を行う対象や環境は様々であり、それぞれに適した処理能力が必須となる● 速度と精度○ 深層学習を利用する上で精度は最も重要○ 環境や目的に合わせて判断する必要がある34
Copyright © Fixstars Groupニューラルネットワーク● 脳の神経細胞(ニューロン)を模した、相互に接続する複数のノードからなる多数のネットワーク層を持つモデルのこと● 大量のデータを用いて「学習」を行い、学習されたモデルから分類や予測などの「推論」をする35ニューラルネットワークモデル「学習」により作られる「推論」で答えを求める
Copyright © Fixstars Group「推論」と「学習」● ニューラルネットワークモデル○ 計算に必要な複数のパラメータを持ち、多くの場合、それを多層で表現される● 推論とはモデルを使って結果を求めること○ 入力データに対して、モデルの持つパラメータを使って計算を行い、出力結果を得る● 学習とはモデルのパラメータを決定すること○ 学習データを使って、モデル内のパラメータを計算で決定する36
Copyright © Fixstars Groupニューラルネットワークの仕組み: 推論の計算(1)37入力層 出力層中間層 中間層 中間層パラメータ パラメータ パラメータ パラメータ
Copyright © Fixstars Groupニューラルネットワークの仕組み: 推論の計算(2)38ABC入力層ABCD中間層パラメータ重みバイアスA ax AbcBC×××+ =入力層のノード数分中間層のノード数分が必要ネットワーク層の分だけ必要膨大な計算量が必要活性化関数の適用
Copyright © Fixstars Group畳み込みニューラルネットワーク(CNN)● 全結合層○ 前述のネットワークモデル● CNNの構造○ Convolutionレイヤ(畳み込み層)○ Poolingレイヤ(プーリング層)39AffineReLUAffineReLUAffineReLUAffineReLUAffineSoftmaxConvReLUPoolingConvReLUPoolingConvReLUAffineReLUAffineSoftmax
Copyright © Fixstars Group畳み込み層● 各層を流れるデータは形状のあるデータ○ 3次元データなど○ 画像は通常、縦・横・チャンネルの3次元形状● 全結合層の問題点○ データの形状が反映されない○ 全結合層の入力では1次元に変換が必要○ 画像は3次元の形状で、これには空間的情報が含まれている● 畳み込み層は形状を維持する○ 畳み込み層の入出力データを特徴マップと呼ぶ40
Copyright © Fixstars Group畳み込み演算(1)● 畳み込み層では畳み込み演算を行う○ 画像処理では「フィルター演算」に相当○ フィルターごとに積和演算を行う411 1 2 00 2 1 32 0 1 23 2 0 12 0 10 2 11 0 112 95 14⊙入力データ フィルター 出力データ
Copyright © Fixstars Group畳み込み演算(2)421 1 2 00 2 1 32 0 1 23 2 0 12 0 10 2 11 0 112⊙1 1 2 00 2 1 32 0 1 23 2 0 12 0 10 2 11 0 112 9⊙
Copyright © Fixstars Group畳み込み演算(3)431 1 2 00 2 1 32 0 1 23 2 0 12 0 10 2 11 0 112 95⊙1 1 2 00 2 1 32 0 1 23 2 0 12 0 10 2 11 0 112 95 14⊙
Copyright © Fixstars Group畳み込み演算(4)● 畳み込み演算のバイアス● つねにバイアスは一つだけ (1 × 1)441 1 2 00 2 1 32 0 1 23 2 0 12 0 10 2 11 0 112 95 14⊙入力データ フィルター3+ 15 128 17出力データバイアス
Copyright © Fixstars Group3次元データの畳み込み演算451 2 4 20 1 2 33 0 1 02 4 0 24 0 3 10 1 0 33 0 2 01 3 0 11 1 2 00 2 1 32 0 1 23 2 0 12 0 10 3 01 0 20 1 30 1 21 0 02 0 10 1 21 0 239 3315 44⊙入力データ フィルター 出力データ入力データとフィルターのチャンネル数は同じ値にする必要がある
Copyright © Fixstars Groupプーリング層● プーリング層は、縦・横方向の空間を小さくする演算● Maxプーリングの例○ 2×2のMaxプーリングをストライド2(2マスずらしながら計算)で行った場合461 1 2 00 2 1 32 0 1 23 2 0 12 33 2
Copyright © Fixstars Groupプーリング層の特徴● プーリング層の特徴:○ 学習パラメータがない○ チャンネル数は変化しない○ 微小な位置変化に対して影響をあまり受けない47入力データ 出力データ1 2 4 20 1 2 33 0 1 02 4 0 24 0 3 10 1 0 33 0 2 01 3 0 11 1 2 00 2 1 32 0 1 23 2 0 12 44 24 33 22 33 2
Copyright © Fixstars Group誤差逆伝播法● 前述のネットワークモデルの計算を計算グラフで表現してみる48A ax AbcBC×××+ =入力層のノード数分中間層のノード数分が必要ネットワーク層の分だけ必要活性化関数の適用
Copyright © Fixstars Group計算グラフ: 順伝播49+ +×××AaxAbcBC活性化関数重み入力層dot +バイアス活性化関数中間層
Copyright © Fixstars Group計算グラフ: 逆伝播50重み入力層dot +バイアス活性化関数中間層微分 微分微分微分微分パラメータ(重みとバイアス)に対して微分によって求めた変化量分だけ値を修正変化量がなくなるまで繰り返して最終的なパラメータを求める→ ネットワークモデルの完成微分出力された値と正しい値の差(loss)から逆伝播誤差逆伝播法
Copyright © Fixstars Groupバッチ処理● 入力データを一つずつ計算せずに、まとめて計算すること● 入力データはネットワークモデル(パラメータ)に対して内積計算を行うが、複数の入力データをまとめて行列として扱うことで効率的に計算できる○ 複数のデータを一つずつ処理する際のオーバヘッドの削減○ 行列計算に最適化されたライブラリの利用○ GPUを利用することでさらに高速化51
Copyright © Fixstars Group行列計算● 行列計算はGPUによる高速化が可能● CNN内の計算○ 畳み込み層やプーリング層では3次元以上のデータを扱う必要がある■ 例えば、高さ・横幅・チャンネル(RGBなど)・データ数(バッチ処理による)の4次元のデータ○ 3次元以上のデータを2次元に変換■ フィルターの適用領域が重なる場合、メモリ消費は大きくなる○ 入力データとフィルターを2次元に変換し内積を取る○ 最後に出力データの次元を変換すれば完了● ループ処理のオーバヘッド削減や最適化された内積演算プログラムの利用により高速化を期待できる52
Copyright © Fixstars Group行列計算 変換例532 0 10 2 31 3 12 0 10 2 31 3 11 00 22 0 10 2 31 3 12 0 10 2 31 3 12 0 0 20 1 2 30 2 1 32 3 3 11002×6664入力データ フィルタ6 66 4
Copyright © Fixstars GroupGPUと高速化● NVIDIAなどによるGPUデバイスでは深層学習に特化した最適化・高速化されたライブラリや深層学習フレームワークなどの利用● 深層学習フレームワークで対応していなかったり、利用したい機能が実装されているとは限らない● ライブラリの関数を直接利用する、デバイスに特化したコードを専用に記述する必要がある● ライブラリにされていないような最新技術の利用や、対象のデータ構造を利用した効率的なメモリアクセスを考慮するような最適化を行う場合なども独自に設計・実装が必要● PyTorchやTensorFlowなどの深層学習フレームワークのソースコードに対し、必要なコードを追加・修正することで対応54
Copyright © Fixstars Group分散並列化● 複数のコンピュータを使って計算を行う分散並列化による高速化○ データ転送のためのネットワーク帯域がボトルネックになる可能性○ 物理的にネットワークを高速にしたり、データ転送を少なくするようなアルゴリズムを適用● データ並列○ 複数のプロセスそれぞれに同じニューラルネットワークモデルを複製して、それらに対して分割した入力データを計算させる方法○ 各データはそれぞれのプロセスで計算され、通常はパラメータの更新時に各プロセスを同期● モデル並列○ 1つのニューラルネットワークモデルに対し複数のプロセスを割り当てて計算させる方法○ 1台のコンピュータでは扱いきれないような巨大なパラメータを持つモデルでも複数のコンピュータを使って演算処理が可能○ 実装が煩雑でプロセス間のデータ通信量がボトルネックになりやすいという欠点がある● 最近の深層学習フレームワークの多くが分散並列処理の機能を有している○ PyTorch○ TensorFlow55
Copyright © Fixstars Groupさらなる高速化● 畳み込み演算の高速化○ 高速フーリエ変換(FFT)○ Winogradアルゴリズム○ NVIDIA cuDNNライブラリで実装● 枝刈り○ ネットワークモデルのパラメータが0に近いなど、計算結果に影響が小さいと判断される要素を省き疎行列にすること○ データサイズが小さくなることで計算量が少なくなり高速化が期待される● 量子化○ 小さいビット数で表現することでデータサイズを小さくする○ 近年では16 ビットで表現される半精度浮動小数点演算を搭載したハードウェアが登場○ 半精度浮動小数点演算ではデータサイズが通常の半分になることから消費メモリが少なく済み、半精度演算に特化したGPUの機能により高速演算が可能● 二値化○ 重みなどを1ビットとして扱うことで、使用メモリ量の削減と演算速度の高速化が期待○ ハードウェア的にメモリ制約が厳しいFPGAやエッジデバイス上で顕著な効果が見込まれる56
Copyright © Fixstars Groupまとめ「高速化×深層学習×GPU」● 高速化×深層学習○ 高速化の目的や対象、環境などにより、様々な手段や方法がある○ 深層学習は様々な状況で利用されており、高速化についても多様な方法がある○ 深層学習は現実的な時間で実行可能な方法を備えているが、それでも膨大な計算量を処理するためにさらなる高速化が求められている● 深層学習×GPU○ GPUは深層学習に対する高速化に大きく寄与している○ GPUは深層学習に特化した複数の機能を組み込んでいる○ 目的とコストの観点からも、現状では深層学習の実用化に必須のデバイスとなっている57
Copyright © Fixstars GroupThank you!お問い合わせ窓口 : [email protected]