Knowhow 105

ubuntu 간 ssh 원격 연결하기

원격 업무 ubuntu PC로 본다면 사실 상 ssh는 필수다. 터미널만 있으면 작업이 가능한데다, vscode가 remote docker container에도 붙을 수 있기 때문에 GUI 작업도 ssh로 붙을 수만 있으면 ubuntu 원격은 쉽다. 그런데 매번 설정할 때마다 간단한 듯 하면서도 자잘한 오류나 삽질을 많이 해서 한 번 정리해두고자 한다. Server, Client 공통으로 할 일 ssh가 기본이니 ssh는 설치가 당연히 되어있어야 한다. sudo apt update sudo apt install ssh sudo service ssh start service ssh status 아래와 같이 active (running) 상태로 보이면 정상적으로 설치되고 동작하고 있는 것이다. Issue 간..

Knowhow/Linux 2024.02.14

CMakeLists.txt 작성 팁 1

기본적으로 작성하면서 꼭 이해해야 될 것 같다고 생각한 내용들을 적어두고, 나중에 복붙하기 편하게 정리해두고자 한다. 1) C 버전 지정 if (NOT CMAKE_C_STANDARD) set(CMAKE_C_STANDARD 99) endif() 웬만하면 최신 99 사용하면 된다. 2) C++ 버전 지정 if (NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 20) endif() C++부터는 버전을 좀 봐야 함. 98, 11, 14, 17, 20, 23, 26 존재함. 대충 20쓰는 것 좋을 듯함. 3) compile option 지정 if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_com..

CMakeLists.txt 팩토링

${ROOT} |-app | |-CMakeLists.txt (3) |-core | |-CMakeLists.txt (2) |-CMakeLists.txt (1) 모든 코드가 CMakeLists.txt 파일 하나로 정리되지는 않는다. 가능은 하다만 팩토링 측면에서 너무 길고 지저분해지므로 권장되는 방식이 아니다. 보통 C++ 프로젝트를 작성할 때 위와 같이 나누곤 하는데 최소 3개로 나누어서 사용한다. CMakeLists.txt (1) (1)의 경우, 프로젝트 전체를 한 번에 build할 때 사용되는 CMakeList로써 큰 설정들만 들어간다. find_package : 프로젝트 전체에 걸쳐 쓰일 것 cmake_module : find_package 실패에 대비한 FindXXX.cmake 파일 추가 pkg_s..

Linux에서 원하는 파일 찾기

find . -name "FILE_NAME" -type f find . -name "DIRECTORY_NAME -type d find . -empty find . -name "FILE_NAME" -delete Linux에서 파일 경로 찾는 일이 생각보다 빈번한데 root 위치에서 find 커맨드를 이용하면 손쉽게 찾을 수 있다. 자주쓰는 flag는 다음과 같다. -name : 이름을 적으면 된다. prefix* 혹은 *postfix 형태로 전체 찾기가 유용하다. -type : d는 디렉토리, f는 파일을 의미한다. 찾고자 하는 대상 타입에 따라 지정해두면 리스트를 줄일 수 있다. -empty : 정리하는 과정에서 비어있는 디렉토리나 파일을 찾기 쉽다. -delete : 앞선 조건에 맞는 파일들을 직접 지..

Knowhow/Linux 2024.01.29

DockerFile로 효율적으로 이미지 빌드하기 (w/ tip)

DockerFile이 있을 때, 다음과 같이 한줄을 입력하면 도커 이미지를 빌드할 수 있다. docker build -t IMAGE_NAME:TAG . 여기서 IMAGE_NAME에 해당하는 부분은 말그대로 이미지 입력을 넣으면 되고, TAG 부분에는 버전 관리용으로 사용할 이름을 넣으면 된다. 지정하지 않을 시 :latest 가 기본값으로 들어간다.  Tip. DockerFile을 여러개로 나누어서 사용하는 방법DockerFile로 이미지를 빌드할 때, 이미지가 무거워질수록 빌드가 부담스러워진다. 한 번만 빌드하고 끝난다면 아무 상관없지만 혹 개발 단계에서 이것저것 여러번 변경하면서 빌드를 시도한다면 빌드 시간이 길어지므로 불편함이 커진다. 예를 들어, OpenCV, Ceres 등 묵직한 라이브러리들을 ..

Knowhow/Docker 2024.01.29

[TensorRT 튜토리얼] 5. torch2trt

TensorRT를 사용하는 것은 어렵다. 아무리 ONNX, python API의 도움을 받아도 직접 conversion, deployment를 깔끔하게 해내긴 어렵다. https://github.com/NVIDIA-AI-IOT/torch2trt GitHub - NVIDIA-AI-IOT/torch2trt: An easy to use PyTorch to TensorRT converter An easy to use PyTorch to TensorRT converter. Contribute to NVIDIA-AI-IOT/torch2trt development by creating an account on GitHub. github.com torch2trt는 TensorRT 사용을 고민하는 사람들이 가장 흔하게 ..

[TensorRT 튜토리얼] 4. How TensorRT works

구현된 방식 TensorRT API는 class-based다. "class를 wrapping하는 class" 이런 식으로 전부 class로 구현되어 있다. 최상위 class (e.g. builder, runtime)가 존재하고 하위 class들이 member를 구성하고 있으며, 최상위 객체가 호출하면서 사용하는 방식이다. 그러므로 실제로 코드는 최상위 class (builder, runtime)에 단 2가지에 의해 동작하는 모양이다. 따라서 최상위 class를 먼저 생성하는 것으로 시작하고 최상위 class를 지우면서 종료된다. 구체적으로 최상위 클래스는 conversion 과정에서는 Builder, deployment 과정에서는 Runtime이 존재한다. Logging and error handling..

[TensorRT 튜토리얼] 3-2. TRT engine deployment (TBU)

ONNX를 거쳐 TRT engine으로 변환이 완료된 모델을 실제로 사용하는 방법이다. .trt 확장자로 저장된 파일을 열어 inferece하는 방법으로 각각 TensorRT python API, c++ API를 통해 python/c++ 코드 내에서 동작시킬 수 있다. Deplying to python API document 보면 onnx_helper 내 ONNXClassifierWrapper로 예제가 적혀있는데 이건 오로지 예제를 위한 것이다. imagenet classification에 맞추어진 것이라고 보면 됨. Pytorch to TensorRT through ONNX 튜토리얼 글을 참고하는 것이 옳다. import time import torch import numpy as np import t..

[TensorRT 튜토리얼] 3-1. ONNX/TRT engine conversion

이전 2. TensorRT ecosystem 글에서 설명한 바와 같이 TensorRT는 conversion/deployment로 나뉘며 그 중 더 중요하다고 볼 수 있는 conversion to trt engine 과정은 1) TF-TRT 2) ONNX 총 2가지 방식으로 나뉜다. 1) TF-TRT 방식의 경우, pytorch 사용자가 더 많으니 스킵하고, ONNX를 이용한 conversion/deployment 과정만 document를 따라가보려고 한다. ONNX가 tensorflow도 지원을 하니 굳이 TF-TRT부터 배울 필요는 더욱 없는 것 같으니, 이 글에서는 conversion만 정리해본다. Prerequisite pip install onnx # necessary pip install tf2..

[TensorRT 튜토리얼] 3. TensorRT ecosystem

큰 그림 그리기 TensorRT는 engine이라고 부르는 optimized representation으로 모델을 변환하는 것과 engine을 deploy하여 실제 디바이스에서 동작시키는 두 가지 과정으로 구성되어 있으며, 이 두 가지 과정을 끝마쳤을 때 경량화했다고 할 수 있겠다. 전체 흐름도는 위와 같다. 모델 선정 batch size 고정 precision 설정 (quantization) 모델 변환 모델 배포 3) precision 설정은 layer 별로 혹은 전체에서 몇 bit 쓸 건지 결정하는 과정이다. 일괄적으로 낮추는 것이 기본 세팅이지만 성능 하락 문제가 동반되므로 layer 마다 다른 설정을 두는 것이 좋다. 그럴 경우, quantization 분야로 넘어가는 영역이 된다. 세부 그림 그..