2015-12-23 31 views
6

Trên hướng dẫn CIFAR-10, tôi nhận thấy rằng các biến được đặt trong bộ nhớ CPU, nhưng nó được ghi trong cifar10-train.py rằng nó được đào tạo với một GPU duy nhất.Biến trên CPU, đào tạo/gradients trên GPU

Tôi khá bối rối .. là lớp/kích hoạt được lưu trữ trong GPU? Hoặc cách khác, là các gradient được lưu trữ trong GPU? Nếu không, có vẻ như việc lưu trữ các biến trên CPU sẽ không tận dụng được GPU - tất cả mọi thứ được lưu trữ trong bộ nhớ CPU, vì vậy chỉ có CPU được sử dụng để truyền tiếp/lùi.

Nếu GPU được sử dụng để truyền phát f/b, đó không phải là một sự lãng phí do độ trễ xáo trộn dữ liệu CPU < -> GPU?

Trả lời

5

Thật vậy, trong cifar10-train các kích hoạt và gradient là trên GPU, chỉ các tham số là trên CPU. Bạn nói đúng rằng điều này không phải là tối ưu cho việc đào tạo một GPU do chi phí sao chép các thông số giữa CPU và GPU. Tôi nghi ngờ lý do nó được thực hiện theo cách này là để có một thư viện duy nhất cho các mô hình đơn GPU và đa GPU, như trong trường hợp đa GPU, có lẽ nhanh hơn để có các tham số trên CPU. Bạn có thể kiểm tra dễ dàng những gì tăng tốc bạn có thể nhận được bằng cách di chuyển tất cả các biến sang GPU, chỉ cần loại bỏ "với tf.device ('/ cpu: 0')" trong "_variable_on_cpu" trong cifar10.py.

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