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에서 필요한 특정 이미지 사전 처리를 수행 할 수 없으며 모든 이미지를 사전 처리해야합니다. 이 두 가지 솔루션 모두 작업하기 위해 이미지의 사전 처리가 필요하며, 최상의 이미지 크기를 설정하지 않았으므로 원하는 모든 실험에 대해 이미지 세트를 만들고 싶지 않기 때문에 모든 비용을 들이지 않고 피하고 싶습니다. 시험해보십시오.