More Related Content Similar to 20230105_TITECH_lecture_ishizaki_public.pdf
Similar to 20230105_TITECH_lecture_ishizaki_public.pdf (20) More from Kazuaki Ishizaki
More from Kazuaki Ishizaki (20) 20230105_TITECH_lecture_ishizaki_public.pdf2. 自己紹介
▪
プログラミング言語処理系の最先端実装技術 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
6. ハードウェアアクセラレータ
▪ CPUの汎用命令の組み合わせで処理していたのでは効率が悪い処理を、
効率よく処理するハードウェア
– 改善例
▪ レイテンシ
▪ スループット
▪ 消費電力効率
▪ チップ面積
– ハードウェア例
▪ Single Instruction Multiple Data (SIMD)
▪ General Purpose Graphic Processing Unit (GPGPU)
▪ Hardware Transactional Memory (HTM)
▪ 専用ハードウェア
• GRAvity PiPE (GRAPE) - 重力相互作用の計算
• AIアクセラレータ – 深層学習の計算
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
6
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
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整数値を持つ
ベクタレジスタ
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
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)
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); }}
元のスカラループ
提案中の組み込み関数を使った例
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];}
36. 深層学習(Deep Learning)
▪ ニューラルネットワークが提唱されたのは1986年。
▪ 20年以上の冬の時代を経た後、2012年の画像認識コンテストにおいて、
Deep Learningを使用したアルゴリズム(AlexNet)が認識率を大きく改善し、
圧倒的な勝利をおさめた
▪ その後、Deep Learningに関する研究が急速に進展し、様々な分野での適
用が研究・実用化されている
– 応用例
▪ 画像認識
▪ 機械翻訳
▪ 文書理解・生成
▪ チャット
▪ オンラインショッピングの商品のおすすめ
▪ ゲーム: 囲碁、将棋
▪ 音声認識
▪ 自動運転プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
36
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で記述
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
56. 今日の授業でわかる(はずの)こと
▪ ハードウェアアクセラレータの概要について
– SIMD
– GPGPU
– HTM
– AIアクセラレータ
▪ プログラミング言語からハードウェアアクセラレータを使う方法とその
利点欠点(SIMDを例に)
– プログラマがSIMD命令を書く
– プログラマがライブラリを呼ぶ
– プログラマのプログラムをコンパイラが変換する
▪ 深層学習について
– どのような処理が内部で行われているか
– どのような処理がハードウェアアクセラレータで高速化できるか
– プログラミング処理系として、どのような高速化ができるか
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
56
57. 今日の授業のまとめ
▪ ハードウェアアクセラレータの概要について
– SIMD
– GPGPU
– HTM
– AIアクセラレータ
▪ プログラミング言語からハードウェアアクセラレータを使う方法とその
利点欠点(SIMDを例に)
– プログラマがSIMD命令を書く
– プログラマがライブラリを呼ぶ
– プログラマのプログラムをコンパイラが変換する
▪ 深層学習について
– どのような処理が内部で行われているか
– どのような処理がハードウェアアクセラレータで高速化できるか
– プログラミング処理系として、どのような高速化ができるか
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
57