0

BASIC_GPU 계층 인스턴스의 google ml-engine에서 컴퓨터 시각을위한 컨볼 루션 모델을 훈련하려고하지만 겉보기에 최대 1 시간 동안 스톨이 멈추고 있습니다 임의의 시간 간격. 이와 같이 tensorboard에서 취한 비용 함수의 그림에서 볼 수 있듯이. Cost function plotted over timegcloud 학습 도중 멀티 프로세싱 또는 멀티 스레딩을 사용할 때 ML 엔진이 많이 멈 춥니 다.

내가 생각할 수있는이 문제의 유일한 명백한 원인은 내가 사용하는 멀티 스레딩 또는 멀티 프로세싱 기능입니다 (둘 다 똑같은 문제가 발생하며 지금부터는 병렬 처리라고 부름). 병렬 처리를 사용하여 병렬로 내 이미지를 가져 와서 Google 스토리지 버킷 대기 시간이 약 100ms 인이 일부 opencv 사전 처리를 추가하고 순차적으로 수행하면 일괄 처리 당 5/6 초까지 걸릴 수 있습니다. 병렬 함수에서 근로자를 산란에 의해 작품을 가져 오기 :

import threading as thr 

def read_image_always_out(self, dirlist, que, seed): 
    found_img = False 
    np.random.seed(seed) 
    number_of_files = len(dirlist) 
    while not found_img: 
     i = np.random.randint(number_of_files) 
     seed = np.random.randint(self.maxInt) 
     ex, se, found_img, _ = self.get_image_set(datapath, annopath, seed) 

    que.put([ex, se]) 
    que.task_done() 

def read_image_batch_thread(self, dirlist,seed): 
    wait_for_thread = 5.0 
    np.random.seed(seed) 
    search_images, exemplars = [], [] 
    que = Queue.Queue((self.batch_size)) 
    process_list = [] 

    for i in range(0, self.batch_size): 
     seed = np.random.randint(self.maxInt) 
     p = thr.Thread(target=self.read_image, 
         args=(dirlist, que, seed)) 
     p.start() 
     process_list.append(p) 

    no_data = [] 

    for i in range(0, self.batch_size): 
     try: 
      images = que.get(wait_for_thread) 
     except: 
      print("timeout waiting for image") 
      no_data.append(i) 
     else: 
      exemplars.append(images[0]) 
      search_images.append(images[1]) 

    for p in process_list: 
     p.join(wait_for_thread) 
    que.join() 
    duration_image_get = time.time() - start_time 
    return exemplars, search_images, duration_image_get, no_data 

를 훈련은 마법처럼 병렬 가져 오기 작업을 스톨 및 제 주위에 크게 내 모델의 훈련 속도를 개선하는 이미지로드 시간을 감소되지 않을 때마다.

교육은 로컬에서 교육을 실행할 때 이러한 문제가 나타나지 않습니다. 이것이 ML 엔진에 특정한 버그 인 것 같거나 뭔가 빠졌는가? 이 문제에 대한 ml 엔진 또는 해결책에 대한 제한 사항에 대한 필자의 검색이 마르기 시작했습니다.

누구든지이 문제에 경험이 있으며 작동하지 않는 이유 또는 내가 시도 할 수있는 다른 이유를 알고 있습니까? 그리고이 문제는 버그입니까, 아니면 ML 엔진의 제한입니까?

대용량 파일을 사용하여 교육의 청크를 사용하는 것과 같은 몇 가지 해결 방법이 있다는 것을 알고 있으므로 배치 당 하나의 파일을 다운로드하고 배수가 아닌 파일 만 다운로드하면됩니다. 또는 tf.train.QueueRunner를 사용하면 tensorflow API에서 필요한 특정 이미지 사전 처리를 수행 할 수 없으며 모든 이미지를 사전 처리해야합니다. 이 두 가지 솔루션 모두 작업하기 위해 이미지의 사전 처리가 필요하며, 최상의 이미지 크기를 설정하지 않았으므로 원하는 모든 실험에 대해 이미지 세트를 만들고 싶지 않기 때문에 모든 비용을 들이지 않고 피하고 싶습니다. 시험해보십시오.

답변

0

정보가 충분하지 않으므로 추측 할 만합니다. 이미지 페칭 루프를 느리게 만드는 퇴보 한 사례가 발생할 가능성이 큽니다 (예 : 기본 시간 초과 설정, 특정 오류 조건 처리 안함, 모든 스레드 대기, 모든 이미지 가져 오기를위한 새 스레드 시작).

이상적인 해결 방법은 모든 작업을 읽기 및 대기열 포함 TensorFlow 작업으로 이동하는 것입니다. 그 부분은 매우 잘 테스트되었습니다. TensorFlow에서 수행 할 수없는 전처리가 확실합니까? 우리는이 목적을 위해 일반적으로 TensorFlow 작업을 사용합니다. 예를 들어 여기를 참조하십시오 : https://github.com/tensorflow/models/blob/master/slim/preprocessing/vgg_preprocessing.py

관련 문제