Bagikan melalui


Kontainer Docker CNTK

Anda dapat mengatur CNTK sebagai Kontainer Docker pada sistem Linux Anda.

Ada dua cara menggunakan Kontainer Docker CNTK:

Menggunakan Gambar CNTK yang diterbitkan di Docker Hub

Kami menghosting Gambar CNTK publik di Docker Hub. Lihat daftar lengkap Gambar yang tersedia di halaman Repositori CNTK di Docker Hub. Saat ini kami hanya menghosting konfigurasi runtime . Konfigurasi runtime sesuai dengan lingkungan dengan paket Biner CNTK yang diinstal dan dikonfigurasi. Konfigurasi ini tidak berisi kode sumber CNTK, maupun prasyarat yang diperlukan untuk membangun CNTK.

Perhatikan, bahwa Anda memerlukan NVIDIA Docker untuk menggunakan gambar berkemampuan GPU CNTK.

Perintah Docker standar digunakan untuk mendapatkan gambar:

docker pull mcr.microsoft.com/cntk/release

untuk mendapatkan gambar rilis resmi terbaru, yang hari ini berarti konfigurasi runtime GPU terbaru yang tersedia. Anda juga bisa mendapatkan gambar malam pengembangan terbaru:

docker pull mcr.microsoft.com/cntk/nightly

Untuk mendapatkan konfigurasi tertentu, Anda perlu menambahkan tag. Mis.

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

akan menyiapkan konfigurasi runtime CPU CNTK 2.7 untuk Python 3.5.

Jika Anda tidak terbiasa dengan Docker, baca bagian di bawah ini di halaman ini.

Menggunakan kontainer Docker untuk menjalankan tutorial CNTK Jupyter Notebook

Anda dapat menggunakan kontainer CNTK Docker untuk menjalankan CNTK Jupyter Notebooks di lingkungan lokal Anda.

Kami berasumsi bahwa Anda telah menarik gambar yang diperlukan dari Docker Hub. Dalam contoh di bawah ini kita akan menggunakan konfigurasi GPU. Jika Anda menggunakan konfigurasi CPU, maka dalam perintah di bawah ini ganti semua kemunculan nvidia-docker dengan docker.

Pertama-tama buat dan mulai kontainer CNTK dalam mode lepas dengan port IP terekspos (kami menggunakan port 8888 yang default untuk aplikasi Jupyter Notebook):

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

Sekarang mulai server Jupyter Notebook di kontainer Docker Anda:

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"

Di terminal Anda, Anda akan melihat output konsol server Jupyter Notebooks. Output ini akan berisi baris seperti ini:
http://0.0.0.0:8888/?token=082684fbe2b43eebd72583c301c05072084173d0ac06a4d7

Salin token yang ditampilkan (dalam contoh 082684fbe2b43eebd72583c301c05072084173d0ac06a4d7kami ).

Sekarang Anda dapat mengakses Notebook CNTK Jupyter menggunakan alamat IP komputer tempat Anda menjalankan kontainer Docker. Yaitu jika alamat komputer Anda kemudian untuk 192.168.1.1 mengakses Notebook CNTK buka jendela browser dan buka http://192.168.1.1:8888.

Perhatikan, bahwa selama menjalankan pertama aplikasi Jupyter Notebook akan meminta kata sandi atau token. Gunakan token yang telah Anda simpan di atas.

Untuk menghentikan urutan pengiriman Ctrl-C server Jupyter Notebook di terminal tempat Anda memiliki output konsol server Jupiter Notebook dan mengonfirmasi mematikan server. Perhatikan bahwa itu tidak akan menghentikan kontainer Docker itu sendiri. Untuk menghentikan kontainer, gunakan perintah :
docker stop cntk-jupyter-notebooks

PERINGATAN! Perintah di atas akan mengekspos aplikasi Jupyter Notebooks kepada semua orang yang dapat mengakses alamat IP komputer tempat Anda menjalankan kontainer Docker.

Membangun gambar CNTK Docker

Anda dapat membangun dan menjalankan CNTK menggunakan kontainer yang sama dan ini adalah pendekatan yang direkomendasikan untuk mereproduksi konfigurasi referensi kami.

Pertama, Anda perlu menginstal docker. Sangat disarankan untuk mengikuti proses penginstalan dalam dokumentasi docker resmi. Versi yang disertakan dengan distribusi Linux Anda mungkin sudah usang dan tidak akan berfungsi dengan nvidia-docker (yang mungkin perlu Anda instal selain docker jika Anda berencana untuk membangun dan menjalankan gambar GPU dari dalam kontainer yang sama). Anda juga harus mengikuti instruksi di bagian opsional berjudul membuat grup docker.

File Docker yang sesuai ada di Repositori CNTK di https://github.com/Microsoft/CNTK/tree/release/latest/Tools/docker

Untuk membangun gambar docker dengan CNTK dan semua dependensinya, cukup kloning repositori CNTK, navigasikan ke CNTK/Tools/docker dan gunakan Dockerfile yang ingin Anda bangun (CPU atau GPU). Misalnya, untuk membangun gambar docker GPU CNTK, jalankan:

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

Argumen -f <path/to/Dockerfile> diperlukan karena beberapa patch, umum untuk dockerfiles CPU dan GPU, perlu diterapkan pada kode sumber SWIG. Jika Anda menerima kesalahan yang mengatakan Could not resolve 'archive.ubuntu.com' Anda harus menyediakan docker dengan alamat IP server DNS Anda. Pertama-tama temukan alamat IP server DNS Anda menggunakan, misalnya, perintah

nm-tool

atau perintah

nmcli dev show

Katakanlah IP server DNS Anda adalah a.b.c.d dan x.y.z.w. Kemudian

  • pada Ubuntu 15.10 dan yang lebih baru (atau Linux lain yang menggunakan systemd) memodifikasi /lib/systemd/system/docker.service sehingga daemon docker dimulai dengan opsi tambahan --dns a.b.c.d --dns x.y.z.w
  • pada Ubuntu 15.04 dan yang lebih lama (atau Linux lain yang tidak menggunakan systemd) edit /etc/default/docker sehingga baris
    #DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
    
    tidak berkomentar dan berisi alamat IP server DNS Anda.

Catatan: beberapa perusahaan memblokir server DNS publik seperti 8.8.8.8 dan 8.8.4.4. Anda dapat mencoba menggunakannya tetapi jika masalah berlanjut, Anda harus mencoba menggunakan alamat IP server DNS yang dilaporkan oleh nm-tool/nmcli.

Mulai ulang daemon docker melalui

sudo service docker restart

dan hapus gambar docker apa pun yang dibuat dengan pengaturan DNS yang salah. Untuk menghapus semua gambar docker, lakukan

docker rmi $(docker images -q)

Untuk menghapus semua kontainer docker lakukan

docker rm $(docker ps -a -q)

Sekarang coba lagi

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

Jika Anda memiliki GPU, Anda akan ingin menguji apakah Anda dapat mengaksesnya melalui kontainer docker setelah Anda membangun gambar. Coba perintah ini:

docker run --rm cntk nvidia-smi

Jika berhasil, Anda selesai. Jika tidak, itu berarti ada ketidakcocokan antara versi CUDA dan/atau driver yang diinstal pada host Anda dan di gambar docker CNTK Anda. Secara khusus, ketidakcocokan antara modul driver NVidia mode kernel dan modul mode pengguna (yang merupakan lib bersama) dan ini terjadi jika versi pada host tidak sama persis dengan versi dalam kontainer. Untungnya ini mudah diperbaiki. Cukup instal nvidia-docker dan gunakan persis seperti docker (tidak perlu membangun kembali gambar).

nvidia-docker run --rm cntk nvidia-smi

Ini harus berfungsi dan memungkinkan CNTK untuk menggunakan GPU dari dalam kontainer docker. Jika ini tidak berhasil, cari bagian Masalah pada GitHub nvidia-docker -- banyak solusi yang sudah didokumenkan. Perhatikan bahwa jika direktori /usr dan /var Anda berada di partisi yang berbeda, Anda akan memerlukan beberapa langkah tambahan seperti di sini. Untuk mendapatkan shell interaktif ke kontainer yang tidak akan dihapus secara otomatis setelah Anda keluar lakukan

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

Jika Anda ingin berbagi data dan konfigurasi antara host (komputer atau VM Anda) dan kontainer tempat Anda menggunakan CNTK, gunakan opsi -v, misalnya.

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

Ini akan membuat /project1/data dari host terlihat sebagai /data dalam kontainer, dan /project1/config sebagai /config. Isolasi tersebut mengurangi kemungkinan eksperimen kontainer Anda menimpa atau menggunakan data yang salah.