kontenery platformy Docker CNTK

Możesz skonfigurować CNTK jako kontener platformy Docker w systemie Linux.

Istnieją dwa sposoby korzystania z kontenerów platformy Docker CNTK:

Korzystanie z obrazów CNTK opublikowanych w witrynie Docker Hub

Hostujemy publiczne obrazy CNTK na Docker Hub. Zobacz pełną listę obrazów dostępnych na stronie repozytoriów CNTK pod adresem Docker Hub. Obecnie hostujemy tylko konfiguracje środowiska uruchomieniowego . Konfiguracja środowiska uruchomieniowego odpowiada środowisku z zainstalowanym i skonfigurowanym pakietem binarnym CNTK. Ta konfiguracja nie zawiera ani kodu źródłowego CNTK, ani wymagań wstępnych wymaganych do utworzenia CNTK.

Pamiętaj, że do korzystania z obrazów z obsługą CNTK procesora GPU jest potrzebna platforma NVIDIA Docker.

Standardowe polecenia platformy Docker służą do pobierania obrazu:

docker pull mcr.microsoft.com/cntk/release

aby uzyskać najnowszy oficjalny obraz wydania, co oznacza obecnie najnowszą dostępną konfigurację środowiska uruchomieniowego procesora GPU. Możesz również uzyskać najnowszy obraz programowania w nocy:

docker pull mcr.microsoft.com/cntk/nightly

Aby uzyskać konkretną konfigurację, musisz dodać tag. Na przykład

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

Uzyskasz CNTK konfiguracji środowiska uruchomieniowego procesora CPU w wersji 2.7 skonfigurowanej dla języka Python 3.5.

Jeśli nie znasz platformy Docker, przeczytaj sekcje poniżej na tej stronie.

Uruchamianie samouczków CNTK Jupyter Notebook za pomocą kontenera platformy Docker

Do uruchamiania CNTK notesów Jupyter Notebook w środowisku lokalnym można użyć CNTK kontenerów platformy Docker.

Załóżmy, że masz już pobrane wymagane obrazy z Docker Hub. W poniższym przykładzie użyjemy konfiguracji procesora GPU. Jeśli używasz konfiguracji procesora CPU, w poniższych poleceniach zastąp wszystkie wystąpienia elementu nvidia-docker .docker

Najpierw utwórz i uruchom kontener CNTK w trybie odłączonym z uwidocznionym portem IP (używamy portu 8888 domyślnego dla aplikacji Jupyter Notebook):

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

Teraz uruchom serwer Jupyter Notebook w kontenerze platformy Docker:

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"

W terminalu zostaną wyświetlone dane wyjściowe konsoli serwera Jupyter Notebooks. Te dane wyjściowe zawierają wiersz podobny do następującego:
http://0.0.0.0:8888/?token=082684fbe2b43eebd72583c301c05072084173d0ac06a4d7

Skopiuj wyświetlony token (w naszym przykładzie 082684fbe2b43eebd72583c301c05072084173d0ac06a4d7).

Teraz możesz uzyskać dostęp do CNTK notesów Jupyter Notebook przy użyciu adresu IP maszyny, na której jest uruchomiony kontener platformy Docker. Tj. jeśli adres komputera ma 192.168.1.1 dostęp do CNTK Notesy, otwórz okno przeglądarki i przejdź do http://192.168.1.1:8888strony .

Pamiętaj, że podczas pierwszego uruchomienia aplikacja Jupyter Notebook poprosi o podanie hasła lub tokenu. Użyj zapisanego powyżej tokenu.

Aby zatrzymać sekwencję wysyłania Ctrl-C serwera Jupyter Notebook w terminalu, w którym masz dane wyjściowe konsoli serwera Jupiter Notebook i potwierdź zamknięcie serwera. Należy pamiętać, że nie zostanie zatrzymany sam kontener platformy Docker. Aby zatrzymać kontener, użyj polecenia :
docker stop cntk-jupyter-notebooks

OSTRZEŻENIE! Powyższe polecenia uwidaczniają aplikację Jupyter Notebooks wszystkim , którzy mogą uzyskać dostęp do adresu IP maszyny, na której jest uruchomiony kontener platformy Docker.

Kompilowanie obrazów platformy Docker CNTK

Możesz skompilować i uruchomić CNTK przy użyciu tego samego kontenera i jest to zalecane podejście do odtworzenia konfiguracji referencyjnej.

Najpierw musisz zainstalować platformę Docker. Zdecydowanie zaleca się wykonanie procesu instalacji w oficjalnej dokumentacji platformy Docker. Wersje, które są dostarczane z dystrybucją systemu Linux, mogą być nieaktualne i nie będą działać nvidia-docker (co może wymagać zainstalowania oprócz platformy Docker, jeśli planujesz skompilować i uruchomić obraz procesora GPU z poziomu tego samego kontenera). Należy również postępować zgodnie z instrukcjami w sekcji opcjonalnej zatytułowanej tworzenie grupy platformy Docker.

Pliki korespondenta platformy Docker znajdują się w repozytorium CNTK pod adresemhttps://github.com/Microsoft/CNTK/tree/release/latest/Tools/docker

Aby skompilować obraz platformy Docker przy użyciu CNTK i wszystkich jego zależności, po prostu sklonuj repozytorium CNTK, przejdź do CNTK/Tools/docker pliku Dockerfile, który chcesz skompilować (procesor CPU lub procesor GPU). Aby na przykład skompilować obraz platformy docker procesora GPU CNTK, wykonaj następujące czynności:

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

Argument -f <path/to/Dockerfile> jest wymagany, ponieważ niektóre poprawki, typowe zarówno dla procesorów CPU, jak i plików dockerfile procesora GPU, należy zastosować w kodzie źródłowym SWIG. Jeśli wystąpią błędy, które mówią Could not resolve 'archive.ubuntu.com' , że konieczne będzie podanie platformy Docker adresów IP serwerów DNS. Najpierw znajdź adresy IP serwerów DNS przy użyciu na przykład polecenia

nm-tool

lub polecenie

nmcli dev show

Załóżmy, że adresy IP serwerów DNS to a.b.c.d i x.y.z.w. Następnie

  • w systemie Ubuntu 15.10 lub nowszym (lub innym systemie Linux korzystającym z systemu) zmodyfikuj tak /lib/systemd/system/docker.service , aby demon platformy Docker został uruchomiony z dodatkowymi opcjami --dns a.b.c.d --dns x.y.z.w
  • w systemie Ubuntu 15.04 i starszych (lub innych systemach Linux, które nie używają systemu), edytuj /etc/default/docker tak, aby wiersz
    #DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
    
    jest bez komentarza i zawiera adresy IP serwerów DNS.

Uwaga: niektóre firmy blokują publiczne serwery DNS, takie jak 8.8.8.8 i 8.8.4.4. Możesz spróbować ich użyć, ale jeśli problem będzie się powtarzać, spróbuj użyć adresów IP serwera DNS zgłoszonych przez nm-tool/nmcliusługę .

Uruchom ponownie demona platformy Docker za pomocą polecenia

sudo service docker restart

i usuń wszystkie obrazy platformy Docker, które zostały utworzone przy użyciu nieprawidłowych ustawień DNS. Aby usunąć wszystkie obrazy platformy Docker, wykonaj

docker rmi $(docker images -q)

Aby usunąć wszystkie kontenery platformy Docker

docker rm $(docker ps -a -q)

Teraz spróbuj ponownie

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

Jeśli masz procesor GPU, chcesz przetestować, czy możesz uzyskać do niego dostęp za pośrednictwem kontenera platformy Docker po utworzeniu obrazu. Wypróbuj następujące polecenie:

docker run --rm cntk nvidia-smi

Jeśli to zadziała, to wszystko jest gotowe. Jeśli tak nie jest, oznacza to, że istnieje niezgodność między wersją CUDA i/lub sterownikami zainstalowanymi na hoście i na obrazie platformy Docker CNTK. W szczególności niezgodność jest między modułem sterownika NVidia trybu jądra a modułem trybu użytkownika (który jest udostępnioną biblioteką) i dzieje się tak, jeśli wersja na hoście nie jest dokładnie zgodna z wersją w kontenerze. Na szczęście jest to łatwe do naprawienia. Wystarczy zainstalować platformę nvidia-docker i użyć jej dokładnie tak jak platforma Docker (nie trzeba ponownie kompilować obrazu).

nvidia-docker run --rm cntk nvidia-smi

Powinno to działać i umożliwia CNTK korzystanie z procesora GPU z poziomu kontenera platformy Docker. Jeśli to nie zadziała, wyszukaj sekcję Problemy w witrynie nvidia-docker GitHub — wiele rozwiązań jest już udokumentowanych. Pamiętaj, że jeśli katalogi /usr i /var znajdują się w różnych partycjach, potrzebne będą dodatkowe kroki, takie jak tutaj. Aby uzyskać interaktywną powłokę do kontenera, który nie zostanie automatycznie usunięty po zakończeniu działania

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

Jeśli chcesz udostępnić dane i konfiguracje między hostem (maszyną lub maszyną wirtualną) i kontenerem, w którym używasz CNTK, użyj opcji -v, np.

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

Spowoduje to, że plik /project1/data z hosta będzie widoczny jako /data w kontenerze i /project1/config jako /config. Taka izolacja zmniejsza prawdopodobieństwo zastąpienia konteneryzowanych eksperymentów lub użycia nieprawidłowych danych.