2016-07-16 23 views
9

Làm thế nào tôi có thể sử dụng đầy đủ mỗi lõi EC2 của tôi?Làm thế nào để làm cho TensorFlow sử dụng nhiều CPU có sẵn

Tôi đang sử dụng phiên bản AW4 của Ubuntu EC2 c4.4xlớn và TensorFlow để tạo mạng lưới thần kinh phức tạp lớn. nproc nói rằng cá thể EC2 của tôi có 16 lõi. Khi tôi chạy mã đào tạo convnet, tiện ích hàng đầu nói rằng tôi chỉ sử dụng CPU 400%. Tôi đã mong đợi nó để sử dụng CPU 1600% vì 16 lõi. Tab giám sát AWS EC2 xác nhận rằng tôi chỉ sử dụng 25% dung lượng CPU của mình. Đây là một mạng lưới khổng lồ, và trên Mac Pro mới của tôi, nó tiêu tốn khoảng 600% CPU và mất vài giờ để xây dựng, vì vậy tôi không nghĩ lý do là vì mạng của tôi quá nhỏ.

tôi tin rằng các dòng dưới đây cuối cùng quyết định sử dụng CPU:

sess = tf.InteractiveSession(config=tf.ConfigProto()) 

Tôi thừa nhận tôi không hiểu đầy đủ về mối quan hệ giữa các chủ đề và lõi, nhưng tôi đã cố gắng tăng số lượng lõi. Nó có hiệu ứng tương tự như dòng trên: vẫn còn CPU 400%.

NUM_THREADS = 16 
sess = tf.InteractiveSession(config=tf.ConfigProto(intra_op_parallelism_threads=NUM_THREADS)) 

EDIT:

  • htop cho thấy cho thấy rằng tôi thực sự sử dụng tất cả 16 lõi EC2 của tôi, nhưng mỗi lõi duy nhất là vào khoảng 25%
  • đầu cho thấy tổng số CPU của tôi% là khoảng 400%, nhưng đôi khi nó sẽ bắn lên đến 1300% và sau đó gần như ngay lập tức quay trở lại xuống ~ 400%. Điều này làm cho tôi nghĩ rằng có thể là một vấn đề bế tắc
+0

bao nhiêu lõi được MAC của bạn? – error2007s

+0

@ error2007s Tôi có 4 CPU vật lý và 8 logic trên máy Mac của mình – user554481

Trả lời

5

Một số điều bạn có thể thử:

Tăng số lượng bài

Bạn đã cố gắng thay đổi intra_op_parallelism_threads. Tùy thuộc vào mạng của bạn, việc tăng số inter_op_parallelism_threads cũng có ý nghĩa. Từ doc:

inter_op_parallelism_threads:

Nodes thực hiện các hoạt động ngăn chặn được enqueued trên một vũng
inter_op_parallelism_threads có sẵn trong mỗi quá trình. 0 có nghĩa là hệ thống chọn một số thích hợp.

intra_op_parallelism_threads:

Việc thực hiện của một op cá nhân (đối với một số loại op) có thể được song song trên một vũng intra_op_parallelism_threads. 0 nghĩa là hệ thống sẽ chọn số thích hợp.

(Side lưu ý: Các giá trị từ tập tin cấu hình tham chiếu ở trên không phải là giá trị mặc định thực tế tensorflow sử dụng nhưng giá trị mẫu chỉ Bạn có thể xem cấu hình mặc định thực tế bằng cách thủ công kiểm tra các đối tượng được trả về bởi tf.ConfigProto(). .)

Sử dụng dòng chảy 0 cho các tùy chọn ở trên có nghĩa là nó cố gắng chọn chính các giá trị thích hợp.Tôi không nghĩ rằng tensorflow chọn giá trị nghèo gây ra vấn đề của bạn nhưng bạn có thể thử các giá trị khác nhau cho các tùy chọn ở trên để được ở bên an toàn.


Extract dấu vết để xem như thế nào mã của bạn trả song song

Có một cái nhìn tại tensorflow code optimization strategy

Nó cung cấp cho bạn một cái gì đó giống như this. Trong bức ảnh này, bạn có thể thấy rằng việc tính toán thực tế xảy ra trên các chuỗi ít hơn so với sẵn có. Điều này cũng có thể là trường hợp cho mạng của bạn. Tôi đã đánh dấu các điểm đồng bộ hóa tiềm năng. Ở đó bạn có thể thấy rằng tất cả các chủ đề đang hoạt động trong một thời điểm ngắn mà có khả năng là lý do cho các đỉnh cao lẻ tẻ trong việc sử dụng CPU mà bạn trải nghiệm.

Miscellaneous

  • Hãy chắc chắn rằng bạn không chạy ra khỏi bộ nhớ (htop)
  • Hãy chắc chắn rằng bạn không làm rất nhiều I/O hoặc một cái gì đó tương tự
Các vấn đề liên quan