Skip to content
Valentina edited this page Oct 18, 2023 · 16 revisions

Manual

Introduction

This guide contains a detailed description of the procedure for launching the main scenario of the DLI benchmarking system on remote computing nodes in Docker containers. The example uses Intel Distribution of OpenVINO toolkit 2022.1 to infer deep models. Note that these instructions are also valid for other supported frameworks.

Deployment

This section contains a step-by-step description of the procedure for deploying a DLI system on remote computing nodes using the deployment module included in the system. At the moment, the DLI system supports two modes for launching experiments: experiments will be launched directly in the current environment or in the corresponding Docker container. If the system has already been deployed, you can skip this step.

Deployment in the current environment

Manually deploy the environment on computing nodes. You should follow and step-by-step execute commands from the corresponding Docker files, which are stored in the docker directory, on each computing node. After that, the DLI system will be deployed on each machine in the current environment.

Deployment in docker containers

  1. Prepare a Docker image of the system, which will be remotely deployed on computing nodes. To do this, you need to go to the directory with the Docker files and build the required image, using the instructions that are located in the corresponding docker directory and specifying all the necessary ARG variables from the corresponding Docker file. Save the image to an archive, which will be copied to the required remote nodes.

    docker build -t openvino:2022.1 --build-arg DATASET_DOWNLOAD_LINK=<path>
    docker save openvino:2022.1 > openvino_2022.1.tar
  2. Prepare computing nodes for executing experiments. For convenience, we assume that on each machine with the user itmm a directory /home/itmm/validation is created, which contains all the necessary files for work: the system repository DLI and the repository OpenVINO™ Toolkit - Open Model Zoo. In addition to cloning repositories in the directory, you should create a separate results folder, in which files with the results of experiments will be stored in the future. In addition, it is required to mount shared directories with models and datasets on remote machines in advance. This can be done using the following commands:

    cd ~
    mkdir validation && cd validation
    git clone https://github.com/itlab-vision/dl-benchmark.git --depth 1
    git clone https://github.com/openvinotoolkit/open_model_zoo.git --recursive --branch 2022.1.0 --single-branch --depth 1
    mkdir results
    sudo mount -t cifs -o username=itmm,password=itmm //10.0.32.14/linuxshare /mnt

    Futher, we assume that the address /mnt contains new directories: /mnt/models/ is a directory with models and /mnt/datasets is a directory with datasets for executing a module for assessing the quality of models.

  3. Подготовить конфигурационный файл для модуля удаленного развертывания системы. В текущем эксперименте предполагается наличие трех вычислительных узлов. Для каждого узла имеется IP-адрес (тег IP), логин и пароль для доступа к узлу (теги Login и Password), ОС (тег OS), название рабочей директории с исходными кодами системы бенчмаркинга DLI (тег DownloadFolder) и пути до расшаренных директорий с тестовыми наборами данных и моделями (теги DatasetFolder и ModelFolder). Пример заполненного конфигурационного файла представлен ниже.

    <?xml version="1.0" encoding="utf-8" ?>
    <Computers>
        <Computer>
            <IP>10.0.32.12</IP>
            <Login>itmm</Login>
            <Password>itmm</Password>
            <OS>Linux</OS>
            <DownloadFolder>/home/itmm/validation</DownloadFolder>
            <DatasetFolder>/mnt/datasets</DatasetFolder>
            <ModelFolder>/mnt/models</ModelFolder>
        </Computer>
        <Computer>
            <IP>10.0.32.13</IP>
            <Login>itmm</Login>
            <Password>itmm</Password>
            <OS>Linux</OS>
            <DownloadFolder>/home/itmm/validation</DownloadFolder>
            <DatasetFolder>/mnt/datasets</DatasetFolder>
            <ModelFolder>/mnt/models</ModelFolder>
        </Computer>
        <Computer>
            <IP>10.0.32.16</IP>
            <Login>itmm</Login>
            <Password>itmm</Password>
            <OS>Linux</OS>
            <DownloadFolder>/home/itmm/validation</DownloadFolder>
            <DatasetFolder>/mnt/datasets</DatasetFolder>
            <ModelFolder>/mnt/models</ModelFolder>
        </Computer>
    </Computers>
  4. Запустить модуль автоматического развертывания системы, используя руководство.

    python3 deploy.py -s 10.0.32.15 -l itmm -p itmm \
                      -i ~/dl-benchmark/docker/OpenVINO_DLDT/openvino_22.1.tar \
                      -d /home/itmm/ftp \
                      -n OpenVINO_DLDT \
                      --machine_list deploy_config.xml \
                      --project_folder /home/itmm/validation/dl-benchmark

    Скрипт копирует архив с Docker-образом на FTP-сервер (в данном примере IP-адрес FTP-сервера - 10.0.32.15, после чего уже с FTP-сервера скрипт копирует его на все удаленные узлы, описанные в соответствующем конфигурационном файле, а после развертывает их.

Preparing a configuration file for the benchmark

Для каждого узла можно создать свой конфигурационный файл для запуска экспериментов производительности. Это удобно, когда на одном из них, например, нет GPU (Xeon), и соответственно на такой машине есть смысл запускать эксперименты только на CPU. Создадим конфигурационные файлы, используя руководство. Для примера запустим эксперимент для классической модели alexnet в latency-режиме на всех трех машинах. Отметим, что для валидации производительности моделей используется отдельный закрытый репозиторий с данными itlab-vision-dl-benchmark-data, клонирование которого происходит в процессе развертывания системы в директорию /tmp.

<?xml version="1.0" encoding="utf-8"?>
<Tests>
    <Test>
        <Model>
            <Task>classification</Task>
            <Name>alexnet</Name>
            <Precision>FP32</Precision>
            <SourceFramework>Caffe</SourceFramework>
            <ModelPath>/media/models/public/alexnet/FP32/alexnet.xml</ModelPath>
            <WeightsPath>/media/models/public/alexnet/FP32/alexnet.bin</WeightsPath>
        </Model>
        <Dataset>
            <Name>ImageNET</Name>
            <Path>/tmp/itlab-vision-dl-benchmark-data/Datasets/ImageNET/</Path>
        </Dataset>
        <FrameworkIndependent>
            <InferenceFramework>OpenVINO DLDT</InferenceFramework>
            <BatchSize>1</BatchSize>
            <Device>CPU</Device>
            <IterationCount>1000</IterationCount>
            <TestTimeLimit>180</TestTimeLimit>
        </FrameworkIndependent>
        <FrameworkDependent>
            <Mode>sync</Mode>
            <Extension></Extension>
            <AsyncRequestCount></AsyncRequestCount>
            <ThreadCount></ThreadCount>
            <StreamCount></StreamCount>
            <!-- The following options may be missing -->
            <Frontend></Frontend>
            <InputShape></InputShape>
            <Layout></Layout>
            <Mean></Mean>
            <InputScale></InputScale>
        </FrameworkDependent>
    </Test>
</Tests>

Заметим, что в конфигурационных файлах пути прописываются относительно Docker-контейнера в случае развертывания системы в Docker-окружении и относительно текущего окружения в случае развертывания непосредственно на текущей машине. Конфигурационные файлы предварительно копируются на FTP-сервер, в процессе развертывания системы скрипт копирует конфигурации тестов на соответствующие удаленные машины. Для определенности в примере на FTP-сервере конфигурационные файлы сохраняются по адресу /home/itmm/ftp/remote.

scp benchmark_config_i3.xml [email protected]:/home/itmm/ftp/remote
scp benchmark_config_i7.xml [email protected]:/home/itmm/ftp/remote
scp benchmark_config_tower.xml [email protected]:/home/itmm/ftp/remote

Preparing a configuration file for the accuracy checker

Аналогично создаем конфигурационные файлы для модуля проверки качества работы глубоких моделей. В качестве примера возьмем ту же модель alexnet, что и для системы бенчмаркинга. Заметим, что путь до модели указывается относительно окружения Docker-контейнера в случае развертывания системы в Docker-окружении и относительно текущего окружения в случае развертывания непосредственно на текущей машине, а путь до конфигурационного файла для инструмента проверки качества модели всегда описывается относительно хост-машины.

<?xml version="1.0" encoding="utf-8"?>
<Tests>
    <Test>
        <Model>
            <Task>classification</Task>
            <Name>alexnet</Name>
            <Precision>FP32</Precision>
            <SourceFramework>Caffe</SourceFramework>
            <Directory>/media/models/public/alexnet/FP32</Directory>
        </Model>
        <Parameters>
            <InferenceFramework>OpenVINO DLDT</InferenceFramework>
            <Device>CPU</Device>
            <Config>/home/itmm/validation/open_model_zoo/tools/accuracy_checker/configs/alexnet.yml</Config>
        </Parameters>
    </Test>
</Tests>

Конфигурационный файл копируется на FTP-сервер, впоследствии скрипт развертывания перенесет конфигурации тестов на соответствующие удаленные машины. Допустим, что в текущем примере конфигурационные файлы на FTP-сервере сохраняются по адресу /home/itmm/ftp/remote.

scp accuracy_checker_config_i3.xml [email protected]:/home/itmm/ftp/remote
scp accuracy_checker_config_i7.xml [email protected]:/home/itmm/ftp/remote
scp accuracy_checker_config_tower.xml [email protected]:/home/itmm/ftp/remote

Remote start of experiments

Удаленный запуск экспериментов включает следующую последовательность действий.

  1. Подготовить конфигурационный файл config.xml для модуля удаленного запуска экспериментов, используя руководство, и сохранить его на FTP-сервере по адресу /home/itmm/ftp/remote/. Пример ниже представлен для случая, когда система развернута в Docker-контейнерах. В случае развертывания системы DLI непосредственно на хост-машинах необходимо везде заменить значение тэга <Executor>docker_container</Executor> на <Executor>host_machine</Executor>.

    <?xml version="1.0" encoding="utf-8" ?>
    <Computers>
        <Computer>
            <IP>10.0.32.16</IP>
            <Login>itmm</Login>
            <Password>itmm</Password>
            <OS>Linux</OS>
            <FTPClientPath>/home/itmm/validation/dl-benchmark/src/remote_control/ftp_client.py</FTPClientPath>
            <Benchmark>
                <Config>/home/itmm/ftp/remote/benchmark_config_i3.xml</Config>
                <Executor>docker_container</Executor>
                <LogFile>/home/itmm/validation/log_bench.txt</LogFile>
                <ResultFile>/home/itmm/validation/result_bench_table.csv</ResultFile>
            </Benchmark>
            <AccuracyChecker>
                <Config>/home/itmm/ftp/remote/accuracy_checker_config_i3.xml</Config>
                <Executor>docker_container</Executor>
                <DatasetPath>/media/datasets/</DatasetPath>
                <DefinitionPath>/home/itmm/validation/open_model_zoo/tools/accuracy_checker/dataset_definitions.yml</DefinitionPath>
                <LogFile>/home/itmm/validation/log_ac.txt</LogFile>
                <ResultFile>/home/itmm/validation/result_ac_table.csv</ResultFile>
            </AccuracyChecker>
        </Computer>
        <Computer>
            <IP>10.0.32.12</IP>
            <Login>itmm</Login>
            <Password>itmm</Password>
            <OS>Linux</OS>
            <FTPClientPath>/home/itmm/validation/dl-benchmark/src/remote_control/ftp_client.py</FTPClientPath>
            <Benchmark>
                <Config>/home/itmm/ftp/remote/benchmark_config_i7.xml</Config>
                <Executor>docker_container</Executor>
                <LogFile>/home/itmm/validation/log_bench.txt</LogFile>
                <ResultFile>/home/itmm/validation/result_bench_table.csv</ResultFile>
            </Benchmark>
            <AccuracyChecker>
                <Config>/home/itmm/ftp/remote/accuracy_checker_config_i7.xml</Config>
                <Executor>docker_container</Executor>
                <DatasetPath>/media/datasets/</DatasetPath>
                <DefinitionPath>/home/itmm/validation/open_model_zoo/tools/accuracy_checker/dataset_definitions.yml</DefinitionPath>
                <LogFile>/home/itmm/validation/log_ac.txt</LogFile>
                <ResultFile>/home/itmm/validation/result_ac_table.csv</ResultFile>
            </AccuracyChecker>
        </Computer>
            <Computer>
            <IP>10.0.32.13</IP>
            <Login>itmm</Login>
            <Password>itmm</Password>
            <OS>Linux</OS>
            <FTPClientPath>/home/itmm/validation/dl-benchmark/src/remote_control/ftp_client.py</FTPClientPath>
            <Benchmark>
                <Config>/home/itmm/ftp/remote/benchmark_config_tower.xml</Config>
                <Executor>docker_container</Executor>
                <LogFile>/home/itmm/validation/log_bench.txt</LogFile>
                <ResultFile>/home/itmm/validation/result_bench_table.csv</ResultFile>
            </Benchmark>
            <AccuracyChecker>
                <Config>/home/itmm/ftp/remote/accuracy_checker_config_tower.xml</Config>
                <Executor>docker_container</Executor>
                <DatasetPath>/media/datasets/</DatasetPath>
                <DefinitionPath>/home/itmm/validation/open_model_zoo/tools/accuracy_checker/dataset_definitions.yml</DefinitionPath>
                <LogFile>/home/itmm/validation/log_ac.txt</LogFile>
                <ResultFile>/home/itmm/validation/result_ac_table.csv</ResultFile>
            </AccuracyChecker>
        </Computer>
    </Computers>
  2. Запустить эксперименты удаленно. Для этого необходимо воспользоваться утилитой screen для Linux, которая позволяет создавать фоновые процессы. В результате ее использования можно запустить скрипт с массовыми экспериментами, а после выключить терминал.

    screen -S validation

    В результате выполнения указанной команды создается новое окно validation, в котором можно выполнить удаленный запуск. Теперь для запуска необходимо прописать следующую команду на FTP-сервере:

     python3 remote_start.py -c /home/itmm/ftp/remote/config.xml \
                             -s 10.0.32.15 -l itmm -p itmm \
                             -br benchmark_results.csv \
                             -acr accuracy_checker_results.csv \
                             --ftp_dir /home/itmm/ftp/results

    Таким образом, скрипт пройдется по всем описанным машинам из конфигурационного файла /home/itmm/ftp/remote/config.xml, скопирует соответствующие конфигурационные файлы с описанием экспериментов и запустит их. Для перехода из данной сессии необходимо нажать следующие клавиши: CTRL + A + D. Чтобы вернуться к нашей сессии с запуском экспериментов и узнать статус, необходимо прописать следующую команду:

    screen -R validation

Results

По окончании работы в screen-сессии validation должны выводиться следующие строки:

[ INFO ] Ended process on Linux with id 0
[ INFO ] Ended process on Linux with id 0
[ INFO ] Ended process on Linux with id 0

По завершении экспериментов на FTP-сервере в директории /home/itmm/ftp/results будут храниться csv-таблицы с результатами экспериментов оценки производительности глубоких моделей и проверки качества их работы с каждого удаленного узла, а также обобщенные таблицы benchmark_results.csv и accuracy_checker_results.csv. Данные файлы можно скачать на локальную машину и сконвертировать в HTML- и/или XSLX-формат, с помощью следующих команд.

scp [email protected]:/home/itmm/ftp/results/benchmark_results.csv /tmp
scp [email protected]:/home/itmm/ftp/results/accuracy_checker_results.csv /tmp

cd /tmp/dl-benchmark/src/csv2html
python3 converter.py -t /tmp/benchmark_results.csv -r /tmp/benchmark_results.html -k benchmark
python3 converter.py -t /tmp/accuracy_checker_results.csv -r /tmp/accuracy_checker_results.html -k accuracy_checker

cd /tmp/dl-benchmark/src/csv2xlsx
python3 converter.py -t /tmp/benchmark_results.csv -r /tmp/benchmark_results.xlsx -k benchmark
python3 converter.py -t /tmp/accuracy_checker_results.csv -r /tmp/accuracy_checker_results.xlsx -k accuracy_checker
Clone this wiki locally