Data Engineering (11) 썸네일형 리스트형 [DB] 벡터 DB: Milvus 사용 후기 프로젝트를 하는 중 shape matching 과정 중에 벡터 검색이 필요한데, 이를 빠르게 해야 할 필요가 있었다. 그 중 고민이 되었던 것이 벡터 DB의 선정 과정이었다. 따라서 PostgreSQL의 pgvector 익스텐션과 Milvus의 사용 둘 중 하나를 고민했다(사실 엄밀히 말하면 그 정도의 대규모 데이터는 필요하지 않지만 나름대로 고려해보았다) 1. 충분한 래퍼런스를 찾을 수 있는가?- Milvus는 커뮤니티가 크다.- pgvector 또한 커뮤니티가 크다(한국어 자료가 많다). pgvector > Milvus (1 : 0) 2. 확장 가능성- Milvus는 클러스터 단위로 확장이 가능하고, Query 노드와 Index 노드, 데이터 노드 등을 따로 확장시킬 수 있다.- pgvector는 .. [세션발표] 티끌모아 GPU, GCP에서 GPU 모델 서빙하기(RetroFest 2024 후기) 2024년 말, GDG on Campus 가천대, 경희대, 한국외대 챕터에서 감사하게도 2024 RetroFest 행사를 열어주어 세션 Speaker로 참석하였다. RetroFest 2024: Back to the Future, 미래를 위한 돌아보기 | Festa!Festa에서 당신이 찾는 이벤트를 만나보세요.festa.ioSpeaker 선정기:세션 Speaker를 모집하고 있었을 때, 한 번쯤 기술 세션 발표를 진행하고 싶었기에 바로 어떤 것을 주제로 할 지 생각해봤다. 이 중에서 올해 기술적으로 가장 가치가 있었던 경험을 곰곰히 생각해본 결과, 내게는 이전에 삽질하면서 느꼈던 "클라우드 환경에서의 GPU 사용기"가 가장 힘들었지만 보람이 있었던 경험이었던 것 같아 선정하였다. 아래 포스팅을 참고하.. [MSA] terraform으로 GKE Autopilot 배포하기 이전에 포스팅에서 언급한 gRPC 코드를 GKE 환경에 Terraform으로 배포하였다. https://ket0825.tistory.com/12 [gRPC] Go코드와 함께하는 gRPC1. 관련 개념Static Linking: 정적 링킹 프로그래밍 언어가 컴파일링 과정 중에 코드가 기계어 (OBJ) 파일로 변환되고, 링킹 과정에서 사용하는 라이브러리를 합쳐 같이 실행 파일을 만드는 과정. 따ket0825.tistory.com 시스템 아키텍처는 아래와 같다 이러한 시스템을 구현하기 위하여 쿠버네티스를 사용하였다. 쿠버네티스쿠버네티스(Kubernetes, k8s)는 클러스터 환경에서 노드를 관리하고, 컨테이너를 배포하기 위한 컨테이너 오케스트레이션 오픈소스 플랫폼이다. 내부 내용이 매우 방대하고 복잡하.. [HTTP/2] HTTP/2 개념과 실습코드 HTTP/1.1의 문제점HTTP/1.1은 설계 자체가 논문을 주고 받기 위해 탄생한 기술이다. 따라서, html, css, js, 작은 사진 파일을 받기 위한 것이지, 큰 정보를 주고 받기 위해 탄생한 것이 아니다! 따라서 생겨난 단점이 존재한다. 1. HTTP/1.1 layer 상에서의 Head-of-Line Blocking 문제Head-of-Line Blocking: Client가 보내는 페이로드에 대해 서버 측에서 보내는 페이로드가 와야 client가 다음 페이로드를 보낼 수 있기에 Client는 그 동안 새로운 요청을 보내지 못하고 기다려야 하는 문제이다. 2. 헤더가 중복되는 경우가 많고, 헤더가 기본적으로 너무 크다. 3. 페이로드가 5개로 분할이 되는 큰 요청이 먼저 오고, 작은 요청들이 뒤.. [gRPC] Go코드와 함께하는 gRPC 1. 관련 개념Static Linking: 정적 링킹 프로그래밍 언어가 컴파일링 과정 중에 코드가 기계어 (OBJ) 파일로 변환되고, 링킹 과정에서 사용하는 라이브러리를 합쳐 같이 실행 파일을 만드는 과정. 따라서 실행 파일에 코드와 라이브러리가 모두 합쳐져 있어 용량이 크다. Dynamic linking: 동적 링킹.실행 파일안에 라이브러리 코드가 복사되는 것이 아니라, 메모리 공간에 올라가서 필요할 때 실행 파일이 여러 프로그램이 공유하여 사용하는 방식. 실행 파일 안에 소스 코드만 존재하고, 동적 라이브러리는 따로 존재하여 실행 파일 자체의 크기가 작다. 실행 시에도 한번에 모든 동적 라이브러리를 메모리에 로드하지 않고, 필요할 때 메모리에 로드하니 상대적으로 적은 메모리를 사용한다. 단, 호환성.. [GCP] 티끌모아 GPU, 구글 클라우드에서의 GPU 모델 서빙기 (feat. BATCH) 문제점: 대부분의 CSP는 GPU 부족 상태H100 기준으로 2023에 GCP는 약 5만 여대의 GPU를 확보한 것으로 추정된다고 합니다. 리드타임이 거의 1년이므로, 아직 수요에 비하면 GPU 공급이 따라오지 못하는 실정입니다. 저같은 경우는 적어도 제가 사용하는 T4 GPU는 부족한 것을 몸소 느끼는 중입니다(asia-northeast3 한국 기준). 이로 인해 비용 효율적인 SPOT 형태의 Provisioning은 어렵습니다. 그렇지만 제가 GPU로 모델 서빙에 필요한 작업은 near real time이고, 주기적으로 inference를 하면 되기에 Cron 형태의 작업을 실행하면 됩니다.따라서 GCP의 Job as Service 인 Batch를 선택하였습니다. Batch는 결국 GCE 기반이기에.. [DB] 프로파일링과 쿼리 분석 (feat: MySQL) 안녕하세요. 이번 글은 아래와 같은 클라우드 아키텍처로 서비스를 배포하는 과정 중 생긴 일입니다. BERT 모델을 Cloud Run으로 배포한 이후, 추론한 결과를 Flask와 SQLAlchemy를 이용하여 BATCH UPSERT로 처리하는 중이었습니다. 그런데, CPU 사용량에 과부하가 와 서버가 터지고, DB에 데이터 삽입에 너무 오랜 시간이 걸렸습니다. 따라서 문제점을 여러 곳을 진단하다 아래와 같이 문제를 해결했습니다. (문제점 진단은 이후에 제대로 포스팅을 하겠습니다) 1. 프로파일링 배웠던 @contextmanager 문법으로 cpu와 메모리 tracking을 로컬에서 진행하였습니다. [Python] 클로저, 데코레이터, wraps, contextmanager안녕하세요. 오늘은 클로저와 .. [HTTP] Request와 Response 패킷 파헤치기 Flask에서 request를 받는 데에 단순 파싱만 해왔는데, 실제로 서버는 어떤 request를 받는지 궁금하여 조사했습니다.1. Postman으로 request를 보냈을 때 2. 웹브라우저에서 접속했을 때 두 가지 경우로 나누어 봤습니다. 모든 자료는 MDN의 공식 문서를 활용하였습니다. https://developer.mozilla.org/en-US/docs/Web/HTTP HTTP | MDNHypertext Transfer Protocol (HTTP) is an application-layer protocol for transmitting hypermedia documents, such as HTML. It was designed for communication between web brows.. 이전 1 2 다음