[LLM] Groq: LPU 기반으로 대규모 AI 모델 (LLaMA70b, Gemma2-9b) 경험해 보기 - Free API Key 발급, Langchain 예제
·
AI
지난 시간에는 ollama를 활용하여 경량화된 LLaMA3.2 모델(1b, 3b 등)을 로컬 머신에서 직접 실행해보는 실습을 진행하였다. NVIDIA의 GPU 시장 독점을 견제하려는 목적으로 설립된 미국 스타트업 Groq은, 자체 개발한 LPU(Language Processing Unit)를 활용해 LLaMA-70B, Gemma-2-9B 등 로컬 머신에서 실행하기 어려운 대규모 모델을 웹과 API로 제공한다. 오늘은 이를 활용해보려 한다.  Groq is Fast AI InferenceThe LPU™ Inference Engine by Groq is a hardware and software platform that delivers exceptional compute speed, quality, and ..
[LLM] ollama + open-webui로 온디바이스 LLM Chatbot 환경 구축하기
·
AI
그냥 ChatGPT 무료 버전을 사용하면 되지만, 다양한 방식으로 활용하기 위해서는 api를 사용하여 내부 로직을 바꾸거나, llama와 같은 언어 모델을 ollama 백엔드 서버에 올려 사용하거나, 혹은 Hugging Face에서 받아온 모델을 사용할 수 있을 것이다. 이를 편리하게 해주는 웹 프레임워크인 open-webui를 이용하여 온디바이스 LLM chatbot 환경을 구축해 보자! 1. ollama순서를 무조건 이렇게 할 필요는 없지만, 먼저 ollama를 설치하고, 여러 언어 모델들을 다운로드하여 CLI 환경에서 작동시켜 보자.  GitHub - ollama/ollama: Get up and running with Llama 3.3, Mistral, Gemma 2, and other large..
[LLM] RAG 개선하기 (3) - 바이 인코더 + 교차 인코더
·
AI
RAG를 개선하는 최종 목적지는 결국 바이 인코더로 유사도가 높은 상위 검색 결과에 교차 인코더를 다시 한번 적용하여 검색 정확도를 최대한 끌어올리는 데에 있다. 이를 위해 이번 시간에는 교차 인코더를 구현해 보고, 이어서 바이 인코더와 교차 인코더를 조합하여 최적의 검색 기능을 만들어 보자. 그러기 위해서 앞서 작성한 포스팅들이 큰 도움이 될 것이다.  [LLM] 임베딩 모델로 데이터 의미 압축하기 (2) - 문장 임베딩 방식[LLM] 임베딩 모델로 데이터 의미 압축하기 (1) - 텍스트 임베딩 이해하기컴퓨터가 자연어를 이해하려면 텍스트를 숫자로 바꿔야 하는데, 이 과정에서 '임베딩'이라는 방식이 쓰인다. 오늘은 텍스dusanbaek.tistory.com 교차 인코더 구현 교차 인코더의 A to Z를 ..
[LLM] RAG 개선하기 (2) - 임베딩 모델 미세 조정하기 (Fine-Tuning)
·
AI
이번 시간에는 좋은 임베딩 모델을 만들어 검색 쿼리와 관련된 문서를 잘 찾게 만들어 보자. 이를 위해 임베딩 모델을 KLUE의 MRC 데이터셋으로 추가 학습시키도록 하겠다.사전 학습된 모델의 성능 살펴보기 데이터 전처리 from datasets import load_datasetklue_mrc_train = load_dataset('klue', 'mrc', split='train')klue_mrc_train[0]# {'title': '제주도 장마 시작 … 중부는 이달 말부터',# 'context': '올여름 장마가 17일 제주도에서 시작됐다. 서울 등 중부지방은 예년보다 사나흘 정도 늦은 이달 말께 장마가 시작될 전망이다.17일 기상청에 따르면 제주도 남쪽 먼바다에 있는 장마전선의 영향으로 이날 제주도..
[LLM] RAG 개선하기 (1) - 언어 모델을 임베딩 모델로 만들기
·
AI
이전 포스팅에서는 두 문장 간 유사도를 비교하는 방법 두 가지인 바이 인코더와 교차 인코더 중 비교적 구현이 간단한 바이 인코더에 대해서 알아보았다. 하지만 교차 인코더의 정확도도 포기할 수 없으므로, 두 인코더의 장점을 살려 더 높은 성능의 검색을 구현하는 방법에 대해 알아보자. 또 기존의 문장 임베딩 모델을 가져와서 사용하기만 하는 것이 아니라, 이번에는 순수의 BERT 모델을 가져와 문장 임베딩 모델로 학습시켜 보자.검색 성능을 높이기 위한 두 가지 방법 허깅페이스 모델 허브에서 사전 학습된 문장 임베딩 모델을 가져와 그대로 사용할 경우, 우리의 RAG가 가진 데이터셋으로 학습을 한 것이 아니므로 정확도가 떨어질 수 있다. 이를 극복하기 위해 할 수 있는 두 가지 방법을 알아보자. 데이터 추가 학습..
[LLM] 임베딩 모델로 데이터 의미 압축하기 (3) - 의미, 키워드, 하이브리드 검색
·
AI
사용자의 쿼리를 바탕으로 이에 걸맞은 정보를 얻기 위해서는 어떤 방식의 검색 알고리즘을 사용하는 것이 좋을까? 이번 시간에는 임베딩 변환 후 유사도 기반의 의미 검색과 단순히 키워드로 같은 문자열을 찾아내는 키워드 검색 중 하나인 BM25, 그리고 이들을 합친 하이브리드 검색에 대해 구현해 보자. 의미 검색 사실 수식으로 따지면 임베딩이 차지하는 비율이 높기 때문에 굉장히 복잡한 구현이 필요하지만, 우리는 임베딩 라이브러리인 sentence-transformer와 벡터 연산 라이브러리인 faiss를 통해 간단히 구현할 수 있다. from datasets import load_datasetfrom sentence_transformers import SentenceTransformerklue_mrc_data..
[LLM] 임베딩 모델로 데이터 의미 압축하기 (2) - 문장 임베딩 방식
·
AI
[LLM] 임베딩 모델로 데이터 의미 압축하기 (1) - 텍스트 임베딩 이해하기컴퓨터가 자연어를 이해하려면 텍스트를 숫자로 바꿔야 하는데, 이 과정에서 '임베딩'이라는 방식이 쓰인다. 오늘은 텍스트를 숫자로 바꾸는 다양한 방법과 그 변천사를 알아보고, 각각의 방식dusanbaek.tistory.com 지난 시간에 이어 이번엔 문장 임베딩에 대해 알아보자. 결국에 문장 단위로 입력에 넣어서 임베딩을 진행하는데, 여러 방식 중 하나는 트랜스포머의 인코더 구조를 사용하는 것이다. 내 블로그에 트랜스포머의 구조를 설명해 놓았으니, 이를 참고하면 한 문장이 어떻게 임베딩 벡터로 변환되는지 이해할 수 있을 것이다. 두 문장이 주어졌을 때 두 문장이 얼마나 유사한지 구하는 두 방식을 알아보고, 실습을 통해 개념을 정..
[LLM] 임베딩 모델로 데이터 의미 압축하기 (1) - 텍스트 임베딩 이해하기
·
AI
컴퓨터가 자연어를 이해하려면 텍스트를 숫자로 바꿔야 하는데, 이 과정에서 '임베딩'이라는 방식이 쓰인다. 오늘은 텍스트를 숫자로 바꾸는 다양한 방법과 그 변천사를 알아보고, 각각의 방식이 어떤 의미를 갖는지 깊게 이해해 보자. 우리가 이걸 왜 알아야 할까? 예를 들어 검색 엔진에서 적절한 답을 찾으려면 질문과 정보의 의미적 유사성을 계산해야 하는데, 여기서 임베딩이 핵심적인 역할을 한다. 추천 시스템이나 자연어 처리에서도 마찬가지로 중요하다. 결국 이런 과정을 제대로 이해하면 단순히 모델을 사용하는 데서 그치지 않고, 데이터를 다루고 의미를 압축하는 구조를 설계하는 데까지 응용할 수 있게 된다. 텍스트 임베딩 from sentence_transformers import SentenceTransformer..
[LLM] 데이터를 검증하는 방식 알아보기 with NeMo-Guardrails
·
AI
사용자가 원하는 정보를 다 대답해 주는 생성형 AI 서비스도 좋지만, 우리는 목적에 맞는 정보만 제공하기를 바라고 또 내가 제공하는 정보가 사용자와 운영자에게 악영향을 미치지 않기를 바란다. 그래서 우리는 사용자의 요청에 따른 답변이 제대로 되었는지를 검증하고 제공해야 할 필요가 있다. 따라서 답변을 제공하기 전 데이터를 검증할 수 있는 네 가지 방법을 소개하고 유사도, 프롬프트를 활용한 검증 실습을 진행해 보자.데이터 검증 방식 규칙 기반가장 간단하고 알고리즘적으로 해결할 수 있는 방법이다. 우리가 만약 누군가의 주민등록번호나 전화번호를 요청하였고, 만약 벡터데이터베이스에 그 정보가 존재한다면 개인정보 유출의 우려가 있을 것이다. 주민등록번호 13자리나 전화번호 11자리의 정규 표현식을 통해, 답변에 ..
[LLM] LLM Cache로 효율성 확보하기 with ChromaDB
·
AI
지난 시간에는 벡터 데이터베이스를 통해 사용자의 질문과 관련된 정보를 찾아 프롬프트에 통합하는 RAG에 대해 알아보았다. 이제 만들어진 프롬프트를 바탕으로 LLM 모델에 결과를 요청해야 한다. 그런데 여기선 두 가지 상황에서 문제가 발생한다. 먼저 OpenAI 같은 상업용 API를 사용할 경우, 프롬프트의 토큰 수만큼 비용이 발생한다. 그렇다고 직접 LLM을 서빙하는 경우도 녹녹지 않다. GPU를 많이 사용해야 하기 때문이다. 다양한 상황에서 최대한 LLM 추론을 줄여야 할 텐데, 어떤 상황에서 줄일 수 있을까? 그건 바로 이미 이전 상황에서 생성된 답변이 있는 경우를 활용할 때다! 똑같은 질문을 다시 하거나, 비슷한 질문을 했을 때 같은 답변을 내놓는다면 LLM 추론 횟수를 줄일 수 있을 것이다. 이번..