CNTK instellen in Linux
configuratie voor CNTK productie bouwen en testen
CNTK kan worden uitgevoerd in veel Linux-configuraties, maar als u mogelijke compatibiliteitsproblemen wilt voorkomen, krijgt u mogelijk vertrouwd met CNTK configuratie productie-build en test, waar we alle versies van afhankelijkheden en onderdelen vermelden die we gebruiken.
CNTK als Docker-container
Voordat u verder gaat, kunt u overwegen om CNTK te implementeren als een Docker-container. Lees de bijbehorende sectie.
Huidige beperkingen en voorzorgsmaatregelen
Lees deze sectie zorgvuldig voordat u verdergaat met uw systeemconfiguratie. De onderstaande informatie kan u veel tijd besparen, anders besteed aan foutopsporing van buildfouten.
Notitie
Op deze pagina wordt ervan uitgegaan dat u de hoofdvertakking van CNTK wilt bouwen.
Verwachte onderdeellocaties in configuratie- en Makefile-scripts
Tegenwoordig configure
ondersteunen scripts Makefile
slechts een beperkte set installatiepaden voor alle afhankelijkheidsonderdelen die in deze sectie worden vermeld. We weten dat dit een beperking is en deze binnenkort zal oplossen (ook als u denkt dat u deze scripts zelf wilt verbeteren en uw voorgestelde wijzigingen indient , is uw hulp welkom en zeer gewaardeerd).
configure
zoekt naar alle afhankelijkheidsonderdelen van de paden die worden vermeld in default_path_list
de variabele die in het script is gedefinieerd.
Belangrijk
Als u de variabele wilt wijzigen default_path_list
om een aangepast pad voor een bepaald afhankelijkheidsonderdeel toe te voegen, controleert u de correspondentsectie van Makefile
.configure
Anders krijgt u mogelijk buildfouten vanwege het niet kunnen vinden van INCLUDE-bestanden, bibliotheken, enzovoort.
Installatiemethoden en paden van afhankelijkheidsonderdelen
Hieronder worden alle afhankelijkheidsonderdelen vermeld die nodig zijn voor het bouwen van CNTK en leggen we uit hoe u ze installeert. We begrijpen dat er veel andere manieren zijn om dezelfde onderdelen op te halen. Als u echter de voorkeur geeft aan een alternatieve installatiewijze, moet u ervoor zorgen dat u hetzelfde krijgt, omdat vrij vaak alternatieve installatiebronnen, namelijk netwerkdistributiepakketten (zoals Debian, RPM, enz.) oudere versies van de software bevatten, sommige bibliotheken missen, enzovoort. In sommige secties hieronder worden deze beperkingen specifiek gemarkeerd, maar neem het als algemene voorzorgsmaatregel.
Gebruik van make -j
In de meeste secties raden we u aan om opdrachten te gebruiken make -j
om parallelle buildtaken aan te roepen en zo de snelheid van het buildproces te verhogen. Houd er echter rekening mee dat op sommige systemen en met name op virtuele machines die worden gebruikt make -j
, fouten kunnen optreden als gevolg van onvoldoende geheugen. Als u hiermee te maken hebt, gebruikt u gewoon 'gewoon' make
of beperkt u het aantal taken dat tegelijkertijd wordt uitgevoerd (twee gelijktijdige taken werken meestal voor het grootste deel van de systemen - gebruik de opdracht make -j 2
).
Gelijktijdige installatie van verschillende versies van dezelfde ontwikkelingspakketten
Wees zeer voorzichtig als u verschillende installaties van enkele van de onderstaande ontwikkelingspakketten op hetzelfde systeem wilt hebben. Het kan zeer moeilijk zijn om fouten in build op te sporen, zoals u in dit bericht kunt zien.
En nu gaan we verder met de installatie.
Als u wilt weten welke vereiste configuratie wordt gebruikt in de CNTK productieomgeving, dat wil zeggen wat we intern gebruiken voor het bouwen en testen, raadpleegt u deze sectie
64-bits besturingssysteem
U hebt een 64-bits Linux-installatie nodig om CNTK te gebruiken.
C++ Compiler
Zorg ervoor dat uw installatie een C++-compiler heeft. Veel distributies bevatten deze niet standaard. Raadpleeg uw platformdocumentatie over het controleren op en verkrijgen van een C++-compiler.
Voer voor Ubuntu de volgende opdracht uit:
dpkg --list | grep compiler
als u in de uitvoer iets niet ziet zoals
g++-5 5.4.0-6ubuntu1~16.04.5 amd64 GNU C++ compiler
vervolgens is er geen C++-compiler geïnstalleerd. Als u Ubuntu 1604 hebt, installeert u gCC 5.4 met:
sudo apt-get install g++
Git
Installeer Git op uw systeem zoals hier wordt beschreven.
MKL
De standaardbibliotheek CNTK wiskundige bibliotheek is de Intel Math Kernel Library (Intel MKL). Volg deze pagina om deze te installeren
MPI openen
Installeer Open Message Passing Interface Library (Open MPI).
We raden u aan om te installeren vanuit bronnen zoals hieronder wordt beschreven, omdat veel distributiepakketten oudere versies bevatten en de bibliotheken missen die vereist zijn voor CNTK. De huidige vereiste CNTK Open MPI-versie is ten minste 1.10. Controleer of u oudere versie-installaties op uw systeem hebt en of u ze verwijdert of zorgt (bijvoorbeeld symbolische koppelingen) dat CNTK buildprocedure gebruikmaakt van de vereiste versie. Anders krijgt u mogelijk problemen met buildfouten op te sporen, zoals u in dit bericht kunt zien.
- De installatiebronnen ophalen:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
- Open MPI uitpakken, bouwen en installeren (in
/usr/local/mpi
dit voorbeeld):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
- Voeg de volgende omgevingsvariabele toe aan uw huidige sessie en uw
.bashrc
profiel (als u het nieuwe pad voorbereidt, zorgt u ervoor dat deze versie wordt gebruikt in plaats van een standaardversie die beschikbaar is via het besturingssysteem):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH
Protobuf
We gebruiken Protocolbuffers voor serialisatie. Voer de volgende stappen uit voor de installatie:
- De vereiste pakketten installeren met behulp van
sudo apt-get install autoconf automake libtool curl make g++ unzip
- Protobuf-bronnen downloaden en uitpakken
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
- Protobuf compileren
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 is vandaag een onderdeel van veel populaire Linux-distributies, dus met de hoge waarschijnlijkheid dat u deze vooraf hebt geïnstalleerd. Houd er echter rekening mee dat libzip zlib versie 1.1.2 of hoger vereist en dit meestal niet vooraf is geïnstalleerd. zlib moet worden geïnstalleerd voordat u boost hieronder bouwt.
Raadpleeg de documentatie van uw platform over het ophalen van het vereiste zlib-pakket of het rechtstreeks op te halen vanaf de zlib-website.
Voorbeeld: voor Ubuntu gebruikt u de volgende opdracht:
sudo apt-get install zlib1g-dev
LIBZIP
libzip is beschikbaar in verschillende netwerkdistributiepakketten, maar we hebben vastgesteld dat veel van deze pakketten oude versies bevatten. Het gebruik van deze versies leidt waarschijnlijk tot buildfouten. Daarom raden we u ten zeerste aan om libzip te bouwen op basis van bronnen zoals hieronder wordt beschreven.
Houd er rekening mee dat met de volgende procedure libzip wordt geïnstalleerd./usr/local
Dit is precies waar CNTK buildprocedure deze verwacht (zie het begin van deze pagina voor meer informatie). Als u libzip wilt installeren naar een ander pad, raadpleegt u de instructies in INSTALL
het bestand in de hoofdmap van de libzip-distributiemap.
Pas echter op dat u in dit geval handmatig moet bewerken configure
EN Makefile
van CNTK ter ondersteuning van dit pad.
Gebruik de volgende opdrachten:
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
Voeg de volgende omgevingsvariabele toe aan uw huidige sessie en uw .bashrc
profiel:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
Bibliotheek boosten
De Boost-bibliotheek is een vereiste voor het bouwen van de Microsoft Cognitive Toolkit. Volg deze stappen om de Boost Library op uw systeem te installeren:
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-specifieke pakketten
Als u van plan bent CNTK te gebruiken met GPU-ondersteuning, volgt u deze pagina om de omgeving dienovereenkomstig te installeren en te configureren.
OPTIONELE. SWIG.
Als u wilt profiteren van CNTK van Python, moet u SWIG installeren.
SWIG is ook een vereiste voor het bouwen van de CNTK Evaluatiebibliotheken voor Java.
Voer het script uit om het te installeren: [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh
.
Hiermee maakt u de geïnstalleerde versie in de map /usr/local/swig-3.0.10
.
OPTIONELE. ondersteuning voor CNTK v2 Python
In deze sectie wordt beschreven hoe u CNTK v2 bouwt met Python ondersteuning.
Stap 1: API's voor Python bouwen
- Installeer het hulpprogramma SWIG als u dit nog niet hebt gedaan.
- Anaconda3 4.1.1 (64-bits) installeren
- Als u al een CNTK Python-omgeving (genaamd
cntk-py36
,cntk-py35
ofcntk-py27
) hebt, kunt u deze bijwerken met de meest recente vereiste pakketten met de volgende opdrachten:
# 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
- Als u nog geen CNTK Python omgeving hebt, kunt u kiezen tussen een Python 2.7, 3.5 of 3.6 CNTK Python omgeving.
- Maak uw Python omgeving naar keuze in uw bestaande Python 3.5 Anaconda- of Miniconda-installatie met behulp van een van de volgende opdrachten, afhankelijk van de gewenste Python versie:
# 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
Opmerking: zorg ervoor dat de Python omgeving die hierboven is bijgewerkt of gemaakt, is geactiveerd voor de rest van de instructies.
Als u bijvoorbeeld Python op 3.5 gebaseerde omgeving hebt, voert cntk-py35
u deze opdracht uit:
source activate cntk-py35
Op dezelfde manier geldt voor een Python 3.6- of 2.7-omgeving.
Stap 2: Vorige CNTK-pakket verwijderen
- Als u eerder een versie van het CNTK pip-package op uw computer hebt geïnstalleerd, verwijdert u dit door het volgende uit te voeren:
pip uninstall cntk
Stap 3: Python-pakket bouwen
- Als u een build wilt configureren met Python, neemt u deze twee opties op bij het uitvoeren
configure
:
--with-swig[=directory]
en een van de volgende (wat van toepassing is op uw omgeving):
--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
- In deze fase worden alleen release-builds ondersteund. Als u bijvoorbeeld SWIG
/usr/local/swig-3.0.10
hebt geïnstalleerd en uw Python-omgeving zich bevindt,$HOME/anaconda3/envs/cntk-py35
geeft u deze aanvullende parameters op voorconfigure
:
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
- Voer daarna het make-bestand uit zoals u normaal zou doen, waarmee de CNTK Python-module wordt
bindings/python/cntk
gebouwd en ook een pakket (.whl) wordt geproduceerd in een submap python van de build-uitvoermap (bijvoorbeeldbuild/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
Notitie
In tegenstelling tot de installatie van het Pip-pakket, laden we hier de CNTK module uit de kloon van de CNTK opslagplaats, niet als een geïnstalleerd pakket in uw Python-omgeving. (Vandaar ook het verschil bij het instellen PYTHONPATH
)
Stap 4: Setup controleren
Python
- Voer de Python voorbeelden uit vanuit de
[CNTK clone root]/Tutorials
mappen of[CNTK clone root]/Examples
mappen om uw installatie te controleren. Ga bijvoorbeeld naar de map[CNTK clone root]/Tutorials/NumpyInterop
en voer deze uitpython FeedForwardNet.py
. U ziet nu de volgende uitvoer op de console:
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
OPTIONELE. Opencv
CNTK 2.2 vereist dat Open Source Computer Vision (OpenCV) is geïnstalleerd, maar dit is optioneel na CNTK 2.3. Volg deze pagina om deze te installeren
OPTIONELE. Java
Als u de Java-bindingen wilt bouwen voor de CNTK Evaluatiebibliotheek, installeert u het hulpprogramma SWIG als u dit nog niet hebt gedaan. Daarnaast is een Java Development Kit (JDK) vereist. Momenteel gebruiken we 64-bits OpenJDK 8.
Het configuratiescript biedt --with-jdk
de mogelijkheid om de JDK-map handmatig op te geven, als deze niet standaard kan worden gevonden.
Broncode van CNTK ophalen
Voordat u verdergaat, moet u de informatie over ontwikkelen en testen lezen als u van plan bent wijzigingen aan te brengen in de CNTK code.
Gebruik Git om de CNTK opslagplaats te klonen en toegang te krijgen tot de broncode:
git clone --recursive https://github.com/Microsoft/cntk
cd cntk
Submodule Multiverso wordt gebruikt voor het inschakelen van DataParallelASGD voor training.
Optionele Als u geen ondersteuning voor DataParallelASGD nodig hebt, geeft u de optie --asgd=no
door aan de opdracht Configureren.
Gebouw CNTK
Gebruik de volgende opdrachten om CNTK te bouwen (we gaan ervan uit dat de CNTK opslagplaats is gekloond naar~/Repos/cntk
):
cd ~/Repos/cntk
mkdir build/release -p
cd build/release
../../configure
Zorg ervoor dat de configure
uitvoer overeenkomt met de pakketten die u in de vorige secties hebt geïnstalleerd. Dat wil gezegd hebben dat configure
CUDA wordt gevonden als deze is geïnstalleerd, enzovoort.
Ga als volgt te werk om CNTK te bouwen met behulp van alle kernen om de buildtijd te minimaliseren. Houd er rekening mee dat dit op een computer uw systeem kan overweldigen, wat leidt tot vastlopen of breken tijdens de build.
make -j all
Als het bovenstaande uw computer overweldigt, probeert u minder kernen op te geven. Als u bijvoorbeeld meer dan 2 kernen hebt en twee kernen vrij wilt houden van de build, kunt u het volgende proberen:
make -j"$(($(nproc) - 2))" all
Als u absoluut veilig wilt zijn, gebruikt u slechts 1 kern:
make all
Hiermee wordt een release-build van CNTK geproduceerd. Als u een foutopsporingsbuild wilt ophalen, gebruikt u de volgende parameter bij het aanroepen configure
:
../../configure --with-buildtype=debug
Snelle test van CNTK buildfunctionaliteit
Om ervoor te zorgen dat CNTK goed werkt in uw systeem, kunt u snel een voorbeeld uitvoeren vanuit de zelfstudie Hallo wereld - Logistieke regressie. In dit voorbeeld wordt een eenvoudig netwerk getraind en kan worden omgeleid om CPU of GPU te gebruiken, wat ervoor zorgt dat CNTK goed functioneert.
Hieronder wordt ervan uitgegaan dat de CNTK opslagplaats is gekloond naar ~/Repos/cntk
en build/release
is gebruikt als submap voor de build.
- Geef het pad op naar de binaire CNTK bestanden en ga naar de
Tutorials/HelloWorld-LogisticRegression
map:
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression
Probeer eerst het voorbeeld:
cntk configFile=lr_bs.cntk makeMode=false
Als het voorbeeld wordt uitgevoerd, bijvoorbeeld als er geen foutberichten zijn, krijgt u eerst uitvoer met betrekking tot het lezen van de configuratie, gevolgd door de uitvoer van de werkelijke netwerktraining.
Probeer CNTK met GPU
Als u CNTK hebt gemaakt voor GPU-gebruik, gebruikt u de GPU door de volgende opdrachten uit te voeren:
cntk configFile=lr_bs.cntk makeMode=false deviceId=auto
Aan het begin van de uitvoer ziet u een regel die bevestigt dat een GPU is gebruikt:
Model has 9 nodes. Using GPU 0.
Houd er rekening mee dat de GPU-id mogelijk anders is. De deviceId
parameter definieert welke processor moet worden gebruikt voor berekeningen.
-
deviceId=-1
betekent het gebruik van CPU. Standaardwaarde -
deviceId=X
waarbij X een geheel getal >=0 is, betekent dat GPU X wordt gebruikt, dat wil zeggendeviceId=0
GPU 0, enzovoort. -
deviceId=auto
betekent GPU gebruiken, GPU automatisch selecteren
Bijdragen aan CNTK code
Als u wijzigingen in de code plant, moet u de informatie over ontwikkelen en testen lezen.
Volgende stappen