Movatterモバイル変換


[0]ホーム

URL:


Ryosuke Okuta, profile picture
Uploaded byRyosuke Okuta
120,958 views

CuPy解説

CuPyの簡単な解説を行います。NumPyと比較してCuPyによりどのくらい早くなるかや、利用上の注意点(メモリプール)について説明します。ElementwiseKenrnel, ReductionKernelの使い方も解説します。CuPyの実装のすごーくざっくーりした全体概要にも触れます。

Downloaded 164 times
CuPy解説2015/12/19 Chainer Meetup #1@スマートニュース(株)Preferred Networks奥田 遼介
自己紹介奥田 遼介 -2014東北大学 修士 文字列処理など 2014 (株)プリファードインフラストラクチャー 2014- (株)プリファードネットワークス 映像解析系、製造業系にかかわる研究開発 ChainerやCuPyの開発2
何を話すか? CuPyの簡単な解説 Cupyでどのくらい早くなるか? 利用上の注意点 ElementwiseKenrnel, ReductionKernelの使い方解説 CuPyの実装のすごーくざっくーりした全体概要3
CuPyとは何か? CUDA上で計算を行うNumPyサブセットのライブラリ 関数・メソッドのサブセットを実装 Chainer v1.5.0では 約174個の関数が実装済み 行列積などはcuBLASを利用(高速) 配列のスライス、転置、reshape 等が自由にできる カスタムカーネルの記述も可能 elementwise, reduction とにかく簡単にGPUが使える事を追求 Python上で簡単に多次元配列といえばNumPy PC上で簡単にGPUといえばCUDA CUDA +NumPy =CuPy4
CuPy の使い方は? numpy の代わりに cupy を使う(だいたい動く) CPU/GPU の両方で動く関数の書き方 chainer.cuda.get_array_module() を使うと、引数にcupy.ndarray があるかないかで numpy / cupy のどちらかを返してくれます 例えば下は NumPy と CuPy の両方で動く logsumexp の実装例 (より省メモリな実装を考えてみてください)def logsumexp(x, axis=None):xp = cuda.get_array_module(x)x_max = x.max(axis=axis)return x_max + xp.log(xp.exp(x – x_max).sum(axis=axis))5
CuPyってどのくらい早くなるの? 状況によりけりですが、最大数十倍程度速くなりますdef test(xp):a = xp.arange(1000000).reshape(1000, -1)return a.T * 2test(numpy)t1 = datetime.datetime.now()for i in range(1000):test(numpy)t2 = datetime.datetime.now()print(t2 -t1)test(cupy)t1 = datetime.datetime.now()for i in range(1000):test(cupy)t2 = datetime.datetime.now()print(t2 -t1)時間[ms] 倍率NumPy2929 1CuPy 585 56
5倍しかなってない!もっと早くならないの? なります メモリープールを有効にしましょう cupy.cuda.set_allocator(cupy.cuda.MemoryPool().malloc) 面倒であれば「import chainer」でもOK なぜ早くなるか? CUDAではmalloc, freeの実行時にCPUとGPUが同期する CuPyでは一度mallocした領域を使いまわすことで同期を回避cupy.cuda.set_allocator(cupy.cuda.MemoryPool().malloc)test(cupy)t1 = datetime.datetime.now()for i in range(cnt):test(cupy)t2 = datetime.datetime.now()print(t2 -t1)時間[ms] 倍率NumPy 2929 1CuPy 585 5CuPyメモリプール123 247
Chainer(CuPy)が遅い・・・・? v1.5からものすごく速くなりました! v1.4まではCuPyのコードがPythonだったので遅かった なので、Cythonにしました 例えば、Chainerから見るてどのくらい早くなったか?速度 mnistptbv1.4.1 1.0 1.0v1.2 (pyCUDAの頃)2.3 1.6v1.5 (cython) 2.6 1.2※※ GradientClippingが行われるようになってちょっと計算量が増えています8
おわり(その1) ここより下のスライドはよりCuPyを活用したい人のための情報です Elementwise,Reductionを作りたい人以外には不要な情報です。9
Elementwiseな操作をしたい時は? 要素ごとの2乗誤差をとる関数を定義 使い方 ブロードキャストや型チェックは全自動squared_diff = cupy.ElementwiseKernel(‘float32 x, float32 y’, #入力‘float32 z’, #出力‘z = (x - y) * (x - y)’, #計算‘squared_diff’) #名前squared_diff(cupy.arange(10), 10))10
型をジェネリックに扱いたい時は? 1文字の型名はプレースホルダーになるsquared_diff = cupy.ElementwiseKernel(‘T x, T y’, //入力‘T z’, //出力‘z = (x - y) * (x - y)’, //計算‘squared_diff’) //名前11
配列に自由にアクセスしたい時は? 例えば、bincountがしたいときは? 「raw」をつけると配列の添え字アクセスができるfor x in arr_x:bin[x] += 1cupy.ElementwiseKernel('S x','raw U bin','atomicAdd(&bin[x], 1)','bincount_kernel')12
Reduceしたい時は? 例えばL2距離 使い方 「axis」や「keepdims」などのオプションも使えますl2norm_kernel = cupy.ReductionKernel('T x', # 入力'T y', # 出力'x * x', # 前処理'a + b’, # リデュース'y = sqrt(a)', # 後処理'0', # 初期値'l2norm') # 名前x = cupy.arange(10, dtype='f').reshape(2, 5)L2norm_kernel(x, axis=1, keepdims=True)13
おわり(その2) ここより下のスライドはよりCuPyを作りたい人のための情報です NumPyのかわりにCuPyを使いたいだけの人には完全に不要な情報です14
CuPyの実装が知りたい時は? コードを読んでください 今回はとてもざっくりと全体の概要だけ説明します15
CuPyの全体構造は? 大まかに3層構造CUDA(cuBLAS, cuRNAD, cuDNN)ndarrayufunc, elementwise,reductionCUDA Python wrapper cupy.cudacupy.core関数群(演算、テンソル操作) cupy16
CUDA Python wrapperとは? 薄いラッパー driver.pyx, runtime.pyx, cublas.pyx, curand.pyx, cudnn.pyx C関数をPython関数にする cupy_cuda.h, cupy_cudnn.h CUDAが無い環境でCuPyをインストールするためのヘッダ 少し厚めのラッパー memory.pyx GPUのポインタをくるむ function.pyx CUDAのkernelとmoduleをくるむ compiler.pyxcuファイルのコンパイルを支援 stream.pyx streamとeventをくるむ17
ndarray の実体ってどうなっているの? Cython側の実装:cupy/core/core.pyx CUDA側の実装:cupy/core/carray.cuh メンバとしては以下のようなものを持っている 詳しく説明しませんtemplate <typename T, int ndim>class CArray {private:T* data_;int size_;int shape_[ndim];int strides_[ndim];18
cupy.add(x, y)を実行したら何が起こるのか? とても複雑なことが起きます ufunc の__call__が呼び出される 引数のオプションを解決(args, kwdargs) 引数の個数チェック 引数のdeviceをチェック 引数の型を正規化 ブロードキャストを実行 add をどの型の組み合わせで実行するかを解決 戻り値の割り当て実行 計算が高速に実行できるように引数を最適化 CUDAのカーネルコードを生成(キャッシュ付) CUDAのカーネル呼び出しのための引数を構築 カーネル呼び出しを実行19
CuPyの機能が足りないと思った時は? もう一度よく考える NumPy/CuPyでは別の方法で同じことができる場合も多いです 複数の関数とIndexingの組み合わせで結構どうにかなります ぜひPRを! NumPyの機能をCuPyに移植したPRは基本マージされます 効率は特に考えなくて良いので、まずは実装してみてください20
おわり(まとめ) ぜひCuPyを活用してください Preferred Networksでは人材採用に力を入れています フルタイム、アルバイト、インターンなどに興味のある方はホームページからコンタクトお願いします https://www.preferred-networks.jp/job_ja21

Recommended

PDF
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
PPTX
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
PPTX
モデルアーキテクチャ観点からの高速化2019
PDF
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
PDF
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
PDF
Layer Normalization@NIPS+読み会・関西
PDF
モデルアーキテクチャ観点からのDeep Neural Network高速化
PPTX
[DL輪読会]相互情報量最大化による表現学習
PPTX
DockerコンテナでGitを使う
PDF
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
 
PPTX
A3C解説
PDF
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
PDF
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
PPTX
PyTorchLightning ベース Hydra+MLFlow+Optuna による機械学習開発環境の構築
PDF
Transformerを多層にする際の勾配消失問題と解決法について
PPTX
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
PDF
最適輸送の解き方
PDF
【メタサーベイ】基盤モデル / Foundation Models
PPTX
近年のHierarchical Vision Transformer
PDF
プログラムを高速化する話
PDF
[DL輪読会]Control as Inferenceと発展
PDF
Optimizer入門&最新動向
PPTX
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
PDF
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
 
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PPTX
勾配降下法の 最適化アルゴリズム
 
PPTX
深層学習の数理
PDF
[DL輪読会]ICLR2020の分布外検知速報
PDF
Chainer meetup lt
PDF
Introduction to DEEPstation the GUI Deep learning environment for chainer

More Related Content

PDF
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
PPTX
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
PPTX
モデルアーキテクチャ観点からの高速化2019
PDF
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
PDF
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
PDF
Layer Normalization@NIPS+読み会・関西
PDF
モデルアーキテクチャ観点からのDeep Neural Network高速化
PPTX
[DL輪読会]相互情報量最大化による表現学習
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[DL輪読会]Set Transformer: A Framework for Attention-based Permutation-Invariant...
モデルアーキテクチャ観点からの高速化2019
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
Layer Normalization@NIPS+読み会・関西
モデルアーキテクチャ観点からのDeep Neural Network高速化
[DL輪読会]相互情報量最大化による表現学習

What's hot

PPTX
DockerコンテナでGitを使う
PDF
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
 
PPTX
A3C解説
PDF
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
PDF
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
PPTX
PyTorchLightning ベース Hydra+MLFlow+Optuna による機械学習開発環境の構築
PDF
Transformerを多層にする際の勾配消失問題と解決法について
PPTX
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
PDF
最適輸送の解き方
PDF
【メタサーベイ】基盤モデル / Foundation Models
PPTX
近年のHierarchical Vision Transformer
PDF
プログラムを高速化する話
PDF
[DL輪読会]Control as Inferenceと発展
PDF
Optimizer入門&最新動向
PPTX
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
PDF
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
 
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PPTX
勾配降下法の 最適化アルゴリズム
 
PPTX
深層学習の数理
PDF
[DL輪読会]ICLR2020の分布外検知速報
DockerコンテナでGitを使う
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
 
A3C解説
[DL輪読会]Decision Transformer: Reinforcement Learning via Sequence Modeling
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
PyTorchLightning ベース Hydra+MLFlow+Optuna による機械学習開発環境の構築
Transformerを多層にする際の勾配消失問題と解決法について
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
最適輸送の解き方
【メタサーベイ】基盤モデル / Foundation Models
近年のHierarchical Vision Transformer
プログラムを高速化する話
[DL輪読会]Control as Inferenceと発展
Optimizer入門&最新動向
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
勾配降下法の 最適化アルゴリズム
 
深層学習の数理
[DL輪読会]ICLR2020の分布外検知速報

Viewers also liked

PDF
Chainer meetup lt
PDF
Introduction to DEEPstation the GUI Deep learning environment for chainer
PPTX
ディープラーニングにおける学習の高速化の重要性とその手法
PDF
Lighting talk chainer hands on
PDF
Chainer Contribution Guide
PDF
ボケるRNNを学習したい (Chainer meetup 01)
PDF
Chainer入門と最近の機能
PDF
Chainer Development Plan 2015/12
PPTX
Capitalicoでのchainer 1.1 → 1.5 バージョンアップ事例
PDF
深層学習ライブラリのプログラミングモデル
PDF
Chainer, Cupy入門
PPTX
Deep parking
PDF
LT@Chainer Meetup
PDF
Towards Chainer v1.5
PDF
Chainer meetup20151014
PDF
A Chainer MeetUp Talk
PPTX
Chainer Meetup LT (Alpaca)
PPTX
Chainer meetup
 
PDF
Chainer Update v1.8.0 -> v1.10.0+
PPTX
Chainerを使って細胞を数えてみた
Chainer meetup lt
Introduction to DEEPstation the GUI Deep learning environment for chainer
ディープラーニングにおける学習の高速化の重要性とその手法
Lighting talk chainer hands on
Chainer Contribution Guide
ボケるRNNを学習したい (Chainer meetup 01)
Chainer入門と最近の機能
Chainer Development Plan 2015/12
Capitalicoでのchainer 1.1 → 1.5 バージョンアップ事例
深層学習ライブラリのプログラミングモデル
Chainer, Cupy入門
Deep parking
LT@Chainer Meetup
Towards Chainer v1.5
Chainer meetup20151014
A Chainer MeetUp Talk
Chainer Meetup LT (Alpaca)
Chainer meetup
 
Chainer Update v1.8.0 -> v1.10.0+
Chainerを使って細胞を数えてみた

Similar to CuPy解説

PDF
Introduction to Chainer and CuPy
PDF
ディープラーニングフレームワーク とChainerの実装
PDF
Chainerチュートリアル -v1.5向け- ViEW2015
KEY
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PDF
Anaconda & NumbaPro 使ってみた
KEY
PyOpenCLによるGPGPU入門
PDF
Introduction to Chainer (LL Ring Recursive)
PDF
NumPyが物足りない人へのCython入門
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
PDF
Chainer/CuPy v5 and Future (Japanese)
PDF
More modern gpu
PDF
Cython intro prelerease
PDF
Python for Data Anaysis第2回勉強会4,5章
PPTX
NumPyのすゝめ
PDF
Chainer v1.6からv1.7の新機能
PDF
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
PDF
High performance python computing for data science
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PDF
Introduction to NumPy & SciPy
KEY
ひのきのぼうだけで全クリ目指す
Introduction to Chainer and CuPy
ディープラーニングフレームワーク とChainerの実装
Chainerチュートリアル -v1.5向け- ViEW2015
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
Anaconda & NumbaPro 使ってみた
PyOpenCLによるGPGPU入門
Introduction to Chainer (LL Ring Recursive)
NumPyが物足りない人へのCython入門
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Chainer/CuPy v5 and Future (Japanese)
More modern gpu
Cython intro prelerease
Python for Data Anaysis第2回勉強会4,5章
NumPyのすゝめ
Chainer v1.6からv1.7の新機能
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
High performance python computing for data science
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Introduction to NumPy & SciPy
ひのきのぼうだけで全クリ目指す

CuPy解説


[8]ページ先頭

©2009-2025 Movatter.jp