Cuda Utilities

CuPyでのデバイス、コンテキスト、メモリマネージメント。

 

ChainerはCuPyをGPU計算のスピードを利用するために(非常に薄いラッパーとともに)使用している。 以下のモジュールとクラスは、CuPyで定義され、Chainerへは便宜上、chainer.cudaモジュールでインポートされる。(Chainerのソースコードを読む際は、下記テーブル参照)

 

imported name original name
chainer.cuda.cupy cupy
chainer.cuda.ndarray cupy.ndarray
chainer.cuda.cupy.cuda cupy.cuda
chainer.cuda.Device cupy.cuda.Device
chainer.cuda.Event cupy.cuda.Event
chainer.cuda.Stream cupy.cuda.Stream

 

ChainerはCuPyのデフォルトのアロケータを、メモリ確保プールの実装によって置き換えています。 このため、forward/backward演算時の複数のデバイスメモリや、連続する要素ごとの操作のための一時的な配列を再利用することが可能になっています。

Devices 

chainer.cuda.get_device デバイスオブジェクト、数値ID、配列オブジェクトからデバイスを取得する関数
chainer.cuda.get_device_from_id 数値IDによりデバイスを取得する関数
chainer.cuda.get_device_from_array CuPy配列、もしくはCuPy配列のリストからデバイスを取得する関数

 

CuPy array allocation and copy

chainer.cuda.copy cupy.ndarray オブジェクトをデフォルトストリームを使用してコピーする関数
chainer.cuda.to_cpu ホストCPUへ与えられtGPU配列をコピーする関数
chainer.cuda.to_gpu 与えられたCPU配列を指定したデバイスへコピーする関数

 

Kernel definition utilities

chainer.cuda.memoize 各属性とデバイスの結果を記憶するFunctionを作成する関数
chainer.cuda.clear_memo memoize()によってデコレートされた全ての関数のメモ化された結果をクリアする関数
chainer.cuda.elementwise elementwiseのカーネル関数を生成する関数
chainer.cuda.reduce グローバル・リダクション・カーネル関数を生成する関数

 

CPU/GPU generic code support

chainer.cuda.get_array_module numpyまたは cupyから適切なモジュールを取得する関数

 

cuDNN support

chainer.cuda.set_max_workspace_size cuDNNのワークスペースサイズを設定する関数
chainer.cuda.get_max_workspace_size cuDNNのワークスペースサイズを取得する関数