Delen via


Docker-containers CNTK

U kunt CNTK instellen als dockercontainer op uw Linux-systeem.

Er zijn twee manieren om CNTK Docker-containers te gebruiken:

CNTK afbeeldingen gebruiken die zijn gepubliceerd op Docker Hub

Op Docker Hub hosten we openbare CNTK Images. Bekijk de volledige lijst met installatiekopieën die beschikbaar zijn op CNTK pagina Opslagplaatsen op Docker Hub. Momenteel hosten we alleen runtimeconfiguraties . Runtimeconfiguratie komt overeen met een omgeving met CNTK binair pakket geïnstalleerd en geconfigureerd. Deze configuratie bevat geen CNTK broncode, noch de vereiste vereisten voor het bouwen van CNTK.

Houd er rekening mee dat u NVIDIA Docker nodig hebt om CNTK gpu-installatiekopieën te gebruiken.

Standaard Docker-opdrachten worden gebruikt om de installatiekopieën op te halen:

docker pull mcr.microsoft.com/cntk/release

om de nieuwste officiële release-installatiekopieën op te halen, wat vandaag de laatste beschikbare GPU Runtime-configuratie betekent. U kunt ook de nieuwste afbeelding van de ontwikkeling 's nachts downloaden:

docker pull mcr.microsoft.com/cntk/nightly

Als u een specifieke configuratie wilt ophalen, moet u een tag toevoegen. Bijvoorbeeld

docker pull mcr.microsoft.com/cntk/release:2.7-cpu-python3.5

hiermee krijgt u CNTK configuratie van 2.7 CPU-runtime ingesteld voor Python 3.5.

Als u niet bekend bent met Docker, leest u de secties hieronder op deze pagina.

Docker-container gebruiken om CNTK Jupyter Notebook zelfstudies uit te voeren

U kunt CNTK Docker-containers gebruiken om CNTK Jupyter Notebooks uit te voeren in uw lokale omgeving.

We gaan ervan uit dat u de vereiste installatiekopieën al hebt opgehaald uit Docker Hub. In het onderstaande voorbeeld gebruiken we gpu-configuratie. Als u cpu-configuratie gebruikt, vervangt u in de onderstaande opdrachten alle exemplaren van nvidia-dockerdocker.

Maak en start eerst een CNTK container in de losgekoppelde modus met ip-poort beschikbaar (we gebruiken poort 8888 die standaard is voor Jupyter Notebook toepassing):

nvidia-docker run -d -p 8888:8888 --name cntk-jupyter-notebooks -t mcr.microsoft.com/cntk/release

Start nu Jupyter Notebook server in uw Docker-container:

docker exec -it cntk-jupyter-notebooks bash -c "source /cntk/activate-cntk && jupyter-notebook --no-browser --port=8888 --ip=0.0.0.0 --notebook-dir=/cntk/Tutorials --allow-root"

In uw terminal ziet u de console-uitvoer van de Jupyter Notebooks-server. Deze uitvoer zou een lijn als volgt bevatten:
http://0.0.0.0:8888/?token=082684fbe2b43eebd72583c301c05072084173d0ac06a4d7

Kopieer het weergegeven token (in ons voorbeeld 082684fbe2b43eebd72583c301c05072084173d0ac06a4d7).

U hebt nu toegang tot CNTK Jupyter Notebooks met behulp van het IP-adres van de computer waarop u de Docker-container uitvoert. Als uw computeradres dan toegang heeft 192.168.1.1 tot CNTK Notebooks, opent u een browservenster en gaat u naar http://192.168.1.1:8888.

Houd er rekening mee dat tijdens de eerste uitvoering Jupyter Notebook toepassing om een wachtwoord of token vraagt. Gebruik het token dat u hierboven hebt opgeslagen.

Stop de Jupyter Notebook server send Ctrl-C sequence in de terminal waar u Jupiter Notebook server console uitvoer en bevestig afsluiten van de server. Houd er rekening mee dat de Docker-container zelf niet wordt gestopt. Gebruik de opdracht om de container te stoppen:
docker stop cntk-jupyter-notebooks

WAARSCHUWING! Met de bovenstaande opdrachten maakt u de Jupyter Notebooks-toepassing beschikbaar voor iedereen die toegang heeft tot het IP-adres van de computer waarop u de Docker-container uitvoert.

Docker-installatiekopieën bouwen CNTK

U kunt CNTK bouwen en uitvoeren met behulp van dezelfde container. Dit is een aanbevolen benadering om onze referentieconfiguratie te reproduceren.

Eerst moet u Docker installeren. Het wordt ten zeerste aanbevolen om het installatieproces te volgen in de officiële Docker-documentatie. Versies die bij uw Linux-distributie worden geleverd, zijn mogelijk verouderd en werken niet met nvidia-docker (wat u mogelijk moet installeren naast Docker als u van plan bent om de GPU-installatiekopieën te bouwen en uit te voeren vanuit dezelfde container). Volg ook de instructies in de optionele sectie met de titel het maken van een Docker-groep.

De correspondent Docker-bestanden bevinden zich in de CNTK Opslagplaats ophttps://github.com/Microsoft/CNTK/tree/release/latest/Tools/docker

Als u een Docker-installatiekopieën wilt maken met CNTK en alle bijbehorende afhankelijkheden, kloont u de CNTK-opslagplaats, gaat u naar CNTK/Tools/docker en gebruikt u het Dockerfile dat u wilt bouwen (CPU of GPU). Als u bijvoorbeeld de GPU Docker-installatiekopieën van CNTK wilt bouwen, voert u het volgende uit:

docker build -t cntk -f CNTK-GPU-Image/Dockerfile .

Het -f <path/to/Dockerfile> argument is vereist omdat sommige patches, die gebruikelijk zijn voor zowel CPU- als GPU-dockerfiles, moeten worden toegepast op SWIG-broncode. Als u fouten ontvangt die zeggen Could not resolve 'archive.ubuntu.com' dat u docker moet voorzien van de IP-adressen van uw DNS-servers. Zoek eerst de IP-adressen van uw DNS-servers met behulp van bijvoorbeeld de opdracht

nm-tool

of de opdracht

nmcli dev show

Stel dat de IP-adressen van uw DNS-servers en a.b.c.dx.y.z.w. Dan

  • op Ubuntu 15.10 en hoger (of een andere Linux die gebruikmaakt van een systeem) wijzigen /lib/systemd/system/docker.service zodat de Docker-daemon wordt gestart met de extra opties --dns a.b.c.d --dns x.y.z.w
  • op Ubuntu 15.04 en eerder (of een andere Linux die geen systeem gebruikt) bewerken /etc/default/docker zodat de regel
    #DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
    
    wordt niet aanbevolen en bevat de IP-adressen van uw DNS-servers.

Opmerking: sommige bedrijven blokkeren openbare DNS-servers, zoals 8.8.8.8 en 8.8.4.4. U kunt deze proberen te gebruiken, maar als het probleem zich blijft voordoen, moet u proberen de IP-adressen van de DNS-server te gebruiken die zijn gerapporteerd door nm-tool/nmcli.

Start de docker-daemon opnieuw via

sudo service docker restart

en verwijder docker-installatiekopieën die zijn gemaakt met de verkeerde DNS-instellingen. Als u alle Docker-installatiekopieën wilt verwijderen, doet u

docker rmi $(docker images -q)

Als u alle Docker-containers wilt verwijderen, doet u

docker rm $(docker ps -a -q)

Probeer het nu opnieuw

docker build -t cntk -f CNTK-GPU-Image/Dockerfile .

Als u een GPU hebt, wilt u testen of u deze kunt openen via een Docker-container zodra u de installatiekopie hebt gemaakt. Voer deze opdracht uit:

docker run --rm cntk nvidia-smi

Als het werkt, bent u klaar. Als dit niet het probleem is, betekent dit dat er een mismatch is tussen de CUDA-versie en/of stuurprogramma's die op uw host en in uw CNTK docker-installatiekopie zijn geïnstalleerd. Het komt met name niet overeen tussen de kernelmodus NVidia-stuurprogrammamodule en de gebruikersmodusmodule (een gedeelde lib) en dit gebeurt als de versie op de host niet exact overeenkomt met de versie in de container. Gelukkig is dit eenvoudig op te lossen. Installeer nvidia-docker en gebruik deze precies zoals docker (u hoeft de installatiekopie niet opnieuw te bouwen).

nvidia-docker run --rm cntk nvidia-smi

Dit werkt en stelt CNTK in staat om de GPU te gebruiken vanuit een Docker-container. Als dit niet werkt, zoekt u in de sectie Problemen op de nvidia-docker GitHub. Er zijn al veel oplossingen gedocumenteerd. Houd er rekening mee dat als uw /usr- en /var-mappen zich in verschillende partities bevinden, u enkele extra stappen nodig hebt, zoals hier. Een interactieve shell ophalen naar een container die niet automatisch wordt verwijderd nadat u afsluit

nvidia-docker run --name cntk_container1 -ti cntk bash

Als u uw gegevens en configuraties wilt delen tussen de host (uw computer of VM) en de container waarin u CNTK gebruikt, gebruikt u de optie -v, bijvoorbeeld

nvidia-docker run --name cntk_container1 -ti -v /project1/data:/data -v /project1/config:/config cntk bash

Hierdoor worden /project1/gegevens van de host zichtbaar als /data in de container en /project1/config als /config. Dergelijke isolatie vermindert de kans dat uw containerexperimenten worden overschreven of verkeerde gegevens gebruiken.