Nastavení CNTK v Linuxu
CNTK konfigurace produkčního sestavení a testování
CNTK se může úspěšně spustit v mnoha konfiguracích Linuxu, ale pokud se chcete vyhnout možným problémům s kompatibilitou, můžete se seznámit s konfigurací CNTK Produkční sestavení a testování, kde uvádíme všechny součásti závislostí a verze komponent, které používáme.
CNTK jako kontejner Dockeru
Než budete pokračovat, zvažte nasazení CNTK jako kontejner Dockeru. Přečtěte si odpovídající oddíl.
Aktuální omezení a opatření
Než budete pokračovat v konfiguraci systému, přečtěte si prosím pečlivě tuto část. Následující informace vám můžou ušetřit spoustu času, jinak jste strávili laděním chyb sestavení.
Poznámka
Tato stránka předpokládá, že se pokoušíte sestavit hlavní větev CNTK.
Očekávaná umístění komponent v konfiguracích a skriptech makefile
Dnes configure
a Makefile
skripty podporují pouze omezenou sadu instalačních cest pro všechny součásti závislostí uvedené v této části. Víme, že se jedná o omezení a brzy ho opravíte (pokud se budete cítit jako vylepšení těchto skriptů sami a odešlete navrhované změny , vaše nápověda je vítána a velmi ocení).
configure
vyhledá všechny komponenty závislostí mezi cestami uvedenými v default_path_list
proměnné definované v rámci skriptu.
Důležité
Pokud chcete upravit default_path_list
proměnnou configure
tak, aby se přidala vlastní cesta pro určitou součást závislostí, nezapomeňte zkontrolovat odpovídající oddíl .Makefile
V opačném případě může dojít k chybám sestavení kvůli nemožnosti najít soubory INCLUDE, knihovny atd.
Metody instalace a cesty komponent závislostí
Níže uvádíme všechny součásti závislostí potřebné k sestavení CNTK a vysvětlíme, jak je nainstalovat. Chápeme, že existuje mnoho dalších způsobů, jak získat stejné komponenty. Pokud ale dáváte přednost alternativnímu způsobu instalace, ujistěte se, že získáte stejnou věc, protože poměrně často alternativní instalační zdroje, konkrétně distribuční balíčky sítě (například Debian, RPM atd.), obsahují starší verze softwaru, chybí některé knihovny atd. V některých částech níže tato omezení konkrétně zvýrazňujeme, ale jako obecná opatření ji vezměte.
Využití make -j
Ve většině částí doporučujeme použít make -j
příkaz k vyvolání paralelních úloh sestavení a zvýšení rychlosti procesu sestavení. Mějte však na paměti, že v některých systémech a zejména na virtuálních počítačích používajících make -j
může dojít k chybám nedostatek paměti. Pokud k tomu dojde, stačí použít prostý make
nebo omezit počet spuštěných úloh současně (dvě souběžné úlohy obvykle fungují pro většinu systémů – použijte příkaz make -j 2
).
Souběžná instalace různých verzí stejných vývojových balíčků
V případě, že byste chtěli mít několik instalací některých vývojových balíčků uvedených níže ve stejném systému, buďte velmi opatrní. Může to mít za následek velmi obtížné ladění chyb sestavení, jak je vidět v tomto příspěvku.
A teď přejděme k nastavení.
Pokud chcete vědět, jakou konfiguraci předpokladů se používá v produkčním prostředí CNTK, tj. co interně používáme k vytváření a testování, přečtěte si tuto část.
64bitový operační systém
K použití CNTK potřebujete 64bitovou instalaci Linuxu.
Kompilátor C++
Ujistěte se, že instalace obsahuje kompilátor jazyka C++. Mnoho distribucí ji ve výchozím nastavení nezahrnuje. Informace o kontrole a získání kompilátoru jazyka C++ najdete v dokumentaci k vaší platformě.
Příklad: Pro Ubuntu spusťte následující příkaz:
dpkg --list | grep compiler
pokud ve výstupu se nezobrazuje něco jako
g++-5 5.4.0-6ubuntu1~16.04.5 amd64 GNU C++ compiler
pak není nainstalován kompilátor jazyka C++. Pokud máte Ubuntu 1604, nainstalujte gcc 5.4 pomocí:
sudo apt-get install g++
Git
Nainstalujte Git do systému, jak je popsáno tady.
MKL
Výchozí CNTK matematická knihovna je Intel Math Kernel Library (Intel MKL). Nainstalujte ji podle této stránky .
Otevřít MPI
Nainstalujte knihovnu rozhraní Open Message Passing Interface (Open MPI).
Doporučujeme nainstalovat ze zdrojů, jak je popsáno níže, protože spousta distribučních balíčků obsahuje starší verze a chybí knihovny vyžadované CNTK. Aktuální CNTK požadavek na verzi Open MPI je minimálně 1.10. Zkontrolujte, jestli máte ve svém systému instalace starší verze a jestli je máte, buď je odinstalujte, nebo se ujistěte (například prostřednictvím symbolických odkazů), že CNTK postup sestavení používá požadovanou verzi. Jinak může být obtížné ladit chyby sestavení, jak je vidět v tomto příspěvku.
- Získejte zdroje instalace:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
- Rozbalte, sestavte a nainstalujte Open MPI (v
/usr/local/mpi
tomto příkladu):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
- Přidejte do aktuální relace a profilu
.bashrc
následující proměnnou prostředí (předepište novou cestu, která zajistí, že se tato verze použije na rozdíl od výchozí verze dostupné prostřednictvím operačního systému):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH
Protobuf
Pro serializaci používáme vyrovnávací paměti protokolu. Při instalaci postupujte následovně:
- Instalace požadovaných balíčků pomocí
sudo apt-get install autoconf automake libtool curl make g++ unzip
- Stažení a rozbalení zdrojů protobuf
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
- Kompilace 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 dnes je součástí mnoha oblíbených linuxových distribucí, takže s vysokou pravděpodobností, že máte předinstalovaný. Upozorňujeme však, že libzip vyžaduje zlib verze 1.1.2 nebo novější a obvykle není předinstalovaná. Před sestavením nástroje Boost níže je nutné nainstalovat zlib.
Informace o tom, jak získat požadovaný balíček zlib nebo ho získat přímo zlib, najdete v dokumentaci k vaší platformě.
Příklad: Pro Ubuntu použijte následující příkaz:
sudo apt-get install zlib1g-dev
LIBZIP
libzip je k dispozici v různých distribučních balíčcích sítě, ale zjistili jsme, že mnoho z nich obsahuje staré verze. Při použití těchto verzí pravděpodobně dojde k chybám sestavení. Proto důrazně doporučujeme sestavit libzip ze zdrojů, jak je popsáno níže.
Všimněte si, že následující postup nainstaluje libzip do /usr/local
. Právě tam CNTK postup sestavení očekává (podrobnosti najdete na začátku této stránky). Pokud chcete nainstalovat libzip na jinou cestu, přečtěte si pokyny v souboru v INSTALL
kořenovém adresáři distribuční složky libzip.
Mějte však na pozoru, že v tomto případě musíte ručně upravit configure
And Makefile
of CNTK to support this path.
Použijte následující příkazy:
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
Do aktuální relace a profilu .bashrc
přidejte následující proměnnou prostředí:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
Boost Library
Knihovna Boost je předpokladem pro sestavení Microsoft Cognitive Toolkit. Pokud chcete nainstalovat knihovnu Boost do systému, postupujte takto:
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
Balíčky specifické pro GPU
Pokud máte v úmyslu používat CNTK s podporou GPU, podle této stránky odpovídajícím způsobem nainstalujte a nakonfigurujte prostředí.
VOLITELNÉ. SWIG.
Pokud chcete využívat CNTK z Pythonu, budete muset nainstalovat SWIG.
SWIG je také požadavek na sestavení knihoven pro vyhodnocení CNTK pro Javu.
Pokud ho chcete nainstalovat, spusťte skript: [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh
.
Tím se ve složce /usr/local/swig-3.0.10
vytvoří nainstalovaná verze .
VOLITELNÉ. podpora pythonu CNTK v2
Tato část popisuje, jak sestavit CNTK v2 s podporou Pythonu.
Krok 1: Sestavení rozhraní PYTHON API
- Pokud jste to ještě neudělali, nainstalujte nástroj SWIG .
- Instalace Anaconda3 4.1.1 (64bitová verze)
- Pokud už máte prostředí Pythonu CNTK (označované jako
cntk-py36
,cntk-py35
nebocntk-py27
), můžete ho aktualizovat nejnovějšími požadovanými balíčky pomocí následujících příkazů:
# 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
- Pokud ještě nemáte prostředí CNTK Pythonu, můžete si vybrat mezi prostředím Pythonu 2.7, 3.5 nebo 3.6 CNTK Pythonu.
- V závislosti na požadované verzi Pythonu vytvořte prostředí Pythonu podle toho, jaká je vaše verze Pythonu 3.5 Anaconda nebo Miniconda, a to pomocí jednoho z následujících příkazů:
# 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
Poznámka: Ujistěte se, že je pro zbývající pokyny aktivované prostředí Pythonu aktualizované nebo vytvořené výše.
Pokud máte například prostředí založené na Pythonu 3.5 s názvem cntk-py35
Spustit tento příkaz:
source activate cntk-py35
Podobně platí pro prostředí založené na Pythonu 3.6 nebo 2.7.
Krok 2: Odinstalace předchozího balíčku CNTK
- Pokud jste na svém počítači dříve nainstalovali jakoukoli verzi balíčku CNTK pip-package, odinstalujte ji spuštěním příkazu:
pip uninstall cntk
Krok 3: Sestavení balíčku Pythonu
- Pokud chcete nakonfigurovat sestavení pomocí Pythonu, při spuštění
configure
zahrňte tuto dvě možnost:
--with-swig[=directory]
a jednu z následujících možností (bez ohledu na to, co platí pro vaše prostředí):
--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
- V této fázi se podporují jenom buildy vydané verze. Pokud jste například nainstalovali SWIG do
/usr/local/swig-3.0.10
prostředí Pythonu a nacházíte se na$HOME/anaconda3/envs/cntk-py35
těchto dalších parametrechconfigure
:
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
- Potom spusťte, jak byste normálně udělali, který sestaví modul CNTK Pythonu uvnitř
bindings/python/cntk
a také vytvoří balíček (.whl) v podsložce pythonu výstupní složky sestavení (např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
Poznámka
Na rozdíl od instalace balíčku Pip načteme modul CNTK z klonování úložiště CNTK, ne jako nainstalovaný balíček ve vašem prostředí Pythonu. (Proto také rozdíl v nastavení PYTHONPATH
)
Krok 4: Ověření nastavení
Python
- Spuštěním příkladů Pythonu
[CNTK clone root]/Tutorials
v adresářích nebo[CNTK clone root]/Examples
adresářích ověřte instalaci. Přejděte například do složky[CNTK clone root]/Tutorials/NumpyInterop
a spusťtepython FeedForwardNet.py
. V konzole by se měl zobrazit následující výstup:
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
VOLITELNÉ. OpenCV
CNTK 2.2 vyžaduje instalaci open source Počítačové zpracování obrazu (OpenCV), ale po CNTK 2.3 je nepovinný. Nainstalujte ji podle této stránky .
VOLITELNÉ. Java
Pokud chcete vytvořit vazby Java pro knihovnu vyhodnocení CNTK, nainstalujte nástroj SWIG, pokud jste to ještě neudělali. Vyžaduje se také sada Java Development Kit (JDK). V současné době používáme 64bitovou sadu OpenJDK 8.
Skript konfigurace nabízí --with-jdk
možnost ručního zadání adresáře JDK, pokud ho nelze ve výchozím nastavení najít.
Získání zdrojového kódu CNTK
Než budete pokračovat dál, mějte na paměti, že pokud plánujete provádět úpravy CNTK kódu, měli byste si přečíst informace o vývoji a testování.
Pomocí Gitu naklonujte úložiště CNTK a získejte přístup ke zdrojovému kódu:
git clone --recursive https://github.com/Microsoft/cntk
cd cntk
Podmodule Multiverso se používá pro povolení DataParallelASGD pro trénování.
Volitelné Pokud nepotřebujete podporu DataParallelASGD, předejte možnost --asgd=no
příkazu configure.
CNTK budovy
K sestavení CNTK použijte následující příkazy (předpokládáme, že CNTK úložiště bylo naklonováno na ~/Repos/cntk
):
cd ~/Repos/cntk
mkdir build/release -p
cd build/release
../../configure
Ujistěte se, že configure
výstup odpovídá balíčkům, které jste nainstalovali v předchozích částech. To znamená, že configure
při instalaci najde CUDA atd.
Následujícím postupem sestavíte CNTK pomocí všech jader, abyste minimalizovali čas sestavení. Všimněte si, že v některých počítačích to může zahltit systém, což vede k zablokování nebo přerušení během sestavení.
make -j all
Pokud výše uvedené informace zahltí váš počítač, zkuste zadat méně jader. Pokud máte například více než 2 jádra a chcete zachovat 2 jádra bez sestavení, můžete zkusit:
make -j"$(($(nproc) - 2))" all
Pokud chcete být naprosto bezpečný, stačí použít 1 jádro:
make all
To by mělo vytvořit build verze CNTK. V případě, že chcete získat sestavení ladění, při vyvolání configure
použijte následující parametr:
../../configure --with-buildtype=debug
Rychlý test funkcí sestavení CNTK
Abyste měli jistotu, že CNTK ve vašem systému funguje správně, můžete rychle spustit příklad z kurzu Hello World – Logistická regrese. Tento příklad trénuje jednoduchou síť a může být směrován na použití procesoru nebo GPU, což pomáhá rychle zajistit správné fungování CNTK.
Níže předpokládáme, že CNTK úložiště se naklonuje a ~/Repos/cntk
build/release
používá se jako podadresář sestavení.
- Zadejte cestu k binárním souborům CNTK a přejděte do
Tutorials/HelloWorld-LogisticRegression
adresáře:
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression
Nejprve zkuste příklad:
cntk configFile=lr_bs.cntk makeMode=false
Pokud se ukázka spustí, tj. pokud neexistují žádné chybové zprávy, zobrazí se výstup související nejprve se čtením konfigurace a výstupem skutečného trénování sítě.
Vyzkoušení CNTK pomocí GPU
Pokud jste vytvořili CNTK pro využití GPU, zkuste použít GPU spuštěním následujících příkazů:
cntk configFile=lr_bs.cntk makeMode=false deviceId=auto
Na začátku výstupu by se měl zobrazit řádek potvrzující použití GPU:
Model has 9 nodes. Using GPU 0.
Všimněte si, že ID GPU se může lišit. Parametr deviceId
definuje, jaký procesor se má použít pro výpočet.
-
deviceId=-1
znamená použití procesoru. Výchozí hodnota -
deviceId=X
kde X je celé číslo >=0 znamená použití GPU X, tj.deviceId=0
znamená GPU 0 atd. -
deviceId=auto
znamená použití GPU, automatické výběr GPU
Přispívání do kódu CNTK
Pokud plánujete úpravy kódu, měli byste si přečíst informace o vývoji a testování.
Další kroky