AI/Setting

빠른 Docker 입문 (아주 빠른 딥러닝 실행환경 구축 방법)

surrr 2024. 9. 20. 10:30

Docker를 써야하긴 써야겠는데 뭔지 잘 모르겠고 일단 아주 간단하고 빠르게 환경 구축이 필요한 사람들을 위한 포스팅

 

사실 Docker를 공부할 때 아주 간단한 개념정도만 알아두고 직접 사용해가면서 불편하거나 필요한 기능이 있을 때 그때그때마다 검색해가며 배우는 게 제일 효율적이라고 생각합니다.

책이나 유튜브 강의도 좋지만.... 우린 시간이 많이 없잖아요.

 

1. 도커란?

도커가 무엇인지 자세히 알아두는 건 중요합니다! 그래야 도커를 쓸 수 있습니다.

하지만 이 포스팅은 일단 빠르게 환경 구축하는 방법을 포스팅하므로 간단하게 VMware, virtual box의 경량화 버전 이런느낌으로만 설명하고 넘어가겠습니다.

 

2. 도커 이미지 다운로드

Docker hub : https://hub.docker.com   

아래 사이트에서 필요한 프로그램(OS포함)을 검색해 명령어로 이미지를 다운합니다.

docker pull pytorch (별도 태그가 없으면 lastest를 가져옵니다)

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

이 포스팅에서는 pytorch/pytorch:2.4.1-cuda12.1-cudnn9-devel 를 다운받았음.

 

3. 도커 컨테이너 실행

sudo docker run -it --gpus all -v (local file):(docker file) pytorch/pytorch:2.4.1-cuda12.1-cudnn9-devel

 

deep learning 학습을 위해선 GPU가 거의 필수 (--gpus all)

-> 예전엔 nvidia-docker를 설치해야하지만 docker version 19.0.2? 이 버전 이상부터는 자동 지원한다고 합니다.

따라서 최신 버전을 사용하는 사람들은 nvidia-driver정도만 로컬에 설치하면됩니다.

 

-v (local file):(docker file)-> 로컬 파일시스템과 도커 컨테이너 파일시스템을 매핑.

(도커 컨테이너에서 파일 수정하면 로컬 파일시스템의 파일도 수정됨)

 

4. bash shell 시작

exit로 컨테이너를 닫고 나오면 docker ps가 exited로 되있습니다.

따라서

docker start {Container_ID}

로 컨테이너를 실행해주고

docker exec -it {Container_ID} bash

로 bash shell를 실행해주면 bash shell 이 실행됩니다.

 

5. docker container, image 관리

docker 컨테이너 중지/재시작

docker stop/start {Container_ID}

 

docker 컨테이너 삭제

docker rm {Container_ID}

 

docker 이미지 삭제

docker rmi {Image ID}

 

docker 컨테이너를 image로 저장하기

docker commit {Container_ID} {Image name} [:tag]

 

6. 만든 docker image를 Docker Hub에 Push

1. docker login --username = {DockerHub_Username}

 

2. docker tag {Image name} {DockerHub_Username} / {Repository Name} [:tag]

-> DockerHub_Username과 Repository 명이 docker image와 같아야함!

 

3. docker push {DockerHub_Username}/{Repository Name} [:tag]

성공!

 

6.1 Docker hub에 올리지 않고 scp등을 활용해 옮길 경우

docker save -o {path for generated tar file} {image_name}

(파일 옮기기)

docker load -i {path to image tar file}

 

 

References

https://www.youtube.com/watch?v=Ur9nssvw4Sk

https://www.youtube.com/watch?v=-pimSpfBEBY

https://www.youtube.com/watch?v=xtHOsyLjOlk