GPU基礎性能で最低限抑える数値は?

機械学習特にDeep learningを実行する際にはGPUを利用しますが、
GPUにも様々な種類があり性能もまちまちです。
そこで、GPUのスペックは最低限どのあたりを見ればよいかをNVIDIA RTX 2080Tiを例にまとめました。

GPUアーキテクチャ:Turing
CUDA(Compute Unit)のコア数:4352
Tensorコア数:544
メモリ容量: 11GB
GPUクロック:1.35GHz
メモリクロック:1.75GHz
他には、メモリタイプ、メモリバンド幅など押さえておくべきスペックはあります。

Siggraph Asia 2019情報まとめ

Siggraph Asia 2019まとめと気になる論文

プログラム
sa2019.conference-program.com

ペーパー
kesen.realtimerendering.com

www.youtube.com
www.youtube.com
www.youtube.com

公式Twitter
twitter.com

気になる論文
Deep light
augmentedperception.github.io

www.youtube.com
www.youtube.com
www.itmedia.co.jp

DeepFovea: Using deep learning for foveated reconstruction in AR/VR
ai.facebook.com
github.com

Google Colabの使い方

Google colabを使えばTensorflowでプログラミングするのにローカル環境構築やGPUなどのハードの準備の必要なく
GPU/TPUを使って学習や推論も行うことができます。

Google colabとは

  • Googleのサーバークラウド上で動作するjupyter notebookの実行環境
  • juliayやRのサポートはない。Pythonのみをサポート  

    Google colabの起動

    以下のいずれかの方法がお手軽

  • ブラウザでGoogle colabと検索する
  • Tensorflow公式サイト -> Learn -> For begginers -> Run code nowで mnistがColabで開く

Google colabの制限事項

  • 連続実行は12時間が上限.計算時間が12時間以上かかる際は途中で結果をセーブする必要がある。
  • アイドル状態が90分以上続くと自動停止する

    Tensorflow 2.0を使用する

  • 上記mnistサンプルの最初のセルでTF2.0のインストールを行っているんので参照すること

使用ハードウェアの変更方法

  • defaultではColab上のTFはCPUを使用するが、GPUを使用するように変更する
  • menu tabのランタイム-> ランタイムタイプを変更 -> ハードウェアアクセラレータ
    GPUを選択する

Google Colab Runtimeのスペックの確認方法

  • ファイル -> Python3の新しいノートブックを開く
  • 右上の接続を押してGoogle ColabのVMに接続する
  • OSのバージョン確認: !cat /etc/issue
  • diskの割り当てと容量の確認: !df -h
  • メモリ容量の確認: !free -h
  • CPUの確認: !cat /proc/cpuinfo
  • GPUの確認: runtimeをGPUに変更する。 !ls /proc/driver/nvidia/gpus
    出てきたファイルを見る. !cat /proc/driver/nvidia/gpus/0000:00:04.0/information
  • GPUの詳細情報確認:
    • from tensorflow.python.client import device_lib

    • devece_lib.list_local_devices()

  • CUDAバージョンの確認: !nvcc -V
  • GPUカードのドライバのバージョン確認: !nvidia-smi

TensorFlow2.0への移行メモ

TensorFlow2.0への移行メモ

いままでnativeのKerasと組み合わせて使っていたのですが、2.0からはtf.kerasを使うように変更しました。
また、TensorFlow2.0からはeager executionがdefaultになったようですのでそれにまつわることも含めて自分用のメモを書きます。

eager executionは便利なのですが、速度的にはgraph modeの方が早いので、できれば両対応できる方がいいなと思い調べると、
@tf.functionデコレータをつけるとgraphモード(TF1.x系デフォルト)になり、つけないとEagerモード(TF2.0デフォルト)で実行されることがわかりました。
今、どちらのモードで動いているのかを確認するには、
print(tf.executing_eagerly()) # true or false
で確認できます。
今は、@tf.functionを関数の定義の前につけています。
ただし困ったことに@tf.functionを付けてgraph modeにするとerrorが出てしまいます。
エラーの箇所は、model.fit関数です。
modelはkerasのfunctional APIのlayer modelで作成しているのですが、Sequentialモデルでレイヤーを重ねていても同じ問題は起きると思います。
エラーの理由はどうやら学習データの受け渡しのデータ形式がnumpyのndarrayの形式であることに由来しているようです。
そこでデータをtf.data.Datasetで変換して渡すようにしましたがまだerrorが残ります。
model.fitがgraphモードではうまく動かないのかもしれないです。
そもそもTF2.0でeager executionがデフォルトになったことでKerasとtensorflowのlow levl APIを組み合わせるおすすめの方法はないものかと思い始めました。
すべてKerasで書いて,eager exec modeで動かす限りはTF1.xとコードの書き方は変わらないのですが、速度の問題もあり一部graph modeで動かそうとするとKerasのAPIだけでは対応できないようです。
TF2.0でのコーディングに関しては以下のブログにまとまっています。
qiita.com
qiita.com
https://colab.research.google.com/drive/1UCJt8EYjlzCs1H1d1X0iDGYJsHKwu-NO#scrollTo=FjLI719fPfJi
結局、eager execとgraph modeを両対応したいと思えば、network のlayerはkerasを使い、学習はkerasのfitは使わずにtensorflowの低レイヤーで書くというのがよさそうです。

パターン1) modelの定義も学習もすべてkerasを使用して書く。
従来のkerasを使用した書き方。コードを書くのは簡単だが、eager executionでしか実行できないので、
学習に時間がかかる。
パターン2)modelの定義はkeras.model.layerをそのまま使用。学習はtfで書く。
メリットはデバッグ時は@tf.functionをコメントアウトしてeager execution modeでdefine by runの形で実行して
デバッグしやすくして置き、学習時は@tf.functionを有効にして速度重視でdefine and runのgraph mode で実行する。
パターン2の書き方だと上記の両対応が可能.
モデル定義はKeras APIをそのまま使用しますが、データセットをnumpyからtf.dataを使うように変更。
traing をkerasを使わずに書く時はnumpyのままでは入力できない。
Data Augmentationが複雑になってくる場合もtf.dataの形式の方が都合がよい。
tf.image以下が充実しているので、前処理が簡単にかける。
パターン3)modelの定義をkeras.model.layerを継承した独自のクラスで書く。学習はtfで書く。
このパターンが書きやすさとデバッグのしやすさ、パフォーマンスのバランスが一番よさそうですので今後はTF2.0ではこの書き方に
統一していこうと思います。

tensorflowのTFRecordに関しては以下の記事を参照
www.tdi.co.jp
www.tdi.co.jp

ちなみに、TensorFlow のtf.Tensorと NumPy の ndarray 間の変換は以下を参照
テンソルと演算  |  TensorFlow Core

TF2.0のコードの書き方とPytorchとの比較に関しては以下のブログを参照

www.hellocybernetics.tech

Google colabでPythonを簡単に試してみる

Colabの開き方
1. Google Driveから
2. GitHubから
3. ローカルからアップロード


Google Colabのリソースの確認方法

file メニューから新しいノートブックを開き、
!cat /etc/issue
Ubuntuのバージョンを確認する。

ディスクの利用状況の確認
!df -h
disk free -humnan readable

メインメモリがどのくらいあるかの確認
!free -h

CPUのスペックについて確認
!cat /proc/cpuinfo

GPUのスペックについて確認
!ls /proc/driver/nvidia/gpus
エラーがでたら
run typeをGPUに変更する
!cat /proc/driver/nvidia/0000:00:04.0/information

GPUのメモリー容量を確認
from tensorflow.python.client import device_lib
device_lib.list_local_devices()

cuda バージョン確認
!nvcc -V

GPUカードのドライバの確認
!nvidia-smi

.pb

この拡張子はproto bufferの略で、tensorflowのモデルをテキスト形式で保存したもの