जेफिरनेट लोगो

तेजी से प्रयोग के लिए लामा 2, लैंगचेन और पाइनकोन के साथ आरएजी प्रश्न उत्तर समाधान बनाने के लिए अमेज़ॅन सेजमेकर स्टूडियो का उपयोग करें | अमेज़न वेब सेवाएँ

दिनांक:

रिट्रीवल ऑगमेंटेड जेनरेशन (आरएजी) आपको एक बड़े भाषा मॉडल (एलएलएम) को बाहरी ज्ञान स्रोतों जैसे रिपॉजिटरी, डेटाबेस और एपीआई से डेटा तक पहुंच प्रदान करने की अनुमति देता है, बिना इसे ठीक करने की आवश्यकता के। प्रश्न उत्तर देने के लिए जेनरेटिव एआई का उपयोग करते समय, आरएजी एलएलएम को सबसे अधिक प्रासंगिक, अद्यतित जानकारी के साथ प्रश्नों का उत्तर देने और सत्यापन के लिए वैकल्पिक रूप से अपने डेटा स्रोतों का हवाला देने में सक्षम बनाता है।

दस्तावेज़ों से ज्ञान पुनर्प्राप्ति के लिए एक विशिष्ट RAG समाधान डेटा स्रोतों से डेटा को एम्बेडिंग में परिवर्तित करने के लिए एक एम्बेडिंग मॉडल का उपयोग करता है और इन एम्बेडिंग को एक वेक्टर डेटाबेस में संग्रहीत करता है। जब कोई उपयोगकर्ता कोई प्रश्न पूछता है, तो यह वेक्टर डेटाबेस खोजता है और उन दस्तावेज़ों को पुनर्प्राप्त करता है जो उपयोगकर्ता की क्वेरी के समान होते हैं। इसके बाद, यह पुनर्प्राप्त दस्तावेज़ों और उपयोगकर्ता की क्वेरी को एक संवर्धित प्रॉम्प्ट में जोड़ता है जो टेक्स्ट जेनरेशन के लिए एलएलएम को भेजा जाता है। इस कार्यान्वयन में दो मॉडल हैं: एम्बेडिंग मॉडल और एलएलएम जो अंतिम प्रतिक्रिया उत्पन्न करता है।

इस पोस्ट में, हम प्रदर्शित करते हैं कि कैसे उपयोग करें अमेज़ॅन सैजमेकर स्टूडियो RAG प्रश्न उत्तर समाधान बनाने के लिए।

RAG-आधारित प्रश्नों के उत्तर देने के लिए नोटबुक का उपयोग करना

RAG को लागू करने में आमतौर पर विभिन्न एम्बेडिंग मॉडल, वेक्टर डेटाबेस, टेक्स्ट जेनरेशन मॉडल और प्रॉम्प्ट के साथ प्रयोग करना शामिल होता है, साथ ही जब तक आप एक कार्यात्मक प्रोटोटाइप प्राप्त नहीं कर लेते, तब तक आपके कोड को डीबग करना भी शामिल होता है। अमेज़न SageMaker GPU इंस्टेंसेस से सुसज्जित प्रबंधित ज्यूपिटर नोटबुक प्रदान करता है, जो आपको अतिरिक्त बुनियादी ढांचे को बनाए बिना इस प्रारंभिक चरण के दौरान तेजी से प्रयोग करने में सक्षम बनाता है। सेजमेकर में नोटबुक का उपयोग करने के लिए दो विकल्प हैं। पहला विकल्प है तेज़ लॉन्च पुस्तिकाओं सेजमेकर स्टूडियो के माध्यम से उपलब्ध है। सेजमेकर स्टूडियो में, एमएल के लिए उद्देश्य से निर्मित एकीकृत विकास वातावरण (आईडीई), आप नोटबुक लॉन्च कर सकते हैं जो विभिन्न इंस्टेंस प्रकारों पर और विभिन्न कॉन्फ़िगरेशन के साथ चलते हैं, सहकर्मियों के साथ सहयोग करते हैं, और मशीन लर्निंग (एमएल) के लिए अतिरिक्त उद्देश्य-निर्मित सुविधाओं तक पहुंच सकते हैं। दूसरा विकल्प a का उपयोग कर रहा है SageMaker नोटबुक उदाहरण, जो ज्यूपिटर नोटबुक ऐप चलाने वाला एक पूरी तरह से प्रबंधित एमएल कंप्यूट इंस्टेंस है।

इस पोस्ट में, हम एक RAG समाधान प्रस्तुत करते हैं जो कस्टम डोमेन के लिए विशिष्ट अधिक सटीक प्रतिक्रियाएँ प्रदान करने के लिए बाहरी ज्ञान स्रोतों से अतिरिक्त डेटा के साथ मॉडल के ज्ञान को बढ़ाता है। हम एक पर चलने वाले एकल सेजमेकर स्टूडियो नोटबुक का उपयोग करते हैं ml.g5.2xlarge उदाहरण (1 A10G GPU) और लामा 2 7बी चैट एचएफ, लामा 2 7बी का परिष्कृत संस्करण, जो हगिंग फेस हब से संवाद उपयोग के मामलों के लिए अनुकूलित है। हम नमूना बाहरी डेटा के रूप में दो AWS मीडिया और मनोरंजन ब्लॉग पोस्ट का उपयोग करते हैं, जिन्हें हम एम्बेडिंग में परिवर्तित करते हैं BAAI/bge-small-en-v1.5 एम्बेडिंग. हम एंबेडिंग्स को स्टोर करते हैं सनोबर की चिलग़ोज़ा, एक वेक्टर-आधारित डेटाबेस जो उच्च-प्रदर्शन खोज और समानता मिलान प्रदान करता है। हम इस बात पर भी चर्चा करते हैं कि जब आप अपना प्रोटोटाइप पूरा कर लें तो वास्तविक समय के अनुमान के लिए नोटबुक में प्रयोग करने से लेकर सेजमेकर एंडपॉइंट पर अपने मॉडलों को तैनात करने तक कैसे बदलाव करें। एक ही दृष्टिकोण का उपयोग विभिन्न मॉडलों और वेक्टर डेटाबेस के साथ किया जा सकता है।

समाधान अवलोकन

निम्नलिखित चित्र समाधान वास्तुकला को दर्शाता है।

समाधान को लागू करने में दो उच्च-स्तरीय चरण शामिल हैं: सेजमेकर स्टूडियो नोटबुक का उपयोग करके समाधान विकसित करना, और अनुमान के लिए मॉडल तैनात करना।

सेजमेकर स्टूडियो नोटबुक का उपयोग करके समाधान विकसित करें

समाधान विकसित करना शुरू करने के लिए निम्नलिखित चरणों को पूरा करें:

  1. हगिंग फेस हब से लामा-2 7बी चैट मॉडल को नोटबुक में लोड करें।
  2. के साथ एक प्रॉम्प्ट टेम्पलेट बनाएं लैंगचैन और अपने उपयोग के मामले के लिए संकेत बनाने के लिए इसका उपयोग करें।
  3. 1-2 उदाहरण संकेतों के लिए, बाहरी दस्तावेज़ों से प्रासंगिक स्थिर पाठ को त्वरित संदर्भ के रूप में जोड़ें और मूल्यांकन करें कि प्रतिक्रियाओं की गुणवत्ता में सुधार हुआ है या नहीं।
  4. यह मानते हुए कि गुणवत्ता में सुधार हुआ है, RAG प्रश्न उत्तर वर्कफ़्लो लागू करें:
    • बाहरी दस्तावेज़ इकट्ठा करें जो मॉडल को आपके उपयोग के मामले में प्रश्नों का बेहतर उत्तर देने में मदद कर सकें।
    • BGE एम्बेडिंग मॉडल लोड करें और इन दस्तावेज़ों की एम्बेडिंग उत्पन्न करने के लिए इसका उपयोग करें।
    • इन एंबेडिंग्स को पाइनकोन इंडेक्स में स्टोर करें।
    • जब कोई उपयोगकर्ता कोई प्रश्न पूछता है, तो पाइनकोन में एक समानता खोज करें और सबसे समान दस्तावेज़ों से सामग्री को प्रॉम्प्ट के संदर्भ में जोड़ें।

पैमाने पर अनुमान के लिए मॉडलों को सेजमेकर पर तैनात करें

जब आप अपने प्रदर्शन लक्ष्यों को प्राप्त कर लेते हैं, तो आप जेनेरिक एआई अनुप्रयोगों द्वारा उपयोग किए जाने वाले मॉडलों को सेजमेकर पर तैनात कर सकते हैं:

  1. Llama-2 7b चैट मॉडल को SageMaker रीयल-टाइम एंडपॉइंट पर तैनात करें।
  2. तैनात करें BAAI/bge-small-en-v1.5 मॉडल को सेजमेकर रीयल-टाइम एंडपॉइंट पर एम्बेड करना।
  3. जेनेरिक एआई अनुप्रयोगों का उत्तर देते हुए अपने प्रश्न में तैनात मॉडल का उपयोग करें।

निम्नलिखित अनुभागों में, हम आपको सेजमेकर स्टूडियो नोटबुक में इस समाधान को लागू करने के चरणों के बारे में बताते हैं।

.. पूर्वापेक्षाएँ

इस पोस्ट में दिए गए चरणों का पालन करने के लिए, आपके पास एक AWS खाता और एक होना चाहिए AWS पहचान और अभिगम प्रबंधन समाधान संसाधनों को बनाने और उन तक पहुंचने की अनुमति के साथ (IAM) भूमिका। यदि आप AWS में नए हैं, तो देखें एक स्टैंडअलोन AWS खाता बनाएं.

अपने AWS खाते में सेजमेकर स्टूडियो नोटबुक का उपयोग करने के लिए, आपको एक की आवश्यकता होगी सेजमेकर डोमेन एक उपयोगकर्ता प्रोफ़ाइल के साथ जिसके पास सेजमेकर स्टूडियो ऐप लॉन्च करने की अनुमति है। यदि आप सेजमेकर स्टूडियो में नए हैं, तो त्वरित स्टूडियो सेटअप आरंभ करने का सबसे तेज़ तरीका है. एक क्लिक के साथ, सेजमेकर सेजमेकर डोमेन को डिफ़ॉल्ट प्रीसेट के साथ प्रावधानित करता है, जिसमें उपयोगकर्ता प्रोफ़ाइल, आईएएम भूमिका, आईएएम प्रमाणीकरण और सार्वजनिक इंटरनेट एक्सेस सेट करना शामिल है। इस पोस्ट के लिए नोटबुक एक मानती है ml.g5.2xlarge उदाहरण प्रकार. अपने कोटा की समीक्षा करने या बढ़ाने के लिए, AWS सेवा कोटा कंसोल खोलें, चुनें एडब्ल्यूएस सेवाएँ नेविगेशन फलक में, चुनें अमेज़न SageMaker, और चल रहे स्टूडियो कर्नेलगेटवे ऐप्स के लिए मान देखें ml.g5.2xlarge उदाहरणों।

अपनी कोटा सीमा की पुष्टि करने के बाद, आपको लामा 2 7बी चैट का उपयोग करने के लिए निर्भरताएँ पूरी करनी होंगी।

लामा 2 7बी चैट के अंतर्गत उपलब्ध है लामा 2 लाइसेंस. हगिंग फेस पर लामा 2 तक पहुंचने के लिए, आपको पहले कुछ चरण पूरे करने होंगे:

  1. यदि आपके पास पहले से कोई हगिंग फेस खाता नहीं है तो एक हगिंग फेस खाता बनाएं।
  2. मेटा पर "लामा के अगले संस्करण तक पहुंच का अनुरोध करें" फ़ॉर्म को पूरा करें वेबसाइट .
  3. तक पहुंच का अनुरोध करें लामा 2 7बी चैट गले मिलते चेहरे पर.

आपको पहुंच प्रदान किए जाने के बाद, आप मॉडल तक पहुंच के लिए एक नया एक्सेस टोकन बना सकते हैं। एक्सेस टोकन बनाने के लिए, पर नेविगेट करें सेटिंग हगिंग फेस वेबसाइट पर पेज।

इसे वेक्टर डेटाबेस के रूप में उपयोग करने के लिए आपके पास पाइनकोन में एक खाता होना चाहिए। पाइनकोन AWS पर उपलब्ध है एडब्ल्यूएस बाज़ार. पाइनकोन वेबसाइट एक बनाने का विकल्प भी प्रदान करती है नि: शुल्क खाता यह एकल सूचकांक बनाने की अनुमति के साथ आता है, जो इस पोस्ट के प्रयोजनों के लिए पर्याप्त है। अपनी पाइनकोन कुंजियाँ पुनः प्राप्त करने के लिए, खोलें पाइनकोन कंसोल और चुनें एपीआई कुंजी.

नोटबुक और परिवेश सेट करें

इस पोस्ट में कोड का पालन करने के लिए, सेजमेकर स्टूडियो खोलें और निम्नलिखित को क्लोन करें गिटहब भंडार. इसके बाद, नोटबुक खोलें स्टूडियो-लोकल-जेन-एआई/रैग/आरएजी-विद-लामा-2-ऑन-स्टूडियो.आईपीवाईएनबी और PyTorch 2.0.0 Python 3.10 GPU अनुकूलित छवि, Python 3 कर्नेल, और चुनें ml.g5.2xlarge उदाहरण प्रकार के रूप में। यदि आप पहली बार सेजमेकर स्टूडियो नोटबुक का उपयोग कर रहे हैं, तो देखें Amazon SageMaker स्टूडियो नोटबुक बनाएं या खोलें.

विकास वातावरण स्थापित करने के लिए, आपको आवश्यक पायथन लाइब्रेरी स्थापित करने की आवश्यकता है, जैसा कि निम्नलिखित कोड में दिखाया गया है:

%%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बी चैट हगिंग फेस से इसके संबंधित टोकननाइज़र के साथ मॉडल। ये लोडेड मॉडल कलाकृतियाँ सेजमेकर स्टूडियो के भीतर स्थानीय निर्देशिका में संग्रहीत हैं। जब भी आपको किसी अलग समय पर अपना काम फिर से शुरू करने की आवश्यकता होती है तो यह आपको उन्हें मेमोरी में तेजी से पुनः लोड करने में सक्षम बनाता है।

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)

ऐसा प्रश्न पूछें जिसके लिए अद्यतन जानकारी की आवश्यकता हो

अब आप मॉडल का उपयोग शुरू कर सकते हैं और प्रश्न पूछ सकते हैं। लामा-2 चैट मॉडल उम्मीद करते हैं कि संकेत निम्नलिखित प्रारूप का पालन करेगा:

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

आप का उपयोग कर सकते हैं संकेत टेम्पलेट प्रॉम्प्ट प्रारूप के आधार पर एक रेसिपी बनाने के लिए लैंगचेन से, ताकि आप आगे चलकर आसानी से प्रॉम्प्ट बना सकें:

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 से नवीनतम जानकारी की आवश्यकता है। आप लैंगचेन और विशेष रूप से उपयोग कर सकते हैं एलएलएमचेन श्रृंखला का प्रकार और एलएलएम को पैरामीटर के रूप में पास करें, आपके द्वारा पहले बनाया गया प्रॉम्प्ट टेम्पलेट और प्रश्न:

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 ने न्यूयॉर्क में नए 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 नवंबर से न्यूयॉर्क शहर में AWS M&E ग्राहक अनुभव केंद्र पर जा सकते हैं। यात्रा का कार्यक्रम निर्धारित करने के लिए कृपया AWS-MediaEnt-CXC@amazon.com पर एक ईमेल भेजें।

हमने पुष्टि की है कि सही संदर्भ जोड़ने से मॉडल के प्रदर्शन में सुधार होता है। अब आप पूछे गए प्रश्न के लिए सही संदर्भ ढूंढने और जोड़ने पर अपना ध्यान केंद्रित कर सकते हैं। दूसरे शब्दों में, RAG लागू करें।

बीजीई एम्बेडिंग और पाइनकोन के साथ आरएजी प्रश्न उत्तर लागू करें

इस समय, आपको मॉडल के ज्ञान को बढ़ाने के लिए सूचना के स्रोतों पर निर्णय लेना होगा। ये स्रोत आपके संगठन के आंतरिक वेबपेज या दस्तावेज़, या सार्वजनिक रूप से उपलब्ध डेटा स्रोत हो सकते हैं। इस पोस्ट के प्रयोजनों के लिए और सरलता के लिए, हमने 2023 में प्रकाशित दो AWS ब्लॉग पोस्ट को चुना है:

ये पोस्ट त्वरित पहुंच के लिए सेजमेकर स्टूडियो में डेटा प्रोजेक्ट निर्देशिका में पीडीएफ दस्तावेजों के रूप में पहले से ही उपलब्ध हैं। दस्तावेज़ों को प्रबंधनीय भागों में विभाजित करने के लिए, आप इसका उपयोग कर सकते हैं रिकर्सिव कैरेक्टरटेक्स्टस्प्लिटर लैंगचेन से विधि:

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 एम्बेडिंग मॉडल का उपयोग करें बीजीई-छोटा-एन के द्वारा बनाई गई बीजिंग आर्टिफिशियल इंटेलिजेंस अकादमी (बीएएआई) यह इन टुकड़ों की एम्बेडिंग उत्पन्न करने के लिए हगिंग फेस पर उपलब्ध है। मॉडल को स्टूडियो में स्थानीय निर्देशिका में डाउनलोड करें और सहेजें। हम fp32 का उपयोग करते हैं ताकि यह इंस्टेंस के CPU पर चल सके।

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

एम्बेडिंग_जेनरेटर फ़ंक्शन बनाने के लिए निम्नलिखित कोड का उपयोग करें, जो दस्तावेज़ खंडों को इनपुट के रूप में लेता है और बीजीई मॉडल का उपयोग करके एम्बेडिंग उत्पन्न करता है:

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

इस पोस्ट में, हम एक प्रबंधित, क्लाउड-नेटिव, पाइनकोन का उपयोग करके एक आरएजी वर्कफ़्लो प्रदर्शित करते हैं वेक्टर डेटाबेस वह भी एक ऑफर करता है API समानता खोज के लिए. आप अपने पसंदीदा वेक्टर डेटाबेस का उपयोग करने के लिए निम्नलिखित कोड को फिर से लिखने के लिए स्वतंत्र हैं।

हम आरंभ करते हैं a पाइनकोन पायथन क्लाइंट और एम्बेडिंग मॉडल की आउटपुट लंबाई का उपयोग करके एक नया वेक्टर खोज सूचकांक बनाएं। हम पिछले चरण में बनाए गए एम्बेडिंग को समाहित करने के लिए लैंगचेन की अंतर्निहित पाइनकोन क्लास का उपयोग करते हैं। इसे तीन मापदंडों की आवश्यकता है: अंतर्ग्रहण करने के लिए दस्तावेज़, एम्बेडिंग जनरेटर फ़ंक्शन, और पाइनकोन इंडेक्स का नाम।

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 चैट मॉडल को मेमोरी में लोड करने और एम्बेडिंग को पाइनकोन इंडेक्स में एकीकृत करने के साथ, अब आप हमारे प्रश्न-उत्तर उपयोग के मामले में Llama 2 की प्रतिक्रियाओं को बढ़ाने के लिए इन तत्वों को जोड़ सकते हैं। इसे प्राप्त करने के लिए, आप लैंगचेन को नियोजित कर सकते हैं पुनर्प्राप्ति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))

हमें निम्नलिखित उत्तर मिलता है:

प्रश्न: मैं न्यूयॉर्क शहर में AWS M&E ग्राहक अनुभव केंद्र पर कब जा सकता हूं?

उत्तर: मुझे मदद करने में ख़ुशी होगी! संदर्भ के अनुसार, न्यूयॉर्क शहर में AWS M&E ग्राहक अनुभव केंद्र 13 नवंबर से शुरू होने वाली यात्राओं के लिए उपलब्ध होगा। यात्रा का समय निर्धारित करने के लिए आप AWS-MediaEnt-CXC@amazon.com पर एक ईमेल भेज सकते हैं।'

स्रोत दस्तावेज़:

{'पेज': 4.0, 'स्रोत': 'डेटा/एडब्ल्यूएस ने न्यूयॉर्क शहर में नए एम एंड ई ग्राहक अनुभव केंद्र की घोषणा की _ एम एंड ई ब्लॉग के लिए एडब्ल्यूएस.पीडीएफ'}

{'पेज': 2.0, 'स्रोत': 'डेटा/एडब्ल्यूएस ने न्यूयॉर्क शहर में नए एम एंड ई ग्राहक अनुभव केंद्र की घोषणा की _ एम एंड ई ब्लॉग के लिए एडब्ल्यूएस.पीडीएफ'}

आइए एक अलग प्रश्न आज़माएँ:

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

हमें निम्नलिखित उत्तर मिलता है:

प्रश्न: 2023 में AWS मीडिया सर्विसेज ने कितने पुरस्कार जीते हैं?

उत्तर: ब्लॉग पोस्ट के अनुसार, AWS मीडिया सर्विसेज ने 2023 में पांच उद्योग पुरस्कार जीते हैं।'

स्रोत दस्तावेज़:

{'पेज': 0.0, 'स्रोत': 'डेटा/एडब्ल्यूएस मीडिया सर्विसेज को उद्योग सम्मान से सम्मानित किया गया _ एम एंड ई ब्लॉग.पीडीएफ के लिए एडब्ल्यूएस'}

{'पेज': 1.0, 'स्रोत': 'डेटा/एडब्ल्यूएस मीडिया सर्विसेज को उद्योग सम्मान से सम्मानित किया गया _ एम एंड ई ब्लॉग.पीडीएफ के लिए एडब्ल्यूएस'}

आपके द्वारा आत्मविश्वास का पर्याप्त स्तर स्थापित करने के बाद, आप मॉडलों को तैनात कर सकते हैं वास्तविक समय अनुमान के लिए सेजमेकर एंडपॉइंट. ये समापन बिंदु पूरी तरह से प्रबंधित हैं और ऑटो स्केलिंग के लिए समर्थन प्रदान करते हैं।

सेजमेकर बड़े मॉडल अनुमान कंटेनरों (एलएमआई) का उपयोग करके बड़े मॉडल अनुमान प्रदान करता है, जिसका उपयोग हम अपने मॉडल को तैनात करने के लिए कर सकते हैं। ये कंटेनर डीपस्पीड जैसे पूर्व-स्थापित ओपन सोर्स लाइब्रेरीज़ से सुसज्जित हैं, जो अनुमान के दौरान टेन्सर समानता जैसी प्रदर्शन-बढ़ाने वाली तकनीकों के कार्यान्वयन की सुविधा प्रदान करते हैं। इसके अतिरिक्त, वे डीजेएलसर्विंग का उपयोग पूर्व-निर्मित एकीकृत मॉडल सर्वर के रूप में करते हैं। डीजेएलसर्विंग एक उच्च-प्रदर्शन, सार्वभौमिक मॉडल-सर्विंग समाधान है जो गतिशील बैचिंग और वर्कर ऑटो स्केलिंग के लिए समर्थन प्रदान करता है, जिससे थ्रूपुट बढ़ता है।

हमारे दृष्टिकोण में, हम Llama-2-चैट 7b और BGE मॉडल को चल रहे SageMaker एंडपॉइंट पर तैनात करने के लिए DJLServing और DeepSpeed ​​Inference के साथ SageMaker LMI का उपयोग करते हैं। ml.g5.2xlarge उदाहरण, वास्तविक समय अनुमान को सक्षम करना। यदि आप स्वयं इन चरणों का पालन करना चाहते हैं, तो साथ में दिए गए चरणों का संदर्भ लें नोटबुक विस्तृत निर्देशों के लिए।

आपको दो की आवश्यकता होगी ml.g5.2xlarge तैनाती के लिए उदाहरण. अपने कोटा की समीक्षा करने या बढ़ाने के लिए, AWS सेवा कोटा कंसोल खोलें, चुनें एडब्ल्यूएस सेवाएँ नेविगेशन फलक में, चुनें अमेज़न SageMaker, और इसके लिए मान देखें ml.g5.2xlarge समापन बिंदु उपयोग के लिए।

निम्नलिखित चरण सेजमेकर एंडपॉइंट पर आरएजी वर्कफ़्लो के लिए कस्टम मॉडल तैनात करने की प्रक्रिया की रूपरेखा तैयार करते हैं:

  • तैनात करें लामा-2 7बी सेजमेकर रीयल-टाइम एंडपॉइंट पर चैट मॉडल चल रहा है ml.g5.2xlarge तेज़ पाठ निर्माण के लिए उदाहरण।
  • तैनात करें BAAI/bge-small-en-v1.5 एक सेजमेकर रीयल-टाइम एंडपॉइंट पर चलने वाले मॉडल को एम्बेड करना ml.g5.2xlarge उदाहरण। वैकल्पिक रूप से, आप अपना स्वयं का एम्बेडिंग मॉडल तैनात कर सकते हैं।
  • एक प्रश्न पूछें और लैंगचेन का उपयोग करें पुनर्प्राप्तिQA पाइनकोन के सबसे समान दस्तावेज़ों के साथ प्रॉम्प्ट को बढ़ाने के लिए, इस बार सेजमेकर रीयल-टाइम एंडपॉइंट में तैनात मॉडल का उपयोग करके:
# 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}
)
  • यह सत्यापित करने के लिए लैंगचेन का उपयोग करें कि एम्बेडिंग मॉडल के साथ सेजमेकर एंडपॉइंट अपेक्षा के अनुरूप काम करता है ताकि इसका उपयोग भविष्य के दस्तावेज़ अंतर्ग्रहण के लिए किया जा सके:
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']

क्लीन अप

अपने संसाधनों को साफ करने के लिए निम्नलिखित चरणों को पूरा करें:

  • जब आप अपने सेजमेकर स्टूडियो नोटबुक में काम करना समाप्त कर लें, तो सुनिश्चित करें कि आपने इसे बंद कर दिया है ml.g5.2xlarge उदाहरण के लिए स्टॉप आइकन चुनकर किसी भी शुल्क से बचें। आप भी सेट अप कर सकते हैं जीवनचक्र विन्यास स्क्रिप्ट उपयोग न होने पर संसाधनों को स्वचालित रूप से बंद करना।

  • यदि आपने मॉडलों को सेजमेकर एंडपॉइंट्स पर तैनात किया है, तो एंडपॉइंट्स को हटाने के लिए नोटबुक के अंत में निम्नलिखित कोड चलाएँ:
#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.delete_index(index_name)

निष्कर्ष

सेजमेकर नोटबुक रिट्रीवल ऑगमेंटेड जेनरेशन के साथ आपकी यात्रा शुरू करने का एक सीधा तरीका प्रदान करता है। वे आपको अतिरिक्त बुनियादी ढांचे को बनाए बिना विभिन्न मॉडलों, कॉन्फ़िगरेशन और प्रश्नों के साथ इंटरैक्टिव प्रयोग करने की अनुमति देते हैं। इस पोस्ट में, हमने दिखाया कि लैंगचेन, बीजीई एम्बेडिंग मॉडल और पाइनकोन का उपयोग करके प्रश्न उत्तर के उपयोग के मामले में लामा 2 7बी चैट के प्रदर्शन को कैसे बढ़ाया जाए। आरंभ करने के लिए, सेजमेकर स्टूडियो लॉन्च करें और चलाएं नोटबुक निम्नलिखित में उपलब्ध है गीथहब रेपो. कृपया अपने विचार टिप्पणी अनुभाग में साझा करें!


लेखक के बारे में

अनास्तासिया ज़ेवेलेका AWS में मशीन लर्निंग और AI विशेषज्ञ समाधान वास्तुकार हैं। वह EMEA में ग्राहकों के साथ काम करती हैं और उन्हें AWS सेवाओं का उपयोग करके बड़े पैमाने पर मशीन लर्निंग सॉल्यूशंस बनाने में मदद करती हैं। उन्होंने प्राकृतिक भाषा प्रसंस्करण (एनएलपी), एमएलओपीएस और लो कोड नो कोड टूल्स सहित विभिन्न डोमेन में परियोजनाओं पर काम किया है।

प्रणव मूर्ति AWS में AI/ML स्पेशलिस्ट सॉल्यूशंस आर्किटेक्ट हैं। वह ग्राहकों को मशीन लर्निंग (एमएल) वर्कलोड को सेजमेकर में बनाने, प्रशिक्षित करने, तैनात करने और स्थानांतरित करने में मदद करने पर ध्यान केंद्रित करता है। उन्होंने पहले सेमीकंडक्टर उद्योग में सेमीकंडक्टर प्रक्रियाओं को बेहतर बनाने के लिए बड़े कंप्यूटर विज़न (सीवी) और प्राकृतिक भाषा प्रसंस्करण (एनएलपी) मॉडल विकसित करने में काम किया था। अपने खाली समय में वह शतरंज खेलना और यात्रा करना पसंद करते हैं।

स्पॉट_आईएमजी

नवीनतम खुफिया

स्पॉट_आईएमजी