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演算時の複数のデバイスメモリや、連続する要素ごとの操作のための一時的な配列を再利用することが可能になっています。
chainer.cuda.get_device | デバイスオブジェクト、数値ID、配列オブジェクトからデバイスを取得する関数 |
chainer.cuda.get_device_from_id | 数値IDによりデバイスを取得する関数 |
chainer.cuda.get_device_from_array | CuPy配列、もしくはCuPy配列のリストからデバイスを取得する関数 |
chainer.cuda.copy | cupy.ndarray オブジェクトをデフォルトストリームを使用してコピーする関数 |
chainer.cuda.to_cpu | ホストCPUへ与えられtGPU配列をコピーする関数 |
chainer.cuda.to_gpu | 与えられたCPU配列を指定したデバイスへコピーする関数 |
chainer.cuda.memoize | 各属性とデバイスの結果を記憶するFunctionを作成する関数 |
chainer.cuda.clear_memo | memoize()によってデコレートされた全ての関数のメモ化された結果をクリアする関数 |
chainer.cuda.elementwise | elementwiseのカーネル関数を生成する関数 |
chainer.cuda.reduce | グローバル・リダクション・カーネル関数を生成する関数 |
chainer.cuda.get_array_module | numpyまたは cupyから適切なモジュールを取得する関数 |
chainer.cuda.set_max_workspace_size | cuDNNのワークスペースサイズを設定する関数 |
chainer.cuda.get_max_workspace_size | cuDNNのワークスペースサイズを取得する関数 |