1.2.HowToInstallKsbToolBox-nvidia-1903.md 16.5 KB
Newer Older
HooYoungAhn's avatar
HooYoungAhn committed
---
html:
  toc: true
  offline: true
export_on_save:
  html: true
---
# KSB 툴박스 설치하기(nvidia-docker버전)
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 v19.03 nvidia-docker 버전 설치 방법을 설명합니다.

## 설치 요구사항

HooYoungAhn's avatar
HooYoungAhn committed
- Ubuntu 16.04.5가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
HooYoungAhn's avatar
HooYoungAhn committed
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 16GB 이상의 메모리와 cpu 코어 8개이상의 PC 사양이 요구됩니다.
  (메모리 8GB 및 cpu 코어 4개 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)

## 사용시 유의사항
- 제한된 GPU 카드에 대해서만 테스트 되어 있습니다.(Titanx, 1080Ti). 따라서 저사양 GPU 카드나 최신 GPU 카드를 사용하는 경우 동작하지 않을 수 있습니다.
- 현재 KSB 툴박스 nvidia-docker 버전은 CUDA 9.0, CUDNN 7.3.1 이 포함되어 있습니다.
  ```sh
  cat /usr/local/cuda/version.txt
  CUDA Version 9.0.176
  cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2
  #define CUDNN_MAJOR 7
  #define CUDNN_MINOR 3
  #define CUDNN_PATCHLEVEL 1
  ```

## 설치 순서

Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] NVIDIA 그래픽카드 드라이버 설치하기
- [Host PC] openjdk-8 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] nvidia-docker 2.0 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기

## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기

Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.

```sh
sudo adduser csle
    Adding user 'csle' ...
    Adding new group 'csle' (1001) ...
    Adding new user 'csle' (1001) with group 'csle' ...
    Creating home directory '/home/csle' ...
    Copying files from '/etc/skel' ...
    새 UNIX 암호 입력:
    새 UNIX 암호 재입력:
    passwd: password updated successfully
    Changing the user information for csle
    Enter the new value, or press ENTER for the default
    Full Name []:
    Room Number []:
    Work Phone []:
    Home Phone []:
    Other []:
    Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    # 맨 아래줄에 내용을 추가합니다.
    #includedir /etc/sudoers.d
    csle    ALL=(ALL) NOPASSWD: ALL
```

## [Host PC] hostname을 csle1으로 변경하기

docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.

```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.


## [Host PC] NVIDIA 그래픽카드 드라이버 설치하기

```sh
HooYoungAhn's avatar
HooYoungAhn committed
sudo add-apt-repository ppa:graphics-drivers && \
HooYoungAhn's avatar
HooYoungAhn committed
sudo apt-get update

왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "자세히 보기" 아이콘 클릭 -->
하단의 "업데이트 설치" 버튼 클릭

왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "소프트웨어&업데이터" 아이콘 클릭 -->
상단 메뉴에서 "추가 드라이버" 메뉴 선택 -->
HooYoungAhn's avatar
HooYoungAhn committed
NVIDIA 드라이버 사용 선택(예: NVIDIA binary driver-version 396.54(독점,확인함)) -->
HooYoungAhn's avatar
HooYoungAhn committed
"바뀐 내용 적용" 후 컴퓨터 재부팅
```
HooYoungAhn's avatar
HooYoungAhn committed

**<span style="font-size: 11pt; color:red;">[참고사항] 사용자의 NVIDIA 그래픽 카드에 적합한 NVIDIA binary driver version을 선택합니다.**

HooYoungAhn's avatar
HooYoungAhn committed
```sh
csle@csle1:~$ nvidia-smi
Sat Oct 24 13:17:41 2018
+----------------------------------------------------------------------------+
| NVIDIA-SMI 396.54                Driver Version: 396.54                    |
|------------------------------+----------------------+----------------------+
| GPU  Name       Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|==============================+======================+======================|
|   0  TITAN X (Pascal)   Off  | 00000000:01:00.0  On |                  N/A |
| 25%   40C    P8   17W / 250W |   1186MiB / 12190MiB |      0%      Default |
+------------------------------+----------------------+----------------------+

+----------------------------------------------------------------------------+
| Processes:                                                      GPU Memory |
|  GPU      PID   Type   Process name                             Usage      |
|============================================================================|
|    0     1021      G   /usr/lib/jvm/java-8-oracle/bin/java          632MiB |
+----------------------------------------------------------------------------+
```
PC를 재부팅합니다.

## [Host PC] openjdk-8 설치하기
HooYoungAhn's avatar
HooYoungAhn committed
Host PC에 Ubuntu 16.04.5를 처음 설치한 경우 java openjdk 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정 가능합니다.
HooYoungAhn's avatar
HooYoungAhn committed
```sh
sudo apt-get update && \
sudo apt-get -y install openjdk-8-jre && \
sudo apt-get -y install openjdk-8-jdk
```

터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.

```sh
csle@csle1:~$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```

## [Host PC] KSB 툴박스 관련 프로그램 설치하기

Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.

```sh
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
HooYoungAhn's avatar
HooYoungAhn committed
sudo apt-get install -y openssh-server locales wget git vim rsync locales \
HooYoungAhn's avatar
HooYoungAhn committed
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
HooYoungAhn's avatar
HooYoungAhn committed
pip3 install kafka-python pillow requests numpy
HooYoungAhn's avatar
HooYoungAhn committed
```

## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.

```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri \
's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' \
/etc/ssh/sshd_config
```
HooYoungAhn's avatar
HooYoungAhn committed
**<span style="font-size: 11pt; color:red">[참고사항]
사용자의 우분투 환경에 따라 위의 스크립트가 적용되지 않는 경우가 간혹 발생합니다.
sudo vi /etc/ssh/sshd_config 명령을 통해 ssh port 2243 번호와 PermitRootLogin yes로 수정되었는지 확인합니다.</span>**
```sh
# What ports, IPs and protocols we listen for
Port 2243

# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
```
HooYoungAhn's avatar
HooYoungAhn committed

## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.

```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
sudo service ssh restart  
```

## [Host PC] Docker 설치하기

Host PC에 docker-ce 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.

```sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo apt-key add - && \
sudo add-apt-repository \
"deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
apt-cache policy docker-ce && \
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu && \
sudo systemctl status docker
```

#### [참고사항] 기존 docker-engine 삭제 방법
```sh
sudo apt-get purge -y docker docker-engine docker.io
```

Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.

```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다.
# 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```

PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.

## [Host PC] nvidia-docker 2.0 설치하기
```sh
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add - && \
curl -s -L \
https://nvidia.github.io/nvidia-docker/\
ubuntu16.04/amd64/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list && \
sudo apt-get update && \
sudo apt-get install -y nvidia-docker2 && \
sudo pkill -SIGHUP dockerd
```

아래의 질의에 대해서 Y를 누르면 설치가 완료됩니다.

```sh
Configuration file '/etc/docker/daemon.json'
 ==> File on system created by you or by a script.
 ==> File also in package provided by package maintainer.
   어떻게 하시겠습니까? 다음 중에 하나를 선택할 수 있습니다:
    Y 또는 I : 패키지 관리자의 버전을 설치합니다
    N 또는 O : 현재 설치된 버전을 유지합니다
       D     : 버전 간의 차이점을 표시합니다
       Z     : 프로세스를 백그라운드로 하고 상황을 알아봅니다
기본값으로 현재 버전을 그대로 유지합니다.
*** daemon.json (Y/I/N/O/D/Z) [기본값=N] ? Y
```

```sh
csle@csle1:~$ nvidia-docker version
NVIDIA Docker: 2.0.3
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:24:56 2018
 OS/Arch:           linux/amd64
 Experimental:      false
```
```sh
Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:23:21 2018
  OS/Arch:          linux/amd64
  Experimental:     false

```
### [참고사항] 기존 nvidia-docker 1.0 버전을 삭제 방법
```sh
docker volume ls -q -f driver=nvidia-docker | \
xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker
```

## [Host PC] /etc/hosts 수정하기

HooYoungAhn's avatar
HooYoungAhn committed
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다.
**<span style="font-size: 11pt; color:red">[중요]
아래의 설정은 사용자의 host pc의 IP를 192.168.0.5로 가정하였을때입니다.
따라서, 자신의 HOST PC IP에 맞게 설정합니다.**
HooYoungAhn's avatar
HooYoungAhn committed

```sh
127.0.0.1       localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1      csle1

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

HooYoungAhn's avatar
HooYoungAhn committed
# 각 사용자의 Host PC IP 주소에 맞게 아래 내용 추가
HooYoungAhn's avatar
HooYoungAhn committed
192.168.0.5     csle1 master
```

## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.

```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```

## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.

```sh
cd && \
wget \
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```

## [Host PC] KSB 프레임워크 설치 및 docker image 다운받기

HooYoungAhn's avatar
HooYoungAhn committed
먼저 KSB 툴박스 파일을 다운로드합니다.<a href="https://csleoss.etri.re.kr/images/contents/manual_1903/ksb_toolbox_nvidia_v1903.tar.gz" class="link_btn"> [다운로드 링크]</a>
  - ksb_toolbox_nvidia_v1903.tar.gz : KSB 툴박스 파일
HooYoungAhn's avatar
HooYoungAhn committed

HooYoungAhn's avatar
HooYoungAhn committed
csle 사용자 계정의 home에 ksb_toolbox_nvidia_v1903.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
HooYoungAhn's avatar
HooYoungAhn committed

```sh
HooYoungAhn's avatar
HooYoungAhn committed
tar zxvf ksb_toolbox_nvidia_v1903.tar.gz -C /home/csle/
HooYoungAhn's avatar
HooYoungAhn committed
```

/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
  - /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
  - /components : tensorflow train 예제 프로그램 저장 폴더
  - /conf : KSB 프레임워크 환경설정 파일 저장 폴더  
  - /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
  - /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
  - /jars : KSB 프레임워크 19.03 버전의 jar 파일 저장 폴더
  - /ksblib : python 전처리 라이브러리 폴더
  - /kubernetes : 쿠버네티스 환경설정 폴더
  - /logs : log 저장 폴더
  - /pyML : autoML python 프로젝트 폴더
  - /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>

Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.

```sh
HooYoungAhn's avatar
HooYoungAhn committed
docker pull ksbframework/ksb_toolbox_nvidia:19.03.6-cuda9.0-cudnn7
HooYoungAhn's avatar
HooYoungAhn committed
```

Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
HooYoungAhn's avatar
HooYoungAhn committed

**<span style="font-size: 10pt; color:red">
[참고사항] 현재 2019.07.10일 docker image 버전은 19.03.6 nvidia 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다**
HooYoungAhn's avatar
HooYoungAhn committed

```sh
csle@csle1:~/ksb-csle$ docker images
HooYoungAhn's avatar
HooYoungAhn committed
REPOSITORY                       TAG                      IMAGE ID       CREATED        SIZE
ksbframework/ksb_toolbox_nvidia  19.03.6-cuda9.0-cudnn7   f7114dea842b   43 minutes ago 9.78GB
HooYoungAhn's avatar
HooYoungAhn committed
```

## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.

```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
HooYoungAhn's avatar
HooYoungAhn committed
```sh
HooYoungAhn's avatar
HooYoungAhn committed
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```

## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```

## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```

KSB 인공지능 프레임워크 실행하기 위해 <a href="https://csleoss.etri.re.kr/images/contents/manual_1903/1.5.HowToRunFirst-1903.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동합니다.