2015-12-22 28 views
5

Tôi đang cố hạn chế số lượng lõi mà phiên tf sử dụng nhưng nó không hoạt động. Đây là cách tôi khởi tạo phiên: hệ thốngGiới hạn số lượng lõi được sử dụng

sess = tf.Session(config=tf.ConfigProto(inter_op_parallelism_threads=1, 
             intra_op_parallelism_threads=1, 
             use_per_session_threads=True)) 

có 12 lõi/24 bài, và tôi có thể thấy rằng 40-60% trong số họ đang được sử dụng tại bất kỳ điểm nào trong thời gian. Hệ thống này cũng có 8 GPU, nhưng tôi xây dựng toàn bộ đồ thị với tf.device('/cpu:0').

CẬP NHẬT: Để làm rõ, bản thân đồ thị là một LSTM-RNN đơn giản, mà rất gần với các ví dụ trong mã nguồn tf. Cho đầy đủ ở đây là toàn bộ đồ thị:

node_input = tf.placeholder(tf.float32, [n_steps, batch_size, input_size], name = 'input') 
list_input = [tf.reshape(i, (batch_size, input_size)) for i in tf.split(0, n_steps, node_input)] 
node_target = tf.placeholder(tf.float32, [n_steps, batch_size, output_size], name = 'target') 
node_target_flattened = tf.reshape(tf.transpose(node_target, perm = [1, 0, 2]), [-1, output_size]) 
node_max_length = tf.placeholder(tf.int32, name = 'batch_max_length') 
node_cell_initializer = tf.random_uniform_initializer(-0.1, 0.1) 
node_cell = LSTMCell(state_size, input_size, initializer = node_cell_initializer) 
node_initial_state = node_cell.zero_state(batch_size, tf.float32) 
nodes_output, nodes_state = rnn(node_cell, 
           list_input, 
           initial_state = node_initial_state, 
           sequence_length = node_max_length) 
node_output_flattened = tf.reshape(tf.concat(1, nodes_output), [-1, state_size]) 
node_softmax_w = tf.Variable(tf.random_uniform([state_size, output_size]), name = 'softmax_w') 
node_softmax_b = tf.Variable(tf.zeros([output_size]), name = 'softmax_b') 
node_logit = tf.matmul(node_output_flattened, node_softmax_w) + node_softmax_b 
node_cross_entropy = tf.nn.softmax_cross_entropy_with_logits(node_logit, node_target_flattened, name = 'cross_entropy') 
node_loss = tf.reduce_mean(node_cross_entropy, name = 'loss') 
node_optimizer = tf.train.AdamOptimizer().minimize(node_loss) 
node_op_initializer = tf.initialize_all_variables() 

Một điều quan trọng cần lưu ý là nếu lần đầu tiên tôi gọi tf.Session, tôi vượt qua trong các thông số phù hợp, sau đó phiên không chỉ chạy trên một lõi duy nhất. Vấn đề là trong các lần chạy tiếp theo, tôi không thể thay đổi hành vi, mặc dù tôi sử dụng use_per_session_threads được cho là cụ thể cho phép cài đặt theo phiên cụ thể. I E. ngay cả sau khi tôi đóng phiên sử dụng sess.close() và bắt đầu phiên mới với tùy chọn mới, hành vi ban đầu vẫn không thay đổi trừ khi tôi khởi động lại hạt nhân python (rất tốn kém vì mất gần một giờ để tải dữ liệu của tôi).

+0

Bạn có đang sử dụng nhiều phiên song song không? Bạn đang làm gì trong đồ thị của mình? Tôi đã làm một bài kiểm tra nhanh với một số ops đọc từ hàng đợi song song và làm vòng, và thiết lập những lá cờ có tác dụng hạn chế đến 1 lõi –

+0

Tôi cập nhật các mục với đồ thị và một số ý kiến ​​thêm. Tôi chỉ sử dụng một phiên tại một thời điểm. –

+0

bạn đang sử dụng phiên với 'với tf.Session (..) là sess:'? – fabrizioM

Trả lời

0

TensorFlow thực hiện tối ưu hóa khi lần đầu tiên DirectSession được tạo ra, nó sẽ tạo các nhóm luồng tĩnh mà sau đó sẽ được sử dụng lại. Nếu bạn muốn thay đổi điều này, hãy chỉ định nhiều nhóm luồng khác nhau trong cờ session_inter_op_thread_pool và chỉ định cờ nào bạn muốn sử dụng.

0

use_per_session_threads sẽ chỉ ảnh hưởng đến inter_op_parallelism_threads nhưng không ảnh hưởng đến intra_op_parallelism_threads. Các intra_op_parallelism_threads sẽ được sử dụng cho các hồ bơi chủ đề Eigen (xem here) mà luôn luôn là toàn cầu, do đó các phiên tiếp theo sẽ không ảnh hưởng đến điều này nữa. Lưu ý rằng có các chức năng TF khác cũng có thể kích hoạt việc khởi tạo hồ bơi thread Eigen, do đó nó có thể xảy ra rằng nó đã được khởi tạo trước khi bạn tạo tf.Session đầu tiên. Một ví dụ là tensorflow.python.client.device_lib.list_local_devices().

Tôi giải quyết vấn đề này theo cách rất sớm trong tập lệnh Python, tôi tạo một phiên giả với các giá trị thích hợp.

Các vấn đề liên quan