미래의 나를 위한 코딩 테스트 준비과정

목표는 백준 플레티넘 5이고 이 정도 만들어놓으면 나중에 필요할 때 감만 다시 익히면 될거라고 생각했다. 백준 단계별 풀기 에 있는 문제들을 풀면서 정리했다. 자료구조 스택, 큐, 덱 # 스택 stack = [] stack.append(1) if stack: stack.pop() # 1 # 큐 from collections import deque q = deque([1, 2]) q.append(3) q.popleft() # 1 # 데크(dequeue) from collections import deque q = deque([1, 2]) q.append(3) ㄹ # stack q.pop() # 3 # queue q.popleft() # 1 우선순위큐 우선순위 큐는 가중치가 가장 큰 값을 우선으로 pop 하는 자료구조이다. 힙 구조를 사용하는데 이 때 push하거나, pop하는 과정에서 시간복잡도가 $O(logN)$이 소요된다. 힙(Heap) 은 우선순위 큐를 구현하기 위해 사용하는 자료구조 중 하나로 이진 탐색 트리의 형태로 구현되어 있으며 최소 힙과 최대 힙이 있다. 최소 힙은 부모 노드가 자식 노드보다 작거나 같은 값을 가지며 트리의 루트 노드에 최소값이 위치한다. 최대 힙은 부모 노드가 자식 노드보다 크거나 같은 값을 가지며 트리의 루트 노드에 최대값이 위치한다. ...

July 25, 2024 · 18 min

LlamaIndex로 구현한 RAG, 성능평가는 어떻게할까?

수많은 RAG 모듈들의 조합으로 수많은 RAG 파이프라인이 생성될 수 있고 각 작업 도메인과 데이터 셋에 따라 최적의 RAG 파이프라인은 모두 다르다. (RAG 파이프라인의 수를 간단하게 계산해보자.) 심지어 prompt를 바꾸거나, LLM을 바꾸거나, 임베딩을 바꿀 때마다 기존 성능보다 더 좋아졌는지 나빠졌는지는 알 수 없다. 우리가 개발을 할 때도 테스트 코드를 짜듯이 RAG 파이프라인을 구성할 때도 테스트는 꼭 필요하다. 아니 오히려 LLM의 블랙박스적인 특징을 고려해 테스트의 중요성은 더 중요하다. 일반적으로 개발할 때 TDD라는 개발 방법론이 있는 것처럼 RAG를 개발할 때도 Evaluation Driven Development(EDD)라는 방법론을 도입하여 개발할 수 있다. RAG 서베이 논문 2편에 대해 Q&A를 할 수 있는 여러 RAG 파이프라인을 만들고 이들을 평가하기 위해 synthetic dataset을 만들어 가장 최적의 RAG 파이프라인을 선택하도록 할 것이다. 이를 구현하기 위해 블로그 의 내용을 참고하여 테스트 해보았다. 관련 코드는 github repo 에 올려두었다. ...

May 31, 2024 · 7 min

전자기학부터 머신러닝까지 Computer Science 공부하기

학교에서 배웠던 EECS 전공 과목들을 gihub repo 에 따로 정리했다. 아직 비어있는 내용이 좀 있는데 조금씩 추가하고 있다. 진작에 정리 좀 잘해둘걸…

April 23, 2024 · 1 min

Full stack deeplearning LLMOps 정리

블로그로 정리하기에는 양이 많아서 github 에 따로 올려두었다.

March 14, 2024 · 1 min

최신 데이터 인프라 이해하기

긱뉴스의 최신 데이터 인프라 이해하기 영상이 데이터 인프라에 대한 전체적인 그림을 잡기에 좋은 내용들이 많아 정리해보고자 한다. 해당 영상은 A16Z에서 발행한 Emerging Architectures for Modern Data Infrastructure 글을 바탕으로 만들어졌다. 기본 개념과 단어 설명 아래 그림에 나오는 단어들을 전부 이해하는 것을 목표로 해보자. 그림을 간단히 요약하면 데이터 인프라 아키텍처는 크게 Sources, Ingestion and Transformation, Storage, Historical, Predictive, Output으로 구분할 수 있다. Sources에는 OTLP로 사용중인 AWS Aurora, 일자별로 RDS의 스냅샷 이 저장되어있는 S3, API 로그나 검색 서비스를 위해 사용하는 Elasticsearch 등이 모두 포함된다. 그리고 Ingestion and Transformation에는 ETL을 지원하여 데이터 파이프라인을 만들도록 도와주는 서비스들이 포함되어있다. 데이터를 추출해서 변환하고 어떤 곳에 적재하는 과정에서는 단순히 postgresql에 쿼리를 결과를 날린 후에 다른 곳에 저장하면 되지 않냐라고 할 수 있는데, 1억건 정도의 데이터도 한번에 조회하면 RDS의 메모리 사용량이 튀면서 쿼리가 지연되거나 실패하는 경우가 종종있다. 그래서 이러한 대용량의 데이터는 분산하여 처리하는 것이 중요한데 대표적으로 Hadoop이나 Spark를 사용한다. 그리고 특정 주기마다 workflow를 스케줄링 하기 위해 대표적으로 Airflow를 사용하고 반대로 실시간 데이터처리를 위해 Kafka나 AWS kinesis를 사용한다. 이런 처리를 한번 이상 거친 데이터들은 데이터 웨어하우스나 데이터레이크에 쌓이게되고 분석에 사용된다. ...

May 22, 2021 · 11 min