شعار زيفيرنت

استخدم Amazon SageMaker Studio لإنشاء حل للإجابة على أسئلة RAG باستخدام Llama 2 وLangChain وPinecone للتجربة السريعة | خدمات الويب الأمازون

التاريخ:

يسمح لك الجيل المعزز للاسترجاع (RAG) بتوفير نموذج لغة كبير (LLM) مع إمكانية الوصول إلى البيانات من مصادر المعرفة الخارجية مثل المستودعات وقواعد البيانات وواجهات برمجة التطبيقات دون الحاجة إلى ضبطها. عند استخدام الذكاء الاصطناعي التوليدي للإجابة على الأسئلة، يتيح RAG لـ LLMs الإجابة على الأسئلة بالمعلومات الأكثر صلة وحداثة والاستشهاد بمصادر بياناتهم بشكل اختياري للتحقق منها.

يستخدم حل RAG النموذجي لاسترجاع المعرفة من المستندات نموذج التضمينات لتحويل البيانات من مصادر البيانات إلى التضمينات وتخزين هذه التضمينات في قاعدة بيانات متجهة. عندما يطرح المستخدم سؤالاً، فإنه يبحث في قاعدة بيانات المتجهات ويسترجع المستندات الأكثر تشابهًا مع استعلام المستخدم. بعد ذلك، يقوم بدمج المستندات المستردة واستعلام المستخدم في موجه معزز يتم إرساله إلى LLM لإنشاء النص. هناك نموذجان في هذا التنفيذ: نموذج التضمين ونموذج LLM الذي يولد الاستجابة النهائية.

في هذا المنشور ، نوضح كيفية الاستخدام أمازون ساجميكر ستوديو لبناء حل للإجابة على أسئلة RAG.

استخدام دفاتر الملاحظات للإجابة على الأسئلة المستندة إلى RAG

يستلزم تنفيذ RAG عادةً تجربة نماذج التضمين المختلفة، وقواعد البيانات المتجهة، ونماذج إنشاء النص، والمطالبات، مع تصحيح أخطاء التعليمات البرمجية أيضًا حتى تحصل على نموذج أولي وظيفي. الأمازون SageMaker توفر أجهزة كمبيوتر Jupyter المحمولة المُدارة والمزودة بمثيلات وحدة معالجة الرسومات (GPU)، مما يتيح لك إجراء التجارب بسرعة خلال هذه المرحلة الأولية دون تشغيل بنية تحتية إضافية. هناك خياران لاستخدام دفاتر الملاحظات في SageMaker. الخيار الأول هو التشغيل السريع أجهزة الكمبيوتر المحمولة متاح من خلال SageMaker Studio. في SageMaker Studio، بيئة التطوير المتكاملة (IDE) المصممة خصيصًا لتعلم الآلة، يمكنك تشغيل دفاتر الملاحظات التي تعمل على أنواع مثيلات مختلفة وبتكوينات مختلفة، والتعاون مع الزملاء، والوصول إلى ميزات إضافية مصممة لهذا الغرض للتعلم الآلي (ML). الخيار الثاني هو استخدام مثيل دفتر SageMaker، وهو مثيل حساب ML مُدار بالكامل يقوم بتشغيل تطبيق Jupyter Notebook.

في هذا المنشور، نقدم حل RAG الذي يعمل على زيادة معرفة النموذج ببيانات إضافية من مصادر المعرفة الخارجية لتوفير استجابات أكثر دقة خاصة بالمجال المخصص. نحن نستخدم جهاز كمبيوتر محمولاً واحدًا من نوع SageMaker Studio يعمل على نظام ml.g5.2xlarge مثيل (1 A10G GPU) و اللاما 2 7b دردشة hf، الإصدار الدقيق من Llama 2 7b، والذي تم تحسينه لحالات استخدام الحوار من Hugging Face Hub. نحن نستخدم منشورين على مدونة AWS Media & Entertainment كعينة للبيانات الخارجية، والتي نقوم بتحويلها إلى عمليات تضمين باستخدام ملف BAAI/bge-small-en-v1.5 التضمينات. نقوم بتخزين التضمينات فيها كوز الصنوبر، قاعدة بيانات قائمة على المتجهات توفر بحثًا عالي الأداء ومطابقة التشابه. نناقش أيضًا كيفية الانتقال من التجربة في دفتر الملاحظات إلى نشر النماذج الخاصة بك إلى نقاط نهاية SageMaker للاستدلال في الوقت الفعلي عند إكمال النموذج الأولي الخاص بك. يمكن استخدام نفس النهج مع نماذج مختلفة وقواعد بيانات المتجهات.

حل نظرة عامة

يوضح الرسم البياني التالي بنية الحل.

يتكون تنفيذ الحل من خطوتين عاليتي المستوى: تطوير الحل باستخدام دفاتر ملاحظات SageMaker Studio، ونشر النماذج للاستدلال.

قم بتطوير الحل باستخدام دفاتر ملاحظات SageMaker Studio

أكمل الخطوات التالية لبدء تطوير الحل:

  1. قم بتحميل نموذج الدردشة Llama-2 7b من Hugging Face Hub في دفتر الملاحظات.
  2. قم بإنشاء قالب موجه باستخدام لانجشين واستخدمه لإنشاء مطالبات لحالة الاستخدام الخاصة بك.
  3. بالنسبة للمطالبات من 1 إلى 2 أمثلة، أضف نصًا ثابتًا ذا صلة من المستندات الخارجية كسياق سريع وقم بتقييم ما إذا كانت جودة الاستجابات قد تحسنت.
  4. بافتراض أن الجودة تتحسن، قم بتنفيذ سير عمل الإجابة على سؤال RAG:
    • اجمع المستندات الخارجية التي يمكن أن تساعد النموذج في الإجابة بشكل أفضل على الأسئلة في حالة الاستخدام الخاصة بك.
    • قم بتحميل نموذج تضمينات BGE واستخدمه لإنشاء تضمينات لهذه المستندات.
    • قم بتخزين هذه التضمينات في فهرس Pinecone.
    • عندما يطرح المستخدم سؤالاً، قم بإجراء بحث تشابه في Pinecone وأضف المحتوى من المستندات الأكثر تشابهًا إلى سياق المطالبة.

انشر النماذج على SageMaker للاستدلال عليها على نطاق واسع

عندما تحقق أهداف الأداء الخاصة بك، يمكنك نشر النماذج في SageMaker لتستخدمها تطبيقات الذكاء الاصطناعي التوليدية:

  1. انشر نموذج الدردشة Llama-2 7b إلى نقطة نهاية SageMaker في الوقت الفعلي.
  2. انشر ملف BAAI/bge-small-en-v1.5 نموذج التضمين إلى نقطة نهاية SageMaker في الوقت الفعلي.
  3. استخدم النماذج المنشورة في سؤالك للإجابة على تطبيقات الذكاء الاصطناعي التوليدية.

في الأقسام التالية، نرشدك عبر خطوات تنفيذ هذا الحل في دفاتر ملاحظات SageMaker Studio.

المتطلبات الأساسية المسبقة

لاتباع الخطوات الواردة في هذا المنشور، يجب أن يكون لديك حساب AWS وحساب إدارة الهوية والوصول AWS دور (IAM) مع أذونات لإنشاء موارد الحل والوصول إليها. إذا كنت جديدًا على AWS، فراجع قم بإنشاء حساب AWS مستقل.

لاستخدام دفاتر ملاحظات SageMaker Studio في حساب AWS الخاص بك، تحتاج إلى المجال SageMaker بملف تعريف مستخدم لديه أذونات لتشغيل تطبيق SageMaker Studio. إذا كنت جديدًا في SageMaker Studio، فإن إعداد الاستوديو السريع هي أسرع طريقة للبدء. بنقرة واحدة، يقوم SageMaker بتزويد مجال SageMaker بالإعدادات المسبقة الافتراضية، بما في ذلك إعداد ملف تعريف المستخدم ودور IAM ومصادقة IAM والوصول إلى الإنترنت العام. دفتر الملاحظات لهذا المنصب يفترض ml.g5.2xlarge نوع الطلب. لمراجعة حصتك أو زيادتها، افتح وحدة تحكم AWS Service Quotas، واختر خدمات AWS في جزء التنقل ، اختر الأمازون SageMaker، وقم بالإشارة إلى القيمة الخاصة بتطبيقات Studio KernelGateway التي تعمل عليها ml.g5.2xlarge الحالات.

بعد تأكيد حد حصتك، ستحتاج إلى إكمال التبعيات لاستخدام دردشة Llama 2 7b.

دردشة Llama 2 7b متاحة ضمن رخصة لاما 2. للوصول إلى Llama 2 على Hugging Face، يتعين عليك إكمال بعض الخطوات أولاً:

  1. قم بإنشاء حساب Hugging Face إذا لم يكن لديك حساب بالفعل.
  2. أكمل النموذج "طلب الوصول إلى الإصدار التالي من Llama" الموجود على Meta موقع الكتروني.
  3. طلب الوصول إلى دردشة اللاما 2 7 ب على عناق الوجه.

بعد منحك حق الوصول، يمكنك إنشاء رمز وصول جديد للوصول إلى النماذج. لإنشاء رمز وصول، انتقل إلى الإعدادات صفحة على موقع Hugging Face.

يجب أن يكون لديك حساب في Pinecone لاستخدامه كقاعدة بيانات متجهة. يتوفر Pinecone على AWS عبر سوق AWS. يوفر موقع Pinecone أيضًا خيار إنشاء ملف حساب مجاني الذي يأتي مع أذونات لإنشاء فهرس واحد، وهو ما يكفي لأغراض هذه المقالة. لاسترداد مفاتيح Pinecone، افتح الملف وحدة تحكم كوز الصنوبر واختر مفاتيح API.

قم بإعداد دفتر الملاحظات والبيئة

لاتباع التعليمات البرمجية الموجودة في هذا المنشور، افتح SageMaker Studio وقم باستنساخ ما يلي مستودع جيثب. بعد ذلك، افتح دفتر الملاحظات studio-local-gen-ai/rag/RAG-with-Llama-2-on-Studio.ipynb واختر صورة PyTorch 2.0.0 Python 3.10 GPU المحسنة، وPython 3 kernel، و 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

قم بتحميل النموذج المُدرب مسبقًا والرمز المميز

بعد استيراد المكتبات المطلوبة، يمكنك تحميل الملف دردشة لاما-2 7ب النموذج جنبًا إلى جنب مع الرموز المميزة الخاصة به من 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 في مدينة نيويورك مغلق حاليًا للزيارات بسبب جائحة فيروس كورونا (COVID-19). ومع ذلك، يمكنك التحقق من موقعهم الرسمي على الإنترنت أو حساباتهم على وسائل التواصل الاجتماعي لمعرفة أي تحديثات حول موعد إعادة فتح المركز. وفي هذه الأثناء، يمكنك استكشاف جولاتهم الافتراضية ومواردهم المتاحة عبر الإنترنت.

قم بتحسين الإجابة عن طريق إضافة سياق إلى الموجه

الجواب الذي أنشأناه ليس صحيحا تماما. دعونا نرى ما إذا كان بإمكاننا تحسينه من خلال توفير بعض السياق. يمكنك إضافة مقتطف من هذا المنصب تعلن AWS عن مركز تجربة العملاء الجديد للرصد والتقييم في نيويورك، والذي يتضمن تحديثات حول الموضوع اعتبارًا من عام 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)

الرد الجديد يجيب على السؤال بمعلومات حديثة:

يمكنك زيارة مركز تجربة عملاء AWS M&E في مدينة نيويورك بدءًا من 13 نوفمبر. يرجى إرسال بريد إلكتروني إلى AWS-MediaEnt-CXC@amazon.com لتحديد موعد الزيارة.

لقد أكدنا أنه من خلال إضافة السياق الصحيح، يتم تحسين أداء النموذج. يمكنك الآن تركيز جهودك على إيجاد وإضافة السياق المناسب للسؤال المطروح. بمعنى آخر، قم بتنفيذ RAG.

تنفيذ الإجابة على أسئلة RAG باستخدام تضمينات BGE وPinecone

في هذه المرحلة، يجب عليك تحديد مصادر المعلومات لتعزيز معرفة النموذج. يمكن أن تكون هذه المصادر صفحات ويب داخلية أو مستندات داخل مؤسستك، أو مصادر بيانات متاحة للعامة. ولأغراض هذا المنشور ومن أجل التبسيط، اخترنا منشورين على مدونة AWS تم نشرهما في عام 2023:

هذه المنشورات متاحة بالفعل كمستندات PDF في دليل مشروع البيانات في SageMaker Studio للوصول إليها بسرعة. لتقسيم المستندات إلى أجزاء يمكن التحكم فيها، يمكنك استخدام 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-صغير-ar التي أنشأتها أكاديمية بكين للذكاء الاصطناعي (BAAI) المتوفر على Hugging Face لإنشاء تضمينات هذه القطع. قم بتنزيل النموذج وحفظه في الدليل المحلي في الاستوديو. نحن نستخدم 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()

استخدم التعليمة البرمجية التالية لإنشاء وظيفة embedding_generator، والتي تأخذ أجزاء المستند كمدخلات وتقوم بإنشاء عمليات التضمين باستخدام نموذج BGE:

# 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))

في هذا المنشور، نعرض سير عمل RAG باستخدام Pinecone، وهو نظام سحابي مُدار ومُدار قاعدة بيانات المتجهات الذي يقدم أيضًا API للبحث عن التشابه. أنت حر في إعادة كتابة الكود التالي لاستخدام قاعدة بيانات المتجهات المفضلة لديك.

نقوم بتهيئة أ عميل بايثون كوز الصنوبر وقم بإنشاء فهرس بحث متجه جديد باستخدام طول مخرجات نموذج التضمين. نحن نستخدم فئة Pinecone المضمنة في LangChain لاستيعاب التضمينات التي أنشأناها في الخطوة السابقة. يحتاج إلى ثلاث معلمات: المستندات المطلوب استيعابها، ووظيفة مولد التضمينات، واسم فهرس 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 استرجاع سؤال وجواب، والذي يعمل على زيادة الموجه الأولي بالمستندات الأكثر تشابهًا من متجر المتجهات. عن طريق الإعداد 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))

نحصل على الجواب التالي:

س: متى يمكنني زيارة مركز تجربة عملاء AWS M&E في مدينة نيويورك؟

ج: يسعدني تقديم المساعدة! وفقًا للسياق، سيكون مركز تجربة عملاء AWS M&E في مدينة نيويورك متاحًا للزيارات بدءًا من 13 نوفمبر. يمكنك إرسال بريد إلكتروني إلى AWS-MediaEnt-CXC@amazon.com لتحديد موعد الزيارة.

وثائق المصدر:

{'page': 4.0, 'source': 'data/AWS تعلن عن مركز جديد لتجربة العملاء للرصد والتقييم في مدينة نيويورك _ AWS for M&E Blog.pdf'}

{'page': 2.0, 'source': 'data/AWS تعلن عن مركز جديد لتجربة العملاء للرصد والتقييم في مدينة نيويورك _ AWS for M&E Blog.pdf'}

دعونا نجرب سؤالًا مختلفًا:

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

نحصل على الجواب التالي:

س: ما عدد الجوائز التي فازت بها AWS Media Services في عام 2023؟

ج: وفقًا لمنشور المدونة، فازت AWS Media Services بخمس جوائز صناعية في عام 2023.

وثائق المصدر:

{'page': 0.0, 'source': 'data/AWS Media Services تحصل على جوائز صناعية _ AWS for M&E Blog.pdf'}

{'page': 1.0, 'source': 'data/AWS Media Services تحصل على جوائز صناعية _ AWS for M&E Blog.pdf'}

بعد إنشاء مستوى كافٍ من الثقة، يمكنك نشر النماذج إلى نقاط نهاية SageMaker للاستدلال في الوقت الفعلي. تتم إدارة نقاط النهاية هذه بالكامل وتوفر الدعم للقياس التلقائي.

يقدم SageMaker استدلالًا كبيرًا للنماذج باستخدام حاويات استدلال النماذج الكبيرة (LMIs)، والتي يمكننا استخدامها لنشر نماذجنا. تأتي هذه الحاويات مجهزة بمكتبات مفتوحة المصدر مثبتة مسبقًا مثل DeepSpeed، مما يسهل تنفيذ تقنيات تحسين الأداء مثل توازي الموتر أثناء الاستدلال. بالإضافة إلى ذلك، يستخدمون DJLServing كخادم نموذجي متكامل تم إنشاؤه مسبقًا. DJLServing هو حل عالمي عالي الأداء لخدمة النماذج يوفر الدعم للتجميع الديناميكي والقياس التلقائي للعامل، وبالتالي زيادة الإنتاجية.

في نهجنا، نستخدم SageMaker LMI مع DJLServing وDeepSpeed ​​Inference لنشر نماذج Llama-2-chat 7b وBGE إلى نقاط نهاية SageMaker التي تعمل على ml.g5.2xlarge الحالات، مما يتيح الاستدلال في الوقت الحقيقي. إذا أردت أن تتبع هذه الخطوات بنفسك، راجع المرفق مفكرة للحصول على تعليمات مفصلة.

سوف تحتاج إلى اثنين ml.g5.2xlarge حالات النشر. لمراجعة حصتك أو زيادتها، افتح وحدة تحكم AWS Service Quotas، واختر خدمات AWS في جزء التنقل ، اختر الأمازون SageMaker، والرجوع إلى قيمة ml.g5.2xlarge لاستخدام نقطة النهاية.

توضح الخطوات التالية عملية نشر النماذج المخصصة لسير عمل RAG على نقطة نهاية SageMaker:

  • انشر ملف اللاما-2 7 ب نموذج الدردشة إلى نقطة نهاية SageMaker في الوقت الفعلي التي تعمل على ml.g5.2xlarge مثال لإنشاء نص سريع.
  • انشر ملف BAAI/bge-small-en-v1.5 نموذج التضمين لنقطة نهاية SageMaker في الوقت الفعلي التي تعمل على ml.g5.2xlarge مثال. وبدلاً من ذلك، يمكنك نشر نموذج التضمين الخاص بك.
  • اطرح سؤالاً واستخدم LangChain استرجاع سؤال وجواب لتعزيز المطالبة بالمستندات الأكثر تشابهًا من Pinecone، هذه المرة باستخدام النموذج المنشور في نقطة النهاية في الوقت الفعلي لـ SageMaker:
# 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 طريقة مباشرة لبدء رحلتك باستخدام برنامج Retrieval Augmented Generation. إنها تسمح لك بالتجربة بشكل تفاعلي مع العديد من النماذج والتكوينات والأسئلة دون تشغيل بنية تحتية إضافية. في هذا المنشور، أظهرنا كيفية تحسين أداء دردشة Llama 2 7b في سؤال يجيب على حالة الاستخدام باستخدام LangChain، ونموذج تضمينات BGE، وPinecone. للبدء، قم بتشغيل SageMaker Studio وقم بتشغيل مفكرة متوفر في ما يلي جيثب ريبو. رجاء شارك أفكارك في قسم التعليقات!


عن المؤلفين

أناستاسيا تسيفيليكا هو مهندس حلول التعلم الآلي والذكاء الاصطناعي في AWS. تعمل مع العملاء في أوروبا والشرق الأوسط وإفريقيا وتساعدهم في تصميم حلول التعلم الآلي على نطاق واسع باستخدام خدمات AWS. عملت في مشاريع في مجالات مختلفة بما في ذلك معالجة اللغة الطبيعية (NLP) و MLOps وأدوات Low Code No Code.

براناف مورثي هو مهندس حلول متخصص في الذكاء الاصطناعي / التعلم الآلي في AWS. يركز على مساعدة العملاء في بناء وتدريب ونشر وترحيل أعباء عمل التعلم الآلي (ML) إلى SageMaker. عمل سابقًا في صناعة أشباه الموصلات في تطوير نماذج الرؤية الحاسوبية الكبيرة (CV) ومعالجة اللغة الطبيعية (NLP) لتحسين عمليات أشباه الموصلات. في أوقات فراغه ، يستمتع بلعب الشطرنج والسفر.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة