Azure ML Studio ML Pipeline — исключение: временный файл не найден

Я успешно провел эксперимент с конвейером машинного обучения и без проблем опубликовал конвейер машинного обучения Azure. Когда я запускаю следующее сразу после успешного запуска и публикации (т. Е. Я запускаю все ячейки с помощью Jupyter), тест завершается неудачей!

interactive_auth = InteractiveLoginAuthentication()
auth_header = interactive_auth.get_authentication_header()

rest_endpoint = published_pipeline.endpoint
response = requests.post(rest_endpoint, 
                         headers=auth_header, 
                         json = {"ExperimentName": "***redacted***",
                               "ParameterAssignments": {"process_count_per_node": 6}})
run_id = response.json()["Id"]

Вот ошибка в azureml-logs/70_driver_log.txt:

[2020-12-10T17:17:50.124303] The experiment failed. Finalizing run...
Cleaning up all outstanding Run operations, waiting 900.0 seconds
3 items cleaning up...
Cleanup took 0.20258069038391113 seconds
Traceback (most recent call last):
  File "driver/amlbi_main.py", line 48, in <module>
    main()
  File "driver/amlbi_main.py", line 44, in main
    JobStarter().start_job()
  File "/mnt/batch/tasks/shared/LS_root/jobs/***redacted***/azureml/***redacted***/mounts/workspaceblobstore/azureml/***redacted***/driver/job_starter.py", line 52, in start_job
    job.start()
  File "/mnt/batch/tasks/shared/LS_root/jobs/***redacted***/azureml/***redacted***/mounts/workspaceblobstore/azureml/***redacted***/driver/job.py", line 105, in start
    master.wait()
  File "/mnt/batch/tasks/shared/LS_root/jobs/***redacted***/azureml/***redacted***/mounts/workspaceblobstore/azureml/***redacted***/driver/master.py", line 301, in wait
    file_helper.start()
  File "/mnt/batch/tasks/shared/LS_root/jobs/***redacted***/azureml/***redacted***/mounts/workspaceblobstore/azureml/***redacted***/driver/file_helper.py", line 206, in start
    self.analyze_source()
  File "/mnt/batch/tasks/shared/LS_root/jobs/***redacted***/azureml/***redacted***/mounts/workspaceblobstore/azureml/***redacted***/driver/file_helper.py", line 69, in analyze_source
    raise Exception(message)
Exception: No temp file found. The job failed. A job should generate temp files or should fail before this. Please check logs for the cause.

Исключение: временный файл не найден. Работа не удалась. Задание должно генерировать временные файлы или должно завершаться ошибкой до этого. Пожалуйста, проверьте журналы для определения причины.

Вот ошибки в logs/sys/warning.txt:

requests.exceptions.HTTPError: 429 Client Error: Too Many Requests for url: https://eastus.experiments.azureml.net/execution/v1.0/subscriptions/***redacted***/resourceGroups/***redacted***/providers/Microsoft.MachineLearningServices/workspaces/***redacted***/experiments/***redacted-experiment-name***/runs/***redacted-run-id***/telemetry

[...]

requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url:

с тем же URL.

Следующий...

Когда я подожду несколько минут и перезапущу следующий код/ячейку.

interactive_auth = InteractiveLoginAuthentication()
auth_header = interactive_auth.get_authentication_header()

rest_endpoint = published_pipeline.endpoint
response = requests.post(rest_endpoint, 
                         headers=auth_header, 
                         json = {"ExperimentName": "***redacted***",
                               "ParameterAssignments": {"process_count_per_node": 2}})
run_id = response.json()["Id"]

Он завершается успешно!? Хм? (Я изменил количество процессов здесь, но я не думаю, что это имеет значение). Кроме того, в журналах нет ошибки пользователя.

Любые идеи относительно того, что может происходить здесь?

Заранее спасибо за любые идеи, которые у вас могут быть, и удачного кодирования! :)

========== ОБНОВЛЕНИЕ #1: ==========

Запуск на 1 файле с ~ 300 тыс. строк. Иногда работа работает, а иногда нет. Мы пробовали много версий с разными настройками конфигурации, все время от времени приводили к сбою. Изменены модели sklearn для использования n_jobs=1. Мы оцениваем текстовые данные для работы с НЛП.

default_ds = ws.get_default_datastore()

# output dataset
output_dir = OutputFileDatasetConfig(destination=(def_file_store, 'model/results')).register_on_complete(name='model_inferences')

# location of scoring script
experiment_folder = 'model_pipeline'    

rit = 60*60*24

parallel_run_config = ParallelRunConfig(
    source_directory=experiment_folder,
    entry_script = "score.py",
    mini_batch_size = "5",
    error_threshold=10,
    output_action = "append_row",
    environment=batch_env,
    compute_target=compute_target,
    node_count=5,
    run_invocation_timeout=rit,
    process_count_per_node=1
)

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

2020-12-17 02:26:16,721|ParallelRunStep.ProgressSummary|INFO|112|The ParallelRunStep processed all mini batches. There are 6 mini batches with 30 items. Processed 6 mini batches containing 30 items, 30 succeeded, 0 failed. The error threshold is 1. 
2020-12-17 02:26:16,722|ParallelRunStep.Telemetry|INFO|112|Start concatenating.
2020-12-17 02:26:17,202|ParallelRunStep.FileHelper|ERROR|112|No temp file found. The job failed. A job should generate temp files or should fail before this. Please check logs for the cause.
2020-12-17 02:26:17,368|ParallelRunStep.Telemetry|INFO|112|Run status: Running
2020-12-17 02:26:17,495|ParallelRunStep.Telemetry|ERROR|112|Exception occurred executing job: No temp file found. The job failed. A job should generate temp files or should fail before this. Please check logs for the cause..
Traceback (most recent call last):
  File "/mnt/batch/tasks/shared/LS_root/jobs/**redacted**/mounts/workspaceblobstore/azureml/**redacted**/driver/job.py", line 105, in start
    master.wait()
  File "/mnt/batch/tasks/shared/LS_root/jobs/**redacted**/mounts/workspaceblobstore/azureml/**redacted**/driver/master.py", line 301, in wait
    file_helper.start()
  File "/mnt/batch/tasks/shared/LS_root/jobs/**redacted**/mounts/workspaceblobstore/azureml/**redacted**/driver/file_helper.py", line 206, in start
    self.analyze_source()
  File "/mnt/batch/tasks/shared/LS_root/jobs/**redacted**/mounts/workspaceblobstore/azureml/**redacted**/driver/file_helper.py", line 69, in analyze_source
    raise Exception(message)
Exception: No temp file found. The job failed. A job should generate temp files or should fail before this. Please check logs for the cause.

И в раундах, где он завершается, возвращаются только некоторые записи. Один раз количество возвращенных записей, я думаю, было 25 или 23, а в другой раз - 15.

========== ОБНОВЛЕНИЕ №2: 17.12.2020 ==========

Я удалил одну из своих моделей (моя модель представляет собой весовую смесь из 15 моделей). Я даже очистил свои текстовые поля, удалив все табуляции, новые строки и запятые. Теперь я забиваю 30 файлов, в каждом по 1 записи, и задание иногда завершается, но не возвращает 30 записей. В других случаях он возвращает ошибку и по-прежнему получает ошибку «Нет найденного временного файла».

Не могли бы вы добавить более подробную информацию об обучении. ParallelRunStep использует несколько ядер на одном компьютере. process_count_per_node в PipelineRunConfig используется для определения количества процессов, запускаемых PRS для выполнения задач (мини-пакетов). Например, если установить значение 2, на одном узле будут параллельно выполняться две задачи.

Ram 16.12.2020 17:41

learn.microsoft.com/en-us/azure/machine-learning/…

Ram 16.12.2020 17:45

Смотрите обновления в опубликованном вопросе. Спасибо :)

yeamusic21 16.12.2020 20:44
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
3
672
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Думаю, я сам ответил на свой вопрос. Я думаю, что проблема была с

OutputFileDatasetConfig

Как только я снова переключился на использование

PipelineData

Все снова начало работать. Я думаю, Azure не шутил, говоря, что OutputFileDatasetConfig все еще экспериментальный.

Я до сих пор не понимаю, как мы должны получать результаты конвейера ML Studio из конвейера фабрики данных без OutputFileDatasetConfig? PipelineData выводит результаты в папку на основе идентификатора запуска дочернего шага, так как же фабрика данных должна знать, где получить результаты? Хотелось бы услышать любые отзывы, которые могут быть у кого-то. Спасибо :)

== Обновление ==

Чтобы получить результаты конвейера ML Studio из конвейера фабрики данных, ознакомьтесь с разделом Получение результатов из конвейера ML Studio в конвейере фабрики данных

== Обновление №2 ==

https://github.com/Azure/azure-sdk-for-python/issues/16568#issuecomment-781526789

Привет @yeamusic21, спасибо за отзыв, в текущей версии OutputDatasetConfig не может работать с ParallelRunStep, мы работаем над исправить это.

Другие вопросы по теме