شعار زيفيرنت

نماذج Inference Llama 2 مع تدفق الاستجابة في الوقت الفعلي باستخدام Amazon SageMaker | خدمات الويب الأمازون

التاريخ:

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

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

مع الإعلان الرسمي عن ذلك يدعم الاستدلال في الوقت الفعلي من Amazon SageMaker الآن تدفق الاستجابة، يمكنك الآن دفق استجابات الاستدلال بشكل مستمر إلى العميل عند الاستخدام الأمازون SageMaker الاستدلال في الوقت الحقيقي مع تدفق الاستجابة سيساعدك هذا الحل على بناء تجارب تفاعلية لمختلف تطبيقات الذكاء الاصطناعي التوليدية مثل برامج الدردشة الآلية والمساعدين الافتراضيين ومولدات الموسيقى. يوضح لك هذا المنشور كيفية تحقيق أوقات استجابة أسرع في شكل Time to First Byte (TTFB) وتقليل زمن الوصول الإجمالي المتصور أثناء استنتاج نماذج Llama 2.

لتنفيذ الحل، نستخدم SageMaker، وهي خدمة مُدارة بالكامل لإعداد البيانات وإنشاء نماذج التعلم الآلي (ML) وتدريبها ونشرها لأي حالة استخدام مع بنية أساسية وأدوات ومسارات عمل مُدارة بالكامل. لمزيد من المعلومات حول خيارات النشر المتنوعة التي يوفرها SageMaker، راجع الأسئلة الشائعة حول استضافة نموذج Amazon SageMaker. دعونا نفهم كيف يمكننا معالجة مشكلات زمن الوصول باستخدام الاستدلال في الوقت الفعلي مع تدفق الاستجابة.

حل نظرة عامة

نظرًا لأننا نريد معالجة زمن الاستجابة المذكور أعلاه المرتبط بالاستدلال في الوقت الفعلي مع LLMs، فلنفهم أولاً كيف يمكننا استخدام دعم تدفق الاستجابة للاستدلال في الوقت الفعلي لـ Llama 2. ومع ذلك، يمكن لأي LLM الاستفادة من دعم تدفق الاستجابة مع حقيقي -الاستدلال بالوقت.

Llama 2 عبارة عن مجموعة من نماذج النصوص التوليدية المدربة مسبقًا والمضبوطة بدقة والتي يتراوح حجمها من 7 مليار إلى 70 مليار معلمة. نماذج Llama 2 هي نماذج انحدار ذاتي مع بنية وحدة فك التشفير فقط. عند تزويدها بمعلمات المطالبة والاستدلال، تكون نماذج Llama 2 قادرة على إنشاء استجابات نصية. يمكن استخدام هذه النماذج للترجمة والتلخيص والإجابة على الأسئلة والدردشة.

في هذا المنشور، قمنا بنشر نموذج Llama 2 Chat meta-llama/Llama-2-13b-chat-hf على SageMaker للاستدلال في الوقت الفعلي من خلال تدفق الاستجابة.

عندما يتعلق الأمر بنشر النماذج على نقاط نهاية SageMaker، يمكنك وضع النماذج في حاويات باستخدام وحدات متخصصة حاوية التعلم العميق من AWS (DLC) متاحة للمكتبات الشهيرة مفتوحة المصدر. نماذج Llama 2 هي نماذج لإنشاء النصوص؛ يمكنك استخدام إما Hugging Face LLM حاويات الاستدلال على SageMaker مدعوم من عناق الوجه استنتاج توليد النص (TGI) أو المحتوى القابل للتنزيل (AWS) لـ الاستدلال النموذجي الكبير (لمي).

في هذا المنشور، نقوم بنشر نموذج Llama 2 13B Chat باستخدام المحتوى القابل للتنزيل (DLC) على استضافة SageMaker للاستدلال في الوقت الفعلي المدعوم بمثيلات G5. مثيلات G5 هي مثيلات تعتمد على وحدة معالجة الرسومات (GPU) عالية الأداء للتطبيقات كثيفة الرسومات واستدلال ML. يمكنك أيضًا استخدام أنواع المثيلات المدعومة p4d، وp3، وg5، وg4dn مع التغييرات المناسبة وفقًا لتكوين المثيل.

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

لتنفيذ هذا الحل يجب أن يكون لديك ما يلي:

  • حساب AWS بامتداد إدارة الهوية والوصول AWS دور (IAM) مع أذونات لإدارة الموارد التي تم إنشاؤها كجزء من الحل.
  • إذا كانت هذه هي المرة الأولى التي تعمل فيها أمازون ساجميكر ستوديو، تحتاج أولاً إلى إنشاء ملف المجال SageMaker.
  • حساب الوجه المعانق. حساب جديد مع بريدك الإلكتروني إذا لم يكن لديك حساب بالفعل.
    • للوصول السلس إلى النماذج المتاحة على Hugging Face، وخاصة النماذج المسورة مثل Llama، لأغراض الضبط والاستدلال، يجب أن يكون لديك حساب Hugging Face للحصول على رمز وصول للقراءة. بعد التسجيل للحصول على حساب Hugging Face الخاص بك، بتسجيل الدخول لزيارة https://huggingface.co/settings/tokens لإنشاء رمز وصول للقراءة.
  • الوصول إلى Llama 2، باستخدام نفس معرف البريد الإلكتروني الذي استخدمته للتسجيل في Hugging Face.
    • نماذج Llama 2 المتوفرة عبر Hugging Face هي نماذج مسورة. يخضع استخدام نموذج Llama لترخيص Meta. لتحميل الأوزان النموذجية والرمز المميز، طلب الوصول إلى اللاما وقبول الترخيص الخاص بهم.
    • بعد منحك حق الوصول (عادةً في غضون يومين)، ستتلقى تأكيدًا بالبريد الإلكتروني. في هذا المثال، نستخدم النموذج Llama-2-13b-chat-hf، ولكن يجب أن تكون قادرًا على الوصول إلى المتغيرات الأخرى أيضًا.

النهج 1: معانقة الوجه TGI

في هذا القسم، نعرض لك كيفية نشر meta-llama/Llama-2-13b-chat-hf نموذج لنقطة نهاية SageMaker في الوقت الفعلي مع تدفق الاستجابة باستخدام Hugging Face TGI. يوضح الجدول التالي مواصفات هذا النشر.

المواصفات الخاصه القيم
وعاء معانقة الوجه TGI
نموذج الاسم meta-llama/Llama-2-13b-chat-hf
مثيل ML ml.g5.12xlarge
الإستنباط في الوقت الحقيقي مع تدفق الاستجابة

انشر النموذج

أولاً، يمكنك استرداد الصورة الأساسية لبرنامج LLM الذي سيتم نشره. ثم تقوم ببناء النموذج على الصورة الأساسية. وأخيرًا، يمكنك نشر النموذج على مثيل ML لاستضافة SageMaker للاستدلال في الوقت الفعلي.

دعونا نلاحظ كيفية تحقيق النشر برمجياً. للإيجاز، تمت مناقشة التعليمات البرمجية التي تساعد في خطوات النشر فقط في هذا القسم. يتوفر كود المصدر الكامل للنشر في دفتر الملاحظات llama-2-hf-tgi/llama-2-13b-chat-hf/1-deploy-llama-2-13b-chat-hf-tgi-sagemaker.ipynb.

احصل على أحدث المحتوى القابل للتنزيل Hugging Face LLM DLC المدعوم من TGI عبر المحتوى المضمن مسبقًا المحتوى القابل للتنزيل (DLC) لـ SageMaker. يمكنك استخدام هذه الصورة لنشر meta-llama/Llama-2-13b-chat-hf نموذج على SageMaker. انظر الكود التالي:

from sagemaker.huggingface import get_huggingface_llm_image_uri

# retrieve the llm image uri
llm_image = get_huggingface_llm_image_uri(
  "huggingface",
  version="1.0.3"
)

حدد بيئة النموذج باستخدام معلمات التكوين المحددة على النحو التالي:

instance_type = "ml.g5.12xlarge"
number_of_gpu = 4
config = {
    'HF_MODEL_ID': "meta-llama/Llama-2-13b-chat-hf", # model_id from hf.co/models
    'SM_NUM_GPUS': json.dumps(number_of_gpu), # Number of GPU used per replica
    'MAX_INPUT_LENGTH': json.dumps(2048),  # Max length of input text
    'MAX_TOTAL_TOKENS': json.dumps(4096),  # Max length of the generation (including input text)
    'MAX_BATCH_TOTAL_TOKENS': json.dumps(8192),  # Limits the number of tokens that can be processed in parallel during the generation
    'HUGGING_FACE_HUB_TOKEN': "<YOUR_HUGGING_FACE_READ_ACCESS_TOKEN>"
}

استبدل <YOUR_HUGGING_FACE_READ_ACCESS_TOKEN> لمعلمة التكوين HUGGING_FACE_HUB_TOKEN بقيمة الرمز المميز الذي تم الحصول عليه من ملفك الشخصي على Hugging Face كما هو مفصل في قسم المتطلبات الأساسية في هذا المنشور. في التكوين، يمكنك تحديد عدد وحدات معالجة الرسومات المستخدمة لكل نسخة متماثلة من النموذج على أنها 4 لـ SM_NUM_GPUS. ثم يمكنك نشر meta-llama/Llama-2-13b-chat-hf نموذج على مثيل ml.g5.12xlarge الذي يأتي مع 4 وحدات معالجة رسوميات.

الآن يمكنك بناء مثيل HuggingFaceModel مع تكوين البيئة المذكورة أعلاه:

llm_model = HuggingFaceModel(
    role=role,
    image_uri=llm_image,
    env=config
)

أخيرًا، قم بنشر النموذج من خلال توفير الوسائط لأسلوب النشر المتاح في النموذج بقيم معلمات مختلفة مثل endpoint_name, initial_instance_countو instance_type:

llm = llm_model.deploy(
    endpoint_name=endpoint_name,
    initial_instance_count=1,
    instance_type=instance_type,
    container_startup_health_check_timeout=health_check_timeout,
)

نفذ الاستدلال

يأتي محتوى Hugging Face TGI DLC مزودًا بالقدرة على بث الاستجابات دون أي تخصيصات أو تغييرات في التعليمات البرمجية للنموذج. يمكنك استخدام invoc_endpoint_with_response_stream إذا كنت تستخدم Boto3 أو InvocEndpointWithResponseStream عند البرمجة باستخدام SageMaker Python SDK.

InvokeEndpointWithResponseStream تسمح واجهة برمجة التطبيقات الخاصة بـ SageMaker للمطورين ببث الاستجابات مرة أخرى من نماذج SageMaker، مما يمكن أن يساعد في تحسين رضا العملاء عن طريق تقليل زمن الوصول المتصور. وهذا مهم بشكل خاص للتطبيقات المبنية باستخدام نماذج الذكاء الاصطناعي التوليدية، حيث تكون المعالجة الفورية أكثر أهمية من انتظار الاستجابة بأكملها.

في هذا المثال، نستخدم Boto3 لاستنتاج النموذج واستخدام SageMaker API invoke_endpoint_with_response_stream كما يلي:

def get_realtime_response_stream(sagemaker_runtime, endpoint_name, payload):
    response_stream = sagemaker_runtime.invoke_endpoint_with_response_stream(
        EndpointName=endpoint_name,
        Body=json.dumps(payload), 
        ContentType="application/json",
        CustomAttributes='accept_eula=false'
    )
    return response_stream

الحجة CustomAttributes تم ضبطه على القيمة accept_eula=false.accept_eula يجب تعيين المعلمة على true للحصول على الاستجابة من نماذج Llama 2 بنجاح. بعد نجاح الاستدعاء باستخدام invoke_endpoint_with_response_stream، ستقوم الطريقة بإرجاع دفق استجابة من البايتات.

يوضح الرسم البياني التالي سير العمل هذا.

مخطط معماري لتدفق HF TGI

أنت بحاجة إلى مُكرِّر يتكرر عبر تدفق البايتات ويوزعها على نص قابل للقراءة. ال LineIterator يمكن العثور على التنفيذ على llama-2-hf-tgi/llama-2-13b-chat-hf/utils/LineIterator.py. أنت الآن جاهز لإعداد الموجه والتعليمات لاستخدامها كحمولة أثناء الاستدلال على النموذج.

إعداد موجه والتعليمات

في هذه الخطوة، تقوم بإعداد الموجهات والتعليمات الخاصة بماجستير القانون الخاص بك. لمطالبة Llama 2، يجب أن يكون لديك قالب المطالبة التالي:

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

{{ user_message }} [/INST]

يمكنك إنشاء قالب المطالبة المحدد برمجيًا في الطريقة build_llama2_prompt، والذي يتوافق مع قالب المطالبة المذكور أعلاه. ثم تقوم بتحديد التعليمات وفقًا لحالة الاستخدام. في هذه الحالة، نقوم بتوجيه النموذج لإنشاء بريد إلكتروني لحملة تسويقية كما هو موضح في get_instructions طريقة. رمز هذه الأساليب موجود في llama-2-hf-tgi/llama-2-13b-chat-hf/2-sagemaker-realtime-inference-llama-2-13b-chat-hf-tgi-streaming-response.ipynb دفتر. قم ببناء التعليمات مع المهمة التي سيتم تنفيذها كما هو مفصل في user_ask_1 كما يلي:

user_ask_1 = f'''
AnyCompany recently announced new service launch named AnyCloud Internet Service.
Write a short email about the product launch with Call to action to Alice Smith, whose email is alice.smith@example.com
Mention the Coupon Code: EARLYB1RD to get 20% for 1st 3 months.
'''
instructions = get_instructions(user_ask_1)
prompt = build_llama2_prompt(instructions)

نقوم بتمرير التعليمات لإنشاء المطالبة وفقًا لقالب المطالبة الذي تم إنشاؤه بواسطة build_llama2_prompt.

inference_params = {
        "do_sample": True,
        "top_p": 0.6,
        "temperature": 0.9,
        "top_k": 50,
        "max_new_tokens": 512,
        "repetition_penalty": 1.03,
        "stop": ["</s>"],
        "return_full_text": False
    }
payload = {
    "inputs":  prompt,
    "parameters": inference_params,
    "stream": True ## <-- to have response stream.
}

نقوم بجمع معلمات الاستدلال مع المطالبة بالمفتاح stream مع القيمة True لتشكيل الحمولة النهائية. أرسل الحمولة إلى get_realtime_response_stream، والتي سيتم استخدامها لاستدعاء نقطة النهاية مع تدفق الاستجابة:

resp = get_realtime_response_stream(sagemaker_runtime, endpoint_name, payload)
print_response_stream(resp)

سيتم دفق النص الذي تم إنشاؤه من LLM إلى الإخراج كما هو موضح في الرسم المتحرك التالي.

Llama 2 13B Chat Response Streaming - HF TGI

النهج 2: LMI مع خدمة DJL

في هذا القسم، نوضح كيفية نشر meta-llama/Llama-2-13b-chat-hf نموذج لنقطة نهاية SageMaker في الوقت الفعلي مع تدفق الاستجابة باستخدام LMI مع خدمة DJL. يوضح الجدول التالي مواصفات هذا النشر.

المواصفات الخاصه القيم
وعاء صورة حاوية LMI مع خدمة DJL
نموذج الاسم meta-llama/Llama-2-13b-chat-hf
مثيل ML ml.g5.12xlarge
الإستنباط في الوقت الحقيقي مع تدفق الاستجابة

عليك أولاً تنزيل النموذج وتخزينه فيه خدمة تخزين أمازون البسيطة (أمازون إس 3). يمكنك بعد ذلك تحديد S3 URI الذي يشير إلى بادئة S3 للنموذج في ملف serving.properties ملف. بعد ذلك، يمكنك استرداد الصورة الأساسية لبرنامج LLM الذي سيتم نشره. ثم تقوم ببناء النموذج على الصورة الأساسية. وأخيرًا، يمكنك نشر النموذج على مثيل ML لاستضافة SageMaker للاستدلال في الوقت الفعلي.

دعونا نلاحظ كيفية تحقيق خطوات النشر المذكورة أعلاه برمجياً. للإيجاز، تم تفصيل التعليمات البرمجية التي تساعد في خطوات النشر فقط في هذا القسم. يتوفر كود المصدر الكامل لهذا النشر في دفتر الملاحظات llama-2-lmi/llama-2-13b-chat/1-deploy-llama-2-13b-chat-lmi-response-streaming.ipynb.

قم بتنزيل لقطة النموذج من Hugging Face وقم بتحميل عناصر النموذج على Amazon S3

باستخدام المتطلبات الأساسية المذكورة أعلاه، قم بتنزيل النموذج على مثيل دفتر ملاحظات SageMaker ثم قم بتحميله إلى حاوية S3 لمزيد من النشر:

model_name = 'meta-llama/Llama-2-13b-chat-hf'
# Only download pytorch checkpoint files
allow_patterns = ["*.json", "*.txt", "*.model", "*.safetensors", "*.bin", "*.chk", "*.pth"]

# Download the model snapshot
model_download_path = snapshot_download(
    repo_id=model_name, 
    cache_dir=local_model_path, 
    allow_patterns=allow_patterns, 
    token='<YOUR_HUGGING_FACE_READ_ACCESS_TOKEN>'
)

لاحظ أنه على الرغم من عدم توفير رمز وصول صالح، سيتم تنزيل النموذج. ولكن عند نشر مثل هذا النموذج، لن ينجح عرض النموذج. لذلك، يوصى باستبداله <YOUR_HUGGING_FACE_READ_ACCESS_TOKEN> للحجة token بقيمة الرمز المميز الذي تم الحصول عليه من ملفك الشخصي على Hugging Face كما هو مفصل في المتطلبات الأساسية. في هذا المنشور، نحدد اسم الموديل الرسمي لـ Llama 2 كما هو محدد في Hugging Face بالقيمة meta-llama/Llama-2-13b-chat-hf. سيتم تنزيل النموذج غير المضغوط إلى local_model_path نتيجة لتشغيل الكود المذكور.

قم بتحميل الملفات إلى Amazon S3 واحصل على URI، والذي سيتم استخدامه لاحقًا serving.properties.

سوف تقوم بتغليف meta-llama/Llama-2-13b-chat-hf نموذج على صورة حاوية LMI مع خدمة DJL باستخدام التكوين المحدد عبر serving.properties. بعد ذلك، تقوم بنشر النموذج مع عناصر النموذج المجمعة في صورة الحاوية على مثيل SageMaker ML ml.g5.12xlarge. يمكنك بعد ذلك استخدام مثيل ML هذا لاستضافة SageMaker للاستدلال في الوقت الفعلي.

قم بإعداد المصنوعات اليدوية النموذجية لخدمة DJL

قم بإعداد القطع الأثرية النموذجية الخاصة بك عن طريق إنشاء serving.properties ملف الضبط:

%%writefile chat_llama2_13b_hf/serving.properties
engine = MPI
option.entryPoint=djl_python.huggingface
option.tensor_parallel_degree=4
option.low_cpu_mem_usage=TRUE
option.rolling_batch=lmi-dist
option.max_rolling_batch_size=64
option.model_loading_timeout=900
option.model_id={{model_id}}
option.paged_attention=true

نستخدم الإعدادات التالية في ملف التكوين هذا:

  • محرك - يحدد هذا محرك وقت التشغيل الذي سيستخدمه DJL. تشمل القيم المحتملة Python, DeepSpeed, FasterTransformerو MPI. في هذه الحالة، قمنا بتعيينه على MPI. تعمل عملية توازي النماذج والاستدلال (MPI) على تسهيل تقسيم النموذج عبر جميع وحدات معالجة الرسومات المتاحة وبالتالي تسريع الاستدلال.
  • option.entryPoint - يحدد هذا الخيار المعالج الذي تقدمه DJL Serving الذي ترغب في استخدامه. القيم المحتملة هي djl_python.huggingface, djl_python.deepspeedو djl_python.stable-diffusion. نحن نستخدم djl_python.huggingface لتسريع معانقة الوجه.
  • option.tensor_parallel_degree - يحدد هذا الخيار عدد الأقسام الموازية الموترية المنفذة على النموذج. يمكنك تعيين عدد أجهزة GPU التي يحتاج Accelerate إلى تقسيم النموذج عليها. تتحكم هذه المعلمة أيضًا في عدد العاملين لكل نموذج والذي سيتم تشغيله عند تشغيل خدمة DJL. على سبيل المثال، إذا كان لدينا جهاز 4 GPU وقمنا بإنشاء أربعة أقسام، فسيكون لدينا عامل واحد لكل نموذج لخدمة الطلبات.
  • option.low_cpu_mem_usage – يؤدي هذا إلى تقليل استخدام ذاكرة وحدة المعالجة المركزية عند تحميل النماذج. نوصي بضبط هذا على TRUE.
  • option.rolling_batch - يتيح ذلك إمكانية التجميع على مستوى التكرار باستخدام إحدى الاستراتيجيات المدعومة. تشمل القيم auto, schedulerو lmi-dist. نحن نستخدم lmi-dist لتشغيل الدفع المستمر لـ Llama 2.
  • option.max_rolling_batch_size - وهذا يحد من عدد الطلبات المتزامنة في الدفعة المستمرة. القيمة الافتراضية هي 32.
  • option.model_id – يجب عليك استبدال {{model_id}} بمعرف النموذج الخاص بالنموذج المُدرب مسبقًا والمستضاف داخل ملف مستودع النموذج على معانقة الوجه أو مسار S3 إلى القطع الأثرية النموذجية.

يمكن العثور على المزيد من خيارات التكوين في التكوينات والإعدادات.

نظرًا لأن DJL Serving تتوقع تجميع العناصر النموذجية وتنسيقها في ملف ‎.tar، قم بتشغيل مقتطف التعليمات البرمجية التالي لضغط ملف ‎.tar وتحميله إلى Amazon S3:

s3_code_prefix = f"{s3_prefix}/code" # folder within bucket where code artifact will go
s3_code_artifact = sess.upload_data("model.tar.gz", bucket, s3_code_prefix)

استرجع أحدث صورة لحاوية LMI مع خدمة DJL

بعد ذلك، يمكنك استخدام المحتوى القابل للتنزيل (DLC) المتوفر مع SageMaker لـ LMI لنشر النموذج. استرجع URI لصورة SageMaker لـ djl-deepspeed الحاوية برمجياً باستخدام الكود التالي:

from sagemaker import image_uris
inference_image_uri = image_uris.retrieve(
    framework="djl-deepspeed", region=region, version="0.25.0"
)

يمكنك استخدام الصورة المذكورة أعلاه لنشر meta-llama/Llama-2-13b-chat-hf نموذج على SageMaker. الآن يمكنك المتابعة لإنشاء النموذج.

قم بإنشاء النموذج

يمكنك إنشاء النموذج الذي تم إنشاء حاويته باستخدام ملف inference_image_uri ورمز عرض النموذج الموجود في S3 URI المشار إليه بواسطة s3_code_artifact:

from sagemaker.utils import name_from_base

model_name = name_from_base(f"Llama-2-13b-chat-lmi-streaming")

create_model_response = sm_client.create_model(
    ModelName=model_name,
    ExecutionRoleArn=role,
    PrimaryContainer={
        "Image": inference_image_uri,
        "ModelDataUrl": s3_code_artifact,
        "Environment": {"MODEL_LOADING_TIMEOUT": "3600"},
    },
)

يمكنك الآن إنشاء تكوين النموذج بكل التفاصيل الخاصة بتكوين نقطة النهاية.

إنشاء تكوين النموذج

استخدم الكود التالي لإنشاء تكوين نموذج للنموذج المحدد بواسطة model_name:

endpoint_config_name = f"{model_name}-config"

endpoint_name = name_from_base(model_name)

endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "VariantName": "variant1",
            "ModelName": model_name,
            "InstanceType": "ml.g5.12xlarge",
            "InitialInstanceCount": 1,
            "ModelDataDownloadTimeoutInSeconds": 3600,
            "ContainerStartupHealthCheckTimeoutInSeconds": 3600,
        },
    ],
)

يتم تعريف تكوين النموذج لـ ProductionVariants المعلمة InstanceType بالنسبة لمثال تعلم الآلة ml.g5.12xlarge. يمكنك أيضًا توفير ModelName باستخدام نفس الاسم الذي استخدمته لإنشاء النموذج في الخطوة السابقة، وبالتالي إنشاء علاقة بين النموذج وتكوين نقطة النهاية.

الآن بعد أن حددت النموذج وتكوين النموذج، يمكنك إنشاء نقطة نهاية SageMaker.

قم بإنشاء نقطة نهاية SageMaker

قم بإنشاء نقطة النهاية لنشر النموذج باستخدام مقتطف التعليمات البرمجية التالي:

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=f"{endpoint_name}", EndpointConfigName=endpoint_config_name
)

يمكنك عرض تقدم النشر باستخدام مقتطف التعليمات البرمجية التالي:

resp = sm_client.describe_endpoint(EndpointName=endpoint_name)
status = resp["EndpointStatus"]

بعد نجاح النشر، ستكون حالة نقطة النهاية InService. الآن بعد أن أصبحت نقطة النهاية جاهزة، فلنجري الاستدلال من خلال تدفق الاستجابة.

الاستدلال في الوقت الحقيقي مع تدفق الاستجابة

كما تناولنا في النهج السابق لـ Hugging Face TGI، يمكنك استخدام نفس الطريقة get_realtime_response_stream لاستدعاء تدفق الاستجابة من نقطة نهاية SageMaker. رمز الاستدلال باستخدام نهج LMI موجود في ملف llama-2-lmi/llama-2-13b-chat/2-inference-llama-2-13b-chat-lmi-response-streaming.ipynb دفتر. ال LineIterator يقع التنفيذ في llama-2-lmi/utils/LineIterator.py. نلاحظ أن LineIterator بالنسبة لنموذج Llama 2 Chat الذي تم نشره في حاوية LMI يختلف عن LineIterator تمت الإشارة إليه في قسم Hugging Face TGI. ال LineIterator حلقات عبر دفق البايت من نماذج Llama 2 Chat التي يتم الاستدلال عليها باستخدام حاوية LMI ذات djl-deepspeed الإصدار 0.25.0. ستقوم وظيفة المساعد التالية بتحليل تدفق الاستجابة المستلمة من طلب الاستدلال الذي تم إجراؤه عبر invoke_endpoint_with_response_stream API:

from utils.LineIterator import LineIterator

def print_response_stream(response_stream):
    event_stream = response_stream.get('Body')
    for line in LineIterator(event_stream):
        print(line, end='')

تقوم الطريقة السابقة بطباعة دفق البيانات التي يقرأها الملف LineIterator في شكل يمكن قراءته من قبل الإنسان.

دعنا نستكشف كيفية إعداد الموجه والتعليمات لاستخدامها كحمولة أثناء الاستدلال على النموذج.

نظرًا لأنك تستنتج نفس النموذج في كل من Hugging Face TGI وLMI، فإن عملية إعداد الموجه والتعليمات هي نفسها. لذلك، يمكنك استخدام الأساليب get_instructions و build_llama2_prompt للاستدلال.

get_instructions تقوم الطريقة بإرجاع التعليمات. قم ببناء التعليمات المدمجة مع المهمة التي سيتم تنفيذها كما هو مفصل في user_ask_2 كما يلي:

user_ask_2 = f'''
AnyCompany recently announced new service launch named AnyCloud Streaming Service.
Write a short email about the product launch with Call to action to Alice Smith, whose email is alice.smith@example.com
Mention the Coupon Code: STREAM2DREAM to get 15% for 1st 6 months.
'''

instructions = get_instructions(user_ask_2)
prompt = build_llama2_prompt(instructions)

قم بتمرير التعليمات لإنشاء المطالبة وفقًا لقالب المطالبة الذي تم إنشاؤه بواسطة build_llama2_prompt:

inference_params = {
        "do_sample": True,
        "top_p": 0.6,
        "temperature": 0.9,
        "top_k": 50,
        "max_new_tokens": 512,
        "return_full_text": False,
    }

payload = {
    "inputs":  prompt,
    "parameters": inference_params
}

نحن نجمع معلمات الاستدلال مع المطالبة لتشكيل حمولة نهائية. ثم تقوم بإرسال الحمولة إلى get_realtime_response_stream, والذي يستخدم لاستدعاء نقطة النهاية مع تدفق الاستجابة:

resp = get_realtime_response_stream(sagemaker_runtime, endpoint_name, payload)
print_response_stream(resp)

سيتم دفق النص الذي تم إنشاؤه من LLM إلى الإخراج كما هو موضح في الرسم المتحرك التالي.

Llama 2 13B بث الاستجابة للدردشة - LMI

تنظيف

لتجنب تكبد رسوم غير ضرورية، استخدم وحدة تحكم إدارة AWS لحذف نقاط النهاية والموارد المرتبطة بها التي تم إنشاؤها أثناء تشغيل الأساليب المذكورة في المنشور. بالنسبة لكلا أسلوبي النشر، قم بتنفيذ روتين التنظيف التالي:

import boto3
sm_client = boto3.client('sagemaker')
endpoint_name="<SageMaker_Real-time_Endpoint_Name>"
endpoint = sm_client.describe_endpoint(EndpointName=endpoint_name)
endpoint_config_name = endpoint['EndpointConfigName']
endpoint_config = sm_client.describe_endpoint_config(EndpointConfigName=endpoint_config_name)
model_name = endpoint_config['ProductionVariants'][0]['ModelName']

print(f"""
About to delete the following sagemaker resources:
Endpoint: {endpoint_name}
Endpoint Config: {endpoint_config_name}
Model: {model_name}
""")

# delete endpoint
sm_client.delete_endpoint(EndpointName=endpoint_name)
# delete endpoint config
sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
# delete model
sm_client.delete_model(ModelName=model_name)

استبدل <SageMaker_Real-time_Endpoint_Name> للمتغير endpoint_name مع نقطة النهاية الفعلية.

بالنسبة للطريقة الثانية، قمنا بتخزين عناصر النموذج والتعليمات البرمجية على Amazon S3. يمكنك تنظيف حاوية S3 باستخدام الكود التالي:

s3 = boto3.resource('s3')
s3_bucket = s3.Bucket(bucket)
s3_bucket.objects.filter(Prefix=s3_prefix).delete()

وفي الختام

في هذا المنشور، ناقشنا كيف يمكن لعدد متفاوت من رموز الاستجابة أو مجموعة مختلفة من معلمات الاستدلال أن تؤثر على زمن الاستجابة المرتبط بـ LLMs. لقد أظهرنا كيفية معالجة المشكلة بمساعدة تدفق الاستجابة. ثم حددنا طريقتين لنشر نماذج Llama 2 Chat والاستدلال عليها باستخدام محتويات AWS DLC — LMI وHugging Face TGI.

يجب أن تفهم الآن أهمية استجابة البث وكيف يمكن أن تقلل من زمن الاستجابة المتصور. يمكن أن تؤدي الاستجابة المتدفقة إلى تحسين تجربة المستخدم، الأمر الذي قد يجعلك تنتظر حتى تقوم LLM ببناء الاستجابة بأكملها. بالإضافة إلى ذلك، يؤدي نشر نماذج Llama 2 Chat مع تدفق الاستجابة إلى تحسين تجربة المستخدم وإسعاد عملائك.

يمكنك الرجوع إلى عينات aws الرسمية أمازون-sagemaker-llama2-response-streaming-recipes يغطي النشر لمتغيرات طراز Llama 2 الأخرى.

مراجع حسابات


حول المؤلف

بافان كومار راو نافوليبافان كومار راو نافولي هو مهندس الحلول في Amazon Web Services. وهو يعمل مع موردي البرامج المستقلين في الهند لمساعدتهم على الابتكار في AWS. وهو مؤلف منشور لكتاب "البدء ببرمجة V". حصل على درجة الماجستير التنفيذي في التكنولوجيا في علوم البيانات من المعهد الهندي للتكنولوجيا (IIT)، حيدر أباد. حصل أيضًا على درجة الماجستير في إدارة الأعمال التنفيذية في تخصص تكنولوجيا المعلومات من المدرسة الهندية لإدارة الأعمال والإدارة، وحصل على بكالوريوس تكنولوجيا في هندسة الإلكترونيات والاتصالات من معهد فاجديفي للتكنولوجيا والعلوم. بافان هو أحد محترفي حلول AWS المعتمدين ويحمل شهادات أخرى مثل تخصص التعلم الآلي المعتمد من AWS، وأخصائي Microsoft المعتمد (MCP)، وأخصائي التكنولوجيا المعتمد من Microsoft (MCTS). وهو أيضًا من عشاق المصادر المفتوحة. في أوقات فراغه، يحب الاستماع إلى الأصوات السحرية الرائعة لـ Sia و Rihanna.

سودهانشو الكراهيةسودهانشو الكراهية هو متخصص رئيسي في الذكاء الاصطناعي/تعلم الآلة في AWS ويعمل مع العملاء لتقديم المشورة لهم بشأن عمليات MLOs الخاصة بهم ورحلة الذكاء الاصطناعي التوليدية. في منصبه السابق قبل شركة أمازون، قام بوضع تصور وإنشاء وقيادة الفرق لبناء منصات الذكاء الاصطناعي والألعاب القائمة على المصادر المفتوحة، ونجح في تسويقها مع أكثر من 100 عميل. يُنسب إلى Sudhanshu بعض براءات الاختراع، وقد كتب كتابين والعديد من الأوراق البحثية والمدونات، وقدم وجهات نظره في المنتديات التقنية المختلفة. لقد كان قائدًا فكريًا ومتحدثًا، ويعمل في هذه الصناعة منذ ما يقرب من 25 عامًا. لقد عمل مع عملاء Fortune 1000 في جميع أنحاء العالم ومؤخرًا مع عملاء رقميين أصليين في الهند.

بقعة_صورة

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

بقعة_صورة