TF) Local rendezvous is aborting with status: OUT_OF_RANGE: End of sequence 에러 해결
환경
tensorflow/tensorflow:2.16.1-gpu (docker)
RTX 3060
TF) OUT_OF_RANGE: End of sequence 에러
classification 모델을 학습할 건데, TF Keras로 Resnet 모델을 전이학습 하고자 했다.
tensorflow/core/framework/local_rendezvous.cc:404] Local rendezvous is aborting with status: OUT_OF_RANGE: End of sequence
그런데 위와 같은 로그와 함께 한 에포크씩 동작하지 않았다.
1epoch 학습되고 2epoch는 에러 로그와 함께 accuracy:0, loss:0 뜨면서 바로 끝나고 3epoch 학습되고 이런 식이었다.
의심 1.
steps_per_epoch 마지막 에포크에서, 데이터를 반복으로 붙이는 부분이 문제인가?
steps_per_epoch는 math.ceil(데이터 수/batchSize)과 같게 했다.
예시로 데이터가 수=1001, batchSize=32 라면 steps_per_epoch=32이다.
32x31=992 이고 1001-992=9, 그러면 마지막 step_epoch에서 23개의 데이터를 반복으로 붙일 텐데, 여기에 문제가 있을까 싶어 데이터 수를 1024로 맞춰도 해결되지 않았다.
의심 2.
def load_data(), 데이터를 로딩하는 쪽에서 문제인가?
데이터 로드는 flow_from_directory, 데이터 증강은 ImageDataGenerator을 사용했는데, 여기에 문제가 있을까 싶어
데이터 로드는 image_dataset_from_directory, 증강은 tf.keras.Sequential을 사용해 보았으나 해결되지 않았다.
의심 3. (해결)
https://github.com/tensorflow/tensorflow/issues/68593
(에러 재현은 다르지만, 에러 로그는 동일하다)
마지막 코멘트에 보면 "I am running into the same issue. This issue was not there with tf 2.13."
2.13에서는 문제가 없었다는 코멘트를 보고 tensorflow/tensorflow:2.13.0-gpu 컨테이너로 변경했다.
코드와 데이터 등 나머지 환경은 동일하고 tf컨테이너만 2.16에서 2.13으로 바꿨더니 잘 동작한다.
OUT_OF_RANGE 에러를 뱉지 않고 1epoch씩 학습을 건너뛰지도 않는다.