본문 바로가기

전체 글

(12)
pymysql upsert 쿼리문 우아하게 작성하기 1. 문제정의 Pymysql 라이브러리를 활용하여 upsert하는 query string을 작성 시, 반복되는 부분도 많고, 문법 오류가 종종 발생함. 좀 더 체계적으로 작성하고자 하여 Class 형태로 구현 2. 해결방향 make_qv 함수를 통해 query, value를 통일된 포멧으로 작성하고 ON DUPLICATE KEY를 이용해 Upsert 코드를 작성 3. 코드 class Create_Queries: def __init__(self): pass # self.tb_nm = tb_nm # self.upd_lst = upd_lst def make_qv(self, upd_lst:list): # query q_lst = ', '.join(upd_lst) # update value v_upd = "" f..
코호트 분석을 위한 주문 간격이 짧은 중복 데이터 전처리 1. 문제정의 - E-커머스에서 고객이 여러 건의 주문을 한다. - 고객의 여러 주문 건 중 N일(예시) 내 주문 건은 하나의 주문으로 통합하고 싶다. 2. 해결방향 (한줄요약) - 1차원 Array끼리 timestamp 차이를 구하고, np.where로 짧은 부분은 제외시킴 3. 고민한 것들 - 방법은 정말 여러가지가 있을 수 있지만, NumPy를 써서 속도를 향상시킴. - df.query 보단 boolean mask를 써서 속도를 향상시킴. 4. 코드 # 이전 날짜와 비교하는 함수 정의 def make_real_order_date_r(tmp): # 1) before date 만들기 before_date = tmp['order_date'].to_numpy() ### timestamp -> np.date..
[ssh] 터널링하여 DB 접속 - 2 1. 문제 정의 터널링 후 pymysql을 통해 여러개의 execution을 실행하고자 하였는데, tunnel이 닫혔다는(already closed) 오류 메시지를 확인. 혹은 connection이 종료되었다는 오류 메시지 확인 airflow를 활용하는 경우에도 여러 건의 execution을 동시에 처리하는 경우 처리가 필요 2. 해결 방향 1) python스러운 with절을 활용하지 않고, 순서에 따라 작성하였고, tunnel 생성 → conn 생성 → cur 생성 이후 아래와 같이 역순으로 종료하여야 문제가 없음 2) try, except 구문으로 rollback 기능까지 포함 tunnel 생성(시작) ㄴ tunnel 시작 ㄴ conn 생성 (시작) ㄴ cursor 생성(시작) ㄴ 하위에서 메인코드 ..
[airflow] 구축기 - 1 회사에서 airflow를 구축하고 있다. 구축한 뒤, 흩어져있는 cron 작업들을 통합하여 관리하고자 한다. airflow의 장점은 뭐 너무 많으니 별도로 언급하지 않고, 굳이 단점을 꼽자면, SPOF로 동작하기 때문에 지속적인 관리가 필요하다는 점과 회사 입장에서는 Airflow를 다룰 수 있는 인력이 필요하다는 점 정도일 것이다. 0. 도입 배경 - 사실, 아직 회사의 규모가 작기 때문에 굳이 Data work-flow에 대한 Orchastration 툴이 필요한지에 대한 의구심이 있었다. - 회사에서는 현재 웹서비스를 EKS 위에서 돌리고 있고, 쿠버네티스를 쓰고 있으므로 Airflow (on k8s)를 도입하는 것이 자연스러운 것이라고 생각했다. - 데이터 중심적인 문화를 가져가기 위해선 이러한 ..
[deploy] blue-green 배포 구현 아주 간단하게 구현해 본 blue-green 배포에 관한 기록임. kubernetes 없이, 아주 단순하게 aws ec2에 from scratch하게 구현 Server Side 작업은 처음이라 여러가지 시행착오가 있었고, 이를 기록하고 공유하기 위해 글을 남깁니다. 0. 상황 - python django(WAS), nginx(웹서버), gunicorn(미들웨어) 으로 아주 간단한 사이트를 구현함 - docker-compose를 통해 nginx image(공식), django image를 동시에 올림 - AWS code deploy, code pipeline을 bitbucket과 연결하여 git push하면 자동으로 서버에 배포가 되도록 구현 1. 하고 싶었던 것 - 말그대로 "무중단 CI/CD"를 구현하..
[wandb] multi-gpu log tracking 1. 문제 확인 - 단일 gpu에서 학습하면서 wandb를 이용하는 경우, 아무런 문제 없이 loss trcking이 가능했음. - 다중 gpu를 사용하여 DistributedDataParallel(DDP) 분산 처리를 하는 경우, 1) wandb 오류가 발생하거나, 2) 중복되어 tracking이 됨 2. 해결 방법 - wandb 공식 도큐먼트를 보면, 이를 해결할 수 있는 두가지 방법을 제안하고 있고, 그 중 비교적 단순한 One Process 방식을 채택하여 문제를 해결함. https://docs.wandb.ai/guides/track/advanced/distributed-training - 각 epoch을 돌면서 학습을 진행할 때, acc와 loss를 계산하고 이를 wandb로 logging하는 ..
[docker] context 오류 해결 방법 1. 오류 발생 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 2. 원인 서치 - 꽤 많은 서치 과정이 그렇지만, Greedy Search와 Hill-climbing Search의 반복과정이다. 위 오류 문구를 열심히 구글링해보고, 가장 그럴듯한 해결책을 대입해보고 해결 되면 ok! 안되면 다음 해결방법으로 - 그러나 이러한 방법은 당연하게도 Optimality를 보장하지는 않는다. - 실제 구글링 결과, 대부분의 문제 해결 방법은 systemctl start docker 였는데, 필자의 경우 docker service가 정지된 것이 아니고, context가 꼬여있는 문제 였음..
[tensorboard] 외부에서 tensorboard 접속 외부에서 학습 상태를 확인하는 방법은 여러가지가 있겠지만, 가장 많이 쓰이는 방법 중 하나인 ssh -NfL 을 이용하는 방법에 대해 설명 1. 접속 방법 학습 진행 중, 학습이 진행되는 머신(딥러닝 서버 등)에서 tensorboard 0.0.0.0:6006 서버 열어둠 필자는 tmux를 주로 활용하여, 새로운 tmux 열고 tensorboard 웹서버를 띄움 접속하고자 하는 PC(로컬)에서 ssh -NfL을 이용하여 위 0.0.0.0:6006에 연결 아래 명령어는 해석해보면, ssh를 이용해 Sever로 접속하고, Server Side의 0.0.0.0:6006 주소(tensorboard 웹서버)와 Local의 localhost:8898 주소를 연결한다. ssh -NfL localhost:8898:0.0..