CNTK kontejnery Dockeru

V linuxovém systému můžete nastavit CNTK jako kontejner Dockeru.

Existují dva způsoby použití kontejnerů CNTK Dockeru:

Použití obrázků CNTK publikovaných na Docker Hub

Veřejné obrázky CNTK hostujeme na Docker Hub. Úplný seznam imagí dostupných na stránce úložiště CNTK na Docker Hub. Momentálně hostujeme pouze konfigurace modulu runtime . Konfigurace modulu runtime odpovídá prostředí s nainstalovaným a nakonfigurovaným CNTK binárním balíčkem. Tato konfigurace neobsahuje ani CNTK zdrojový kód ani požadavky potřebné k sestavení CNTK.

Mějte na paměti, že potřebujete NVIDIA Docker k používání CNTK imagí s podporou GPU.

K získání image se používají standardní příkazy Dockeru:

docker pull mcr.microsoft.com/cntk/release

získat nejnovější oficiální verzi image, která dnes znamená nejnovější dostupnou konfiguraci modulu runtime GPU. Můžete také získat nejnovější noční image vývoje:

docker pull mcr.microsoft.com/cntk/nightly

Pokud chcete získat konkrétní konfiguraci, musíte přidat značku. Například

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

získáte CNTK konfiguraci modulu runtime procesoru 2.7 nastavenou pro Python 3.5.

Pokud s Dockerem neznáte, přečtěte si níže uvedené části na této stránce.

Použití kontejneru Dockeru ke spuštění CNTK Jupyter Notebook kurzů

Ke spouštění CNTK poznámkových bloků Jupyter v místním prostředí můžete použít CNTK kontejnery Dockeru.

Předpokládáme, že jste už nastavili požadované obrázky z Docker Hub. V následujícím příkladu použijeme konfiguraci GPU. Pokud používáte konfiguraci procesoru, pak v následujících příkazech nahraďte všechny výskyty nvidia-dockerdocker.

Nejprve vytvořte a spusťte kontejner CNTK v odpojeném režimu s vystaveným portem IP (používáme port8888, který je výchozí pro Jupyter Notebook aplikaci):

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

Teď v kontejneru Dockeru spusťte Jupyter Notebook server:

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"

V terminálu uvidíte výstup konzoly serveru Jupyter Notebooks. Tento výstup by obsahoval řádek podobný tomuto:
http://0.0.0.0:8888/?token=082684fbe2b43eebd72583c301c05072084173d0ac06a4d7

Zkopírujte zobrazený token (v našem příkladu 082684fbe2b43eebd72583c301c05072084173d0ac06a4d7).

Teď můžete přistupovat k CNTK Poznámkové bloky Jupyter pomocí IP adresy počítače, na kterém spouštíte kontejner Dockeru. Pokud je 192.168.1.1 vaše adresa počítače pak přístup k CNTK Poznámkové bloky otevřít okno prohlížeče a přejít na http://192.168.1.1:8888.

Všimněte si, že během prvního spuštění Jupyter Notebook aplikace požádá o heslo nebo token. Použijte token, který jste si uložili výše.

Chcete-li zastavit pořadí odesílání Ctrl-C serveru Jupyter Notebook v terminálu, kde máte výstup konzoly serveru Jupiter Notebook a potvrďte vypnutí serveru. Všimněte si, že samotný kontejner Dockeru nezastaví . K zastavení kontejneru použijte příkaz:
docker stop cntk-jupyter-notebooks

UPOZORNĚNÍ! Výše uvedené příkazy zpřístupní aplikaci Jupyter Notebooks všem uživatelům, kteří mají přístup k IP adrese počítače, na kterém používáte kontejner Dockeru.

Sestavování imagí Dockeru CNTK

Můžete sestavit a spustit CNTK pomocí stejného kontejneru a tento postup se doporučuje k reprodukci naší referenční konfigurace.

Nejdřív musíte nainstalovat Docker. Důrazně doporučujeme postupovat podle procesu instalace v oficiální dokumentaci k Dockeru. Verze, které jsou součástí distribuce Linuxu, můžou být zastaralé a nebudou fungovat nvidia-docker s (které možná budete muset nainstalovat kromě Dockeru, pokud plánujete sestavit a spustit image GPU ze stejného kontejneru). Měli byste také postupovat podle pokynů v volitelné části s názvem Vytvoření skupiny Dockeru.

Odpovídající soubory Dockeru jsou v úložišti CNTK na adrese .https://github.com/Microsoft/CNTK/tree/release/latest/Tools/docker

Pokud chcete vytvořit image Dockeru s CNTK a všemi jeho závislostmi, jednoduše naklonujte CNTK úložiště, přejděte na CNTK/Tools/docker soubor Dockerfile, ze kterého chcete sestavit (procesor nebo GPU). Pokud chcete například sestavit image dockeru GPU CNTK, spusťte:

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

Argument -f <path/to/Dockerfile> je povinný, protože některé opravy, které jsou společné pro soubory DOckerfile procesoru i GPU, je potřeba použít ve zdrojovém kódu SWIG. Pokud se zobrazí chyby s informacemi, že Could not resolve 'archive.ubuntu.com' budete muset dockeru poskytnout IP adresy serverů DNS. Nejdřív pomocí příkazu najděte IP adresy vašich serverů DNS.

nm-tool

nebo příkaz

nmcli dev show

Řekněme, že IP adresy vašich serverů DNS jsou a.b.c.d a x.y.z.w. Pak...

  • v Ubuntu 15.10 a novějším (nebo jiném Linuxu, který používá systemd), aby /lib/systemd/system/docker.service démon dockeru byl spuštěn s dalšími možnostmi. --dns a.b.c.d --dns x.y.z.w
  • v Ubuntu 15.04 a starších (nebo jiných Linuxech, které nepoužívají systemd) upravte /etc/default/docker tak, aby řádek
    #DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
    
    je nekommentovaný a obsahuje IP adresy vašich serverů DNS.

Poznámka: Některé společnosti blokují veřejné servery DNS, například 8.8.8.8 a 8.8.4.4. Můžete je zkusit použít, ale pokud problém přetrvává, měli byste se pokusit použít IP adresy serveru DNS hlášené .nm-tool/nmcli

Restartování démona Dockeru prostřednictvím

sudo service docker restart

a odstraňte všechny image Dockeru, které se vytvořily s nesprávným nastavením DNS. Odstranění všech imagí Dockeru

docker rmi $(docker images -q)

Odstranění všech kontejnerů Dockeru

docker rm $(docker ps -a -q)

Teď to zkuste znovu.

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

Pokud máte GPU, budete ho chtít otestovat, pokud k němu budete mít přístup prostřednictvím kontejneru Dockeru, jakmile image vytvoříte. Vyzkoušejte tento příkaz:

docker run --rm cntk nvidia-smi

Pokud to funguje, máte hotovo. Pokud ne, znamená to, že došlo k neshodě mezi verzí CUDA a/nebo ovladači nainstalovanými na vašem hostiteli a v imagi dockeru CNTK. Konkrétně je neshoda mezi modulem ovladače NVidia v režimu jádra a modulem uživatelského režimu (což je sdílená knihovna) a k tomu dochází v případě, že verze na hostiteli přesně neodpovídá verzi v kontejneru. Naštěstí je to snadné opravit. Stačí nainstalovat nvidia-docker a použít ho stejně jako docker (nemusíte znovu sestavit image).

nvidia-docker run --rm cntk nvidia-smi

Mělo by to fungovat a umožnit CNTK používat GPU z kontejneru Dockeru. Pokud to nepomůže, vyhledejte část Problémy na GitHub nvidia-docker – mnoho řešení je již zdokumentované. Všimněte si, že pokud jsou adresáře /usr a /var v různých oddílech, budete potřebovat další kroky, jako je tady. Pokud chcete získat interaktivní prostředí do kontejneru, který se po ukončení automaticky neodstraní

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

Pokud chcete sdílet data a konfigurace mezi hostitelem (počítačem nebo virtuálním počítačem) a kontejnerem, ve kterém používáte CNTK, použijte například možnost -v.

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

Tím se z hostitele zobrazí /project1/data jako /data v kontejneru a /project1/config jako /config. Tato izolace snižuje pravděpodobnost přepsání nebo používání nesprávných dat kontejnerizovaných experimentů.