Поделиться через


Настройка CNTK в Linux

CNTK конфигурации сборки и тестирования рабочей среды

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

CNTK как контейнер Docker

Перед дальнейшим перемещением можно рассмотреть возможность развертывания CNTK в качестве контейнера Docker. Прочтите соответствующий раздел.

Текущие ограничения и меры предосторожности

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

Примечание

На этой странице предполагается, что вы пытаетесь создать главную ветвь CNTK.

Ожидаемые расположения компонентов в скриптах configure и Makefile

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

configure ищет все компоненты зависимостей среди путей, перечисленных в переменной, определенной в default_path_list скрипте.

Важно!

Если вы хотите изменить default_path_list переменную, configure чтобы добавить пользовательский путь для определенного компонента зависимостей, обязательно проверьте раздел корреспондента Makefile. В противном случае могут возникнуть ошибки сборки из-за невозможности поиска файлов INCLUDE, библиотек и т. д.

Методы установки и пути компонентов зависимостей

Ниже перечислены все компоненты зависимостей, необходимые для сборки CNTK, и объясним, как их установить. Мы понимаем, что существует множество других способов получить те же компоненты. Однако если вы предпочитаете альтернативный способ установки, убедитесь, что вы получаете то же самое, так как часто альтернативные источники установки, а именно пакеты сетевого распространения (например, Debian, RPM и т. д.) содержат старые версии программного обеспечения, пропускают некоторые библиотеки и т. д. В некоторых разделах ниже мы специально рассмотрим эти ограничения, но примите его в качестве общей меры предосторожности.

Использование make -j

В большинстве разделов мы рекомендуем использовать make -j команду для вызова параллельных заданий сборки и, таким образом, повышения скорости процесса сборки. Однако следует помнить, что в некоторых системах и особенно на виртуальных машинахmake -j может возникнуть ошибка "Нехватка памяти". Если вы столкнулись с этим, просто используйте "обычный" make или ограничьте количество заданий, которые выполняются одновременно (два одновременных задания обычно работают для большинства систем — используйте команду make -j 2).

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

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

Теперь давайте перейдем к настройке.

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

64-разрядная ОС

Для использования CNTK требуется 64-разрядная установка Linux.

Компилятор C++

Убедитесь, что в вашей установке есть компилятор C++. Многие дистрибутивы по умолчанию не включают его. Сведения о том, как проверить и получить компилятор C++, см. в документации по платформе.

Пример: для Ubuntu выполните следующую команду:

dpkg --list | grep compiler

Если в выходных данных не отображается что-то подобное

g++-5 5.4.0-6ubuntu1~16.04.5 amd64 GNU C++ compiler

затем компилятор C++ не установлен. Если у вас ubuntu 1604, установите gcc 5.4 с помощью:

sudo apt-get install g++

Git

Установите Git в систему, как описано здесь.

MKL

По умолчанию CNTK математическая библиотека — библиотека ядра Intel Math (Intel MKL). Следуйте инструкциям на этой странице , чтобы установить ее

Открытие MPI

Установите библиотеку интерфейса open Message Passing Interface (Open MPI).

Рекомендуется установить из источников, как описано ниже, так как многие пакеты распространения содержат более старые версии и пропускают библиотеки, необходимые для CNTK. Текущее требование к версии Open MPI CNTK — не менее 1.10. Проверьте наличие более старых версий в системе и удалите их или убедитесь, что (например, символические ссылки), которые CNTK процедура сборки использует требуемую версию. В противном случае может оказаться трудно отладить ошибки сборки, как можно увидеть в этой записи.

  • Получите источники установки:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
  • Распаковка, сборка и установка Open MPI (в /usr/local/mpi этом примере):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
  • Добавьте следующую переменную среды в текущий сеанс и профиль .bashrc (добавьте новый путь, убедитесь, что эта версия используется в отличие от версии по умолчанию, доступной через ОС):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH

Protobuf

Для сериализации используются буферы протокола. Для установки выполните следующие действия.

  • Установка необходимых пакетов с помощью
sudo apt-get install autoconf automake libtool curl make g++ unzip
  • Скачивание и распаковка источников protobuf
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
  • Компиляция protobuf
cd protobuf-3.1.0
./autogen.sh
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC --disable-shared --prefix=/usr/local/protobuf-3.1.0
make -j $(nproc)
sudo make install

ZLIB

Zlib сегодня является частью многих популярных дистрибутивов Linux, поэтому с высокой вероятностью, что она предварительно установлена. Однако обратите внимание, что для libzip требуется zlib версии 1.1.2 или более поздней , и обычно это не предустановлено. Zlib необходимо установить перед сборкой Boost ниже.

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

Пример: для Ubuntu используйте следующую команду:

sudo apt-get install zlib1g-dev

LIBZIP

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

Обратите внимание, что следующая процедура установит libzip в /usr/local. Именно здесь CNTK процедура сборки ожидает ее (дополнительные сведения см. в начале этой страницы). Если вы хотите установить libzip на другой путь, см. инструкции в INSTALL файле в корневой папке распространения libzip. Однако будьте осторожны, что в этом случае необходимо вручную изменить configure И Makefile CNTK для поддержки этого пути.

Используйте следующие команды:

wget http://nih.at/libzip/libzip-1.1.2.tar.gz
tar -xzvf ./libzip-1.1.2.tar.gz
cd libzip-1.1.2
./configure
make -j all
sudo make install

Добавьте следующую переменную среды в текущий сеанс и профиль .bashrc :

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

Библиотека Boost

Библиотека Boost является необходимым условием для создания Microsoft Cognitive Toolkit. Чтобы установить библиотеку Boost в системе, выполните следующие действия.

sudo apt-get install libbz2-dev
sudo apt-get install python-dev

wget -q -O - https://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.gz/download | tar -xzf - 
cd boost_1_60_0 
./bootstrap.sh --prefix=/usr/local/boost-1.60.0
sudo ./b2 -d0 -j"$(nproc)" install  

Пакеты, относящиеся к GPU

Если вы планируете использовать CNTK с поддержкой GPU, перейдите на эту страницу, чтобы установить и настроить среду соответствующим образом.

OPTIONAL. ГЛОТОК.

Если вы хотите воспользоваться преимуществами CNTK из Python, необходимо установить SWIG. SWIG также является обязательным требованием для создания библиотек оценки CNTK для Java. Чтобы установить его, запустите сценарий: [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh. При этом создается установленная версия в папке /usr/local/swig-3.0.10.

OPTIONAL. поддержка CNTK версии 2 Python

В этом разделе описывается создание CNTK версии 2 с поддержкой Python.

Шаг 1. Создание API Python

  • Установите средство SWIG , если это еще не сделано.
  • Установка Anaconda3 4.1.1 (64-разрядная версия)
  • Если у вас уже есть среда CNTK Python (вызываемая cntk-py36cntk-py35илиcntk-py27) можно обновить ее с помощью последних необходимых пакетов с помощью следующих команд:
# For cntk-py36:
conda env update --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py36-environment.yml --name cntk-py36
# For cntk-py35:
conda env update --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py35-environment.yml --name cntk-py35
# For cntk-py27:
conda env update --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py27-environment.yml --name cntk-py27
  • Если у вас еще нет среды CNTK Python, можно выбрать среду Python 2.7, 3.5 или 3.6 на основе CNTK Python среды.
  • Создайте среду Python в существующей Python 3.5 установки Anaconda или Miniconda с помощью одной из следующих команд в зависимости от требуемой версии Python:
# For a Python 3.6 based version:
conda env create --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py36-environment.yml
# For a Python 3.5 based version:
conda env create --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py35-environment.yml
# For a Python 2.7 based version:
conda env create --file [CNTK clone root]/Scripts/install/linux/conda-linux-cntk-py27-environment.yml

Примечание. Убедитесь, что среда Python обновлена или создана выше для остальных инструкций. Например, если у вас есть среда на основе Python версии 3.5, которая вызывается, выполните cntk-py35 следующую команду:

source activate cntk-py35

Аналогичным образом, для среды на основе Python версии 3.6 или 2.7.

Шаг 2. Удаление предыдущего пакета CNTK

  • Если вы ранее установили любую версию пакета pip-package CNTK на компьютере, удалите ее, выполнив следующую команду:pip uninstall cntk

Шаг 3. Сборка пакета Python

  • Чтобы настроить сборку с помощью Python, включите этот параметр при запускеconfigure:
--with-swig[=directory]

и одно из следующих элементов (что бы ни применялось к вашей среде):

--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
  • На этом этапе поддерживаются только сборки выпуска. Например, если вы установили SWIG и /usr/local/swig-3.0.10 среду Python, укажите $HOME/anaconda3/envs/cntk-py35 следующие дополнительные параметрыconfigure:
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
  • После этого запустите так, как обычно, что создаст модуль CNTK Python внутриbindings/python/cntk, а также создаст пакет (WHL) во вложенной папке Python выходной папки сборки (например, build/gpu/release/python).
cd [CNTK clone root]
export PYTHONPATH=$PWD/bindings/python:$PYTHONPATH
cd [CNTK clone root]/bindings/python
export LD_LIBRARY_PATH=$PWD/cntk/libs:$LD_LIBRARY_PATH

Примечание

В отличие от установки пакета Pip, здесь мы загрузим модуль CNTK из клона репозитория CNTK, а не как установленный пакет в среде Python. (Следовательно, разница в настройке PYTHONPATH)

Шаг 4. Проверка установки

Python

  • Запустите Python примеры из каталогов или [CNTK clone root]/Examples каталогов[CNTK clone root]/Tutorials, чтобы проверить установку. Например, перейдите в папку [CNTK clone root]/Tutorials/NumpyInterop и выполните команду python FeedForwardNet.py. В консоли должны появиться следующие выходные данные:
Minibatch: 0, Train Loss: 0.7915553283691407, Train Evaluation Criterion: 0.48

Minibatch: 20, Train Loss: 0.6266774368286133, Train Evaluation Criterion: 0.48

Minibatch: 40, Train Loss: 1.0378565979003906, Train Evaluation Criterion: 0.64

Minibatch: 60, Train Loss: 0.6558118438720704, Train Evaluation Criterion: 0.56

OPTIONAL. OpenCV

CNTK 2.2 требуется установить Компьютерное зрение с открытым кодом (OpenCV), но это необязательно после CNTK 2.3. Следуйте инструкциям на этой странице , чтобы установить ее

OPTIONAL. Java

Чтобы создать привязки Java для библиотеки оценки CNTK, установите средство SWIG, если это еще не сделано. Кроме того, требуется пакет средств разработки Java (JDK). В настоящее время используется 64-разрядная версия OpenJDK 8.

Сценарий настройки предоставляет --with-jdk параметр для указания каталога JDK вручную, если он не найден по умолчанию.

Получение исходного кода CNTK

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

Используйте Git для клонирования репозитория CNTK и доступа к исходному коду:

git clone --recursive https://github.com/Microsoft/cntk
cd cntk

Submodule Multiverso используется для включения DataParallelASGD для обучения.

Дополнительные Если вам не нужна поддержка DataParallelASGD, передайте параметр --asgd=no в команду настройки.

Сборка CNTK

Для сборки CNTK используйте следующие команды (предполагается, что репозиторий CNTK был клонирован в~/Repos/cntk):

cd ~/Repos/cntk
mkdir build/release -p
cd build/release
../../configure

Убедитесь, что выходные configure данные соответствуют пакетам, установленным в предыдущих разделах. Т. е. убедитесь, что обнаруженА configure ошибка CUDA при установке и т. д.

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

make -j all

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

make -j"$(($(nproc)  - 2))" all

Если вы хотите быть абсолютно безопасным, просто используйте 1 ядро:

make all

Это должно создать сборку выпуска CNTK. Если при вызове вызова configureвы хотите получить отладочную сборку, используйте следующий параметр:

../../configure --with-buildtype=debug

Быстрый тест функциональности сборки CNTK

Чтобы убедиться, что CNTK работает правильно в системе, можно быстро запустить пример из руководства по Hello World — логистическая регрессия. Этот пример обучает простую сеть и может быть направлен на использование ЦП или GPU, что помогает быстро обеспечить правильную работу CNTK.

Ниже предполагается, что репозиторий CNTK клонирован ~/Repos/cntk и build/release использовался в качестве вложенного каталога для сборки.

  • Укажите путь к двоичным файлам CNTK и перейдите в Tutorials/HelloWorld-LogisticRegression каталог:
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression

Сначала попробуйте пример:

cntk configFile=lr_bs.cntk makeMode=false

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

Попытка CNTK с GPU

Если вы создали CNTK для использования GPU, попробуйте использовать GPU, выполнив следующие команды:

cntk configFile=lr_bs.cntk makeMode=false deviceId=auto

В начале выходных данных должна появиться строка подтверждения использования GPU:

Model has 9 nodes. Using GPU 0.

Обратите внимание, что идентификатор GPU может отличаться. Параметр deviceId определяет, какой процессор следует использовать для вычислений.

  • deviceId=-1 означает использование ЦП. Значение по умолчанию
  • deviceId=X где X является целым числом >=0 означает использование GPU X, т. е. означает GPU 0 и т. deviceId=0 д.
  • deviceId=auto означает использование GPU, автоматическое выбор GPU

Участие в CNTK коде

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

Следующие шаги