Лучший способ управлять разделением поездов / тестов / val в AzureML
В настоящее время я использую AzureML с довольно сложными рабочими процессами, включающими большие наборы данных и т. Д., И мне интересно, как лучше всего управлять разделением в результате шагов предварительной обработки. Все мои проекты построены как конвейеры, питаемые зарегистрированными наборами данных. Я хочу иметь возможность отслеживать разделение, чтобы легко извлекать, например, наборы тестов и проверок для целей интеграционного тестирования.
Какой шаблон лучше всего применить там? Регистрируете каждый промежуточный набор как другой набор данных? Прямое получение промежуточных наборов с использованием идентификаторов запуска?...
Thaanks
2 ответа
Хотел бы я получить более последовательный ответ, плюс в том, что вы находитесь на переднем крае, поэтому, если вы найдете шаблон, который работает для вас, вы можете проповедовать его и применять на практике! Надеюсь, вы найдете мои рассуждения ниже ценными.
Во-первых - если вы еще этого не сделали, вам обязательно стоит использовать PipelineData
в качестве промежуточного артефакта для передачи данных ч / б PipelineStep
с. Таким образом можно лечитьPipelineData
как полуэфемерные в том смысле, что они материализуются, если они вам понадобятся, но это не требование, чтобы удерживать каждую версию каждого PipelineData
. Вы всегда можете получить их с помощью обозревателя хранилищ Azure или, как вы сказали, с помощью SDK и спустившись сPipelineRun
объект.
Еще одна рекомендация - разделить рабочий процесс на следующие конвейеры:
- конвейер функций (все соединения, изменения и изменения)
- учебный конвейер
- конвейер оценки (если у вас есть сценарий оценки партии).
Артефакты внутри конвейера PipelineData
, а артефакты между конвейерами будут зарегистрированы наборами данных.
Чтобы на самом деле актуализировать ваш вопрос о связывании разбиений данных вместе с моделями, наша команда боролась с этим - особенно потому, что для каждого поезда, теста, разбиения у нас также есть "дополнительные столбцы", которые содержат либо идентификаторы, либо текущие переменные, которые модель не должен видеть.
В нашей текущей реализации взлома мы регистрируем наш "золотой" набор данных как набор данных машинного обучения Azure в конце конвейера функциональности. Первый шаг нашей программы обучения - этоPythonScriptStep
, "Разделить данные", который содержит наши обучающие, тестовые, разделенные шаги и выводит консервированный словарь как data.pkl
. Затем мы можем распаковать в любое время, когда нам понадобится одно из разделений, и можем снова присоединиться, используя индекс, используя для любых отчетов. Вот суть.
Регистрация предназначена для упрощения совместного использования и повторного использования, чтобы вы могли получать набор данных по его имени. Если вы планируете повторно использовать наборы для тестирования / проверки в других экспериментах, их регистрация имеет смысл. Однако, если вы просто пытаетесь сохранить записи о том, что вы использовали для этого конкретного эксперимента, вы всегда можете найти эту информацию с помощью "Выполнить", как вы предложили.