SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Downloaden Sie, um offline zu lesen
2023年1月5日
日本アイ・ビー・エム(株) 東京基礎研究所
石崎 一明
(資料作成協力:井上拓、大平怜)
数理・計算科学特論B
プログラミング言語処理系の最先端実装技術
第7講 ハードウェア・アクセラレーション
1
自己紹介
▪
プログラミング言語処理系の最先端実装技術 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のコミッター
今日の講義の内容
▪ ハードウェアアクセラレータ、とは
– あるカテゴリの演算を効率よく実行可能
▪ プログラミング言語からハードウェアアクセラレータを使う方法
– 明示的にハードウェアアクセラレータを制御する命令を呼ぶ
– ライブラリを経由してハードウェアアクセラレータを制御する命令を呼ぶ
– システムが自動的にハードウェアアクセラレータを制御する命令を呼ぶ
▪ ハードウェアアクセラレータがよく使われる分野の一例
– 深層学習
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
3
今日の授業でわかる(はずの)こと
▪ ハードウェアアクセラレータの概要について
– Single Instruction Multiple Data (SIMD)
– General Purpose Graphic Processing Unit (GPGPU)
– Hardware transactional memory (HTM)
– AIアクセラレータ
▪ プログラミング言語からハードウェアアクセラレータを使う方法とその
利点欠点(SIMDを例に)
– プログラマが命令を書く
– プログラマがライブラリを呼ぶ
– プログラマのプログラムをコンパイラが変換する
▪ 深層学習について
– どのような処理が内部で行われているか
– どのような処理がハードウェアアクセラレータで高速化できるか
– プログラミング処理系として、どのような高速化ができるか
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
4
ハードウェアアクセラレータとは?
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
5
ハードウェアアクセラレータ
▪ CPUの汎用命令の組み合わせで処理していたのでは効率が悪い処理を、
効率よく処理するハードウェア
– 改善例
▪ レイテンシ
▪ スループット
▪ 消費電力効率
▪ チップ面積
– ハードウェア例
▪ Single Instruction Multiple Data (SIMD)
▪ General Purpose Graphic Processing Unit (GPGPU)
▪ Hardware Transactional Memory (HTM)
▪ 専用ハードウェア
• GRAvity PiPE (GRAPE) - 重力相互作用の計算
• AIアクセラレータ – 深層学習の計算
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
6
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
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
GPGPU
▪ 数千~万の実行ユニット(例:CUDA core)で異なるデータに対して同
時に命令を実行し、まとまった単位で同じ処理を行う
– ロードストアは、実行ユニットごとに異なるアドレスからロードストア可能
– 条件分岐は、条件が成立した実行ユニットと条件が成立しない実行ユニット
で異なる処理を行える
▪ 画像処理、密行列演算、深層学習、などに高い性能を発揮する
▪ 高性能GPGPUを製造しているメーカは限られている
– NVIDIA、AMD、Intel、など
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
9
Source: https://www.slideshare.net/NVIDIAJapan/hopper-251681963
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
ロック
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
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
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
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
今日の授業でわかる(はずの)こと
▪ ハードウェアアクセラレータの概要について
– SIMD
– GPGPU
– HTM
– AIアクセラレータ
▪ プログラミング言語からハードウェアアクセラレータを使う方法とその
利点欠点(SIMDを例に)
– プログラマが命令を書く
– プログラマがライブラリを呼ぶ
– プログラマのプログラムをコンパイラが変換する
▪ 深層学習について
– どのような処理が内部で行われているか
– どのような処理がハードウェアアクセラレータで高速化できるか
– プログラミング処理系として、どのような高速化ができるか
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
15
プログラミング言語から
ハードウェアアクセラレータを使うには
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
16
使い方の3つの方法
▪ 専用命令を使ってプログラミングする
▪ 特定の処理を行うライブラリを呼ぶ
– 例:行列積
▪ 普通にプログラムを書いて、コンパイラが自動的に専用命令を生成する
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
17
SIMDの専用命令を使ってプログラミング
▪ 命令列を記述する方法
– アセンブラ、gcc/clangのasm文のインラインアセンブラ
– gcc/clangの組み込み関数(intrinsic)
▪ gccやclangでは、SIMD用にデータの型が拡張されている
▪ コンパイラが、レジスタ割付けや命令スケジューリングを行ってくれる
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
18
SIMD組み込み関数によるプログラム例
▪ 元のスカラループ
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
19
int32_t *a, *b, *c;
for (i = 0; i < N; i++) c[i] = a[i] + b[i];
32-bit整数配列
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)要素を同時に処理
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整数値を持つ
ベクタレジスタ
SIMD組み込み関数でプログラミングする利点欠点
☺高い性能を得ることができる
– このためには、アルゴリズムやデータ配置まで変更することが多い
☺アセンブラで書くよりは、簡単にプログラムを書くことができる
– レジスタ割付けや命令スケジューリングは、コンパイラが行う
プログラミング、デバッグ、メンテナンスが容易ではない
プロセッサ・アーキテクチャに依存したコードとなり、プロセッサ間の
移植性が低い
Java、JavaScriptのようなプラットフォーム独立な言語では、あまり適し
ていない
– JavaのVector APIも、いまだに正式版になっていない
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
22
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
ライブラリでプログラミングする利点欠点
☺高い性能を得ることができる
– プロセッサメーカーが最適化したライブラリは、プログラマがアセンブラで
書くより性能が高いことがある
☺簡単にプログラムを書くことができる
高速化できる処理が、ライブラリで提供された処理に限られる
データ配置などの前提が合わないときは、使用できない。もしくは、
データ変換が必要になる。
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
24
コンパイラによる自動SIMD命令生成でプログラミング
▪ 自動ベクタ化(automatic vectorization)によって、プログラマが書いた
コードから、自動的にSIMD命令を生成する
▪ コンパイラは与えられたループを解析して、可能であればSIMD命令を用
いるループを生成する
– 可能でない、と判断する原因
▪ ループ間にデータ依存(loop-carried dependence)がある
▪ ループ内に(if文などの)分岐がある場合
• predicateで対応できる場合もある
▪ ループ内に、仮想メソッド呼び出しがある
▪ メモリアクセスが、キャッシュ境界からずれている
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
25
自動SIMD命令生成によるプログラミング例
▪ 元のスカラループ
▪ コンパイラが行う解析
– 入力と出力の配列が、同じメモリアドレスをアクセスしていないか?
Loop-carried dependenceの存在確認
– ループを繰り返し実行する回数N、はベクタ長の倍数か?
▪ 倍数でない可能性があるときは、端数を処理する非SIMDコードを生成する
• SVEだと、predicateで対応可能
– (昔は)メモリアクセスが、キャッシュ境界からずれていないか?
▪ キャッシュ境界からずれた部分を処理する、非SIMDコードを生成する
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
26
for (i = S; i < E; i++) c[i] = a[i] + b[i];
自動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)
データ配置
▪ データ配置の変更は、非効率な非連続メモリアクセスをなくした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;
データ配置
▪ データ配置の変更は、非効率な非連続メモリアクセスをなくした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を仮定)
コンパイラによる自動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
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); }}
元のスカラループ
提案中の組み込み関数を使った例
コンパイラによる自動SIMD命令生成でプログラミング
▪ 専用命令・組み込み関数を使ってプログラミングする
☺性能が高い
プログラミングが容易ではない
プログラムのポータビリティが低い
▪ 特定の処理を行うライブラリを呼ぶ
☺性能が高い
☺プログラムのポータビリティが高い
予め決められた条件での処理しか高速化されない
▪ コンパイラが専用命令を生成する
☺プログラムのポータビリティが高い
性能はそれなり
変換されるプログラムも多くなってきたが、解析しきれない条件もある
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
32
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];}
今日の授業でわかる(はずの)こと
▪ ハードウェアアクセラレータの概要について
▪ プログラミング言語からハードウェアアクセラレータを使う方法とその
利点欠点(SIMDを例に)
– プログラマがSIMD命令を書く → 性能は高いが、プログラミングが難しい
– プログラマがライブラリを呼ぶ → 性能は高いが、処理が限られる
– プログラマのプログラムをコンパイラが変換する → 性能はそこそこだが、
ポータビリティは高い。プログラムを書き換えて性能を上げられる。
▪ 深層学習について
– どのような処理が内部で行われているか
– どのような処理がハードウェアアクセラレータで高速化できるか
– プログラミング処理系として、どのような高速化ができるか
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
34
ハードウェアアクセラレータが
よく使われる分野の一例
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
35
深層学習(Deep Learning)
▪ ニューラルネットワークが提唱されたのは1986年。
▪ 20年以上の冬の時代を経た後、2012年の画像認識コンテストにおいて、
Deep Learningを使用したアルゴリズム(AlexNet)が認識率を大きく改善し、
圧倒的な勝利をおさめた
▪ その後、Deep Learningに関する研究が急速に進展し、様々な分野での適
用が研究・実用化されている
– 応用例
▪ 画像認識
▪ 機械翻訳
▪ 文書理解・生成
▪ チャット
▪ オンラインショッピングの商品のおすすめ
▪ ゲーム: 囲碁、将棋
▪ 音声認識
▪ 自動運転プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
36
深層学習とは?
▪ 層(Layer)をたくさん(多いものは1000以上)重ねて、多くの重み(多いも
のは1000億以上)を持つニューラルネットワーク
– あるデータを入力すると、正解に近い出力を生成する(推論・Inference)
– 推論をよりよいものにするためには、多くのデータを入力して、正解に近い出力
を生成するように学習する(=重みの更新)必要がある(学習・Training)
▪ 層の各点では、矢印が持つ重みを用いて計算を行う
– 推論の例
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
37
魚 0.95
鳥 0.05
層 層 層 層
重み
重み
重み
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
画像を認識するニューラルネットの例
▪ 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
全結合
畳み込み
活性化
プー
リング 全結合
全結合
層で行う処理は、何を行っているか?
▪ 畳み込み(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
層で行う処理は、何を行っているか?
▪ 全結合(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
各処理はどのように記述できるか?
▪ 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
各処理はどのように記述できるか?
▪ 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]);
}}
ハードウェアアクセラレータとの親和性
▪ Convolution
– 4重ループで、外側2重は並列実行、内側2重はリダクション実行可能
▪ Full connection
– 2重ループで、外側は並列実行、内側はリダクション実行可能
▪ ReLu
– 並列実行可能な2重ループ
▪ MaxPooling
– 4重ループで、外側2重は並列実行、内側2重はリダクション実行可能
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
44
決まった処理で、並列処理が多いのでハードウェアアクセラレータ向き
特に、計算量の多いConvolution、
(今回は使っていないが)Matrix multiplicationを高速化したい
どんなハードウェアアクセラレータが使われている?
▪ 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
どんなハードウェアアクセラレータが使われている?
▪ 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
ニューラルネットはどのように記述するか?
▪ 深層学習用のフレームワークを用いて、ニューラルネットを記述する
– 初期は
▪ 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で記述
ニューラルネットを実行する方式は?
▪ これらのフレームワークは、ハードウェアアクセラレータが用意している
専用ライブラリを呼ぶ
– Convolution、などの代表的な演算を高速化するライブラリ
▪ cuDNN by NVIDIA
▪ SenDNN by AMD
▪ OneAPI for DNN by Intel
▪ zDNN by IBM
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
48
さらに高速化できないか?
▪ フレームワークで書かれたニューラルネットワークはグラフ構造を持ち、
プログラムとみなすことができる
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / 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
実行トレースから
グラフを生成
グラフで記述されたプログラムの最適化
▪ 専用コンパイラで最適化を適用してコンパイルして、アクセラレータ命令
直接生成することで高速化を図る
– 簡素なアーキテクチャなので、手で命令を書いて実行することはCPU・GPGPU
以上に難しい
▪ OpenXLA
▪ AutoTVM/AutoSchedular
▪ TorchInductor
▪ DeepTools
▪ 行われる最適化
– オペレーション融合(例:Convolutionとadd)
– 数値表現方法の変更(少ないビット数のデータ表現、整数表現)
– オペレーションの計算とデータ転送の最適化
– メモリレイアウト変更
– 定数伝搬・演算強度低減
– など…
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
50
OpenXLA
▪ HLO: オペレーション融合、共通式削除、などを行う
▪ LLO: 対象のアーキテクチャ独自の最適化を行う(実装はLLVMを使ってい
る)
▪ Executor API: 各処理(例:conv2d, ReLU)を実行する
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
51
Source: https://autodiff-workshop.github.io/slides/JeffDean.pdf
TVM
▪ Relay: グラフ上での最適化を行う
– オペレーション融合、など
▪ AutoTVM/AutoScheduler: 演算ごとの最適化を行う
– ループタイリング、キャッシュ利用、など
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
52
https://tvm.apache.org/docs/tutorial/introduction.html
DeepTools
▪ DeepSpatialMatrix: グラフ上での最適化を行う
– オペレーション融合、メモリレイアウト変更、など
▪ DeepMatrix: 演算ごとの最適化を行う
– ループタイリング、計算とデータ転送のオーバラップ、など
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
53
https://ieeexplore.ieee.org/document/8782645
最後におまけ
▪ AIやQuantumが流行って、言語処理の研究は廃れていくのか?
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
54
最後におまけ
▪ AIやQuantumが流行って、言語処理の研究は廃れていくのか?
– そんなことはないと思っています。
その時代に重要なワークロードがあれば
それを高速化する命令やアクセラレータが
開発され、手書きでも使われるでしょう。
使う人の裾野が広がれば、生産性を高める
ための専用言語やフレームワークが必要と
されます。そして、人はわがままなので、
生産性を高めるだけでなく高速化したい、
と言い出します。
こういう新しいわがまままっとうな要求に
答えるために言語設計や最適化コンパイラの
研究は続いていくと思っています。
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
55
とあるツイートより
今日の授業でわかる(はずの)こと
▪ ハードウェアアクセラレータの概要について
– SIMD
– GPGPU
– HTM
– AIアクセラレータ
▪ プログラミング言語からハードウェアアクセラレータを使う方法とその
利点欠点(SIMDを例に)
– プログラマがSIMD命令を書く
– プログラマがライブラリを呼ぶ
– プログラマのプログラムをコンパイラが変換する
▪ 深層学習について
– どのような処理が内部で行われているか
– どのような処理がハードウェアアクセラレータで高速化できるか
– プログラミング処理系として、どのような高速化ができるか
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
56
今日の授業のまとめ
▪ ハードウェアアクセラレータの概要について
– SIMD
– GPGPU
– HTM
– AIアクセラレータ
▪ プログラミング言語からハードウェアアクセラレータを使う方法とその
利点欠点(SIMDを例に)
– プログラマがSIMD命令を書く
– プログラマがライブラリを呼ぶ
– プログラマのプログラムをコンパイラが変換する
▪ 深層学習について
– どのような処理が内部で行われているか
– どのような処理がハードウェアアクセラレータで高速化できるか
– プログラミング処理系として、どのような高速化ができるか
プログラミング言語処理系の最先端実装技術 ハードウェアアクセラレーション / Kazuaki Ishizaki
57

Weitere ähnliche Inhalte

Was ist angesagt?

SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
Singularityで分散深層学習
Singularityで分散深層学習Singularityで分散深層学習
Singularityで分散深層学習Hitoshi Sato
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdfYasunori Goto
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)Hiroki Nakahara
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門Fixstars Corporation
 
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはFPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはHideki Takase
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境KiyotomoHiroyasu
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモDNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモShinya Takamaeda-Y
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことNVIDIA Japan
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介Preferred Networks
 
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善Ito Takayuki
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 

Was ist angesagt? (20)

SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
Singularityで分散深層学習
Singularityで分散深層学習Singularityで分散深層学習
Singularityで分散深層学習
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdf
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはFPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うには
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモDNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 

Ähnlich wie 20230105_TITECH_lecture_ishizaki_public.pdf

第3回SEMAT勉強会 SEMATエッセンス解説
第3回SEMAT勉強会 SEMATエッセンス解説第3回SEMAT勉強会 SEMATエッセンス解説
第3回SEMAT勉強会 SEMATエッセンス解説Hironori Washizaki
 
Power biで気づく!現場機器の異常監視システム on azure
Power biで気づく!現場機器の異常監視システム on azurePower biで気づく!現場機器の異常監視システム on azure
Power biで気づく!現場機器の異常監視システム on azureIoTビジネス共創ラボ
 
20160906 pplss ishizaki public
20160906 pplss ishizaki public20160906 pplss ishizaki public
20160906 pplss ishizaki publicKazuaki Ishizaki
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 bitbank, Inc. Tokyo, Japan
 
機械学習基盤として活用するAutonomous Database
機械学習基盤として活用するAutonomous Database機械学習基盤として活用するAutonomous Database
機械学習基盤として活用するAutonomous DatabaseKenichi Sonoda
 
Kuberflow Kubernetes上の機械学習プラットフォーム
Kuberflow Kubernetes上の機械学習プラットフォームKuberflow Kubernetes上の機械学習プラットフォーム
Kuberflow Kubernetes上の機械学習プラットフォームKosuke Kikuchi
 
PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費Tatsumi Akinori
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)Takashi Sogabe
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
CoreMLによるiOS深層学習アプリの実装と性能分析
CoreMLによるiOS深層学習アプリの実装と性能分析CoreMLによるiOS深層学習アプリの実装と性能分析
CoreMLによるiOS深層学習アプリの実装と性能分析Ryosuke Tanno
 
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習Hori Tasuku
 
dstn交流会_data_spider 3.0最新情報とデモ
dstn交流会_data_spider 3.0最新情報とデモdstn交流会_data_spider 3.0最新情報とデモ
dstn交流会_data_spider 3.0最新情報とデモdstn
 
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)Operation Lab, LLC.
 
Integral Technology 第2回ユーザカンファレンス 〜すべてをクラウドで解析するための方法〜
Integral Technology 第2回ユーザカンファレンス  〜すべてをクラウドで解析するための方法〜Integral Technology 第2回ユーザカンファレンス  〜すべてをクラウドで解析するための方法〜
Integral Technology 第2回ユーザカンファレンス 〜すべてをクラウドで解析するための方法〜Rescale Japan株式会社
 
Machine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and ArchitectureMachine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and ArchitectureTakuya Minagawa
 
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまでCode for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまでNaoyuki Yamada
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことbitbank, Inc. Tokyo, Japan
 

Ähnlich wie 20230105_TITECH_lecture_ishizaki_public.pdf (20)

第3回SEMAT勉強会 SEMATエッセンス解説
第3回SEMAT勉強会 SEMATエッセンス解説第3回SEMAT勉強会 SEMATエッセンス解説
第3回SEMAT勉強会 SEMATエッセンス解説
 
Power biで気づく!現場機器の異常監視システム on azure
Power biで気づく!現場機器の異常監視システム on azurePower biで気づく!現場機器の異常監視システム on azure
Power biで気づく!現場機器の異常監視システム on azure
 
20160906 pplss ishizaki public
20160906 pplss ishizaki public20160906 pplss ishizaki public
20160906 pplss ishizaki public
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
The evolution of c#
The evolution of c#The evolution of c#
The evolution of c#
 
2018 07-23
2018 07-232018 07-23
2018 07-23
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
 
機械学習基盤として活用するAutonomous Database
機械学習基盤として活用するAutonomous Database機械学習基盤として活用するAutonomous Database
機械学習基盤として活用するAutonomous Database
 
Kuberflow Kubernetes上の機械学習プラットフォーム
Kuberflow Kubernetes上の機械学習プラットフォームKuberflow Kubernetes上の機械学習プラットフォーム
Kuberflow Kubernetes上の機械学習プラットフォーム
 
PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費
 
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
アプリケーションエンジニアのためのクラウドインフラ再入門 (2/3)
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
CoreMLによるiOS深層学習アプリの実装と性能分析
CoreMLによるiOS深層学習アプリの実装と性能分析CoreMLによるiOS深層学習アプリの実装と性能分析
CoreMLによるiOS深層学習アプリの実装と性能分析
 
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
カスタムSIで使ってみよう ~ OpenAI Gym を使った強化学習
 
dstn交流会_data_spider 3.0最新情報とデモ
dstn交流会_data_spider 3.0最新情報とデモdstn交流会_data_spider 3.0最新情報とデモ
dstn交流会_data_spider 3.0最新情報とデモ
 
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
 
Integral Technology 第2回ユーザカンファレンス 〜すべてをクラウドで解析するための方法〜
Integral Technology 第2回ユーザカンファレンス  〜すべてをクラウドで解析するための方法〜Integral Technology 第2回ユーザカンファレンス  〜すべてをクラウドで解析するための方法〜
Integral Technology 第2回ユーザカンファレンス 〜すべてをクラウドで解析するための方法〜
 
Machine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and ArchitectureMachine 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までCode for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
 

Mehr von Kazuaki Ishizaki

Make AI ecosystem more interoperable
Make AI ecosystem more interoperableMake AI ecosystem more interoperable
Make AI ecosystem more interoperableKazuaki Ishizaki
 
Enabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache SparkEnabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache SparkKazuaki Ishizaki
 
Introduction new features in Spark 3.0
Introduction new features in Spark 3.0Introduction new features in Spark 3.0
Introduction new features in Spark 3.0Kazuaki Ishizaki
 
SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0Kazuaki Ishizaki
 
In-Memory Evolution in Apache Spark
In-Memory Evolution in Apache SparkIn-Memory Evolution in Apache Spark
In-Memory Evolution in Apache SparkKazuaki Ishizaki
 
Looking back at Spark 2.x and forward to 3.0
Looking back at Spark 2.x and forward to 3.0Looking back at Spark 2.x and forward to 3.0
Looking back at Spark 2.x and forward to 3.0Kazuaki Ishizaki
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_publicKazuaki Ishizaki
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_publicKazuaki Ishizaki
 
Demystifying DataFrame and Dataset
Demystifying DataFrame and DatasetDemystifying DataFrame and Dataset
Demystifying DataFrame and DatasetKazuaki Ishizaki
 
Transparent GPU Exploitation for Java
Transparent GPU Exploitation for JavaTransparent GPU Exploitation for Java
Transparent GPU Exploitation for JavaKazuaki Ishizaki
 
Making Hardware Accelerator Easier to Use
Making Hardware Accelerator Easier to UseMaking Hardware Accelerator Easier to Use
Making Hardware Accelerator Easier to UseKazuaki Ishizaki
 
Easy and High Performance GPU Programming for Java Programmers
Easy and High Performance GPU Programming for Java ProgrammersEasy and High Performance GPU Programming for Java Programmers
Easy and High Performance GPU Programming for Java ProgrammersKazuaki Ishizaki
 
20151112 kutech lecture_ishizaki_public
20151112 kutech lecture_ishizaki_public20151112 kutech lecture_ishizaki_public
20151112 kutech lecture_ishizaki_publicKazuaki Ishizaki
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_publicKazuaki Ishizaki
 

Mehr von Kazuaki Ishizaki (20)

Make AI ecosystem more interoperable
Make AI ecosystem more interoperableMake AI ecosystem more interoperable
Make AI ecosystem more interoperable
 
Enabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache SparkEnabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache Spark
 
Introduction new features in Spark 3.0
Introduction new features in Spark 3.0Introduction 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.0SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0
 
SparkTokyo2019NovIshizaki
SparkTokyo2019NovIshizakiSparkTokyo2019NovIshizaki
SparkTokyo2019NovIshizaki
 
SparkTokyo2019
SparkTokyo2019SparkTokyo2019
SparkTokyo2019
 
In-Memory Evolution in Apache Spark
In-Memory Evolution in Apache SparkIn-Memory Evolution in Apache Spark
In-Memory Evolution in Apache Spark
 
icpe2019_ishizaki_public
icpe2019_ishizaki_publicicpe2019_ishizaki_public
icpe2019_ishizaki_public
 
hscj2019_ishizaki_public
hscj2019_ishizaki_publichscj2019_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.0Looking 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_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
 
Demystifying DataFrame and Dataset
Demystifying DataFrame and DatasetDemystifying DataFrame and Dataset
Demystifying DataFrame and Dataset
 
Transparent GPU Exploitation for Java
Transparent GPU Exploitation for JavaTransparent GPU Exploitation for Java
Transparent GPU Exploitation for Java
 
Making Hardware Accelerator Easier to Use
Making Hardware Accelerator Easier to UseMaking Hardware Accelerator Easier to Use
Making Hardware Accelerator Easier to Use
 
Exploiting GPUs in Spark
Exploiting GPUs in SparkExploiting GPUs in Spark
Exploiting GPUs in Spark
 
Easy and High Performance GPU Programming for Java Programmers
Easy and High Performance GPU Programming for Java ProgrammersEasy and High Performance GPU Programming for Java Programmers
Easy and High Performance GPU Programming for Java Programmers
 
Exploiting GPUs in Spark
Exploiting GPUs in SparkExploiting GPUs in Spark
Exploiting GPUs in Spark
 
20151112 kutech lecture_ishizaki_public
20151112 kutech lecture_ishizaki_public20151112 kutech lecture_ishizaki_public
20151112 kutech lecture_ishizaki_public
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
 

20230105_TITECH_lecture_ishizaki_public.pdf