Một cách khá tách biệt để làm điều này là sử dụng
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)
Ở đây, với booleans
GPU
và CPU
, chúng tôi cho biết liệu chúng tôi muốn chạy mã của mình với GPU hay CPU bằng cách xác định chặt chẽ số lượng GPU và CPU mà phiên Tensorflow được phép truy cập. Các biến num_GPU
và num_CPU
xác định giá trị này. num_cores
sau đó đặt số lõi CPU có sẵn để sử dụng thông qua intra_op_parallelism_threads
và inter_op_parallelism_threads
.
Các intra_op_parallelism_threads
mệnh lệnh biến số lượng đề một hoạt động song song trong một nút duy nhất trong đồ thị tính toán được phép sử dụng (nội). Trong khi inter_ops_parallelism_threads
biến xác định số luồng có thể truy cập cho các hoạt động song song trên các nút của đồ thị tính toán (inter).
allow_soft_placement
cho phép các hoạt động được chạy trên CPU nếu đáp ứng bất kỳ tiêu chí nào sau đây:
không có triển khai GPU cho hoạt động
không có thiết bị GPU nào được biết đến hoặc đã đăng ký
cần phải đồng định vị trí với các đầu vào khác từ CPU
Tất cả điều này được thực thi trong phương thức khởi tạo của lớp tôi trước bất kỳ hoạt động nào khác và hoàn toàn có thể tách biệt khỏi bất kỳ mô hình hoặc mã nào khác mà tôi sử dụng.
Lưu ý: Điều này yêu cầu tensorflow-gpu
và cuda
/ cudnn
phải được cài đặt vì tùy chọn được cung cấp để sử dụng GPU.
Refs:
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
như trong một câu trả lời bên dưới