2016-07-24 2 views
1

나는 크기가 약 10000X10000X10000 인 매트릭스로 작업해야하는 파이썬 프로젝트에서 작업 중이다.큰 매트릭스를 다루는 하드웨어 요구 사항 - 파이썬

  • 행렬은 조밀 한 것, 그리고 RAM에 보관해야합니다 : 그 고려

    .

  • 그 행렬에서 선형 대수학을 수행해야합니다 (numpy와 함께 생각하십시오). O (n^3) n = 10000 연산 (병렬 처리 가능)으로 행렬을 수행해야합니다.

내 요구 사항이 사실입니까? 적절한 시간에 그런 식으로 일해야하는 하드웨어 요구 사항은 무엇입니까?

성능을 향상시킬 수 있다면 언어를 전환 할 수도 있습니다 (예 : C로 선형 대수 연산을 수행).

답변

0

실제로 메모리가 큰 문제가됩니다. 행렬 요소의 유형에 따라 다릅니다. 각 플로트는 boxed 객체이기 때문에 24 바이트를 사용합니다. 행렬이 10^12이므로 수학을 할 수 있습니다. C로 전환하면 아마 메모리 효율이 좋아질 것입니다. 그러나 numpy는 기본적으로 많은 최적화를 통해 C로 작성됩니다.

4

음, 첫 번째 질문은 매트릭스에 값을 저장 하시겠습니까? 그것은 정수가 될 것이며 (모든 바이트가 4 바이트 크기의 ISO 사양을 사용한다는 것을 나타 내기 위해) 저장할 4 * 10^12 바이트를 갖게됩니다. 이는 많은 양의 정보 (4TB)이므로, 처음에는 정보를 어디에서 가져 왔는지 모릅니다. 쉽게 관리 할 수있는 부분 만로드하는 것이 좋습니다.

다른면에서는 평행화할 수 있기 때문에 NVIDIA 카드를 구입할 수 있다면 CUDA를 사용하는 것이 좋습니다. 그러면 훨씬 더 우수한 성능을 얻을 수 있습니다.

요약하면 RAM에있는 모든 정보 만 얻고 paralell languajes를 사용하는 것은 어렵습니다.

PD : 알고리즘 복잡도에 대한 O() 자극을 잘못 사용하고 있습니다. 당신은 O (n), n = size_of_the_matrix 또는 O (n m t)가되고, 행렬의 차원 인 n, m 및 t가 있다고 말했어야합니다.

1

어쩌면 dask과 같은 것이 적합할까요? 메모리 맵핑 된 arrary를 사용하고 병렬 가능 덩어리로 연산을 수행하는 것처럼 numpy로 이것을 수행하는 다른 방법이 있지만, 여전히 Python에 익숙하지 않은 경우에는 특히 더 어려울 것이다.

개인적으로이 작업에 다른 언어를 사용하면 별다른 이점이 없습니다. 당신은 여전히 ​​하드웨어 제한과 병렬 작업에 대한 청킹을 처리해야합니다. dask를 사용하면이 기능이 거의 사용되지 않습니다.

관련 문제