Jetson & 머신러닝

torch / vision 설치 on Jetson Xavier (yolo GPU학습용)

아크리엑터 2024. 7. 1. 17:58
반응형

 

1. 기본 설치

$ sudo apt-get install python3-pip libopenblas-base libopenmpi-dev libomp-dev
$ sudo pip3 install 'Cython<3'
$ sudo pip3 install numpy

 

2. torch 다운로드

   jetpack 5.1.3이 설치된 Xavier에서 여러가지 방법을 해봤다. 소스로 설치를 해봤고, whl파일로 설치를 해보기도 했고... xavier를 완전히 초기화한 상태에서 다시 작업하면서, whl 파일을 다운로드 받아서 설치해보는 방법으로 진행하고 있다.

  다운로드는 아래의 주소에서 받을 수 있다.

https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048

 

PyTorch for Jetson

Below are pre-built PyTorch pip wheel installers for Jetson Nano, TX1/TX2, Xavier, and Orin with JetPack 4.2 and newer. Download one of the PyTorch binaries from below for your version of JetPack, and see the installation instructions to run on your Jetson

forums.developer.nvidia.com

 

jetpack5.1.3이 설치된 것이니, PyTorch v2.1.0 을 다운로드 받았다. 안내된 내용에는 jetpack 5.1.2까지만 언급되어있다.

 

3. pytorch 설치

$ sudo pip3 install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl 

Processing ./torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
Collecting filelock
  Downloading filelock-3.15.4-py3-none-any.whl (16 kB)
Collecting sympy
  Downloading sympy-1.12.1-py3-none-any.whl (5.7 MB)
     |████████████████████████████████| 5.7 MB 3.2 MB/s 
Collecting networkx
  Downloading networkx-3.1-py3-none-any.whl (2.1 MB)
     |████████████████████████████████| 2.1 MB 3.3 MB/s 
Collecting jinja2
  Downloading jinja2-3.1.4-py3-none-any.whl (133 kB)
     |████████████████████████████████| 133 kB 3.1 MB/s 
Collecting fsspec
  Downloading fsspec-2024.6.1-py3-none-any.whl (177 kB)
     |████████████████████████████████| 177 kB 3.6 MB/s 
Collecting typing-extensions
  Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Collecting mpmath<1.4.0,>=1.1.0
  Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)
     |████████████████████████████████| 536 kB 3.0 MB/s 
Collecting MarkupSafe>=2.0
  Downloading MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (26 kB)
Installing collected packages: filelock, mpmath, sympy, networkx, MarkupSafe, jinja2, fsspec, typing-extensions, torch

  Attempting uninstall: MarkupSafe
    Found existing installation: MarkupSafe 1.1.0
    Not uninstalling markupsafe at /usr/lib/python3/dist-packages, outside environment /usr
    Can't uninstall 'MarkupSafe'. No files were found to uninstall.
Successfully installed MarkupSafe-2.1.5 filelock-3.15.4 fsspec-2024.6.1 jinja2-3.1.4 mpmath-1.3.0 networkx-3.1 sympy-1.12.1 torch-2.1.0a0+41361538.nv23.6 typing-extensions-4.12.2

 

4. pytorch 설치 확인

$ python3

Python 3.8.10 (default, Nov 22 2023, 10:22:35) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True
>>> quit()

True가 출력되면 정상 설치된 것이다.

 

5. torchvision 설치전 패키지 설치

$ sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev libavcodec-dev libavformat-dev libswscale-dev

 

6. torchvision 다운로드

위에서 설치한 pytorch 버전에 따라서, 설치할 torchvision의 버전 짝이 있다.  위에서는 pyTorch v2.1을 설치한 것이라, torchvision v0.16.1을 다운로드 받아 설치해야 한다.

PyTorch v1.12 - torchvision v0.13.0
PyTorch v1.13 - torchvision v0.13.0
PyTorch v1.14 - torchvision v0.14.1
PyTorch v2.0 - torchvision v0.15.1
PyTorch v2.1 - torchvision v0.16.1      -torchaudio  v2.1.0
PyTorch v2.2 - torchvision v0.17.1
PyTorch v2.3 - torchvision v0.18.0

git으로 다운로드 한다.

$ git clone --branch v0.16.1 https://github.com/pytorch/vision torchvision-0.16.1

 

7. torchvision 설치

설치 전에 환경변수를 설정한 후, 설치를 진행한다.   nvidia forum에 등록된 글에는 user 홈에 설치하도록 안내되어있다.($python3 setup.py install --user)

$ cd torchvision-0.16.1
$ export BUILD_VERSION=0.16.1
$ sudo python3 setup.py install

 

한참의 complie 후에 아래와 같이 설치 완료된다.

....

Using /usr/lib/python3/dist-packages
Searching for numpy==1.17.4
Best match: numpy 1.17.4
Adding numpy 1.17.4 to easy-install.pth file
Installing f2py script to /usr/local/bin
Installing f2py3 script to /usr/local/bin
Installing f2py3.8 script to /usr/local/bin

Using /usr/lib/python3/dist-packages
Searching for filelock==3.15.4
Best match: filelock 3.15.4
Adding filelock 3.15.4 to easy-install.pth file

Using /usr/local/lib/python3.8/dist-packages
Searching for sympy==1.12.1
Best match: sympy 1.12.1
Adding sympy 1.12.1 to easy-install.pth file
Installing isympy script to /usr/local/bin

Using /usr/local/lib/python3.8/dist-packages
Searching for networkx==3.1
Best match: networkx 3.1
Adding networkx 3.1 to easy-install.pth file

Using /usr/local/lib/python3.8/dist-packages
Searching for typing-extensions==4.12.2
Best match: typing-extensions 4.12.2
Adding typing-extensions 4.12.2 to easy-install.pth file

Using /usr/local/lib/python3.8/dist-packages
Searching for fsspec==2024.6.1
Best match: fsspec 2024.6.1
Adding fsspec 2024.6.1 to easy-install.pth file

Using /usr/local/lib/python3.8/dist-packages
Searching for jinja2==3.1.4
Best match: jinja2 3.1.4
Adding jinja2 3.1.4 to easy-install.pth file

Using /usr/local/lib/python3.8/dist-packages
Searching for mpmath==1.3.0
Best match: mpmath 1.3.0
Adding mpmath 1.3.0 to easy-install.pth file

Using /usr/local/lib/python3.8/dist-packages
Searching for MarkupSafe==2.1.5
Best match: MarkupSafe 2.1.5
Adding MarkupSafe 2.1.5 to easy-install.pth file

Using /usr/local/lib/python3.8/dist-packages
Finished processing dependencies for torchvision==0.16.1+fdea156

 

8. torchvision 설치 확인

python프로그램을 만들어서 실행시켜 보자.

$ vi torch_test.py

import torch
import torchvision

def check_torch_and_torchvision():
    try:
        # Check if torch is installed
        print(f"PyTorch version: {torch.__version__}")
        
        # Check if torchvision is installed
        print(f"Torchvision version: {torchvision.__version__}")
        
        # Create a tensor
        tensor = torch.tensor([1.0, 2.0, 3.0, 4.0])
        print(f"Created tensor: {tensor}")
        
        # Perform a simple tensor operation
        tensor_sum = tensor.sum()
        print(f"Sum of tensor elements: {tensor_sum}")
        
        # Check for CUDA support
        if torch.cuda.is_available():
            print("CUDA is available. GPU is supported.")
            print(f"CUDA version: {torch.version.cuda}")
            print(f"Number of CUDA devices: {torch.cuda.device_count()}")
            print(f"CUDA device name: {torch.cuda.get_device_name(0)}")
        else:
            print("CUDA is not available. GPU is not supported.")
        
        print("PyTorch and Torchvision are installed and working correctly.")
    except ImportError as e:
        print(f"Error: {e}")
        print("PyTorch or Torchvision is not installed or there is an issue with the installation.")

if __name__ == "__main__":
    check_torch_and_torchvision()

 

실행한 결과는 아래와 같다.

$ python3 python_test.py
PyTorch version: 2.1.0a0+41361538.nv23.06
Torchvision version: 0.16.1+fdea156
Created tensor: tensor([1., 2., 3., 4.])
Sum of tensor elements: 10.0
CUDA is available. GPU is supported.
CUDA version: 11.4
Number of CUDA devices: 1
CUDA device name: Xavier
PyTorch and Torchvision are installed and working correctly.

 

9. torchaudio 설치

패키지로 설치를 하려고 하니, 기존 설치한 버전을 자동 삭제하고 있어서 소스로 설치를 진행하였다. 아래와 같이 torch버전에 맞는 소스를 다운로드 받았다.

$ git clone --branch v2.1.0 https://github.com/pytorch/audio torchaudio-2.1.0

추가 패키지를 설치한다. 필수는 아니다.

$ sudo pip install kaldi_io Soundfile

 

빌드를 위한 다른 패키지 설치를 한다. cmake는 초기 설치된 것을 사용하면 안된다. 버전을 올려야한다. 최소사양은 기억이 안난다. 실제는 cmake의 최신버전이 패키지로 설치가 안되어서, 소스를 다운로드 받아서 직접 컴파일해서 적용했다.

$ sudo apt-get install cmake
$ sudo pip install ninja

 

다운받았던, torchaudio 폴더에 접근해서 설치를 진행해보자.

$ cd torchaudio-2.1.0
$ sudo python3 setup.py develop

 

 

10. 가상환경에서의 설치

venv환경에서 설치를 할 경우, 설치 오류가 나는 경우가 있었다.  yolov5를 실행해야 하는데, 가상환경에서 yolov5에 맞는 패키지를 설치하고 보니, torch/vision이 CUDA를 지원하지 않는 것으로 설치가 되어서, CPU버전으로 실행되었다.

GPU버전으로 실행되게 하기 위해 아래와 같이 설치된 torch와  vision 을 삭제하였다.

(yolov5) $ pip uninstall pytorch torchvision

 

삭제한 torch를 다시 설치했다. 위에서 설명한 torch의 설치 절차를 그대로 수행(sudo 부분만 삭제)하였다.

(yolov5) $ pip install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl

 

torchvision을 동일하게 다운로드 해서, 설치를 진행하였다(sudo를 빼고). 오류가 난다.

(yolov5) $ cd torchvi*1
(yolov5) $ export BUILD_VERSION=0.16.1
(yolov5) $ python3 setup.py install

setup.py:10: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import DistributionNotFound, get_distribution, parse_version
Traceback (most recent call last):
  File "setup.py", line 12, in <module>
    from torch.utils.cpp_extension import BuildExtension, CppExtension, CUDA_HOME, CUDAExtension
  File "/home/userid/venv/yolov5/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 25, in <module>
    from pkg_resources import packaging  # type: ignore[attr-defined]
ImportError: cannot import name 'packaging' from 'pkg_resources' (/home/userid/venv/yolov5/lib/python3.8/site-packages/pkg_resources/__init__.py)

 

그래서, setuptools를 uninstall한 후에 다른 버전으로 재설치하였다. yolov5가 실행되는 최소 버전의 setuptools로 변경하였다.

(yolov5) $ pip uninstall setuptools

Found existing installation: setuptools 70.2.0
Uninstalling setuptools-70.2.0:
  Would remove:
   ....

Successfully uninstalled setuptools-70.2.0


(yolov5) $ pip install setuptools==65.5.1

Collecting setuptools==65.5.1
  Downloading setuptools-65.5.1-py3-none-any.whl (1.2 MB)
     |████████████████████████████████| 1.2 MB 1.2 MB/s 
Installing collected packages: setuptools
Successfully installed setuptools-65.5.1

마지막으로, torchvision 설치를 진행하였다. 정상적으로 실행된다.

(yolov5) $ python3 setup.py install

Building wheel torchvision-0.16.1
Compiling extensions with following flags:
  FORCE_CUDA: False
  FORCE_MPS: False
  DEBUG: False
  TORCHVISION_USE_PNG: True
  TORCHVISION_USE_JPEG: True
  TORCHVISION_USE_NVJPEG: True
...
한참 걸린다.
....

Finished processing dependencies for torchvision==0.16.1

 

YOLOv5의 샘플 예제를 실행 시켜보면 첫번째 줄에 CUDA 라는 말이 보인다.

YOLOv5 🚀 2024-7-8 Python-3.8.10 torch-2.1.0a0+41361538.nv23.06 CUDA:0 (Xavier, 30991MiB)

Fusing layers... 
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
Adding AutoShape... 
image 1/1: 720x1280 2 persons, 2 ties
Speed: 1059.4ms pre-process, 100.5ms inference, 7.5ms NMS per image at shape (1, 3, 384, 640)



11. 추가로

위의 일련의 과정을 스크립트로 만들어서 사용하고 있다.  가상환경을 만들어서 사용하려고 했더니 각 가상환경 마다 버전이 맞지 않아서, torch/vision을 재설치해줘야 했다. 그래서, 쉘스크립트를 만들어두고 그냥 일괄로 설치하게 했다.

그리고, 위에서 설명이 안되었는데, setuptools의 버전이 가장 최근버전으로 했을 때에 오류가 발생되어서, 필요한 버전으로 재설치하게 하였다.  아래 스크립트는 위에서 설명한 설치파일 및 github에서 받은 파일들을 해당 폴더에 넣어둔 상태에서 실행시켜야 한다. 물론, 폴더명도 일치를 시켜야지 스크립트가 정상적으로 수행되겠지....

#!/bin/bash

pip uninstall pytorch torchvision torchaudio
pip uninstall setuptools

pip install setuptools==65.5.1

echo "======================================="
echo "         1. torch"
echo "======================================="
pip install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl


echo "======================================="
echo "         2. torchvision"
echo "======================================="
cd torchvision-0.16.1
export BUILD_VERSION=0.16.1
python3 setup.py install
cd ..


echo "======================================="
echo "         3. torchaudio"
echo "======================================="
cd torchaudio-2.1.0
pip install kaldi_io Soundfile
python setup.py develop

 

반응형