Dela via


Konfigurera CNTK på Linux

konfiguration av CNTK Production Build and Test

CNTK kan köras i många Linux-konfigurationer, men om du vill undvika eventuella kompatibilitetsproblem kan du bekanta dig med konfigurationen CNTK Production Build and Test där vi listar alla beroendekomponent- och komponentversioner som vi använder.

CNTK som en Docker-container

Innan du går vidare kan du överväga att distribuera CNTK som en Docker-container. Läs motsvarande avsnitt.

Aktuella begränsningar och försiktighetsåtgärder

Läs noggrant det här avsnittet innan du fortsätter med systemkonfigurationen. Informationen nedan kan spara mycket tid som annars ägnas åt felsökning av byggfel.

Anteckning

Den här sidan förutsätter att du försöker skapa CNTK huvudgren.

Förväntade komponentplatser i konfigurations- och Makefile-skript

Idag configure och Makefile skript stöder endast begränsad uppsättning installationssökvägar för alla beroendekomponenter som anges i det här avsnittet. Vi vet att detta är en begränsning och kommer att åtgärda det snart (även om du känner för att förbättra dessa skript själva och skicka dina föreslagna ändringar din hjälp är välkommen och mycket uppskattad).

configure söker efter alla beroendekomponenter bland sökvägarna som anges i default_path_list variabeln som definierats i skriptet.

Viktigt

Om du vill ändra default_path_list variabeln i configure för att lägga till en anpassad sökväg för en viss beroendekomponent kontrollerar du korrespondentavsnittet i Makefile. Annars kan du få byggfel på grund av att det inte går att hitta INCLUDE-filer, bibliotek osv.

Installationsmetoder och sökvägar för beroendekomponenter

Nedan listar vi alla beroendekomponenter som krävs för att skapa CNTK och förklarar hur du installerar dem. Vi förstår att det finns många andra sätt att få samma komponenter. Men om du föredrar ett alternativt sätt att installera, se till att du får samma sak, eftersom ganska ofta alternativa installationskällor, nämligen nätverksdistributionspaket (som Debian, RPM osv.) innehåller äldre versioner av programvaran, saknar vissa bibliotek osv. I vissa avsnitt nedan belyser vi specifikt dessa begränsningar, men ta det som en allmän försiktighetsåtgärd.

Användning av make -j

I de flesta avsnitt föreslår vi att du använder make -j kommandot för att anropa parallella byggjobb och därmed öka genereringsprocessens hastighet. Tänk dock på att på vissa system och särskilt på virtuella datorer som använder make -j kan det leda till "slut på minne" fel. Om du stöter på detta använder du bara "plain" make eller begränsar antalet jobb som körs samtidigt (två samtidiga jobb fungerar vanligtvis för de flesta system – använd kommandot make -j 2).

Samtidig installation av olika versioner av samma utvecklingspaket

Var mycket försiktig om du vill ha flera installationer av några av de utvecklingspaket som nämns nedan i samma system. Det kan resultera i mycket svårt att felsöka byggfel som du kan se i det här inlägget.

Nu går vi vidare till installationen.

Om du vill veta vilken nödvändig konfiguration som används i CNTK produktionsmiljö, d.v.s. vad vi använder internt för att skapa och testa, kan du läsa det här avsnittet

64-bitars operativsystem

Du behöver en 64-bitars Linux-installation för att kunna använda CNTK.

C++-kompilator

Se till att installationen har en C++-kompilator. Många distributioner inkluderar den inte som standard. Se din plattformsdokumentation om hur du söker efter och hämtar en C++-kompilator.

Exempel: Kör följande kommando för Ubuntu:

dpkg --list | grep compiler

om du inte ser något liknande i utdata

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

sedan installeras inte en C++-kompilator. Om du har Ubuntu 1604 installerar du gcc 5.4 med:

sudo apt-get install g++

Git

Installera Git på systemet enligt beskrivningen här.

MKL

Standardbiblioteket för CNTK matematik är Intel Math Kernel Library (Intel MKL). Följ den här sidan om du vill installera den

Öppna MPI

Installera Open Message Passing Interface Library (Open MPI).

Vi rekommenderar att du installerar från källor enligt beskrivningen nedan eftersom många distributionspaket innehåller äldre versioner och missar de bibliotek som krävs av CNTK. Aktuell CNTK krav för Open MPI-version är minst 1.10. Kontrollera om du har äldre versionsinstallationer i systemet och om du gör det avinstallerar du dem eller kontrollerar (via till exempel symboliska länkar) att CNTK build-procedur använder den version som krävs. Annars kan det bli svårt att felsöka byggfel som du kan se i det här inlägget.

  • Hämta installationskällorna:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
  • Packa upp, skapa och installera Open MPI (till /usr/local/mpi i det här exemplet):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
  • Lägg till följande miljövariabel i din aktuella session och din .bashrc profil (Väntar på den nya sökvägen, säkerställer att den här versionen används i stället för en standardversion som är tillgänglig via operativsystemet):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH

Protobuf

Vi använder protokollbuffertar för serialisering. Följ dessa steg för installation:

  • Installera de paket som krävs med hjälp av
sudo apt-get install autoconf automake libtool curl make g++ unzip
  • Ladda ned och packa upp protobuf-källor
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
  • Kompilera 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 är idag en del av många populära Linux-distributioner, så med den höga sannolikheten har du den förinstallerad. Observera dock att libzip kräver zlib version 1.1.2 eller senare och detta är vanligtvis INTE förinstallerat. zlib måste installeras innan du skapar Boost nedan.

Se din plattformsdokumentation om hur du hämtar det nödvändiga zlib-paketet eller hämtar det direkt från zlib-webbplatsen.

Exempel: För Ubuntu använder du följande kommando:

sudo apt-get install zlib1g-dev

LIBZIP

libzip är tillgängligt i olika nätverksdistributionspaket, men vi upptäckte att många av dem innehåller gamla versioner. Om du använder dessa versioner resulterar det sannolikt i byggfel. Därför rekommenderar vi starkt att du skapar libzip från källor enligt beskrivningen nedan.

Observera att följande procedur installerar libzip på /usr/local. Det är exakt där CNTK byggprocedur förväntar sig det (mer information finns i början av den här sidan). Om du vill installera libzip på en annan sökväg kan du läsa anvisningarna i INSTALL filen i roten för libzip-distributionsmappen. Tänk dock på att du i det här fallet måste redigera configure manuellt OCH Makefile för CNTK för att stödja den här sökvägen.

Använd följande kommandon:

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

Lägg till följande miljövariabel i din aktuella session och din .bashrc profil:

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

Boost-bibliotek

Boost-biblioteket är en förutsättning för att skapa Microsoft Cognitive Toolkit. Följ dessa steg för att installera Boost-biblioteket i systemet:

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-specifika paket

Om du tänker använda CNTK med GPU-stöd följer du den här sidan för att installera och konfigurera miljön i enlighet med detta.

VALFRI. SWIG.

Om du vill dra nytta av CNTK från Python måste du installera SWIG. SWIG är också ett krav för att skapa CNTK Utvärderingsbibliotek för Java. Installera det genom att köra skriptet: [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh. Då skapas den installerade versionen i mappen /usr/local/swig-3.0.10.

VALFRI. stöd för CNTK v2 Python

I det här avsnittet beskrivs hur du skapar CNTK v2 med stöd för Python.

Steg 1: Skapa Python-API:er

  • Installera SWIG-verktyget om du inte har gjort det ännu.
  • Installera Anaconda3 4.1.1 (64-bitars)
  • Om du redan har en CNTK Python miljö (kallas cntk-py36, cntk-py35eller cntk-py27) kan du uppdatera den med de senaste nödvändiga paketen med följande kommandon:
# 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
  • Om du inte har någon CNTK Python miljö ännu kan du välja mellan en Python 2.7, 3.5 eller 3.6-baserad CNTK Python miljö.
  • Skapa valfri Python miljö i din befintliga Python 3.5 Anaconda- eller Miniconda-installation med något av följande kommandon, beroende på din önskade Python version:
# 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

Obs! Kontrollera att den Python miljö som uppdaterades eller skapades ovan är aktiverad under resten av instruktionerna. Om du till exempel har Python 3.5-baserad miljö som heter cntk-py35 kör du följande kommando:

source activate cntk-py35

På samma sätt för en Python 3.6- eller 2.7-baserad miljö.

Steg 2: Avinstallera föregående CNTK paket

  • Om du tidigare har installerat någon version av CNTK pip-package på datorn avinstallerar du den genom att köra:pip uninstall cntk

Steg 3: Skapa Python-paket

  • Om du vill konfigurera en version med Python inkluderar du det här två alternativet när du kör configure:
--with-swig[=directory]

och något av följande (vad som än gäller för din miljö):

--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
  • Endast versionsversioner stöds i det här skedet. Om du till exempel har installerat SWIG till /usr/local/swig-3.0.10 och din Python-miljö finns på $HOME/anaconda3/envs/cntk-py35 anger du följande ytterligare parametrar för :configure
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
  • Därefter kör du make som vanligt, vilket skapar CNTK Python-modulen inuti bindings/python/cntk och även skapar ett paket (.whl) i en undermapp python i din kompileringsutdatamapp (t.ex. 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

Anteckning

Till skillnad från den konfiguration som visas för Pip-paketinstallationen läser vi här in CNTK-modulen från klonen CNTK lagringsplats, inte som ett installerat paket i din Python-miljö. (Därför också skillnaden i att konfigurera PYTHONPATH)

Steg 4: Verifiera konfigurationen

Python

  • Kör Python exempel inifrån katalogerna [CNTK clone root]/Tutorials eller [CNTK clone root]/Examples för att verifiera installationen. Gå till exempel till mappen [CNTK clone root]/Tutorials/NumpyInterop och kör python FeedForwardNet.py. Du bör se följande utdata i konsolen:
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

VALFRI. Opencv

CNTK 2.2 kräver att OpenCV (OpenCV) (Open Source Visuellt innehåll) installeras, men det är valfritt efter CNTK 2.3. Följ den här sidan om du vill installera den

VALFRI. Java

Om du vill skapa Java-bindningar för CNTK Evaluation-biblioteket installerar du SWIG-verktyget om du inte har gjort det ännu. Dessutom krävs ett Java Development Kit (JDK). För närvarande använder vi 64-bitars OpenJDK 8.

Konfigurationsskriptet ger --with-jdk möjlighet att ange JDK-katalogen manuellt, om den inte kan hittas som standard.

Hämta CNTK källkod

Observera att om du planerar att göra ändringar i CNTK kod bör du läsa informationen om utveckling och testning innan du fortsätter.

Använd Git för att klona CNTK-lagringsplatsen och få åtkomst till källkoden:

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

Undermodulen Multiverso används för att aktivera DataParallelASGD för träning.

Valfri Om du inte behöver DataParallelASGD-stöd skickar du alternativet --asgd=no till kommandot konfigurera.

Skapa CNTK

Om du vill skapa CNTK använder du följande kommandon (vi antar att CNTK-lagringsplatsen klonades till ~/Repos/cntk):

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

Kontrollera att configure utdata motsvarar de paket som du installerade i föregående avsnitt. Se till att configure hittar CUDA om det är installerat osv.

Gör följande för att skapa CNTK använda alla kärnor för att minimera byggtiden. Observera att på vissa datorer kan detta överbelasta systemet, vilket leder till låsning eller avbrott under bygget.

make -j all

Om ovanstående överbelastar datorn kan du prova att ange färre kärnor. Om du till exempel har fler än 2 kärnor och vill hålla 2 kärnor fria från bygget kan du prova:

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

Om du vill vara helt säker, bara använda 1 kärna:

make all

Detta bör skapa en versionsversion av CNTK. Om du vill hämta en felsökningsversion använder du följande parameter när du anropar configure:

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

Snabbtest av CNTK build-funktioner

För att säkerställa att CNTK fungerar korrekt i systemet kan du snabbt köra ett exempel från självstudien Hello World – Logistic Regression. Det här exemplet tränar ett enkelt nätverk och kan dirigeras att använda antingen CPU eller GPU, vilket hjälper dig att snabbt se till att CNTK fungerar korrekt.

Nedan förutsätter vi att CNTK-lagringsplatsen klonas till ~/Repos/cntk och build/release användes som en underkatalog för bygget.

  • Ange sökvägen till CNTK binärfiler och ändra till Tutorials/HelloWorld-LogisticRegression katalogen:
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression

Prova först exemplet:

cntk configFile=lr_bs.cntk makeMode=false

Om exemplet körs, d.v.s. om det inte finns några felmeddelanden, kommer du först att få utdata relaterade till att läsa konfigurationen, följt av utdata från den faktiska nätverksträningen.

Prova CNTK med GPU

Om du har skapat CNTK för GPU-användning kan du prova att använda GPU:n genom att köra följande kommandon:

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

I början av utdata bör du se en rad som bekräftar att en GPU har använts:

Model has 9 nodes. Using GPU 0.

Observera att GPU-ID:t kan vara annorlunda. Parametern deviceId definierar vilken processor som ska användas för beräkning.

  • deviceId=-1 innebär att använda CPU. Standardvärde
  • deviceId=X där X är ett heltal >=0 innebär att GPU X används, d.v.s. deviceId=0 GPU 0 osv.
  • deviceId=auto innebär att du använder GPU, väljer du GPU automatiskt

Bidra till CNTK kod

Om du planerar ändringar i koden bör du läsa informationen om utveckling och testning.

Nästa steg