Bagikan melalui


Menyiapkan CNTK di Linux

Konfigurasi Build dan Pengujian Produksi CNTK

CNTK mungkin berhasil dijalankan dalam banyak konfigurasi Linux, tetapi jika Anda ingin menghindari kemungkinan masalah kompatibilitas, Anda mungkin terbiasa dengan konfigurasi Build dan Pengujian Produksi CNTK di mana kami mencantumkan semua komponen dependensi dan versi komponen yang kami gunakan.

CNTK sebagai kontainer Docker

Sebelum memindahkan lebih jauh, Anda dapat mempertimbangkan untuk menyebarkan CNTK sebagai kontainer Docker. Baca bagian yang sesuai.

Batasan dan tindakan pencegahan saat ini

Harap baca dengan cermat bagian ini sebelum Anda melanjutkan konfigurasi sistem Anda. Informasi di bawah ini dapat menghemat banyak waktu jika tidak dihabiskan untuk debugging kesalahan build.

Catatan

Halaman ini mengasumsikan bahwa Anda mencoba membangun cabang master CNTK.

Lokasi komponen yang diharapkan dalam konfigurasi dan skrip Makefile

Saat ini configure dan Makefile skrip hanya mendukung serangkaian jalur penginstalan terbatas untuk semua komponen dependensi yang tercantum di bagian ini. Kami tahu, bahwa ini adalah batasan dan akan segera memperbaikinya (juga jika Anda ingin meningkatkan naskah-naskah ini sendiri dan mengirimkan perubahan yang Anda usulkan , bantuan Anda diterima dan sangat dihargai).

configure mencari semua komponen dependensi di antara jalur yang tercantum dalam variabel yang ditentukan dalam default_path_list skrip.

Penting

Jika Anda ingin mengubah default_path_list variabel di configure untuk menambahkan jalur kustom untuk komponen dependensi tertentu, pastikan untuk memeriksa bagian koresponden dari Makefile. Jika tidak, Anda mungkin mendapatkan kesalahan build karena ketidakmampuan menemukan file INCLUDE, pustaka, dll.

Metode penginstalan dan jalur komponen dependensi

Di bawah ini kami mencantumkan semua komponen dependensi yang diperlukan untuk membangun CNTK dan menjelaskan cara menginstalnya. Kami memahami bahwa ada banyak cara lain untuk mendapatkan komponen yang sama. Namun, jika Anda lebih suka cara penginstalan alternatif, pastikan Anda mendapatkan hal yang sama, karena cukup sering sumber penginstalan alternatif, yaitu paket distribusi jaringan (seperti Debian, RPM, dll.) berisi versi perangkat lunak yang lebih lama, ketinggalan beberapa pustaka, dll. Di beberapa bagian di bawah ini kami secara khusus menyoroti batasan ini, tetapi harap anggap sebagai tindakan pencegahan umum.

Penggunaan make -j

Di sebagian besar bagian, sebaiknya gunakan make -j perintah untuk memanggil pekerjaan build paralel dan dengan demikian meningkatkan kecepatan proses build. Namun perlu diketahui bahwa pada beberapa sistem dan terutama pada komputer virtual yang menggunakan make -j dapat mengakibatkan kesalahan "Kehabisan memori". Jika Anda menghadapi ini, cukup gunakan "polos" make atau batasi jumlah pekerjaan yang berjalan secara bersamaan (dua pekerjaan simultan biasanya berfungsi untuk sebagian besar sistem - gunakan perintah make -j 2).

Penginstalan simultan dari berbagai versi paket pengembangan yang sama

Berhati-hatilah jika Anda ingin memiliki beberapa instalasi dari beberapa paket pengembangan yang disebutkan di bawah ini pada sistem yang sama. Ini dapat mengakibatkan sangat sulit untuk men-debug kesalahan build seperti yang Anda lihat di posting ini.

Dan sekarang mari kita lanjutkan ke pengaturan.

Jika Anda ingin tahu konfigurasi prasyarat apa yang digunakan di lingkungan produksi CNTK, yaitu apa yang kami gunakan secara internal untuk membangun dan menguji, lihat bagian ini

OS 64-bit

Anda memerlukan penginstalan Linux 64-bit untuk menggunakan CNTK.

Pengompilasi C++

Pastikan penginstalan Anda memiliki pengkompilasi C++. Banyak distribusi tidak menyertakannya secara default. Lihat dokumentasi platform Anda tentang cara memeriksa dan mendapatkan pengkompilasi C++.

Contoh: untuk Ubuntu, jalankan perintah berikut:

dpkg --list | grep compiler

jika dalam output Anda tidak melihat sesuatu seperti

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

pengkompilasi C++ tidak diinstal. Jika Anda memiliki Ubuntu 1604, instal gcc 5.4 dengan:

sudo apt-get install g++

Git

Instal Git pada sistem Anda seperti yang dijelaskan di sini.

MKL

Pustaka matematika CNTK default adalah Intel Math Kernel Library (Intel MKL). Ikuti halaman ini untuk menginstalnya

Buka MPI

Instal Open Message Passing Interface Library (Open MPI).

Sebaiknya instal dari sumber seperti yang dijelaskan di bawah ini karena banyak paket distribusi berisi versi yang lebih lama dan melewatkan pustaka yang diperlukan oleh CNTK. Persyaratan versi CNTK Open MPI saat ini setidaknya 1.10. Silakan, periksa apakah Anda memiliki penginstalan versi yang lebih lama pada sistem Anda dan jika Anda melakukannya, hapus instalannya atau pastikan (melalui, misalnya tautan simbolis) bahwa prosedur build CNTK menggunakan versi yang diperlukan. Jika tidak, Anda mungkin sulit untuk men-debug kesalahan build seperti yang Anda lihat di posting ini.

  • Dapatkan sumber penginstalan:
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
  • Buka kemasan, bangun, dan instal Open MPI (ke /usr/local/mpi dalam contoh ini):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
  • Tambahkan variabel lingkungan berikut ke sesi Anda saat ini dan profil Anda .bashrc (Menambahkan jalur baru, memastikan versi ini digunakan dibandingkan dengan versi default yang tersedia melalui OS):
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH

Protobuf

Kami menggunakan Buffer Protokol untuk serialisasi. Untuk penginstalan, ikuti langkah-langkah berikut:

  • Menginstal paket yang diperlukan menggunakan
sudo apt-get install autoconf automake libtool curl make g++ unzip
  • Unduh dan buka kemasan sumber protobuf
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
  • Mengkompilasi 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 saat ini adalah bagian dari banyak distribusi Linux populer sehingga dengan probabilitas tinggi Anda telah menginstalnya sebelumnya. Namun perhatikan, bahwa libzip memerlukan zlib versi 1.1.2 atau yang lebih baru dan ini biasanya TIDAK diinstal sebelumnya. zlib harus diinstal sebelum membangun Boost di bawah ini.

Lihat dokumentasi platform Anda tentang cara mendapatkan paket zlib yang diperlukan atau mendapatkannya langsung dari situs web zlib.

Contoh: untuk Ubuntu gunakan perintah berikut:

sudo apt-get install zlib1g-dev

LIBZIP

libzip tersedia dalam paket distribusi jaringan yang berbeda, tetapi kami menemukan bahwa banyak dari mereka berisi versi lama. Menggunakan versi ini kemungkinan akan mengakibatkan kesalahan build. Jadi kami sangat menyarankan untuk membangun libzip dari sumber seperti yang dijelaskan di bawah ini.

Perhatikan bahwa prosedur berikut akan menginstal libzip ke /usr/local. Di sinilah prosedur build CNTK mengharapkannya (lihat awal halaman ini untuk detailnya). Jika Anda ingin menginstal libzip ke jalur yang berbeda, lihat instruksi dalam INSTALL file di akar folder distribusi libzip. Namun berhati-hatilah bahwa dalam hal ini Anda harus mengedit configure secara manual DAN Makefile CNTK untuk mendukung jalur ini.

Gunakan perintah berikut:

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

Tambahkan variabel lingkungan berikut ke sesi Anda saat ini dan profil Anda .bashrc :

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

Tingkatkan Pustaka

Pustaka Boost adalah prasyarat untuk membangun Microsoft Cognitive Toolkit. Ikuti langkah-langkah berikut untuk menginstal Pustaka Boost di sistem Anda:

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  

Paket Khusus GPU

Jika Anda ingin menggunakan CNTK dengan dukungan GPU, ikuti halaman ini untuk menginstal dan mengonfigurasi lingkungan yang sesuai.

OPSIONAL. SWIG.

Jika Anda ingin memanfaatkan CNTK dari Python, Anda harus menginstal SWIG. SWIG juga merupakan persyaratan untuk membangun pustaka Evaluasi CNTK untuk Java. Untuk menginstalnya, jalankan skrip: [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh. Ini membuat versi yang diinstal di folder /usr/local/swig-3.0.10.

OPSIONAL. Dukungan CNTK v2 Python

Bagian ini menjelaskan cara membangun CNTK v2 dengan dukungan Python.

Langkah 1: Bangun API Python

  • Instal alat SWIG jika Anda belum melakukannya.
  • Instal Anaconda3 4.1.1 (64-bit)
  • Jika Anda sudah memiliki lingkungan CNTK Python (disebut cntk-py36, , cntk-py35atau cntk-py27) Anda dapat memperbaruinya dengan paket terbaru yang diperlukan dengan perintah berikut:
# 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
  • Jika Anda belum memiliki lingkungan Python CNTK, Anda dapat memilih antara lingkungan Python 2.7, 3.5, atau 3.6 berbasis CNTK Python.
  • Buat lingkungan pilihan Python Anda di penginstalan Python 3.5 Anaconda atau Miniconda yang ada menggunakan salah satu perintah berikut, tergantung pada versi Python yang Anda inginkan:
# 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

Catatan: Pastikan bahwa lingkungan Python yang diperbarui atau dibuat di atas diaktifkan selama sisa instruksi. Misalnya, jika Anda memiliki lingkungan berbasis Python 3.5 yang disebut cntk-py35 jalankan perintah ini:

source activate cntk-py35

Demikian pula, untuk lingkungan berbasis Python 3.6, atau 2.7.

Langkah 2: Hapus instalan paket CNTK sebelumnya

  • Jika sebelumnya Anda menginstal versi paket pip CNTK di komputer Anda, hapus instalannya dengan menjalankan: pip uninstall cntk

Langkah 3: Bangun Paket Python

  • Untuk mengonfigurasi build dengan Python, sertakan dua opsi ini saat menjalankan configure:
--with-swig[=directory]

dan salah satu hal berikut (apa pun yang berlaku untuk lingkungan Anda):

--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
  • Hanya build Rilis yang didukung pada tahap ini. Misalnya, jika Anda menginstal SWIG ke /usr/local/swig-3.0.10 dan lingkungan Python Anda terletak di $HOME/anaconda3/envs/cntk-py35 berikan parameter tambahan ini ke configure:
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
  • Setelah itu, jalankan membuat seperti biasa, yang akan membangun modul CNTK Python di dalam bindings/python/cntk dan juga menghasilkan paket (.whl) dalam python subfolder folder output build Anda (misalnya, 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

Catatan

Berbeda dengan pengaturan yang ditampilkan untuk penginstalan paket Pip, di sini kita akan memuat modul CNTK dari klon repositori CNTK, bukan sebagai paket yang diinstal di lingkungan Python Anda. (Oleh karena itu juga perbedaan dalam pengaturan PYTHONPATH)

Langkah 4: Verifikasi penyiapan

Python

  • Jalankan contoh Python dari dalam [CNTK clone root]/Tutorials direktori atau [CNTK clone root]/Examples , untuk memverifikasi penginstalan Anda. Misalnya, buka folder [CNTK clone root]/Tutorials/NumpyInterop dan jalankan python FeedForwardNet.py. Anda akan melihat output berikut di konsol:
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

OPSIONAL. OpenCV

CNTK 2.2 mengharuskan Open Source Computer Vision (OpenCV) diinstal tetapi bersifat opsional setelah CNTK 2.3. Ikuti halaman ini untuk menginstalnya

OPSIONAL. Java

Untuk membangun pengikatan Java untuk pustaka Evaluasi CNTK, instal alat SWIG jika Anda belum melakukannya. Selain itu, Java Development Kit (JDK) diperlukan. Saat ini kami menggunakan OpenJDK 8 64-bit.

Skrip konfigurasi menyediakan --with-jdk opsi untuk menentukan direktori JDK secara manual, jika tidak dapat ditemukan secara default.

Mendapatkan kode Sumber CNTK

Sebelum melanjutkan lebih jauh, harap dicatat, bahwa jika Anda berencana untuk membuat modifikasi pada kode CNTK, Anda harus membaca informasi tentang Pengembangan dan Pengujian.

Gunakan Git untuk mengkloning Repositori CNTK dan mengakses kode sumber:

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

Submodule Multiverso digunakan untuk mengaktifkan DataParallelASGD untuk pelatihan.

Opsional Jika Anda tidak memerlukan dukungan DataParallelASGD, teruskan opsi --asgd=no ke perintah konfigurasi.

Membangun CNTK

Untuk membangun CNTK, gunakan perintah berikut (kami berasumsi bahwa repositori CNTK dikloning ke ~/Repos/cntk):

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

Pastikan bahwa configure output sesuai dengan paket yang Anda instal di bagian sebelumnya. Yaitu memastikan bahwa configure menemukan CUDA jika diinstal, dll.

Lakukan hal berikut untuk membangun CNTK menggunakan semua inti untuk meminimalkan waktu build. Perhatikan bahwa di beberapa komputer, ini dapat membuat sistem Anda kewalahan yang menyebabkan macet atau putus selama build.

make -j all

Jika hal di atas membuat komputer Anda kewalahan, coba tentukan lebih sedikit inti. Misalnya jika Anda memiliki lebih dari 2 core, dan ingin membebaskan 2 core dari build, Anda dapat mencoba:

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

Jika Anda ingin benar-benar aman, cukup gunakan 1 core:

make all

Ini harus menghasilkan build rilis CNTK. Jika Anda ingin mendapatkan build debug, gunakan parameter berikut saat memanggil configure:

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

Uji cepat fungsionalitas build CNTK

Untuk memastikan bahwa CNTK berfungsi dengan baik di sistem Anda, Anda dapat dengan cepat menjalankan contoh dari tutorial Halo Dunia - Regresi Logistik. Contoh ini melatih jaringan sederhana dan dapat diarahkan untuk menggunakan CPU atau GPU, yang membantu dengan cepat memastikan bahwa CNTK berfungsi dengan baik.

Di bawah ini kami berasumsi bahwa repositori CNTK dikloning dan ~/Repos/cntkbuild/release digunakan sebagai sub-direktori untuk build.

  • Berikan jalur ke biner CNTK dan ubah ke Tutorials/HelloWorld-LogisticRegression direktori:
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression

Pertama-tama coba contoh:

cntk configFile=lr_bs.cntk makeMode=false

Jika sampel berjalan, yaitu, jika tidak ada pesan kesalahan, Anda akan mendapatkan output yang terkait terlebih dahulu untuk membaca konfigurasi, diikuti oleh output pelatihan jaringan yang sebenarnya.

Mencoba CNTK dengan GPU

Jika Anda membuat CNTK untuk penggunaan GPU, coba gunakan GPU dengan menjalankan perintah berikut:

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

Di dekat awal output, Anda akan melihat baris yang mengonfirmasi bahwa GPU digunakan:

Model has 9 nodes. Using GPU 0.

Perhatikan bahwa ID GPU mungkin berbeda. Parameter deviceId menentukan prosesor apa yang akan digunakan untuk komputasi.

  • deviceId=-1 berarti menggunakan CPU. Nilai default
  • deviceId=X di mana X adalah bilangan bulat >=0 berarti menggunakan GPU X, yaitu deviceId=0 berarti GPU 0, dll.
  • deviceId=auto berarti menggunakan GPU, pilih GPU secara otomatis

Berkontribusi pada kode CNTK

Jika Anda merencanakan modifikasi pada kode, Anda harus membaca informasi tentang Pengembangan dan Pengujian.

Langkah berikutnya