13

ai đó có thể vui lòng giải thích các điều khoản TensorFlow sauÝ nghĩa của inter_op_parallelism_threads và intra_op_parallelism_threads

  1. inter_op_parallelism_threads

  2. intra_op_parallelism_threads

hay, xin vui lòng, cung cấp liên kết đến các nguồn bên phải của lời giải thích.

Tôi đã tiến hành một vài thử nghiệm bằng cách thay đổi các tham số, nhưng kết quả không nhất quán để đi đến kết luận.

Trả lời

25

Các tùy chọn inter_op_parallelism_threadsintra_op_parallelism_threads được ghi lại trong source of the tf.ConfigProto protocol buffer. Những tùy chọn cấu hình hai hồ chủ đề được sử dụng bởi TensorFlow parallelize thực hiện, như các ý kiến ​​mô tả:

// The execution of an individual op (for some op types) can be 
// parallelized on a pool of intra_op_parallelism_threads. 
// 0 means the system picks an appropriate number. 
int32 intra_op_parallelism_threads = 2; 

// Nodes that perform blocking operations are enqueued on a pool of 
// inter_op_parallelism_threads available in each process. 
// 
// 0 means the system picks an appropriate number. 
// 
// Note that the first Session created in the process sets the 
// number of threads for all future sessions unless use_per_session_threads is 
// true or session_inter_op_thread_pool is configured. 
int32 inter_op_parallelism_threads = 5; 

Có một số hình thức có thể song song khi chạy một đồ thị TensorFlow, và các tùy chọn này cung cấp một số kiểm soát đa lõi CPU xử lý song song:

  • Nếu bạn có một hoạt động có thể được song song nội bộ, chẳng hạn như phép nhân ma trận (tf.matmul()) hoặc giảm (ví dụ tf.reduce_sum()), TensorFlow sẽ thực hiện nó bằng việc lập kế hoạch trong một hồ bơi thread với intra_op_parallelism_threads đề. Tùy chọn cấu hình này do đó kiểm soát tốc độ tối đa song song cho một thao tác đơn lẻ. Lưu ý rằng nếu bạn chạy nhiều hoạt động song song, các hoạt động này sẽ chia sẻ nhóm luồng này.

  • Nếu bạn có nhiều hoạt động độc lập trong đồ thị dưới TensorFlow bạn — vì không có con đường đạo giữa chúng trong dataflow graph — TensorFlow sẽ cố gắng để chạy chúng đồng thời, sử dụng một hồ bơi thread với inter_op_parallelism_threads đề. Nếu các hoạt động đó có thực hiện đa luồng, chúng sẽ (trong hầu hết các trường hợp) chia sẻ cùng một nhóm luồng cho phép song song trong-op.

Cuối cùng, cả hai tùy chọn cấu hình đều có giá trị mặc định là 0, có nghĩa là "hệ thống chọn một số thích hợp". Hiện tại, điều này có nghĩa là mỗi nhóm luồng sẽ có một luồng cho mỗi lõi CPU trong máy của bạn.

+0

Điều này có thể được sử dụng để song song mã của tôi trên nhiều CPU không? Làm cách nào để sử dụng các chức năng này để đạt được khả năng chịu lỗi trong trường hợp một trong các máy không hoạt động trong cụm sao? – itsamineral

+2

Các tùy chọn này kiểm soát lượng song song tối đa mà bạn có thể nhận được khi chạy đồ thị TensorFlow. Tuy nhiên, chúng dựa vào các hoạt động mà bạn chạy có các triển khai song song (như nhiều hạt nhân chuẩn làm) cho tính song song trong-op; và sự sẵn có của các ops độc lập để chạy trong biểu đồ cho tính song song giữa các op. Tuy nhiên, nếu (ví dụ) đồ thị của bạn là một chuỗi tuyến tính của các hoạt động, và các hoạt động đó chỉ thực hiện nối tiếp, thì các tùy chọn này sẽ không thêm tính song song. Các tùy chọn không liên quan đến khả năng chịu lỗi (hoặc thực thi phân tán). – mrry

+1

Có vẻ như hai tùy chọn chỉ hoạt động với CPU chứ không phải GPU? Nếu tôi có toán tử tf.add_n của nhiều phép nhân dựa trên phép nhân song song và chạy trong GPU, thì việc song song được thực hiện theo mặc định và tôi có thể kiểm soát nó như thế nào? – chentingpc