Как Я Придумал И Применил Формат Хранения Результатов Экспериментов Measurelook

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

Раньше процесс выглядел так:

  1. Алгоритм готов.

  2. Запуская эксперимент, выходные данные попадают в журнал.

  3. Перенос данных в Excel.
  4. Постобработка: разделение, группировка, сортировка.

  5. Строим график, а он искривленный – ошибка эксперимента, переходим к шагу 1.
Первая проблема заключалась в том, что простое наблюдение за тем, как прошел эксперимент, занимало много времени.

Ладно, справились, графики построили, проходит время, готовим публикацию и оказывается, что в результатах экспериментов не сохранились некоторые параметры запуска алгоритма.

Я не заметил.

Это вторая проблема — хранение метаданных об эксперименте.

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

Да, графика готова, но мы еще кое-что перенесем вручную, перекрасим здесь, добавим цвета здесь.

Каждый раз, когда поступают новые данные, этот процесс приходится повторять.

Третья проблема заключается в том, что перестановка расписаний должна быть полностью автоматизирована.

Для решения поднятых проблем я придумал формат хранения данных в JSON и назвал его Measurelook. В этой статье я расскажу о Measurelook и его применении при подготовке научной публикации.



Как я придумал и применил формат хранения результатов экспериментов Measurelook



Основы – формат и просмотрщик

Формат и средство просмотра — два ключевых компонента Measurelook. Формат описывает схему хранения экспериментальных данных.

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

Вы загружаете в него файл с экспериментальными данными и просмотрщик рисует из него графики.

Средство просмотра также включает в себя валидатор и мигратор.

Валидатор проверяет корректность загруженного файла с помощью JSON Schema. Мигратор автоматически обновляет версию файла эксперимента.

С одной стороны, это обеспечивает обратную совместимость с текущей версией просмотрщика.

С другой стороны, вам не обязательно обновлять исходники до новой версии формата, если старая вас устраивает. Формат и просмотрщик работают вместе, но созданы для разных целей.

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

Программа просмотра создана для визуализации простых данных.

Он строит двумерные графики, но не трехмерные и более.

В описании формата я укажу, что формат может хранить, а что нет для просмотра.



Формат измерения

Measurelook описывает структуру файла JSON для хранения информации о вычислительном эксперименте.

Мета — произвольный JSON-объект для хранения данных об эксперименте.

Примеры данных: название реализации алгоритма, параметры компиляции, параметры аппаратной и программной среды, название набора данных.

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

Примечание.

Программа просмотра в настоящее время не может обрабатывать произвольные метаданные.

Предполагается, что все метаданные являются строками.

Пример:

  
  
  
   

{ "meta": { "Algorithm implementation name": "md_cluster4_4", "dataset": ".

/datasets/power.csv", "COMPILE_COMPILER_VERSION": "Intel(R) C++ gcc 4.4 mode", "env_core_number": "24", "env_proc_model": "model name: Intel(R) Xeon(R) CPU X5680 @ 3.33GHz", "max": 35840, "min": 5120, "step": 5120, "dataLoadingTime": 0.062945, "Openmp thread number": 24 } }

Параметры алгоритма .

Раньше мое представление об экспериментах было несколько наивным — меняем один параметр, измеряем другой, строим график.

Ну да ладно, меняем одно, измеряем несколько, строим несколько графиков.

Но когда я прочитал диссертацию А.

М.

Теплов.

Изменилась концепция «Анализ масштабируемости параллельных приложений на основе суперкомпьютерных технологий совместного проектирования».

В его исследовании строятся графики для двух переменных параметров и одного измеримого.

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

Соответственно, это должна быть визуализирована поверхностью в трехмерном пространстве.

Я решил, что это важное обобщение, и выделил три группы параметров алгоритма: константы, переменные параметры и измеримые параметры.

Постоянный это параметр алгоритма, который не меняется в ходе эксперимента.

Константа описывается тройкой: имя, единицы измерения, значение.

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

Пример: измерение набора данных.

Изменяемый параметр это параметр алгоритма, который меняется в ходе эксперимента.

Описывается парой: имя, единицы измерения.

Пример: объем входных данных, количество потоков.

Измеряемый параметр это параметр алгоритма, который измеряется в ходе эксперимента.

Раньше его тоже описывали парой: имя, единицы измерения.

Позже было добавлено разделение на фиксированные и косвенные параметры.

Фиксированный параметр — это величина, непосредственно измеренная в ходе эксперимента.

Пример: время загрузки данных, время работы алгоритма.

Косвенный параметр – это параметр, рассчитываемый как сумма значений фиксированных параметров.

Для них указан список фиксированных параметров.

Пример: общее время работы алгоритма представляет собой сумму времени загрузки данных и времени работы алгоритма.

Примечание: на данный момент просмотрщик может строить графики только для одного переменного параметра и нескольких измеряемых.

Случай с двумя переменными параметрами необходимо изобразить в виде поверхности в трехмерном пространстве или преобразовать в серию графиков в двумерном пространстве путем преобразования одного переменного параметра в измеримый.

Это осуществимо, но у меня не было такой необходимости.

Примеры:

{ "constantParams": [{ "name": "dimensionality", "units": "natural number", "value": 3 }], "changedParams": [{ "name": "arraySize", "units": "natural number" }], "measuredParams": [{ "name": "calcDistMatrix_duration", "units": "seconds", "type": "direct" }, { "name": "pamTotal_duration", "units": "seconds", "type": "indirect", "sumOf": ["pamBuild_duration", "pamSwap_duration"] }], }

После описания параметров эксперимента переходим к измерения .

Структура протокола измерений:

  • MeasureKey, string — уникальный ключ каждого измерения.

    Рекомендуется собирать его как набор значений всех изменяемых параметров и номера пробега.

  • passId,number — номер запуска.

  • измененоParams.name,номер — значения всех изменяемых параметров, зафиксированных во время прогона.

  • MeasureParams.name,number — значения всех измеряемых параметров, полученные в ходе прогона.

  • raw, object — произвольные данные запуска, которые вы хотите сохранить.

    Например, для того, чтобы в дальнейшем перепроверять значения измеряемых параметров.

Пример:

{ "measures": { "5120_0": { "measureKey": "5120_0", "raw": { }, "passId": 0, "arraySize": 5120, "calcDistMatrix_duration": 0.033690, "pamBuild_duration": 0.054846, "pamSwap_duration": 0.199832, "iterationCount": 5, "avgIterationTime_duration": 0.039966 } } }

Другие значения:
  • версия, строка — версия формата.

    В системе имеется встроенный мигратор, который автоматически обновляет файлы старого формата на новый для обеспечения обратной совместимости.

  • name, string — название эксперимента.

    Добавлен в формат, но в данный момент не используется программой просмотра.

  • временная метка, строка — время эксперимента.

    Указывается в свободной форме.

    Добавлен в формат, но в данный момент не используется программой просмотра.

Пример:

{ "version": "0.3.0", "name": "PAM performance 1", "timestamp": "27.11.2017 22:33:44", }



Зритель

Зритель Это веб-страница, на которой отображается основная информация об эксперименте и позволяет просматривать основные графики.

Реализованные функции:

  • Отображение графика для каждого запуска
  • Отображать графики по среднему и/или медианному значению
  • Выбор любого подмножества изменяемых параметров для рендеринга
  • Замена значений изменяемых параметров их логарифмами
  • Отображает текущие отрендеренные данные в таблице с возможностью загрузки CSV.
  • И самая важная функция — вставка результатов экспериментов из буфера обмена.

    Очень удобно во время отладки.



От данных к окончательным графикам

JSON — обычное дело, формат простой.

Я считаю, что организовать вывод данных в таком виде можно во многих языках программирования.

Для себя я сделал вспомогательный принтер на C, используя bstring. Он опубликован вместе с примером использования на Github (см.

ссылки).

На этом я считаю, что завершил вопрос «Как это сделатьЭ» часть.

и переходим к вопросу «Что с этим делатьЭ» часть.

Как было у меня, там много файлов и результатов измерений.

Нам нужно обработать их в красивую графику.

Я сделал это следующим образом:

  1. Программа nodejs считывает данные и выполняет постобработку.

    Например, он преобразует время работы алгоритма в ускорение.

  2. Называется шаблонизатор Mustache. Ему дается шаблон программы на R для построения графа, в который встраиваются наши данные.

    В результате мы получаем программу на R, рисующую нужный граф.

  3. Программа R выполняется, и ее выходные данные сохраняются в векторном формате svg.
  4. svg преобразуется с помощью Inkscape в окончательное представление: изображение pdf для статьи или изображение png для презентации.

Предупреждающие вопросы: Вопрос: Почему R, а не d3.js? О: Потому что раньше у меня было мало опыта работы с R, и потому что программирование d3 субъективно казалось мне слишком низкоуровневым.

Вопрос: Почему R сохраняет формат SVG, а не только PDF и PNG? О: Конечно, может, но когда я попробовал, PDF-файл попытался распечатать разумным способом с использованием шрифтов.

Видимо кириллицу ему найти не удалось и графики вышли без надписей.

Так что да, еще одна дополнительная программа, но она гарантированно будет работать, и я больше доверяю качеству конвертации Inkscape. Из своего большого репозитория для рисования 8 типов графиков я сделал небольшой, рисующий один тип, и опубликовал его на GitHub (см.

ссылки).



Заключение

Проект Measurelook решил поставленные перед ним задачи — организацию хранения данных вычислительных экспериментов и простой инструмент предварительного просмотра.

Это также послужило основой для решения третьей проблемы — полностью автоматизированной перестройки графиков.



Ссылки

  1. Онлайн-просмотрщик
  2. Репозиторий со сборками средства просмотра Measurelook
  3. Репозиторий с принтером Measurelook на C + пример использования
  4. Репозиторий с примером отрисовки итоговых графиков с помощью Measurelook, R и Inkscape.
  5. Исходный код средства просмотра Measurelook (не основной проект, см.

    Supplies.md)

Теги: #Хранение данных #Высокая производительность #Эксперименты #Визуализация данных #обработка данных #производительность #визуализация
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.