이 글은 우분투 20.04, 도커, CUDA 11.0 기반 NVIDIA-DOCKER, Tensorflow, Pytorch 설치 및 사용 방법을 간단히 설명한다. NVIDIA-DOCKER를 이용하면, 딥러닝 프레임웍 설치 시 많은 문제를 일으키는 패키지 의존 에러 없이, 미리 설치된 딥러닝 관련 패키지를 이용해 편리하게 딥러닝 모델을 개발할 수 있다. 또한, 아마존, 구글 같이 비싼 기계학습 딥러닝용 클라우드를 사용하지 않고도, 직접 여러사람이 네트워크로 접속할 수 있는 서버를 개발할 수 있다.
NVIDIA DOCKER 아키텍처 구조
여기서는 엔비디아 CUDA및 도커는 알고 있다는 전제하에 진행한다. 관련 내용은 다음 링크를 참고한다.
NVIDIA-DOCKER 설치
설치는 다음 링크를 참고한다.
다 설치한 후 다음 명령을 입력해 정상 출력되면 성공한 것이다.
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
NVIDIA 도커 이용하기
다음과 같이 NVIDIA 이미지 내 명령을 실행한다.
sudo nvidia-docker run --rm hello-world
sudo docker run -it --rm --gpus all tensorflow/tensorflow:latest-gpu python -c "import tensorflow as tf; tf.config.list_physical_devices('GPU')"
텐서플로우 이미지 내 우분투를 실행해 본다.
sudo docker run -it tensorflow/tensorflow:latest-gpu
텐서플로우 소스코드 예제를 다음과 같이 실행해 본다. 화면처럼 출력되면 성공한 것이다.
cd ~
git clone https://github.com/tensorflow/benchmarks
sudo docker run --gpus all -it --rm -v /home/ktw/benchmarks:/benchmarks tensorflow/tensorflow:latest-gpu python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --num_gpus=1 --model resnet50 --batch_size 64파치토치 도커 이미지 설치 및 실행
다음과 같이 파이토치 도커 이미지를 설치하고, 실행한다. 참고로, NVIDIA DRIVER가 서로 호환되지 않은 도커 이미지라면 드라이버 호환 에러가 발생한다. 이 경우, 여기 링크에 드라이버 버전을 확인하고, 해당 도커를 설치해 실행하기를 바란다.
sudo docker pull nvcr.io/nvidia/pytorch:21.02-py3
sudo docker run --gpus all -it -p 8888:8888 nvcr.io/nvidia/pytorch:21.02-py3
아래와 같이 파이썬 코드를 입력해 실행해 본다.
python
import torch
print(torch.cuda.device_count())
print(torch.cuda.current_device())
print(torch.cuda.get_device_name(torch.cuda.current_device()))
쥬피터 노트북 실행
다음과 같이 쥬피터 노트북을 도커에서 실행해 본다.
jupyter notebook
노트북에 파이썬 모듈을 하나 생성하고 다음 코드를 입력해 실행한다.
Input the below code
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 3x3 square convolution
# kernel
self.conv1 = nn.Conv2d(1, 6, 3)
self.conv2 = nn.Conv2d(6, 16, 3)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 6 * 6, 120) # 6*6 from image dimension
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
# Max pooling over a (2, 2) window
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
# If the size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:] # all dimensions except the batch dimension
num_features = 1
for s in size:
num_features *= s
return num_features
net = Net()
print(net)
아래와 같이 출력되면 딥러닝 모델이 정상 실행된 것이다.
이제, 복잡한 딥러닝 패키지를 설치하고 설정할 필요없어, 도커 기반으로 딥러닝 모델을 손쉽게 개발할 수 있다.
참고
댓글 없음:
댓글 쓰기