Досить відокремлений спосіб зробити це - використовувати
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. Змінні num_GPU
і num_CPU
визначають це значення. num_cores
потім встановлює кількість ядер процесора, доступних для використання через intra_op_parallelism_threads
та inter_op_parallelism_threads
.
У intra_op_parallelism_threads
диктує змінне число потоків паралельної роботи в одному вузлі в графі обчислення допускається використання (всередині). Тоді як inter_ops_parallelism_threads
змінна визначає кількість потоків, доступних для паралельних операцій по вузлах обчислювального графіка (inter).
allow_soft_placement
дозволяє виконувати операції над процесором, якщо виконується будь-який з наступних критеріїв:
для операції немає реалізації графічного процесора
немає відомих або зареєстрованих пристроїв графічного процесора
існує необхідність спільного пошуку з іншими входами від центрального процесора
Все це виконується в конструкторі мого класу перед будь-якими іншими операціями і повністю відокремлюється від будь-якої моделі чи іншого коду, який я використовую.
Примітка. Це вимагає tensorflow-gpu
та cuda
/ cudnn
бути встановленим, оскільки надається можливість використовувати GPU.
Посилання:
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
як у відповіді нижче