자연어처리/Langchain

[langchain] LLM(Large Language Model) 사용하기

Suda_777 2024. 9. 12. 00:28
반응형

0. 개요

랭체인에서 LLM을 불러오는 방법중 크게는 세가지가 있다.

1. api 형태로, 요청만 할 수 있는 모델 (chatgpt 등등)

2. 로컬로 다운 받아, 커스터마이징이 가능한 모델 (HuggingFace)

3. 로컬에 다운 받을 수 있으나, 수정할 수는 없는 모델 (Ollama)

 

Langchain에 올라오는 LLM 모델은 매달 빠르게 변경되고 추가되기 때문에,

가장 많이 사용할 법한 분류를 기준으로 소개하겠다.

(정말 모델은 엄청 다양하고 많다.)

1.  API에 요청

1.1. 설명

내용 출처: How to chain runnables

API에 요청 하는 방법은, 다른 서버의 자원을 사용하기 때문에 유료로 사용한다고 볼 수 있다.

 

장점은, 사용하기 편리하고 대체로 성능이 좋다는 점이다. 가격도 서버를 직접 운영하는 것에 비해 비싼 편도 아니다. 물론 사용량이 많아지면 비싸 질 수 있다.

 

단점은 회사에서 사용한다면 보안상 문제가 될 가능성이 있어 꺼리는 회사들이 많다.

1.2. openAI chatgpt 실행 방법

설치

pip install -qU langchain-openai

 

LLM을 지원하는 곳을 찾아가서 API Key를 받아와야 사용할 수 있다. (유료)

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass()

from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-4o-mini")

 

모델 실행

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")

chain = prompt | model | StrOutputParser()

1.3. Google gemini 실행 방법

설치

pip install -qU langchain-google-vertexai

 

마찬가지로 google에서 api key를 가져와야 한다. (유료)

import getpass
import os

os.environ["GOOGLE_API_KEY"] = getpass.getpass()

from langchain_google_vertexai import ChatVertexAI

model = ChatVertexAI(model="gemini-1.5-flash")

 

모델 실행 방법은 위와 같다.


2. 로컬 다운 (HuggingFace)

2.1. 설명

내용 출처: Hugging Face Local Pipelines

 

HuggingFace에서 모델을 받아 사용하는 장점은, 파인튜닝을 할 수 있다는 점이다.

 

2.2. 실행 방법

 

방법 1. huggingface에서 직접 모델을 다운받는다.

from langchain_huggingface.llms import HuggingFacePipeline
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

model_id = "gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=10)
hf = HuggingFacePipeline(pipeline=pipe)

 

방법 2. langchain을 이용해 huggingface 모델을 다운받는다.

from langchain_huggingface.llms import HuggingFacePipeline

hf = HuggingFacePipeline.from_model_id(
    model_id="gpt2",
    task="text-generation",
    pipeline_kwargs={"max_new_tokens": 10},
)

 

Huggingface 파이프라인을 Langchain에 반영한다.

# llm 객체를 직접 호출하여 프롬프트 실행
response = hf("What is the capital of France?")
print(response)

3. 로컬에 다운 (수정 불가, Ollama)

3.1. 설명

내용 출처: OllamaLLM

 

ollama를 이용하는 장점은, 최적화가 잘되어 있어 대답 속도가 빠르다. 

그리고, 어느정도 검증된 모델을 사용하도록 잘 정리되어 있으며, 간단한 명령어로 다운받을 수 있어 간편하다.

단점은 파인튜닝을 지원하지 않아, 개인적으로 튜닝할 수가 없다.

3.2. 실행 방법

이번 예시에서는 ollama에 대한 설명을 하겠다.

 

먼저, ollama를 설치한다.

다음으로 ollama를 사용하는 bash 명령어를 알아보자

 

현재 다운로드한 모델 조회

ollama list

 

다운로드 가능한 모델 조회

ollama available

 

특정 모델 다운로드

ollama pull <모델 이름>

 

 

모델을 다운받았다면 python에서 아래와 같이 모델을 사용할 수 있다. (ollama가 실행중이어야 한다)

from langchain_ollama import OllamaLLM

model = OllamaLLM(model="llama3")
model.invoke("Come up with 10 names for a song about parrots")

 

 

4. 결론

로컬에 다운받아서 사용한다면, 아직까지는 오픈소스인 Llama 를 사용하는 것이 좋은 것 같다.

그런데 문제가 없다면, 유료 API를 결제 하는 것이 프로젝트를 진행하는 데에 편하다고 할 수 있겠다.

반응형