يعمل الجيل المعزز للاسترجاع (RAG) على تحسين إنشاء النص باستخدام نموذج لغة كبير من خلال دمج المعرفة الجديدة بالمجال المخزنة في مخزن بيانات خارجي. يعد فصل بيانات شركتك عن المعرفة التي تعلمتها نماذج اللغة أثناء التدريب أمرًا ضروريًا لتحقيق التوازن بين الأداء والدقة وأهداف الخصوصية الأمنية.
في هذه المدونة، ستتعلم كيف يمكن لشركة Intel مساعدتك في تطوير ونشر تطبيقات RAG كجزء من OPEA، النظام الأساسي المفتوح للذكاء الاصطناعي للمؤسسات. سوف تكتشف أيضًا كيف يمكن لمسرعات Intel Gaudi 2 AI ووحدات المعالجة المركزية Xeon تحسين أداء المؤسسة بشكل كبير من خلال حالة استخدام RAG في العالم الحقيقي.
قبل الغوص في التفاصيل، دعونا نصل إلى الأجهزة أولاً. تم تصميم Intel Gaudi 2 خصيصًا لتسريع التدريب على التعلم العميق والاستدلال في مركز البيانات والسحابة. وهو متاح للعامة على Intel Developer Cloud (IDC) وللتطبيقات المحلية. IDC هي الطريقة الأسهل للبدء مع Gaudi 2. إذا لم يكن لديك حساب بعد، فيرجى التسجيل للحصول على حساب، والاشتراك في “Premium”، ثم التقدم بطلب للوصول.
على الجانب البرمجي، سنقوم ببناء تطبيقنا باستخدام LangChain، وهو إطار عمل مفتوح المصدر مصمم لتبسيط إنشاء تطبيقات الذكاء الاصطناعي باستخدام LLMs. فهو يوفر حلولاً قائمة على القوالب، مما يسمح للمطورين ببناء تطبيقات RAG باستخدام عمليات التضمين المخصصة وقواعد بيانات المتجهات وLLMs. توفر وثائق LangChain المزيد من المعلومات. لقد ساهمت Intel بشكل نشط في تحسينات متعددة لـ LangChain، مما يمكّن المطورين من نشر تطبيقات GenAI بكفاءة على منصات Intel.
في LangChain، سوف نستخدم rag-redis قالب لإنشاء تطبيق RAG الخاص بنا، باستخدام نموذج التضمين BAAI/bge-base-en-v1.5 وRedis كقاعدة بيانات المتجهات الافتراضية. يوضح الرسم البياني أدناه البنية عالية المستوى.

سيتم تشغيل نموذج التضمين على وحدة المعالجة المركزية Intel Granite Rapids. تم تحسين بنية Intel Granite Rapids لتقديم أقل تكلفة إجمالية للملكية (TCO) لأحمال العمل الحساسة للأداء عالي النواة وأحمال عمل الحوسبة للأغراض العامة. يدعم GNR أيضًا مجموعة تعليمات AMX-FP16، مما يؤدي إلى زيادة الأداء بمقدار 2-3x لأحمال عمل الذكاء الاصطناعي المختلطة.
سيتم تشغيل LLM على مسرع Intel Gaudi 2. فيما يتعلق بنماذج Hugging Face، فإن مكتبة Optimum Habana هي الواجهة بين مكتبتي Hugging Face Transformers وDiffusers وGaudi. فهو يوفر أدوات لسهولة تحميل النموذج والتدريب والاستدلال على إعدادات البطاقة الفردية والمتعددة لمختلف المهام النهائية.
نحن نقدم ملف Dockerfile لتبسيط عملية إعداد بيئة تطوير LangChain. بمجرد إطلاق حاوية Docker، يمكنك البدء في إنشاء قاعدة بيانات المتجهات وخط أنابيب RAG وتطبيق LangChain داخل بيئة Docker. للحصول على تفاصيل خطوة بخطوة، اتبع مثال ChatQnA.
لملء قاعدة بيانات المتجهات، نستخدم المستندات المالية العامة من Nike. هنا هو رمز العينة.
# Ingest PDF files that contain Edgar 10k filings data for Nike.
company_name = "Nike"
data_path = "data"
doc_path = [os.path.join(data_path, file) for file in os.listdir(data_path)][0]
content = pdf_loader(doc_path)
chunks = text_splitter.split_text(content)
# Create vectorstore
embedder = HuggingFaceEmbeddings(model_name=EMBED_MODEL)
_ = Redis.from_texts(
texts=[f"Company: company_name. " + chunk for chunk in chunks],
embedding=embedder,
index_name=INDEX_NAME,
index_schema=INDEX_SCHEMA,
redis_url=REDIS_URL,
)
في LangChain، نستخدم Chain API لتوصيل الموجه وقاعدة بيانات المتجهات ونموذج التضمين.
الكود الكامل متاح في المستودع.
# Embedding model running on Xeon CPU
embedder = HuggingFaceEmbeddings(model_name=EMBED_MODEL)
# Redis vector database
vectorstore = Redis.from_existing_index(
embedding=embedder, index_name=INDEX_NAME, schema=INDEX_SCHEMA, redis_url=REDIS_URL
)
# Retriever
retriever = vectorstore.as_retriever(search_type="mmr")
# Prompt template
template = """…"""
prompt = ChatPromptTemplate.from_template(template)
# Hugging Face LLM running on Gaudi 2
model = HuggingFaceEndpoint(endpoint_url=TGI_LLM_ENDPOINT, …)
# RAG chain
chain = (
RunnableParallel("context": retriever, "question": RunnablePassthrough()) | prompt | model | StrOutputParser()
).with_types(input_type=Question)
سنقوم بتشغيل نموذج الدردشة الخاص بنا على Gaudi2 باستخدام خادم Hugging Face Text Generation Inference (TGI). يتيح هذا المزيج إمكانية إنشاء نص عالي الأداء لبرامج LLM الشهيرة مفتوحة المصدر على أجهزة Gaudi2، مثل MPT وLlama وMistral.
لا يلزم الإعداد. يمكننا استخدام صورة Docker مُصممة مسبقًا وتمرير اسم النموذج (على سبيل المثال، Intel NeuralChat).
model=Intel/neural-chat-7b-v3-3
volume=$PWD/data
docker run -p 8080:80 -v $volume:/data --runtime=habana -e HABANA_VISIBLE_DEVICES=all -e OMPI_MCA_btl_vader_single_copy_mechanism=none --cap-add=sys_nice --ipc=host tgi_gaudi --model-id $model
تستخدم الخدمة مسرع Gaudi واحدًا بشكل افتراضي. قد تكون هناك حاجة إلى مسرعات متعددة لتشغيل نموذج أكبر (على سبيل المثال، 70B). في هذه الحالة، يرجى إضافة المعلمات المناسبة، على سبيل المثال --sharded true و --num_shard 8. بالنسبة للنماذج المسورة مثل Llama أو StarCoder، ستحتاج أيضًا إلى التحديد -e HUGGING_FACE_HUB_TOKEN=<token> باستخدام رمز الوجه المعانق الخاص بك.
بمجرد تشغيل الحاوية، نتحقق من عمل الخدمة عن طريق إرسال طلب إلى نقطة نهاية TGI.
curl localhost:8080/generate -X POST \
-d '"inputs":"Which NFL team won the Super Bowl in the 2010 season?", \
"parameters":"max_new_tokens":128, "do_sample": true' \
-H 'Content-Type: application/json'
إذا رأيت استجابة تم إنشاؤها، فهذا يعني أن LLM يعمل بشكل صحيح ويمكنك الآن الاستمتاع بالاستدلال عالي الأداء على Gaudi 2!
تستخدم حاوية TGI Gaudi نوع البيانات bfloat16 بشكل افتراضي. للحصول على إنتاجية أعلى، قد ترغب في تمكين تكميم FP8. وفقًا لنتائج الاختبار التي أجريناها، ينبغي أن يؤدي تكميم FP8 إلى زيادة في الإنتاجية بمعدل 1.8x مقارنةً بـ BF16. تتوفر تعليمات FP8 في ملف README.
وأخيرًا، يمكنك تمكين الإشراف على المحتوى باستخدام نموذج Meta Llama Guard. يوفر ملف README تعليمات لنشر Llama Guard على TGI Gaudi.
نستخدم الإرشادات التالية لبدء تشغيل خدمة الواجهة الخلفية لتطبيق RAG. ال server.py يحدد البرنامج النصي نقاط نهاية الخدمة باستخدام fastAPI.
docker exec -it qna-rag-redis-server bash
nohup python app/server.py &
افتراضيًا، من المتوقع أن تعمل نقطة نهاية TGI Gaudi على المضيف المحلي عند المنفذ 8080 (أي http://127.0.0.1:8080). إذا كان يعمل على عنوان أو منفذ مختلف، فيرجى تعيين TGI_ENDPOINT متغير البيئة وفقا لذلك.
نستخدم الإرشادات أدناه لتثبيت مكونات واجهة المستخدم الرسومية الأمامية.
sudo apt-get install npm && \
npm install -g n && \
n stable && \
hash -r && \
npm install -g npm@latest
ثم نقوم بتحديث DOC_BASE_URL متغير البيئة في .env الملف عن طريق استبدال عنوان IP للمضيف المحلي (127.0.0.1) بعنوان IP الفعلي للخادم الذي يتم تشغيل واجهة المستخدم الرسومية عليه.
نقوم بتشغيل الأمر التالي لتثبيت التبعيات المطلوبة:
npm install
أخيرًا، نبدأ خادم واجهة المستخدم الرسومية (GUI) بالأمر التالي:
nohup npm run dev &
سيؤدي هذا إلى تشغيل خدمة الواجهة الأمامية وتشغيل التطبيق.

لقد أجرينا تجارب مكثفة على نماذج وتكوينات مختلفة. يوضح الشكلان أدناه الإنتاجية النسبية والأداء لكل دولار لنموذج Llama2-70B مع 16 مستخدمًا متزامنًا على أربع منصات Intel Gaudi 2 وأربع منصات Nvidia H100.


في كلتا الحالتين، يتم استخدام نفس منصة Intel Granite Rapids CPU لقواعد بيانات المتجهات ونماذج التضمين. لمقارنة الأداء لكل دولار، نستخدم الأسعار المتاحة للجمهور لحساب متوسط أداء التدريب لكل دولار، وهو نفس الأداء الذي أبلغ عنه فريق MosaicML في يناير 2024.
كما ترون، يتمتع النظام المستند إلى H100 بإنتاجية أكبر بمقدار 1.13 مرة، لكنه لا يمكنه تقديم سوى أداء بمعدل 0.44 مرة لكل دولار مقارنةً بـ Gaudi 2. وقد تختلف هذه المقارنات بناءً على الخصومات الخاصة بالعميل على موفري الخدمات السحابية المختلفين. يتم سرد التكوينات القياسية التفصيلية في نهاية المنشور.
يوضح المثال أعلاه للنشر بنجاح برنامج chatbot قائم على RAG على منصات Intel. علاوة على ذلك، مع استمرار إنتل في إطلاق أمثلة GenAI الجاهزة للاستخدام، يستفيد المطورون من الأدوات المعتمدة التي تعمل على تبسيط عملية الإنشاء والنشر. توفر هذه الأمثلة تنوعًا وسهولة في التخصيص، مما يجعلها مثالية لمجموعة واسعة من التطبيقات على منصات Intel.
عند تشغيل تطبيقات الذكاء الاصطناعي للمؤسسات، تكون التكلفة الإجمالية للملكية أكثر ملاءمة مع الأنظمة المستندة إلى وحدات المعالجة المركزية Intel Granite Rapids ومسرعات Gaudi 2. يمكن تحقيق المزيد من التحسينات من خلال تحسين FP8.
من المفترض أن تساعدك موارد المطورين التالية على بدء مشاريع GenAI الخاصة بك بثقة.
إذا كانت لديك أسئلة أو تعليقات، فنحن نحب الإجابة عليها في منتدى Hugging Face. شكرا للقراءة!
شكر وتقدير: نود أن نشكر تشيتانيا خيند، وسويو تشين، وميكولاج زيكزينسكي، ووينجياو يو، ووينكسين تشانغ، وليتونج هان، وسيهان تشين، وهانوين تشينج، ويوان وو، ويي وانغ على مساهماتهم المتميزة في بناء أنظمة RAG على مستوى المؤسسات على Intel Gaudi 2.
التكوينات المرجعية
-
تكوينات Gaudi2: HLS-Gaudi2 مع ثماني بطاقات Habana Gaudi2 HL-225H Mezzanine ووحدتي Intel® Xeon® Platinum 8380 CPU @ 2.30 جيجا هرتز، و1 تيرابايت من ذاكرة النظام؛ نظام التشغيل: أوبونتو 22.04.03، 5.15.0 النواة
-
تكوينات H100 SXM: مثيل مختبرات Lambda gpu_8x_h100_sxm5؛ 8xH100 SXM ووحدتي Intel Xeon® Platinum 8480 CPU بسرعة 2 جيجاهرتز و1.8 تيرابايت من ذاكرة النظام؛ نظام التشغيل أوبونتو 20.04.6 LTS، 5.15.0 النواة
-
Intel Xeon: منصة Granite Rapids لمرحلة ما قبل الإنتاج مع 2Sx120C @ 1.9 جيجا هرتز و8800 MCR DIMMs مع ذاكرة نظام سعة 1.5 تيرابايت. نظام التشغيل: Cent OS 9، نواة 6.2.0
-
يتم نشر Llama2 70B على 4 بطاقات (تم تسوية الاستعلامات إلى 8 بطاقات). BF16 لـ Gaudi2 وFP16 لـ H100.
-
نموذج التضمين هو BAAI/bge-base v1.5. تم الاختبار باستخدام: TGI-gaudi 1.2.1 وTGI-GPU 1.4.5 Python 3.11.7 وLangchain 0.1.11 ومحولات الجملة 2.5.1 ومقاييس langchain 0.0.10 وredis 5.0.2 وcuda 12.2.r12.2/compiler.32965470 0 وTEI 1.2.0,
-
تستعلم RAG عن الحد الأقصى لطول الإدخال 1024، والحد الأقصى لطول الإخراج 128. مجموعة بيانات الاختبار: langsmith Q&A. عدد العملاء المتزامنين 16
-
معلمات TGI لـ Gaudi2 (70B):
batch_bucket_size=22,prefill_batch_bucket_size=4,max_batch_prefill_tokens=5102,max_batch_total_tokens=32256,max_waiting_tokens=5,streaming=false -
معلمات TGI لـ H100 (70B):
batch_bucket_size=8,prefill_batch_bucket_size=4,max_batch_prefill_tokens=4096,max_batch_total_tokens=131072,max_waiting_tokens=20,max_batch_size=128,streaming=false -
مرجع التكلفة الإجمالية للملكية: https://www.databricks.com/blog/llm-training-and-inference-intel-gaudi2-ai-accelerators
