[딥러닝] 도커(docker)에서 딥러닝 환경 구축하기 (1) (for JAX)

2024. 12. 18. 06:38·프로그래밍 Programming

 

 

원래는 데스크탑 내에서 아나콘다를 설치해서 그 아나콘다 안에서 가상환경을 만들어 환경을 구축하는 것이 일반적이다. 그러나 내가 데스크탑을 모두 컨트롤할 수 있는 권한이 없어서 이런저런 프로그램을 설치하는 게 힘들었다.

 

Docker라는 시스템을 이 때 이용하면 좋다는 것을 알게 되어서 환경 세팅하는 과정을 정리한다.

Docker에 관해서는 많은 유튜브 영상에서 소개된 바가 있다.

 

 

https://youtu.be/LXJhA3VWXFA?si=XaN2mk2GD-CxyaAg

 

 

https://youtu.be/pTFZFxd4hOI?si=dpdiY_ip3Vz7G5nd

 


 

 

물론 이런 영상을 보면서 차근차근 따라가는 게 좋긴 하지만 성질이 급한 사람들에게는 어쩔 수가 없다.

지금도 공부하면서 하는 중이지만 일단 업데이트하는 내용을 기반으로 작성한다.

 

 

0. Docker

 

WSL 시스템을 접해본 사람이라면 가상화에 대해서 어느정도 아는 상태일 것이다.

같은 컴퓨터 안에서 개발자들은 다양한 환경에서 서비스를 테스트해야 한다. 그렇다고 해서 컴퓨터를 여러 대 만들어서 테스트를 할 수 없으니 가상환경을 만들어서 사용하게 된다.

 

여기에서 가상환경을 효율적으로 구축할 수 있게 만든 시스템이 도커다.

도커는 이미지라는 개념이 있는데 쉽게 말하면 환경을 만들어 놓은 압축파일 같은 것이다. 이 압축파일을 다운받아서 사용할 수 있게 하는 것이 컨테이너다. 컨테이너 안에서 코드도 돌리고, 그 이미지 안에서 또 프로그램을 설치하면서 바꿀 수 있다. 그러나 컨테이너를 멈추면 안에서 테스트했던 것이 다 날아갈 수 있으므로 다시 이미지로 commit해서 사용하게 된다.

 

이런 방식을 활용하면 내가 세팅해놓은 환경을 지속적으로 사용하면서도 조금씩 바꿔쓸 수 있다. 또한 다른 사람에게 내 코드를 테스트하게 할 때도 환경을 복사해서 사용하는 것이므로 적어도 환경 때문에 오류가 날 가능성이 없어진다.

 

사람마다 docker를 활용하고자 하는 이유가 다를 것이다.

기본적으로 나는 딥러닝 환경 세팅을 목적으로 이 글을 작성한다. 특히나 나는 딥러닝 라이브러리 중에서도 JAX에 포커스를 맞춘다.

 

 

사용 컴퓨터 : Ubuntu 22.04, GPU 사용 가능

 

 

docker와 docker-nvidia를 설치를 미리 해놓아야 하는데 이에 대해 잘 써진 글이 많으므로 그걸 참고하면 될 것이다. (나는 내가 docker, docker-nvidia를 직접 설치할 수 없어서 부탁한 상태라 설치 과정은 모른다.)

 

1. Docker image 사용

 

보통은 docker를 시작할 때 어떻게 build를 하고 Dockerfile을 만드는 것부터 시작한다.

그러나 딥러닝 환경 세팅해본 사람이라면 알겠지만 NVIDIA graphic driver 부터 설치해야할 게 한두 개가 아니다. 그래서 나는 이미 google과 nvidia가 배포한 도커 이미지를 pull해서 사용하고 싶었다.

 

 

  • google에서 배포한 환경은 다음과 같다.

 

https://cloud.google.com/deep-learning-containers/docs/choosing-container?hl=ko

 

컨테이너 이미지 선택  |  Deep Learning Containers  |  Google Cloud

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 컨테이너 이미지 선택 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지에서는

cloud.google.com

 

  • nvidia에서 JAX를 사용하기 위해 배포한 이미지

https://docs.nvidia.com/deeplearning/frameworks/jax-release-notes/running.html

 

Running JAX - NVIDIA Docs

Starting in Docker 19.03, complete the steps below.

docs.nvidia.com

 

  • CUDA만 세팅된 이미지

다음과 같이 아예 세팅이 다 되어있는 환경이 필요할 수도 있지만, 본인은 CUDA 세팅만 필요하다 하는 분은 다음 링크를 참고하면 된다.

 

https://hub.docker.com/r/nvidia/cuda/tags

 

https://hub.docker.com/r/nvidia/cuda/tags

 

hub.docker.com

 

 

 

docker pull us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu124.py310
docker pull nvcr.io/nvidia/jax:24.10-py3
docker image ls

 

 

 

나는 기존에 다운받은 image들이 있어서 다음과 같이 여러 개의 이미지가 있지만 위와 같이 했으면

 

us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu124.py310
nvcr.io/nvidia/jax:24.10-py3

 

적어도 이 두 가지 항목이 있어야 한다.

 

 

2. Docker container 실행

 

실행 커맨드는 간단하지만 옵션이 많아서 나중에는 옵션에 대해서 자세히 공부를 해야한다.

 

docker run -it deeplearning-cu124-py310:0.1

 

여기서 나는 위의 us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu124.py310 이미지를 수정해서 commit함으로써 deeplearning-cu124-py310 (tag 0.1)를 만들었는데 위의 다운받은 이미지를 실행하려면 아래와 같이 작성한다.

 

sudo docker run --gpus all -it us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu124.py310

 

3. (Optional) VS Code 설정

 

비록 Optional이지만 나처럼 코드를 작성할 때 VSCODE를 사용하는 사람에게는 필요한 세팅이 있다.

 

 

다음과 같이 docker extension을 설치하면 vscode 왼쪽 바에 docker 아이콘이 생성되고 내가 가지고 있는 images와 containers를 확인할 수 있다. 여기서 containers 중에 마우스 우클릭을 하면 "Attach Visual Studio Code"가 있다. 이를 클릭하면 새로운 VSCODE 창이 뜨면서 내가 실행한 컨테이너 내부에서 편하게 작업할 수 있게 된다.

 

 

 

 

4. 이후 다룰 내용

- Anaconda 설치 및 yaml 파일로 환경 import하기

- 이를 commit하기

- 코드 작성해서 실행해보기

저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 Programming' 카테고리의 다른 글

[에러기록] CUDA, cuDNN 인식이 안 되는 경우  (0) 2025.01.20
[Ubuntu] 유저 생성 - 원하는 UID, GID 지정  (0) 2024.12.20
[도커] docker-nvidia 설치 확인  (0) 2024.12.04
[에러기록] libcuda.so is not in found but libcuda.so.1  (0) 2024.11.08
[WSL] WSL 2 설치 및 설정  (0) 2024.09.03
'프로그래밍 Programming' 카테고리의 다른 글
  • [에러기록] CUDA, cuDNN 인식이 안 되는 경우
  • [Ubuntu] 유저 생성 - 원하는 UID, GID 지정
  • [도커] docker-nvidia 설치 확인
  • [에러기록] libcuda.so is not in found but libcuda.so.1
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (458)
      • 공지 (1)
      • 영어 공부 English Study (40)
        • 텝스 TEPS (7)
        • 글 Article (21)
        • 영상 Video (10)
      • 연구 Research (99)
        • 최적화 Optimization (3)
        • 데이터과학 Data Science (7)
        • 인공지능 Artificial Intelligent (40)
        • 제어 Control (45)
      • 프로그래밍 Programming (103)
        • 매트랩 MATLAB (25)
        • 파이썬 Python (33)
        • 줄리아 Julia (2)
        • C++ (3)
        • 리눅스 우분투 Ubuntu (6)
      • 항공우주 Aeronautical engineeri.. (21)
        • 항법 Navigation (0)
        • 유도 Guidance (0)
      • 기계공학 Mechanical engineering (13)
        • 열역학 Thermodynamics (0)
        • 고체역학 Statics & Solid mechan.. (10)
        • 동역학 Dynamics (1)
        • 유체역학 Fluid Dynamics (0)
      • 수학 Mathematics (34)
        • 선형대수학 Linear Algebra (18)
        • 미분방정식 Differential Equation (3)
        • 확률및통계 Probability & Sta.. (2)
        • 미적분학 Calculus (1)
        • 복소해석학 Complex Analysis (5)
        • 실해석학 Real Analysis (0)
      • 수치해석 Numerical Analysis (21)
      • 확률 및 랜덤프로세스 Random process (2)
      • 추론 & 추정 이론 Estimation (3)
      • 기타 (26)
        • 설계 프로젝트 System Design (8)
        • 논문작성 Writing (55)
        • 세미나 Seminar (2)
        • 생산성 Productivity (3)
      • 유학 생활 Daily (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    에러기록
    딥러닝
    Statics
    우분투
    텝스공부
    Dear abby
    JAX
    논문작성
    ChatGPT
    matplotlib
    Python
    WOX
    옵시디언
    Numerical Analysis
    Linear algebra
    Julia
    텝스
    pytorch
    teps
    인공지능
    obsidian
    Zotero
    IEEE
    LaTeX
    논문작성법
    MATLAB
    수치해석
    수식삽입
    고체역학
    생산성
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
보통의공대생
[딥러닝] 도커(docker)에서 딥러닝 환경 구축하기 (1) (for JAX)
상단으로

티스토리툴바