전체 글 109

[NLP/LLM] LLM 캐시의 작동 원리를 알아보고 OpenAI API로 캐시를 구현해보자

LLM CacheLLM 캐시는 LLM의 응답을 저장하고 재사용하는 시스템이다.즉, 같은 질문 (프롬프트)에 대한 답변을 매번 새로 생성하지 않고 이전에 생성된 결과를 캐싱하여 빠르게 응답할 수 있도록 하는 기술이다.상업용 API를 사용하거나 직접 모델을 서빙해 LLM을 추론할 수 있는데, 두 가지 모두 추론을 가능한 한 줄이는 것이 자원이나 비용 측면에서 효율적이라고 할 수 있다. LLM Cache를 왜 사용할까?(1) 비용 절감OPENAI API 같은 유료 LLM 서비스를 사용할 때, 같은 질문을 반복하면 불필요한 비용이 발생한다.캐싱을 이용하면 중복 호출을 방지하고 API 사용량을 줄일 수 있다.(2) 속도 향상LLM은 복잡한 연산을 수행하기 때문에 응답 시간이 길어질 수 있다.캐싱을 이용하면 즉시 ..

Deep Learning/NLP 2025.02.27

[NLP/LLM] RAG(Retrieval Augumented Generation)에 대해 알아보고 라마 인덱스로 구현해보자

RAG (Retrieval Augumented Generation, 검색 증강 생성) ChatGPT가 없는 사실이나 거짓말을 그렇듯하게 만들어내는 현상을 환각(Hallucination)이라고 한다.환각을 줄이기 위해 LLM이 답변할 때 필요한 정보를 프롬프트에 함께 전달하는 검색 증강 생성(Retrieval Augumented Generation)을 사용할 수 있다. Data Source에서 검색하고자하는 데이터를 가져와 Embedding Model을 통해 Embedding Vector로 만들고 Vector Database에 저장하는 과정을 검색 증강 생성이라고 한다. LLM에게 단순한 질문이나 요청만 전달하고 생성하는 것이 아니라, 답변에 필요한 충분한 정보와 맥락을 제공하고 답변하는 방식이다.답변에 ..

Deep Learning/NLP 2025.02.26

[Transformers] Hungging Face Transformers 라이브러리를 통해 모델 학습하기 (feat. Trainer API vs. PyTorch)

Hugging Face Transformers허깅페이스 트랜스포머는 다양한 형태의 트랜스포머 모델을 통일된 인터페이스에서 사용할 수 있도록 지원하는 오픈 소스 라이브러리이다.허깅페이스에서는 트랜스포머 모델과 토크나이저를 활용할 때 사용하는 transformers 라이브러리, 원하는 데이터셋을 가져다 쓸 수 있도록 하는 datasets 라이브러리를 제공한다. - BERT와 GPT-2 모델을 활용하기 위한 허깅페이스 트랜스포머 코드 from transformers import AutoModel, AutoTokenizertext = "What's the goal of transformer models?"# BERTbert_model = AutoModel.from_pretrained("bert-base-unca..

Deep Learning 2025.02.25

[Opensearch] Opensearch 개념 정리

OpensearchOpensearch는 AWS가 Elasticsearch 7.10을 기반으로 fork한 검색 및 분석 엔진이다.기본적으로 대량의 데이터를 저장, 검색, 분석하는 데 사용되며, 분산 검색 엔진 기능을 제공한다.https://opensearch.org/ OpenSearchOpenSearch is a community-driven, Apache 2.0-licensed open source search and analytics suite that makes it easy to ingest, search, visualize, and analyze data.opensearch.org 주요 특징- Elasticsearch와 호환 -> 기본적인 API 및 사용법이 유사하다.- 100% 오픈 소스 -> ..

[Python] copy와 deepcopy의 차이

copy & deepcopycopy와 deepcopy는 파이썬의 copy 모듈에서 제공하는 두 가지 복사 방법이다.두 개의 차이를 이해하기 위해서는 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)에 대해 알아야한다! 얕은 복사 (copy.copy())객체를 새롭게 생성하지만, 내부의 요소들은 원본 객체와 같은 참조를 가진다.즉, 최상위 객체 (바깥쪽 객체)는 새롭게 생성되지만, 내부의 요소 (하위 객체들)는 원본 객체와 같은 주소를 공유하게 된다. import copylist1 = [[1, 2, 3], [4, 5, 6]]list2 = copy.copy(list1)list2[0][0] = 100 # 내부 요소를 변경print(list1)print(list2)list2를 copy.copy..

Language/Python 2025.02.10

[Python] ContextManager의 개념

ContextManagercontextmanager는 파이썬의 ContextManager 프로토콜을 구현하는 기능으로, with 문을 사용할 때 리소스 (자원)의 획득 및 해제를 자동화하는 역할을 한다.예시로, 파일 입출력, 데이터베이스 연결, 네트워크 소켓 사용 등에서 활용된다. contextmanager는 __enter__와 __exit__ 메서드를 구현하여 특정 코드 블록이 실행되는 동안 필요한 리소스를 설정하고, 블록이 끝나면 자동으로 해제하는 구조를 제공한다. - 파일을 읽고 파일을 자동으로 닫는 예제with open("file_txt", "r") as f: content = f.read() # 파일을 읽는 부분# with 블록을 벗어나면 파일이 자동으로 닫힌다 ContextManager Dec..

Language/Python 2025.02.10

[FastAPI] FastAPI에서 Decorator 사용하기

FastAPI는 Python 웹 프레임워크로, 비동기 지원과 높은 성능을 제공하는 것이 특징이다. FastAPI에서는 Decorator를 사용해 라우팅, 요청 처리, 미들웨어 적용을 간단하게 할 수 있다! FastAPI에서 Decorator의 역할FastAPI에서 Decorator는 주로 라우팅을 설정하는 데 사용된다.@app.get() Decorator를 사용해 특정 URL을 처리하는 함수를 정의할 수 있다. from fastapi import FastAPIapp = FastAPI()@app.get("/")def test(): return {"message": "Hello, FastAPI!"} 위 코드를 main.py에 저장 후 아래 명령어로 실행한다.uvicorn main:app --reload 브라..

Backend/FastAPI 2025.02.10

[Python] Python Decorator 개념과 활용

Python DecoratorPython Decorator는 기존 함수를 수정하지 않고, 기능을 추가하거나 수정할 수 있는 기능을 말한다.재사용성과 확장성을 가진 것이 특징이다!직접 Decorator 패턴을 구현할 수 있지만, Python에서는 표현적 구문과 기능을 제공함으로써 Decorator 구현을 쉽게 할 수있도록 한다. 함수의 특징1. 함수를 변수에 대입할 수 있다.# 함수를 변수에 할당해보자def greeting(name): return f"Hello, {name}!" say_hello = greeting # 함수 객체를 변수에 대입하기print(say_hello("Seora")) 2. 함수 내부에 다른 함수를 정의할 수 있다.def outer_function(): def inner_fun..

Language/Python 2025.02.10

[Elasticsearch] 논문 검색 엔진 구현 프로젝트 (Elasticsearch + Airflow + FastAPI) (4)

GitHub Actions 활용한 CI/CD 구축어떤 프로젝트던지 최소한의 마무리는 CI/CD 구축이라고 생각하는 사람이다... 1. .gitignore 파일 작성# Python 관련__pycache__/*.pyc*.pyo*.pyd*.sqlite3# 가상 환경 (venv)venv/.env*.env# 로그 및 임시 파일*.log*.out*.pid.DS_Store*.swp# Docker 관련*.tar*.imgdocker-compose.override.yml# IDE 및 에디터 설정.vscode/.idea/*.iml# Airflow 관련 (데이터베이스 및 캐시)airflow/airflow.cfgairflow/unittests.cfgairflow/logs/airflow/tmp/airflow_db/# Elasti..

[Elasticsearch] 논문 검색 엔진 구현 프로젝트 (Elasticsearch + Airflow + FastAPI) (3)

UI 개발 (feat. Streamlit)개발을 진행하면서 CMD로 요청을 보내고 응답을 받는 과정이 번거롭고, 가독성도 좋지 않아서 간단한 UI를 개발했다.스택은 streamlit을 활용했다.(react를 써보고 싶었으나, 시간적 이슈로 인해 간단한 방법을 선택했다.. react는 추후 포스팅할 프로젝트에서 다룰 예정이다.. ㅎ) streamlit 또한 컨테이너로 만들어서 다른 서비스와 함께 도커 컴포즈로 개발할 것이다.프로젝트 구조는 다음과 같다. Dockerfile (Streamlit)FROM python:3.9WORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .CMD ["streaml..