이 블로그 검색

레이블이 numpy인 게시물을 표시합니다. 모든 게시물 표시
레이블이 numpy인 게시물을 표시합니다. 모든 게시물 표시

2022년 9월 2일 금요일

(python) docker container 에서 scipy, numpy 사용 시 thread 과다 생성 문제 (incorrect cpu count)

개발 중인 python 프로젝트에서 scipy 패키지 interpolate 를 사용하는 코드가 있는데, docker 기반 클라우드 환경에서 실행하니 먹통이 되고 멈추는 현상이 발생 했다. 하지만, 이 코드를 내 랩탑 에서 돌려보면, 정상 동작한다.

문제의 원인을 찾아보니, docker container 를 생성하면서 할당한 cpu 개수와 실제 머신의 전체 CPU 개수 불일치로 인한 문제였다. 이 현상에 대해 정리 해 본다.


  • docker container 기반에서 OpenBLAS, MLK 를 사용하는 numpy, scipy 등의 패키지 내부에서 과도한 thread 생성이 안되게 주의 해야 한다.
  • 비록 명시적으로 thread 를 사용하지 않았어도, numpy, scipy 내부적으로는 multi thread 가 생성 된다는 것을 알아둘 필요가 있다.
  • 코드가 동작하는 환경을 분석하고, 성능 문제가 있는 경우에만 시도한다


좀 더 자세히 알아보면, 

2022년 8월 21일 일요일

(pthon) pandas 처리 속도 개선에 대하여

지금 하고 있는 프로젝트에서 python pandas 와 numpy를 사용해서 데이터를 처리하는 부분이 있다.
그런데 기존에 있던 처리 속도가 느려서 이 부분을 검토하면서,
처리 속도를 높이기 위해 이것 저것 수정해서 테스트 하다 보니 알게 된 것들이 있어서 정리해 본다.


- 최선의 방식은 numpy ndarray vectorization 처리다.

- for loop를 이용해서 모든 데이터를 순회하는 방식은 피해야 한다. 
  (nested for loop 방식은 어떤 식 으로 든 개선의 여지가 있다)


그럼 위 내용에 대해서 상세히 확인 해 보도록 하자.
우선 기존 소스 분석을 통해서 로직을 심플 하게 추려서 만들어 보면 다음과 같았다.