Udostępnij za pośrednictwem


Konfigurowanie CNTK w systemie Linux

konfiguracja kompilacji i testowania w środowisku produkcyjnym CNTK

CNTK można pomyślnie uruchomić w wielu konfiguracjach systemu Linux, ale jeśli chcesz uniknąć możliwych problemów ze zgodnością, możesz zapoznać się z konfiguracją CNTK kompilacji i testowania w środowisku produkcyjnym, w której znajduje się lista wszystkich używanych składników zależności i wersji składników.

CNTK jako kontener platformy Docker

Przed przejściem dalej możesz rozważyć wdrożenie CNTK jako kontenera platformy Docker. Przeczytaj odpowiednią sekcję.

Bieżące ograniczenia i środki ostrożności

Przed kontynuowaniem konfiguracji systemu przeczytaj uważnie tę sekcję. Poniższe informacje mogą zaoszczędzić dużo czasu. W przeciwnym razie można poświęcić na debugowanie błędów kompilacji.

Uwaga

Na tej stronie założono, że próbujesz skompilować gałąź główną CNTK.

Oczekiwane lokalizacje składników w skryptach konfiguracji i pliku reguł programu Make

Dzisiaj configure i Makefile skrypty obsługują tylko ograniczony zestaw ścieżek instalacji dla wszystkich składników zależności wymienionych w tej sekcji. Wiemy, że jest to ograniczenie i wkrótce go naprawi (także jeśli czujesz się jak ulepszyć te skrypty i przesłać proponowane zmiany twoja pomoc jest mile widziana i bardzo doceniana).

configure Szuka wszystkich składników zależności wśród ścieżek wymienionych w default_path_list zmiennej zdefiniowanej w skry skrycie.

Ważne

Jeśli chcesz zmodyfikować default_path_list zmienną w pliku w configure celu dodania ścieżki niestandardowej dla określonego składnika zależności, sprawdź sekcję korespondenta w pliku Makefile. W przeciwnym razie mogą wystąpić błędy kompilacji z powodu niemożności znalezienia plików INCLUDE, bibliotek itp.

Metody instalacji i ścieżki składników zależności

Poniżej wymieniono wszystkie składniki zależności wymagane do utworzenia CNTK i wyjaśniliśmy, jak je zainstalować. Rozumiemy, że istnieje wiele innych sposobów uzyskiwania tych samych składników. Jeśli jednak wolisz alternatywny sposób instalacji, upewnij się, że masz to samo, ponieważ często alternatywne źródła instalacji, a mianowicie pakiety dystrybucji sieci (np. Debian, RPM itp.) zawierają starsze wersje oprogramowania, przegapić niektóre biblioteki itp. W niektórych sekcjach poniżej opisano te ograniczenia, ale należy podjąć je jako ogólne środki ostrożności.

Użycie make -j

W większości sekcji zalecamy używanie make -j polecenia do wywoływania równoległych zadań kompilacji, a tym samym zwiększenia szybkości procesu kompilacji. Należy jednak pamiętać, że w niektórych systemach, a zwłaszcza na maszynach wirtualnych używających programu make -j , mogą powodować błędy braku pamięci. W przypadku wystąpienia tego błędu wystarczy użyć "zwykłego" make lub ograniczyć liczbę zadań uruchamianych jednocześnie (dwa jednoczesne zadania zwykle działają dla większości systemów — użyj polecenia make -j 2).

Jednoczesne instalowanie różnych wersji tych samych pakietów programistycznych

Należy zachować ostrożność w przypadku, gdy chcesz mieć kilka instalacji niektórych pakietów programistycznych wymienionych poniżej w tym samym systemie. Może to spowodować bardzo trudne debugowanie błędów kompilacji, jak widać w tym wpisie.

Teraz przejdźmy do konfiguracji.

Jeśli chcesz wiedzieć, jaka konfiguracja wymagań wstępnych jest używana w środowisku produkcyjnym CNTK, tj. czego używamy wewnętrznie do kompilowania i testowania, zobacz tę sekcję

64-bitowy system operacyjny

Do korzystania z CNTK potrzebna jest 64-bitowa instalacja systemu Linux.

Kompilator C++

Upewnij się, że instalacja ma kompilator języka C++. Wiele dystrybucji nie obejmuje ich domyślnie. Zapoznaj się z dokumentacją platformy, aby dowiedzieć się, jak sprawdzić i uzyskać kompilator języka C++.

Przykład: w systemie Ubuntu uruchom następujące polecenie:

dpkg --list | grep compiler

jeśli w danych wyjściowych nie widzisz czegoś takiego jak

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

nie zainstalowano kompilatora języka C++. Jeśli masz system Ubuntu 1604, zainstaluj bibliotekę gcc 5.4 za pomocą polecenia:

sudo apt-get install g++

Git

Zainstaluj usługę Git w systemie zgodnie z opisem w tym miejscu.

MKL

Domyślną biblioteką matematyczną CNTK jest biblioteka Intel Math Kernel Library (Intel MKL). Postępuj zgodnie z tą stroną , aby ją zainstalować

Otwórz interfejs MPI

Zainstaluj bibliotekę Open Message Passing Interface Library (Open MPI).

Zalecamy instalowanie ze źródeł zgodnie z poniższym opisem, ponieważ wiele pakietów dystrybucyjnych zawiera starsze wersje i pomija biblioteki wymagane przez CNTK. Bieżące CNTK wymaganie dotyczące wersji open MPI wynosi co najmniej 1.10. Sprawdź, czy w systemie masz starsze instalacje wersji, a jeśli to zrobisz, odinstaluj je lub upewnij się (na przykład za pośrednictwem linków symbolicznych), które CNTK procedura kompilacji korzysta z wymaganej wersji. W przeciwnym razie może być trudno debugować błędy kompilacji, jak widać w tym wpisie.

  • Pobierz źródła instalacji:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
  • Rozpakowywanie, kompilowanie i instalowanie interfejsu OPEN MPI (w /usr/local/mpi tym przykładzie):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
  • Dodaj następującą zmienną środowiskową do bieżącej sesji i profilu .bashrc (wstępne tworzenie nowej ścieżki zapewnia, że ta wersja jest używana w przeciwieństwie do domyślnej wersji dostępnej za pośrednictwem systemu operacyjnego):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH

Protobuf

Do serializacji używamy buforów protokołu. Aby zainstalować, wykonaj następujące kroki:

  • Instalowanie wymaganych pakietów przy użyciu polecenia
sudo apt-get install autoconf automake libtool curl make g++ unzip
  • Pobieranie i rozpakowywanie źródeł protobuf
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
  • Kompilowanie narzędzia 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 jest obecnie częścią wielu popularnych dystrybucji systemu Linux, więc z wysokim prawdopodobieństwem masz go wstępnie zainstalowany. Należy jednak pamiętać, że biblioteka libzip wymaga biblioteki zlib w wersji 1.1.2 lub nowszej i zwykle nie jest ona wstępnie zainstalowana. Przed utworzeniem narzędzia Boost poniżej należy zainstalować bibliotekę zlib.

Zapoznaj się z dokumentacją platformy dotyczącą pobierania wymaganego pakietu zlib lub pobierania go bezpośrednio z witryny internetowej zlib.

Przykład: w przypadku systemu Ubuntu użyj następującego polecenia:

sudo apt-get install zlib1g-dev

LIBZIP

Biblioteka libzip jest dostępna w różnych pakietach dystrybucji sieci, ale odkryliśmy, że wiele z nich zawiera stare wersje. Użycie tych wersji prawdopodobnie spowoduje błędy kompilacji. Dlatego zdecydowanie zalecamy tworzenie biblioteki libzip ze źródeł zgodnie z poniższym opisem.

Należy pamiętać, że poniższa procedura spowoduje zainstalowanie biblioteki libzip w programie /usr/local. Jest to dokładnie miejsce, w którym oczekuje CNTK procedura kompilacji (zobacz początek tej strony, aby uzyskać szczegółowe informacje). Jeśli chcesz zainstalować bibliotekę libzip w innej ścieżce, zobacz instrukcje w pliku w INSTALL katalogu głównym folderu dystrybucji libzip. Należy jednak pamiętać, że w tym przypadku trzeba ręcznie edytować configure AND Makefile CNTK do obsługi tej ścieżki.

Użyj następujących poleceń:

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

Dodaj następującą zmienną środowiskową do bieżącej sesji i profilu .bashrc :

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

Biblioteka boost

Biblioteka Boost jest wymaganiem wstępnym do utworzenia Microsoft Cognitive Toolkit. Wykonaj następujące kroki, aby zainstalować bibliotekę Boost w systemie:

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  

Pakiety specyficzne dla procesora GPU

Jeśli zamierzasz używać CNTK z obsługą procesora GPU, postępuj zgodnie z instrukcjami na tej stronie, aby zainstalować i skonfigurować środowisko.

OPCJONALNE. SWIG.

Jeśli chcesz korzystać z CNTK w języku Python, musisz zainstalować usługę SWIG. SWIG jest również wymaganiem do tworzenia bibliotek oceny CNTK dla języka Java. Aby go zainstalować, uruchom skrypt: [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh. Spowoduje to utworzenie zainstalowanej wersji w folderze /usr/local/swig-3.0.10.

OPCJONALNE. obsługa języka Python CNTK w wersji 2

W tej sekcji opisano sposób tworzenia CNTK w wersji 2 przy użyciu obsługi języka Python.

Krok 1. Tworzenie interfejsów API języka Python

  • Zainstaluj narzędzie SWIG , jeśli jeszcze tego nie zrobiono.
  • Zainstaluj środowisko Anaconda3 4.1.1 (64-bitowe)
  • Jeśli masz już środowisko języka Python CNTK (o nazwie cntk-py36, cntk-py35lub cntk-py27), możesz zaktualizować je przy użyciu najnowszych wymaganych pakietów przy użyciu następujących poleceń:
# 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
  • Jeśli nie masz jeszcze CNTK środowiska języka Python, możesz wybrać język Python w wersji 2.7, 3.5 lub 3.6 CNTK środowisku języka Python.
  • Utwórz wybrane środowisko języka Python w istniejącej instalacji środowiska Python 3.5 Anaconda lub Miniconda przy użyciu jednego z następujących poleceń, w zależności od żądanej wersji języka 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

Uwaga: upewnij się, że środowisko języka Python zostało zaktualizowane lub utworzone powyżej zostało aktywowane w pozostałej części instrukcji. Jeśli na przykład masz środowisko oparte na języku Python 3.5 o nazwie cntk-py35 uruchom następujące polecenie:

source activate cntk-py35

Podobnie w przypadku środowiska opartego na języku Python 3.6 lub 2.7.

Krok 2. Odinstalowanie poprzedniego pakietu CNTK

  • Jeśli wcześniej zainstalowano dowolną wersję pakietu pip-package CNTK na maszynie, odinstaluj go, uruchamiając polecenie:pip uninstall cntk

Krok 3. Kompilowanie pakietu języka Python

  • Aby skonfigurować kompilację przy użyciu języka Python, dołącz tę dwie opcje podczas uruchamiania configurepolecenia :
--with-swig[=directory]

i jeden z następujących elementów (niezależnie od tego, co ma zastosowanie do twojego środowiska):

--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
  • Na tym etapie obsługiwane są tylko kompilacje wydania. Jeśli na przykład zainstalowano bibliotekę SWIG i /usr/local/swig-3.0.10 środowisko języka Python znajduje się pod $HOME/anaconda3/envs/cntk-py35 adresem , podaj następujące dodatkowe parametry:configure
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
  • Następnie uruchom polecenie make tak, jak zwykle, co spowoduje skompilowanie modułu CNTK Python wewnątrzbindings/python/cntk, a także utworzenie pakietu (whl) w podfolderze python folderu danych wyjściowych kompilacji (np. 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

Uwaga

W przeciwieństwie do konfiguracji pokazanej dla instalacji pakietu Pip w tym miejscu załadujemy moduł CNTK z klonowania repozytorium CNTK, a nie jako zainstalowany pakiet w środowisku języka Python. (W związku z tym różnica w konfigurowaniu PYTHONPATHprogramu )

Krok 4. Weryfikowanie konfiguracji

Python

  • Uruchom przykłady języka Python z poziomu [CNTK clone root]/Tutorials katalogu lub [CNTK clone root]/Examples , aby zweryfikować instalację. Na przykład przejdź do folderu [CNTK clone root]/Tutorials/NumpyInterop i uruchom polecenie python FeedForwardNet.py. W konsoli powinny zostać wyświetlone następujące dane wyjściowe:
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

OPCJONALNE. Opencv

CNTK 2.2 wymaga zainstalowania przetwarzanie obrazów open source (OpenCV), ale jest ona opcjonalna po CNTK 2.3. Postępuj zgodnie z tą stroną , aby ją zainstalować

OPCJONALNE. Java

Aby utworzyć powiązania języka Java dla biblioteki oceny CNTK, zainstaluj narzędzie SWIG, jeśli jeszcze tego nie zrobiono. Ponadto wymagany jest zestaw Java Development Kit (JDK). Obecnie używamy 64-bitowego zestawu OpenJDK 8.

Skrypt konfigurowania udostępnia --with-jdk opcję ręcznego określenia katalogu JDK, jeśli nie można go odnaleźć domyślnie.

Pobieranie kodu źródłowego CNTK

Przed kontynuowaniem należy pamiętać, że jeśli planujesz wprowadzenie modyfikacji kodu CNTK, przeczytaj informacje na temat opracowywania i testowania.

Użyj narzędzia Git, aby sklonować repozytorium CNTK i uzyskać dostęp do kodu źródłowego:

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

Moduł podrzędny Multiverso jest używany do włączania funkcji DataParallelASGD na potrzeby trenowania.

Opcjonalne Jeśli nie potrzebujesz obsługi usługi DataParallelASGD, przekaż opcję --asgd=no do polecenia configure.

Tworzenie CNTK

Aby skompilować CNTK, użyj następujących poleceń (przyjęto założenie, że repozytorium CNTK zostało sklonowane do ~/Repos/cntkprogramu ):

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

Upewnij się, że configure dane wyjściowe odpowiadają pakietom zainstalowanym w poprzednich sekcjach. Tj. upewnij się, że configure znajduje cudA, jeśli jest zainstalowany, itp.

Wykonaj następujące czynności, aby skompilować CNTK przy użyciu wszystkich rdzeni, aby zminimalizować czas kompilacji. Należy pamiętać, że na niektórych komputerach może to spowodować przeciążenie systemu, co prowadzi do zawieszania się lub przerw podczas kompilacji.

make -j all

Jeśli powyższy komputer przytłocza komputer, spróbuj określić mniej rdzeni. Jeśli na przykład masz więcej niż 2 rdzenie i chcesz zwolnić 2 rdzenie z kompilacji, możesz spróbować wykonać następujące czynności:

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

Jeśli chcesz być absolutnie bezpieczny, wystarczy użyć 1 rdzenia:

make all

Powinno to spowodować utworzenie kompilacji wydania CNTK. Jeśli chcesz uzyskać kompilację debugowania, użyj następującego parametru podczas wywoływania configurepolecenia :

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

Szybki test funkcji kompilacji CNTK

Aby upewnić się, że CNTK działa prawidłowo w systemie, możesz szybko uruchomić przykład z samouczka Hello world — regresja logistyczna. W tym przykładzie trenuje prostą sieć i można przekierować do korzystania z procesora CPU lub procesora GPU, co pomaga szybko zagwarantować, że CNTK działa prawidłowo.

Poniżej przyjęto założenie, że repozytorium CNTK jest klonowane do ~/Repos/cntk i build/release używane jako podkatalog kompilacji.

  • Podaj ścieżkę do plików binarnych CNTK i przejdź do Tutorials/HelloWorld-LogisticRegression katalogu:
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression

Najpierw wypróbuj przykład:

cntk configFile=lr_bs.cntk makeMode=false

Jeśli przykładowe przebiegi, tj. jeśli nie ma żadnych komunikatów o błędach, dane wyjściowe będą najpierw związane z odczytywaniem konfiguracji, a następnie dane wyjściowe rzeczywistego trenowania sieci.

Próba CNTK za pomocą procesora GPU

Jeśli utworzono CNTK na potrzeby użycia procesora GPU, spróbuj użyć procesora GPU, wykonując następujące polecenia:

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

W pobliżu początku danych wyjściowych powinien zostać wyświetlony wiersz potwierdzający, że procesor GPU został użyty:

Model has 9 nodes. Using GPU 0.

Należy pamiętać, że identyfikator procesora GPU może być inny. Parametr deviceId definiuje procesor, który ma być używany do obliczeń.

  • deviceId=-1 oznacza użycie procesora CPU. Wartość domyślna
  • deviceId=X gdzie X jest liczbą całkowitą >=0 oznacza użycie procesora GPU X, tj. deviceId=0 oznacza procesor GPU 0 itp.
  • deviceId=auto oznacza użycie procesora GPU, wybranie procesora GPU automatycznie

Współtworzenia kodu CNTK

Jeśli planujesz modyfikacje kodu, przeczytaj informacje dotyczące tworzenia i testowania.

Następne kroki