Knowledge Map

python2 multiprocessing 과 tensorflow 본문

PYTHON

python2 multiprocessing 과 tensorflow

2018. 6. 18. 07:26

celery로 tensorflow를 실행시켜 비동기 백그라운드로 처리하려고 생각했었다.


flask와 celery worker를 각각 실행한 다음 tensorflow의 메서드를 호출했을 때 다음과 같은 에러가 발생했다.


tensorflow/stream_executor/cuda/cuda_driver.cc:1216] failed to enqueue async memcpy from host to device: CUDA_ERROR_NOT_INITIALIZED; GPU dst: 0x130a30d900; host src: 0x205c3d500; size: 4=0x4


검색을 하니 2017년도 즈음 되는 글이 나왔는데 버그였고 고쳤다고 했다. 하지만 난 이 에러가 발생했다.

좀더 추가적으로 검색해보니 tf자체가 분산 연산을 위해서 여러 스레드와 정적 변수들을 세팅을 한다. 그래서 fork-safe 하지 못하다고 한다. 파이썬 2의 multiprocessing.Process.start() 의 경우 무조건 os.fork()를 한다고 하는데 이런 경우 포크안정성 문제가 생기고 이게 python2에서는 방법이 없다 한다. 


https://github.com/tensorflow/tensorflow/issues/5448


위의 주소에서 내용을 확인할 수 있다.


실행 환경은 

GTX TITAN X / python 2.7.10 / CU_DNN 5.1 / cuda 8.0.44 / tensorflow-gpu 1.2.1

이었다.


결국 tensorflow 전용 서버를 따로 하나 더 만들고 서버간의 요청을 celery를 이용하는 방식으로 변경하였다.

나중에 enginx를 붙이고 docker로 환경을 꾸미고 스케일업 다운을 할수 있는 시스템도 만들었으면 좋겠다.

'PYTHON' 카테고리의 다른 글

python2으로 json 파일 생성하기  (0) 2018.06.18
celery 관련  (0) 2018.06.11
import _macosx 에서의 runtimeError  (0) 2018.06.01
create_db using sqlalchemy  (0) 2018.05.09
SQLAlchemy session transaction delete 문제  (0) 2018.04.12
Comments