Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
HitoshiSHINABE1
PDF, PPTX
632 views
Intel AVX2を使用したailia sdkの最適化
2022年2月25日DeepLearningLab クラウドxエッジAI Dayの資料です
Engineering
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 29
2
/ 29
3
/ 29
4
/ 29
5
/ 29
6
/ 29
7
/ 29
8
/ 29
9
/ 29
10
/ 29
11
/ 29
12
/ 29
13
/ 29
14
/ 29
15
/ 29
16
/ 29
17
/ 29
18
/ 29
19
/ 29
20
/ 29
21
/ 29
22
/ 29
23
/ 29
24
/ 29
25
/ 29
26
/ 29
27
/ 29
28
/ 29
29
/ 29
More Related Content
PDF
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
by
MorioImai
PDF
ailia SDK ハンズオン ~1時間で体感するAIを使ったコンピュータビジョン~
by
HitoshiSHINABE1
PPTX
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
by
Fixstars Corporation
PDF
計算機アーキテクチャを考慮した高能率画像処理プログラミング
by
Norishige Fukushima
PDF
CXL_説明_公開用.pdf
by
Yasunori Goto
PDF
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
by
Fixstars Corporation
PDF
BuildKitの概要と最近の機能
by
Kohei Tokunaga
PDF
Tensorflow Liteの量子化アーキテクチャ
by
HitoshiSHINABE1
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
by
MorioImai
ailia SDK ハンズオン ~1時間で体感するAIを使ったコンピュータビジョン~
by
HitoshiSHINABE1
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
by
Fixstars Corporation
計算機アーキテクチャを考慮した高能率画像処理プログラミング
by
Norishige Fukushima
CXL_説明_公開用.pdf
by
Yasunori Goto
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
by
Fixstars Corporation
BuildKitの概要と最近の機能
by
Kohei Tokunaga
Tensorflow Liteの量子化アーキテクチャ
by
HitoshiSHINABE1
What's hot
PPTX
[DL輪読会] マルチエージェント強化学習と心の理論
by
Deep Learning JP
PDF
NEDIA_SNIA_CXL_講演資料.pdf
by
Yasunori Goto
PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
by
NTT DATA Technology & Innovation
PPTX
機械学習、グラフ分析、SQLによるサイバー攻撃対策事例(金融業界)
by
Hadoop / Spark Conference Japan
PDF
MLOpsの概要と初学者が気をつけたほうが良いこと
by
Sho Tanaka
PDF
不揮発メモリ(NVDIMM)とLinuxの対応動向について
by
Yasunori Goto
PDF
第9回ACRiウェビナー_セック/岩渕様ご講演資料
by
直久 住川
PPTX
猫でも分かるVariational AutoEncoder
by
Sho Tatsuno
PDF
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
by
SSII
PDF
CVPR2018のPointCloudのCNN論文とSPLATNet
by
Takuya Minagawa
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
by
NTT DATA OSS Professional Services
PPTX
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
by
NTT DATA Technology & Innovation
PDF
【メタサーベイ】基盤モデル / Foundation Models
by
cvpaper. challenge
ODP
xrdpで変える!社内のPC環境
by
iCRAFT Corp. (アイクラフト株式会社)
PDF
忙しい人の5分で分かるDocker 2017年春Ver
by
Masahito Zembutsu
PDF
TensorFlow XLAは、 中で何をやっているのか?
by
Mr. Vengineer
PDF
【DL輪読会】Hierarchical Text-Conditional Image Generation with CLIP Latents
by
Deep Learning JP
PDF
TensorRT Inference Serverではじめる、 高性能な推論サーバ構築
by
NVIDIA Japan
PPTX
Tensor コアを使った PyTorch の高速化
by
Yusuke Fujimoto
PDF
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
by
NTT DATA Technology & Innovation
[DL輪読会] マルチエージェント強化学習と心の理論
by
Deep Learning JP
NEDIA_SNIA_CXL_講演資料.pdf
by
Yasunori Goto
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
by
NTT DATA Technology & Innovation
機械学習、グラフ分析、SQLによるサイバー攻撃対策事例(金融業界)
by
Hadoop / Spark Conference Japan
MLOpsの概要と初学者が気をつけたほうが良いこと
by
Sho Tanaka
不揮発メモリ(NVDIMM)とLinuxの対応動向について
by
Yasunori Goto
第9回ACRiウェビナー_セック/岩渕様ご講演資料
by
直久 住川
猫でも分かるVariational AutoEncoder
by
Sho Tatsuno
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
by
SSII
CVPR2018のPointCloudのCNN論文とSPLATNet
by
Takuya Minagawa
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
by
NTT DATA OSS Professional Services
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
by
NTT DATA Technology & Innovation
【メタサーベイ】基盤モデル / Foundation Models
by
cvpaper. challenge
xrdpで変える!社内のPC環境
by
iCRAFT Corp. (アイクラフト株式会社)
忙しい人の5分で分かるDocker 2017年春Ver
by
Masahito Zembutsu
TensorFlow XLAは、 中で何をやっているのか?
by
Mr. Vengineer
【DL輪読会】Hierarchical Text-Conditional Image Generation with CLIP Latents
by
Deep Learning JP
TensorRT Inference Serverではじめる、 高性能な推論サーバ構築
by
NVIDIA Japan
Tensor コアを使った PyTorch の高速化
by
Yusuke Fujimoto
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
by
NTT DATA Technology & Innovation
Similar to Intel AVX2を使用したailia sdkの最適化
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
PDF
組み込み関数(intrinsic)によるSIMD入門
by
Norishige Fukushima
PDF
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
by
MITSUNARI Shigeo
PDF
Intro to SVE 富岳のA64FXを触ってみた
by
MITSUNARI Shigeo
PDF
TVM の紹介
by
Masahiro Masuda
PDF
Boost.SIMD
by
Akira Takahashi
PPTX
AVX-512(フォーマット)詳解
by
MITSUNARI Shigeo
PDF
LLVM最適化のこつ
by
MITSUNARI Shigeo
PDF
フラグを愛でる
by
MITSUNARI Shigeo
PDF
llvm入門
by
MITSUNARI Shigeo
PDF
第11回 配信講義 計算科学技術特論B(2022)
by
RCCSRENKEI
PDF
HPC Phys-20201203
by
MITSUNARI Shigeo
PDF
optimal Ate pairing
by
MITSUNARI Shigeo
PDF
20180109 titech lecture_ishizaki_public
by
Kazuaki Ishizaki
KEY
関東GPGPU勉強会 LLVM meets GPU
by
Takuro Iizuka
PDF
Python physicalcomputing
by
Noboru Irieda
PDF
From IA-32 to avx-512
by
MITSUNARI Shigeo
PDF
RISC-V introduction for SIG SDR in CQ 2019.07.29
by
Takefumi MIYOSHI
PDF
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
by
Tsukasa Oi
PDF
kagami_comput2015_1
by
swkagami
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
組み込み関数(intrinsic)によるSIMD入門
by
Norishige Fukushima
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
by
MITSUNARI Shigeo
Intro to SVE 富岳のA64FXを触ってみた
by
MITSUNARI Shigeo
TVM の紹介
by
Masahiro Masuda
Boost.SIMD
by
Akira Takahashi
AVX-512(フォーマット)詳解
by
MITSUNARI Shigeo
LLVM最適化のこつ
by
MITSUNARI Shigeo
フラグを愛でる
by
MITSUNARI Shigeo
llvm入門
by
MITSUNARI Shigeo
第11回 配信講義 計算科学技術特論B(2022)
by
RCCSRENKEI
HPC Phys-20201203
by
MITSUNARI Shigeo
optimal Ate pairing
by
MITSUNARI Shigeo
20180109 titech lecture_ishizaki_public
by
Kazuaki Ishizaki
関東GPGPU勉強会 LLVM meets GPU
by
Takuro Iizuka
Python physicalcomputing
by
Noboru Irieda
From IA-32 to avx-512
by
MITSUNARI Shigeo
RISC-V introduction for SIG SDR in CQ 2019.07.29
by
Takefumi MIYOSHI
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
by
Tsukasa Oi
kagami_comput2015_1
by
swkagami
Intel AVX2を使用したailia sdkの最適化
1.
Intel AVX2を使用したailia SDKの最適化事例 2022.02.25
DeepLearningLab クラウドxエッジAI Day Hitoshi Shinabe / ax Inc.
2.
本講演について ailia SDKを事例としてAIの推論における高速化の方法を解説 • SIMDの基礎 •
x86 SIMD命令の歴史 • intrinsicsを使ったSIMDプログラミング • AVX2 対応 CPU 向け高速化テクニック
3.
ailia SDKについて ailia SDKはCPUやGPUを最大限活用した高速推論が行える
SDK ONNXに対応しており、Intel CPUのAVXを使用した推論が可能 ailia MODELSにて200種類を超える学習済みモデルを提供 無償評価版:https://ailia.jp/trial https://youtu.be/4ZNBZDFhEVI
4.
対象とする計算グラフ AIモデルは計算グラフとして表現される グラフの各ノードがConvolutionなどのオペレータに対応する 膨大な量の数値計算を行う ResNet50
5.
ailia SDKの構成 Vulkan, Metal
NEON AVX Accelerator (Convolution, Pooling, Resize, Add, and more.) Runtime Graph Optimization API (C++, Python, C#, JNI) ONNX (opset=10, 11) (supporting over 150 layers) ailia SDK ailia MODELS
6.
ailia SDK の
SIMD 高速化 ※共に FP32 モデル / ※ CPU i7-11700 で測定 AVX2を使用することで6~約7倍の高速化を実現 3.7倍 6.2倍 4倍 6.9倍
7.
SIMD の基礎 一命令で複数のデータを処理可能 (
MMX 16bit 加算命令 PADDW の例 ) 0x0104 0x0203 0x0302 0x0401 0x0100 0x0200 0x0300 0x0400 0x0004 0x0003 0x0002 0x0001 = + 出力レジスタ (実行後) 出力レジスタ (実行前) 入力レジスタ
8.
SIMD の利点 1. 少ないクロックでより多くのデータを処理可能 ・AVX2
命令を使うと 32bit 整数加算を 1 clock で 24 個処理可能 2. 入力データに依存した分岐を潰せる(後述) ・実行時の分岐予測ミスを減らせる 3. プログラムから扱えるレジスタが増える ・x86 CPU は汎用レジスタが 16 個と少ない ・SIMD レジスタを活用すると中間データを置けるレジスタが倍に増える
9.
拡張命令 レジスタ幅 特徴 MMX
64 bit 整数命令のみ SSE 128 bit 単精度浮動小数命令メイン SSE2 〃 倍精度浮動小数命令と整数命令を追加 SSSE3 ~ SSE4.2 〃 命令の追加・拡張 AVX 256 bit 浮動小数命令のみ AVX2 〃 整数命令を追加 / 同じタイミングで FMA 命令も追加 AVX512 512 bit 第12世代インテル Core CPU の Efficiency コアが非対応 x86 SIMD 命令の歴史
10.
拡張命令 レジスタ幅 特徴 MMX
64 bit 整数命令のみ SSE 128 bit 単精度浮動小数命令メイン SSE2 〃 倍精度浮動小数命令と整数命令を追加 SSSE3 ~ SSE4.2 〃 命令の追加・拡張 AVX 256 bit 浮動小数命令のみ AVX2 〃 整数命令を追加 / 同じタイミングで FMA 命令も追加 AVX512 512 bit 第12世代インテル Core CPU の Efficiency コアが非対応 (第12世代でも使えないものがある) x86 SIMD 命令の歴史 64bit CPU なら利用可能 Haswell (2013年発売) 以降の Core CPU なら利用可能
11.
SIMD 命令を利用する方法 ● intrinsic
を使って C/C++ コードから直接利用 特別なコンパイラは不要 Visual C/C++ Compiler や GCC, LLVM で利用可能 VC2019 以降の場合、通常は intrinsic で十分な性能が出る ● アセンブリで関数を作ってリンク intrinsic でコンパイラが生成する命令列が遅い場合の最終手段
12.
Intrinsic コードサンプル xorps xmm0,
xmm0 movups xmm1 [esi] cmpps xmm0, xmm1, 0x1 andps xmm0, xmm1 movups [edi], xmm0 // 0 で埋めたレジスタを作る __m128 zero = _mm_setzero_ps(); // 入力をレジスタに読み込む __m128 val = _mm_loadu_ps(src); // 0 が入力よりも小さければ bit を立てる __m128 mask = _mm_cmplt_ps(zero, val); // mask と入力でビット演算で and を取る val = _mm_and_ps(val, mask); // 結果を dst に書き出す _mm_storeu_ps(dst, val); アセンブリ Intrinsics
13.
同等コードの pure C/C++
バージョン void relu_4element(float *dst, const float *src) { for (int i=0; i<4; ++i) { // 入力が負なら 0 に潰し、正ならば素通し if (src[i] < 0.0f) { dst[i] = 0.0f; } else { dst[i] = src[i]; } } }
14.
同等コードの pure C/C++
バージョン void relu_4element(float *dst, const float *src) { for (int i=0; i<4; ++i) { // 入力が負なら 0 に潰し、正ならば素通し if (src[i] < 0.0f) { dst[i] = 0.0f; } else { dst[i] = src[i]; } } } 入力データに依存したランダムな分岐処理 CPU は苦手
15.
Intrinsics コードサンプル xorps xmm0,
xmm0 movups xmm1 [esi] cmpps xmm0, xmm1, 0x1 andps xmm0, xmm1 movups [edi], xmm0 // 0 で埋めたレジスタを作る __m128 zero = _mm_setzero_ps(); // 入力をレジスタに読み込む __m128 val = _mm_loadu_ps(src); // 0 が入力よりも小さければ bit を立てる __m128 mask = _mm_cmplt_ps(zero, val); // mask と入力でビット演算で and を取る val = _mm_and_ps(val, mask); // 結果を dst に書き出す _mm_storeu_ps(dst, val); アセンブリ Intrinsics 条件分岐無し
16.
intrinsics 命令の利点 ● レジスタ管理をコンパイラに任せることができる 変数のレジスタ割付や、レジスタが不足する場合のスタック退避をコンパイラ が処理してくれる ●
インライン展開可能 小さな関数の場合、関数呼び出しのオーバーヘッドを削れる ● アセンブリより読みやすい 意味に即した変数名をソースコード内で自由に付けることが可能
17.
Intel Intrinsics Guide
18.
AVX2 対応 CPU
向け高速化テクニック • FMA 命令の利用 • MASKMOV 命令を使った端数処理 • 近似式を用いた高級関数の SIMD 実装
19.
FMA 命令の利用 ● FMA
= Fused Multiply Add ● D = A * B + C を 1 命令で処理 ● AVX2 と同じ Haswell 以降で利用可能 ● 行列積や Neural Network の Convolution で大量に出現 ● FMA を使わないと(使わない場合に比べて) 20~10% 性能低下
20.
MASKMOV 命令を使った端数処理 ● SIMD
レジスタ幅で割り切れない入力の場合に、端数部分で活用 ● AVX 命令から追加 ● MASKMOV の無い CPU の場合 SIMD レジスタの load/store に中間バッファが必要 ● MASKMOV がある CPU の場合 MASKMOVで直接 SIMD レジスタに load/store 可能
21.
MASKMOV 命令が有効な場合 データ全体 SIMD レジスタ
22.
MASKMOV 命令が有効な場合 データ全体 SIMD レジスタ 読み書きOK
23.
MASKMOV 命令が有効な場合 データ全体 SIMD レジスタ 読み書きOK
24.
MASKMOV 命令が有効な場合 データ全体 SIMD レジスタ 対処せずに読み書きすると、不正アクセス例外
25.
MASKMOV サンプル inline __m256i
select_mask(int count) { assert((0 <= count) || (count <= 8)); auto m0 = _mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0); auto ulim = _mm256_broadcastd_epi32( _mm_cvtsi32_si128(count) ); return _mm256_cmpgt_epi32(ulim, m0); } void func( float *buf, int size ) { int size8 = (size / 8) * 8; for (int i=0; i<size8; i+=8) { // 本体部分 auto val = _mm256_loadu_ps( buf+i ); // val に対する何らかの SIMD 処理をここに記述 _mm256_storeu_ps( buf+i, val ); } if (size8 < size ) { // 端数処理 auto mask = select_mask(size - size8); auto val = _mm256_maskload_ps(buf+size8, mask); // val に対する何らかの SIMD 処理をここに記述 _mm256_maskstore_ps(buf+size8, mask, val); } }
26.
近似式を使った高級関数の SIMD 実装 //
log(x) = log((2^n) * z) = n*log(2) + log(z) // log(z) ≒ 2 * (w + (w^3)/3 + (w^5)/5 + ..) : w = (z-1)/(z+1) log2 = 0.6931471805599453f; n = pick_exponent(x); // IEEE754 の指数部を取り出す z = pick_fractional(x); // IEEE754 の指数部を 0 にする w = (z-1.0f) / (z+1.0f); ww = w*w; r = (1.0f/7.0f) + (1.0f/9.0f)*ww; r = (1.0f/5.0f) + r*ww; r = (1.0f/3.0f) + r*ww; r = (1.0f + r*ww); r = r*w; // w + (w^3)/3 + (w^5)/5 + (w^7)/7 + (w^9)/9 return (n*log2 + r*2); log() の分岐不要な近似式疑似コード。 exp() や erf() も同様の近似式実装が可能。
27.
まとめ AIは計算グラフによる膨大な数値計算を行う IntelのAVX2を使用することで各種のAIモデルを高速推論可能 ailia SDKはIntelのCPUに最適化しており、産業用PCでもAIを利用可能です その他、演算高速化・チューニングなどの課題もお気軽にご相談下さい
28.
ご清聴有り難うございました ax Inc. https://axinc.jp/ contact@axinc.jp
29.
リンク ax Inc. https://axinc.jp/ ax
Inc. BLOG http://medium.com/axinc ailia SDK https://ailia.jp/ ailia MODELS https://github.com/axinc-ai/ailia-models
Download