Настройка 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-py36
cntk-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 коде
Если вы планируете изменения в коде, ознакомьтесь с информацией о разработке и тестировании.
Следующие шаги