Невозможно использовать обратные вызовы Keras CSVLogger в режиме сценария Sagemaker. Не удается записать файл журнала на S3 (ошибка - нет такого файла или каталога) - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть этот скрипт, в котором я хочу получить обратные вызовы в отдельный файл CSV в контейнере docker собственного скрипта sagemaker. Но когда я пытаюсь запустить в локальном режиме, он не дает следующую ошибку. У меня есть задание гиперпараметрической настройки (HPO), и оно продолжает давать мне ошибки. Мне нужно, чтобы этот локальный режим работал правильно, прежде чем делать HPO.

enter image description here

В записной книжке я использую следующий код.

from sagemaker.tensorflow import TensorFlow

tf_estimator = TensorFlow(entry_point='lstm_model.py', 
                          role=role,
                          code_location=custom_code_upload_location,
                          output_path=model_artifact_location+'/',
                          train_instance_count=1, 
                          train_instance_type='local',
                          framework_version='1.12', 
                          py_version='py3',
                          script_mode=True,
                          hyperparameters={'epochs': 1},
                          base_job_name='hpo-lstm-local-test'
                         )

tf_estimator.fit({'training': training_input_path, 'validation': validation_input_path})

В моем lstm_model.py В скрипте используется следующий код.

lgdir = os.path.join(model_dir, 'callbacks_log.csv')
csv_logger = CSVLogger(lgdir, append=True)

regressor.fit(x_train, y_train, batch_size=batch_size,
              validation_data=(x_val, y_val), 
              epochs=epochs,
              verbose=2,
              callbacks=[csv_logger]
              )

Я пытался создать файл перед этим, как показано ниже, используя бэкэнд тензор потока. Но это не создает файл. (K: tenorflow Backend, tf: tenorflow)

filename = tf.Variable(lgdir , tf.string)
content = tf.Variable("", tf.string)
sess = K.get_session()
tf.io.write_file(filename, content)

Я не могу использовать другие пакеты, такие как pandas, для создания файла, так как контейнер TensorFlow docker в SageMaker для пользовательских сценариев не предоставить им. Они дают только ограниченное количество пакетов.

Есть ли способ, которым я могу записать файл csv в область памяти S3 до того, как метод fit попытается написать обратный вызов. Или это решение проблемы? Я не уверена.

Если вы даже можете предложить другие предложения, чтобы получить обратные вызовы, я бы даже принял этот ответ. Но это должно стоить усилий.

Это docker изображение действительно сужает область видимости.

1 Ответ

0 голосов
/ 10 марта 2020

Хорошо, для начала, вы всегда можете сделать свое собственное изображение docker, используя изображение Tensorflow в качестве основы. Я работаю в Tensorflow 2.0, так что это будет немного отличаться для вас, но вот пример моего шаблона изображения:

# Downloads the TensorFlow library used to run the Python script
FROM tensorflow/tensorflow:2.0.0a0 # you would use the equivalent for your TF version

# Contains the common functionality necessary to create a container compatible with Amazon SageMaker
RUN pip install sagemaker-containers -q 

# Wandb allows us to customize and centralize logging while maintaining open-source agility
RUN pip install wandb -q # here you would install pandas

# Copies the training code inside the container to the design pattern created by the Tensorflow estimator
# here you could copy over a callbacks csv
COPY mnist-2.py /opt/ml/code/mnist-2.py 
COPY callbacks.py /opt/ml/code/callbacks.py 
COPY wandb_setup.sh /opt/ml/code/wandb_setup.sh

# Set the login script as the entry point
ENV SAGEMAKER_PROGRAM wandb_setup.sh # here you would instead launch lstm_model.py

Я считаю, что вы ищете шаблон, похожий на этот, но я предпочитаю регистрировать все моих данных модели с использованием весов и смещений . Они немного не знают о своей интеграции с SageMaker, но я на самом деле в процессе написания обновленного учебника для них. Это, безусловно, должно быть завершено в этом месяце и включать в себя запись и сравнение прогонов из заданий по настройке гиперпараметра

...