Как пометить научный инструмент обработки данных, чтобы обеспечить повторяемость - PullRequest
5 голосов
/ 14 июля 2010

мы разрабатываем инструмент обработки данных для извлечения некоторых научных результатов из заданного набора необработанных данных.В науке о данных очень важно, чтобы вы могли повторно получить свои результаты и повторить вычисления, которые привели к набору результатов

Поскольку инструмент развивается, нам нужен способ выяснить, какая редакция / сборканаш инструмент сгенерировал данный набор результатов и как найти соответствующий источник, из которого был построен инструмент.

Инструмент написан на C ++ и Python;Склейка частей C ++ с использованием Boost :: Python.Мы используем CMake в качестве системы сборки, генерирующей Make-файлы для Linux.В настоящее время проект хранится в репозитории Subversion, но некоторые из нас уже используют git resp.hg, и мы планируем перенести весь проект на один из них в самое ближайшее время.

Каковы наилучшие практики в подобном сценарии для получения уникального сопоставления между исходным кодом, двоичным файлом и набором результатов?

Идеи, которые мы уже обсуждаем:

  • Каким-то образом вводится глобальный номер редакции
  • Использование генератора номеров сборок
  • Сохранение всего исходного кода внутрисам исполняемый файл

Ответы [ 2 ]

3 голосов
/ 15 июля 2010

Это проблема, над которой я трачу немало времени.К тому, что @VonC уже написал, позвольте мне добавить несколько мыслей.

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

Я не думаю, что ваше предложение о включении всего исходного кода в исполняемый файл, даже если это возможно, необходимо.Действительно, если вы правильно настроили SCM, то одним из важных тестов, которые вы сделали и продолжаете делать, является ваша способность перестраивать «старые» исполняемые файлы по требованию.Вы также должны быть в состоянии определить, какая версия источников использовалась в каждом исполняемом файле и версии.Это должно сделать ненужным включение исходного кода в исполняемый файл.

Тема привязки наборов результатов к вычислениям также, как вы говорите, очень важна.Вот некоторые компоненты решения, которое мы создаем:

Мы отходим от традиционного неструктурированного текстового файла, который характерен для вывода многих научных программ в сторону структурированных файлов, в нашем случае мыВы смотрите на HDF5 и XML, в которых хранятся как данные, представляющие интерес, так и метаданные.Метаданные включают в себя идентификацию программы (и версии), которая использовалась для получения результатов, идентификацию наборов входных данных, параметров задания и множество других вещей.

Мы рассмотрели использованиеСУБД для хранения наших результатов;мы хотели бы пойти по этому пути, но у нас нет ресурсов, чтобы сделать это в этом году, вероятно, не в следующем.Но предприятия используют СУБД по разным причинам, и одна из причин заключается в том, что они могут откатиться назад, предоставить контрольный журнал, и тому подобное.

Мы также внимательно изучаем, какие наборы результатовнужно хранить.Хороший подход - хранить только оригинальные наборы данных, полученные с наших полевых датчиков.К сожалению, для некоторых наших вычислений требуется 1000 секунд процессорного времени, поэтому невозможно воспроизвести их ab-initio по требованию.Однако в будущем мы будем хранить гораздо меньше промежуточных наборов данных, чем в прошлом.

Мы также делаем это намного сложнее (я хотел бы думать невозможным, но не уверен, что мы там еще)для пользователей, чтобы редактировать наборы результатов напрямую.Как только кто-то делает это, вся информация о происхождении в мире является неправильной и бесполезной.

Наконец, если вы хотите узнать больше об этой теме, попробуйте поискать в Google по теме «научный процесс» и «происхождение данных».1019 *

РЕДАКТИРОВАТЬ: Это не ясно из того, что я написал выше, но мы изменили наши программы, чтобы они содержали свою собственную идентификацию (мы используем для этого возможности ключевых слов Subversion с расширением или двумя нашимисобственные) и запишите это в любой вывод, который они производят.

1 голос
/ 14 июля 2010

Вам необходимо учитывать подмодули git из hg subrepos .

В этом сценарии рекомендуется использовать родительский репо, который будет ссылаться на:

  • исходники инструмента
  • набор результатов, сгенерированный из этого инструмента
  • в идеале компилятор c ++ (не будет развиваться каждый день)
  • в идеаледистрибутив python (не будет развиваться каждый день)

Каждый из них является компонентом, который является независимым хранилищем (Git или Mercurial).
Одна точная ревизия каждого компонента будет указана ссылкойродительский репозиторий.

Весь процесс представляет собой компонентный подход и является ключевым в использовании SCM (здесь Software Configuration Management) в его самом полном объеме..

...