Tensorflow はグラフィック カード GPU を使用してトレーニングの詳細なチュートリアルを行います

グラフィックス カードの情報を表示するための GPU の nvidia-smi コマンドについて詳しく説明します。

cmd: nvidia-smi

GPUのnvidia-smiコマンドを詳しく解説 - プログラマー募集

編集

GPU:このマシンの GPU の番号 (グラフィックス カードが複数ある場合、番号は 0 から始まります) 画像上の GPU の番号は: 0

ファン:ファン速度 (0% ~ 100%)、N/A はファンがないことを意味します

名前: GPU タイプ、写真上の GPU のタイプ: Tesla T4

Temp: GPU の温度 (GPU 温度が高すぎると、GPU の周波数が低下します)

Perf:グラフ上の P0 (最大パフォーマンス) から P12 (最小パフォーマンス) までの GPU のパフォーマンス状態: P0

Persistence-M:永続モードの状態。永続モードは多くのエネルギーを消費しますが、新しい GPU アプリケーションの起動にかかる時間は短くなります。図は次を示しています。オフ

Pwr: 使用量/キャップ:エネルギー消費量の表示、使用量: 使用量、合計キャップはいくらですか

Bus-Id: GPU バス関連のディスプレイ、ドメイン: バス: device.function

Disp.A: Display Active、GPU のディスプレイが初期化されているかどうかを示します。

Memory-Usage:メモリ使用量

Volatile GPU-Util: GPU 使用率

Uncorr. ECC: ECC について、エラーチェックおよび訂正技術を有効にするかどうか、0/無効、1/有効

Compute M:計算モード、0/DEFAULT、1/EXCLUSIVE_PROCESS、2/PROHIBITED

プロセス:ビデオ メモリの使用量、プロセス番号、各プロセスが占有している GPU を表示します。

メモリステータスを数秒ごとに更新します: nvidia-smi -l 秒

GPU のステータスを 2 秒ごとに更新します: nvidia-smi -l 2

Tensorflow グラフィックス カードの使用状況

1. 直接使用する

このメソッドは基本的に、現在のマシン上のすべてのグラフィックス カードの残りのビデオ メモリを占有します。これは、マシン上のすべてのグラフィックス カードの残りのビデオ メモリであることに注意してください。したがって、プログラムに必要なグラフィックス カードは 1 つだけかもしれませんが、プログラムがあまりにも高圧的であるため、他のグラフィックス カードは必要ないか、またはそれほど多くのグラフィックス カードを使用できないが、それらを占有したいだけです。

with tf.compat.v1.Session() as sess:
        # 输入图片为256x256,2个分类
        shape, classes = (224, 224, 3), 20
        # 调用keras的ResNet50模型
        model = keras.applications.resnet50.ResNet50(input_shape = shape, weights=None, classes=classes)
        model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])

        # 训练模型 categorical_crossentropy sparse_categorical_crossentropy
        # training = model.fit(train_x, train_y, epochs=50, batch_size=10)
        model.fit(train_x,train_y,validation_data=(test_x, test_y), epochs=20, batch_size=6,verbose=2)
        # # 把训练好的模型保存到文件
        model.save('resnet_model_dog_n_face.h5')

2. 分配率の利用

この方法と上記の直接使用方法の違いは、ビデオメモリをすべて占有するわけではなく、例えばこのように書くと各ビデオカードの60%を占有することになります。

from tensorflow.compat.v1 import ConfigProto# tf 2.x的写法
config =ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction=0.6
with tf.compat.v1.Session(config=config) as sess:
     model = keras.applications.resnet50.ResNet50(input_shape = shape, weights=None, classes=classes)

3. 動的な適用と使用

このメソッドはビデオ メモリに動的に適用され、メモリにのみ適用され、メモリは解放されません。また、他の人のプログラムが残りのグラフィック カードをすべて占有すると、エラーが報告されます。

上記3つの方法をシーンに応じて選択してください。

最初のタイプはすべてのメモリを占有するため、モデルのサイズがビデオ メモリのサイズを超えない限り、ビデオ メモリの断片化は発生せず、コンピューティング パフォーマンスに影響を与えません。アプリケーションの導入に適した構成と言えるでしょう。

2 番目と 3 番目のタイプは、複数人が 1 つのサーバーを使用するのに適していますが、2 番目のタイプはビデオ メモリの無駄があり、3 番目のタイプは特定のプログラムでビデオ メモリの無駄を回避しますが、プログラムが非常に失敗しやすくなります。クラッシュにつながるメモリ状況を申請します。

config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.compat.v1.InteractiveSession(config=config)
with tf.compat.v1.Session(config=config) as sess:
     model

4 GPUを指定する

複数の GPU を備えたサーバーで tensorflow を実行する場合、Python プログラミングを使用する場合は、GPU を指定できます。コードは次のとおりです。

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2"

完全な例: resnet50 画像分類:

編集

config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.compat.v1.InteractiveSession(config=config)
with tf.compat.v1.Session(config=config) as sess:
        # 输入图片为256x256,2个分类
        shape, classes = (224, 224, 3), 20
        # 调用keras的ResNet50模型
        model = keras.applications.resnet50.ResNet50(input_shape = shape, weights=None, classes=classes)
        model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])

        # 训练模型 categorical_crossentropy sparse_categorical_crossentropy
        # training = model.fit(train_x, train_y, epochs=50, batch_size=10)
        model.fit(train_x,train_y,validation_data=(test_x, test_y), epochs=20, batch_size=6,verbose=2)
        # # 把训练好的模型保存到文件
        model.save('resnet_model_dog_n_face.h5')

おすすめ

転載: blog.csdn.net/qiqi_ai_/article/details/128950971