CPUでTensorflowを実行する方法


128

Ubuntu 14.04にGPUバージョンのtensorflowをインストールしました。

tensorflowが使用可能なGPUにアクセスできるGPUサーバーを使用しています。

CPUでテンソルフローを実行したい。

通常、私はenv CUDA_VISIBLE_DEVICES=0GPU noで実行するために使用できます。0。

代わりにどのようにCPUを選択できますか?

私は自分のコードを書き換えることに興味がありません with tf.device("/cpu:0"):

回答:


115

次のようにdevice_countパラメータを適用できますtf.Session

config = tf.ConfigProto(
        device_count = {'GPU': 0}
    )
sess = tf.Session(config=config)

protobuf構成ファイルも参照してください。

tensorflow/core/framework/config.proto


2
誰かが、トレーニングフェーズの後にCPUでニューラルネットを実行することは、GPUで実行するのと同じくらい効率的であると言いました-つまり、トレーニングフレーズだけが本当にGPUを必要とします。これが本当かどうか知っていますか?ありがとう!
Crashalot 2016年

3
それは私にはうまくいきません(tf1.1)。fabrizioMの解決策はそうです。
P-Gn 2017年

3
CUDA_VISIBLE_DEVICESコード内の構成を変更するよりも、環境変数を使用する方が良いのではないですか?
Nandeesh 2017年

3
@Nandeeshそれはあなたのニーズに依存すると思います。これまでのところ、少なくとも53人が環境変数に興味を持ち、35人がデバイスの数をコードで設定することを好みます。最初の利点は単純さであり、もう1つの利点は、Pythonプログラム自体からの(複数の)セッションのより明示的な制御です(ゼロはハードコードする必要はなく、変数にすることができます)。
Ivan Aksamentov-2017年

1
@Crashalotそれはネットワークの性質に依存します。たとえば、RNNはシーケンシャルな性質を持つため、小さいバッチサイズのCPUでより高速になる場合があります。CNNは推論モードでもGPUの恩恵を受けますが、例ごとに1回だけ実行する必要があるため、CPU 多くの実用的な目的に十分な速度で動作する可能性があります。
Davidmh 2017

174

環境変数を次のように設定することもできます

CUDA_VISIBLE_DEVICES=""

ソースコードを変更する必要はありません。


3
誰かが、トレーニングフェーズ後にCPUでニューラルネットを実行することは、GPUで実行するのと同じくらい高性能であると言いました-つまり、トレーニングフレーズだけが本当にGPUを必要とします。これが本当かどうか知っていますか?ありがとう!
Crashalot 2016年

13
@Crashalot:これは真実ではありません。干渉に関するさまざまなベンチマークを探してください。CPUも1桁遅いです。
トーマス

1
@Thomasありがとう。検討すべきベンチマークに関する提案は?おそらく、ワークロードとニューラルネットの性質によっても異なりますね。どうやらグーグル翻訳アプリはいくつかのニューラルネットをスマートフォンで直接実行しています、おそらくCPUではなくGPUで実行していますか?
Crashalot 2016年

@fabrizioM、おもちゃの例がもっと役立つでしょう。
Girishkumar 2017年

7
これは私にはうまくいきませんでした。:/環境変数を設定しますが、テンソルフローは引き続きGPUを使用します。私はconda virtual envを使用していますが、これにより違いが生じますか?
Guilherme de Lazari 2017

102

上記の回答が機能しない場合は、以下を試してください。

os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

4
おかげで、これは他のオプションよりもはるかに優れています。
user1098761

念のため、最初のオプションはもう機能していないようです。
agcala

tf.keras.Sequentialモデルを使用する場合、tf 2.Xでも機能します。
ニコラスM.

22

私にとっては、CUDA_VISIBLE_DEVICES正確に-1機能するように設定するだけです:

作品:

import os
import tensorflow as tf

os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

if tf.test.gpu_device_name():
    print('GPU found')
else:
    print("No GPU found")

# No GPU found

動作しません

import os
import tensorflow as tf

os.environ['CUDA_VISIBLE_DEVICES'] = ''    

if tf.test.gpu_device_name():
    print('GPU found')
else:
    print("No GPU found")

# GPU found

4

以下のコードを使用するだけです。

import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

0

一部のシステムでは、以下を指定する必要があります。

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]=""  # or even "-1"

tensorflowをインポートする前。


0

使用できますtf.config.set_visible_devices。使用するGPUを設定できる1つの機能は次のとおりです。

import tensorflow as tf

def set_gpu(gpu_ids_list):
    gpus = tf.config.list_physical_devices('GPU')
    if gpus:
        try:
            gpus_used = [gpus[i] for i in gpu_ids_list]
            tf.config.set_visible_devices(gpus_used, 'GPU')
            logical_gpus = tf.config.experimental.list_logical_devices('GPU')
            print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPU")
        except RuntimeError as e:
            # Visible devices must be set before GPUs have been initialized
            print(e)

あなたが4 GPUを搭載したシステム上にあると仮定して、2つだけのGPU、とのいずれかを使用したいid = 0として1 id = 2、あなたのコードの最初のコマンドを、すぐにライブラリをインポートした後、次のようになります。

set_gpu([0, 2])

あなたの場合、CPUのみを使用するには、空のリストで関数を呼び出すことができます

set_gpu([])

完全を期すために、ランタイム初期化によってデバイス上のすべてのメモリが割り当てられるのを避けたい場合は、を使用できますtf.config.experimental.set_memory_growth。最後に、GPUメモリを動的に使用する、使用するデバイスを管理する関数は、次のようになります。

import tensorflow as tf

def set_gpu(gpu_ids_list):
    gpus = tf.config.list_physical_devices('GPU')
    if gpus:
        try:
            gpus_used = [gpus[i] for i in gpu_ids_list]
            tf.config.set_visible_devices(gpus_used, 'GPU')
            for gpu in gpus_used:
                tf.config.experimental.set_memory_growth(gpu, True)
            logical_gpus = tf.config.experimental.list_logical_devices('GPU')
            print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPU")
        except RuntimeError as e:
            # Visible devices must be set before GPUs have been initialized
            print(e)

0

インストールレベルで考えられる別の解決策は、CPUのみのバリアントを探すことです。 https //www.tensorflow.org/install/pip#package-location

私の場合、これは今与えます:

pip3 install https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow_cpu-2.2.0-cp38-cp38-win_amd64.whl

正しいバージョンを選択してください。たとえばこの回答で説明されているようなvenvを使用することのボーナスポイント。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.