How to Set Environment for Development - teoac/DeepLearningOnJetson GitHub Wiki

OS ๋ฐ ๊ธฐ๋ณธ SW ์„ค์น˜

Ubuntu 16.04.04 LTS ์„ค์น˜

  • ๊ธฐ์กด ์œˆ๋„์šฐ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์ ์ธ ์šด์šฉ์„ ์œ„ํ•ด ๋ณ„๋„์˜ ํ•˜๋“œ์— ์šฐ๋ถ„ํˆฌ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ •์ ์ธ ์šด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐ์Šคํฌํƒ‘์šฉ ์šฐ๋ถ„ํˆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค. [๋‹ค์šด๋กœ๋“œ ์‚ฌ์ดํŠธ]
  • ์šฐ๋ถ„ํˆฌ ์„ค์น˜๋ฅผ ์œ„ํ•ด USB๋ฅผ ๋ถ€ํŒ…๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค. [์ฐธ๊ณ  ์‚ฌ์ดํŠธ]
  • USB๋กœ ๋ถ€ํŒ…ํ•˜์—ฌ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
    • 'Installation type'์—๋„ˆ 'Something else'๋ฅผ ์„ ํƒํ•œ๋‹ค.
    • ์„ค์น˜ํ•  ๋•Œ '/boot' ์˜์—ญ์€ 500MB(์ฃผํŒŒํ‹ฐ์…˜), '/' ์˜์—ญ์€ 50GB(์ฃผํŒŒํ‹ฐ์…˜), 'Swap' ์˜์—ญ์€ 32GB(์ฃผํŒŒํ‹ฐ์…˜), '/home' ์˜์—ญ์€ ๋“œ๋ผ์ด๋ธŒ์˜ ๋‚˜๋จธ์ง€(๋…ผ๋ฆฌํŒŒํ‹ฐ์…˜)๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
    • 'Device for boot loader installation'์—์„œ๋Š” Ubuntu๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์„ ํƒํ•œ๋‹ค.

ํ•œ๊ธ€์ž…๋ ฅ

์ฐธ๊ณ  ์‚ฌ์ดํŠธ

์‹œ๊ฐ„๋Œ€ ์„ค์ •ํ•˜๊ธฐ

๋ฐ”๋กœ๊ฐ€๊ธฐ

์—…๋ฐ์ดํŠธ ์˜ต์…˜ ๋ณ€๊ฒฝ ๋ฐ ์ดˆ๊ธฐ ์—…๊ทธ๋ ˆ์ด๋“œ

  • System Setting > Software & Updates > Updates ๋กœ ์ด๋™
  • ์•ˆ์ •์ ์ธ ์‹œ์Šคํ…œ ์šด์šฉ์„ ์œ„ํ•ด Unsupported updates (xenial-backports) ์ฒดํฌ ํ•ด์ œ
  • ํ„ฐ๋ฏธ๋„์ฐฝ ๋ช…๋ น
    sudo apt-get update
    sudo apt-get upgrade
    

๊ทธ๋ž˜ํ”ฝ ๋“œ๋ผ์ด๋ฒ„ ์„ค์น˜

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-384

Docker CE ์„ค์น˜

[์ฐธ๊ณ  ์‚ฌ์ดํŠธ]

  • Repository ์…‹์—…
    • ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ
    sudo apt-get update
    
    • https ๊ธฐ๋ฐ˜ repository์˜ apt ์„ค์น˜๋ฅผ ์ธ๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜
    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    
    • Docker ๊ณต์‹ GPG key ์ถ”๊ฐ€
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
    • ์•ˆ์ •์ ์ธ repository๋ฅผ ์„ค์ •ํ•œ๋‹ค.
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    
  • Docker CE ์„ค์น˜
    • ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ
    sudo apt-get update
    
    • ์ตœ์‹  ๋ฒ„์ „ Docker CE ์„ค์น˜
    sudo apt-get install docker-ce
    
    • 'hello-world' ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด์„œ ์„ค์น˜ ๊ฒ€์ฆ
    sudo docker run --rm hello-world
    

NVIDIA-Docker v2.0 ์„ค์น˜

[์ฐธ๊ณ  ์‚ฌ์ดํŠธ1] [์ฐธ๊ณ  ์‚ฌ์ดํŠธ2]

  • ํŒจํ‚ค์ง€ repository ์ถ”๊ฐ€
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
  • NVIDIA-docker v2.0 ์„ค์น˜
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
  • ์„ค์น˜ ๊ฒ€์ฆ
sudo docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
  • Docker ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ ์„ค์น˜ ํด๋” ๋ณ€๊ฒฝ [์ฐธ๊ณ  ์‚ฌ์ดํŠธ]
    • Docker ์„œ๋น„์Šค ์ค‘์ง€ ๋ฐ ํด๋” ์ƒ์„ฑ
    sudo serviece docker stop
    mkdir DIR_DOCKER
    
    • Docker daemon ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ(๋˜๋Š” ์ˆ˜์ •)
    sudo gedit /etc/docker/daemon.json
    
    • ์•„๋ž˜ ๊ตฌ๋ฌธ ์ถ”๊ฐ€
    {
      "data-root": "DIR_DOCKER",
      "storage-driver": "overlay",
        "runtimes": {
          "nvidia": {
              "path": "nvidia-container-runtime",
              "runtimeArgs": [] 
          }
        }
    }
    
    • Docker ์„œ๋น„์Šค ์žฌ์‹คํ–‰
    sudo service docker start
    
    • ํ™•์ธ
    sudo lsof | grep DIR_DOCKER
    
  • NVIDIA GPU CLOUD์— ๋กœ๊ทธ์ธ
    • ๊ฐ€์ž… ํ›„ ๊ฐœ์ธ API Key๋ฅผ ์–ป์–ด์•ผ ๊ฐ์ข… ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•ด๋‹น ์ปดํ“จํ„ฐ๋กœ 1ํšŒ ํ•ด๋†“์œผ๋ฉด ํ–ฅํ›„ ๋ณ„๋„ ๋กœ๊ทธ์ธ์€ ๋ถˆํ•„์š”ํ•˜๋‹ค.
    • ํ„ฐ๋ฏธ๋„์ฐฝ ๋ช…๋ น
    sudo docker login nvcr.io
    Username: $oauthtoken
    Password: NGC์— ๊ฐ€์ž…ํ•˜๋ฉด ์–ป์„ ์ˆ˜ ์žˆ๋Š” API Key ์ž…๋ ฅ
    

Docker ์„ค์น˜ ํด๋” ์ด๋™

[์ฐธ๊ณ ์‚ฌ์ดํŠธ]

  • Docker ํ”„๋กœ์„ธ์Šค ์ค‘์ง€
    sudo service docker stop
    
  • Docker ์ด๋ฏธ์ง€๋‚˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ €์žฅํ•  ํด๋” ์ƒ์„ฑ
    mkdir -p /home/USER/DOCKERFOLDER
    
  • Docker ํ™˜๊ฒฝ์ •๋ณด ํŒŒ์ผ ์—ด๊ธฐ
    sudo gedit /etc/default/docker
    
  • Docker_OPT ๋ณ€๊ฒฝ
    DOCKER_OPTS="-g /home/USER/DOCKERFOLDER"
    
  • Docker ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘
    sudo service docker start
    

DIGITS ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์ถ• (๋„์ปค ๊ธฐ๋ฐ˜)

  • ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด NVIDIA์—์„œ ์ œ๊ณตํ•˜๋Š” DIGITS ๊ธฐ๋ฐ˜ ํ•™์Šตํ™˜๊ฒฝ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ
    sudo docker run --runtime=nvidia --name digits -d -p 5000:5000 -v [Source Directory]:[Target Directory] nvcr.io/nvidia/digits:18.07
    
  • Tip!
    • [Source Directory]์— /home/USER/๋ฅผ
    • [Target Directory]์— /workspace/๋ฅผ
    • ์ž…๋ ฅํ•˜๋ฉด ์ž์‹ ์˜ ํด๋”๋ฅผ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ์ž์œ ๋กญ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํฌํŠธ 5000์œผ๋กœ ์—ฐ๊ฒฐํ•ด๋†“์•˜์œผ๋ฏ€๋กœ Chrome ๋“ฑ์„ ํ†ตํ•ด์„œ 0.0.0.0:5000์— ์ ‘์†
  • ์ฃผ์š” ๋ช…๋ น์–ด ์ •๋ฆฌ
    sudo docker stop digits # ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
    sudo docker start digits # ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘
    sudo docker exec -it digits bash # ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์‰˜ ๋ช…๋ น ์ฐฝ
    

TensorFlow ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์ถ• (๋„์ปค ๊ธฐ๋ฐ˜)

  • ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด NVIDIA์—์„œ ์ œ๊ณตํ•˜๋Š” TensorFlow ๊ธฐ๋ฐ˜ ํ•™์Šตํ™˜๊ฒฝ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ

    sudo docker run -it --runtime=nvidia --name tensorflow -v [Source Directory]:[Target Directory] -p 8888:8888 nvcr.io/nvidia/tensorflow:18.07-py3
    
    • Tip!
      • [Source Directory]์— /home/USER/๋ฅผ
      • [Target Directory]์— /workspace/๋ฅผ
      • ์ž…๋ ฅํ•˜๋ฉด ์ž์‹ ์˜ ํด๋”๋ฅผ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ์ž์œ ๋กญ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ค์น˜์—ฌ๋ถ€ ํ™•์ธ

    • python ์‹คํ–‰
    • ์•„๋ž˜ ๋ช…๋ น์–ด ์ฝ”๋”ฉ
      import tensorflow as tf
      hello = tf.constant('Hello, TensorFlow!')
      sess = tf.Session()
      print(sess.run(hello))
      
    • Hello, TensorFlow! ์ถœ๋ ฅ๋˜๋Š” ์ง€ ํ™•์ธ
  • Jupyter Notebook ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

    • ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ Jupyter Notebook ์„ค์น˜
      python3 -m pip install --upgrade pip
      python3 -m pip install jupyter
      
    • ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ Jupyter Notebook ์‹คํ–‰
      jupyter notebook --allow-root --ip 0.0.0.0
      
    • ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€ ๋ธŒ๋ผ์šฐ์ ธ์—์„œ 0.0.0.0:8888์— ์ ‘์† ๋˜๋Š” Pycharm ๋“ฑ์„ ์ด์šฉํ•ด์„œ Jupyter Notebook ํŒŒ์ผ ๋งŒ๋“ค์–ด์„œ ํ•ด๋‹น ์„œ๋ฒ„์ฃผ์†Œ ์ž…๋ ฅ
  • ์ฃผ์š” ๋ช…๋ น์–ด ์ •๋ฆฌ

    sudo docker stop tensorflow # ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
    sudo docker start tensorflow # ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘
    sudo docker exec tensorflow jupyter notebook --allow-root --ip 0.0.0.0 # Jupyter Notebook ๋ฐ”๋กœ ์‹คํ–‰
    
  • matplotlib์—์„œ ํ•œ๊ธ€ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํดํŠธ ์„ค์ •

    sudo docker exec -it tensorflow bash # tensorflow ์ปจํ…Œ์ด๋„ˆ๋กœ ๋“ค์–ด๊ฐ€์„œ ์ฝ˜์†”๋ช…๋ น์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ.
    apt-get install fontconfig
    apt-get install fonts-nanum*
    sudo fc-cache -fv
    cp /usr/share/fonts/truetype/nanum/Nanum* /usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/fonts/ttf/
    rm -rf /home/ubuntu/.cache/matplotlib/*
    

AirSim ์„ค์น˜

  • GitHub Mirosoft/AirSim ์ฐธ๊ณ 
  • Unreal Engine 4.18 ์†Œ์Šค์ฝ”๋“œ ๋ณต์‚ฌ ๋ฐ ์ปดํŒŒ์ผ
    git clone -b 4.18 https://github.com/EpicGames/UnrealEngine.git
    cd UnrealEngine
    ./Setup.sh
    ./GenerateProjectFiles.sh
    make
    
  • AirSim 1.2 ์†Œ์Šค์ฝ”๋“œ ๋ณต์‚ฌ ๋ฐ ์ปดํŒŒ์ผ
    cd ..
    git clone https://github.com/Microsoft/AirSim.git
    cd AirSim
    ./setup.sh
    ./build.sh
    

Jetson TX2 ๊ฐœ๋ฐœ์„ ์œ„ํ•œ Jetpack ์„ค์น˜

  • ์ตœ์‹  ๋ฒ„์ „(3.3 L4T)์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค. ๋งํฌ
  • ์„ค์น˜์•ˆ๋‚ด ๋งํฌ์— ๋”ฐ๋ผ ์„ค์น˜ํ•œ๋‹ค.
    • Jetpack์„ ์„ค์น˜ํ•˜๊ณ  ๋‚˜๋ฉด sudo apt-get update ์ˆ˜ํ–‰ ์‹œ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” JetPack์ด Jetson TX2๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด์„œ arm64๋ฅผ ์ง€์›ํ•˜๋„๋ก ppa๋ฅผ ์ง€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์œผ๋กœ ๋ณด์ธ๋‹ค. ์•„์ง ์ด ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์œผ๋‚˜ NVIDIA์—์„œ๋Š” ๊ธฐ๋Šฅ์ƒ ๋ฌธ์ œ๋Š” ์—†๋‹ค๊ณ  ์–˜๊ธฐํ•˜๊ณ  ์žˆ๋‹ค. ์ฐธ๊ณ 
    • ์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด arm64 ์•„ํ‚คํ…์ณ์™€ ๊ด€๋ จ๋œ ์„ค์ •๋“ค์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
      sudo dkpg --force-architecture --remove-architecture arm64
      sudo apt-get -f install