import boto3 source_bucket = "source-bucket" source_key = "path/to/source/file.ext" destination_bucket = "destination-bucket" destination_key = "path/to/destination/file.ext" # AWS authentification info session = boto3.Session( aws_access_key_id="YOUR_ACCESS_KEY", aws_secret_access_key="YOUR_SECRET_ACCESS_KEY", region_name="YOUR_REGION" ) # Create S3 client object s3 = session.client("s3") # Cop..
import boto3 source_bucket = "source-bucket" source_key = "path/to/source/file.ext" destination_bucket = "destination-bucket" destination_key = "path/to/destination/file.ext" # AWS 인증 정보 설정 session = boto3.Session( aws_access_key_id="YOUR_ACCESS_KEY", aws_secret_access_key="YOUR_SECRET_ACCESS_KEY", region_name="YOUR_REGION" ) # S3 클라이언트 생성 s3 = session.client("s3") # 파일 복사 copy_source = {"Bucket..
Openvino 는 입력의 동적 변환을 (가능하다면)허용하기 때문에 별도로 dynamic input 을 가진 모델을 생성할 필요가 없습니다. 예를 들어 1x3x256x256 의 input 을 가진 모델이더라도, 1x3x512x512 의 입력을 사용하여 inference 할 수 있습니다. 참고자료 https://docs.openvino.ai/2023.0/ovms_docs_dynamic_shape_custom_node.html https://docs.openvino.ai/2023.0/openvino_docs_OV_UG_ShapeInference.html
TensorRT Command-Line Wrapper(trtexec) 를 사용하여 dynamic input shape 를 가진 trt model file 을 만들어야 했습니다. trtexec config 에 아래 세개의 config 를 추가하면 원하는 trt engine 파일을 생성할 수 있습니다. --minShapes: Build with dynamic shapes using a profile with the min shapes provided --optShapes: Build with dynamic shapes using a profile with the opt shapes provided --maxShapes: Build with dynamic shapes using a profile with th..
File "lib/sqlalchemy/cyextension/resultproxy.pyx", line 16, in sqlalchemy.cyextension.resultproxy.BaseRow.__init__ File "lib/sqlalchemy/cyextension/resultproxy.pyx", line 73, in sqlalchemy.cyextension.resultproxy._apply_processors File "/usr/local/lib/python3.10/site-packages/sqlalchemy/sql/sqltypes.py", line 2722, in process return json_deserializer(value) File "/usr/local/lib/python3.10/json/_..
Supported for default input shape(NCHW or NHWC) order for each DL frameworks N: Batch size C: Channel of input H: Height of input W: Width ONNX: NCHW TensorRT: NCHW, NHWC Tensorflow Lite: NCHW, NHWC OpenVino: NCHW Tensorflow Keras: NCHW, NHWC Tensorflow saved_model(pb): NCHW, NHWC
terminal 에서 docker hub login 시에 아래와 같은 에러메세지가 출력되면서 로그인에 실패하였다. Error response from daemon: Get https://registry-1.docker.io/v2/: toomanyrequests: too many failed login attempts for username or IP address 해결책은 두가지인데, 1. 조금 기다렸다가 재로그인을 시도해본다. 다른 선임 연구원분의 조언을 통해 이 방법으로 해결하였다. 잦은 로그인 시도시에 에러가 발생하는 경우가 있다. docker hub team 계정의 비밀번호를 변경 후 여러 서버에서 docker login 을 했었는데, 이 경우에 해당하는 것 같다. 얼마나 기다려야 하는지는 정확하..
combbobox의 값에 따라서 dynamic하게 row를 생성합니다. 생성된 row에서 선택된 파일들이 각각 다르게 사용될 수 있기 때문에 button, label, entry는 별도로 생성합니다. import tkinter import tkinter.ttk from tkinter import filedialog main_category=[ "Car", "Animal" ] window = tkinter.Tk() window.title("tkinter Test") window.geometry() window.resizable(0,0) row_order=2 title_column=0 label_column=1 button_column=2 def get_category(eventObject): if cate..
combobox(drop down) 의 값에 따라서 다음 combobox의 옵션 값을 동적으로 만들고자 합니다. import tkinter import tkinter.ttk main_category=[ "Car", "Animal" ] car_list=[ "BMW", "AUDI", "HYUNDAI", ] animal_list=[ "cat", "dog" ] window = tkinter.Tk() window.title("tkinter Test") window.geometry() window.resizable(0,0) def get_category(eventObject): # eventObejct 자리에는 아무 값이나 들어가도 괜찮습니다. if category_combobox.get()=="Car": sub_..
github action 을 통해서 pr, merge, push 등의 이벤트가 발생했을 때 특정 동작을 수행할 수 있다. unit test, linting 같은 기능들을 push, pr 같은 이벤트에 사용해서 자동화하는 경우가 많다. 내 경우 개발 상황과 개발 테스트용 서버의 docker image 간에 sync 가 맞지 않는 것을 방지하기 위해 github action 을 통해서 docker image 를 자동으로 build, push 하도록 하였다. github action 을 추가하는 방법은 두가지가 있는데, 첫번째는 github repo 의 Actions 메뉴에서 New workflow를 클릭하여 docker, aws 등이 제공하는 workflow 스크립트를 가져와 수정하여 사용하는 방법이 있고,..
Error: fatal: repository 'https://github.com/{Repo name}.git/' not found Error: fatal: clone of 'https://github.com/{Repo name}.git' into submodule path '/home/runner/work/{My repo name}/{My repo name}/{Repo name}' failed Failed to clone '{Repo name}'. Retry scheduled Cloning into '/home/runner/work/{My repo name}/{My repo name}/{Repo name}'... remote: Repository not found. Error: fatal: reposit..
소액으로 돈을 빌려주고 돌려받지 못하는 경우가 왕왕 있습니다. 보통은 법을 잘 모르고 절차가 복잡하다고 생각해서 그냥 넘어갈 수 있지만, 처음부터 갚을 생각 없이 돈을 빌려간 경우를 겪어서 너무 화가 나서 참을 수 없다면 다음과 같은 절차를 통해 돌려받으실 수 있습니다. 일반적으로 이런 상황에 처한다면 경찰서, 법무사, 변호사를 찾아갈 것 같지만, 대한법률구조공단을 통해 도움을 받는 것이 가장 좋습니다. 본인의 소득이 높을 경우 대한법률구조공단의 도움을 못 받으실 수도 있습니다. 하지만 민사 소액사건의 절차는 어렵지 않고 본인이 직접할 수도 있습니다. 직접하는 경우 또한 작성했습니다. 1. 경찰서 - 큰 도움을 받을 수 없습니다. 2. 법무사 - 소액일 경우 배보다 배꼽이 더 큽니다. 3. 변호사 - 법..
원인 커널 모듈에 올라간 드라이버 버전과 클라이언트에서 사용하는 라이브러리 버전이 다른 경우 발생함. 문제 확인 dmesg 를 사용해서 커널 로그를 확인합니다.[1] 로그를 보면 버전이 일치하지 않는다는 메세지를 확인할 수 있습니다. $ dmesg|grep -i nvrm [1539409.084595] NVRM: API mismatch: the client has the version 515.76, but NVRM: this kernel module has the version 515.48.07. Please NVRM: make sure that this kernel module and all NVIDIA driver NVRM: components have the same version. apt or ap..
아래 메세지와 함께 docker login 이 되지 않는 현상이 발생함. ** Message: 07:30:10.098: Remote error from secret service: org.freedesktop.Secret.Error.IsLocked: Cannot create an item in a locked collection Error saving credentials: error storing credentials - err: exit status 1, out: `Cannot create an item in a locked collection` 해결 ~/.docker/config.json 파일을 열어서 아래 내용을 입력한다, 아래의 키 값을 삭제해버리는 것으로 해결하는 경우도 있다. { "creds..
서버실 이동 서버실 이동을 하면서 준비했던 내용을 정리한다. 개요 현 서버실의 계약 종료를 앞두고 새로운 서버 임치 공간이 필요 IDC colocation, 기존 캠퍼스내 서버실 계약 연장, 사무실 직접 운영 등의 옵션이 논의됨 서버실 운영 및 전력 비용이 가장 저렴한 캠퍼스내 서버실 공간 개조로 진행하기로 함 플랜 1. 캠퍼스 공간 사용 가능 여부 컨펌(창업센터 담당자를 통해) 1) 캠퍼스 내 어떤 공간을 활용할 수 있는지 확인 2) 해당 공간 연장 심사 진행 일정을 확인 * 00월 00일 까지 * 재심사 일정: 0월 중에 안내 올 예정 * 공사 등에 대한 승인 여부 메일로 받을 예정 3) 전력 공사 가능 여부 확인 - 00전력 * 주소, E-MAIL, TEL 2. 서버실 공사 진행 1) 방음, 전력,..
프로그램을 백그라운드에서 실행시키기 위해 tmux를 사용하는 경우가 있습니다. 도커를 사용해서 실행하면 똑같이 백그라운드에서 돌아가는 것 처럼 동작시킬 수 있긴 하지만, 이미 tmux를 사용해서 돌아가고 있는 서비스를 도커로 변경하는데 리소스가 많이 필요한 경우가 종종 있습니다. 그런데 tmux를 자주 사용하지 않다 보니 사용법과 단축키를 자주 까먹게 되네요. tmux는 고맙게도 windows와 mac 모두 단축키가 동일합니다. 자주 사용하는 것들만 정리합니다. 기본적인 tmux 사용 방법 1. 세션 생성 # tmux new -s ${session_name} tmux new -s 0 2. 생성된 tmux session 위에서 코드를 실행 3. 세션 나가기(detach) ctrl+b -> d (ctrl+b..
서비스가 지속되다 보면 기능 수정/추가가 반복되면서 코드 베이스가 점점 커지기 때문에, 종국에는 하나의 버튼을 추가하는데 한달이 걸리는 상황이 오는 경우가 있습니다. 개발 복잡도는 계속 끌어내리지 않으면 기하급수적으로 증가하게 되기 때문입니다. 이런 상황이 되면 서비스를 개발하는 것이 매우 어렵게 되는데, 그래서 애자일을 언급하는 글들에서 "지속가능한 개발", "주기적인 Refactoring"이 등장한다고 생각됩니다. 이상적인 프로세스 제가 생각하는 이상적인 개발 방법론은 다음과 같습니다. 1. 애자일 프로세스 안에서 모듈별 설계를 먼저 잡아 큰 그림을 그린다. 2. 각 모듈의 역할을 명확히(구체화) 한다. 3. 모듈별 설계들을 작은 작업 단위로 잘게 나눈다. 4. 작업 단위별 인터페이스"만" 만든 뒤,..
결혼준비를 하다 보면, 이쪽 일은 그다지 관심이 없던 인생을 살았기 때문에 많은 남자들이 ‘왜 이런 걸 준비해야 하지?’ 라는 생각과 함께 고통에 몸부림치는 경우가 많은 것 같습니다. 저와 같은 공감 능력 제로형의 남편들을 위해서 로봇의 시각으로 결혼식 준비 기록을 남겨봅니다. 1. 촬영지 선정 결혼을 준비하게 되면 많은 것들을 선택해야 합니다. 여자친구는 사진 욕심이 좀 있는 편인데 가성비도 중요한 편이라서 고민을 많이 했습니다. 웨딩 스냅촬영은 야외 촬영, 스튜디오 촬영을 하는데, 사유지로 야외 촬영지를 가지고 있어서 다른 팀 눈치를 보지 않고 찍을 수 있는 업체도 있고, 저희처럼 제주도에서 야외 촬영하는 경우에는 촬영지에서 줄을 서서 기다리는 경우도 있습니다. 풀 패키지 스튜디오의 장점은 상대적으로..
DBeaver를 사용해서 Amazon RDS를 local로 복사(dump, 혹은 가져오기)합니다. DB에 schema를 선택 -> 우클릭 -> 도구 -> Dump database를 클릭합니다. Export할 테이블을 선택합니다. 좌측 하단의 "Local Client ..." 를 클릭하고, 새로 열린 창에서 드랍다운 박스를 연 뒤, "열기 ..." 를 클릭합니다. 데이터베이스 클라이언트가 설치되어 있는 위치를 "홈 추가" 를 해야 합니다. "홈 추가"를 누르고 경로를 추가합니다. "홈 추가"를 누르면 경로를 탐색하게 되는데, "shift + command + g" 단축키를 누르고 경로를 입력해줍니다. 저는 homebrew를 통해 mariadb를 설치했기 때문에, "/opt/homebrew/bin" 을 추가..
mariadb를 실행합니다. root@MacBookAir var % mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 6 Server version: 10.7.3-MariaDB Homebrew Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement. MariaDB [(none)]> 현재 db 현황을 확인합니다. MariaDB [(none)]> show databases; +---..
M1 맥북에 MariaDB, MySQL를 설치하려고 하니 시행착오를 많이 겪었습니다. MySQL 설치 과정을 정리합니다.(MariaDB) 이 글을 보시는 분들이 바로 사용할 수 있도록 터미널 결과를 복사해서 글을 작성했습니다. 1. homebrew의 install 커맨드로 설치합니다. root@MacBookAir / % brew install mysql ==> Auto-updated Homebrew! Updated 1 tap (homebrew/core). ==> Updated Formulae Updated 59 formulae. ==> Downloading https://ghcr.io/v2/homebrew/core/mysql/manifests/8.0.29 Already downloaded: /Users/..
M1 맥북에 MariaDB, MySQL를 설치하려고 하니 시행착오를 많이 겪었습니다. MariaDB 부터 과정을 정리합니다.(MySQL은 다른 글에) 이 글을 보시는 분들이 바로 사용할 수 있도록 터미널 결과를 복사해서 글을 작성했습니다. 1. homebrew의 install 커맨드로 설치합니다. root@MacBookAir / % brew install mariadb ==> Homebrew is run entirely by unpaid volunteers. Please consider donating: https://github.com/Homebrew/brew#donations ==> Auto-updated Homebrew! Updated 1 tap (homebrew/core). ==> Updated ..
github action으로 docker image를 build하는 과정에서, repo에 포함되어 있는 submodule의 update가 자동으로 되지 않는 현상을 발견하였다. 이를 github action의 workflow를 수정하여 해결하였다. 아래 steps에 "with" 하위 항목을 추가하면 된다. jobs: build-and-push: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: submodules: recursive
개발을 진행하다 import를 사용자의 입력에 따라 동적으로 사용하고 싶은 경우가 생겼습니다. 파이썬에서 동적 import 하는 방법을 공부했고, 정리하고자 합니다. * 모듈(module)은 클래스, 함수, 변수등을 저장한 파일, 패키지(package)는 여러 모듈을 묶은 것입니다. 1. Python에서 import 하는 방법들 2. importlib을 사용하는 동적 import 3. __import__()를 사용하는 동적 import 4. getattr을 사용하는 동적 import 1. 일반적으로 Python에서 import 하는 방법들 파이썬에서 모듈이나 패키지를 import 할 때는 보편적으로 아래처럼 하게 됩니다. import pkg import pkg.mod from pkg import mod,..
Requests 는 파이썬에서 HTTP를 사용하기 위해 쓰여지는 라이브러리로, 기본 내장 라이브러리는 아니지만 거의 표준처럼 널리 쓰이고 있다. 개발 과정에서 많이 쓸법한 내용들만 뽑아서 정리했다. 이 글에 정리되지 않은 headers, cookies 등 작성하지 않은 내용은 링크를 참조바람. https://docs.python-requests.org/en/master/user/quickstart/ Quickstart — Requests 2.25.1 documentation Eager to get started? This page gives a good introduction in how to get started with Requests. Let’s get started with some simple ..
Abstract DNN 모델을 모바일 디바이스 위에 deploy 하기 위해 경량화를 하는 시도들이 이미 많이 연구되었다. 이 논문에서는 DNN 모델 자체보다는 Input resolution을 동적으로 조절하여 정확도는 떨어뜨리지 않으며 평균 FLOPs를 낮추는 시도를 하였다. 이를 위해 저자는 RP(Resolution predictor) 를 사용하는 DRNet(Dynamic resolution network)를 제안한다. Idea 같은 DNN 모델이더라도 이미지에 따라 정확히 prediction 하기 위해 필요한 resolution 은 다를 수 있다는 것에서 이 연구가 시작되었다. Fig 1. 을 보면 전경과 배경이 잘 구분되는 panda 같은 이미지는 작은 resolution으로 모델에 입력해도 (co..
삶에 도움이 되는 꿀팁들을 저장하기 위해 퍼옵니다. 언젠가 써먹을 일이 있을지 몰라서 퍼오는 것이고, 정확하지 않은 내용이 있을 수 있습니다. 가장 좋은 것은 전문 변호인에게 상담하여 대처하는 것입니다. 사고가 나면 증거자료를 확보해야 합니다. 요새 CCTV가 여기저기 깔려있고, 경찰에서 교통관제하는 CCTV도 있습니다. 운전자들이 경찰에게 그걸 달라고 하면 경찰은 거의 대부분 안 준다고 하는 경우가 많습니다. 사유? 개인정보 보호 때문에 CCTV에 다른 사람도 찍혀 있어서 초상권 및 기타 권리가 침해된다고 달라고 해도 무조건 안된다고만 말하고 안주는 경우가 있습니다. 무조건 안될까? 거짓말. "정보공개청구" 라는 제도가 있습니다. 공공기관이 접수, 생산한 정보중 국민이 청구하면 기관은 원칙적으로 정보를..
멀티 프로세싱을 활용하면 여러 작업을 별도의 프로세스를 생성 후 병렬처리해서 더 빠르게 결과를 얻을 수 있다. 멀티 프로세싱을 잘 활용하면 멀티코어의 CPU 장점을 잘 살릴 수 있지만, 병렬 프로그래밍의 이해 없이 코드를 작성하면 싱글 프로세스보다 더 느린 경우나, 예상하지 못한 결과가 나올 수 있으니 프로세스, 쓰레드에 대한 이해가 필요하다. * 멀티 프로세싱은 메모리 사용률이 높아지는 단점이 있다. Process 생성 import os from multiprocessing import Process num = 42 def f(name): global num num += 1 print('pid of parent:', os.getppid()) print('pid of %s : %d' %(name, os...