인공지능/nlp
[LLM] langchain을 활용한 챗봇 구현 (2): HuggingFace, HuggingFace Token
jmHan
2024. 8. 12. 23:33
반응형
LangChain에서는 허깅페이스 허브에 배포되어 있는 사전 학습 모델을 활용하여 LLM 체인을 구성할 수 있음.
HuggingFace Hub이란?
120k 이상의 모델, 20k의 데이터셋, 50k의 데모 앱(Spaces)를 포함하는 플랫폼
오픈소스로 공개적으로 이용 가능
라이브러리 설치
!pip install langchain
!pip install huggingface_hub transformers datasets
허깅페이스 토큰 발급
허깅페이스 회원가입 후 토큰 발급
https://huggingface.co/settings/tokens
Access Tokens > Create new token
import os
# 허깅페이스 LLM Read Key
# 이전 단계에서 복사한 Key를 아래에 붙혀넣기 합니다.
os.environ['HUGGINGFACEHUB_API_TOKEN'] = 'HuggingFace Access KEY'
한글 LLM 리더보드
https://huggingface.co/spaces/upstage/open-ko-llm-leaderboard
추론에 활용할 모델 선택 및 모델 ID 확인
from langchain import LLMChain
from langchain.prompts import PromptTemplate
from langchain.llms import HuggingFaceHub
# HuggingFace Repository ID
repo_id = 'mistralai/Mistral-7B-v0.1'
# 질의내용
question = "who is Elon Musk?"
# 템플릿
template = """Question: {question}
Answer: """
# 프롬프트 템플릿 생성
prompt = PromptTemplate(template=template, input_variables=["question"])
# HuggingFaceHub 객체 생성
llm = HuggingFaceHub(
repo_id=repo_id,
model_kwargs={"temperature": 0.2,
"max_length": 1280}
)
# LLM Chain 객체 생성
llm_chain = LLMChain(prompt=prompt, llm=llm)
# 실행
print(llm_chain.run(question=question))
로컬 서버에서 다운로드한 모델 추론
inference 방식이 간편하지만 로컬 서버 성능에 따라 추론 속도가 늦어질 수 있음
답변 지연 시간이 길다면 Timeout 에러 발생 가능
import os
# 허깅페이스 모델/토크나이저를 다운로드 받을 경로
# (예시)
# os.environ['HF_HOME'] = '/home/jovyan/work/tmp'
os.environ['HF_HOME'] = 'LLM 모델을 다운로드 받을 경로'
from langchain import LLMChain
from langchain.prompts import PromptTemplate
from langchain.llms import HuggingFacePipeline
# HuggingFace Model ID
model_id = 'EleutherAI/pythia-160m'
# HuggingFacePipeline 객체 생성
llm = HuggingFacePipeline.from_model_id(
model_id=model_id,
device=0, # -1: CPU(default), 0번 부터는 CUDA 디바이스 번호 지정시 GPU 사용하여 추론
task="text-generation", # 텍스트 생성
model_kwargs={"temperature": 0.1,
"max_length": 64},
)
# 템플릿
template = """질문: {question}
답변: """
# 프롬프트 템플릿 생성
prompt = PromptTemplate.from_template(template)
# LLM Chain 객체 생성
llm_chain = LLMChain(prompt=prompt, llm=llm)
# 실행
question = "서울이 수도인 나라는 어디야?"
print(llm_chain.run(question=question))
참고
https://teddylee777.github.io/langchain/langchain-tutorial-02/
반응형