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-py35
lubcntk-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
configure
polecenia :
--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ątrz
bindings/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 PYTHONPATH
programu )
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 poleceniepython 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/cntk
programu ):
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 configure
polecenia :
../../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