Data Navigator

tensorflow docker를 이용해 gpu 이용하기 + windows의 폴더 공유하기 본문

Python

tensorflow docker를 이용해 gpu 이용하기 + windows의 폴더 공유하기

코딩하고분석하는돌스 2024. 4. 16. 17:33

tensorflow docker를 이용해 gpu 이용하기 + windows의 폴더 공유하기

- 텐서플로 도커로 gpu 사용하기 -

 

 

1. 윈도우 환경에서 Tensorflow 와 nvidia GPU을 이용해 deep learning 할 때 생기는 문제점

윈도우 환경에서 tensorflow와 nvidia gpu를 이용해 딥러닝을 하려고 하다보면 가상환경 세팅에 많은 시간을 소요하게 된다. 특히 윈도우 native에서는 최신 버전의 tensorflow가 더 이상 지원되지 않는다.

 

그래서 윈도우 서브시스템인 wsl2 환경에서 해야 하는데, wsl2 환경에서는 그래픽 드라이버, cuda, cudatoolkit을 설치하고 설정하는 것이 복잡하고 제대로 설치 후 환경설정을 했는데도 인식이 제대로 되지 않는 경우가 많다.

최근까지 conda 환경에서는 비교적 잘 됐었는데 tensorflow 최신 버전이 cuda 12 버전으로 올리면서 conda 환경에서 설치되는 cuda 11.08과 호환성 문제가 생겨 GPU 가속이 되지 않는다.

 

설치 문제로 말이 많아서 그런지 tensorflow 홈페이지에도 docker를 이용하는 것이 가장 편하다고 소개하고 있는데, 이번에 나도 docker를 이용해 보기로 했다.

 

https://www.tensorflow.org/install/docker?hl=ko#examples_using_gpu-enabled_images

 

Docker  |  TensorFlow

Docker 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Docker는 컨테이너를 사용하여 TensorFlow 설치를 나머지 시스템에서 격리하는 가상 환경을 만듭니다. TensorF

www.tensorflow.org

 

2. docker로 tensorflow를 사용하기 위한 사전 설정

 

1) docker desktop for windows 설치

https://www.docker.com/products/docker-desktop/

 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

 

 

3. cmd 창 열고 tensorflow docker image + nvidia docker image 받기

  1) 아래의 명령어를 입력해서 tensorflow 최신버전에 gpu + jupyter notebook 설정이 되어 있는 이미지 + nvidia-docker image를 받고 실행한다.

docker run --name tf_gpu_jupyter --gpus all -d -p 8888:8888 tensorflow/tensorflow:latest-gpu-jupyter

 

 

4. 이미지를 다운받고 실행이 되면 잘 작동하고 있는지 docker container ls로 확인

docker container ls

 

tf_gpu_jupyer라는 이름으로 포트 8888에서 잘 작동하고 있는 것을 알 수 있다.

 

5. docker logs <컨테이너명> 으로 jupyter notebook 링크 찾고 클릭해 주피터 노트북 열기

container를 백그라운드로 실행시켰기 때문에 jupyter notebook 주소를 알 수 없으니 docker logs 명령어를 이용해 주소를 찾는다.

docker container ls로 확인했을 때 컨테이너 이름이 tf_gpu_jupyter 이므로

docker logs tf_gpu_jupyter를 치면 된다.

docker logs tf_gpu_jupyter

출력된 로그에서 http://127.0.0.1:8888/ 로시작되는 링크를 ctrl 키를 누르고 마우스로 클릭하면 웹브라우저에서 jupyter notebook 이 열린다.

 

6. GPU 작동 확인

Default GPU Device: /device:GPU:0
tf.Tensor(-1363.3666, shape=(), dtype=float32)

주피터 노트북이 열리면 새 노트를 작성하고 아래의 테스트 코드를 입력해 위의 결과가 나오면 성공!!

import tensorflow as tf

# GPU 장치 이름을 가져옵니다
gpu_device_name = tf.test.gpu_device_name()

# GPU가 사용 가능한지 확인합니다
if gpu_device_name:
    print('Default GPU Device: {}'.format(gpu_device_name))
    print(tf.reduce_sum(tf.random.normal([1000, 1000])))
else:
    print("Please install GPU version of TF")

 

 

7. docker-compose를 이용해 tensorflow 컨테이너를 간편하게 실행하고 windows의 작업 폴더 volume으로 연결하기

위의 작업까지 마치고 나면 windows 환경에서 tensorflow에서 GPU로 학습하는 문제는 해결된다.

그런데 docker의 문제는 컨테이너가 stop되면 컨테이너 내부의 작업이 모두 날아간다는 점이 있다.

그리고 실행 명령어도 아주 길기 때문에 기억하기도 어렵다.

이때 docker-compose를 이용해서 미리 설정을 작성해 놓으면 docker-compose up/down 으로 쉽게 이용할 수 있다.

또한 windows의 작업 폴더를 docker에 volume mount로 연결해 놓으면 파일을 복사할 필요 없이 docker에서 바로 공유가 되니 편리하다.

 

1) cmd 창 첫 디렉토리에 docker-compose.yaml 파일 작성

    docker는 cmd 창 어디서든 실행 시킬 수 있기 때문에 docker-compose.yaml 의 위치는 어디든 상관 없다.

    그러나 나는 cmd 창이 열리자 마자 바로 실행시킬 수 있도록 창이 열리는 디렉토리에 작성했다.

   우선 검색창에 cmd를 입력하거나 window키+r을 누른 뒤 cmd 를 입력하고 enter

 위와 같이 cmd 창이 열리면 vscode를 열어 docker-compose.yaml 파일을 만들자.

 

2) docker-compose.yaml 작성

code . 으로 vscode 실행

code .

 

아래는 docker-compose.yaml 파일의 내용이다.

services:
  tensorflow:
    image: tensorflow/tensorflow:latest-gpu-jupyter
    command: jupyter notebook --ip 0.0.0.0 --no-browser --allow-root
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    ports:
      - "8888:8888"
    volumes:
      - d:/bigdata:/tf   # windows의 d:/bigdata 폴더를 tensorflow 컨테이너의 /tf 디렉토리로 연결

 

docker-compose.yaml을 작성할 때는 띄어쓰기가 매우 중요하므로 위에 적혀있는 내용의 공백을 꼭 지켜서 붙여 넣자.

 

윈도우의 폴더와 tensorflow 컨테이너의 volume을 연결하는 부분은 volumes에 적혀있다.

나는 작업디렉토리가 d:/bigdata이므로 volumes 부분에 d:/bigdata 로 적었고 tensorflow container에서 실행되는 jupyter notebook의 기본 디렉토리인 /tf 에 연결했다.

 

3) docker-compose up으로 컨테이너 실행

docker-compose up으로 컨테이너 실행하자.

docker-compose up

 

위와같이 created가 뜨고 jupyter notebook 접속 주소가 나오면 정상으로 작동하는 것이다.

ctrl 키를 누른 상태에서 http://127.0.0.1:8888 주소로 시작하는 링크를 클릭하면 웹브라우저에서 jupyter notebook이 실행 된다.

 

4) jupyter notebook 및 작업폴더 mount 확인

 

jupyter notebook이 실행되면 windows에 있는 작업 폴더가 mount 되어 있는 것을 확인 할 수 있다.

 

 

이렇게 하면 간편하게 tensorflow docker를 실행해서 GPU로 deep learning 학습을 할 수 있고, 파일 관리도 아주 편해진다.

 

5) 새 노트북 만들어서 gpu 작동 최종 테스트

docker에서 실행되는 jupyter notebook 에서 새 파일을 만들고 gpu 작동을 테스트하는 코드를 실행

import tensorflow as tf
from tensorflow.python.client import device_lib

print(tf.reduce_sum(tf.random.normal([1000, 1000])))

# TensorFlow가 GPU를 사용할 수 있는지 확인하기
print("TensorFlow가 GPU를 사용할 수 있는지 확인하기: ", tf.test.is_built_with_cuda())

# GPU 사용 가능 여부 확인하기
print("GPU 사용 가능 여부 확인하기: ", tf.test.is_gpu_available())

# GPU 정보 확인하기
!nvidia-smi

 

 

정상적으로 작동하고 있는 것을 확인 할 수 있다.

 

6) docker -compose down 후 windows 폴더에 위의 테스트 파일이 있는지 확인하기

docker -compose down으로 컨테이터를 제거

docker-compose down

 

윈도우 탐색기를 열어 파일이 windows 작업 폴더에 저장되어 있는지 확인한다.

 

docker에서 실행한 jupyter notebook에서 작성한 tensorflow_gpu_docker_volume_test.ipynb 파일이 있는 것을 확인 할 수 있다.