CPU에서 Tensorflow를 실행하는 방법


128

Ubuntu 14.04에 GPU 버전의 tensorflow를 설치했습니다.

tensorflow가 사용 가능한 GPU에 액세스 할 수있는 GPU 서버에 있습니다.

CPU에서 tensorflow를 실행하고 싶습니다.

일반적으로 env CUDA_VISIBLE_DEVICES=0GPU 번호에서 실행할 수 있습니다 . 0.

대신 CPU 중에서 선택하는 방법은 무엇입니까?

내 코드를 다시 작성하는 데 관심이 없습니다. with tf.device("/cpu:0"):

답변:


116

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

3
그것은 나를 위해 작동하지 않습니다 (tf1.1). fabrizioM의 솔루션이 그렇습니다.
P-Gn

3
CUDA_VISIBLE_DEVICES코드에서 구성을 변경하는 대신 환경 변수 를 사용하는 것이 더 낫지 않습니까?
Nandeesh 2015-06-30

3
@Nandeesh 나는 그것이 당신의 필요에 달려 있다고 생각합니다. 지금까지 환경 변수에 대해 더 많이 느끼는 사람은 최소 53 명이고 코드에 장치 수를 설정하는 것을 선호하는 사람은 35 명입니다. 첫 번째의 장점은 단순성이고 다른 하나의 장점은 파이썬 프로그램 자체 내에서 (다중) 세션을보다 명시 적으로 제어한다는 것입니다 (0은 하드 코딩 할 필요가 없으며 변수 일 수 있음).
이반 Aksamentov - 드롭

1
@Crashalot 네트워크의 특성에 따라 다릅니다. 예를 들어, RNN은 순차적 특성으로 인해 작은 배치 크기의 CPU에서 더 빠를 수 있습니다. 추론 모드에서 CNN은 여전히 ​​GPU의 이점을 누릴 수 있지만 예제 당 한 번만 실행하면되므로 CPU 많은 실제 목적에 충분히 빠를 있습니다.
Davidmh

174

환경 변수를 다음과 같이 설정할 수도 있습니다.

CUDA_VISIBLE_DEVICES=""

소스 코드를 수정할 필요가 없습니다.


3
누군가는 훈련 단계 후에 CPU에서 신경망을 실행하는 것이 GPU에서 실행하는 것만 큼 성능이 좋다고 말했습니다. 즉, 훈련 문구에만 실제로 GPU가 필요합니다. 이것이 사실인지 아십니까? 감사!
Crashalot

13
@Crashalot : 이것은 사실이 아닙니다. 간섭에 대한 다양한 벤치 마크를 찾으십시오. CPU도 거기에서 훨씬 느립니다.
Thomas

1
@Thomas 감사합니다. 고려할 벤치 마크에 대한 제안? 아마도 신경망의 작업량과 특성에 따라 다를 수 있습니다. 분명히 Google 번역 앱은 스마트 폰에서 직접 신경망을 실행합니다. 아마도 GPU가 아닌 CPU에서 가능할까요?
Crashalot

@fabrizioM, 장난감 예제가 더 유용 할 것입니다.
Girishkumar 2017-06-08

7
이것은 나를 위해 작동하지 않았습니다. : / 환경 변수를 설정했지만 tensorflow는 여전히 GPU를 사용하고 있습니다. 저는 conda 가상 환경을 사용하고 있습니다. 이것은 차이가 있습니까?
Guilherme de Lazari

102

위의 답변이 작동하지 않으면 다음을 시도하십시오.

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

4
감사합니다. 이것은 다른 옵션보다 훨씬 낫습니다.
user1098761

기록을 위해 첫 번째 옵션은 더 이상 작동하지 않는 것 같습니다.
agcala

tf.keras.Sequential모델을 사용할 때 tf 2.X에서도 작동 합니다.
Nicolas 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를 설정할 수있는 기능 중 하나는 다음과 같습니다.

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가있는 시스템에 있고 두 개의 GPU, 즉를 사용하는 GPU와를 사용하는 GPU 만 사용하려는 경우 라이브러리를 가져온 직후 코드의 첫 번째 명령은 다음 id = 0id = 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.