source

텐서플로우 백엔드를 가진 케라스가 CPU나 GPU를 마음대로 사용하도록 강요할 수 있습니까?

ittop 2023. 9. 9. 10:14
반응형

텐서플로우 백엔드를 가진 케라스가 CPU나 GPU를 마음대로 사용하도록 강요할 수 있습니까?

Tensorflow 백엔드와 CUDA가 설치된 Keras가 있습니다. 가끔 Keras에게 CPU를 사용하도록 요구하고 싶습니다. 가상 환경에 별도의 CPU 전용 Tensorflow를 설치하지 않아도 가능합니까?만약 그렇다면, 어떻게?백엔드가 테아노인 경우에는 플래그를 설정할 수 있었지만, 케라스를 통해 접근할 수 있는 텐서플로우 플래그에 대해서는 들어본 적이 없습니다.

Keras에게 CPU를 강제로 사용하도록 하려면

1번길

import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"   # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""

Keras / Tensorflow를 가져오기 전에.

2번길

스크립트 실행:

$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py

참고 항목

  1. https://github.com/keras-team/keras/issues/152
  2. https://github.com/fchollet/keras/issues/4613

이는 keras를 가져오기 전에 사용할 수 있었습니다(win10).

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

이를 위한 다소 분리 가능한 방법은

import tensorflow as tf
from keras import backend as K

num_cores = 4

if GPU:
    num_GPU = 1
    num_CPU = 1
if CPU:
    num_CPU = 1
    num_GPU = 0

config = tf.ConfigProto(intra_op_parallelism_threads=num_cores,
                        inter_op_parallelism_threads=num_cores, 
                        allow_soft_placement=True,
                        device_count = {'CPU' : num_CPU,
                                        'GPU' : num_GPU}
                       )

session = tf.Session(config=config)
K.set_session(session)

자, 여기에.booleans GPU그리고.CPU, Tensorflow 세션이 액세스할 수 있는 GPU 및 CPU의 수를 엄격하게 정의하여 GPU 또는 CPU로 코드를 실행할지 여부를 나타냅니다.변수들은num_GPU그리고.num_CPU이 값을 정의합니다.num_cores다음을 통해 사용할 수 있는 CPU 코어의 수를 설정합니다.intra_op_parallelism_threads그리고.inter_op_parallelism_threads.

intra_op_parallelism_threadsvariable은 계산 그래프의 단일 노드에서 병렬 연산이 사용할 수 있는 스레드 수를 나타냅니다(intra).그 동안에inter_ops_parallelism_threadsvariable은 계산 그래프(inter)의 노드에 걸쳐 병렬 연산을 위해 액세스할 수 있는 스레드 수를 정의합니다.

allow_soft_placement는 다음 기준 중 하나에 해당하는 경우 CPU에서 작업을 실행할 수 있도록 허용합니다.

  1. 작업을 위한 GPU 구현이 없습니다.

  2. 알려진 또는 등록된 GPU 장치가 없습니다.

  3. CPU의 다른 입력과 함께 위치를 조정할 필요가 있습니다.

이 모든 것은 다른 작업 이전에 내 클래스의 생성자에서 실행되며, 내가 사용하는 어떤 모델이나 다른 코드와도 완전히 분리할 수 있습니다.

참고: 다음이 필요합니다.tensorflow-gpu그리고.cuda/cudnnGPU를 사용할 수 있는 옵션이 주어지기 때문에 설치됩니다.

참조:

그냥 10개의 소트 플로우를 수입해서 케라를 사용하면 됩니다, 그만큼 쉽습니다.

import tensorflow as tf
# your code here
with tf.device('/gpu:0'):
    model.fit(X, y, epochs=20, batch_size=128, callbacks=callbacks_list)

케라스 튜토리얼에 따라, 당신은 단순히 같은 것을 사용할 수 있습니다.tf.device일반 텐서 흐름과 같은 범위:

with tf.device('/gpu:0'):
    x = tf.placeholder(tf.float32, shape=(None, 20, 64))
    y = LSTM(32)(x)  # all ops in the LSTM layer will live on GPU:0

with tf.device('/cpu:0'):
    x = tf.placeholder(tf.float32, shape=(None, 20, 64))
    y = LSTM(32)(x)  # all ops in the LSTM layer will live on CPU:0

시간을 좀 들여서 알아냈어요.토마의 대답은 완전하지 않습니다.을 ㅇㅇ라고 .test.py하여 이자유롭게 . gpu0 하여 을 하고 를 gpu 하지 를 를 를 하지 를

당신은 글을 써야합니다.CUDA_VISIBLE_DEVICES=0 python test.py

DEVICES것은 아니다.DEVICE

PyCharm에서 작업하는 사람과 CPU를 강제로 사용하는 경우 실행/디버그 구성의 환경 변수 아래에 다음 행을 추가할 수 있습니다.

<OTHER_ENVIRONMENT_VARIABLES>;CUDA_VISIBLE_DEVICES=-1

2 설정하려면 (tensor flow 2.9)를 사용합니다.tf.config.set_visible_devices([], 'GPU')는 이 보이는 입니다. 빈 목록 인수는 이 실행에 대해 보이는 GPU가 없을 것이라는 것입니다.

Keras가 tf 구성을 초기화하기 전에 코드 초기에 이 작업을 수행합니다.

문서 참조 https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/config/set_visible_devices

언급URL : https://stackoverflow.com/questions/40690598/can-keras-with-tensorflow-backend-be-forced-to-use-cpu-or-gpu-at-will

반응형