Tại sao RNN đào tạo không sử dụng 100% GPU?


8

Tôi tự hỏi tại sao đào tạo RNN thường không sử dụng 100% GPU.

Ví dụ: nếu tôi chạy điểm chuẩn RNN này trên Maxwell Titan X trên Ubuntu 14.04.4 LTS x64, mức sử dụng GPU dưới 90%:

nhập mô tả hình ảnh ở đây

Điểm chuẩn được đưa ra bằng lệnh:

python rnn.py -n 'fastlstm' -l 1024 -s 30 -b 128

Làm thế nào tôi có thể chẩn đoán nút cổ chai là gì?

Câu trả lời:


5

Tôi nhận được về tỷ lệ sử dụng tương tự khi tôi đào tạo các mô hình bằng cách sử dụng Tensorflow. Lý do khá rõ ràng trong trường hợp của tôi, tôi tự chọn một lô mẫu ngẫu nhiên và gọi tối ưu hóa cho từng lô riêng biệt.

Điều đó có nghĩa là mỗi lô dữ liệu nằm trong bộ nhớ chính, sau đó nó được sao chép vào bộ nhớ GPU trong đó phần còn lại của mô hình, sau đó truyền / lùi và cập nhật được thực hiện trong gpu, sau đó thực thi được đưa trở lại mã của tôi nơi tôi lấy một đợt khác và gọi tối ưu hóa trên đó.

Có một cách nhanh hơn để làm điều đó nếu bạn dành vài giờ để thiết lập Tensorflow để thực hiện tải hàng loạt song song từ các bản ghi TF được chuẩn bị trước.

Tôi nhận ra rằng bạn có thể hoặc không thể sử dụng tenorflow dưới máy ảnh, nhưng vì kinh nghiệm của tôi có xu hướng tạo ra những con số sử dụng rất giống nhau, tôi đi ra ngoài bằng cách gợi ý rằng có một liên kết nhân quả rất có thể rút ra từ những tương quan này. Nếu khung của bạn đang tải từng lô từ bộ nhớ chính vào GPU mà không tăng hiệu quả / độ phức tạp của tải không đồng bộ (mà chính GPU có thể xử lý), thì đây sẽ là kết quả mong đợi.


Đó cũng là nghi ngờ của tôi, bạn có biết cách giám sát việc sử dụng bus PCI Express trong Linux với CLI không?
Franck Dernoncourt

Tôi không thể nói tôi từng cân nhắc việc theo dõi điều đó, nhưng giờ bạn đã khiến tôi tò mò.
davidparks21

Tôi luôn luôn nhận được khoảng 90% với máy ảnh. Tôi chưa bao giờ kiểm tra mã nguồn của nó, nhưng tôi sẽ mong đợi một khung như thế để cung cấp các lô cho gpu song song (ít nhất là tùy chọn nếu bạn có thể đủ khả năng cho bộ nhớ .. tại sao không nên?).
stmax

1
Keras là một trình bao bọc xung quanh Tensorflow hoặc Theano. Tôi chỉ có kinh nghiệm về Tensorflow, vì vậy, từ quan điểm đó, quá trình cần thiết để cho phép tải dữ liệu không đồng bộ đòi hỏi bạn phải xử lý trước dữ liệu thành định dạng nhị phân cụ thể. Tôi sẽ cho rằng Theano có một số cách tương đương để làm điều này. Hầu hết các mô hình có thể bắt đầu với tải bộ nhớ theo từng đợt (làm cho nó hoạt động trước khi tối ưu hóa tốc độ). Và vì điều lệ của Keras là "giữ cho nó đơn giản", nên có thể không có gì bất ngờ khi họ sẽ thực hiện cách tiếp cận trực tiếp / đơn giản hơn chỉ với hiệu quả giảm ~ 10%.
davidparks21
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.