Tensorflow 개발환경 구축
AI-Tensorflow

WSL 2 및 Ubuntu 셋팅

GPU 가속을 지원하는 Tensorflow 개발환경을 구축한다.

구글 Colab은 딥러닝 실습에 제한 사항이 많으므로, 대신 Ubuntu 및 Docker를 사용한다.

윈도우(10 이상)에서 Native한 방식으로 리눅스 실행 파일을 실행하기 위해 WSL 2 및 Ubuntu 20.04.4 LTS(💾설치)를 설치한다.

Ubuntu 설치가 끝나면 실행하여 사용자 정보(username 및 password)를 입력한다.

Note

Windows Terminal(💾설치)은 많은 기능과 우수한 편의성을 자랑하므로 설치를 권장한다.

  • 📌 WSL 설치

    아래 작업은 PowerShell을 관리자 권한으로 실행해야 한다.

    • Linux용 Windows 하위 시스템 사용 옵션 기능을 사용하도록 설정한다.

      1
      
      > dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 
      
    • 버전업 가능 여부를 확인한다.

      윈도우 빌드가 18362보다 낮으면 WSL 2를 지원하지 않으므로 주의해야 한다.

      (윈도우 빌드는 실행 창(Windows 로고 키 + R)에 winver을 입력하거나, 설정에서 PC 정보를 검색해서 확인)

    • 업데이트가 가능하다면 이어서 Virtual Machine 기능을 사용하도록 설정한다.

      1
      
      > dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
      
    • --set-default-version 명령어로 기본 버전을 선택한다.

      (2로 설정 시 WSL2를 기본 버전으로 사용)

      1
      
      > wsl --set-default-version 2
      
    • 만약 위 방법이 작동하지 않는다면, Linux 커널 업데이트를 먼저 진행해야 한다.

      이곳에서 최신 WSL2 Linux 커널 업데이트 패키지를 설치한 후, 다음 명령을 대신 입력한다.

      1
      
      > wsl --set-default-version Ubuntu-20.04 2
      

Note

WSL 버전은 wsl -l -v 명령으로 확인할 수 있다.

1
  > wsl -l -v
1
2
    NAME                   STATE           VERSION
  * Ubuntu-20.04           Running         2

Docker 및 GPU 셋팅

Ubuntu에 Docker 엔진 및 GPU 지원을 위해 필요한 패키지를 설치한다.

Windows용 Docker 데스크톱 설치

WSL 2에서 도커를 사용하기 위해서는 우선 Windows용 Docker 데스크톱(💾)이 설치되어 있어야 한다.

설치가 완료되면 몇 가지 환경 설정을 진행한다.

  • 📌 Windows에 Docker 데스크톱 설치

    • General 메뉴의 Use the WSL 2 based engine 옵션에 체크한다.

    • Resources -> WSL Integration 메뉴의 옵션을 다음과 같이 설정한다.

Ubuntu용 Docker 엔진 설치

Ubuntu를 실행하고 Docker 엔진을 설치하기 위해 다음 과정을 진행한다.

  • 📌 Ubuntu에 Docker 엔진 설치

    • 먼저 HTTPS를 경유하여 리포지토리를 사용할 수 있도록 apt를 업데이트하고 패키지를 설치한다.

      1
      2
      3
      4
      5
      6
      
      $ sudo apt-get update
      $ sudo apt-get install \
          ca-certificates \
          curl \
          gnupg \
          lsb-release
      
    • 다음으로 Docker와의 암호화된 통신을 위한 Docker의 공식 GPG 키를 추가한다.

      1
      
      $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
      
    • 마지막으로 Docker의 리포지토리를 설정한다.

      1
      2
      3
      
      $ echo \
        "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
      

모든 준비가 끝났다면 apt를 업데이트하고 Docker 엔진을 설치한다.

1
2
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Note

특정 버전을 설치하고 싶다면 이곳의 두 번째 단락을 참고한다.

테스트 이미지를 실행해 Docker 엔진이 올바르게 설치되었는지 확인한다.

1
$ sudo docker run hello-world

(선택적) 설치 후 단계

이 작업은 루트가 아닌 사용자 그룹에 root와 동일한 권한을 부여한다(건너뛰어도 무방).

  • 📌 (선택적) 설치 후 단계

    • 먼저, docker 그룹을 생성한다.

      1
      
      $ sudo groupadd docker
      
    • 생성한 docker 그룹에 사용자를 추가한 다음, 재시작한다.

      1
      2
      
      $ sudo usermod -aG docker $USER
      $ newgrp docker 
      
    • /var/run/docker.sock 파일의 권한을 666으로 설정하여 그룹 내 다른 사용자도 접근 가능하게 변경한다.

      1
      
      $ sudo chmod 666 /var/run/docker.sock
      
    • 이제 sudo 없이도 docker 명령을 수행할 수 있다.

      1
      
      $ docker run hello-world
      

NVIDIA Docker 지원 설치

Linux 환경에서 Tensorflow가 GPU를 지원할 수 있도록 NVIDIA Docker 지원을 설치한다.

  • 📌 NVIDIA Docker 지원 설치

    • NVIDIA 패키지 리포지토리 및 GPG 키를 설치한다.

      1
      2
      3
      4
      5
      
      $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
            && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
            && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
                  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
                  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
      
    • apt를 업데이트하고 nvidia-docker2 패키지를 설치한 다음, 도커 데몬을 재시작해 설치를 완료한다.

      1
      2
      3
      
      $ sudo apt-get update
      $ sudo apt-get install -y nvidia-docker2
      $ sudo systemctl restart docker
      

모든 패키지 설치가 끝났으며, 다음 명령으로 CUDA 컨테이너를 실행해 GPU 작동 성능을 테스트할 수 있다.

1
$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.51       Driver Version: 511.69       CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0 Off |                  N/A |
| N/A   48C    P8    N/A /  N/A |      0MiB /  4096MiB |      1%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Tensorflow 셋팅

이번 단락에서는 옵션을 지정해 Tensorflow를 Docker에 설치하고, 실행하여 작동을 확인한다.

Tensorflow Docker 이미지 다운로드

공식 Tensorflow Docker 이미지는 tensorflow/tensorflow Docker hub 저장소에 있습니다.

다음 형식을 조합하면 리눅스에서 Tensorflow 이미지를 태그할 수 있다.

  • 📌 Tensorflow Docker 이미지 다운로드

    • 먼저 베이스 태그를 사용해 Tensorflow 이미지의 버전을 지정한다.

      베이스 태그 설명
      latest TensorFlow CPU 바이너리 이미지의 최신 출시(기본값)
      version TensorFlow 바이너리 이미지의 버전 지정(예: 2.1.0)
    • 태그 변이를 적용하면 각 베이스 태그에는 기능 추가를 할 수 있다.

      (태그 변이는 다른 태그 변이와 함께 사용 가능)

      태그 변이 설명
      tag-gpu GPU 지원
      tag-jupyter Jupyter Notebook 포함

구성하고자 하는 텐서플로우 작업환경은 GPU를 지원하며 Jupyter Notebook 역시 포함해야 한다.

다음과 같은 형식으로 태그를 만들면 최신 버전의 Tensorflow를 다운로드할 수 있다.

1
$ docker pull tensorflow/tensorflow:latest-gpu-jupyter

Jupyter Notebook 실행

도커를 이용하기 위해서는 Docker Daemon이 실행 중이여야 한다.

다음 명령을 통해 Docker Daemon의 상태를 start로 변경한다.

1
$ sudo service docker start

다음 명령으로 지금까지 구성한 작업환경 컨테이너를 실행할 수 있으며, 생성된 링크로 이동하면 주피터 노트북으로 연결된다.

1
$ docker run --gpus all -lt -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:latest-gpu-jupyter

notebooks 폴더로 이동한 뒤, 작동 테스트를 위해 새 ipynb 파일을 생성한다.

  • 작동 테스트

    • Tensorflow 버전 확인

      1
      2
      3
      
      import tensorflow as tf
              
      print(tf.__version__)
      
    • Tensorflow가 GPU를 사용하는지 확인

      1
      2
      3
      
      from tensorflow.python.client import device_lib
              
      print(device_lib.list_local_devices())
      
      1
      
      device_type: "GPU"
      

Note

주피터 노트북을 종료하려면 우측 상단의 Quit 버튼을 클릭한다.