tf.gfile.GFile вызывает утечку памяти внутри контейнера docker

#docker #tensorflow #file-io #memory-leaks #bucket

#docker #tensorflow #file-io #утечки памяти #корзина

Вопрос:

Я использую эту функцию для чтения данных изображения из корзины GCS:

 def _load_image(path, height, width):
try:
    with tf.gfile.GFile(path, 'rb') as fl:
        image_bytes = fl.read()
        image = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), -1)
        return image.astype(np.float32)

except Exception as e:
    logging.exception('Error processing image %s: %s', path, str(e))
    return
  

Он вызывается внутри цикла, который считывает данные изображения и выводит их в файл .tfrecord

 def _write_tf_records(examples, output_filename):
    writer = tf.python_io.TFRecordWriter(output_filename)
    for example in tqdm(examples):
        try:
            image = _load_image(example['path'], height=HEIGHT, width=WIDTH)
            if image is not None:
                encoded_img_string = cv2.imencode('.jpg', image)[1].tostring()
                feature = {
                    'train/label': _bytes_feature(tf.compat.as_bytes(example['classname'])),
                    'train/image': _bytes_feature(tf.compat.as_bytes(encoded_img_string))
                }

                tf_example = tf.train.Example(features= tf.train.Features(feature=feature))
                writer.write(tf_example.SerializeToString())
        except Exception as e:
            print(e)
            pass
    writer.close()
  

Функция отлично работает при выполнении на локальном компьютере, считывая изображения из моей корзины GCS. Но когда я пытаюсь запустить этот скрипт python из контейнера docker, он начинает быстро потреблять оперативную память и в конечном итоге выходит из строя (возможна утечка памяти).

Я устранил другие возможные причины и почти уверен, что GFile.read() это та, которая вызывает ошибку.

Предложения по решению этой проблемы?