Kubernets에서 GPU를 사용하여 tensorflow 학습하기 (1)
최강 튜토리얼을 붙여 둔다. 이것을 기본 팔로우하고 있다.
1. GPU용 기본 이미지 사용
첫 번째 포인트는 tensorflow 이미지가 있지만 GPU 전용을 사용합니다. CPU용의 사이즈가 400MB 정도인 것에 대해 GPU용은 1G, 2G 정도의 사이즈가 되지만 그런 것.
2. Kubernetes를 GPU VM으로 프로비저닝
westus2
또는 uksouth
에서 GPU VM을 지정하여 프로비저닝합니다. 예를 들면 Standard_NC6. GPU 클러스터 배포는 평소보다 많이 걸립니다 (10-15 분) 이것은 NVIDIA 드라이버를 설치하기 때문에. 리전에 따라서는 용량이 제한되어 있으므로 요 확인.
이런 느낌.
az group create --name RemoveGPU --location westus2
az acs create --agent-vm-size Standard_NC6 --resource-group RemoveGPU --name gpucluster --orchestrator-type kubernetes --agent-count 2 --location westus2 ```
kubeconfig の取得は下記の通り。
az acs kubernetes get-credentials --name gpucluster --resource-group RemoveGPU
``
덧붙여서 이 커멘드라면, 기존의 kubeconfig 가 존재하는 경우는, ~/.kube/config
를 지우지 않고 클러스터가 추가되므로, context 를 전환해 새로운 클러스터를 사용할 수 있게 된다.
확인 방법은
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-agentpool0-03479696-0 Ready agent 21h v1.7.9
k8s-agentpool0-03479696-1 Ready agent 21h v1.7.9
k8s-agentpool0-03479696-2 Ready agent 17h v1.7.9
k8s-master-03479696-0 Ready master 21h v1.7.9
$ kubectl describe node k8s-agentpool0-03479696-0
:
Capacity:
alpha.kubernetes.io/nvidia-gpu: 1
:
그건 그렇고, 에이전트 수를 변경하고 싶다면
az acs scale -g RemoveGPU -n gpucluster --new-agent-count 3
GPU 이미지 용 yaml 파일을 작성하는 방법
GPU 이미지 선택
tensorflow의 경우 이미지
tensorflow/tensorflow:1.4.0-gpu-py3 (GPU)
tensorflow/tensorflow:1.4.0-py3 for (CPU)
CNTK
microsoft/cntk:2.2-gpu-python3.5-cuda8.0-cudnn6.0 (GPU)
microsoft/cntk:2.2-python3.5 for (CPU)
GPU 요청
k8s는 CPU에 관해서는 디폴트로 CPU를 확보해 주지만, GPU는 그렇지 않기 때문에, YAML에 자원의 설정을 한다.
containers:
- name: tensorflow
image: tensorflow/tensorflow:latest-gpu
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 1
이런 느낌.
드라이버를 컨테이너에 공유
NVIDIA 드라이버를 컨테이너에서 참조하도록 설정
volumeMounts: # Where the drivers should be mounted in the container
- name: lib
mountPath: /usr/local/nvidia/lib64
- name: libcuda
mountPath: /usr/lib/x86_64-linux-gnu/libcuda.so.1
volumes: # Where the drivers are located on the node
- name: lib
hostPath:
path: /usr/lib/nvidia-384
- name: libcuda
hostPath:
path: /usr/lib/x86_64-linux-gnu/libcuda.so.1
요약
GPU 클러스터를 만들고 다음 세 가지를 설정하면 OK
az group create --name RemoveGPU --location westus2
az acs create --agent-vm-size Standard_NC6 --resource-group RemoveGPU --name gpucluster --orchestrator-type kubernetes --agent-count 2 --location westus2 ```
kubeconfig の取得は下記の通り。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-agentpool0-03479696-0 Ready agent 21h v1.7.9
k8s-agentpool0-03479696-1 Ready agent 21h v1.7.9
k8s-agentpool0-03479696-2 Ready agent 17h v1.7.9
k8s-master-03479696-0 Ready master 21h v1.7.9
$ kubectl describe node k8s-agentpool0-03479696-0
:
Capacity:
alpha.kubernetes.io/nvidia-gpu: 1
:
az acs scale -g RemoveGPU -n gpucluster --new-agent-count 3
GPU 이미지 선택
tensorflow의 경우 이미지
tensorflow/tensorflow:1.4.0-gpu-py3 (GPU)
tensorflow/tensorflow:1.4.0-py3 for (CPU)
CNTK
microsoft/cntk:2.2-gpu-python3.5-cuda8.0-cudnn6.0 (GPU)
microsoft/cntk:2.2-python3.5 for (CPU)
GPU 요청
k8s는 CPU에 관해서는 디폴트로 CPU를 확보해 주지만, GPU는 그렇지 않기 때문에, YAML에 자원의 설정을 한다.
containers:
- name: tensorflow
image: tensorflow/tensorflow:latest-gpu
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 1
이런 느낌.
드라이버를 컨테이너에 공유
NVIDIA 드라이버를 컨테이너에서 참조하도록 설정
volumeMounts: # Where the drivers should be mounted in the container
- name: lib
mountPath: /usr/local/nvidia/lib64
- name: libcuda
mountPath: /usr/lib/x86_64-linux-gnu/libcuda.so.1
volumes: # Where the drivers are located on the node
- name: lib
hostPath:
path: /usr/lib/nvidia-384
- name: libcuda
hostPath:
path: /usr/lib/x86_64-linux-gnu/libcuda.so.1
요약
GPU 클러스터를 만들고 다음 세 가지를 설정하면 OK
다음은 k8s에서 사용할 수 있는 편리한 툴이나, 스케일시의 고려 등
Reference
이 문제에 관하여(Kubernets에서 GPU를 사용하여 tensorflow 학습하기 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TsuyoshiUshio@github/items/32c13b796b222b3c792e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)