Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

なにわTech20170218(tpu) tfug

3,584 views

Published on

20170218なにわテック祭り、20170227 TFUGハード部発表資料

Published in: Technology
  • Be the first to comment

なにわTech20170218(tpu) tfug

  1. 1. TensorFlowの量子化について 2017/2/18 株式会社パソナテック エンジニアリング事業部 夏谷 1 Imagination, Action, and to the Creation!
  2. 2. アジェンダ  自己紹介と経緯  Hexagonアーキテクチャ  TensorFlowで使われている量子化について  量子化された数値の演算  定数の加算、乗算  符号反転  量子化された数値の加算  量子化された数値の乗算  再量子化  NPUの紹介  NPUのアーキテクチャ  Verilog SIM結果  その他  足りないもの  その他 2
  3. 3. 自己紹介  夏谷実  株式会社パソナテック  株式会社パソナテック  エンジニアリング事業部  エンジニアマネージメントグループ  TFUG KANSAI←New!  最近は半導体関連の仕事が多い  FPGAが好き  プログラミングも好き  Deep Learningも好き 3
  4. 4. 4 頑張ってWebサイト作成中・・・ http://technotan.net 公認キャラにライバル登場 安芸乃 てく(通称:てくのたん)@techno_tan 高知県在住の将来がウルトラスーパー不安な高校生(ソ^▽^)ナ とりあえずWeb作ってみたりとかそういうことに手を出している。 卒業後の将来へ漠然とした不安を感じつつ、父に勧められて Webサイトを制作し、パソナテックのインターンの面談会に参加。 CVは高野麻理佳さん! あ き の
  5. 5. Google supercharges machine learning tasks with TPU custom chip 5 https://cloudplatform.googleblog.com/2016/05/Google-supercharges-machine-learning-tasks-with-custom-chip.html 今ある情報は ・Googleの実際のサービスで使われ ている。 ・消費電力が少ない ・精度を落としている。 the chip to be more tolerant of reduced computational precision あれ、8bitに量子化してるって どこ情報?
  6. 6. 8bit情報元 6 http://www.forbes.com/sites/tiriasresearch/2016/05/26/google-builds-its-first-chip-just-for-machine-learning/#16e2168d7a92 @petewarden Jetpac Inc, https://petewarden.com/2016/05/03/how-to-quantize-neural-networks-with-tensorflow/ この人、TPUについて一言も言ってない
  7. 7. CES2017でクアルコムがHexagon DSPでGoogleNetを動かす 7 https://www.qualcomm.com/news/snapdragon/2017/01/09/tensorflow-machine-learning-now-optimized-snapdragon-835-and-hexagon-682 Optimal power & performance for GoogleNet Inception DNN (Deep Neural Network). Choose the core to match the user experience. (actual performance may vary) 8~9fps 整数のみのSIMDですごく良いパフ ォーマンスがでる。 これは何かトリックがあるはず。
  8. 8. Hxagon Archtecture 8 http://www.hotchips.org/wp-content/uploads/hc_archives/hc27/HC27.24-Monday-Epub/HC27.24.20-Multimedia-Epub/HC27.24.211-Hexagon680-Codrescu-Qualcomm.pdf
  9. 9. TensorFlowにはHexgon用のコードっぽいものが入ってる 9 なんかテストコードしかない その代わりに 量子化のコードは 見つけた 中身はよくわから なかった。
  10. 10. なんやかんやあって 10 これなら僕にも作れそう ※:実際にTPUがこういう実装になっているとう話ではありません。
  11. 11. 11 Hexagonアーキテクチャ
  12. 12. Hexagon architecture 12 http://www.anandtech.com/show/9552/qualcomm-details-hexagon-680-dsp-in- snapdragon-820-accelerated-imaging PCで言うところ のCPU
  13. 13. Hexagon architecture 13 http://www.hotchips.org/wp-content/uploads/hc_archives/hc27/HC27.24-Monday-Epub/HC27.24.20-Multimedia-Epub/HC27.24.211-Hexagon680-Codrescu-Qualcomm.pdf
  14. 14. Hexagon architecture 14 http://www.anandtech.com/show/9552/qualcomm-details-hexagon-680-dsp-in- snapdragon-820-accelerated-imaging 大容量の DRAM
  15. 15. Hexagon architecture  DSPとは  CPUの横のGPUポジション、SIMDで行列演算が強い  OSを動かすのは苦手  消費電力と計算量のバランスが良い  DRAMから内部メモリへデータを持ってきて、ベクトル計算 後DRAMへ書き戻す。  Hexagonの特徴  SnapdragonにGPUも乗っている。GPUとCPUの間の処理  整数のベクトル演算に特化。  バイト単位の計算も得意  LUT持ってます 15
  16. 16. 16 TensorFlowで使われている量子化について
  17. 17. TensorFlowがサポートしている型 17 https://www.tensorflow.org/api_docs/python/framework/tensor_types •tf.int8: 8-bit signed integer. •tf.uint8: 8-bit unsigned integer. •tf.uint16: 16-bit unsigned integer. •tf.int16: 16-bit signed integer. •tf.int32: 32-bit signed integer. •tf.int64: 64-bit signed integer. •tf.bool: Boolean. •tf.string: String. •tf.qint8: Quantized 8-bit signed integer. •tf.quint8: Quantized 8-bit unsigned integer. •tf.qint16: Quantized 16-bit signed integer. •tf.quint16: Quantized 16-bit unsigned integer. •tf.qint32: Quantized 32-bit signed integer. •tf.resource: Handle to a mutable resource. 量子化はサポート済み
  18. 18. qint8 18 ・・・・ float max float min 8bit 0 max min Mixからmaxの間を0- 255の整数値で表現
  19. 19. How Does the Quantization Process Work? 19 https://petewarden.com/2016/05/03/how-to-quantize-neural-networks-with-tensorflow/
  20. 20. Quantization, DeQuantization 20 0 max min Xqt X 255 gain offset y = ax + b
  21. 21. 21 量子化された数値の演算
  22. 22. 量子化された数値の演算  定数の加算、乗算  A + 0.5  A * 0.2  符号反転  -A  量子化されたベクトルの加算  A + B  量子化されたベクトルの乗算  A * B  再量子化 22 ※numpyのイメージで
  23. 23. 定数の加算 23 0 max+a min+a Xqt X 255 gain offset maxとminの値に定数を加算すれば終り。 例:min = 0, max = 100の量子化されたデータ全てに50を足す場合は、min=50, max=150にする。量子化された値は修正不要。 Xの要素数nによらず定数の加算はO(1)、ほぼノーコストで実行できる。
  24. 24. 定数の乗算 24 0 max*a min*a X 255 gain offset maxとminの値に定数をかければ終り。 Xの要素数nによらず定数の乗算もO(1)、ほぼノーコストで実行できる。 負数を乗算するときは、 符号反転してから乗算 する。(後で) Xqt
  25. 25. 定数の乗算 25 float max float minA 𝐴′ = 1 4 𝐴 float max/4 float min/4 ①ベクトルAから、定数倍 したベクトルA’を作るとき に、max, minだけ変数の 領域を取ればよい ②ベクトルAとベクトルBにそれ ぞれ違う定数をかける 𝐴′ = 0.25 ∗ 𝐴 float max_a*0.25 float min_a*0.25 𝐵′ = 0.128 ∗ 𝐵 float b_max*0.128 float b_min*0.128
  26. 26. 定数の乗算 26 縦方向のコンボリューション 3x3 kernel kernelの係数の乗算は、 定数の乗算なのでO(1) で完了する。 横方向のコンボリューション 5 6 7 8 の注目画素が6の時、p-1は5, p+1は7 3x3 kernel 横方向はもっと楽。 元のベクトルを変更する ことなく、コンボリューシ ョンの係数乗算が終了 する。 →加算ができればコン ボリューション終了 注意点:加算時に乗算が入るので、計算自体が減るわけではない。(むしろ増える)
  27. 27. 符号反転 27 0 max min Xqt X 255 gain offset 255 min max 0 Xqt 量子化された値を入れ替える max, minに-1をかけるだけでもシステムとしては問題無いが、TensorFlowの世界で は常に max > min が成り立つようにしないといけない。
  28. 28. 量子化された加算 28 Cのmaxとminは、A,Bそれ ぞれのmax, minの和 BqtのスケールをAqtに合わ せて加算 加算結果をCqtのスケール に合わせる ここには負の数がでてこない。 地味にVerilog実装が楽
  29. 29. 量子化された加算 29 この2行だけがnumpy arrayの計算。 (ベクトル演算) ここは普通の変数 (スカラーの演算)
  30. 30. 量子化された加算 30 BqtAqt Gain*qparam qparam Cqt × × + 1命令で量子化された加算を実行可能
  31. 31. 量子化された加算 31 緑:numpyで計算した結果(float) 青:Cqt (8bit) 赤:CqtをdeQuantaizeした結果
  32. 32. 量子化された乗算 32 Cのmaxとminは、A,Bそれ ぞれのmax, minの積 量子化の時はこの項の計算 不要 バグ有り実装 8x8の乗算 加算が2回 例: (3x-2)(2y+1)=6xy+3x-4y-2
  33. 33. 量子化された乗算 33 バグ有り実装
  34. 34. 量子化された乗算 34 Cのmaxとminは、A,Bそれ ぞれのmax, minの積 →間違い
  35. 35. 量子化された乗算 35 0 y x 1,000,000 1.0 1つでも-1.0があるとかけ算の 結果は-1,000,000になる。 ・
  36. 36. 量子化された乗算 36 A,Bの最小値を0にする。A’, B’とも全ての要素は0以上。 8bitの乗算 量子化された加算が2回 A’, B’のoffsetは0だから 例: (3x-2)(2y+1)=6xy
  37. 37. 量子化された乗算 37 BqtAqt Gain*qparam qparam Cqt × × + Aqt×Bqt × again*bgain 量子化された乗算も、2命令でできる。 BqtAqt Gain*qparam qparam Cqt × × + × again*bgain × もしかしたら1命令で実行しているかも
  38. 38. 量子化された乗算 38 緑:numpyで計算した結果(float) 青:Cqt (8bit) 赤:CqtをdeQuantaizeした結果
  39. 39. 再量子化 39 量子化された値を、実際の最大値、最小値の範囲で、再度量子化を行う。
  40. 40. まとめ 40  定数の加算、乗算  符号反転  量子化されたベクトルの加算  量子化されたベクトルの乗算  再量子化 max, minの操作のみ max, minの操作+量子化された値を反転 乗算2回、加算1回、ただしDSPだと1命令 乗算4回、加算2回、ただしDSPだと1~2命令
  41. 41. 41 NPUの紹介
  42. 42. NPUのアーキテクチャ  Nagato Processing Unit  細かい計算はCPUに任せて、量子化されたデータの SIMDのみ実装  一回目のテスト実装  名前は募集中 42 ボツ案 てくのたんのプロセッシングユニット TTPU
  43. 43. NPUアーキテクチャ 43 Local memory x4 M0 M1 M2 M3 DRAM CPU I/F NPU Core8bit 8bit qADD qMUL registers SRAM CNT CPU R/W 8bit
  44. 44. 符号反転回路 44
  45. 45. 加算 45 ・入力8bit, 出力8bit ・1CLKで1データのスループット ・レイテンシ7CLK
  46. 46. 乗算 46
  47. 47. Sim環境 47 M0 M1 lin2.dat M2 lin2.dat M3 CPU I/F 8bit registers NPU Core ①inputディレクトリから、テキ ストデータをSRAMにロード $readmemh ②CPUへレジスタ設定、 演算の開始 ③割り込み待ち(タイムアウト有り) ④ouptutディレクトリに、テキ ストダンプして$finish $writememh lin2.dat
  48. 48. sim結果 48 加算 乗算 A B A+B A B A*B
  49. 49. 実際にFPGAで動かすために必要な回路 49 DRAM CPU R/W M0 M1 M2 M3 CPU I/F 8bit registers NPU Core http://jp.techcrunch.com/2016/12/01/20161130aws-announces-fpga-instances-for-its-ec2-cloud-computing-service/ PYNQ AWS FPGA instance
  50. 50. 50 その他
  51. 51. TPUにありそうな機能  qint8, qint16, qint24, qint32サポート  8bitじゃReluが精一杯  識別系(最後がsoftmax)には使えるけど、それ以外の用 途だともう少し精度が欲しい気がする。  Hexagonの様子を見る  ローカルメモリコントローラ  部分行列、転置のサポート  量子化、逆量子化、再量子化ハードウェアサポート  量子化された値の統計情報サポート  最大値、最小値  合計値 51
  52. 52. TPUにありそうな機能 52 A_qt B_qt q_add C_qt gamma correction (LUT) アドレス8bit 8bit幅のLUT C‘_qt ReLU シグモイド 飽和演算 2値化 出力にガンマ補正の回路
  53. 53. 今回の実装で真っ先に直したいところ 53 ここを固定小数点数で実装しているが、浮動小数点数をそのまま HWに入れられるほうが良い。(CPUの負担が減る) https://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0 この辺から6~7bit持って来るここで桁あわせ
  54. 54. 足りない物 54 リファレンスモデル ・SystemC or MyHDL ・性能見積もり、複数のNPU、ALU等 SIMのバッチ実行環境 ・乗算器の実装(ベンダー非依存に) ・今 Vivado の SIM→iverilog等ベンダー非依存、かつコマンドライン実行に ・リファレンスモデルから期待値を作り、自動比較 ・ランダム検証 評価用プログラム ・ひらがな認識は単純パーセプトロン、CNN 実機環境 ・Pynq 画像入力、CPU I/F、DRAM I/F 作成中
  55. 55. KerasからCへ 55 nnn_gen Cソースとヘッダー作 成 main ユーザープログラム json npy 重みをnumpy形式 で出力 実行時に 読み込む
  56. 56. KerasからCへ 56
  57. 57. 最後に 57 TensorFlow User Group 関西でも何かやりたいとかあれば連絡ください 「内輪感を出しすぎず、初心者の方でも、気軽に 難しげな深層学習とか機械学習の話をわいわい やりたい」(下田さん) KANSAI!
  58. 58. AI分野に関するパソナテックのサービス 58 ①大量のデータに関する業務 ・データ収集 ・データ入力 ・データタグづけ、不正データ除去 他部署と連携し、大量 データを安価にご提供 します。 セキュリティ面もご相 談ください。 ②機械学習に関する業務 ・学習環境の構築 ・学習器の設計、評価 ・パラメータ調整 お客様の目的に沿 ったビジネスパート ナーをご紹介します。 ③商品化への業務 ・組込プログラミング ・機械設計 機械学習に関する業務に関して、どの工程でも必要なサービスをご提供致します。 専門スキルを持った人 材をご提供いたします。 委託契約、派遣契約ど ちらも可能です。
  59. 59. 一緒に働く人を募集中 59 ■職務内容 画像処理に関するアルゴリズムの検討と、組込システムへの実装 を行います。OpenCV等を用いて、Windows環境で画像処理アル ゴリズムの検討、評価を行います。アルゴリズムの評価終了後、C 言語による組込プログラミングやVerilog-HDLによるハードウェア 実装を行います。 ■必須条件 (1)幾何学変換や画像フィルターなどの基本的な画像処理の知識 (2)組込Cプログラミングによるアルゴリム実装、評価 (3)Verilog-HDLによるアルゴリズム実装、検証 上記3点のうち、最低1点の経験を有すること ■歓迎条件 ・DSP、GPU、マルチプロセッサプログラミング経験、 ・FPGA開発経験 ・機械学習、Deep Learningに関する知識 ・マネージャ、チームリーダー経験
  60. 60. ご静聴ありがとうございました。 60

×