Delen via


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-py35of cntk-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 uitvoerenconfigure:
--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 uit python 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 zeggen deviceId=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