Tôi đang phát triển một mạng nơron nhỏ có thông số cần tối ưu hóa rất nhiều, vì vậy rất nhiều thời gian xử lý. Tôi đã lược tả tập lệnh của mình với cProfile
và thời gian xử lý chiếm 80% là chức năng NumPy dot
, phần còn lại là ma trận đảo ngược với hàm numpy.linalg.solve
. Phiên bản sử dụng gọn gàng hiện tại của tôi blas
hoặc có vẻ như là do numpy.core._dotblas.dot
xuất hiện dưới dạng hàm chiếm 80% tổng thời gian xử lý.Làm thế nào để tăng tốc ma trận nhân trong Python?
Vì nó là cốt lõi của mạng thần kinh của tôi và vì tôi phải chạy rất nhiều, bất kỳ tăng tốc độ nhỏ nào cũng có thể giúp tôi tiết kiệm rất nhiều thời gian cho việc tối ưu hóa nhiều tham số lặp đi lặp lại.
Các góc độ khác: phép nhân ma trận trên ma trận có hình dạng tối thiểu 100 * 100 đến 500 * 500. Tôi có một máy tính với 12 lõi và sử dụng chúng cho đến nay để chạy tối ưu hóa các thông số mạng neural khác nhau song song, nhưng có thể nhân ma trận có thể được thực hiện song song?
Cảm ơn bạn đã dành thời gian!
Trả lời:
Tôi đã dành vài ngày thử nghiệm và cài đặt thư viện gỡ bỏ cài đặt ... Đây là kết quả của những gì tôi đã thử nghiệm: Theo mặc định trên phiên bản của tôi về Ubuntu (12.04) và respository cài đặt phiên bản numpy, các Thư viện BLAS là thư viện ATLAS. Tôi đã thực hiện một số thử nghiệm phản ánh sự cải thiện ĐẶC BIỆT trên các tính toán mà tôi quan tâm, vì vậy các kết quả này không được hiểu là câu trả lời cuối cùng. Những tính toán này liên quan đến phép nhân (ma trận) trong một vòng lặp lặp 55000, với ma trận 500 * 500 và 1000 * 1000. Tôi sử dụng một máy trạm HP Z800 với Xeon X5675 @ 3.07GHZ với 12 lõi. Tất cả các kết quả (phần trăm) là sự so sánh giữa điều kiện được mô tả và tham chiếu mà ở đây là thư viện ATLAS được đóng gói.
Scipy.sparse module
: Tôi không biết nếu tôi đặt nó một cách chính xác nhưng với một thưa thớt 10%, sử dụng mô-đun này trở nên hữu ích bắt đầu từ 1500 * 1500 ma trận với OpenBLAS và MKL. Nếu bạn có gợi ý về cách sử dụng chúng đúng cách tôi quan tâm!- Với OpenBlas tôi nhận được tốc độ tăng 33% cho 500 * 500 ma trận nhưng 160% cho 1000 * 1000. Nhưng với OpenBLAS, mô-đun scipy.sparse không hoạt động tốt hơn nhưng tệ hơn trong thực tế.
- Người chiến thắng lớn ở đây là thư viện MKL. Gia tốc lên tới 230% với các ma trận 1000 * 1000 từ các thư viện ATLAS gốc! Đối với các ma trận 500 * 500, gia tốc là khiêm tốn hơn (100%) nhưng vẫn rất tốt. Hơn nữa với việc biên dịch với OpenMP, phép nhân ma trận có thể chạy trên 12 bộ vi xử lý của tôi và ở đây nó nhanh gấp hai lần so với một bộ xử lý với các thư viện MKL. Nhưng nó là một sự lãng phí sức mạnh xử lý, nó là hiệu quả hơn nhiều để sử dụng các mô-đun đa xử lý để chạy các kịch bản/ma trận nhân song song.
Openblas có thể là tùy chọn miễn phí tốt có thể tăng tốc độ đáng kể. Nó nên được khá dễ dàng có sẵn trên hầu hết các hệ thống Linux cho ví dụ. – seberg
Tôi đã không nhận ra rằng MKL không phải là miễn phí (như trong bia); [OpenBLAS] (http://xianyi.github.com/OpenBLAS/) có lẽ là một lựa chọn tốt. EPD là miễn phí cho các học giả. – Dougal
Lưới thần kinh của tôi thực sự thưa thớt (kết nối 10%), tôi tăng tốc 20%, không nhiều nhưng tốt hơn là không có gì. Bạn nói về OpenBLAS, nó có chạy nhanh hơn phiên bản hiện tại của tôi về việc sử dụng phiên bản BLAS không? – PierreE