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 GPUvà 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_GPUvà num_CPUxác định giá trị này. num_coressau đó đặt số lõi CPU có sẵn để sử dụng thông qua intra_op_parallelism_threadsvà inter_op_parallelism_threads.
Các intra_op_parallelism_threadsmệ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_threadsbiế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-gpuvà cuda/ cudnnphả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