안녕하세요, MoonLight입니다.
이번 Post에서는 지난 Post에 이어서 아래 내용들의 설치를 계속 진행해 보도록 하겠습니다.
4. Docker 설치
5. nVidia CUDA Toolkit Container 설치
6. Tensorflow GPU Container 설치
이전 Post는 아래 Link를 참고해 주세요.
https://moonlight314.tistory.com/entry/Tensorflow-GPU-Docker-Install-on-WSL2-1
4. Docker 설치
저는 WSL2에 설치된 Ubuntu안에 Docker를 설치하고, WSL2안에서 Tensorflow Container를 실행할 예정입니다.
그래서, 먼저 WSL2에 Ububtu에 Docker 설치를 진행하도록 하겠습니다.
4.1. Service 명령 권한 설정
먼저 visudo를 사용하여 docker command 앞에 일일이 'sudo'를 붙이지 않고 docker command를 실행할 수 있도록 하겠습니다. docker command를 사용할 일이 많은데, sudo를 항상 붙이려면 은근히 번거롭습니다.
4.1.1. visudo 실행
WSL2 Ubuntu에서 아래 명령어 입력합니다.
sudo visudo
그 후에,service 권한 모든 사람이 사용할 수 있도록 설정합니다.
파일이 열리면, 가장 아래에 아래 코드 삽입해줍니다.
%sudo ALL=NOPASSWD: /usr/sbin/service
그리고 나서, ctrl 와 o를 함께 누르고 enter key눌러 저장하고, ctrl 와 x를 함께 눌러서 빠져나옵니다.
4.1.2. 다른 방법
혹시 위와 같은 방법을 사용해도 sudo 없이 docker command가 수행되지 않는다면, 아래 Link의 방법을 따라하면 해결됩니다.
저같은 경우에도 위와 같은 방법으로 되지 않아서, 아래 Link를 따라하면서 해결되었습니다.
이제 Ubuntu에 Docker를 설치하도록 하겠습니다. 아래 Command들을 순서대로 입력하면 됩니다.
4.2.1. 패키지 업데이트
sudo apt-get update
4.2.2. https로 데이터를 받아서 설치하는 패키지들을 위한 준비
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
4.2.3. Docker의 GPG key 추가
GPG란 툴이나 소스 등을 배포 할 때 원본이 수정되었나를 확인하는 SW인데, GPG key는 이를 확인하는데 사용하는 값입니다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4.2.4. Stable Docker Repository 설정
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
4.2.5. Docker Engine 설치
이제, 마지막으로 Docker Engine을 설치합니다. 아래 Command들을 순서대로 입력해 줍니다.
sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io sudo service docker start
아래 Command로 Docker Engine이 잘 설치 되었는지 확인할 수 있습니다.
sudo docker run hello-world
잘 설치되었다면 환영 Message(?)를 볼 수 있습니다.
5. nVidia CUDA Toolkit Container 설치
WSL에서 CUDA Toolkit을 사용할 수 있도록 해주는 특별한 Docker Container를 먼저 설치해 줍니다.
5.1. Package Repository 추가
Ubuntu에 아래 명령어 입력합니다.
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
5.2. nVidia-Docker GPGKey 추가
위에서 설명했던 GPGKey를 추가합니다.
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
5.3. Package Repository 추가
Ubuntu에 아래 명령어 입력
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
5.4. Package Update
sudo apt-get update
5.5. CUDA Toolkit 설치
Ubuntu에 아래 명령어 입력
sudo apt-get install -y nvidia-container-toolkit
5.6. 확인
성공적으로 설치 되었는지 확인하기 위하여 도커 시스템 재시작 후 CUDA Toolkit Container를 실행하여 GPU 정보를 출력해 봅니다.
sudo service docker restart
아래 명령어를 입력하면, 정상적으로 설치가 된 경우라면 GPU에 대한 정보가 출력될 것입니다.
sudo docker run --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi
6. Tensorflow GPU Container 설치
이제 Ubuntu에 Tensorflow GPU Version Docker Container를 설치하도록 하겠습니다.
일반적으로 Docker Container를 실행하는 순서는 다음과 같습니다.
-
- 원하는 Docker Image를 Download(docker pull)
- 받은 Image로 Conatiner 생성(docker create)
- 생성된 Conatiner 실행(docker start)
- 실행된 Conatiner 접속을 하여야 한다.(docker attach)
하지만, docker run 명령어는 위의 순서를 모두 한 번에 처리합니다. nVidia Toolkit Container 설치할 때 한 번 사용했었죠.
다양한 종류의 Tensorflow Docker Image가 있고, 어떤 것들이 있는 확인해보고 선택할 수 있습니다.
현재 전체 List는 다음 Link에서 확인해 보실 수 있습니다.
https://hub.docker.com/r/tensorflow/tensorflow/tags/
저는 안정적인 Tensorflow GPU Docker중에 최신 Version으로 받아서 사용할 예정입니다. 2.15.0이 현 시점에 최종같네요.
Tensorflow GPU Container를 실행하기 전에 몇가지 고려해야 할 사항이 있습니다.
1. GPU 사용량
실행할 Container가 GPU를 어느 정도 사용할 지 결정합니다. 보통 전체를 다 사용하기 때문에 다음과 같은 Option으로 씁니다.
--gpus all
2. Ubuntu Directory Mapping
실제 물리적인 GPU가 실행되는 Container는 별도의 환경으로 운영되기 때문에, GPU에 Storage에 있는 Train Data를 보내기 위해서는 WSL에서 실행되는 Ubuntu에 Mount된 Drive를 Tensorflow GPU Container에 Mapping 시켜주어야 합니다.
하지만, 실제로 WSL의 Ubuntu에 Mapping된 Drive는 실제로는 Windows에 있는 물리 Stroage입니다.
좀 복잡하지만, 2중으로 Mapping되는 상황입니다.
이 작업을 위해서 docker는 -v Option을 지원해 줍니다. 사용법은 아래와 같습니다.
-v [WSL Ubuntu의 Directory Path]:[Container의 Directory Path]
Ex) -v $(pwd):/moonlight
위와 같이 입력하면, WSL의 사용자 계정 Directory를 Container에 /moonlight Directory로 Mapping합니다.
-v Option은 여러개 사용가능합니다. 즉, Directory Mapping을 여러개 할 수 있으니, 필요한 만큼 사용하면 됩니다.
3. 종료시 Container 삭제 여부
Container를 종료시키고 나올 때 보통 exit 명령어로 빠져나오는데, 이렇게 빠져나와도 docker images 명령어로 보면 Container는 그대로 남아 있습니다.
하지만, --rm Option을 사용하면 종료와 동시에 Container도 삭제합니다. 저는 이 Option을 사용하지 않을 예정인데, 그 이유는 Tensorflow Container는 Deep Learning Model Train이 필수적인 여러 Package들, 예를 들면, Pandas, sci-kit learn등과 같은 Package가 설치되어 있지 않습니다.
그래서 Container를 실행하고 필요한 Package들을 설치해 주어야 하는데, --rm Option을 사용하고 종료를 한 후에 다시 Container를 실행하면 이전에 열심히 설치한 Package들이 전부 다 없어져 있습니다. 참 허무한 일이죠.
이런 일을 막기 위해서 Package 설치 후 종료 한 후에, 현재의 Container를 Image로 저장하는 작업을 해야 합니다. 이를 Commit이라고 하는데, 뒤쪽에 다시 다루도록 하겠습니다.
앞서 언급한 내용들을 모두 적용한 docker run command line은 다음과 같습니다.
sudo docker run --gpus all -it -v $(pwd):/moonlight tensorflow/tensorflow:2.15.0-gpu
이번 Post에서는 여기까지 진행하고, 다음 Post에서 마무리 짓도록 하겠습니다.
다음 Post는 아래 Link를 참고해 주세요
https://moonlight314.tistory.com/entry/Tensorflow-GPU-Docker-Install-on-WSL2-3
읽어주셔서 감사합니다 !
'Deep_Learning' 카테고리의 다른 글
PyTorch GPU Docker 설치 on WSL2 (0) | 2024.02.07 |
---|---|
Tensorflow GPU Docker Install on WSL2 - #1 (0) | 2024.02.02 |
No module named 'PIL' 오류 해결 방법 (0) | 2024.01.31 |
TFLite File 다루기 (1) | 2024.01.29 |
LFW(Labeled Faces in the Wild) Dataset (0) | 2024.01.17 |