[ 설치 환경 ]
- centos7
- Docker version 19.03.2
- GeForce 940M
- k8s 1.15.3
[ docker 설치 ]
$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine docker-ce
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io
=> 특정 버전 설치시 yum install -y docker-ce-18.06.1
$ sudo systemctl start docker
$ sudo docker run hello-world
=> 테스트
[ NVIDIA Drive 설치 ]
※ tensorflow 이용가능한 GPU는 NVIDIA Device 3.0 보다 커야한다.
※ GPU별 계산 능력표 확인 사이트 https://developer.nvidia.com/cuda-gpus#compute
# nouveau 사용 확인
$ lshw -numeric -C display
# NVIDIA Download
$ wget https://us.download.nvidia.com/XFree86/Linux-x86_64/418.88/NVIDIA-Linux-x86_64-418.88.run
$ sudo yum update
$ sudo yum group install "Development Tools"
$ sudo yum install kernel-devel
$ sudo yum -y install epel-release
$ sudo yum -y install dkms
# nouveau 해제
$ sudo vi /etc/default/grub
> modprobe.blacklist=nouveau
# BIOS
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# UEFI
$ sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
# 재기동
$ sudo reboot
# nouveau 사용 확인
$ lshw -numeric -C display
=> nouveau 사용하지 않고 있어야한다.
# 텍스트 모드
$ systemctl isolate multi-user.target
# NVIDIA Drive 설치
$ sudo sh NVIDIA-Linux-x86_64-418.88.run
=> 설치 과정에서 dkms를 이용한 설치를 할거냐고 물으면 NO
# 재기동
$ reboot
# NVIDIA 정상 설치 확인
$ nvidia-smi
[ nvidia-docker 설치 및 진행 ]
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
# nvidia-docker 저장소 설치
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
# nvidia-docker 설치
$ sudo yum install -y nvidia-docker2
$ sudo pkill -SIGHUP dockerd
# nvidia 실행
$ docker run --runtime=nvidia --rm nvidia/cuda:10.1-base nvidia-smi
[ tensorflow docker image pull ]
# tensorflow-gpu 실행
$docker run --runtime=nvidia -it -p 8888:8888 -p 8889:6006 -v ${HOME}/code:/tf/lab tensorflow/tensorflow:1.13.1-gpu-py3-jupyter
--runtime=nvidia nvidia 사용
-p 8888:8888 port 사용 jupyter notebook 사용 포트
-v ${HOME}/code:/tf/lab 공유 폴더
tensorflow/tensorflow:latest-gpu-py3-jupyter tensorflow-gpu image
# 실행하면 나오는 token 값 따록 기록
http://(782cc760c0b8 or 127.0.0.1):8888/?token=~~~~
# container 빠져나오기
$ ctrl+p, ctrl+q
[ k8s-device-plugin 설치 ]
# docker의 default-runtime을 nvidia로 설정
$ vi /etc/docker/daemon.json
{
"default-runtime": "nvidia", # 해당 라인 추가
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
$ systemctl restart docker
$ systemctl daemon-reload
$ kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml
=> pod에 등록된 nvidia-device-plugin 확인
$ kubectl get pods -A
[ GPU Container 기동 ]
# GPU Container 배포 파일 작성
$ vi k8s-tensorflow-gpu-deploy.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: k8s-tensorflow-gpu
namespace: tensorflow
spec:
replicas: 1
selector:
matchLabels:
app: k8s-tensorflow-gpu
template:
metadata:
name: k8s-tensorflow-gpu-pod
labels:
app: k8s-tensorflow-gpu
spec:
containers:
- name: k8s-tensorflow-gpu
image: "tensorflow/tensorflow:latest-gpu-py3-jupyter"
resources:
limits:
nvidia.com/gpu: 1 # gpu 갯수 지정
ports:
- containerPort: 8888
name: jupyter
- containerPort: 6006
name: tensorboard
---
apiVersion: v1
kind: Service
metadata:
name: tensorflow-gpu-svc
namespace: tensorflow
spec:
selector:
app: k8s-tensorflow-gpu
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8888
type: LoadBalancer
# 배포 파일 실행
$ kubectl create -f k8s-tensorflow-gpu-deploy.yaml
끝
'Cloud > Kubernates' 카테고리의 다른 글
# k8s Horizontal Pod Autoscaler (HPA) 실습 - 1 (0) | 2019.10.23 |
---|---|
# k8s Pod Autoscaler 개념 (2) | 2019.10.23 |
# k8s 외부 ETCD HA 구성 (0) | 2019.09.10 |
# k8s + keepalived + haproxy HA 구성 (6) | 2019.09.06 |
# k8s + docker 개념 (0) | 2019.09.06 |