Linux でのCNTKのセットアップ
CNTK実稼働ビルドとテストの構成
CNTKは多くの Linux 構成で正常に実行される可能性がありますが、互換性の問題を回避したい場合は、運用環境のビルドとテストの構成CNTK理解し、使用するすべての依存関係コンポーネントとコンポーネントのバージョンを一覧表示します。
Docker コンテナーとしてCNTKする
さらに移動する前に、docker コンテナーとしてCNTKをデプロイすることを検討してください。 対応するセクションを読み取る。
現在の制限事項と注意事項
システム構成を続行する前に、このセクションをよくお読みください。 以下の情報を使用すると、ビルド エラーのデバッグに費やす時間が長く節約される場合があります。
注意
このページでは、CNTKのマスター ブランチをビルドしようとしていることを前提としています。
構成スクリプトと Makefile スクリプトで予期されるコンポーネントの場所
現在 configure
、スクリプトでは、 Makefile
このセクションに記載されているすべての依存関係コンポーネントに対して、限られたインストール パスのセットのみがサポートされています。 私たちは、これは制限であり、すぐにそれを修正することを知っています(また、これらのスクリプトを自分で改善したいと思い、 提案された変更を提出 したい場合は、あなたの助けを歓迎し、大いに感謝します)。
configure
スクリプト内で定義された変数に一覧表示されているパスの default_path_list
中から、すべての依存関係コンポーネントを検索します。
重要
特定の依存関係コンポーネントのconfigure
カスタム パスを追加するように変数を変更default_path_list
する場合は、 の対応するセクションMakefile
を確認してください。 そうしないと、INCLUDE ファイルやライブラリなどを見つけることができないため、ビルド エラーが発生する可能性があります。
依存関係コンポーネントのインストール方法とパス
以下に、CNTKの構築に必要なすべての依存関係コンポーネントの一覧と、それらをインストールする方法について説明します。 同じコンポーネントを取得するには、他にも多くの方法があることを理解しています。 ただし、別の方法のインストールを希望する場合は、 同じものを入手してください。これは、非常に頻繁に代替インストールソース、つまりネットワーク配布パッケージ(Debian、RPMなど)に古いバージョンのソフトウェアが含まれている、一部のライブラリを見逃すなどです。以下のいくつかのセクションでは、これらの制限事項を特に強調していますが、一般的な予防措置として取ってください。
の使用 make -j
ほとんどのセクションでは、コマンドを使用して make -j
並列ビルド ジョブを呼び出し、ビルド プロセスの速度を上げることをお勧めします。 ただし、一部のシステムでは、 特に仮想マシンで 使用すると make -j
、"メモリ不足" エラーが発生する可能性があることに注意してください。 これに直面した場合は、"プレーン" make
を使用するか、同時に実行するジョブの数を制限します (通常、2 つの同時ジョブはほとんどのシステムで動作します。コマンド make -j 2
を使用します)。
同じ開発パッケージの異なるバージョンの同時インストール
同じシステムに以下に示す開発パッケージの一部をインストールする場合は、非常に注意してください。 この記事でわかるように、ビルド エラーのデバッグが非常に困難になる可能性があります。
次に、セットアップに進みましょう。
CNTK運用環境で使用される前提条件の構成、つまりビルドとテストに内部的に使用されるものを知りたい場合は、このセクションを参照してください。
64 ビット OS
CNTKを使用するには、64 ビットの Linux インストールが必要です。
C++ コンパイラ
インストールに C++ コンパイラがあることを確認します。 多くのディストリビューションには、既定では含まれません。 C++ コンパイラを確認して取得する方法については、プラットフォームのドキュメントを参照してください。
例: Ubuntu の場合は、次のコマンドを実行します。
dpkg --list | grep compiler
出力に次のようなものが表示されない場合
g++-5 5.4.0-6ubuntu1~16.04.5 amd64 GNU C++ compiler
その後、C++ コンパイラはインストールされません。 Ubuntu 1604 をお持ちの場合は、次のコマンドを使用して gcc 5.4 をインストールします。
sudo apt-get install g++
Git
以下の説明に従って、システムに Git をインストールします。
MKL
既定のCNTK数学ライブラリは、Intel Math Kernel Library (Intel MKL) です。 このページに従ってインストールします
MPI を開く
Open Message Passing Interface Library (Open MPI) をインストールします。
以下で説明するようにソースからインストールすることをお勧めします。多くのディストリビューション パッケージには古いバージョンが含まれており、CNTKで必要なライブラリが見逃されているためです。 現在の CNTK Open MPI バージョンの要件は 1.10 以上です。 お使いのシステムに古いバージョンのインストールがあるかどうかを確認し、インストールする場合は、それらをアンインストールするか、ビルド手順CNTK必要なバージョンを使用していることを (シンボリック リンクを介して) 確認してください。 そうしないと、 この投稿でわかるように、ビルド エラーをデバッグするのが難しい場合があります。
- インストール ソースを取得します。
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
- Open MPI を開き、ビルドしてインストールします
/usr/local/mpi
(この例の場合):
tar -xzvf ./openmpi-1.10.3.tar.gz
cd openmpi-1.10.3
./configure --prefix=/usr/local/mpi
make -j all
sudo make install
- 現在のセッションとプロファイルに次の環境変数を追加します
.bashrc
(新しいパスを事前に設定すると、OS で使用できる既定のバージョンではなく、このバージョンが確実に使用されます)。
export PATH=/usr/local/mpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/mpi/lib:$LD_LIBRARY_PATH
Protobuf
シリアル化にはプロトコル バッファーを使用します。 インストールの場合は、次の手順に従ってください。
- を使用して必要なパッケージをインストールします。
sudo apt-get install autoconf automake libtool curl make g++ unzip
- protobuf ソースをダウンロードして展開する
wget https://github.com/google/protobuf/archive/v3.1.0.tar.gz
tar -xzf v3.1.0.tar.gz
- 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は今日、多くの一般的なLinuxディストリビューションの一部であるため、高い確率でプレインストールされています。 ただし、libzip には zlib バージョン 1.1.2 以降 が必要であり、通常はプレインストールされません。 以下の Boost をビルドする前に、zlib をインストールする必要があります。
必要な zlib パッケージを取得する方法、または zlib Web サイトから直接取得する方法については、プラットフォームのドキュメントを参照してください。
例: Ubuntu の場合は、次のコマンドを使用します。
sudo apt-get install zlib1g-dev
LIBZIP
libzip はさまざまなネットワーク配布パッケージで使用できますが、その多くは古いバージョンを含むことがわかりました。 これらのバージョンを使用すると、ビルド エラーが発生する可能性があります。 そのため、以下で説明するように、ソースから libzip をビルドすることを強くお勧めします。
次の手順では libzip をインストールします /usr/local
。 これは、CNTKビルド プロシージャが想定している場所です (詳細については、このページの先頭を参照してください)。 別のパスに libzip をインストールする場合は、libzip 配布フォルダーのルートにあるファイルの手順 INSTALL
を参照してください。
ただし、この場合は手動で編集configure
する必要がありますこのパスをサポートするCNTKの ANDMakefile
。
次のコマンドを使用します。
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
現在のセッションとプロファイルに次の環境変数を .bashrc
追加します。
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
Boost ライブラリ
Boost ライブラリは、Microsoft Cognitive Toolkitを構築するための前提条件です。 システムに Boost ライブラリをインストールするには、次の手順に従います。
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
GPU 固有のパッケージ
GPU サポートでCNTKを使用する場合は、このページに従って環境をインストールし、それに応じて構成します。
省略可能。 SWIG。
Python からCNTKを利用する場合は、SWIG をインストールする必要があります。
SWIG は、Java 用のCNTK評価ライブラリを構築するための要件でもあります。
インストールするには、次のスクリプトを実行します [CNTK clone root]/Tools/devInstall/Linux/install-swig.sh
。
これにより、インストールされているバージョンがフォルダーに作成されます /usr/local/swig-3.0.10
。
省略可能。 v2 Python のサポートをCNTKする
このセクションでは、Python サポートを使用して v2 CNTKビルドする方法について説明します。
手順 1: Python API をビルドする
- まだインストールしていない場合は、 SWIG ツール をインストールします。
- Anaconda3 4.1.1 (64 ビット) をインストールする
- CNTK Python 環境 (または呼び出し)
cntk-py36
cntk-py35
が既にある場合は、cntk-py27
次のコマンドを使用して、最新の必要なパッケージで更新できます。
# 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
- CNTK Python 環境がまだない場合は、Python 環境に基づく Python 2.7、3.5、または 3.6 ベースCNTK選択できます。
- 目的の Python バージョンに応じて、次 のいずれかの コマンドを使用して、既存の Python 3.5 Anaconda または Miniconda インストールで選択した Python 環境を作成します。
# 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
注: 手順の残りの部分で、上記で更新または作成された Python 環境がアクティブになっていることを確認します。
たとえば、Python 3.5 ベースの環境が呼び出されている場合は、次の cntk-py35
コマンドを実行します。
source activate cntk-py35
同様に、Python 3.6 または 2.7 ベースの環境の場合も同様です。
手順 2: 以前のCNTK パッケージをアンインストールする
- コンピューターに CNTK pip-package のバージョンを以前にインストールした場合は、次を実行してアンインストールします。
pip uninstall cntk
手順 3: Python パッケージをビルドする
- Python を使用してビルドを構成するには、次の 2 つのオプションを実行
configure
するときに含めます。
--with-swig[=directory]
および次 のいずれか (お使いの環境に適用されるもの)
--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
- この段階では、リリース ビルドのみがサポートされます。 たとえば、SWIG を
/usr/local/swig-3.0.10
インストールし、Python 環境が次の追加パラメーターconfigure
を指定する場所にある$HOME/anaconda3/envs/cntk-py35
場合:
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
- その後、通常どおりに make を実行します。これは、CNTK Python モジュールを内部
bindings/python/cntk
にビルドし、ビルド出力フォルダーのサブフォルダー python (例:build/gpu/release/python
)にパッケージ (.whl) を生成します。
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
注意
Pip パッケージのインストール用に示されているセットアップとは対照的に、ここでは、python 環境にインストールされているパッケージとしてではなく、CNTK リポジトリ クローンからCNTK モジュールを読み込みます。 (したがって、設定 PYTHONPATH
の違いもあります)
手順 4: セットアップを確認する
Python
- Python の例をディレクトリ内
[CNTK clone root]/Tutorials
[CNTK clone root]/Examples
から実行して、インストールを確認します。 たとえば、フォルダーに移動して実行python FeedForwardNet.py
します[CNTK clone root]/Tutorials/NumpyInterop
。 コンソールに次の出力が表示されます。
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
省略可能。 OpenCV
CNTK 2.2 では、オープン ソース Computer Vision (OpenCV) をインストールする必要がありますが、CNTK 2.3 以降はオプションです。 このページに従ってインストールします
省略可能。 Java
CNTK Evaluation ライブラリの Java バインドをビルドするには、SWIG ツールをまだインストールしていない場合はインストールします。 また、Java Development Kit (JDK) も必要です。 現在、64 ビット の OpenJDK 8 を使用しています。
構成スクリプトには、 --with-jdk
JDK ディレクトリが既定で見つからない場合に手動で指定するオプションが用意されています。
ソース コードCNTK取得する
先に進む前に、CNTKコードを変更する予定がある場合は、開発とテストに関する情報を読む必要があることに注意してください。
Git を使用して CNTK リポジトリを複製し、ソース コードにアクセスします。
git clone --recursive https://github.com/Microsoft/cntk
cd cntk
サブモジュール Multiverso は、トレーニングで DataParallelASGD を有効にするために使用されます。
オプション DataParallelASGD のサポートが必要ない場合は、オプションを --asgd=no
configure コマンドに渡します。
CNTKの構築
CNTKビルドするには、次のコマンドを使用します (CNTK リポジトリが複製~/Repos/cntk
されたと想定しています)。
cd ~/Repos/cntk
mkdir build/release -p
cd build/release
../../configure
出力が前の configure
セクションでインストールしたパッケージに対応していることを確認します。 つまり、インストールされている場合は CUDA が見つかっていることを configure
確認します。
ビルド時間を最小限に抑えるために、すべてのコアを使用してCNTKをビルドするには、次の手順を実行します。 一部のコンピューターでは、ビルド中にシステムがハングまたは中断する可能性があることに注意してください。
make -j all
上記の方法でコンピューターが過負荷の場合は、少ないコア数を指定してみてください。 たとえば、2 つ以上のコアがあり、2 つのコアをビルドから解放したい場合は、次の方法を試すことができます。
make -j"$(($(nproc) - 2))" all
絶対に安全である場合は、1 つのコアを使用します。
make all
これにより、CNTKのリリース ビルドが生成されます。 デバッグ ビルドを取得する場合は、次のパラメーターを使用して呼び出します configure
。
../../configure --with-buildtype=debug
CNTKビルド機能のクイック テスト
システムでCNTKが正しく動作していることを確認するには、Hello World - ロジスティック回帰チュートリアルの例をすばやく実行できます。 この例では、単純なネットワークをトレーニングし、CPU または GPU のいずれかを使用するように指示できます。これにより、CNTKが正常に機能していることを迅速に確認できます。
以下では、CNTK リポジトリが複製~/Repos/cntk
され、build/release
ビルドのサブディレクトリとして使用されていることを前提としています。
- CNTK バイナリへのパスを指定し、ディレクトリに
Tutorials/HelloWorld-LogisticRegression
変更します。
export PATH=$HOME/Repos/cntk/build/release/bin:$PATH
cd ~/Repos/cntk/Tutorials/HelloWorld-LogisticRegression
まず、次の例を試してください。
cntk configFile=lr_bs.cntk makeMode=false
サンプルが実行されている場合、つまり、エラー メッセージがない場合は、最初に構成の読み取りに関連する出力が表示され、その後に実際のネットワーク トレーニングの出力が表示されます。
GPU でCNTKを試す
GPU 使用量のCNTKを構築した場合は、次のコマンドを実行して GPU を使用してみてください。
cntk configFile=lr_bs.cntk makeMode=false deviceId=auto
出力の先頭付近に、GPU が使用されたことを確認する行が表示されます。
Model has 9 nodes. Using GPU 0.
GPU ID が異なる場合があることに注意してください。 このパラメーターは deviceId
、計算に使用するプロセッサを定義します。
-
deviceId=-1
は CPU の使用を意味します。 既定値 -
deviceId=X
ここで、X は整数 >=0 は GPU X を使用し、つまりdeviceId=0
GPU 0 などを意味します。 -
deviceId=auto
GPU を使用する場合は、GPU を自動的に選択する
CNTK コードへの貢献
コードの変更を計画する場合は、 開発とテストに関する情報を読む必要があります。
次の手順