هذا مثال على كيفية نشر LLMs مفتوحة المصدر، مثل BLOOM إلى Amazon SageMaker للاستدلال باستخدام Hugging Face LLM Inference Container الجديدة. سننشر نموذج 12B Pythia Open Assistant Model، وهو برنامج Chat LLM مفتوح المصدر تم تدريبه باستخدام مجموعة بيانات Open Assistant.
يغطي المثال:
- إعداد بيئة التطوير
- استرجع محتوى Hugging Face LLM DLC الجديد
- انشر Open Assistant 12B في Amazon SageMaker
- قم بتشغيل الاستدلال والدردشة مع نموذجنا
- قم بإنشاء Gradio Chatbot مدعومًا من Amazon SageMaker
يمكنك العثور على رمز المثال أيضًا في مستودع دفاتر الملاحظات.
ما هو المحتوى القابل للتنزيل (Hugging Face LLM Inference DLC)؟
Hugging Face LLM DLC عبارة عن حاوية استدلالية جديدة مصممة خصيصًا لنشر LLMs بسهولة في بيئة آمنة ومُدارة. يتم تشغيل المحتوى القابل للتنزيل (DLC) بواسطة استدلال إنشاء النص (TGI)، وهو حل مفتوح المصدر مصمم خصيصًا لنشر وتقديم نماذج اللغات الكبيرة (LLMs). يتيح TGI إنشاء نص عالي الأداء باستخدام Tensor Parallelism والدفعات الديناميكية لأكثر برامج LLM مفتوحة المصدر شيوعًا، بما في ذلك StarCoder وBLOOM وGPT-NeoX وLlama وT5. يتم استخدام استدلال إنشاء النص بالفعل من قبل عملاء مثل IBM، وGrammarly، وتقوم مبادرة Open-Assistant بتنفيذ التحسين لجميع بنيات النماذج المدعومة، بما في ذلك:
بنيات النماذج المدعومة رسميًا هي حاليًا:
من خلال المحتوى القابل للتنزيل (DLC) الجديد من Hugging Face LLM Inference على Amazon SageMaker، يمكن لعملاء AWS الاستفادة من نفس التقنيات التي تدعم تجارب LLM المتزامنة للغاية ومنخفضة زمن الاستجابة مثل HuggingChat وOpenAssistant وInference API لنماذج LLM على Hugging Face Hub.
دعونا نبدأ!
1. إعداد بيئة التطوير
نحن نذهب لاستخدام sagemaker python SDK لنشر BLOOM في Amazon SageMaker. نحتاج إلى التأكد من تكوين حساب AWS و sagemaker تم تثبيت بيثون SDK.
!pip install "sagemaker==2.175.0" --upgrade --quiet
إذا كنت ستستخدم Sagemaker في بيئة محلية، فستحتاج إلى الوصول إلى دور IAM مع الأذونات المطلوبة لـ Sagemaker. يمكنك أن تجد هنا المزيد حول هذا الموضوع.
import sagemaker
import boto3
sess = sagemaker.Session()
sagemaker_session_bucket=None
if sagemaker_session_bucket is None and sess is not None:
sagemaker_session_bucket = sess.default_bucket()
try:
role = sagemaker.get_execution_role()
except ValueError:
iam = boto3.client('iam')
role = iam.get_role(RoleName='sagemaker_execution_role')['Role']['Arn']
sess = sagemaker.Session(default_bucket=sagemaker_session_bucket)
print(f"sagemaker role arn: role")
print(f"sagemaker session region: sess.boto_region_name")
2. قم باسترجاع محتوى Hugging Face LLM DLC الجديد
بالمقارنة مع نشر نماذج Hugging Face العادية، نحتاج أولاً إلى استرداد معرف uri الخاص بالحاوية وتقديمه إلى موقعنا HuggingFaceModel فئة نموذجية مع أ image_uri مشيرا إلى الصورة. لاسترداد محتوى Hugging Face LLM DLC الجديد في Amazon SageMaker، يمكننا استخدام ملف get_huggingface_llm_image_uri الطريقة المقدمة من sagemaker SDK. تسمح لنا هذه الطريقة باسترداد معرف URI الخاص بـ Hugging Face LLM DLC المطلوب بناءً على المحدد backend, session, region، و version. يمكنك العثور على الإصدارات المتاحة هنا
from sagemaker.huggingface import get_huggingface_llm_image_uri
llm_image = get_huggingface_llm_image_uri(
"huggingface",
version="1.0.3"
)
print(f"llm image uri: llm_image")
3. قم بنشر Open Assistant 12B في Amazon SageMaker
ملاحظة: يمكن أن تختلف الحصص النسبية لـ Amazon SageMaker بين الحسابات. إذا تلقيت خطأ يشير إلى أنك تجاوزت حصتك، فيمكنك زيادتها من خلال وحدة تحكم Service Quotas.
لنشر Open Assistant Model في Amazon SageMaker، قمنا بإنشاء ملف HuggingFaceModel فئة النموذج وتحديد تكوين نقطة النهاية لدينا بما في ذلك hf_model_id, instance_type إلخ. سوف نستخدم أ g5.12xlarge نوع المثيل، الذي يحتوي على 4 وحدات معالجة رسوميات NVIDIA A10G وذاكرة GPU سعة 96 جيجابايت.
ملاحظة: يمكننا أيضًا تحسين النشر من حيث التكلفة والاستخدام g5.2xlarge نوع المثيل وتمكين التكميم int-8.
import json
from sagemaker.huggingface import HuggingFaceModel
instance_type = "ml.g5.12xlarge"
number_of_gpu = 4
health_check_timeout = 300
config =
'HF_MODEL_ID': "OpenAssistant/pythia-12b-sft-v8-7k-steps",
'SM_NUM_GPUS': json.dumps(number_of_gpu),
'MAX_INPUT_LENGTH': json.dumps(1024),
'MAX_TOTAL_TOKENS': json.dumps(2048),
llm_model = HuggingFaceModel(
role=role,
image_uri=llm_image,
env=config
)
بعد أن أنشأنا HuggingFaceModel يمكننا نشره على Amazon SageMaker باستخدام deploy طريقة. سوف نقوم بنشر النموذج مع ml.g5.12xlarge نوع المثيل. ستقوم TGI بتوزيع النموذج وتقسيمه تلقائيًا عبر جميع وحدات معالجة الرسومات.
llm = llm_model.deploy(
initial_instance_count=1,
instance_type=instance_type,
container_startup_health_check_timeout=health_check_timeout,
)
سيقوم SageMaker الآن بإنشاء نقطة النهاية الخاصة بنا ونشر النموذج عليها. قد يستغرق هذا من 5 إلى 10 دقائق.
4. قم بتشغيل الاستدلال والدردشة مع نموذجنا
بعد نشر نقطة النهاية الخاصة بنا، يمكننا إجراء الاستدلال عليها باستخدام التابع predict الطريقة من predictor. يمكننا استخدام معلمات مختلفة للتحكم في التوليد وتحديدها في parameters سمة الحمولة. اعتبارًا من اليوم، يدعم TGI المعلمات التالية:
temperature: يتحكم في العشوائية في النموذج. القيم المنخفضة ستجعل النموذج أكثر حتمية والقيم الأعلى ستجعل النموذج أكثر عشوائية. القيمة الافتراضية هي 1.0.max_new_tokens: الحد الأقصى لعدد الرموز التي سيتم إنشاؤها. القيمة الافتراضية هي 20، والقيمة القصوى هي 512.repetition_penalty: يتحكم في احتمالية التكرار، الافتراضيnull.seed: البذرة المستخدمة للتوليد العشوائي، الافتراضي هوnull.stop: قائمة الرموز لوقف التوليد. سيتوقف الجيل عند إنشاء أحد الرموز المميزة.top_k: عدد رموز المفردات ذات الاحتمالية الأعلى التي يجب الاحتفاظ بها لتصفية top-k. القيمة الافتراضية هيnull، مما يؤدي إلى تعطيل تصفية top-k.top_p: الاحتمال التراكمي للمعلمة أعلى رموز المفردات احتمالية للاحتفاظ بها لأخذ عينات النواة، الافتراضي هوnulldo_sample: ما إذا كان سيتم استخدام أخذ العينات أم لا؛ استخدام فك الجشع خلاف ذلك. القيمة الافتراضية هيfalse.best_of: قم بإنشاء تسلسلات best_of وإرجاع التسلسل إذا كان أعلى رمز مميز، افتراضيًاnull.details: أم لا لإرجاع تفاصيل حول الجيل. القيمة الافتراضية هيfalse.return_full_text: ما إذا كان سيتم إرجاع النص الكامل أم لا فقط الجزء الذي تم إنشاؤه. القيمة الافتراضية هيfalse.truncate: ما إذا كان سيتم اقتطاع الإدخال إلى الحد الأقصى لطول النموذج أم لا. القيمة الافتراضية هيtrue.typical_p: الاحتمال النموذجي للرمز المميز. القيمة الافتراضية هيnull.watermark: العلامة المائية المستخدمة للتوليد. القيمة الافتراضية هيfalse.
يمكنك العثور على مواصفات واجهة برمجة التطبيقات المفتوحة لـ TGI في وثائق التباهي
ال OpenAssistant/pythia-12b-sft-v8-7k-steps هو نموذج دردشة تحادثية مما يعني أنه يمكننا الدردشة معه باستخدام الموجه التالي:
<|prompter|>[Instruction]<|endoftext|>
<|assistant|>
فلنجربها للمرة الأولى ونسألك عن بعض الأفكار الرائعة التي يمكنك القيام بها في الصيف:
chat = llm.predict(>"""
)
print(chat[0]["generated_text"])
سنوضح الآن كيفية استخدام معلمات الإنشاء في ملف parameters سمة الحمولة. بالإضافة إلى الإعداد المخصص temperature, top_p، وما إلى ذلك، نتوقف أيضًا عن التوليد بعد انتهاء دور bot.
prompt="""<|prompter|>How can i stay more active during winter? Give me 3 tips.<|endoftext|><|assistant|>"""
payload =
"inputs": prompt,
"parameters": endoftext
response = llm.predict(payload)
print(response[0]["generated_text"])
5. قم بإنشاء Gradio Chatbot مدعومًا من Amazon SageMaker
يمكننا أيضًا إنشاء تطبيق gradio للدردشة مع النموذج الخاص بنا. Gradio هي مكتبة بيثون تتيح لك إنشاء مكونات واجهة مستخدم قابلة للتخصيص بسرعة حول نماذج التعلم الآلي لديك. يمكنك العثور على المزيد حول جراديو هنا.
!pip install gradio --upgrade
import gradio as gr
parameters = endoftext
with gr.Blocks() as demo:
gr.Markdown("## Chat with Amazon SageMaker")
with gr.Column():
chatbot = gr.Chatbot()
with gr.Row():
with gr.Column():
message = gr.Textbox(label="Chat Message Box", placeholder="Chat Message Box", show_label=False)
with gr.Column():
with gr.Row():
submit = gr.Button("Submit")
clear = gr.Button("Clear")
def respond(message, chat_history):
converted_chat_history = ""
if len(chat_history) > 0:
for c in chat_history:
converted_chat_history += f"<|prompter|>c[0]<|endoftext|><|assistant|>c[1]<|endoftext|>"
prompt = f"converted_chat_history<|prompter|>message<|endoftext|><|assistant|>"
llm_response = llm.predict("inputs": prompt, "parameters": parameters)
parsed_response = llm_response[0]["generated_text"][len(prompt):]
chat_history.append((message, parsed_response))
return "", chat_history
submit.click(respond, [message, chatbot], [message, chatbot], queue=False)
clear.click(lambda: None, None, chatbot, queue=False)
demo.launch(share=True)

مذهل! 🚀 لقد نجحنا في نشر Open Assistant Model على Amazon SageMaker وتشغيل الاستدلال عليه. بالإضافة إلى ذلك، قمنا ببناء تطبيق متدرج سريع للدردشة مع النموذج الخاص بنا.
الآن، حان الوقت لتجربته بنفسك وإنشاء تطبيقات Generation AI باستخدام المحتوى القابل للتنزيل الجديد Hugging Face LLM DLC على Amazon SageMaker.
للتنظيف، يمكننا حذف النموذج ونقطة النهاية.
llm.delete_model()
llm.delete_endpoint()
خاتمة
يمكّن محتوى Hugging Face LLM Inference DLC الجديد العملاء من نشر LLMs مفتوحة المصدر بسهولة وأمان على Amazon SageMaker. تتيح واجهة برمجة التطبيقات وعملية النشر سهلة الاستخدام للعملاء إنشاء روبوتات دردشة قابلة للتطوير تعمل بالذكاء الاصطناعي ومساعدين افتراضيين باستخدام نماذج حديثة مثل Open Assistant. بشكل عام، سيعمل هذا المحتوى القابل للتنزيل (DLC) الجديد على تمكين المطورين والشركات من الاستفادة من أحدث التطورات في توليد اللغات الطبيعية.
شكرا للقراءة! إذا كان لديك أي أسئلة، فلا تتردد في الاتصال بي على تغريد أو لينكدين.