나는 그 매개 변수가 많은 최적화를 필요로하는 작은 신경망을 개발하고 있으므로 많은 처리 시간이 필요하다. cProfile
으로 스크립트를 프로파일 링했으며 프로세서 시간의 80 %가 NumPy dot
함수이고 나머지는 역함수 numpy.linalg.solve
입니다. numpy의 현재 버전은 이 전체 처리 시간의 80 %를 차지하는 함수로 나타나기 때문에 blas
을 사용합니다.파이썬에서 행렬 곱셈을 어떻게 가속화할까요?
내 신경망의 핵심이며이 부분을 많이 실행해야하므로 경미한 속도 향상으로 수많은 반복 매개 변수 최적화에 많은 시간을 절약 할 수있었습니다.
더 많은 정밀도 : 행렬 곱셈은 최소 100 * 100에서 최대 500 * 500까지의 모양을 갖는 행렬에 있습니다. 나는 12 개의 코어를 가진 컴퓨터를 가지고 있으며 병렬로 다른 신경망 매개 변수 최적화를 실행하기 위해 지금까지 사용했지만, 아마도 행렬 곱셈을 병렬로 수행 할 수 있을까?
감사합니다.
답변 : 내가 몇 일 테스트 및 설치 제거 라이브러리 ... 여기에 내가 테스트 한 일의 결과는 소비
: 우분투 (12.04)의 내 버전에 기본적으로 및 NumPy와의 respository 설치된 버전의 BLAS 라이브러리는 ATLAS 라이브러리입니다. 내가 관심있는 계산에 대한 개선을 구체적으로 반영한 몇 가지 테스트를 만들었으므로이 결과를 최종 답변으로 해석해서는 안됩니다. 이 계산에는 500 * 500 및 1000 * 1000 매트릭스가있는 55000 반복 루프의 행렬 곱셈 (내적 곱)이 포함됩니다. 12 코어의 Xeon X5675 @ 3.07GHZ가있는 HP Z800 워크 스테이션을 사용합니다. 모든 결과 (백분율)는 설명 된 조건과 여기에 패키지 된 ATLAS 라이브러리 인 참조 간의 비교입니다.
Scipy.sparse module
: 내가 올바르게 설정하면 알고 있지만 10 %의 희소성과,이 모듈을 사용하면 OpenBLAS와 MKL 1500 * 1500 행렬에서 시작하여 유용하게하지 않습니다. 당신이 그 (것)들을 정확하게 이용하는 방법에 관한 제안이있는 경우에 나는 흥미있다!- OpenBlas를 사용하면 500 * 500 매트릭스의 경우 33 %, 1000 * 1000의 경우 160 %의 속도 향상을 얻을 수 있습니다. 그러나 OpenBLAS를 사용하면 scipy.sparse 모듈이 더 잘 수행되지는 않지만 사실 더 나빠집니다.
- 큰 우승자는 MKL 라이브러리입니다. 가속도는 원래 ATLAS 라이브러리에서 1000 * 1000 매트릭스로 230 %까지 올라갑니다! 500 * 500 행렬의 경우, 가속도는 좀 더 완만하지만 (100 %) 여전히 매우 좋습니다. 또한 OpenMP로 컴파일 할 때 매트릭스 곱셈은 12 개의 프로세서에서 실행할 수 있으며 여기서는 MKL 라이브러리가있는 하나의 프로세서보다 두 배 빠릅니다. 그러나 처리 능력이 낭비되기 때문에 멀티 프로세싱 모듈을 사용하여 스크립트/행렬 곱셈을 병렬로 실행하는 것이 훨씬 효율적입니다.
Openblas는 일을 상당히 빠르게 할 수있는 좋은 옵션입니다. 예를 들어, 대부분의 리눅스 시스템에서 꽤 쉽게 사용할 수 있어야합니다. – seberg
나는 MKL이 무료가 아니라는 것을 몰랐다. [OpenBLAS] (http://xianyi.github.com/OpenBLAS/)는 아마도 좋은 대안 일 것입니다. EPD는 학자들에게 무료입니다. – Dougal
내 신경망은 실제로 스파 스 (10 % 연결성)입니다. 20 %의 속도 향상을 얻을 수 있습니다. OpenBLAS에 대해 이야기합니다. 이미 BLAS 버전을 사용하고있는 numpy의 현재 버전보다 빠르게 실행됩니까? – PierreE