본문 바로가기

프로그래밍/AI:ML:DL

[Colab] TPU 사용 훈련시 에러. ValueError: Operation 'tpu_140644740262992/VarIsInitializedOp' has been marked as not fetchable.

google colab 을 이용하면, 비싼 GPU 머신을 구입하지 않고, 구글이 너그럽게 제공해 주는 GPU와 TPU를 이용하여 간단한 훈련을 할 수 있다.

간단한 이미지분류모델을 케라스로 작성하여, colab 에서 실행해 보았는데, 노트북에서 실행한다는 제약이 있지만, 아주 만족스러웠다. GPU로 실행하는 것은 코드 변경도 필요없이 실행환경 런타임에서 GPU만 선택하면 됐다. 하지만 실행환경을 TPU로 선택하는 것만으로 TPU를 활용할 수는 없었다.

TPU를 사용하기 위해선 코드를 조금 변경하여야 한다. (자세한 내용을 변경될 수도 있고, colab에서 제공하는 예제 노트북에 너무 잘 나와있으므로 생략.) 환경변수를 확인하고, 만들어진 케라스모델을 keras_to_tpu_model 함수를 이용하여 tpu_model 로 바꾸어 주고, tpu_model 인스턴스로 fit 해야 한다. 그런데, tpu_modelfit 하는 부분에서 계속 다음과 같은 에러가 발생했다.

ValueError: Operation 'tpu_140644740262992/VarIsInitializedOp' has been marked as not fetchable. 

문제의 원인은 model 을 compile 할 때, optimizer"adam" 으로 주었던 것이 문제였다. 문자열로 주면 안 되고, cpu_model.compile(optimizer=tf.train.AdagradOptimizer(learning_rate=0.1), ... 과 같이 주어야 했다.