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).
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 –
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. –
bạn đang sử dụng phiên với 'với tf.Session (..) là sess:'? – fabrizioM