높이맵 하나에서 출력 가능한 솔리드까지 공개 DEM 데이터는 결국 2차원 실수 배열이다. (rows, cols) 격자에 미터 단위 고도가 들어 있다. 이걸 화면에 띄우는 것과 3D 프린터로 뽑는 것 사이에는 생각보다 큰 간극이 있다. 슬라이서는 닫힌 다양체(watertight manifold) 만 받는다. 면이 하나라도 열려 있거나 법선이 뒤집혀 있...
엔진을 바꿀 때마다 코드를 다시 짜지 않으려면 같은 모델을 ONNX Runtime으로도 돌려보고 TensorRT로도 돌려보게 되는 일이 반복된다. 매번 새 실행 파일을 만들면 두 결과를 비교할 수 없다. 전처리가 미묘하게 다르고, 반복 횟수가 다르고, 워밍업을 뺀 쪽과 안 뺀 쪽이 섞인다. 그래서 엔진을 런타임 인자로 받고 나머지는 전부 고정하는 ...
매번 검색하게 되는 것들 학습 서버를 몇 대 운영하다 보면 같은 문제를 주기적으로 다시 만난다. 그때마다 검색하는 게 싫어서 정리해 둔 것들이다. apt lock이 걸렸을 때 E: Could not get lock /var/lib/dpkg/lock-frontend 대부분은 백그라운드에서 unattended-upgrades가 돌고 있는 것이다....
왜 학습 기록을 따로 남겨야 하는가 모델이 하나일 때는 로그 파일과 체크포인트 디렉터리 이름만으로 버틴다. 문제는 두 달 뒤다. best_v3_final_2.pth가 어떤 하이퍼파라미터로, 어떤 데이터셋 버전에서, 어떤 코드 커밋으로 학습됐는지 아무도 모른다. 그 모델이 지금 서비스에 올라가 있으면 더 곤란해진다. 필요한 최소 구성은 두 가지다. ...
학습 작업을 손으로 배분하는 것의 한계 GPU 서버가 세 대쯤 되면 누가 어느 서버를 쓰는지 메신저로 조율하게 된다. 서버가 늘거나 사람이 늘면 이 방식은 곧 무너진다. 학습 작업을 파드로 던지고 스케줄러가 빈 GPU를 찾아 배치하게 만드는 편이 결국 더 싸게 먹힌다. 구성은 마스터 1대 + 워커 3대다. 마스터는 GPU가 없어도 되고 메모리도 적...
모델이 느린 게 아니었다 Jetson 계열 보드에 검출 모델을 올리고 fps를 재면 처음에는 숫자 하나만 본다. 그런데 같은 모델, 같은 엔진으로 두 보드에서 잰 값이 이랬다. 보드 입력 데이터셋 관측 fps Nano USB 카메라 (YUY...
카메라 스트림을 어떤 방식으로 보낼 것인가 카메라 여러 대를 붙여 추론 서버로 보내는 구성을 만들 때마다 같은 질문으로 돌아온다. 어떤 전송 방식을 쓸 것인가. 선택지는 크게 셋인데, 각각 잃는 것이 다르다. 방식 지연 손실 다중 수신 쓰는 곳 ...
Symbolic link in Ubuntu Create symbolic link ln -s <TARGET> <LINK_NAME> Ex) libexample.so.3.1.0 파일에 대한 심볼릭 링크로 libexample.so 를 생성하고함 ln -s libexample.so.3.1.0...
Make tar file module with Python 작성 개요 작업 공간 내에 여러 파일을 압출 할 경우 Python glob 모듈을 사용하여 여러 폴더를 각자 폴더명에 맞게 tar 압축 진행 Script filename.tar import tarfile import os from glob import glob from tqdm impor...
Python unzip module with 한글 작성 개요 Open dataset를 다운받아 사용할 때 여러개의 zip 파일이 존재할 경우 압축 해제하는게 번거롭다. 데스크탑과 같이 화면이 출력되는 경우에는 불편함이 없지만, 서버에서 작업할 경우 일일이 unzip을 해야하는 것 같아 그냥 python module을 작성하여 사용했다. unzi...