전체 글 1294

LLM 파인튜닝 기법 LoRA에 대한 개념 이해

LoRA 파인튜닝 개념의 이해조대협 (http://bcho.tistory.com) LLM 모델에 대한 Fine tuning시에, 가장 기본적인 방법은 모델을 학습데이터로 새롭게 처음부터 학습하는 방법인데, 이 방법은 (GPU)비용이 너무 많이 들고 시간도 많이 걸린다. 그래서 대안으로 등장한것이 PEFT (Parameter-Efficient Fine-Tuning) 이라는 개념으로 , 원본 모델의 패러미터(Weight)값은 고정 시키고 작은 수의 파라미터만 훈련하거나 작은 모듈을 추가하여 학습 하는 방법으로, 과적합 (Overfitting)을 방지하고 연산량을 줄이 는 방식이다. AdapterPEFT 방법으로는 오늘 살펴볼 LoRA나 Adapter 등의 방식이 있다.Adapter 방식은 기존 모델 아키텍처..

로컬에서 LLM 모델을 실행하기 위한 Ollama, LMStudio

요즘 LLM이 유행하면서 로컬 환경에서 소형 LLM인 sLLM을 실행하는 경우가 많은데, sLLM은 종류도 많을뿐더라, 코드를 직접 실행하고, 런타임을 최적화하기가 매우 어렵다.이런 문제를 해결하기 위해서 sLLM을 손쉽게 실행할 수 있는 환경이 있는데, 가장 널리 사용되는 환경으로는 Ollama와 LMStudio가 있다.  Ollama는 아래와 같이 CLI환경에서 프롬프트를 입력할 수 있다. 또한, HTTP REST API를 제공하기 때문에 애플리케이션 개발에도 유용하게 사용할 수 있다.  개인적으로는 LMStudio를 좀 더 선호하는데, LMStudio는 아래와 같이 GUI 베이스로, 쳇봇 GUI를 지원하기 때문에 좀더 깔끔하게 사용할 수 있고, 히스토리 관리등이 가능하다.  맥북 PRO M1으로 실..

벡터 임베딩에서 단어간의 유사도를 판단하는 원리

조대협 (http://bcho.tistory.com) 자연어 처리(NLP)의 핵심 기술 중 하나인 단어 임베딩(Word Embedding), 그 중에서도 단어 간 유사도를 어떻게 파악하는지 그 원리를 깊이 있게 파헤쳐 보려고 한다.혹시 컴퓨터가 어떻게 단어의 의미를 이해하고, "고양이"와 "강아지"가 유사한 단어라는 것을 알아차리는지 궁금한 적 없는가? 그 비밀은 바로 단어 임베딩에 있다! 핵심 원리: "비슷한 동네에 사는 단어는 비슷한 친구다!"단어 임베딩의 핵심 아이디어는 아주 직관적이다. 바로 **"유사한 맥락에서 등장하는 단어는 유사한 의미를 가진다"**는 분포 가설(Distributional Hypothesis) 에 기반을 두고 있다. 쉽게 말해, 비슷한 문맥에서 자주 함께 등장하는 단어들은 의..

GTM에서 전체시장, 유효시장, 수익 시장 (TAM,SAM,SOM)의 개념

TAM, SAM, SOM은 GTM(Go-to-Market) 전략에서 시장 규모를 이해하고 타겟을 설정하는 데 사용되는 중요한 개념이다. 각각의 용어는 다음과 같은 의미를 가진다 1. TAM (Total Addressable Market)전체 시장 규모를 나타낸다.TAM은 제품이나 서비스가 전 세계에서 제공될 수 있을 때, 이론적으로 접근 가능한 시장의 최대 규모를 의미한다.이는 이상적인 상황을 가정하며, 모든 경쟁사를 배제하고 시장을 100% 점유했을 때 달성 가능한 매출 규모다.TAM을 산출하는 것은 제품이 가진 전체 잠재력을 이해하는 데 중요하다.예:스마트워치를 제조하는 회사라면, TAM은 전 세계 모든 스마트워치 사용자의 시장 규모이다.2. SAM (Serviceable Addressable Mar..

비지니스 2025.01.04

생성형 AI로 코드 품질을 높이는 방법

쓰레드에서 @choi.openai 라는 분이 LLM 모델로 코드를 생성할때, "LLM에게 "더 나은 코드를 작성해달라"고 반복적으로 요구하면 실제로 더 나은 코드를 생성할 수 있다는 결과가 나왔습니다."라는 이야기가 있어서 테스트를 해봤다. 이 내용의 원본은 https://minimaxir.com/2025/01/write-better-code/ 이다.  Gemini를 이용해서 다음과 같이 간단한 REST API를 FastAPI로 만드는 프롬프트를 작성하였다.Create the REST API code with fastAPI. - get request with HTTP POST. Input body has username,address,gender fields. - have proper error hand..

2024년 LLM 애플리케이션 아키텍쳐 및 2025년 전망

2024년 LLM 애플리케이션 아키텍쳐 및 2025년 전망조대협(http://bcho.tistory.com) Langchain은 LLM (ChatGPT등)을 이용하여 애플리케이션을 개발할 수 있는 프레임웍이다.Langchain은 LangSmith라는 이름으로 LLM 애플리케이션의 실행 내역을 추적할 수 있는 기능을 가지고 있는데, 이를 통해서 사용자들의 LLM Application의 구조를 예측할 수 있다.  이번에 2024년 Langchain의 사용량에 대한 리포트가 나왔는데, 이를 통해서 LLM application이 어떻게 변화하고 있는지를 유추해볼 수 있다.  블로그 소스 : https://blog.langchain.dev/langchain-state-of-ai-2024/?fbclid=IwZXh0..

GTM 전략 상세

GTM 전략조대협 (http://bcho.tistory.com) GTM(Go-To-Market) 전략은 기업이 새로운 제품이나 서비스를 시장에 성공적으로 출시하기 위한 종합적인 계획을 말한다. 목표 고객 정의, 가치 제안 및 개발, 판매 및 마케팅 방법 결정 등의 요소를 포함한다.아키텍처 디자인에서 GTM 전략의 의미비즈니스 방향과 시스템 아키텍처의 방향이 서로 일치되도록 한다.우선순위, 아키텍처 설계 원칙 등을 고려한다.경쟁사와 시장의 이해를 통하여 시스템 아키텍처에서 차별화점을 개발한다.비즈니스 단계에 따른 아키텍처 설계, 시스템 운용 방안, 개발 프로세스를 도출한다.비즈니스 KPI에 일치된 시스템 모니터링 기능을 설계한다.GTM 전략의 구성 요소GTM 전략은 다음과 같은 구성 요소로 이루어진다.문제..

RAG 성능 튜닝 - Embedding fine tuning

다른 아이디어로는 Embedding 모델을 파인튜닝 하는 방법이 있다. OSS 나 클라우드 제공 Embedding 모델은 범용 목적에 맞춰져 있기 때문에, 특정 서비스의 단어 도메인과 맞지 않는 경우가 많다. 그래서, 이를 그 도메인의 단어로 파인튜닝하게 되면 Embedding된 결과를 통해서 유사 문서 (질문에 대한 답변)을 찾는 정확도가 향상되기 때문에 결과적으로 RAG의 성능을 향상 시킬 수 있다.  구글의 경우 Gecko Embedding 모델에 대한 파인 튜닝을 지원한다. https://cloud.google.com/vertex-ai/generative-ai/docs/models/tune-embeddings 텍스트 임베딩 조정  |  Generative AI on Vertex AI  |  Goo..

Small to Big Chunking in RAG

RAG에서 Chunk 를 retrieval 할때, 그 Chunk의 위와 아랫부분을 확장해서 같이 리턴하는 방법으로, 더 상세한 컨택스트를 리턴할 수 있다. 언뜻 보면 Parent/Child Chunking 기법과 유사하기는 하지만, 구현이 간단해 보이고, 문장을 중심으로 확장해서 컨택스트를 추출한다는 면에서 훨씬 효과가 있어보인다.  출처 https://www.youtube.com/watch?v=TRjq7t2Ms5I

아키텍처 설계 온라인 강의 오픈합니다.

안녕하세요?조대협입니다. 그동안 실시간으로만 진행해왔던 대용량 아키텍처 설계 강의를 온라인으로 패스트 캠퍼스에서 오픈합니다.생성형 AI 시대가 되면서, 코딩은 이제 AI가 하게 되고, 그러면 엔지니어로써 살아남기 위해서는 무엇을 준비해야 할까 고민을 해보면, 실리콘 밸리에서는 자바나 안드로이드 엔지니어가 아니라 General Software engineer라는 역할을 뽑습니다.특정 언어나 기술에 대한 종속성이 있는 것이 아니라, 비즈니스 문제를 기술로써 해결하는 사람으로, 이런 엔지니어의 특징은 문제 해결능력, 비즈니스에 대한 이해, 설계 능력과 좋은 커뮤니케이션 능력을 가지고 있습니다.  그래서 이번 대용량 아키텍처 강의는 그동안의 노하우를 다시 정리해서 리부트 하였습니다1. GTM 기반의 비즈니스 전..

6. Pytorch - 대규모 분산학습에서 고려할 사항

대규모 분산 학습에서 고려할 사항조대협 (http://bcho.tistory.com) 그러면 실제로 분산 학습은 어떻게 이루어질까, 하나의 머신에서 여러 GPU를 사용하는 멀티 GPU의 경우에는 코드만 싱글 GPU 코드와 다르지 다른 설정은 다르지 않다. 그러나 멀티 머신 학습의 경우에는 각 머신에서 학습 코드를 실행해줘야 하고, 같은 데이터 소스로 부터 데이터를 각 머신에서 읽어와야 한다. 그렇다면 동시에 여러 머신에 학습 코드를 어떻게 실행할까?스케쥴러수동으로, 특정 서버에서 각각 학습 코드를 실행할 수 도 있지만, 보통 수십,수백개의 머신에서 하나의 학습만을 돌리는 일은 드물다. 중간 중간 실험을 위해서 작은 모델을 학습하기도 하고, 전체 머신들에서 하나의 거대 모델들을 돌리기도 한다.  만약 50..

5. 파이토치 - 분산 학습의 개념과 하드웨어

분산학습의 개념조대협 (http://bcho.tistory.com)분산 학습 개념분산학습이란, 모델이 커서 하나의 머신이나 장치(CPU,GPU) 에서 학습이 불가능할때, 모델을 여러개의 GPU나 또는 여러개의 머신으로 나눠서 학습을 하는 방법이다.분산 학습의 방법분산 학습 방법은 크게 모델 병렬화 (Tensor Parallelism), 데이터 병렬화 (Data Parallelism) 으로 분류 할 수 있다.   출처 https://uvadlc-notebooks.readthedocs.io/en/latest/tutorial_notebooks/scaling/JAX/tensor_parallel_simple.html 데이터 병렬화 : Distributed Data Parallelism (이하 DDP)라고 하는데,..

GTM 전략의 이해

GTM 전략의 이해조대협 (http://bcho.tistory.com)  IT 시스템은 기존의 비즈니스를 지원하거나 또는 IT 서비스 자체가 제품이 되는 경우인데, 이러한 IT 서비스를 설계하기 위해서는 개발하고자 하는 시스템이 제공하는 가치와 그 비즈니스를 이해해야 한다. 비즈니스의 이해가 없이, 비지니스에 활용되는 시스템을 설계 한다는 것은 전체 그림을 보지 못하면서 일부만을 이해하고 그 일부가 전체인 것처럼 이해하고 시스템을 구축하기 때문에, 좋은 시스템이 만들어질 수 없다. 비즈니스에서 제품/서비스를 기획하고, 이를 마케팅,판매하고 측정하는 일련의 계획을 GTM 전략이라고 한다. GTM 전략 GTM(Go-to-Market) 전략은 기업이 새로운 제품이나 서비스를 시장에 성공적으로 출시하고 판매하기..

비지니스 2024.09.03

파이토치 분산 학습 도구 비교

1. 개요torch.distributed.launch와 torchrun은 둘 다 PyTorch에서 분산 학습을 실행하기 위한 도구이다.torch.distributed.launch는 이전부터 사용되어 온 유틸리티이며, torchrun은 더 최근에 등장한 도구로 사용 편의성을 개선했다.2. 주요 차이점 torch.distributed.launchtorchrun사용 편의성--local_rank 인자를 수동으로 스크립트에 전달해야 함--local_rank 자동 처리기능 범위기본적인 분산 학습 실행 기능 제공torch.distributed.launch 기능 + 탄력성(elasticity), 오류 처리 등 추가 기능 제공오류 처리worker 실패 시 자동 재시작 기능 없음worker 실패 시 자동 재시작 기능 제공..

파이토치 4 - 쿠버네티스에서 학습하기

파이토치 모델을 학습을 하는데 여러 사람이 동시에 작업을 하거나 또는 학습이 멀티 GPU, 멀티 노드를 사용할 경우에는 한정된 GPU 자원을 어떻게 배치할지에 대한 어려움이 생긴다. 또한 파이토치 작업이 학습도중에 중단되거나 했을때 자동으로 학습을 재시작하는 것과 같은 자동화된 관리가 필요한데, 이런 문제를 해결하기 위해서 가장 보편적으로 사용되는 접근 방법이 쿠버네티스나 Slurm등이 될 수 있다.  향후에 멀티 머신 기반의 학습이나 Fault Torelent 아키텍처를 기반으로한 분산 모델 학습 방법에도 설명하겠지만, 이 글에서는 간단하게 모델을 쿠버네티스에서 학습할 수 있는 방법에 대해서 알아본다.  아래 코드는 파이토치 라이트닝을 이용하여 Fashion Mnist 데이터를 학습하는 간단한 DNN ..

파이토치 3. 파이토치라이트닝

파이토치 라이트닝 파이토치 라이트닝은 파이토치를 한번 더 추상화하는 프레임웍으로, 파이토치 코딩의 복잡도를 낮춰주는 프레임이다. 텐서플로우의 복잡도를 케라스로 잡아주는 느낌이라고 할까? 한번더 추상화하는 만큼, 약간의 성능저하가 발생한다.  아래와 같은 간단한 선형 회귀 모델이 있다고 하자.import osimport torchfrom torch import nnimport torch.nn.functional as Ffrom torch.utils.data import DataLoaderimport lightning as Lfrom torch.utils.data import TensorDataset# 데이터x_train = torch.FloatTensor([[1], [2], [3]])y_train = t..

파이토치 2. 선형회귀 (Linear Regression)을 통한 코드 구조 이해

파이토치의 모델 코드 구조를 이해해보자.먼저 가장 간단한 선형 회귀 모델 코드를 살펴보자. 아래는 전체 코드 블럭이다. 아래 코드는 "모두를 위한 딥러닝 시즌 2 파이토치 편"을 참고하였다. https://deeplearningzerotoall.github.io/season2/lec_pytorch.htmlimport matplotlib.pyplot as pltimport numpy as npimport torchimport torch.nn as nnimport torch.nn.functional as Fimport torch.optim as optim# 데이터x_train = torch.FloatTensor([[1], [2], [3]])y_train = torch.FloatTensor([[1], [2],..

Python yield

`yield`는 Python에서 generator를 만드는 데 사용되는 키워드다. `yield`를 사용하면 함수의 실행을 일시 중지하고 값을 반환한 다음, 호출자가 필요할 때 실행을 재개할 수 있다. 이 기능을 사용하면 메모리를 효율적으로 사용하면서 큰 데이터 스트림을 처리할 수 있다. 이를 설명하기 위해 주어진 예제를 살펴보자.def return_abc(): print("From return_abc") return list("ABC")def yield_abc(): i=0 for char in list("ABC"): yield(char) i +=1 print(str(i) + " From yield_abc")for ch in return_abc(): print("Calling re..

파이토치 1. 기본 자료형 텐서

파이토치는 기본 자료형으로 행렬을 표현하는 텐서라는 자료형을 사용한다.아래 코드는 간단하게 배열로 부터 텐서를 생성하고, 이를 곱하는 코드이다. 곱셈은 matmul 함수를 이용하거나 @ 를 이용할 수 있다. # Multiply Tensorsimport torcha = torch.tensor([[1,2],[3,4]])b = torch.tensor([[1],[1]])c = torch.matmul(a, b)print(c)print(a@b) GPU에 텐서 생성파이토치에서는 텐서를 생성할때 텐서가 저장되는 메모리를 지정할 수 있다. 일반적인 메모리나 또는 GPU가 있을 경우 GPU 메모리를 지정할 수 있다.아래 코드는 GPU가 있을 경우 텐서 a,b를 GPU에 저장하고 서로 곱한 결과를 출력하는 코드이다. # p..

LLM 애플리케이션 아키텍처 (1/2)

LLM 애플리케이션 아키텍처 (1/2) 조대협 (http://bcho.tistory.com) ChatGPT나, Gemini 모델과 같은 LLM 을 이용한 애플리케이션을 개발하는 형태를 보면, 보통 LLM에 프롬프트 엔지니어링을 사용한 프롬프트를 입력으로 사용하고, 리턴을 받아서 사용한다. 그리고 약간 발전된 형태의 경우에는 파인 튜닝을 사용하거나, 아주 발전된 형태는 외부 문서 저장소를 사용하는 형태 정도의 수준으로 개발한다. 즉 LLM을 한번 정도 호출하는 정도의 구조를 가지고 있다. 그러나 운영환경에 올라가는 LLM 기반의 애플리케이션의 구조는 이것보다 훨씬 복잡하다. 아래 그림은 LLM 애플리케이션의 아키텍처 예시이다. 단순하게 프롬프트를 작성해서 LLM을 한번만 호출하는 것이 아니라, 여러 예제를..

#20. ChatGPT에서 대화 히스토리 유지하기

조대협 (http://bcho.tistory.com) 노트 : 이글은 LLM 개발 프레임웍 Langchain의 일부 글입니다. 연재 글은 https://bcho.tistory.com/category/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%83%80%20%26%20%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D/%EC%83%9D%EC%84%B1%ED%98%95%20AI%20%28ChatGPT%20etc%29 를 참고하세요. LLM 기반의 챗봇 에서는 질문에 대한 답변을 기존의 대화의 내용이나 컨텍스트(문맥)을 참고하는 경우가 많다. 예를 들어, “서울에서 유명한 여행지는 어디야?” 라는 질문 후에, “그 근처에 맛있는 식당이 어디있어?” 라고 질문을 하면 챗봇은 서울의 유..

카테고리 없음 2024.02.21

#19 ChatGPT에서 질문과 관련된 웹페이지 크롤링하기

조대협 (http://bcho.tistory.com) Langchain 에서 Agent가 사용하는 Tool을 사용자가 쉽게 개발해서 추가할 수 있다. 이번 예제에서는 DuckDuckSearch Tool을 이용하여, 질문에 관련된 웹사이트를 검색한후, 그 중 한 웹사이트의 내용을 크롤링해서 웹페이지 내용을 읽어온후에, 이를 요약하는 예제를 만들어 본다. 이를 위해서 웹페이지를 크롤링하는 툴을 BeautifulSoup 을 이용해서 만들어 본다. 커스텀 툴을 정의하는 방법은 몇가지가 있는데, 이 예제에서는 데코레이터를 사용하는 방법과 StructuredTool을 사용하는 방법 두가지를 살펴보자. 먼저 decorator를 사용하는 방법이다. HEADERS = { 'User-Agent': 'Mozilla/5.0 ..

#18.LangSmith를 이용한 Langchain agent 내부 동작 구조 이해

앞의 예제는 agent를 생성할때 initialize_agent를 사용하는 방식으로 Langchain 0.1.0 까지는 지원하지만 deplicate 될 예정이고 새 버전의 create_react_agent 함수를 사용하기를 권장하고 있다. create_react_agent를 사용하려면 직접 agentExecutor도 선언해야 하고, 프롬프트도 정의해야하기 때문에 기존 방식에 비해서 다소 번거롭지만 좀 더 많은 컨트롤을 할 수 있다. 이번에는 create_react_agent를 이용하는 방식을 설명하면서 내부적으로 agent가 어떻게 동작하는지를 자세하게 살펴보고, 더불어서 langsmith 모니터링 툴을 이용하여, agent에서 내부의 동작을 어떻게 모니터링하고 추적하는지에 대해서 알아보록 한다. Lan..

Langchain을 이용한 LLM 애플리케이션 구현 #17-ChatGPT 구글 검색 엔진과 연동하기

Agent/Tool 을 이용하여 ChatGPT와 구글 검색엔진 연동하기 조대협 (http://bcho.tistory.com) LLM 모델은 기본적으로 학습 당시에 저장된 데이터만을 기반으로 답변을 한다. RAG를 이용하여 외부의 벡터 데이터 베이스에 있는 내용을 참고하여 지식 데이터를 확장할 수 있지만, 이 역시 저장한 문서에만 해당된다. LLM 애플리케이션을 데이터를 확장하고 싶다면? 예를 들어 LLM에 저장되지 않은 데이터를 구글 서치 엔진을 통해서 검색해서 참고하거나 유투브의 비디오 스크립트를 참고할 수 있다면? 아니면 회사내의 데이터베이스의 정보를 참고해서 답변을 할 수 있다면? 이러한 요구사항에 부합하여 LLM이 외부 정보를 참고하여 답변을 할 수 있도록 기능을 제공하는 컴포넌트가 langcha..

Langchain을 이용한 LLM 애플리케이션 구현 - #15 자연어로 SQL 쿼리하기

자연어로 SQL 생성하기 조대협 (http://bcho.tistory.com) 지금까지 살펴본 Chain 은 모두 LLMChain으로, 입력값을 프롬프트에 삽입하여 모델에 입력해서 결과를 리턴하는 형태였다. Chain 기능을 통해서 연결될 수 있는 체인은 LLMChain 뿐만 아니라 단순하게 출력값을 포맷팅 하는 체인이나, 아니면 문서 파일을 읽어드리는 체인등 여러가지 용도의 체인이 있을 수 있다. 또한 필요하다면 개발자가 직접 체인을 만들어서 사용할 수 도 있다. 이러한 체인들을 유틸리티 체인이라고 한다. 유틸리티 체인중에서 대표적인 체인인 create_sql_query_chain을 알아보자. 이 체인은 데이터베이스의 스키마를 기반으로 입력된 질문을 SQL로 변환해주는 역할을 한다. 이 예제는 미국의 ..

Langchain을 이용한 LLM 애플리케이션 구현 #15 - LCEL

LCEL (LangChain Expression Language) 조대협 (http://bcho.tistory.com) 앞에서 소개한 Chain은 개념적으로는 훌륭하지만, 코드양이 다소 많아지고, 병렬처리나 비동기 처리, 스트리밍 같은 고급 기능을 구현하기 어렵다. 이런 한계를 극복하기 위해서 2023년 8월에 LangChain Expression Language (이하 LCEL이 개발되었다.) Chain의 기능을 대처하는 컴포넌트로, 병렬,비동기,스트리밍 같은 고급 워크플로우 처리에서 부터 FallBack이나 Retry 와 같은 장애 처리 기능을 지원하며, 추후에 소개할 Langchain 모니터링/평가 솔루션인 LangSmith와 쉽게 연동이 된다. 이번장에서는 앞에서 구현한 LLMChain, Sequ..

Langchain을 이용한 LLM 애플리케이션의 구현 #14 - Chain을 이용한 워크 플로우 구현 #2

Chain을 이용한 복잡한 워크 플로우의 구현 조대협 (http://bcho.tistory.com) Advanced Sequential Chain 앞의 예제는 순차적으로 LLMChain을 간단한 워크 플로우를 구현해봤다. SequentialChain은 순차적인 실행뿐만 아니라, 병렬로 LLM 호출을 하는 흐름등을 구현이 가능하다. 이번 예제에서는 조금 더 발전된 Chain의 구조를 살펴보자. 아래 예제는 도시명{city}과 교통편{transport}를 입력하면, 유명 관광지를 추천해서 그곳까지 도착하기 위한 교통편과 식당에 대한 정보를 출력하는 Chain의 구조이다. 예제 코드를 살펴보기전에, 먼저 흐름을 보자. 애플리케이션에서 도시명{city}와 교통편{transport)를 입력받는다. chain1에서..