다음을 통해 공유


Linux에서 CNTK 설정

프로덕션 빌드 및 테스트 구성 CNTK

CNTK 많은 Linux 구성에서 성공적으로 실행될 수 있지만 가능한 호환성 문제를 방지하려는 경우 사용하는 모든 종속성 구성 요소 및 구성 요소 버전을 나열하는 CNTK 프로덕션 빌드 및 테스트 구성에 익숙해질 수 있습니다.

Docker 컨테이너로 CNTK

더 나아가기 전에 docker 컨테이너로 CNTK 배포하는 것이 좋습니다. 해당 섹션을 읽습니다.

현재 제한 사항 및 예방 조치

시스템 구성을 진행하기 전에 이 섹션을 주의 깊게 읽어 보세요. 아래 정보는 빌드 오류 디버깅에 소요된 많은 시간을 절약할 수 있습니다.

참고

이 페이지에서는 CNTK 마스터 분기를 빌드하려고 한다고 가정합니다.

구성 및 메이크파일 스크립트의 예상 구성 요소 위치

현재 configure 스크립트 Makefile 는 이 섹션에 나열된 모든 종속성 구성 요소에 대해 제한된 설치 경로 집합만 지원합니다. 우리는 이것이 제한 사항이며 곧 해결할 것입니다 (또한 이러한 스크립트를 스스로 개선하고 제안 된 변경 사항을 제출 하는 것이 좋습니다.

configure 는 스크립트 내에 정의된 변수에 나열된 default_path_list 경로 중 모든 종속성 구성 요소를 찾습니다.

중요

특정 종속성 구성 요소에 configure 대한 사용자 지정 경로를 추가하기 위해 변수를 수정 default_path_list 하려는 경우 .Makefile 그렇지 않으면 INCLUDE 파일, 라이브러리 등을 찾을 수 없어 빌드 오류가 발생할 수 있습니다.

종속성 구성 요소의 설치 방법 및 경로

아래에는 CNTK 빌드하고 설치하는 방법을 설명하는 데 필요한 모든 종속성 구성 요소가 나열되어 있습니다. 동일한 구성 요소를 가져오는 다른 많은 방법이 있다는 것을 알고 있습니다. 그러나 대체 설치 방법을 선호하는 경우 대체 설치 원본, 즉 네트워크 배포 패키지(예: Debian, RPM 등)에 이전 버전의 소프트웨어가 포함되어 있고 일부 라이브러리가 누락되는 경우가 많기 때문에 동일한 기능을 사용할 수 있는지 확인하세요. 아래의 일부 섹션에서는 이러한 제한 사항을 구체적으로 강조하지만 일반적인 예방 조치로 사용하세요.

사용 현황 make -j

대부분의 섹션에서는 명령을 사용하여 make -j 병렬 빌드 작업을 호출하여 빌드 프로세스의 속도를 높이는 것이 좋습니다. 그러나 일부 시스템, 특히 가상 머신에서 " make -j 메모리 부족" 오류가 발생할 수 있습니다. 이 경우 "일반" make 을 사용하거나 동시에 실행되는 작업 수를 제한합니다(두 개의 동시 작업은 일반적으로 대부분의 시스템에서 작동합니다. 명령을 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 MKL(Intel Math Kernel Library)입니다. 이 페이지를 따라 설치합니다.

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 웹 사이트에서 직접 가져오는 방법에 대한 플랫폼 설명서를 참조하세요.

예: Ubuntu의 경우 다음 명령을 사용합니다.

sudo apt-get install zlib1g-dev

LIBZIP

libzip은 서로 다른 네트워크 배포 패키지에서 사용할 수 있지만 많은 패키지에 이전 버전이 포함되어 있는 것으로 나타났습니다. 이러한 버전을 사용하면 빌드 오류가 발생할 수 있습니다. 따라서 아래에 설명된 대로 원본에서 libzip을 빌드하는 것이 좋습니다.

다음 절차에서는 libzip을 설치합니다 /usr/local. CNTK 빌드 프로시저에서 예상되는 위치입니다(자세한 내용은 이 페이지의 시작 부분을 참조하세요). 다른 경로에 libzip을 설치하려는 경우 libzip 배포 폴더의 루트에 있는 파일의 지침을 INSTALL 참조하세요. 그러나 이 경우 수동으로 편집 configure 해야 합니다. 이 Makefile 경로를 지원하기 위한 CNTK.

다음 명령을 사용합니다.

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 라이브러리는 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에 설치된 버전이 만들어집니다.

옵션. CNTK v2 Python 지원

이 섹션에서는 Python 지원을 사용하여 CNTK v2를 빌드하는 방법을 설명합니다.

1단계: Python API 빌드

  • 아직 설치하지 않은 경우 SWIG 도구를 설치합니다.
  • Anaconda3 4.1.1(64비트) 설치
  • 이미 CNTK Python 환경(또는)cntk-py36cntk-py35cntk-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 2.7, 3.5 또는 3.6 기반 CNTK Python 환경 중에서 선택할 수 있습니다.
  • 원하는 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을 사용하여 빌드를 구성하려면 실행할 configure때 다음 두 가지 옵션을 포함합니다.
--with-swig[=directory]

및 다음 중 하나 (사용자 환경에 적용되는 모든 항목):

--with-py36-path[=directory]
--with-py35-path[=directory]
--with-py27-path[=directory]
  • 이 단계에서는 릴리스 빌드만 지원됩니다. 예를 들어 SWIG를 /usr/local/swig-3.0.10 설치하고 Python 환경이 있는 $HOME/anaconda3/envs/cntk-py35 경우 다음 추가 매개 변수를 configure제공합니다.
--with-swig=/usr/local/swig-3.0.10 --with-py35-path=$HOME/anaconda3/envs/cntk-py35
  • 그 후 정상적으로 make를 실행합니다. 그러면 CNTK Python 모듈을 빌드 bindings/python/cntk 하고 빌드 출력 폴더(예: build/gpu/release/python)의 하위 폴더 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

  • 또는 [CNTK clone root]/Examples 디렉터리 내에서 Python 예제를 [CNTK clone root]/Tutorials 실행하여 설치를 확인합니다. 예를 들어 폴더 [CNTK clone root]/Tutorials/NumpyInterop 로 이동하여 실행 python FeedForwardNet.py합니다. 콘솔에 다음 출력이 표시됩니다.
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에서는 OpenCV(오픈 소스 Computer Vision)를 설치해야 하지만 CNTK 2.3 이후에는 선택 사항입니다. 이 페이지를 따라 설치합니다.

옵션. Java

CNTK 평가 라이브러리에 대한 Java 바인딩을 빌드하려면 아직 수행하지 않은 경우 SWIG 도구를 설치합니다. 또한 JDK(Java Development Kit)가 필요합니다. 현재 64비트 OpenJDK 8을 사용합니다.

구성 스크립트는 기본적으로 찾을 수 없는 경우 JDK 디렉터리를 수동으로 지정하는 옵션을 제공합니다 --with-jdk .

CNTK 소스 코드 가져오기

계속 진행하기 전에 CNTK 코드를 수정하려는 경우 개발 및 테스트에 대한 정보를 읽어야 합니다.

Git을 사용하여 CNTK 리포지토리를 복제하고 소스 코드에 액세스합니다.

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

Submodule Multiverso는 학습에 DataParallelASGD 를 사용하도록 설정하는 데 사용됩니다.

선택적 DataParallelASGD 지원이 필요하지 않은 경우 구성 명령에 옵션을 --asgd=no 전달합니다.

건물 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 시스템에서 제대로 작동하는지 확인하려면 헬로 월드 - 로지스틱 회귀 자습서의 예제를 신속하게 실행할 수 있습니다. 이 예제에서는 간단한 네트워크를 학습하고 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 코드에 기여

코드 수정을 계획하는 경우 개발 및 테스트에 대한 정보를 읽어야 합니다.

다음 단계