📌 Intro
이전 글에서는 Xavier를 초기화 하고 JetPack 재설치하는 방법에 대해 정리했다.
https://krrong.tistory.com/entry/Jetson-Xavier-agx-초기화-및-jetpack-설치2?category=990327
[Jetson Xavier agx] 초기화 및 jetpack 설치3 (Success)
📌 Intro 이전 글에서는 버추얼박스를 이용하여 Xavier를 초기화 하려고 했었고 실패했었다. 그래서 window 데스크탑에 듀얼 부팅으로 우분투를 설치하여 해결하였다. 📌 듀얼부팅 듀얼부팅 관련
krrong.tistory.com
위 글에서도 정리했지만 이전에는 ubuntu 20.04 & JetPack 5.0 버전이었는데 Pytorch를 설치하고 python에서 import를 진행하면 아래와 같은 오류를 내뱉으면서 잘 되지 않았다.
libmpi_cxx.so.20 cannot open shared object file no such file or directory
그래서 ubuntu 18.04 & JetPack 4.6 버전으로 재설치를 진행하였더니 오류없이 Yolov5 환경을 구성할 수 있었다. Xavier에 ubuntu 18.04 & JetPack 4.6 버전이 설치되어 있다는 가정하에 Yolov5 사용을 위한 환경 구성에 대해 정리하도록 하겠다.
📌 Git Colne
git clone https://github.com/ultralytics/yolov5
터미널을 실행한 뒤 위 명령어를 이용하여 yolov5 깃허브를 클론해오도록 하자.
requirements.txt 파일을 보면 Yolov5를 실행하기 위해 필요한 패키지들이 나열되어 있다. 원래 보통의 환경이라면 pip install -r requirements.txt 라는 명령어를 통해서 손쉽게 Yolov5를 사용하기 위한 패키지를 설치할 수 있다.
하지만 Xavier는 arm코어를 사용하기 때문에 위의 내용처럼 간단하게 설치할 수 없다.
(정확하게 이야기하면 pip명령어를 사용해도 설치와 실행 모두 가능하다. 하지만 PyTorch에서 GPU를 사용하지 못한다. GPU를 사용하지 못하면 결국 Xavier를 사용하는 이유조차 없는 것 아닌가?)
어쨋든 그러면 필요한 패키지들을 하나하나 명령어로 설치해보도록 하자.
📌 Install Packages
sudo apt install python3-pip
pip3 install -U PyYAML==5.3.1
pip3 install tqdm
pip3 install cython
pip3 install -U numpy==1.19.5
sudo apt install build-essential libssl-dev libffi-dev python3-dev
sudo apt-get install libopenblas-base libopenmpi-dev
pip3 install cycler==0.10
pip3 install kiwisolver==1.3.1
pip3 install pyparsing==2.4.7
pip3 install python-dateutil==2.8.2
sudo apt install libfreetype6-dev
pip3 install --no-deps matplotlib==3.2.2
sudo apt install gfortran
sudo apt install libopenblas-dev
sudo apt install liblapack-dev
pip3 install scipy==1.4.1
sudo apt install libjpeg-dev
pip3 install pillow==8.3.2
일반적인 것인지는 모르겠지만 나는 matplotlib과 scipy를 설치할 때 꽤나 시간이 걸렸던 것 같다. 실행시켜놓고 밥한끼 하고오면 좋다.
📌 Install PyTorch
https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-11-now-available/72048
PyTorch for Jetson - version 1.11 now available
Below are pre-built PyTorch pip wheel installers for Python on Jetson Nano, Jetson TX1/TX2, Jetson Xavier NX/AGX, and Jetson AGX Orin with JetPack 4.2 and newer. Download one of the PyTorch binaries from below for your version of JetPack, and see the insta
forums.developer.nvidia.com
위 링크로 이동하면 Jetson을 위한 PyTorch를 설치할 수 있는 whl파일과 명령어가 있다.
1. PyTorch 버전 확인
일단 JetPack4.6버전에서 사용하는 PyTorch는 1.10.0버전이 마지막이다. PyTorch v1.10.0을 클릭하자.
그러면 지원하는 JetPack버전들이 나오는데, 모두 4점대 버전인 것을 볼 수 있다.
torch-1.10.0-cp36-cp36m-linux_aarch64.whl 를 사용하긴 할 건데 직접 클릭하여 다운받지는 않을 것이니까 위치를 기억해두자.
2. PyTorch 설치
아래 Installation을 누르면 설치하는 명령어가 나온다. 우리는 Python 3점대 버전에서 사용할 것이기 때문에 Python 3.6의 명령어에 주목하자.
python3-pip, libopenblas-base, libopenmpi-dev, cython, numpy 모두 앞에 관련 패키지 설치시 설치했던 것들이다. 따라서 우리가 사용할 명령어는 첫 줄과 마지막 줄이다.
wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O 이후에는 PyTorch 버전 확인 시 위치를 기억해두자고 했던 whl파일 명을 복사해서 넣어주어야 한다.
또, 마지막 줄을 사용할 때 numpy는 이미 설치했기 때문에 numpy 없이 명령어를 작성하면 된다.
간단하게 전체 명령어가 어떻게 되는지 보도록 하자.
wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install typing-extensions==3.10.0.2
pip3 isntall torch-1.10.0-cp36-cp36m-linux_aarch64.whl
위 명령어들을 이용하여 PyTorch 1.10.0버전을 설치할 수 있다. 앞서 이야기 했던 것 처럼 wget명령어에 -O 이후 1.10.0버전의 whl파일명이 들어가있는 것을 확인할 수 있다.
pip3 install 사용할 때 역시 1.10.0버전의 whl을 사용하여 설치한다.
📌 Install torchvision
PyTorch를 설치할 때와 같은 페이지에서 아래로 조금 내리면 torchvision을 설치할 수 있는 명령어가 있다.
pillow는 앞에 관련 패키지들을 설치하면서 같이 설치했기 때문에 진행하지 않고 setup.py까지 실행하고 패키지 하나를 추가로 설치할 것이다.
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision
cd torchvision
export BUILD_VERSION=0.9.0
python3 setup.py install --user
pip3 install --no-deps seaborn==0.11.0
위 명령어들를 이용하여 torchvision을 설치할 수 있다. clone해오는 과정과 setup.py를 실행할 때 시간이 꽤나 걸렸던 것 같다.
📌 GPU 사용 확인
torch.cuda.is_available() # GPU 사용 가능여부 확인
torch.cuda.get_device_name(0) # 0번 GPU 정보 반환
torch.cuda.device_count() # 사용가능한 GPU 개수를 반환
위 명령어를 통해 PyTorch에서 GPU를 사용할 수 있는지 확인할 수 있다.
GPU에 대한 정보가 출력되는 것을 확인할 수 있다.
📌 Yolov5 실행
python3 detect.py
위 명령어를 통해 Yolov5를 실행할 수 있다. detect.py를 실행할 때 학습된 모델이 없는데 그러면 yolov5s.pt 모델을 다운받은 뒤 추론을 진행하도록 설계되어 있기 때문에 걱정하지 않아도 된다.
Yolov5에서 제공하는 2장의 사진이 검출에 사용되었고, 추론을 진행하는데 첫 번째 이미지는 71.4ms, 두 번째 이미지는 63.7ms가 소요된 것을 볼 수 있다.
그리고 붉은 색으로 표시한 곳을 보면 Yolo를 실행하는데 CPU를 사용하는지, GPU를 사용하는지 출력해주는 라인에서 0번 GPU, 즉 앞에서 확인한 Xavier가 사용된다는 것을 볼 수 있다.
📌 정리
지금까지 Xavier에서 Yolov5를 실행하기 위한 환경 구성에 대해 정리했다. 이 과정을 진행하는데 3주? 정도 소요된 것 같다. 시간을 오래 끌 수 밖에 없었던 이유를 정리해보면 다음과 같다.
- 듀얼부팅 경험이 없었고, 16.04버전으로 설치하려고 했지만 오류 → 20.04버전 설치
- SDK Component 설치 시 IP주소를 잘못 입력함
- Yolov5 환경을 pip으로 설치 → GPU 사용 불가
- 우분투 20.04버전에서는 JetPack 5점대 버전만 설치가 가능했고, 5점대 버전에서는 arm코어를 사용하는 PyTorch가 정상적으로 설치가 되지 않음 → 우분투 18.04버전으로 재설치, JetPack 4점대 버전으로 재설치
크게 보면 위에 기술한 4가지 이유 때문인 것 같다. 그래도 우여곡절 끝에 해결했고, 벌써 8월말 개강이다..? 분명히 8월 1일부터 진행했던 내용같은데 개강이다. 더 힘내야겠다ㅋㅋ 아무튼 진짜 끝!!!
📌 참고
[1] https://github.com/matplotlib/matplotlib/issues/19250
[2] https://www.youtube.com/watch?v=8nHZKTkYACc
[3] https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-11-now-available/72048