Suche senden
Hochladen
20230105_TITECH_lecture_ishizaki_public.pdf
•
2 gefällt mir
•
421 views
Kazuaki Ishizaki
Folgen
東工大の2022年度数理・計算科学特論B 、で講義をさせていただいた際に使用した資料です。
Weniger lesen
Mehr lesen
Software
Melden
Teilen
Melden
Teilen
1 von 57
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
Takuya Takaseki
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料
直久 住川
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
Yosuke Shinya
Marp Tutorial
Marp Tutorial
Rui Watanabe
不揮発メモリ(NVDIMM)とLinuxの対応動向について
不揮発メモリ(NVDIMM)とLinuxの対応動向について
Yasunori Goto
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
Empfohlen
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
Takuya Takaseki
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料
直久 住川
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
Yosuke Shinya
Marp Tutorial
Marp Tutorial
Rui Watanabe
不揮発メモリ(NVDIMM)とLinuxの対応動向について
不揮発メモリ(NVDIMM)とLinuxの対応動向について
Yasunori Goto
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
Singularityで分散深層学習
Singularityで分散深層学習
Hitoshi Sato
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
Yasunori Goto
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Hiroki Nakahara
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
KiyotomoHiroyasu
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
Shinya Takamaeda-Y
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
NVIDIA Japan
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Ito Takayuki
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
例外設計における大罪
例外設計における大罪
Takuto Wada
第3回SEMAT勉強会 SEMATエッセンス解説
第3回SEMAT勉強会 SEMATエッセンス解説
Hironori Washizaki
Power biで気づく!現場機器の異常監視システム on azure
Power biで気づく!現場機器の異常監視システム on azure
IoTビジネス共創ラボ
Weitere ähnliche Inhalte
Was ist angesagt?
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
Singularityで分散深層学習
Singularityで分散深層学習
Hitoshi Sato
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
Yasunori Goto
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Hiroki Nakahara
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
KiyotomoHiroyasu
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
Shinya Takamaeda-Y
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
NVIDIA Japan
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Ito Takayuki
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
例外設計における大罪
例外設計における大罪
Takuto Wada
Was ist angesagt?
(20)
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Singularityで分散深層学習
Singularityで分散深層学習
CXL_説明_公開用.pdf
CXL_説明_公開用.pdf
暗号技術の実装と数学
暗号技術の実装と数学
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うには
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
DockerコンテナでGitを使う
DockerコンテナでGitを使う
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Docker Compose 徹底解説
Docker Compose 徹底解説
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Docker Tokyo
Docker Tokyo
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
例外設計における大罪
例外設計における大罪
Ähnlich wie 20230105_TITECH_lecture_ishizaki_public.pdf
第3回SEMAT勉強会 SEMATエッセンス解説
第3回SEMAT勉強会 SEMATエッセンス解説
Hironori Washizaki
Power biで気づく!現場機器の異常監視システム on azure
Power biで気づく!現場機器の異常監視システム on azure
IoTビジネス共創ラボ
20160906 pplss ishizaki public
20160906 pplss ishizaki public
Kazuaki Ishizaki
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
The evolution of c#
The evolution of c#
leverages_event
2018 07-23
2018 07-23
Yuji Oshima
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
bitbank, Inc. Tokyo, Japan
機械学習基盤として活用するAutonomous Database
機械学習基盤として活用するAutonomous Database
Kenichi Sonoda
Kuberflow Kubernetes上の機械学習プラットフォーム
Kuberflow Kubernetes上の機械学習プラットフォーム
Kosuke Kikuchi
PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費
Tatsumi Akinori
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Takashi Sogabe
Intalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai
CoreMLによるiOS深層学習アプリの実装と性能分析
CoreMLによるiOS深層学習アプリの実装と性能分析
Ryosuke Tanno
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
Hori Tasuku
dstn交流会_data_spider 3.0最新情報とデモ
dstn交流会_data_spider 3.0最新情報とデモ
dstn
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
Operation Lab, LLC.
Integral Technology 第2回ユーザカンファレンス 〜すべてをクラウドで解析するための方法〜
Integral Technology 第2回ユーザカンファレンス 〜すべてをクラウドで解析するための方法〜
Rescale Japan株式会社
Machine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and Architecture
Takuya Minagawa
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Naoyuki Yamada
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
bitbank, Inc. Tokyo, Japan
Ähnlich wie 20230105_TITECH_lecture_ishizaki_public.pdf
(20)
第3回SEMAT勉強会 SEMATエッセンス解説
第3回SEMAT勉強会 SEMATエッセンス解説
Power biで気づく!現場機器の異常監視システム on azure
Power biで気づく!現場機器の異常監視システム on azure
20160906 pplss ishizaki public
20160906 pplss ishizaki public
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
The evolution of c#
The evolution of c#
2018 07-23
2018 07-23
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
機械学習基盤として活用するAutonomous Database
機械学習基盤として活用するAutonomous Database
Kuberflow Kubernetes上の機械学習プラットフォーム
Kuberflow Kubernetes上の機械学習プラットフォーム
PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
Intalio japan special cloud workshop
Intalio japan special cloud workshop
CoreMLによるiOS深層学習アプリの実装と性能分析
CoreMLによるiOS深層学習アプリの実装と性能分析
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
dstn交流会_data_spider 3.0最新情報とデモ
dstn交流会_data_spider 3.0最新情報とデモ
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
Integral Technology 第2回ユーザカンファレンス 〜すべてをクラウドで解析するための方法〜
Integral Technology 第2回ユーザカンファレンス 〜すべてをクラウドで解析するための方法〜
Machine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and Architecture
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
Mehr von Kazuaki Ishizaki
Make AI ecosystem more interoperable
Make AI ecosystem more interoperable
Kazuaki Ishizaki
Enabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache Spark
Kazuaki Ishizaki
Introduction new features in Spark 3.0
Introduction new features in Spark 3.0
Kazuaki Ishizaki
SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0
Kazuaki Ishizaki
SparkTokyo2019NovIshizaki
SparkTokyo2019NovIshizaki
Kazuaki Ishizaki
SparkTokyo2019
SparkTokyo2019
Kazuaki Ishizaki
In-Memory Evolution in Apache Spark
In-Memory Evolution in Apache Spark
Kazuaki Ishizaki
icpe2019_ishizaki_public
icpe2019_ishizaki_public
Kazuaki Ishizaki
hscj2019_ishizaki_public
hscj2019_ishizaki_public
Kazuaki Ishizaki
Looking back at Spark 2.x and forward to 3.0
Looking back at Spark 2.x and forward to 3.0
Kazuaki Ishizaki
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
Kazuaki Ishizaki
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki
Demystifying DataFrame and Dataset
Demystifying DataFrame and Dataset
Kazuaki Ishizaki
Transparent GPU Exploitation for Java
Transparent GPU Exploitation for Java
Kazuaki Ishizaki
Making Hardware Accelerator Easier to Use
Making Hardware Accelerator Easier to Use
Kazuaki Ishizaki
Exploiting GPUs in Spark
Exploiting GPUs in Spark
Kazuaki Ishizaki
Easy and High Performance GPU Programming for Java Programmers
Easy and High Performance GPU Programming for Java Programmers
Kazuaki Ishizaki
Exploiting GPUs in Spark
Exploiting GPUs in Spark
Kazuaki Ishizaki
20151112 kutech lecture_ishizaki_public
20151112 kutech lecture_ishizaki_public
Kazuaki Ishizaki
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
Kazuaki Ishizaki
Mehr von Kazuaki Ishizaki
(20)
Make AI ecosystem more interoperable
Make AI ecosystem more interoperable
Enabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache Spark
Introduction new features in Spark 3.0
Introduction new features in Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0
SparkTokyo2019NovIshizaki
SparkTokyo2019NovIshizaki
SparkTokyo2019
SparkTokyo2019
In-Memory Evolution in Apache Spark
In-Memory Evolution in Apache Spark
icpe2019_ishizaki_public
icpe2019_ishizaki_public
hscj2019_ishizaki_public
hscj2019_ishizaki_public
Looking back at Spark 2.x and forward to 3.0
Looking back at Spark 2.x and forward to 3.0
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Demystifying DataFrame and Dataset
Demystifying DataFrame and Dataset
Transparent GPU Exploitation for Java
Transparent GPU Exploitation for Java
Making Hardware Accelerator Easier to Use
Making Hardware Accelerator Easier to Use
Exploiting GPUs in Spark
Exploiting GPUs in Spark
Easy and High Performance GPU Programming for Java Programmers
Easy and High Performance GPU Programming for Java Programmers
Exploiting GPUs in Spark
Exploiting GPUs in Spark
20151112 kutech lecture_ishizaki_public
20151112 kutech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
20230105_TITECH_lecture_ishizaki_public.pdf
1.
2023年1月5日 日本アイ・ビー・エム(株) 東京基礎研究所 石崎 一明 (資料作成協力:井上拓、大平怜) 数理・計算科学特論B プログラミング言語処理系の最先端実装技術 第7講
ハードウェア・アクセラレーション 1
2.
自己紹介 ▪ プログラミング言語処理系の最先端実装技術 inliningとdevirtualization /
Kazuaki Ishizaki 2 石崎 一明(いしざき かずあき) http://ibm.biz/ishizaki 1992年3月 早稲田大学理工学研究科修士課程電気工学専攻を修了。 1992年4月 日本アイ・ビー・エム(株)入社、東京基礎研究所勤務。以来、並列化コンパイラ、動的コン パイラ、アプリケーション最適化、などの研究に従事。最近は、AIプロセッサのソフトウェ アスタックの研究開発に従事。現在、同研究所シニア・テクニカル・スタッフ・メンバー 2002年12月 早稲田大学理工学研究科にて、博士(情報科学)を取得。 2008年から2009年まで、IBMワトソン研究所に滞在。 2004年に情報処理学会業績賞受賞。ACM Distinguished Member、情報処理学会シニアメンバー 主な学会活動 2004~2005年 日本ソフトウェア科学会PPL 2004/2005ワークショップ プログラム委員 2006年 日本ソフトウェア科学会PPL 2006ワークショップ プログラム共同委員長 2008年 PC member of ACM OOPSLA 2008 Conference 2007~2009年度 日本ソフトウェア科学会プログラミング論研究会 運営委員 2011~2014年度 情報処理学会アーキテクチャ研究会 運営委員 2015~2019年 日本ソフトウェア科学会理事 2016~2017年度 情報処理学会プログラミング研究会 運営委員 2018~2021年度 情報処理学会プログラミング研究会 幹事 2017~2022年 PC member of IEEE BigData 主なオープンソース活動: Apache SparkとApache Arrowのコミッター
3.
今日の講義の内容 ▪ ハードウェアアクセラレータ、とは – あるカテゴリの演算を効率よく実行可能 ▪
プログラミング言語からハードウェアアクセラレータを使う方法 – 明示的にハードウェアアクセラレータを制御する命令を呼ぶ – ライブラリを経由してハードウェアアクセラレータを制御する命令を呼ぶ – システムが自動的にハードウェアアクセラレータを制御する命令を呼ぶ ▪ ハードウェアアクセラレータがよく使われる分野の一例 – 深層学習 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 3
4.
今日の授業でわかる(はずの)こと ▪ ハードウェアアクセラレータの概要について – Single
Instruction Multiple Data (SIMD) – General Purpose Graphic Processing Unit (GPGPU) – Hardware transactional memory (HTM) – AIアクセラレータ ▪ プログラミング言語からハードウェアアクセラレータを使う方法とその 利点欠点(SIMDを例に) – プログラマが命令を書く – プログラマがライブラリを呼ぶ – プログラマのプログラムをコンパイラが変換する ▪ 深層学習について – どのような処理が内部で行われているか – どのような処理がハードウェアアクセラレータで高速化できるか – プログラミング処理系として、どのような高速化ができるか プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 4
5.
ハードウェアアクセラレータとは? プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション /
Kazuaki Ishizaki 5
6.
ハードウェアアクセラレータ ▪ CPUの汎用命令の組み合わせで処理していたのでは効率が悪い処理を、 効率よく処理するハードウェア – 改善例 ▪
レイテンシ ▪ スループット ▪ 消費電力効率 ▪ チップ面積 – ハードウェア例 ▪ Single Instruction Multiple Data (SIMD) ▪ General Purpose Graphic Processing Unit (GPGPU) ▪ Hardware Transactional Memory (HTM) ▪ 専用ハードウェア • GRAvity PiPE (GRAPE) - 重力相互作用の計算 • AIアクセラレータ – 深層学習の計算 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 6
7.
SIMD ▪ CPU内で1命令(1つの命令カウンタ)で複数データに同時に同じ処理 (4~128程度)を行う プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション
/ Kazuaki Ishizaki 7 ベクタレジスタ SIMD命令 A0 A1 A2 A3 B0 B1 B2 B3 C0 C1 C2 C3 add add add add input 1 input 2 output add gr1,gr2,gr3 vadd vr1,vr2,vr3 scalar instruction SIMD instruction A0 B0 C0 add input 1 input 2 output
8.
SIMD ▪ CPU内で1命令(1つの命令カウンタ)で複数データに同時に同じ処理 (4~128程度)を行う – 主にベクタ・ベクタ演算だが、最近は行列・行列積を扱うことができるもの もある ▪
多くのプロセッサで実装されている – Intel x86: MMX, SSE, SSE2, SSE3, SSE4, AVX, AVX2, AVX-512 – PowerPC: VMX, VSX – System z – ARM: NEON, NEON2, SVM – RISC-V プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 8
9.
GPGPU ▪ 数千~万の実行ユニット(例:CUDA core)で異なるデータに対して同 時に命令を実行し、まとまった単位で同じ処理を行う –
ロードストアは、実行ユニットごとに異なるアドレスからロードストア可能 – 条件分岐は、条件が成立した実行ユニットと条件が成立しない実行ユニット で異なる処理を行える ▪ 画像処理、密行列演算、深層学習、などに高い性能を発揮する ▪ 高性能GPGPUを製造しているメーカは限られている – NVIDIA、AMD、Intel、など プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 9 Source: https://www.slideshare.net/NVIDIAJapan/hopper-251681963
10.
HTM ▪ ハードウェアで、クリティカルセクションを楽観的に並行実行後、正当 性を検査 – 従来のロックの命令配置 ▪
クリティカルセクションを グローバルロック命令で囲む – 従来のロックの命令の実行時 ▪ トランザクションをスレッド間で同時に実行し ロックが衝突したら、先に実行したロックが 終了するまで待つ。 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 10 lock(); a->count++; unlock(); lock(); a->count++; unlock(); lock(); b->count++; unlock(); lock(); a->count++; unlock(); Lock(); a->count++; unlock(); Thread X Thread Y ロック
11.
HTM ▪ ハードウェアで、クリティカルセクションを楽観的に並行実行後、正当 性を検査 – 命令の配置 ▪
クリティカルセクションを トランザクション開始・終了命令で囲む – 実行時 ▪ トランザクションをスレッド間で同時に実行し メモリ操作が衝突したかの正当性検査。 衝突したら最初から実行し直す プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 11 xbegin(); a->count++; xend(); xbegin(); b->count++; xend(); xbegin(); a->count++; xend(); xbegin(); a->count++; xend(); Thread X Thread Y lock(); a->count++; unlock(); xbegin(); a->count++; xend(); ロック HTM
12.
HTM ▪ ハードウェアで、クリティカルセクションを楽観的に並行実行後、正当 性を検査 – 命令の配置 ▪
クリティカルセクションを トランザクション開始・終了命令で囲む – 実行時 ▪ トランザクションをスレッド間で同時に実行し メモリ操作が衝突したかの正当性検査。 衝突したら最初から実行し直す ☺トランザクション中のメモリ操作は1ステップで 行われたかのように他スレッドからは観測される →従来のロックよりも高い並列性が期待される 正当性検査に、実装からくる制限が存在する ▪ 正当性検査のためのメモリ操作をためておける バッファの大きさに制約がある プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 12 xbegin(); a->count++; xend(); xbegin(); b->count++; xend(); xbegin(); a->count++; xend(); xbegin(); a->count++; xend(); Thread X Thread Y
13.
HTM ▪ いくつかのプロセッサで実装されていた – 2010:
Prototype of Rock processor (Sun) – 2012: IBM Blue Gene/Q, zEC12 – 2013: Intel 4th Generation Core Processor – 2014: IBM POWER8 – 2017: IBM POWER9 ▪ なぜ流行らなかったか? 私見 – 実機でのOperating Systemの存在が、 ハードウェアの実装と、性能向上を難しくした – 性能を劇的に向上させる 重要なアプリケーションが見つからなかった プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 13 https://en.wikipedia.org/wiki/Transactional_memory
14.
AIアクセラレータ プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション /
Kazuaki Ishizaki 14 ▪ 深層学習(Deep learning)では、実行される処理の種類が決まっている、 データアクセスが規則的である、ことを生かして、最低限の処理だけを実 行する電力性能比が高いハードウェアを用意する – 少ないビット数の(FP16, FP8, INT8, INT4など)行列行列積の高速化に特化して いる – 限られた演算だけ実行する(例、add, mul, max, exp, …) – ハードウェア制御のデータキャッシュを持たない(ソフトウェアによる制御) – 分岐命令に関する先読み機構を持たない ▪ 実装例 – Google: TPU – AWS: Trainium – IBM: IBM AIU – PFN: MN-Core, MN-Core 2 – Cerebras: Cerebras – NVIDIA: Tensor core
15.
今日の授業でわかる(はずの)こと ▪ ハードウェアアクセラレータの概要について – SIMD –
GPGPU – HTM – AIアクセラレータ ▪ プログラミング言語からハードウェアアクセラレータを使う方法とその 利点欠点(SIMDを例に) – プログラマが命令を書く – プログラマがライブラリを呼ぶ – プログラマのプログラムをコンパイラが変換する ▪ 深層学習について – どのような処理が内部で行われているか – どのような処理がハードウェアアクセラレータで高速化できるか – プログラミング処理系として、どのような高速化ができるか プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 15
16.
プログラミング言語から ハードウェアアクセラレータを使うには プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション /
Kazuaki Ishizaki 16
17.
使い方の3つの方法 ▪ 専用命令を使ってプログラミングする ▪ 特定の処理を行うライブラリを呼ぶ –
例:行列積 ▪ 普通にプログラムを書いて、コンパイラが自動的に専用命令を生成する プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 17
18.
SIMDの専用命令を使ってプログラミング ▪ 命令列を記述する方法 – アセンブラ、gcc/clangのasm文のインラインアセンブラ –
gcc/clangの組み込み関数(intrinsic) ▪ gccやclangでは、SIMD用にデータの型が拡張されている ▪ コンパイラが、レジスタ割付けや命令スケジューリングを行ってくれる プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 18
19.
SIMD組み込み関数によるプログラム例 ▪ 元のスカラループ プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション
/ Kazuaki Ishizaki 19 int32_t *a, *b, *c; for (i = 0; i < N; i++) c[i] = a[i] + b[i]; 32-bit整数配列
20.
SIMD組み込み関数によるプログラム例 ▪ 元のスカラループ ▪ AVX2用組み込み関数を使った例 プログラミング言語処理系の最先端実装技術
ハードウェアアクセラレーション / Kazuaki Ishizaki 20 for (i = 0; i < N; i += 8) { __m256i v1 = _mm256_loadu_si256((__m256i *)(a+i)); __m256i v2 = _mm256_loadu_si256((__m256i *)(b+i)); __m256i v3 = _mm256_add_epi32(v1, v2); _mm256_storeu_si256((__m256i *)(c+i), v3); } int32_t *a, *b, *c; for (i = 0; i < N; i++) c[i] = a[i] + b[i]; 8 (= 256 / 32)要素を同時に処理
21.
SIMD組み込み関数によるプログラム例 ▪ 元のスカラループ ▪ VMX用組み込み関数を使った例 プログラミング言語処理系の最先端実装技術
ハードウェアアクセラレーション / Kazuaki Ishizaki 21 int32_t *a, *b, *c; for (i = 0; i < N; i++) c[i] = a[i] + b[i]; for (i = 0; i < N; i += 4) { vector int v1 = vec_ld(0, a+i); vector int v2 = vec_ld(0, b+i); vector int v3 = vec_add(v1, v2); vec_st(v3, 0, c+i); } 4 (= 128 / 32)を同時に処理 vec_add() isはSIMDのadd命令に対応す る vector int は4つの32-bit整数値を持つ ベクタレジスタ
22.
SIMD組み込み関数でプログラミングする利点欠点 ☺高い性能を得ることができる – このためには、アルゴリズムやデータ配置まで変更することが多い ☺アセンブラで書くよりは、簡単にプログラムを書くことができる – レジスタ割付けや命令スケジューリングは、コンパイラが行う プログラミング、デバッグ、メンテナンスが容易ではない プロセッサ・アーキテクチャに依存したコードとなり、プロセッサ間の 移植性が低い Java、JavaScriptのようなプラットフォーム独立な言語では、あまり適し ていない –
JavaのVector APIも、いまだに正式版になっていない プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 22
23.
SIMD命令を使うライブラリによるプログラム例 ▪ 元のスカラループ ▪ 行列積 プログラミング言語処理系の最先端実装技術
ハードウェアアクセラレーション / Kazuaki Ishizaki 23 // c = αAB + βC を計算する cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, N, N, N, 1.0, A, N, B, N, 0.0, C, N); for (i = 0; i < N; i++) for (j = 0; j < N; j++) for (k = 0; k < N; k++) C[i*N + j] += A[i*N + k] * B[k*N + j]; ライブラリ呼び出しに置き換え可能なパターンを発見する研究もある: Carvalho et al, KernelFaRer: Replacing Native-Code Idioms with High-Performance Library Calls
24.
ライブラリでプログラミングする利点欠点 ☺高い性能を得ることができる – プロセッサメーカーが最適化したライブラリは、プログラマがアセンブラで 書くより性能が高いことがある ☺簡単にプログラムを書くことができる 高速化できる処理が、ライブラリで提供された処理に限られる データ配置などの前提が合わないときは、使用できない。もしくは、 データ変換が必要になる。 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション
/ Kazuaki Ishizaki 24
25.
コンパイラによる自動SIMD命令生成でプログラミング ▪ 自動ベクタ化(automatic vectorization)によって、プログラマが書いた コードから、自動的にSIMD命令を生成する ▪
コンパイラは与えられたループを解析して、可能であればSIMD命令を用 いるループを生成する – 可能でない、と判断する原因 ▪ ループ間にデータ依存(loop-carried dependence)がある ▪ ループ内に(if文などの)分岐がある場合 • predicateで対応できる場合もある ▪ ループ内に、仮想メソッド呼び出しがある ▪ メモリアクセスが、キャッシュ境界からずれている プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 25
26.
自動SIMD命令生成によるプログラミング例 ▪ 元のスカラループ ▪ コンパイラが行う解析 –
入力と出力の配列が、同じメモリアドレスをアクセスしていないか? Loop-carried dependenceの存在確認 – ループを繰り返し実行する回数N、はベクタ長の倍数か? ▪ 倍数でない可能性があるときは、端数を処理する非SIMDコードを生成する • SVEだと、predicateで対応可能 – (昔は)メモリアクセスが、キャッシュ境界からずれていないか? ▪ キャッシュ境界からずれた部分を処理する、非SIMDコードを生成する プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 26 for (i = S; i < E; i++) c[i] = a[i] + b[i];
27.
自動SIMD命令生成によるプログラミングの改善 ▪ アルゴリズムやデータ配置の変更 – アルゴリズム ▪
例:SOR → Red-black SOR – データ配置 ▪ 例:Array of structs(AOS) → Struct of arrays(SOA) ▪ プログラムの性質の保証 – “restrict” keyword of C99 ▪ ある配列変数が、他の変数とエイリアスしないことを保証する – Pragmaを用いた、SIMDを使用する宣言 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 27 void func(double *restrict a, double *restrict b, double *restrict c) { /* 配列a[], b[], and c[]はこの関数の中で異なるアドレスであることを保証 */ } #pragma omp simd (OpenMP 4.0) #pragma simd (icc) #pragma disjoint (xlc)
28.
データ配置 ▪ データ配置の変更は、非効率な非連続メモリアクセスをなくしたSIMD命 令実行のために、重要であることが多い – コンパイラは、このようなデータ配置の変更は容易ではない プログラミング言語処理系の最先端実装技術
ハードウェアアクセラレーション / Kazuaki Ishizaki 28 y0 z0 x0 y1 z1 x1 y2 z2 x2 y3 z3 x3 x0 x1 x2 x3 y4 z4 x4 x4 y0 y1 y2 y3 y4 z0 z1 z2 z3 z4 Array of Structures (AOS) Structure of arrays (SOA) y5 x5 struct _AOS { double x, y, z; } struct _AOS aos[N]; struct _SOA { double x[N], y[N], z[N]; } struct _SOA soa;
29.
データ配置 ▪ データ配置の変更は、非効率な非連続メモリアクセスをなくしたSIMD命 令実行のために、重要であることが多い – コンパイラは、このようなデータ配置の変更は容易ではない プログラミング言語処理系の最先端実装技術
ハードウェアアクセラレーション / Kazuaki Ishizaki 29 x0 x1 x2 x3 x4 y0 y1 y2 y3 z0 z1 z2 z3 Hybrid x5 x6 x7 y4 struct _HYBRID { double x[4], y[4], z[4]; } struct _HYBRID hybrid[N/4]; (4-wayのSIMDを仮定)
30.
コンパイラによる自動SIMD命令生成でプログラミングする利点欠点 ☺ソースコードをSIMD専用に変更する必要がない SIMD組み込み関数・ライブラリを使った場合ほどの性能向上が得られない コンパイラに優しいコードにすることでかなりの性能は得られる プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション /
Kazuaki Ishizaki 30 on POWER7 on Nehalem ベンチマークプログラムのSIMD無し実行に対する、平均性能向上比[1] XLC ICC GCC プログラムの変更なしに自動SIMD命令生成 1.66 1.84 1.58 プログラムを手で変換後、自動SIMD命令生成 2.97 2.38 N/A SIMD組み込み関数で記述 3.15 2.45 N/A [1] Maleki et al. “An Evaluation of Vectorizing Compilers”, PACT 2011
31.
Java処理系でのSIMD命令利用方法 ▪ 単純ループのコンパイラによる自動SIMD変換 ▪ 複雑なループも技術的には変換可能だが、動的コンパイラでは時間がかかる解析を 行うことは難しい –
行列積、行列ベクトル積を行うループなどは変換可能 ▪ IBM Java 8、Open JDK 8、で実装 ▪ Javaクラスライブラリでの活用 – ループ処理が多いライブラリで使用 ▪ java/lang/String, Java/util/Arrays, String encoding converter ▪ IBM Java 8で実装 ▪ SIMD組み込み関数 – Vector APIとして議論中 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 31 for (int i = 0; i < C.length; i++) { C[i] = A[i] + B[i]; } VectorSpecies<Float> SPECIES = FloatVector.SPECIES_256; void add(float[] A, float [] B, float [] C) { for (int i = 0; i < a.length; i += SPECIES.length()) { var va = FloatVector.fromArray(SPECIES, a, i); var vb = FloatVector.fromArray(SPECIES, b, i) var vc = va.add(vb); vc.intoArray(C, i); }} 元のスカラループ 提案中の組み込み関数を使った例
32.
コンパイラによる自動SIMD命令生成でプログラミング ▪ 専用命令・組み込み関数を使ってプログラミングする ☺性能が高い プログラミングが容易ではない プログラムのポータビリティが低い ▪ 特定の処理を行うライブラリを呼ぶ ☺性能が高い ☺プログラムのポータビリティが高い 予め決められた条件での処理しか高速化されない ▪
コンパイラが専用命令を生成する ☺プログラムのポータビリティが高い 性能はそれなり 変換されるプログラムも多くなってきたが、解析しきれない条件もある プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 32
33.
GPGPUの利用方法 ▪ 専用命令を使ってプログラミングする – GPGPUメーカーが用意したアセンブリ言語、専用関数でプログラムを書く ▪
PTX(NVIDIA)、GCN(AMD) ▪ 特定の処理を行うライブラリを呼ぶ – cuBLAS、などの行列演算 ▪ プログラマがアセンブラで書くより速いことが多い ▪ 普通にプログラムを書いて、コンパイラが自動的に専用命令を生成する – ホスト-アクセラレータ間の処理などは自分で書く(例:CUDA, OpenCL) – コンパイラが自動でコードを生成する(例:OpenACC, OpenMP) プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 33 #pragma acc parallel loop for (i = 0; i < N; i++) c[i] = a[i] + b[i]; cudaMalloc(&d_a, N*sizeof(float)); cudaMemcpy(d_a, a, N*sizeof(float), cudaMemcpyHostToDevice) ... add<<GRID, BLOCK>>>(d_a, d_b, d_c); cudaMemcpy(c, d_c, N*sizeof(float), cudaMemcpyDeviceToHost); __global__ void add(float *a, float *b, float *c) { I = blockIdx.x * blockDim.x + threadIdx.x; c[i] = a[i] + b[i];}
34.
今日の授業でわかる(はずの)こと ▪ ハードウェアアクセラレータの概要について ▪ プログラミング言語からハードウェアアクセラレータを使う方法とその 利点欠点(SIMDを例に) –
プログラマがSIMD命令を書く → 性能は高いが、プログラミングが難しい – プログラマがライブラリを呼ぶ → 性能は高いが、処理が限られる – プログラマのプログラムをコンパイラが変換する → 性能はそこそこだが、 ポータビリティは高い。プログラムを書き換えて性能を上げられる。 ▪ 深層学習について – どのような処理が内部で行われているか – どのような処理がハードウェアアクセラレータで高速化できるか – プログラミング処理系として、どのような高速化ができるか プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 34
35.
ハードウェアアクセラレータが よく使われる分野の一例 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション /
Kazuaki Ishizaki 35
36.
深層学習(Deep Learning) ▪ ニューラルネットワークが提唱されたのは1986年。 ▪
20年以上の冬の時代を経た後、2012年の画像認識コンテストにおいて、 Deep Learningを使用したアルゴリズム(AlexNet)が認識率を大きく改善し、 圧倒的な勝利をおさめた ▪ その後、Deep Learningに関する研究が急速に進展し、様々な分野での適 用が研究・実用化されている – 応用例 ▪ 画像認識 ▪ 機械翻訳 ▪ 文書理解・生成 ▪ チャット ▪ オンラインショッピングの商品のおすすめ ▪ ゲーム: 囲碁、将棋 ▪ 音声認識 ▪ 自動運転プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 36
37.
深層学習とは? ▪ 層(Layer)をたくさん(多いものは1000以上)重ねて、多くの重み(多いも のは1000億以上)を持つニューラルネットワーク – あるデータを入力すると、正解に近い出力を生成する(推論・Inference) –
推論をよりよいものにするためには、多くのデータを入力して、正解に近い出力 を生成するように学習する(=重みの更新)必要がある(学習・Training) ▪ 層の各点では、矢印が持つ重みを用いて計算を行う – 推論の例 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 37 魚 0.95 鳥 0.05 層 層 層 層 重み 重み 重み
38.
2012年以降の深層学習 ▪ 深層学習の研究が、アルゴリズム・ハードウェア・ソフトウェアのすべ ての面で急速に進展している – アルゴリズム ▪
Convolution – 画像 ▪ Long-Short Term Memory – 文書・音声 ▪ Transformer – 文書が最初の応用、最近は多くの分野に適用されている(汎用?) – ハードウェア ▪ GPGPUの利用(Deep learning with COTS HPC systems, 2013) ▪ 少ないビット数での行列行列積処理(Deep Learning with Limited Numerical Precision, Training deep neural networks with low precision multiplications, 2015) – ソフトウェア ▪ 深層学習フレームワーク ▪ コンパイラによる最適化 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 38
39.
画像を認識するニューラルネットの例 ▪ LeNet [Yann98]:
0~9の手書き文字の入力の認識 – データに、5x5のフィルタを適用し特徴を抽出した後、データの大きさを減らす – 全結合層で1次元のベクタに変換する – 最後の層で、0-9に関する確率分布に変換する 39 0 0.01 … 6 0.002 7 0.91 8 0.003 9 0.05 畳み込み 活性化 32x32 5x5 28x28を 6種類 プー リング 14x14を 6種類 10x10を 16種類 5x5を 16種類 5x5 1x120 1x84 1x10 全結合 畳み込み 活性化 プー リング 全結合 全結合
40.
層で行う処理は、何を行っているか? ▪ 畳み込み(Convolution) – 入力データとフィルタで行列の内積を求める ▪
活性化関数(Activation function) – Tanh: ハイパボリックタンジェント – ReLU: 値が0以下であれば0,それ以外は入力値を取る ▪ プーリング関数(Pooling) – MaxPooling: 近傍(例えば2x2)の最大値を取る プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 40 0 = 0x-1 + 1x1 + 1x-1 + 1x1 + 0x0 + 1x1 + 1x-1 + 1x1 + 1x-1 = 1 入力データ フィルタ ReLU MaxPooling 1 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0 0 -1 1 -1 1 0 1 -1 1 -1 1 0 -1 1 0 1 1 -1 -1 0 1 -1 2 1 -1 1 1 0 0 1 0 1 1 0 0 0 1 0 2 1 0 1 2 1 1 1
41.
層で行う処理は、何を行っているか? ▪ 全結合(Full connection) –
行列ベクトル積を求める プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 41 入力データ 重み 1x0 + 1x1 + 0x0 + 1x0 + 1x1 + 0x0 = 2 1 1 0 1 1 0 0 0 1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 1 2 0 2 1
42.
各処理はどのように記述できるか? ▪ Convolution – 4重ループで、外側2重は並列実行、内側2重は積和演算でリダクション実行 可能 ▪
Full connection – 2重ループで、外側は並列実行、内側は積和演算でリダクション実行可能 42 parfor (yo = 0, yi = 1; yi < height-1; yi++, yo++) { parfor (xo = 0, xi = 1; xi < width-1; xi++, xo++) { reducefor (yf = 0; yf < filterHeight; yf++) { reducefor (xf = 0; xf < filterWidth; xf++) { output1[yo][xo] += input[yi + yf – 1][xi + xf – 1] * filter[yf][xf]; }}}} parfor (yo = 0; yo < height; yo++) { reducefor (xf = 0; xf < weightWidth; yf++) { output[yo] += weight[yo][xf] * output3[xf]; }} ※実際には、さらに計算量とデータの再利用を増やす処理が行われています(バッチ化) プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
43.
各処理はどのように記述できるか? ▪ Relu – 並列実行可能な2重ループで、max()を実行 ▪
MaxPooling – 4重ループで、外側2重は並列実行、内側2重は最大値を求めるリダクション 実行可能 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 43 parfor (yi = 0, yo = 0; yi < height; yi += poolHeight, yo++) { parfor (xi = 0, xo = 0; xi < width; xi += poolWidth, xo++) { reducefor (maxval = -INF, yp = 0; yp < poolHeight; yp++) { reducefor (xp = 0; xp < poolWidth; xp++) { maxval = max(output2[yi+yp][xi+xp], maxval); }} output3[yo][xo] = maxval; }} parfor (yi = 0; yi < height; yi++) { parfor (xi = 0; xi < width; xi++) { output2[yi][xi] = max(0, output1[yi][xi]); }}
44.
ハードウェアアクセラレータとの親和性 ▪ Convolution – 4重ループで、外側2重は並列実行、内側2重はリダクション実行可能 ▪
Full connection – 2重ループで、外側は並列実行、内側はリダクション実行可能 ▪ ReLu – 並列実行可能な2重ループ ▪ MaxPooling – 4重ループで、外側2重は並列実行、内側2重はリダクション実行可能 プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 44 決まった処理で、並列処理が多いのでハードウェアアクセラレータ向き 特に、計算量の多いConvolution、 (今回は使っていないが)Matrix multiplicationを高速化したい
45.
どんなハードウェアアクセラレータが使われている? ▪ SIMD – 行列・行列演算に拡張(主に推論用) ▪
PowerPC: Matrix-multiply Assist (MMA) ▪ Intel: Advanced Matrix eXtension (AMX) ▪ ARM: Scalable Matrix Extension (SME) ▪ GPGPU – 低精度の行列・行列演算専用回路を搭載 ▪ NVIDIA: V100, A100, H100のTensorCore プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 45
46.
どんなハードウェアアクセラレータが使われている? ▪ Deep Learning専用プロセッサ
→ なるべく簡素なアーキテクチャ – 少ないビット数の(FP16, FP8, INT8, INT4など)行列行列積の高速化に特化して いる – 限られた演算だけ実行する(例、add, mul, max, exp, …) – ハードウェア制御のデータキャッシュを持たない(ソフトウェアによる制御) – 分岐命令に関する先読み機構を持たない プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 46 https://aws.amazon.com/jp/blogs/news/aws-trainium-amazon-ec2-trn1-ml-training-part1/ https://www.youtube.com/watch?v=VCScWh966u4 https://dl.acm.org/doi/abs/10.1109/ISCA52012.2021.00021 IBM RaPiD core
47.
ニューラルネットはどのように記述するか? ▪ 深層学習用のフレームワークを用いて、ニューラルネットを記述する – 初期は ▪
Caffe (UC Berkley), http://caffe.berkeleyvision.org/ • 2013に最初のバージョン – 今は ▪ TensorFlow (Google), https://www.tensorflow.org/ ▪ PyTorch (Meta), http://pytorch.org/ ▪ TVM (U of Washington), https://tvm.apache.org/ プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 47 … layer { name: “relu1”, type: “ReLU”, bottom: “conv1_blob”, top: “relu1_blob”, } … … relu = torch.nn.ReLU() relu1_blob = relu(conv1_blob) … ModelはProtoBufを手書き ModelはPythonで記述
48.
ニューラルネットを実行する方式は? ▪ これらのフレームワークは、ハードウェアアクセラレータが用意している 専用ライブラリを呼ぶ – Convolution、などの代表的な演算を高速化するライブラリ ▪
cuDNN by NVIDIA ▪ SenDNN by AMD ▪ OneAPI for DNN by Intel ▪ zDNN by IBM プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 48
49.
さらに高速化できないか? ▪ フレームワークで書かれたニューラルネットワークはグラフ構造を持ち、 プログラムとみなすことができる プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション
/ Kazuaki Ishizaki 49 import torch conv2d = torch.nn.Conv2d(...) relu = torch.nn.ReLU() gelu = torch.nn.GeLU() x = ... c = conv2d(x) t = torch.div(c, ...) if cond: u = relu(t) else: u = gelu(t) conv2d div relu 実行トレースから グラフを生成
50.
グラフで記述されたプログラムの最適化 ▪ 専用コンパイラで最適化を適用してコンパイルして、アクセラレータ命令 直接生成することで高速化を図る – 簡素なアーキテクチャなので、手で命令を書いて実行することはCPU・GPGPU 以上に難しい ▪
OpenXLA ▪ AutoTVM/AutoSchedular ▪ TorchInductor ▪ DeepTools ▪ 行われる最適化 – オペレーション融合(例:Convolutionとadd) – 数値表現方法の変更(少ないビット数のデータ表現、整数表現) – オペレーションの計算とデータ転送の最適化 – メモリレイアウト変更 – 定数伝搬・演算強度低減 – など… プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 50
51.
OpenXLA ▪ HLO: オペレーション融合、共通式削除、などを行う ▪
LLO: 対象のアーキテクチャ独自の最適化を行う(実装はLLVMを使ってい る) ▪ Executor API: 各処理(例:conv2d, ReLU)を実行する プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 51 Source: https://autodiff-workshop.github.io/slides/JeffDean.pdf
52.
TVM ▪ Relay: グラフ上での最適化を行う –
オペレーション融合、など ▪ AutoTVM/AutoScheduler: 演算ごとの最適化を行う – ループタイリング、キャッシュ利用、など プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 52 https://tvm.apache.org/docs/tutorial/introduction.html
53.
DeepTools ▪ DeepSpatialMatrix: グラフ上での最適化を行う –
オペレーション融合、メモリレイアウト変更、など ▪ DeepMatrix: 演算ごとの最適化を行う – ループタイリング、計算とデータ転送のオーバラップ、など プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 53 https://ieeexplore.ieee.org/document/8782645
54.
最後におまけ ▪ AIやQuantumが流行って、言語処理の研究は廃れていくのか? プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション
/ Kazuaki Ishizaki 54
55.
最後におまけ ▪ AIやQuantumが流行って、言語処理の研究は廃れていくのか? – そんなことはないと思っています。 その時代に重要なワークロードがあれば それを高速化する命令やアクセラレータが 開発され、手書きでも使われるでしょう。 使う人の裾野が広がれば、生産性を高める ための専用言語やフレームワークが必要と されます。そして、人はわがままなので、 生産性を高めるだけでなく高速化したい、 と言い出します。 こういう新しいわがまままっとうな要求に 答えるために言語設計や最適化コンパイラの 研究は続いていくと思っています。 プログラミング言語処理系の最先端実装技術
ハードウェアアクセラレーション / Kazuaki Ishizaki 55 とあるツイートより
56.
今日の授業でわかる(はずの)こと ▪ ハードウェアアクセラレータの概要について – SIMD –
GPGPU – HTM – AIアクセラレータ ▪ プログラミング言語からハードウェアアクセラレータを使う方法とその 利点欠点(SIMDを例に) – プログラマがSIMD命令を書く – プログラマがライブラリを呼ぶ – プログラマのプログラムをコンパイラが変換する ▪ 深層学習について – どのような処理が内部で行われているか – どのような処理がハードウェアアクセラレータで高速化できるか – プログラミング処理系として、どのような高速化ができるか プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 56
57.
今日の授業のまとめ ▪ ハードウェアアクセラレータの概要について – SIMD –
GPGPU – HTM – AIアクセラレータ ▪ プログラミング言語からハードウェアアクセラレータを使う方法とその 利点欠点(SIMDを例に) – プログラマがSIMD命令を書く – プログラマがライブラリを呼ぶ – プログラマのプログラムをコンパイラが変換する ▪ 深層学習について – どのような処理が内部で行われているか – どのような処理がハードウェアアクセラレータで高速化できるか – プログラミング処理系として、どのような高速化ができるか プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki 57
Jetzt herunterladen