์ด์ ์ด ์ง๋ฌธ์ ๋ํด ์์
ํ ์๊ฐ์ด ๊ฑฐ์ 1์ฃผ์ผ ์์ต๋๋ค. ํ์ง๋ง ๋๋ ์คํจํ๋ค.
ํ๊ฒฝ: redhat7.2
k8s:v1.3.10 cuda:v7.5 ์ปค๋ ๋ฒ์ :367.44 t ensorflow:0.11 gpu:1080
tensorflow ๋ฐ k8s๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ฐ๋ฆฌ ํ๋ซํผใ ML์ ๋ํ ๊ต์ก์ ์ํ ๊ฒ์
๋๋ค.
cpu ์ฌ์ฉ์ ์ ์์ธ๋ฐ gpu๊ฐ ์๋๋ ์ด์ ๋ฅผ ์๊ณ ์ถ์ต๋๋ค.
๋๋ ๋น์ ์ด ๋งํ ๋ง์ ์๋ฅผ ํ
์คํธํ์ง๋ง ์ฌ์ ํ ์คํจํ์ต๋๋ค.
๋ด ํด๋ฌ์คํฐ: 1 ๋ง์คํฐ 2 ๋
ธ๋. ๋ชจ๋ ๋
ธ๋์๋ GPU ์นด๋๊ฐ ์์ง๋ง ๋ง์คํฐ๋ง ์์ต๋๋ค.
๋จผ์ @Hui-Zhi๊ฐ ๋งํ ๊ฒ์ฒ๋ผ ํ
์คํธํฉ๋๋ค.
vim test.yaml
apiVersion: v1
kind: Pod
metadata:
name: nvidia-gpu-test
spec:
containers:
- name: nvidia-gpu
image: nginx
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 1
์, ํ
์คํธํ์ผ๋ฉฐ ์๋ํฉ๋๋ค. nvidia-gpu: 1์์ 2๋ก ๋ณ๊ฒฝํ๋ฉด ์คํจํฉ๋๋ค. ํฌ๋ ์ ์ง ๋ณด๋ฅ ์ค์
๋๋ค. ๋ชจ๋ ๋
ธ๋์ GPU ์นด๋๊ฐ ํ๋๋ง ์๊ธฐ ๋๋ฌธ์ ๋
ธ๋๊ฐ ์ด๋ฅผ ๋ง์กฑ์ํฌ ์ ์์ต๋๋ค. ์ ์๊ฐ์๋ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ง๋ฌธ์ด ์ค๊ณ ์์ต๋๋ค: GPU์์ ์คํํ๋ ๋ฐฉ๋ฒ? ์ด ์๋ k8์ด gpu๋ฅผ ์ป์ ์ ์๊ณ gpu๋ฅผ ์ ์ ์์์ ์ฆ๋ช
ํ์ง๋ง ์ด๋ป๊ฒ ์คํํฉ๋๊น? yaml ํ์ผ์ ์ฌ์ฉํ์ฌ GPU ๋ฆฌ์์ค์์ ์คํ๋๋ ํ๋์ ํฌ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
๊ทธ๋ฐ ๋ค์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. nvidia-docker
๋๋ gpu-image: gcr.io/tensorflow/t ensorflow:0.11-gpu ๋ฅผ ํ๊ณ docker, docker run -it ${image} /bin/bash์ ๋ฐ๋ผ mnist.py ๋ฐ๋ชจ๋ฅผ ์คํํฉ๋๋ค.
ํ์ง๋ง ์คํจํ๋ค. "CUDA ๋ผ์ด๋ธ๋ฌ๋ฆฌ libcuda.so๋ฅผ ์ด ์ ์์ต๋๋ค. libcuda.so๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค"์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋๊ตฐ๊ฐ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ์ฌ๋ถ
๊ทธ๋ฐ ๋ค์ ๋๊ตฐ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋งํ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. GPU๋ nvidia-docker๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ด ์ข๊ฒ๋ tensorflow๋ก ์ค์นํ์ต๋๋ค. https://www.tensorflow.org/install/install_linux#gpu_support๊ฐ ๋งํ์ต๋๋ค. nvidia-docker์ ๋ฐ๋ฅด๋ฉด GPU์์ ํ๋ จ์ด ์คํ๋๊ณ GPU ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฑฐ์ 7g, ๊ฑฐ์ 70%์ธ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
๋๋ ๋ค์๊ณผ ๊ฐ์ด ์คํํ๋ค: nvidia-docker run -it ${image} /bin/bash
ํ์ด์ฌ mnist.py
์, ์๋ํฉ๋๋ค. ํ์ง๋ง ์๋ก์ด ์ง๋ฌธ์ด ์ค๊ณ ์์ต๋๋ค. cpu์์ ์คํํ๋ ค๋ฉด docker๋ฅผ ์ฌ์ฉํด์ผ ํ๊ณ gpu์์๋ nvidia-docker๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น? ๋ ๊ทธ๋ฅ docker, ์๋ง๋ nvidia-docker์์๋ง gpu์์ ์คํํ์ง๋ง k8s์์ gpu๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ.
k8s ์ปจํ
์ด๋๋ ๋์ปค๋ฅผ ์ฌ์ฉํ์ง๋ง nvidia-docker๋ ์ฌ์ฉํ์ง ์์์ผ๋ฏ๋ก ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ด ์์
์ ์ํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ๋์์ฃผ์๊ฒ ์ต๋๊น? k8์ด gpu๋ฅผ ์ง์ํ๋ค๋ ๊ฒ์ ์ฆ๋ช
ํ๊ธฐ ์ํด ๋ฐ๋ชจ๋ ํ
์คํธ yaml์ด ์๋ k8s์์ gpu๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์ถ์ต๋๋ค.
๋น์ ์ด ๋์๊ฒ ๋๋ต ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค, ๋๋ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค ....
๊ฐ์ฌ.
@tbchj #42116์ด ์ด์ ๋ณํฉ๋์์ผ๋ฉฐ 1.6๊ณผ ํจ๊ป ์ถ์๋์ด์ผ ํฉ๋๋ค.
@cmluciano ์, ๊ฐ์ฌํฉ๋๋ค. ์๋ง๋ ๋น์ ์ด ๋ง์ ๊ฒ์ ๋๋ค. ๋ฐฉ๊ธ # 42116์ ์์ ํ ์ฝ์์ต๋๋ค. ํ์ํ ๊ฒ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐฉ๊ธ ํ ์คํธํ๋๋ฐ ์๋ํ์ต๋๋ค. ์ด์ ์ ๋ง์ดํธํ ๋ณผ๋ฅจ์ด ์๋ชป๋์์ต๋๋ค. ๋ด๊ฐ ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์๋ก์ด yaml
apiVersion: v1
kind: Pod
metadata:
name: gpu-test
spec:
volumes:
- name: nvidia-driver
hostPath:
path: /var/lib/nvidia-docker/volumes/nvidia_driver/367.44
containers:
- name: tensorflow
image: tensorflow:0.11.0-gpu
ports:
- containerPort: 8000
resources:
limits:
alpha.kubernetes.io/nvidia-gpu: 1
volumeMounts:
- name: nvidia-driver
mountPath: /usr/local/nvidia/
readOnly: true
๋๋ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ, ๊ฐ์ฌํฉ๋๋ค
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฐฉ๊ธ ํ ์คํธํ๋๋ฐ ์๋ํ์ต๋๋ค. ์ด์ ์ ๋ง์ดํธํ ๋ณผ๋ฅจ์ด ์๋ชป๋์์ต๋๋ค. ๋ด๊ฐ ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์๋ก์ด yaml
๋๋ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ, ๊ฐ์ฌํฉ๋๋ค