Python, Pytorch, Cuda, cuDnn 등
워크스테이션에 현대위아 프로젝트를 위한 개발환경만 운용하므로, 가상환경을 별도로 구축하지 않습니다.
Linux를 처음 설치한 상태라면 네트워크 설정이 안되어 있는 경우가 있습니다.
1. 랜선(혹은 와이파이)가 이더넷에서 연결된 상태인지 확인합니다.
# ifconfig를 통해 이더넷 이름을 확인합시다.
$ ifconfig
# 제일 하단에 Link detected: yes 인지 확인합니다. no면 랜선 등이 인식되지 않은 경우입니다.
$ ethtool eno1
#네트워크 설정을 변경하고 네트워크 서비스를 재시작합니다. 네트워크 설정 yaml 파일명이 다양하니 안에 존재하는 파일명을 사용해주세요.
$ sudo vim /etc/netplan/<안에 존재하는 yaml파일>
저는 네트워크 설정에 주석이 있었습니다. 예를 들어 아래와 같습니다. 주석을 해제한 뒤 저장하고 네트워크 서비스를 재시작시켜보겠습니다.
network:
version:2
renderer: NetworkManager
# ethernets:
# eno1:
# dhcp4: true
# optional: true
수정 후 sudo netplan apply
를 통해 변경사항을 적용합니다.
시스템(Linux)를 종류 후 재시작합니다.
참고로 저는 허브의 전원을 콘센트에 안 꽂아놔서 발생하는 네트워크 에러였습니다...하하하..
$ sudo apt update
$ sudo apt install python3.8
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
$ update-alternatives --config python
$ python -V
$ python3.8 -m pip install pip
$ which python3
$ vim ~/.profile
$ sudo apt-get install -y python3-dev
$ sudo apt-get install -y python3-setuptools
export PATH=/usr/bin/python3.8:$PATH
:wq!
$ source ~/.profile
# 아래껀 setuptools 오류났을 때 실행합니다.
$ sudo -H pip3 install --upgrade --ignore-installed pip setuptools
저장소 설정
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
Docker의 공식 GPG 키 추가
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo -H gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
안정적인 저장소를 설정합니다.
설치하기 전에 Architecture 버전을 확인합니다!
$ dpkg -s libc6 | grep Arch
Architecture: amd64
Multi-Arch: same
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
x86_64 / amd64
echo \
"deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
도커 엔진 설치 : 도커 ce 등이 모두 최신 버전으로 설치됩니다. 특정 버전을 설치하려면 상단의 docker 홈페이지를 참고해주세요!
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
일반 사용자계정으로 docker 명령어를 사용하기 위해서는 아래의 명령어로 그룹을 추가
$ sudo usermod -aG docker $USER
sudo apt-get --purge -y remove 'cuda*'
sudo apt-get --purge -y remove 'nvidia*'
sudo apt-get --purge -y remove "*nvidia*"
sudo apt-get autoremove --purge cuda
sudo rm -rf /usr/local/cuda*
sudo /usr/local/cuda-11.2/bin
sudo /usr/bin/nvidia-uninstall
편의를 위해 NVIDIA 드라이버는 CUDA Toolkit 설치의 일부로 설치됩니다. 이 드라이버는 개발용이며 Tesla GPU를 사용한 프로덕션 환경에서는 사용하지 않는 것이 좋습니다.
wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run
sudo sh cuda_11.2.0_460.27.04_linux.run
정상적으로 설치되었다면 다음 명령을 통해 아래와 같이 GPU 상태를 확인할 수 있습니다.
- nvidia-smi
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-container-runtime
sudo systemctl restart docker
정상설치 확인을 위해 다음 명령을 실행합니다. 자신의 cuda 버전에 따라 tag를 x.0-base로 변경해주세요.
docker run -it --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
현재 GPU 를 사용하고 있는 Process 가 하나도 없다고 나오는 것이 이상하게 생각되실 수 있지만, docker 입장에서는 독립된 자기 자신의 내부 프로세스만 확인할 수 있기 때문에 이는 정상적인 상황입니다.
Minikube 는 docker default-runtime 을 Docker-CE 로 사용하지만, docker container 내에서 NVIDIA GPU 를 사용하기 위해서는 nvidia-docker 라는 docker-runtime 으로 docker container 를 생성해야 합니다.
따라서 Minikube 가 nvidia-docker 로 pod 내부의 container 를 생성할 수 있도록 호스트의 default-runtime 설정을 변경해주어야 합니다.
docker daemon config file 을 다음과 같이 수정합니다.
1. vim /etc/docker/daemon.json
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
sudo systemctl daemon-reload
sudo service docker restart
링크
CUDA 11.x, 10.x 버전만 달리하여 다운로드합니다.
pytorch는 코드 내에서 CUDA 세팅 (.cuda()
) 등 을 진행하면 nvidia driver가 인식되면 gpu를 사용합니다.
추가적인 프레임워크 단에서의 세팅이 필요하진 않습니다.
세팅이 완료된 후 아래 코드를 실행하여 GPU 세팅이 완벽한지 확인합니다.
import torch
torch.cuda.get_device_name(0)
torch.cuda.is_available()
torch.__version__
현재 CUDA 11.7 버전을 설치했으므로, TensorRT 최신버전은 CUDA 11.6버전까지 지원하니까 최신 버전을 설치합니다.
Nvidia 포럼을 확인해본 결과 동작을 보증할 순 없지만 유연한 동작이 가능할 것이라고 합니다.
다운로드 튜토리얼
여기서 Nvidia TensorRT 다운로드 링크로 들어가, OS, CUDA 버전 등에 적합한 버전의 Deb(데비안) 설치파일을 다운로드합니다.
os="ubuntuxx04"
tag="cudax.x-trt8.x.x.x-ea-yyyymmdd"
sudo dpkg -i nv-tensorrt-repo-${os}-${tag}_1-1_amd64.deb
sudo apt-key add /var/nv-tensorrt-repo-${os}-${tag}/*.pub
sudo apt-get update
sudo apt-get install tensorrt
python3 -m pip install numpy
sudo apt-get install python3-libnvinfer-dev
python3 -m pip install protobuf
sudo apt-get install uff-converter-tf
python3 -m pip install numpy onnx
sudo apt-get install onnx-graphsurgeon
dpkg -l | grep TensorRT
trtexec
명령을 사용하기 위해선 별도로 빌드가 필요합니다.cd /usr/src/tensorrt/samples/trtexec
sudo make
../../bin/trtexec
trtexec 명령이 ../../bin/trtexec
로 실행할 수 있는 것을 확인할 수 있습니다. 별칭을 이용해봅시다.
vim ~/.bashrc
마지막 줄에 alias trtexec=/usr/src/tensorrt/bin/trtexec
를 등록하고 :wq! 로 저장하고 나와주세요.
source ~/.bashrc
: 변경사항을 적용합니다.
이제 trtexec 명령이 정상적으로 동작하는 것을 확인할 수 있습니다!
드디어 CUDA, Nvidia Driver, cuDNN, ONNX, TensorRT를 모두 설치하고 동작하는 것이 확인되었습니다!!
systemctl isolate multi-user.target
modprobe -r nvidia-drm
lsof /dev/nvidia*
systemctl start graphical.target
실행 후 재설치(기존 엔비디아 드라이버 프로세스 삭제)