티스토리 뷰

최근 multiprocessing 패키지를 사용해보게 됐다. 배포한 패키지는 아래의 링크에서 확인가능하다.

 

https://github.com/developer0hye/image-knocker

 

GitHub - developer0hye/image-knocker: Knock your images before these make you painful.

Knock your images before these make you painful. Contribute to developer0hye/image-knocker development by creating an account on GitHub.

github.com

 

왜 이 패키지를 배포했는지 백그라운드를 설명할 필요가 있다. 컴퓨터 비전 어플리케이션을 개발하다보면 아주 아주 가끔 컴퓨터 비전 라이브러리(OpenCV, PIL)에서 디코딩이 제대로 안되는 이미지들이 있다. 만약에 딥러닝 모델 학습을 위한 데이터에 이러한 이미지가 들어가는 경우 프로그램이 도중에 종료될 수 있다. 이러한 파일은 프로그램 시작전에 걸러내야할 필요가 있다.

 

image-knocker 는 이러한 작업을 도와주기 위해 개발된 패키지이며 명령어창에서 커맨드로 실행가능한 하나의 프로그램이다.

 

image-knocker 는 이미지들이 위치한 경로를 입력받고 해당 경로의 모든 하위 폴더내에 이미지를 모두 탐색한다. 그리고 해당 이미지들이 디코딩 가능한지에 대한 여부를 판단한다. 그리고, 디코딩 불가능한 이미지들에 대한 리스트를 출력하고 이를 파일에 저장한다.

 

multiprocessing은 이미지별 디코딩 가능 여부를 판단하는 과정에서 사용됐다.

아래 링크에서 확인 가능하다. 나의 케이스의 경우 단 두줄로 multiprocessing을 적용할 수 있었다.

 

https://github.com/developer0hye/image-knocker/blob/b1c4db71f0e804cd5210d6f1436b217ddba25c98/image_knocker/image_knock.py#L38-L39

 

GitHub - developer0hye/image-knocker: Knock your images before these make you painful.

Knock your images before these make you painful. Contribute to developer0hye/image-knocker development by creating an account on GitHub.

github.com

multiprocessing 라이브러리 사용법에 관해서는 다른 개발자분들이 이미 너무나도 잘 정리해주셨기에 따로 이 게시글에 내용을 적진 않았다.

 

패키지를 배포하긴 했는데... 다양한 이미지들에 대해 제대로 디코딩 가능 여부를 판단해줄것인지는 모르겠다. 지금 방식은 속도를 위하여 이미지를 풀디코딩하지 않고 가능 여부를 판단하는데... 선택적으로 풀디코딩하여 디코딩 가능 여부를 더 확실하게 판단할 수 있도록 코드를 수정할 필요가 있어보인다.

 

찾아보니 Ray 라는 Multiprocessing용 라이브러리가 있었다. 설명된 문서들을 보니 Python의 multiprocessing 보다 특정 케이스에 대해 몇배 더 빠르다고 설명되어 있었는데 적용해보고 속도를 측정해보니 오히려 느렸다. Ray 를 써본 사람이라면 알겠지만 multiprocessing 작업을 위해 초기 설정을 하기 위해 init() 이라는 함수를 호출하게 되는데 여기서 시간이 오래 걸리는 문제점을 발견했다. 구글링해보니 스택 오버 플로우에도 해당 이슈가 게시되어 있다. 댓글에는 "그럴 일 없다" 라는 뉘앙스로 달리긴 했지만... 적어도 내 케이스에서는 확실히 문제가 되었다.

 

https://stackoverflow.com/questions/66131090/ray-init-is-very-slow

 

Ray init() is very slow

I am new at using Ray, I find it wonderful, I had to divest from multiprocessing because it was not working optimally inside a class. My only issue with Ray, and I don't understand it, is that for ...

stackoverflow.com

 

Ray 말고도 MPIRE(MultiProcessing Is Really Easy)라는 패키지도 써봤는데 이것도 내 케이스의 경우 Python의 multiprocessing 보다 느렸다.

'Python' 카테고리의 다른 글

[Python] 파일 수정 시간 받아오기  (0) 2022.01.07
Static member variable in Python  (0) 2021.12.29
[Python] PyPI 배포하다가 겪은 문제들  (0) 2021.08.13
[Python] yaml 파일 읽기  (0) 2021.07.09
[Python] 파일명 확장자 변경  (0) 2021.02.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함