2017-12-09 6 views
1

배경 내가 셉션 - Resnet_v2와 keras를 사용하여 병리 이미지를 예측 할멀티 단일 GPU

으로 예측하고있다. 나는 이미 모델을 훈련했고 .hdf5 파일을 가지고있다. 병리학 이미지가 매우 크기 때문에 (예 : 20,000 x 20,000 픽셀) 이미지를 스캔하여 예측을위한 작은 패치를 얻어야합니다.

python2.7과 함께 다중 처리 lib를 사용하여 예측 절차를 빠르게하고 싶습니다. 주요 아이디어는 서로 다른 서브 프로세스를 사용하여 다른 라인을 스캔 한 다음 모델에 패치를 보내는 것입니다.

나는 누군가가 케라를 가져오고 서브 프로세스에서 모델을로드하는 것을 제안했다. 그러나 나는 그것이 내 일에 적합하다고 생각하지 않는다. keras.models.load_model()을 사용하여 모델을 한 번로드하는 데 약 47 초가 걸리므로 시간이 많이 걸립니다. 따라서 새 하위 프로세스를 시작할 때마다 모델을 다시로드 할 수 없습니다.

질문

내 질문은 내가 내 주요 프로세스 모델을로드하고 하위 프로세스 매개 변수로 전달할 수있다?

두 가지 방법을 시도했지만 둘 다 작동하지 않았습니다.

방법 1.

import keras 
from keras.models import load_model 
import multiprocessing 

def predict(num,model): 
    print dir(model) 
    print num 
    model.predict("image data, type:list") 

if __name__ == '__main__': 
    model = load_model("path of hdf5 file") 
    list = [(1,model),(2,model),(3,model),(4,model),(5,model),(6,model)] 
    pool = multiprocessing.Pool(4) 
    pool.map(predict,list) 
    pool.close() 
    pool.join() 

출력은 내가 오류를 검색하고 풀 unpickelable 매개 변수를 매핑 할 수 없습니다 발견

cPickle.PicklingError: Can't pickle <type 'module'>: attribute lookup __builtin__.module failed 

, 그래서 방법 2.

시도 : multiprocessing.Pool

코드를 사용하다

방법 2. multiprocessing.Process

를 사용

코드는 내가 dir(model)을 인쇄 할 수 있습니다, 방법 2에서

import keras 
from keras.models import load_model 
import multiprocessing 

def predict(num,model): 
    print num 
    print dir(model) 
    model.predict("image data, type:list") 

if __name__ == '__main__': 
    model = load_model("path of hdf5 file") 
    list = [(1,model),(2,model),(3,model),(4,model),(5,model),(6,model)] 
    proc = [] 
    for i in range(4): 
     proc.append(multiprocessing.Process(predict, list[i])) 
     proc[i].start() 
    for i in range(4): 
     proc[i].join() 

입니다. 모델이 서브 프로세스에 성공적으로 전달되었음을 의미한다고 생각합니다.

  • 우분투 16.04, 파이썬 2.7
  • keras 2.0.8 (tensorflow 백엔드)
  • 한 타이탄 X, 드라이버 버전 384.98 :하지만

    E tensorflow/stream_executor/cuda/cuda_driver.cc:1296] failed to enqueue async memcpy from host to device: CUDA_ERROR_NOT_INITIALIZED; GPU dst: 0x13350b2200; host src: 0x2049e2400; size: 4=0x4 
    

    내가 사용하는 환경이 오류가 발생했습니다 , CUDA 8.0

회신을 고대하고 있습니다! 감사!

답변

관련 문제