2018년 1월 31일 수요일

Tyan server에 Ubuntu server 16.04.03 LTS설치, 그래픽드라이버, docker, deep learning 이미지 설치하기

목록
- 1. Ubuntu server 설치
- 2. 그래픽드라이버 설치(NVIDIA)

- 3. docker 설치
- 4. Nvidia docker 설치
- 5. Deep Learning용 image설치

1. Ubuntu server
1. ubuntu 사이트(https://ubuntu.com/download/server)에 서버버전 iso파일 다운로드하여 DVD에 굽기(16.04.3-server amd64 bit 사용함)
2. BIOS화면에서 F2/Del을 눌러 BIOS진입 -> 부팅순서를 DVD로 변경 후, 재부팅
3. ubuntu설치하기
  a. 언어는 English.
  b. network의 경우, enp13s0f0과 0f1이 있었는데, 0f0은 부팅용이라서 0f1을 LAN 케이블에 물리고 작업함.

  c. Hostname은 컴퓨터의 이름, User name은 사용자 이름이므로 주의해서 입력.
  d. Partition disk는 디스크를 지우고, auto로 할당함.
  e. 자동업데이트는 No automatic updates선택
  f. Server유형은 OpenSSH만 추가설치 (총 2개가 선택됨)
  g. 나머지는 모두 default값 사용함.
4. network 설정하기
  a. ifconfig -a로 네트워크 이름 확인(우리의 경우는 3.b.의 것 2개)
  b. sudo vi /etc/network/interfaces를 열고
    auto <네트워크이름>
    iface <네트워크이름> inet static
    address <IP주소입력>
    netmask <서브넷마스크>
    gateway <게이트웨이>
    dns-nameservers <DNS, 두개 이상은 공백으로, 주로 168.126.63.1 168.126.63.2 8.8.8.8 씀>
  c. /etc/init.d/networking restart 입력 후, 네트워크 적용안되면 reboot입력하여 재부팅
  d. ping 8.8.8.8로 동작확인
5. 프로그램 설치
  sudo apt-get update
  sudo apt-get install openssh-server

6. 원격접속용 컴퓨터에 putty설치(https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) 후, IP넣고 접속.

2. 그래픽드라이버 설치(NVIDIA)
<참고: http://www.linuxandubuntu.com/home/how-to-install-latest-nvidia-drivers-in-linux>
1. 기존 NVIDIA 드라이버 삭제
 sudo apt-get purge nvidia*
2. 최신 그래픽 드라이버  버전 확인
 https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa
 위 사이트에서 nvidia-graphics-drivers-*** 의 숫자 확인 (ctrl+f활용)
 http://www.nvidia.com/object/unix.html 에서 소유한 GPU가 위 버전 지원하는지 확인(해당버전 클릭 후, Supported Product tab누르면 됨.
  ex) TITAN Xp는 390가능
3. repository update
  sudo add-apt-repository ppa:graphics-drivers (시간 오래 걸림, 약 10분)
  sudo apt-get update
4. 그래픽카드 다운로드 및 설치
  sudo apt-get install nvidia-390 (390대신 2에서 찾은 번호 입력, 시간 오래 걸림, 약 1시간)
  * 만약, Unable to locate package nvidia-390이 나온다면,https://hiseon.me/linux/ubuntu/install_nvidia_driver/의 방법을 따라함.
5. reboot 후, 버전 확인
  reboot 혹은 sudo reboot(putty로 원격 접속한 경우)
  lsmod | grep nvidia 혹은 lsmod | grep nouveau
  위 명령어로 뭐라도 뜨면 됨.
6. 그래픽 드라이버 자동 업데이트 방지
  sudo apt-mark hold nvidia-390

3. docker 설치
<참고: https://subicura.com/2017/01/19/docker-guide-for-beginners-3.html>
o docker 이해하기
<참고: https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html>
- docker란 container가 동작하게끔 하는 가상화 플랫폼
- 가상화 방식
  -- OS가상화 - VMware나 VirtualBox; host OS위에 guest OS를 돌리기에 편하지만 느림.
  -- 프로세스 격리를 통한 가상화 - linux container; host OS위에 docker platform이 존재하고, 그 위에 library와 app이 개별적으로 돌아감. OS별도 설치는 불가능하지만 빠름.
- container: 이 안에서 실행하는 프로세스 들은 서로 영향을 주지 않고 동작. apt-get, yum등 자유롭게 설치가능. 설치시간도 매우 빠름(~10초).
- image: 특정 시점의 상태를 저장해놓은 변하지 않는 상태(가상CD의 image같은 것), image는 그것만으로 동작가능함(즉, 다운받아서 쓰면 돌아감)
- layer: image A에서 특정 lib B설치시 image C = A + B로 구성되어 효율적으로 동작하도록 만든 체계.
- client와 server(host): client에서 명령어 실행 -> docker daemon이 받아서 container에 toss -> 실행 결과 docker daemon에 toss -> client에 출력

o docker 다운로드 및 설치
<참고: https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html>
1. docker 설치 및 버전확인 - 너무 최신버전이면 nvidia-docker가 설치되지 않기에 다음을 추천
  <참고: https://docs.docker.com/install/linux/docker-ce/ubuntu/>
  a. 옛날꺼 지우기
  sudo apt-get remove docker docker-engine docker.io

  b. repository를 이용한 설치
  sudo apt-get update
  apt가 HTTPS사용토록 허락
  sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  c. docker GPG키 추가
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  d.
  sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  sudo apt-get update

  e. 그냥 최신버전을 설치하고프면(비추)
  sudo apt-get install docker-ce

  e. 만약 특정버전을 설치하고프다면
  sudo apt-get install docker-ce=17.12.0~ce-0~ubuntu
  apt-cache madison docker-ce
  으로 가능 버전 확인(nvidia-docker2는 docker 17.09.0까지만 지원)

  f. 버전확인
  sudo docker run hello-world
  docker version

  g. root아닌 user로 docker실행하기
  sudo usermod -aG docker 현재사용자ID

3. nvidia-docker설치
   <참고: https://github.com/NVIDIA/nvidia-docker>
    # 기존 nvidia-docker삭제
  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 -y nvidia-docker

# repo설정
  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

** 만약 위에 것을 하다가 nvidia-docker2가 docker-ce 버전이 맞지않아 설치안된다고 나오면, docker와 nvidia-docker 버전이 서로 맞지않기에 이전 docker를 삭제, 재설치해야됨.
아래는 설치한 docker 삭제방법
<참고: https://stackoverflow.com/questions/31313497/how-to-remove-docker-installed-using-wget>
sudo apt-get purge -y docker-engine
sudo apt-get autoremove -y --purge docker-engine
sudo apt-get autoclean
sudo apt-get purge -y docker-engine docker docker.io docker-ce
sudo apt-get autoremove -y --purge docker-engine docker docker.io docker-ce

sudo rm -rf /var/lib/docker
sudo rm /etc/apparmor.d/docker
sudo groupdel docker
sudo apt-get autoclean
** 잘되면 위의 것은 넘어가기

# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

4. Deep Learning용 image설치
a. CUDA, cudnn, tensorflow, caffe, theano, pytorch, keras, opencv가 설치된 image
  https://github.com/ufoym/deepo << CUDA, cudnn, tf, caffe, theano, pytorch, keras, opencv

- image 다운로드
docker pull ufoym/deepo 혹은
docker pull ufoym/deepo:py27

- 동작테스트
nvidia-docker run --rm ufoym/deepo:py27 nvidia-smi
==> nvidia-smi결과인 GPU상태들이 나옴.
nvidia-docker run -it ufoym/deepo:py27 bash
python
import tensorflow
import keras
==> 문제없이 되면 사용하면 됨.

참고:
pyTorch의 경우 shared memory를 사용함. 이 경우 늘려줘야 됨.
nvidia-docker run -it --ipc=host ufoym/deepo:py27 bash

참고: 저장공간 share between host machine and container
nvidia-docker run -it -v /host/data:/data - /host/config:/config ufoym/deepo:py27 bash
container의 /data 에서 host의 /host/data가 보이게 됨.

참고:
python commandline에서 Ctrl+D <== exit from python commandline

참고:
--rm 옵션으로 container가 종료 후, 삭제됬음.
interactive하게 쓰는 건 다음과 같이 입력
nvidia-docker run -it ufoym/deepo:py27 bash

b. caffe, opencv만 설치하고싶다면
https://github.com/w102060018w/caffe-opencv-cuda8.0-docker 의 이미지 사용