0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コードからGPUまで

Last updated at Posted at 2024-07-11

深層学習ソフトウェアのStack Structure

詳細までは興味ないけど大枠だけ知りたい人」向けに、深層学習を実装しているコードがどのようにGPUと連携しているのかのレイヤー構成をまとめました。

順番は、最適化手法によりますが、基本的にはGPU側から下記のようになっています。

  1. GPU
  2. CUDA
  3. cuDNN
  4. C++ Backend
  5. Deep Learning Framework

image.png

CUDA: Compute Unified Device Architecture

CUDAはNVIDIA社製GPUで汎用の並列計算を行うためのプログラミング環境を提供しているものです。

つまり、GPUと実際にやり取りを行うのがCUDAとなります。

cuDNN: CUDA Deep Neural Network

深層学習モデルの学習はものすごい計算量が求められます。そのため、GPUとうまくやり取りを行い、効率的に計算を進めることが大切になってきます。つまりCUDAをどのように用いるかで計算効率が変わってきます。

そこで便利なのがCuDNNです。CuDNNは、深層学習でよく使われる「畳み込み」「pooling」「activation」「normalization」などのオペレーションを高度に調整して実装したものを提供しています。

まとめると、深層学習を効率よく行うためにいい感じにCUDAを使っているライブラリがCuDNNです。

C++ Backend

ほとんどの深層学習用のフレームワーク( Pytorch, TensorFlow, ONNX, etc) はC++をバックエンドとして使用しています。理由は、C++の処理が早いのもあり、cuDNNが基本C++で実装されているからです。

C++が速い

必然的にCUDAとCUDNNも基本的にC++で実装されている

それを呼ぶためにC++のバックエンドレイヤーを使用

基本的に各オペレーション(「畳み込み」「pooling」)ごとに計算を実行する場合、このバックエンドのレイヤーで直接CuDNNが呼ばれると思われます。もしより計算を最適化したい場合は、TensoRTのC++のAPIを呼んでからCuDNNが呼ばれるケースもあります。

Deep Learning Framework

ここが深層学習ソフトウェアにとっての"Front End"になります。フレームワークとしては、主流はPyTorchやTensorFlowをPythonで実装する形になるかと思います。
Pythonを実行すると、内部的にC++のバックエンドレイヤーを呼んでいる(はず、、?)。

場合によっては、LibTorch(PyTorchのC++FrontEnd)のように、C++をフロントエンドとして使用することもあります。

参考資料


Writed by F.K(20代/入社3年目)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?