본문 바로가기

딥러닝 공부

Pytorch를 위한 Jetson nano OS 설치 및 환경설정_2 pytorch 설치

jetson nano에서는 python3.6을 디폴트로 설치해놔서 다른 버전의 파이썬을 설치하여 사용하려면 똥꼬쇼를 해야 다른 버전의 파이썬을 사용할 수 있고, 심지어는 다른 버전의 파이썬에 패키지를 설치해주려면 pip3를 그냥은 사용할 수 없고, --target으로 설치를 원하는 파이썬 버전의 패키지 디렉토리를 쥐어줘야 다른 패키지를 설치할 수 있다... 씨발롬들

아무튼 한 3-4일 정도 삽질을 오지게 한 결과 한 방에 설치할 수 있는 방법을 찾았다. 그것도 30분 미만의 시간으로 씨발

 

https://pytorch.org/blog/running-pytorch-models-on-jetson-nano/

 

Running PyTorch Models on Jetson Nano

Overview NVIDIA Jetson Nano, part of the Jetson family of products or Jetson modules, is a small yet powerful Linux (Ubuntu) based embedded computer with 2/4GB GPU. With it, you can run many PyTorch models efficiently. This document summarizes our experien

pytorch.org

 

위 홈페이지는 Pytorch에서 제공하는 jetson nano에서 Pytorch를 사용하기 위한 방법을 알려주는 내용이다. 

제목엔 Running Pytorch라 나와있지만, 라이브러리 동작시키려면 당연히 설치가 우선되야 한다...

 

심지어 위 글에는 무려 3가지 방법이나 설명해주고 있다. 맘에 드는 방법으로 Pytorch를 설치해주면 되겠다.(개인적으로 3번째 방법은 별로 추천하지 않는다. 내가 3일 동안 삽질한 방법이기 때문에!)    ---> 첫 번째 방법은 docker 환경을 사용하여 torch를 구동하는 방법이었다. 마지막 방법을 하는게 맞았다...

 

조금 조심할게 3번째 방법에서 wheel 파일을 가져올 때 torch 1.8이랑 torch 1.9를 같이 가져오는데 하나라도 없으면 torch 설치가 안 되는듯 하다. 후에 install 할 때 1.9를 install하고 깔리는건 torch 1.8 버전이다. 왜 이런진 모르겠지만 그냥 받아드리기로 한다.

 

docker 환경에서 torch를 import 할 때의 화면

 

 

3번째 방법을 통해 설치가 완료됐을 때

 

 

아래는 내가 Pytorch 설치를 위해서 삽질한 내용의 일부이다! 혹시 필요한 사람이 있을 수 있으니 내용을 남겨두겠다.

 


 Jetson nano에 Python3.8 이상 버전 설치 방법

 

본 글에선 Pytorch 사용을 위한 python3.8 이상의 버전을 설치하는 내용을 다루려 합니다!

단! jetson nano는 python3.6을 디폴트 파이썬으로 사용하고, pip3 같은 패키지 관리 툴도 python3.6에 묶여있어 쉽게 사용이 어렵기 때문에 상당히 귀찮아 질 수 있음을 경고한

우선 리눅스 패키지를 업데이트시켜줍시다

sudo apt update
sudo apt upgrade

업데이트가 완료되면 파이썬 설치에 앞서 필요한 패키지를 설치해 줍니다.

sudo apt install build-essential libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev libffi-dev libc6-dev

위 패키지들의 설치하는 이유는 다음과 같다

더보기
  • build-essential : C와 C++ 개발에 필요한 기본 라이브러리와 헤더파일 등을 갖고 있다. 근데, 왜 python을 설치하는데 C와 C++ 얘기가 나오느냐? 우리는 python 설치를 위해서 C로 작성된 파일을 받아 해당 파일을 통해서 python을 설치하고자 하기 때문에, 해당 패키지가 필요하다.
  • libssl-dev : python을 바이너리만 바로 설치하게 되면 간혹 SSL 관련 라이브러리 문제로 pip 사용이 안 될 때가 있다고 한다. SSL 관련 라이브러리 문제라면 암호화나 인코딩 관련 문제 때문인듯 한데, 더 명확한 이유는 찾아도 보이지가 않는다...
  • zlib1g-dev : debian 공식 문서엔 다음과 같이 나와있다. " zlib is a library implementing the deflate compression method found in gzip and PKZIP. This package includes the development support files." 

      아마 압축 파일과 관련된 내용을 다루는데 필요한 패키지인 듯하다.

  • libcurses5-dev : 이 패키지를 검색하면 libncurses-dev의 변환 패키지라고 하고, libncurses-dev는 ncurses를 위한 개발자 라이브러리라고 한다... 그럼 ncurses는 뭐냐 터미널 상에서 GUI를 구현하기 위한 라이브러리라고 한다... 뭐 대충 GUI 때문에 만든 패키지 같은데, 정작 여기서 하는 일이 뭔지는 잘 모르겠다...
  • libncursesw5-dev : libncurses5-dev와 비슷한 libncurses-dev의 변환 패키지. 
  • libreadline-dev : Ubutu 홈페이지에는 해당 패키지를 GNU readline, 히스토리 라이브러리, 개발 파일들이라고 설명하고 있다. 솔직히 무슨 말인지 잘 이해는 안 되는데, 다른 내용을 찾아보니 리눅스에서 사용하는 텍스트 편집기의 기능을 cpp 소스 상에서 사용하기 위한 라이브러리로 이해하면 될 듯 하다. 
  • libsqlite3-dev : SQL 데이터베이스 엔진을 구현하기 위한 라이브러리이다. 왜 파이썬을 설치하는데 SQL 데이터베이스가 필요하냐 하면 나도 잘 모르겠다. debian 홈페이지의 설명에서는 해당 패키지에는 헤더파일과 정적 라이브러리가 함께 포함되어있는데, python 홈페이지에도 필요 라이브러리 관련 내용이 안 나와있어서 정확한 이유는 모르겠다.
  • libgdbm-dev : GNU dbm(gdbm)을 위한 패키지이며, gdbm은 확장가능한 해싱과 UNIX의 스탠다드 dbm 함수와 유사하게 동작하는 데이터베이스 함수 라이브러리이다. 앞의 libsqlite3-dev와 함께 사용이 되는 듯 하다.
  • libbz2-dev : debian의 설명엔 고품질의 블록 정령 파일 컴프레서 라이브러리라고 설명되어있다. bzip2 컴프레서 라이브러리를 포함하는 정적 라이브러리라고 한다. 우리는 python 홈페이지를 통해 python*.tar를 다운받아 사용할 예정인데, 해당 라이브러리를 비슷하게 사용하는 듯 하다.(압축을 해제할 때는 tar를 사용하는데, 해당 라이브러리를 사용하는지는 확실하지 않다...)
  • libxpat1-dev : XML을 파싱하는 C 라이브러리. make 시 형상 파일을 읽을 때 사용하는 것으로 추측된다.
  • liblzma-dev : XZ-format을 위한 컴프레셔 라이브러리. 위의 libbz2-dev와 유사한 기능이라고 생각해볼 수 있겠다.
  • libffi-dev : 외부 함수 인터페이스 라이브러리(Foreign Function interface). 여기서 외부 함수 인터페이스란 서로 다른 두 언어 끼리 서로의 함수를 호출할 수 있게  해주는 인터페이스이다. sourceware에 나와있는 libffi의 설명을 보자면, 아마 libffi를 통해 호출한 함수를 기계어 수준에서 처리하는 방식으로 타 언어의 함수를 호출하는 듯 하다(' The libffi library really only provides the lowest, machine dependent layer of a fully featured foreign function interface.' 라는 본문의 내용을 의역한 것이라 틀릴 수 있음. 정확한 건 sourceware를 확인바람)
  • libc6-dev : 이름에서부터 느낌을 받을 수 있듯이, 표준 C 라이브러리를 사용하여 컴파일하고 링크하는데 필요한 것들을 포함하는 패키지. (여러번 말했듯, 우리는 c파일을 make하여 python을 설치할 예정이므로 이러한 표준 c 라이브러리를 포함하는 패키지가 필요하다.)

 

필요한 패키지를 설치하였다면, python설치에 필요한 소스를 받아보자.

 

우선 python 홈페이지에서 제공하는 tar 파일을 다운받자.

https://www.python.org/

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

 

파이썬 공식 홈페이지에 들어가면 상단 메뉴바에 Downloads를 볼 수 있다. 필자는 가장 최신의 버전을 원해서 3.12를 설치할 예정이다. 자신의 필요에 맞는 버전을 찾아보자. (Pytorch 공식 홈페이지에서는 가장 최신의 Pytorch 버전을 사용하려면 최소 3.8 이상의 python 버전을 필요로 한다고 나와있다.)

 

 

위의 source code에 들어가면 여러 버전이 주르륵 나와있다. 상대가 많다고 쫄지말자 그냥 비슷한 놈들이 서있을 뿐이다.

 

그럼 원하는 버전을 찾아서 해당 버전 하단의 "Download Gzipped ... " 혹은 "Download XZ ..."라고 되어있는 놈을 우클릭하여 링크 주소를 복사하자. 앞서 설치한 패키지들을 확인하여 알 수 있지만, 우리는 뭘 다운받더라도 압축해제가 가능하다!

 

그러면 "https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz"처럼 Python-(version).tgz파일 혹은 ~.tar.xz파일을 얻을 수 있다.

 

tar -xf Python-3.12.1.tar.xz #혹은
tar -xf Python-3.12.1.tgz

이후
cd Python-3.12.1

 

압축해제 후 생성된 폴더로 이동하여 

./configure --enable-optimizations
make -j4

 

 

./configure --enable-optimizations를 입력하면 python을 설치하기 위해 필요한 라이브러리들의 설치 유무를 확인하고 Makefile을 작성해 준다.  --enable-optimizations 옵션을 사용하여 PGO(Pprofile guided optimizations)와 LTO(Link Time Opimization)을 사용하게 한다. 기본적으로 두 옵션을 통해 무거운 최적화를 빌드과정에서 조금 더 시간을 쓰게 하지만, 상당한 속도 향상을 제공한다고 한다.

 

더보기

--enable-optimizations와 관련하여 내용을 좀 찾아봤는데, 실질적인 동작 과정이나 그 내용까지 파악하려면 상당히 깊숙이 들어가야 하나보다. 

https://stackoverflow.com/questions/41405728/what-does-enable-optimizations-do-while-compiling-python

 

what does --enable-optimizations do while compiling python?

I'm trying to compile Python 3.6 on an arm based Linux machine, ./configure outputs this: If you want a release build with all optimizations active (LTO, PGO, etc), please run ./configure --e...

stackoverflow.com

위 내용은 --enable-optimizations이 뭘 하는지 물어본 사람의 질문인데, 답변의 내용을 다 살펴보고 따로 찾아봐도 제대로 내용을 이해하기가 힘들었다... 대충 파악한건 LTO는 object 파일 관련된 내용인 듯한데... 본문을 읽어봐도 이해할 수 없는 내용이 태반이라 일단은 그냥 넘어가고자 한다... 능력이 있는 분이면 이해한 내용 설명 좀 부탁드립니다...

 

어찌 되었든 위 내용을 따라 make까지 완료되면, 

#기존에 링크되어 있는 python을 살리고싶다면
sudo make altinstall

#그냥 앞으로도 새로 설치한 python을 사용할 예정이라면
sudo make install

※대부분의 사용자에서 python 버전을 옮겨가며 개발을 할 사람은 거의 웬만하면 없다고 생각되서 
  그냥 두번째 방법을 사용하는 걸 추천합니다.

 

위 make까지 완료되었다면 python 설치 완료!

 

python3.12 -V

혹은

python -V

를 통해 설치된 파이썬 버전 확인이 된다면 마무리!

※ 파이썬 버전이 바뀌질 않아서 추가로 작성

정확한 이유는 모르겠지만 파이썬 3.12를 설치했는데도, 젯슨 나노의 디폴트 파이썬 버전이 바뀌질 않아서 열심히 개고생함;

python3.12 -m venv (가상환경이름)
source (가상환경이름)/bin/activate

위 내용으로 가상환경을 통해 python3.12 버전을 사용했음. 

왜인지는 모르겠는데 위 내용을 실행하니까 정상적으로 python3.12 버전이 실행됨...

사실 도중에 이것저것 환경변수도 좀 건드린게 있긴 한데, 도대체 어떤거 때문에 되고 어떤거 때문에 안 됐던건지 알지를 못 하겠다... 

정확한 이유를 아시는 분이 있으면 말씀 좀 부탁드립니다...