제퍼넷 로고

빠른 실험을 위해 Amazon SageMaker Studio를 사용하여 Llama 2, LangChain 및 Pinecone과 함께 RAG 질문 답변 솔루션 구축 | 아마존 웹 서비스

시간

RAG(검색 증강 생성)를 사용하면 리포지토리, 데이터베이스, API와 같은 외부 지식 소스의 데이터에 대한 액세스가 가능한 대규모 언어 모델(LLM)을 미세 조정할 필요 없이 제공할 수 있습니다. 질문 답변을 위해 생성 AI를 사용할 때 RAG를 통해 LLM은 가장 관련성이 높은 최신 정보로 질문에 답변하고 선택적으로 확인을 위해 데이터 소스를 인용할 수 있습니다.

문서에서 지식 검색을 위한 일반적인 RAG 솔루션은 임베딩 모델을 사용하여 데이터 소스의 데이터를 임베딩으로 변환하고 이러한 임베딩을 벡터 데이터베이스에 저장합니다. 사용자가 질문을 하면 벡터 데이터베이스를 검색하여 사용자의 쿼리와 가장 유사한 문서를 검색합니다. 다음으로 검색된 문서와 사용자 쿼리를 텍스트 생성을 위해 LLM으로 전송되는 증강 프롬프트에 결합합니다. 이 구현에는 임베딩 모델과 최종 응답을 생성하는 LLM이라는 두 가지 모델이 있습니다.

이 게시물에서는 사용 방법을 보여줍니다. 아마존 세이지 메이커 스튜디오 RAG 질문 응답 솔루션을 구축합니다.

RAG 기반 질문 응답을 위해 노트북 사용

RAG를 구현하려면 일반적으로 다양한 임베딩 모델, 벡터 데이터베이스, 텍스트 생성 모델 및 프롬프트를 실험하는 동시에 기능적 프로토타입을 얻을 때까지 코드를 디버깅해야 합니다. 아마존 세이지 메이커 GPU 인스턴스가 장착된 관리형 Jupyter 노트북을 제공하므로 추가 인프라를 가동하지 않고도 이 초기 단계에서 빠르게 실험할 수 있습니다. SageMaker에서 노트북을 사용하는 데는 두 가지 옵션이 있습니다. 첫 번째 옵션은 빠른 실행입니다 노트북 SageMaker Studio를 통해 사용할 수 있습니다. ML용으로 특별히 구축된 IDE(통합 개발 환경)인 SageMaker Studio에서는 다양한 인스턴스 유형과 구성으로 실행되는 노트북을 시작하고, 동료와 협업하고, 기계 학습(ML)을 위해 특별히 구축된 추가 기능에 액세스할 수 있습니다. 두 번째 옵션은 SageMaker 노트북 인스턴스, Jupyter Notebook 앱을 실행하는 완전 관리형 ML 컴퓨팅 인스턴스입니다.

이 게시물에서는 외부 지식 소스의 추가 데이터로 모델의 지식을 강화하여 사용자 정의 도메인에 대한 보다 정확한 응답을 제공하는 RAG 솔루션을 제시합니다. 우리는 다음에서 실행되는 단일 SageMaker Studio 노트북을 사용합니다. ml.g5.2xlarge 인스턴스(A1G GPU 10개) 및 Llama 2 7b 채팅 HF, Hugging Face Hub의 대화 사용 사례에 최적화된 Llama 2 7b의 미세 조정 버전입니다. 우리는 두 개의 AWS 미디어 및 엔터테인먼트 블로그 게시물을 샘플 외부 데이터로 사용합니다. BAAI/bge-small-en-v1.5 임베딩. 우리는 임베딩을 다음 위치에 저장합니다. 솔방울, 고성능 검색 및 유사성 매칭을 제공하는 벡터 기반 데이터베이스입니다. 또한 프로토타입 제작을 완료할 때 실시간 추론을 위해 노트북에서 실험하는 것에서 SageMaker 엔드포인트에 모델을 배포하는 것으로 전환하는 방법에 대해서도 논의합니다. 다양한 모델과 벡터 데이터베이스에도 동일한 접근 방식을 사용할 수 있습니다.

솔루션 개요

다음 다이어그램은 솔루션 아키텍처를 보여줍니다.

솔루션 구현은 SageMaker Studio 노트북을 사용하여 솔루션을 개발하고 추론을 위한 모델을 배포하는 두 가지 상위 수준 단계로 구성됩니다.

SageMaker Studio 노트북을 사용하여 솔루션 개발

솔루션 개발을 시작하려면 다음 단계를 완료하세요.

  1. 노트북의 Hugging Face Hub에서 Llama-2 7b 채팅 모델을 로드합니다.
  2. 다음을 사용하여 PromptTemplate을 만듭니다. 랭체인 이를 사용하여 사용 사례에 대한 프롬프트를 만듭니다.
  3. 1~2개의 예시 프롬프트의 경우 외부 문서의 관련 정적 텍스트를 프롬프트 컨텍스트로 추가하고 응답 품질이 향상되는지 평가하세요.
  4. 품질이 향상된다고 가정하고 RAG 질문 응답 워크플로를 구현합니다.
    • 모델이 사용 사례의 질문에 더 잘 대답하는 데 도움이 될 수 있는 외부 문서를 수집하세요.
    • BGE 임베딩 모델을 로드하고 이를 사용하여 이러한 문서의 임베딩을 생성합니다.
    • 이러한 임베딩을 Pinecone 인덱스에 저장합니다.
    • 사용자가 질문을 하면 Pinecone에서 유사성 검색을 수행하고 가장 유사한 문서의 콘텐츠를 프롬프트 컨텍스트에 추가합니다.

대규모 추론을 위해 모델을 SageMaker에 배포

성능 목표를 달성하면 생성 AI 애플리케이션에서 사용할 모델을 SageMaker에 배포할 수 있습니다.

  1. Llama-2 7b 채팅 모델을 SageMaker 실시간 엔드포인트에 배포합니다.
  2. 배포 BAAI/bge-small-en-v1.5 SageMaker 실시간 엔드포인트에 모델을 임베딩합니다.
  3. 질문에 답변하는 생성적 AI 애플리케이션에 배포된 모델을 사용하세요.

다음 섹션에서는 SageMaker Studio 노트북에서 이 솔루션을 구현하는 단계를 안내합니다.

사전 조건

이 게시물의 단계를 수행하려면 AWS 계정과 AWS 자격 증명 및 액세스 관리 (IAM) 솔루션 리소스를 생성하고 액세스할 수 있는 권한이 있는 역할입니다. AWS를 처음 사용하는 경우 다음을 참조하세요. 독립형 AWS 계정 생성.

AWS 계정에서 SageMaker Studio 노트북을 사용하려면 다음이 필요합니다. SageMaker 도메인 SageMaker Studio 앱을 시작할 수 있는 권한이 있는 사용자 프로필이 있어야 합니다. SageMaker Studio를 처음 사용하는 경우 빠른 스튜디오 설정 시작하는 가장 빠른 방법입니다. 한 번의 클릭으로 SageMaker는 사용자 프로필, IAM 역할, IAM 인증 및 공용 인터넷 액세스 설정을 포함하여 기본 사전 설정으로 SageMaker 도메인을 프로비저닝합니다. 이 게시물의 노트북은 ml.g5.2xlarge 인스턴스 유형. 할당량을 검토하거나 늘리려면 AWS Service Quotas 콘솔을 열고 AWS 서비스 탐색 창에서 아마존 세이지 메이커, 다음에서 실행되는 Studio KernelGateway 앱의 값을 참조하세요. ml.g5.2xlarge 인스턴스.

할당량 한도를 확인한 후 Llama 2 7b 채팅을 사용하려면 종속성을 완료해야 합니다.

Llama 2 7b 채팅은 다음에서 사용할 수 있습니다. 라마 2 라이선스. Hugging Face에서 Llama 2에 액세스하려면 먼저 몇 가지 단계를 완료해야 합니다.

  1. 아직 Hugging Face 계정이 없다면 계정을 만드세요.
  2. 메타에서 "다음 버전의 Llama에 대한 액세스 요청" 양식을 작성하세요. 웹 사이트.
  3. 액세스 요청 라마 2 7b 채팅 포옹 얼굴에.

액세스 권한을 부여받은 후에는 새 액세스 토큰을 생성하여 모델에 액세스할 수 있습니다. 액세스 토큰을 생성하려면 설정 Hugging Face 웹사이트의 페이지입니다.

벡터 데이터베이스로 사용하려면 Pinecone 계정이 필요합니다. Pinecone은 다음을 통해 AWS에서 사용할 수 있습니다. AWS Marketplace. Pinecone 웹사이트에서는 무료 계정 이 게시물의 목적에 충분한 단일 인덱스를 생성할 수 있는 권한이 제공됩니다. Pinecone 키를 검색하려면 솔방울콘솔 선택하고 API 키.

노트북 및 환경 설정

이 게시물의 코드를 따르려면 SageMaker Studio를 열고 다음을 복제하십시오. GitHub 저장소. 다음으로 노트북을 열어주세요 studio-local-gen-ai/rag/RAG-with-Llama-2-on-Studio.ipynb PyTorch 2.0.0 Python 3.10 GPU 최적화 이미지, Python 3 커널 및 ml.g5.2xlarge 인스턴스 유형으로. SageMaker Studio 노트북을 처음 사용하는 경우 다음을 참조하십시오. Amazon SageMaker Studio 노트북 생성 또는 열기.

개발 환경을 설정하려면 다음 코드에 설명된 대로 필요한 Python 라이브러리를 설치해야 합니다.

%%writefile requirements.txt
sagemaker>=2.175.0
transformers==4.33.0
accelerate==0.21.0
datasets==2.13.0
langchain==0.0.297
pypdf>=3.16.3
pinecone-client
sentence_transformers
safetensors>=0.3.3
!pip install -U -r requirements.txt

사전 학습된 모델 및 토크나이저 로드

필요한 라이브러리를 가져온 후 다음을 로드할 수 있습니다. Llama-2 7b 채팅 Hugging Face의 해당 토크나이저와 함께 모델을 만듭니다. 로드된 모델 아티팩트는 SageMaker Studio 내의 로컬 디렉터리에 저장됩니다. 이를 통해 다른 시간에 작업을 재개해야 할 때마다 메모리에 신속하게 다시 로드할 수 있습니다.

import torch

from transformers import (
	AutoTokenizer,
	LlamaTokenizer,
	LlamaForCausalLM,
	GenerationConfig,
	AutoModelForCausalLM
)
import transformers

tg_model_id = "meta-llama/Llama-2-7b-chat-hf" #the model id in Hugging Face
tg_model_path = f"./tg_model/{tg_model_id}" #the local directory where the model will be saved

tg_model = AutoModelForCausalLM.from_pretrained(tg_model_id, token=hf_access_token,do_sample=True, use_safetensors=True, device_map="auto", torch_dtype=torch.float16
tg_tokenizer = AutoTokenizer.from_pretrained(tg_model_id, token=hf_access_token)

tg_model.save_pretrained(save_directory=tg_model_path, from_pt=True)
tg_tokenizer.save_pretrained(save_directory=tg_model_path, from_pt=True)

최신 정보가 필요한 질문을 하세요.

이제 모델 사용을 시작하고 질문할 수 있습니다. Llama-2 채팅 모델은 프롬프트가 다음 형식을 따르기를 기대합니다.

<s>[INST] <<SYS>>
system_prompt
<<SYS>>
{{ user_message }} [/INST]

당신은을 사용할 수 있습니다 프롬프트 템플릿 LangChain에서 프롬프트 형식을 기반으로 레시피를 생성하면 앞으로 프롬프트를 쉽게 생성할 수 있습니다.

from langchain import PromptTemplate

template = """<s>[INST] <<SYS>>nYou are an assistant for question-answering tasks. You are helpful and friendly. Use the following pieces of retrieved context to answer the query. If you don't know the answer, you just say I don't know. Use three sentences maximum and keep the answer concise.
<<SYS>>n
{context}n
{question} [/INST]
"""
prompt_template = PromptTemplate( template=template, input_variables=['context','question'] )

2023년 최신 정보가 필요한 질문을 모델에게 물어보겠습니다. LangChain을 사용할 수 있으며 구체적으로 LLMChain 체인 유형을 지정하고 LLM, 이전에 생성한 프롬프트 템플릿 및 질문을 매개변수로 전달합니다.

question = "When can I visit the AWS M&E Customer Experience Center in New York City?"

tg_tokenizer.add_special_tokens( {"pad_token": "[PAD]"} )
tg_tokenizer.padding_side = "left"

tg_pipe = transformers.pipeline(task='text-generation', model=tg_model, tokenizer=tg_tokenizer, num_return_sequences=1, eos_token_id=tg_tokenizer.eos_token_id, pad_token_id=tg_tokenizer.eos_token_id, max_new_tokens=400, temperature=0.7)

from langchain.chains import LLMChain
from langchain.llms import HuggingFacePipeline

llm=HuggingFacePipeline(pipeline=tg_pipe, model_kwargs={'temperature':0.7})
llm_chain = LLMChain(llm=llm, prompt=prompt_template)
no_context_response = llm_chain.predict(context="", question=question)
print(no_context_response)

우리는 다음과 같은 생성된 답변을 얻습니다.

문의해 주셔서 감사합니다! 뉴욕시에 위치한 AWS M&E 고객 체험 센터는 현재 코로나19 팬데믹으로 인해 방문이 폐쇄되었습니다. 하지만 공식 웹사이트나 소셜 미디어 계정을 확인하여 센터 재개 시기에 대한 업데이트를 확인할 수 있습니다. 그동안 온라인으로 제공되는 가상 투어와 리소스를 탐색할 수 있습니다.

프롬프트에 컨텍스트를 추가하여 답변을 개선하세요.

우리가 생성한 답변은 전적으로 사실이 아닙니다. 몇 가지 컨텍스트를 제공하여 이를 개선할 수 있는지 살펴보겠습니다. 게시물에서 발췌문을 추가할 수 있습니다. AWS, 뉴욕에 새로운 M&E 고객 경험 센터 발표, 여기에는 2023년 주제에 대한 업데이트가 포함되어 있습니다.

context = """Media and entertainment (M&E) customers continue to face challenges in creating more content, more quickly, and distributing it to more endpoints than ever before in their quest to delight viewers globally. Amazon Web Services (AWS), along with AWS Partners, have showcased the rapid evolution of M&E solutions for years at industry events like the National Association of Broadcasters (NAB) Show and the International Broadcast Convention (IBC). Until now, AWS for M&E technology demonstrations were accessible in this way just a few weeks out of the year. Customers are more engaged than ever before; they want to have higher quality conversations regarding user experience and media tooling. These conversations are best supported by having an interconnected solution architecture for reference. Scheduling a visit of the M&E Customer Experience Center will be available starting November 13th, please send an email to AWS-MediaEnt-CXC@amazon.com."""

LLMChain을 다시 사용하고 이전 텍스트를 컨텍스트로 전달합니다.

context_response = llm_chain.predict(context=context, question=question)
print(context_response)

새로운 응답은 최신 정보로 질문에 답합니다.

13월 XNUMX일부터 뉴욕시 AWS M&E 고객 체험 센터를 방문하실 수 있습니다. 방문을 예약하려면 AWS-MediaEnt-CXC@amazon.com으로 이메일을 보내십시오.

올바른 컨텍스트를 추가하면 모델의 성능이 향상되는 것을 확인했습니다. 이제 질문에 대한 올바른 맥락을 찾고 추가하는 데 노력을 집중할 수 있습니다. 즉, RAG를 구현합니다.

BGE 임베딩 및 Pinecone을 사용하여 RAG 질문 답변 구현

이 시점에서 모델의 지식을 향상시키기 위해 정보 소스를 결정해야 합니다. 이러한 소스는 조직 내의 내부 웹페이지나 문서이거나 공개적으로 사용 가능한 데이터 소스일 수 있습니다. 이 게시물의 목적과 단순화를 위해 2023년에 게시된 두 개의 AWS 블로그 게시물을 선택했습니다.

이러한 게시물은 빠른 액세스를 위해 이미 SageMaker Studio의 데이터 프로젝트 디렉터리에 PDF 문서로 제공되어 있습니다. 문서를 관리 가능한 덩어리로 나누려면 다음을 사용할 수 있습니다. RecursiveCharacterTextSplitter LangChain의 방법:

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import PyPDFDirectoryLoader

loader = PyPDFDirectoryLoader("./data/")

documents = loader.load()

text_splitter=RecursiveCharacterTextSplitter(
     chunk_size=1000,
     chunk_overlap=5
)
docs = text_splitter.split_documents(documents)

다음으로 BGE 임베딩 모델을 사용합니다. bge-소형-en 에 의해 작성된 베이징 인공지능 아카데미(BAAI) Hugging Face에서 이러한 청크의 임베딩을 생성하는 데 사용할 수 있습니다. Studio의 로컬 디렉터리에 모델을 다운로드하고 저장합니다. 인스턴스의 CPU에서 실행될 수 있도록 fp32를 사용합니다.

em_model_name = "BAAI/bge-small-en"
em_model_path = f"./em-model"

from transformers import AutoModel
# Load model from HuggingFace Hub
em_model = AutoModel.from_pretrained(em_model_name,torch_dtype=torch.float32)
em_tokenizer = AutoTokenizer.from_pretrained(em_model_name,device="cuda")

# save model to disk
em_tokenizer.save_pretrained(save_directory=f"{em_model_path}/model",from_pt=True)
em_model.save_pretrained(save_directory=f"{em_model_path}/model",from_pt=True)
em_model.eval()

다음 코드를 사용하여 문서 청크를 입력으로 사용하고 BGE 모델을 사용하여 임베딩을 생성하는 embedding_generator 함수를 만듭니다.

# Tokenize sentences
def tokenize_text(_input, device):
    return em_tokenizer(
        [_input], 
        padding=True, 
        truncation=True, 
        return_tensors='pt'
    ).to(device)

# Run embedding task as a function with model and text sentences as input
def embedding_generator(_input, normalize=True):
    # Compute token embeddings
    with torch.no_grad():
        embedded_output = em_model(
            **tokenize_text(
                _input, 
                em_model.device
            )
        )
        sentence_embeddings = embedded_output[0][:, 0]
        # normalize embeddings
        if normalize:
            sentence_embeddings = torch.nn.functional.normalize(
                sentence_embeddings, 
                p=2, 
                dim=1
            )
    
    return sentence_embeddings[0, :].tolist()
    
sample_sentence_embedding = embedding_generator(docs[0].page_content)
print(f"Embedding size of the document --->", len(sample_sentence_embedding))

이 게시물에서는 관리형 클라우드 네이티브 솔루션인 Pinecone을 사용하여 RAG 워크플로를 시연합니다. 벡터 데이터베이스 이는 또한 API 유사성 검색을 위해. 원하는 벡터 데이터베이스를 사용하려면 다음 코드를 자유롭게 다시 작성할 수 있습니다.

우리는 솔방울 파이썬 클라이언트 임베딩 모델의 출력 길이를 사용하여 새로운 벡터 검색 인덱스를 생성합니다. LangChain의 내장 Pinecone 클래스를 사용하여 이전 단계에서 생성한 임베딩을 수집합니다. 수집할 문서, 임베딩 생성기 기능, Pinecone 인덱스 이름이라는 세 가지 매개변수가 필요합니다.

import pinecone
pinecone.init(
    api_key = os.environ["PINECONE_API_KEY"],
    environment = os.environ["PINECONE_ENV"]
)
#check if index already exists, if not we create it
index_name = "rag-index"
if index_name not in pinecone.list_indexes():
    pinecone.create_index(
        name=index_name,
        dimension=len(sample_sentence_embedding), ## 384 for bge-small-en 
        metric='cosine'
    )

#insert the embeddings
from langchain.vectorstores import Pinecone
vector_store = Pinecone.from_documents(
    docs,
    embedding_generator,
    index_name=index_name
)

Llama-2 7B 채팅 모델이 메모리에 로드되고 임베딩이 Pinecone 인덱스에 통합되었으므로 이제 이러한 요소를 결합하여 질문 답변 사용 사례에 대한 Llama 2의 응답을 향상시킬 수 있습니다. 이를 달성하기 위해 LangChain을 사용할 수 있습니다. 검색QA, 벡터 저장소의 가장 유사한 문서로 초기 프롬프트를 강화합니다. 설정으로 return_source_documents=True을 사용하면 응답의 일부로 답변을 생성하는 데 사용된 정확한 문서를 볼 수 있으므로 답변의 정확성을 확인할 수 있습니다.

from langchain.chains import RetrievalQA
import textwrap

#helper method to improve the readability of the response
def print_response(llm_response):
    temp = [textwrap.fill(line, width=100) for line in llm_response['result'].split('n')]
    response = 'n'.join(temp)
    print(f"{llm_response['query']}n n{response}'n n Source Documents:")
    for source in llm_response["source_documents"]:
        print(source.metadata)

llm_qa_chain = RetrievalQA.from_chain_type(
    llm=llm, #the Llama-2 7b chat model
    chain_type='stuff',
    retriever=vector_store.as_retriever(search_kwargs={"k": 2}), # perform similarity search in Pinecone
    return_source_documents=True, #show the documents that were used to answer the question
    chain_type_kwargs={"prompt": prompt_template}
)
print_response(llm_qa_chain(question))

우리는 다음과 같은 답을 얻습니다.

Q: 뉴욕시의 AWS M&E 고객 경험 센터는 언제 방문할 수 있습니까?

A: 기꺼이 도와드리겠습니다! 상황에 따라 뉴욕시 AWS M&E 고객 체험 센터는 13월 XNUMX일부터 방문이 가능합니다. AWS-MediaEnt-CXC@amazon.com으로 이메일을 보내 방문 일정을 예약할 수 있습니다.'

소스 문서:

{'페이지': 4.0, '출처': 'data/AWS, 뉴욕시에 새로운 M&E 고객 경험 센터 발표 _ AWS for M&E Blog.pdf'}

{'페이지': 2.0, '출처': 'data/AWS, 뉴욕시에 새로운 M&E 고객 경험 센터 발표 _ AWS for M&E Blog.pdf'}

다른 질문을 시도해 보겠습니다.

question2=" How many awards have AWS Media Services won in 2023?"
print_response(llm_qa_chain(question2))

우리는 다음과 같은 답을 얻습니다.

Q: 2023년에 AWS 미디어 서비스는 몇 개의 상을 받았습니까?

A: 블로그 게시물에 따르면 AWS 미디어 서비스는 2023년에 XNUMX개의 업계 상을 수상했습니다.'

소스 문서:

{'page': 0.0, 'source': 'data/AWS 미디어 서비스가 업계 표창을 받았습니다 _ AWS for M&E Blog.pdf'}

{'page': 1.0, 'source': 'data/AWS 미디어 서비스가 업계 표창을 받았습니다 _ AWS for M&E Blog.pdf'}

충분한 수준의 신뢰도를 확보한 후에는 모델을 배포할 수 있습니다. 실시간 추론을 위한 SageMaker 엔드포인트. 이러한 엔드포인트는 완전 관리형이며 자동 크기 조정을 지원합니다.

SageMaker는 모델 배포에 활용할 수 있는 LMI(대형 모델 추론 컨테이너)를 사용하여 대규모 모델 추론을 제공합니다. 이러한 컨테이너에는 DeepSpeed와 같은 사전 설치된 오픈 소스 라이브러리가 장착되어 있어 추론 중 텐서 병렬 처리와 같은 성능 향상 기술의 구현을 용이하게 합니다. 또한 DJLServing을 사전 구축된 통합 모델 서버로 사용합니다. DJL서빙 동적 일괄 처리 및 작업자 자동 크기 조정을 지원하여 처리량을 높이는 고성능 범용 모델 제공 솔루션입니다.

우리의 접근 방식에서는 DJLServing 및 DeepSpeed ​​Inference와 함께 SageMaker LMI를 사용하여 다음에서 실행되는 SageMaker 엔드포인트에 Llama-2-chat 7b 및 BGE 모델을 배포합니다. ml.g5.2xlarge 실시간 추론을 가능하게 합니다. 이 단계를 직접 수행하려면 다음을 참조하세요. 수첩 자세한 지침은

두 개가 필요합니다. ml.g5.2xlarge 배포용 인스턴스. 할당량을 검토하거나 늘리려면 AWS Service Quotas 콘솔을 열고 AWS 서비스 탐색 창에서 아마존 세이지 메이커, 값을 참조하세요. ml.g5.2xlarge 엔드포인트 사용을 위해.

다음 단계에서는 SageMaker 엔드포인트에서 RAG 워크플로용 사용자 지정 모델을 배포하는 프로세스를 간략하게 설명합니다.

  • 배포 라마-2 7b SageMaker 실시간 엔드포인트에 대한 채팅 모델 ml.g5.2xlarge 빠른 텍스트 생성을 위한 인스턴스입니다.
  • 배포 BAAI/bge-small-en-v1.5 에서 실행되는 SageMaker 실시간 엔드포인트에 모델을 임베딩합니다. ml.g5.2xlarge 사례. 또는 자체 임베딩 모델을 배포할 수도 있습니다.
  • 질문하고 LangChain을 사용하세요 검색QA 이번에는 SageMaker 실시간 엔드포인트에 배포된 모델을 사용하여 Pinecone의 가장 유사한 문서로 프롬프트를 강화합니다.
# convert your local LLM into SageMaker endpoint LLM
llm_sm_ep = SagemakerEndpoint(
    endpoint_name=tg_sm_model.endpoint_name, # <--- Your text-gen model endpoint name
    region_name=region,
    model_kwargs={
        "temperature": 0.05, 
        "max_new_tokens": 512
    },
    content_handler=content_handler,
)

llm_qa_smep_chain = RetrievalQA.from_chain_type(
    llm=llm_sm_ep,  # <--- This uses SageMaker Endpoint model for inference
    chain_type='stuff',
    retriever=vector_store.as_retriever(search_kwargs={"k": 2}),
    return_source_documents=True,
    chain_type_kwargs={"prompt": prompt_template}
)
  • LangChain을 사용하여 임베딩 모델이 있는 SageMaker 엔드포인트가 예상대로 작동하여 향후 문서 수집에 사용할 수 있는지 확인합니다.
response_model = smr_client.invoke_endpoint(
    EndpointName=em_sm_model.endpoint_name, <--- Your embedding model endpoint name
    Body=json.dumps({
        "text": "This is a sample text"
    }),
    ContentType="application/json",
)

outputs = json.loads(response_model["Body"].read().decode("utf8"))['outputs']

정리

리소스를 정리하려면 다음 단계를 완료하세요.

  • SageMaker Studio 노트북 작업을 마쳤으면 ml.g5.2xlarge 중지 아이콘을 선택하면 요금이 부과되지 않습니다. 설정할 수도 있습니다. 수명주기 구성 스크립트 리소스를 사용하지 않을 때 자동으로 종료합니다.

  • SageMaker 엔드포인트에 모델을 배포한 경우 노트북 끝에서 다음 코드를 실행하여 엔드포인트를 삭제합니다.
#delete your text generation endpoint
sm_client.delete_endpoint(
     EndpointName=tg_sm_model.endpoint_name
)
# delete your text embedding endpoint
sm_client.delete_endpoint(
      EndpointName=em_sm_model.endpoint_name
)
  • 마지막으로 다음 줄을 실행하여 Pinecone 인덱스를 삭제합니다.
pinecone.delete_index(index_name)

결론

SageMaker 노트북은 검색 증강 생성을 통해 여정을 시작하는 간단한 방법을 제공합니다. 이를 통해 추가 인프라를 가동하지 않고도 다양한 모델, 구성 및 질문을 대화형으로 실험할 수 있습니다. 이 게시물에서는 LangChain, BGE 임베딩 모델 및 Pinecone을 사용하여 질문 답변 사용 사례에서 Llama 2 7b 채팅의 성능을 향상시키는 방법을 보여주었습니다. 시작하려면 SageMaker Studio를 시작하고 다음을 실행하십시오. 수첩 다음에서 사용 가능 GitHub 레포. 댓글 섹션에서 여러분의 생각을 공유해주세요!


저자 소개

아나스타샤 체벨레카 AWS의 기계 학습 및 AI 전문 솔루션 설계자입니다. 그녀는 EMEA 고객과 협력하고 AWS 서비스를 사용하여 규모에 맞게 기계 학습 솔루션을 설계하도록 돕습니다. 그녀는 자연어 처리(NLP), MLOps 및 낮은 코드 코드 없는 도구를 포함한 다양한 도메인의 프로젝트에 참여했습니다.

프라나브 머티 AWS의 AI/ML 전문 솔루션 아키텍트입니다. 그는 고객이 기계 학습(ML) 워크로드를 구축, 교육, 배포 및 SageMaker로 마이그레이션하도록 돕는 데 중점을 두고 있습니다. 이전에는 반도체 공정을 개선하기 위해 대형 컴퓨터 비전(CV) 및 자연어 처리(NLP) 모델을 개발하는 반도체 업계에서 일했습니다. 여가 시간에는 체스와 여행을 즐깁니다.

spot_img

최신 인텔리전스

spot_img