افزایش عملکرد استنتاج برای مدل های Mixtral و Llama 2 با ظروف جدید Amazon SageMaker | خدمات وب آمازون

افزایش عملکرد استنتاج برای مدل های Mixtral و Llama 2 با ظروف جدید Amazon SageMaker | خدمات وب آمازون

در ماه ژانویه 2024 آمازون SageMaker نسخه جدید را راه اندازی کرد (0.26.0) ظروف یادگیری عمیق (DLC) استنتاج مدل بزرگ (LMI). این نسخه از مدل‌های جدید (از جمله ترکیبی از متخصصان)، بهبود عملکرد و قابلیت استفاده در پشتوانه‌های استنتاج، و همچنین جزئیات نسل جدید برای افزایش کنترل و قابلیت پیش‌بینی (مانند دلیل تکمیل تولید و احتمالات گزارش سطح نشانه) پشتیبانی می‌کند.

DLC های LMI یک رابط با کد پایین ارائه می دهند که استفاده از تکنیک های بهینه سازی استنتاج و سخت افزار پیشرفته را ساده می کند. LMI به شما امکان می دهد تا موازی تانسور را اعمال کنید. آخرین تکنیک های توجه کارآمد، دسته بندی، کمی سازی و مدیریت حافظه؛ جریان توکن؛ و خیلی بیشتر، فقط با نیاز به شناسه مدل و پارامترهای مدل اختیاری. با DLC های LMI در SageMaker، می توانید زمان به ارزش را برای خود تسریع کنید هوش مصنوعی مولد (AI) برنامه های کاربردی، بارگیری سنگین مربوط به زیرساخت ها، و بهینه سازی مدل های زبان بزرگ (LLM) برای سخت افزار انتخابی خود برای دستیابی به بهترین قیمت و عملکرد در کلاس.

در این پست، آخرین ویژگی‌های معرفی‌شده در این نسخه را بررسی می‌کنیم، معیارهای عملکرد را بررسی می‌کنیم و راهنمای دقیقی در مورد استقرار LLM‌های جدید با DLC‌های LMI با کارایی بالا ارائه می‌کنیم.

ویژگی های جدید با DLC های LMI

در این بخش، ویژگی‌های جدید در پشتیبان‌های LMI را مورد بحث قرار می‌دهیم و برخی دیگر را که مختص باطن هستند، بررسی می‌کنیم. LMI در حال حاضر از backend های زیر پشتیبانی می کند:

  • کتابخانه توزیع شده LMI - این چارچوب AWS برای اجرای استنباط با LLM ها، الهام گرفته از OSS، برای دستیابی به بهترین تاخیر ممکن و دقت در نتیجه است.
  • LMI vLLM - این پیاده سازی باطن AWS از حافظه کارآمد است vLLM کتابخانه استنباط
  • جعبه ابزار LMI TensorRT-LLM – این اجرای باطن AWS است NVIDIA TensorRT-LLM، که موتورهای مخصوص GPU را برای بهینه سازی عملکرد در GPU های مختلف ایجاد می کند
  • LMI DeepSpeed - این اقتباس AWS است در اعماق، که دسته بندی پیوسته واقعی، کوانتیزاسیون SmoothQuant و توانایی تنظیم پویا حافظه را در حین استنتاج اضافه می کند.
  • LMI NeuronX - می توانید از این برای استقرار در استفاده کنید AWS Inferentia2 و AWS Trainiumنمونه‌های مبتنی بر، شامل دسته‌بندی پیوسته واقعی و افزایش سرعت، بر اساس AWS Neuron SDK

جدول زیر ویژگی های جدید اضافه شده را، هم رایج و هم مختص باطن، خلاصه می کند.

رایج در پشتیبان ها

          • مدل های جدید پشتیبانی شده: Mistral7B، Mixtral، Llama2-70B (NeuronX)
          • پشتیبانی از مقیاس بندی RoPE برای زمینه های طولانی تر
          • جزئیات نسل اضافه شد: دلیل پایان تولید و احتمال ورود به سیستم در سطح نشانه
          • ادغام پارامترهای پیکربندی سرور

باطن خاص

LMI-Distributed

vLLM TensorRT-LLM

NeuronX

  • اضافه شدن دانه بندی گروه بندی برای مجموعه های GPU بهینه شده
  • نمودارهای CUDA تا 50 درصد از بهبود عملکرد پشتیبانی می کنند
  • مدل های جدید برای کامپایل JIT مدیریت شده پشتیبانی می شوند
  • پشتیبانی از کوانتیزاسیون SmoothQuant بومی TensorRT-LLM
  • پشتیبانی از توجه پرس و جو گروهی
  • بهبود عملکرد دسته ای مداوم

مدل های جدید پشتیبانی می شود

مدل‌های محبوب جدید در بک‌اندها مانند Mistral-7B (همه بک‌اند)، Mixtral مبتنی بر MoE (همه بک‌اندها به جز Transformers-NeuronX) و Llama2-70B (Transformers-NeuronX) پشتیبانی می‌شوند.

تکنیک های پسوند پنجره زمینه

مقیاس‌گذاری زمینه مبتنی بر جاسازی موقعیتی چرخشی (RoPE) اکنون در باطن‌های LMI-Dist، vLLM، و TensorRT-LLM در دسترس است. مقیاس بندی RoPE، طول توالی مدل را در طول استنتاج تقریباً به هر اندازه ای، بدون نیاز به تنظیم دقیق، افزایش می دهد.

هنگام استفاده از RoPE دو نکته مهم زیر است:

  • گیجی مدل - با افزایش طول دنباله، بنابراین می تواند مدل حیرت. این تأثیر را می توان با انجام حداقل تنظیم دقیق روی توالی های ورودی بزرگتر از موارد استفاده شده در آموزش اصلی تا حدی جبران کرد. برای درک عمیق از اینکه RoPE چگونه بر کیفیت مدل تأثیر می‌گذارد، مراجعه کنید گسترش طناب.
  • عملکرد استنتاج - طول توالی های طولانی تر، حافظه پهنای باند بالای شتاب دهنده (HBM) را مصرف می کند. این افزایش استفاده از حافظه می تواند بر تعداد درخواست های همزمان شتاب دهنده شما تأثیر منفی بگذارد.

جزئیات نسل اضافه شده است

اکنون می توانید دو جزئیات دقیق در مورد نتایج تولید دریافت کنید:

  • پایان_دلیل - این دلیل تکمیل تولید را نشان می دهد، که می تواند رسیدن به حداکثر طول تولید، تولید یک نشانه پایان جمله (EOS) یا تولید یک نشانه توقف تعریف شده توسط کاربر باشد. با آخرین قطعه سکانس پخش شده برگردانده می شود.
  • log_probs - این احتمال گزارش تخصیص داده شده توسط مدل برای هر نشانه در قطعه دنباله جریانی را برمی گرداند. شما می توانید با محاسبه احتمال مشترک یک دنباله به عنوان یک تخمین تقریبی از اطمینان مدل استفاده کنید. log_probs از نشانه های فردی، که می تواند برای امتیازدهی و رتبه بندی خروجی های مدل مفید باشد. توجه داشته باشید که احتمالات توکن LLM معمولاً بدون کالیبراسیون بیش از حد مطمئن هستند.

شما می توانید خروجی نتایج تولید را با افزودن جزئیات = True در بار ورودی خود به LMI فعال کنید و تمام پارامترهای دیگر را بدون تغییر باقی بگذارید:

payload = {“inputs”:“your prompt”,
“parameters”:{max_new_tokens”:256,...,“details”:True}
}

پارامترهای پیکربندی تلفیقی

در نهایت، پارامترهای پیکربندی LMI نیز ادغام شده‌اند. برای اطلاعات بیشتر در مورد همه پارامترهای پیکربندی استقرار متداول و خاص، رجوع کنید پیکربندی استنتاج مدل بزرگ.

LMI-Distributed Backend

در AWS re:Invent 2023، LMI-Dist عملیات جمعی جدید و بهینه‌سازی شده را برای سرعت بخشیدن به ارتباطات بین پردازنده‌های گرافیکی اضافه کرد که منجر به تأخیر کمتر و توان عملیاتی بالاتر برای مدل‌هایی شد که برای یک GPU خیلی بزرگ هستند. این مجموعه ها به طور انحصاری برای SageMaker، برای نمونه های p4d در دسترس هستند.

در حالی که تکرار قبلی فقط از اشتراک گذاری در تمام 8 GPU پشتیبانی می کرد، LMI 0.26.0 پشتیبانی از درجه موازی تانسور 4 را در یک الگوی جزئی همه به همه معرفی می کند. این را می توان با اجزای استنتاج SageMaker، که با آن می توانید به صورت دانه بندی پیکربندی کنید که چه تعداد شتاب دهنده باید به هر مدل مستقر در پشت یک نقطه پایانی اختصاص داده شود. این ویژگی‌ها روی هم، کنترل بهتری بر استفاده از منابع نمونه اصلی فراهم می‌کنند، و شما را قادر می‌سازد تا با میزبانی مدل‌های مختلف در پشت یک نقطه پایانی، چند اجاره‌بندی مدل را افزایش دهید، یا کل توان عملیاتی استقرار خود را برای مطابقت با مدل و ویژگی‌های ترافیک خود تنظیم کنید.

شکل زیر مستقیم همه به همه را با جزئی همه به همه مقایسه می کند.

همه به همه گروه های جزئی.

باطن TensorRT-LLM

TensorRT-LLM NVIDIA به عنوان بخشی از نسخه قبلی LMI DLC (0.25.0) معرفی شد که عملکرد پیشرفته و بهینه‌سازی‌های GPU مانند SmoothQuant، FP8 و دسته‌بندی پیوسته را برای LLM‌ها در هنگام استفاده از پردازنده‌های گرافیکی NVIDIA ممکن می‌سازد.

TensorRT-LLM نیاز دارد که مدل ها قبل از استقرار در موتورهای کارآمد کامپایل شوند. LMI TensorRT-LLM DLC می‌تواند به‌طور خودکار فهرستی از مدل‌های پشتیبانی‌شده را به‌موقع (JIT)، قبل از راه‌اندازی سرور و بارگیری مدل برای استنتاج بلادرنگ انجام دهد. نسخه 0.26.0 DLC لیست مدل های پشتیبانی شده برای کامپایل JIT را افزایش می دهد و مدل های Baichuan، ChatGLM، GPT2، GPT-J، InternLM، Mistral، Mixtral، Qwen، SantaCoder و StarCoder را معرفی می کند.

کامپایل JIT چندین دقیقه سربار به زمان تهیه و مقیاس بندی نقطه پایانی اضافه می کند، بنابراین همیشه توصیه می شود که مدل خود را زودتر کامپایل کنید. برای راهنمایی در مورد نحوه انجام این کار و لیستی از مدل های پشتیبانی شده، نگاه کنید TensorRT-LLM آموزش تلفیقی پیش از زمان مدل ها. اگر مدل انتخابی شما هنوز پشتیبانی نمی شود، مراجعه کنید آموزش جمع‌آوری دستی مدل‌ها TensorRT-LLM برای کامپایل هر مدل دیگری که توسط TensorRT-LLM پشتیبانی می شود.

علاوه بر این، LMI اکنون کوانتیزاسیون بومی TensorRT-LLM SmootQuant را با پارامترهایی برای کنترل آلفا و فاکتور مقیاس‌پذیری بر اساس توکن یا کانال نشان می‌دهد. برای کسب اطلاعات بیشتر در مورد تنظیمات مربوطه، مراجعه کنید TensorRT-LLM.

باطن vLLM

نسخه به روز شده vLLM موجود در LMI DLC دارای بهبود عملکرد تا 50 درصد است که به جای حالت مشتاق، توسط حالت نمودار CUDA تامین می شود. نمودارهای CUDA با راه‌اندازی چندین عملیات GPU در یک حرکت، به جای راه‌اندازی جداگانه، بارهای کاری GPU را تسریع می‌کنند، که باعث کاهش هزینه‌های اضافی می‌شود. این به ویژه برای مدل های کوچک هنگام استفاده از موازی تانسور موثر است.

عملکرد افزوده شده با کاهش مصرف حافظه GPU اضافه می شود. حالت نمودار CUDA اکنون برای باطن vLLM پیش‌فرض است، بنابراین اگر در مقدار حافظه GPU موجود محدودیت دارید، می‌توانید تنظیم کنید. option.enforce_eager=True برای اجبار PyTorch حالت مشتاق.

Transformers-NeuronX Backend

نسخه به روز شده از NeuronX موجود در LMI NeuronX DLC اکنون از مدل هایی پشتیبانی می کند که مکانیسم توجه پرس و جو گروه بندی شده را دارند، مانند Mistral-7B و LLama2-70B. توجه پرس و جو گروهی بهینه سازی مهم مکانیزم توجه ترانسفورماتور پیش فرض است که در آن مدل با هدهای کلید و مقدار کمتری نسبت به سرهای پرس و جو آموزش داده می شود. این باعث کاهش اندازه حافظه نهان KV در حافظه GPU می شود و امکان همزمانی بیشتر و بهبود عملکرد قیمت را فراهم می کند.

شکل زیر روش های توجه چند سر، پرس و جو گروهی و چند پرس و جو را نشان می دهد (منبع).

نمودار توجه به پرس و جو گروهی

استراتژی‌های مختلف اشتراک‌گذاری حافظه پنهان KV برای تناسب با انواع مختلف بار کاری در دسترس هستند. برای اطلاعات بیشتر در مورد استراتژی های اشتراک گذاری، نگاه کنید پشتیبانی از توجه پرس و جو گروهی (GQA).. شما می توانید استراتژی مورد نظر خود را فعال کنید (shard-over-headsبه عنوان مثال) با کد زیر:

option.group_query_attention=shard-over-heads

علاوه بر این، اجرای جدید NeuronX DLC یک API کش برای TransformerNeuronX معرفی می کند که دسترسی به کش KV را امکان پذیر می کند. این به شما این امکان را می‌دهد که ردیف‌های کش KV را از درخواست‌های جدید درج و حذف کنید، در حالی که استنتاج دسته‌ای را تحویل می‌دهید. قبل از معرفی این API، حافظه نهان KV برای هر درخواست جدید اضافه شده مجدداً محاسبه شد. در مقایسه با LMI V7 (0.25.0)، ما تأخیر را بیش از 33٪ با درخواست های همزمان بهبود بخشیده ایم و از توان عملیاتی بسیار بالاتر پشتیبانی می کنیم.

انتخاب باطن مناسب

برای تصمیم گیری در مورد استفاده از پشتیبان بر اساس مدل و وظیفه انتخاب شده، از نمودار جریان زیر استفاده کنید. برای راهنمای کاربر باطن جداگانه همراه با مدل های پشتیبانی شده، رجوع کنید راهنمای کاربر LMI Backend.

درخت تصمیم برای تصمیم گیری در مورد استفاده از پشتیبان

Mixtral را با LMI DLC با ویژگی های اضافی اجرا کنید

بیایید نحوه استقرار مدل Mixtral-8x7B را با ظرف LMI 0.26.0 و ایجاد جزئیات اضافی مانند log_prob و finish_reason به عنوان بخشی از خروجی همچنین بحث می کنیم که چگونه می توانید از این ویژگی های اضافی از طریق یک مورد استفاده تولید محتوا بهره مند شوید.

دفترچه یادداشت کامل با دستورالعمل های دقیق در دسترس است GitHub repo.

ما با وارد کردن کتابخانه ها و پیکربندی محیط جلسه شروع می کنیم:

import boto3
import sagemaker 
import json 
import io 
import numpy as np 
from sagemaker import Model, image_uris, serializers, deserializers 

role = sagemaker.get_execution_role() # execution role for the endpoint 
session = sagemaker.session.Session() # sagemaker session for interacting with different AWS APIs 
region = session._region_name # region name of the current SageMaker Studio environment

می‌توانید از ظروف SageMaker LMI برای میزبانی مدل‌ها بدون کد استنتاج اضافی استفاده کنید. شما می توانید سرور مدل را از طریق متغیرهای محیطی یا a پیکربندی کنید serving.properties فایل. به صورت اختیاری، می توانید یک model.py فایل برای هرگونه پیش پردازش یا پس پردازش و الف requirements.txt برای هر بسته اضافی که باید نصب شود، فایل کنید.

در این مورد، ما از serving.properties فایل برای پیکربندی پارامترها و سفارشی کردن رفتار ظرف LMI. برای جزئیات بیشتر به GitHub repo. مخزن جزئیات پارامترهای پیکربندی مختلف را که می توانید تنظیم کنید توضیح می دهد. ما به پارامترهای کلیدی زیر نیاز داریم:

  • موتور – موتور زمان اجرا را برای استفاده DJL مشخص می کند. این راهبرد شاردینگ و بارگذاری مدل را در شتاب‌دهنده‌های مدل هدایت می‌کند.
  • option.model_id - مشخص می کند سرویس ذخیره سازی ساده آمازون (Amazon S3) URI مدل از پیش آموزش دیده یا شناسه مدل یک مدل از پیش آموزش دیده میزبانی شده در مخزن مدل در در آغوش کشیدن صورت. در این مورد، شناسه مدل را برای مدل Mixtral-8x7B ارائه می کنیم.
  • option.tensor_parallel_degree – تعداد دستگاه های GPU را که Accelerate نیاز به پارتیشن بندی مدل روی آن ها دارد، تنظیم می کند. این پارامتر همچنین تعداد کارگران در هر مدل را که هنگام اجرای سرویس DJL راه اندازی می شوند، کنترل می کند. ما این مقدار را روی max (حداکثر GPU در دستگاه فعلی).
  • option.rolling_batch - بچینگ پیوسته را برای بهینه سازی استفاده از شتاب دهنده و توان عملیاتی کلی فعال می کند. برای ظرف TensorRT-LLM، ما استفاده می کنیم auto.
  • option.model_loading_timeout – مقدار زمان برای دانلود و بارگذاری مدل را برای ارائه استنتاج تنظیم می کند.
  • option.max_rolling_batch - حداکثر اندازه دسته پیوسته را تنظیم می کند و تعیین می کند که در هر زمان معین چه تعداد دنباله را می توان به صورت موازی پردازش کرد.
%%writefile serving.properties 
engine=MPI 
option.model_id=mistralai/Mixtral-8x7B-v0.1 
option.tensor_parallel_degree=max 
option.max_rolling_batch_size=32 
option.rolling_batch=auto 
option.model_loading_timeout = 7200

ما بسته بندی می کنیم serving.properties فایل پیکربندی در قالب tar.gz، به طوری که نیازهای میزبانی SageMaker را برآورده کند. ظرف DJL LMI را با پیکربندی می کنیم tensorrtllm به عنوان موتور باطن. علاوه بر این، آخرین نسخه کانتینر (0.26.0) را مشخص می کنیم.

image_uri = image_uris.retrieve(
   framework="djl-tensorrtllm",
   region=sess.boto_session.region_name,
   version="0.26.0"
)

سپس، تربال محلی (حاوی serving.properties فایل پیکربندی) به پیشوند S3. ما از URI تصویر برای کانتینر DJL و مکان آمازون S3 که مدل سرویس‌دهنده مصنوعات tarball در آن آپلود شده است، برای ایجاد شی مدل SageMaker استفاده می‌کنیم.

model = Model(image_uri=image_uri, model_data=code_artifact, role=role) 

instance_type = "ml.p4d.24xlarge" 
endpoint_name = sagemaker.utils.name_from_base("mixtral-lmi-model") 

model.deploy(
   initial_instance_count=1,
   instance_type=instance_type,
   endpoint_name=endpoint_name,
   container_startup_health_check_timeout=1800
)

به‌عنوان بخشی از LMI 0.26.0، اکنون می‌توانید از دو جزئیات ریزدانه اضافی درباره خروجی تولید شده استفاده کنید:

  • log_probs - این احتمال لاگ تخصیص داده شده توسط مدل برای هر نشانه در قطعه دنباله جریانی است. شما می توانید با محاسبه احتمال مشترک یک دنباله به عنوان مجموع احتمالات لاگ تک تک نشانه ها، به عنوان یک تخمین تقریبی از اطمینان مدل استفاده کنید، که می تواند برای امتیازدهی و رتبه بندی خروجی های مدل مفید باشد. توجه داشته باشید که احتمالات توکن LLM معمولاً بدون کالیبراسیون بیش از حد مطمئن هستند.
  • پایان_دلیل - این دلیل تکمیل نسل است که می تواند رسیدن به حداکثر طول نسل، تولید یک توکن EOS یا تولید یک نشانه توقف تعریف شده توسط کاربر باشد. این با آخرین قطعه دنباله پخش شده برگردانده می شود.

با پاس دادن می توانید اینها را فعال کنید "details"=True به عنوان بخشی از ورودی شما به مدل.

بیایید ببینیم چگونه می توانید این جزئیات را ایجاد کنید. ما از یک مثال تولید محتوا برای درک کاربرد آنها استفاده می کنیم.

ما تعریف a LineIterator کلاس کمکی، که دارای عملکردهایی برای واکشی تنبل بایت ها از یک جریان پاسخ، بافر کردن آنها و شکستن بافر به خطوط است. ایده این است که بایت ها را از بافر ارائه دهیم در حالی که بایت های بیشتری را از جریان به صورت ناهمزمان واکشی کنیم.

class LineIterator:
    def __init__(self, stream):
        # Iterator to get bytes from stream 
        self.byte_iterator = iter(stream)  
        # Buffer stream bytes until we get a full line
        self.buffer = io.BytesIO()  
        # Track current reading position within buffer
        self.read_pos = 0

   def __iter__(self):
        # Make class iterable 
        return self

    def __next__(self):
        while True:
           # Seek read position within buffer
           self.buffer.seek(self.read_pos)  
           # Try reading a line from current position
           line = self.buffer.readline()
           # If we have a full line
           if line and line[-1] == ord('n'):
               # Increment reading position past this line
               self.read_pos += len(line)  
               # Return the line read without newline char
               return line[:-1] 
           # Fetch next chunk from stream  
           try:
               chunk = next(self.byte_iterator)
           # Handle end of stream 
           except StopIteration:
               # Check if we have any bytes still unread
               if self.read_pos < self.buffer.getbuffer().nbytes:
                   continue
               # If not, raise StopIteration
               raise
           # Add fetched bytes to end of buffer
           self.buffer.seek(0, io.SEEK_END)  
           self.buffer.write(chunk['PayloadPart']['Bytes'])

ایجاد و استفاده از احتمال رمز به عنوان یک جزئیات اضافی

یک مورد استفاده را در نظر بگیرید که در آن ما در حال تولید محتوا هستیم. به طور خاص، ما وظیفه داریم یک پاراگراف مختصر در مورد مزایای ورزش منظم برای یک وب سایت متمرکز بر سبک زندگی بنویسیم. ما می‌خواهیم محتوا تولید کنیم و مقداری امتیاز نشان‌دهنده از اعتماد مدل به محتوای تولید شده به دست آوریم.

ما نقطه پایانی مدل را با دستور خود فراخوانی می کنیم و پاسخ تولید شده را می گیریم. تنظیم کردیم "details": True به عنوان پارامتر زمان اجرا در ورودی مدل. از آنجایی که احتمال گزارش برای هر نشانه خروجی ایجاد می‌شود، ما احتمالات گزارش جداگانه را به یک لیست اضافه می‌کنیم. ما همچنین متن کامل تولید شده را از پاسخ می گیریم.

sm_client = boto3.client("sagemaker-runtime")

# Set details: True as a runtime parameter within the input.
body = {"inputs": prompt, "parameters": {"max_new_tokens":512, "details": True}}
resp = sm_client.invoke_endpoint_with_response_stream(EndpointName=endpoint_name, Body=json.dumps(body), ContentType="application/json")
event_stream = resp['Body']

overall_log_prob = []

for line in LineIterator(event_stream):
    resp = json.loads(line)
    if resp['token'].get('text') != None:
        token_log_prob = resp['token']['log_prob']
        overall_log_prob.append(token_log_prob)
    elif resp['generated_text'] != None:
        generated_text= resp['generated_text']

برای محاسبه نمره اطمینان کلی، میانگین همه احتمالات توکن فردی را محاسبه می‌کنیم و متعاقباً مقدار نمایی بین 0 و 1 را به دست می‌آوریم. از ورزش منظم

print(generated_text) 
overall_score=np.exp(np.mean(overall_log_prob)) 
print(f"nnOverall confidence score in the generated text: {overall_score}")

Boost inference performance for Mixtral and Llama 2 models with new Amazon SageMaker containers | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

این نمونه ای از نحوه تولید و استفاده از آن بود log_prob، در زمینه یک مورد استفاده از تولید محتوا. به طور مشابه، شما می توانید استفاده کنید log_prob به عنوان معیار نمره اطمینان برای موارد استفاده طبقه بندی.

همچنین، می‌توانید از آن برای توالی خروجی کلی یا امتیازدهی در سطح جمله برای ارزیابی تأثیر پارامترهایی مانند دما بر خروجی تولید شده استفاده کنید.

دلیل پایان را به عنوان یک جزئیات اضافی ایجاد و استفاده کنید

بیایید از همان مورد استفاده کنیم، اما این بار وظیفه نوشتن یک مقاله طولانی تر را داریم. علاوه بر این، می‌خواهیم مطمئن شویم که خروجی به دلیل مشکلات طول تولید (حداکثر طول توکن) یا به دلیل مواجه شدن با توکن‌های توقف کوتاه نشده است.

برای انجام این کار، از finish_reason ویژگی تولید شده در خروجی، مقدار آن را کنترل کرده و تا زمانی که کل خروجی تولید شود، به تولید ادامه دهید.

ما یک تابع استنتاج تعریف می‌کنیم که ورودی بارگیری را می‌گیرد و نقطه پایانی SageMaker را فراخوانی می‌کند، یک پاسخ را جریان می‌دهد و پاسخ را برای استخراج متن تولید شده پردازش می‌کند. محموله حاوی متن درخواستی به عنوان ورودی و پارامترهایی مانند حداکثر نشانه ها و جزئیات است. پاسخ در یک جریان خوانده می شود و خط به خط پردازش می شود تا نشانه های متن تولید شده در یک لیست استخراج شود. ما جزئیات مانند را استخراج می کنیم finish_reason. ما تابع استنتاج را در یک حلقه (درخواست های زنجیره ای) فراخوانی می کنیم در حالی که هر بار زمینه بیشتری را اضافه می کنیم و تعداد توکن های تولید شده و تعداد درخواست های ارسال شده را تا پایان مدل دنبال می کنیم.

def inference(payload):
    # Call SageMaker endpoint and get response stream
    resp = sm_client.invoke_endpoint_with_response_stream(EndpointName=endpoint_name, Body=json.dumps(payload), ContentType="application/json")
    event_stream = resp['Body']
    text_output = []
    for line in LineIterator(event_stream):
        resp = json.loads(line) 
        # Extract text tokens if present
        if resp['token'].get('text') != None:
            token = resp['token']['text']
            text_output.append(token)  
            print(token, end='')
        # Get finish reason if details present
        if resp.get('details') != None:
            finish_reason = resp['details']['finish_reason']
            # Return extracted output, finish reason and token length
            return payload['inputs'] + ''.join(text_output), finish_reason, len(text_output)

# set details: True as a runtime parameter within the input.
payload = {"inputs": prompt,  "parameters": {"max_new_tokens":256, "details": True}} 

finish_reason = "length"
# Print initial output 
print(f"Output: {payload['inputs']}", end='')  
total_tokens = 0
total_requests = 0
while finish_reason == 'length':
    # Call inference and get extracts
    output_text, finish_reason, out_token_len = inference(payload)
    # Update payload for next request
    payload['inputs'] = output_text 
    total_tokens += out_token_len
    total_requests += 1
# Print metrics
print(f"nntotal tokens generated: {total_tokens} ntotal requests sent: {total_requests}")

همانطور که می بینیم، حتی اگر max_new_token پارامتر روی 256 تنظیم شده است، ما از ویژگی finish_reason detail به عنوان بخشی از خروجی برای زنجیره درخواست های متعدد به نقطه پایانی استفاده می کنیم تا زمانی که کل خروجی تولید شود.

Boost inference performance for Mixtral and Llama 2 models with new Amazon SageMaker containers | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

به طور مشابه، بر اساس مورد استفاده خود، می توانید استفاده کنید stop_reason برای تشخیص طول دنباله خروجی ناکافی مشخص شده برای یک کار مشخص یا تکمیل ناخواسته به دلیل یک توالی توقف انسانی.

نتیجه

در این پست، نسخه نسخه 0.26.0 کانتینر AWS LMI را بررسی کردیم. ما پیشرفت‌های کلیدی عملکرد، پشتیبانی از مدل جدید و ویژگی‌های قابلیت استفاده جدید را برجسته کردیم. با این قابلیت ها، می توانید تعادل بهتری در هزینه و ویژگی های عملکرد داشته باشید و در عین حال تجربه بهتری را برای کاربران نهایی خود فراهم کنید.

برای آشنایی بیشتر با قابلیت های LMI DLC به ادامه مطلب مراجعه کنید توازی مدل و استنتاج مدل بزرگ. ما خوشحالیم که ببینیم چگونه از این قابلیت های جدید SageMaker استفاده می کنید.


درباره نویسندگان

Boost inference performance for Mixtral and Llama 2 models with new Amazon SageMaker containers | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.ژائو مورا یک معمار ارشد راه حل های تخصصی AI/ML در AWS است. João به مشتریان AWS - از استارت‌آپ‌های کوچک گرفته تا شرکت‌های بزرگ - کمک می‌کند تا مدل‌های بزرگ را به طور موثر آموزش داده و به کار گیرند، و به طور گسترده‌تری پلتفرم‌های ML را بر روی AWS بسازند.

Boost inference performance for Mixtral and Llama 2 models with new Amazon SageMaker containers | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.رهول شرما یک معمار ارشد راه حل در AWS است که به مشتریان AWS در طراحی و ساخت راه حل های AI/ML کمک می کند. قبل از پیوستن به AWS، راهول چندین سال را در بخش مالی و بیمه سپری کرده است و به مشتریان در ساخت پلتفرم های داده و تحلیلی کمک می کند.

Boost inference performance for Mixtral and Llama 2 models with new Amazon SageMaker containers | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.چینگ لان مهندس توسعه نرم افزار در AWS است. او روی چندین محصول چالش برانگیز در آمازون کار کرده است، از جمله راه حل های استنتاج ML با کارایی بالا و سیستم ثبت گزارش با کارایی بالا. تیم Qing با موفقیت اولین مدل میلیارد پارامتر را در تبلیغات آمازون با تاخیر بسیار کم مورد نیاز راه اندازی کرد. Qing دانش عمیقی در مورد بهینه سازی زیرساخت و شتاب یادگیری عمیق دارد.

Boost inference performance for Mixtral and Llama 2 models with new Amazon SageMaker containers | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.جیان شنگ یک مهندس توسعه نرم افزار در خدمات وب آمازون است که روی چندین جنبه کلیدی سیستم های یادگیری ماشین کار کرده است. او یکی از همکاران کلیدی در سرویس SageMaker Neo بوده است که بر کامپایل یادگیری عمیق و بهینه‌سازی زمان اجرا تمرکز دارد. او اخیراً تلاش‌های خود را هدایت کرده و به بهینه‌سازی سیستم یادگیری ماشین برای استنتاج مدل‌های بزرگ کمک کرده است.

Boost inference performance for Mixtral and Llama 2 models with new Amazon SageMaker containers | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.تایلر اوستربرگ مهندس توسعه نرم افزار در AWS است. او در ایجاد تجربیات استنتاج یادگیری ماشینی با کارایی بالا در SageMaker تخصص دارد. اخیراً تمرکز او بر روی بهینه سازی عملکرد Inferentia Deep Learning Containers در پلتفرم SageMaker بوده است. تایلر در پیاده‌سازی راه‌حل‌های میزبانی کارآمد برای مدل‌های زبان بزرگ و افزایش تجربیات کاربر با استفاده از فناوری‌های پیشرفته برتر است.

Boost inference performance for Mixtral and Llama 2 models with new Amazon SageMaker containers | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.روپیند گروال یک معمار ارشد راه حل های تخصصی AI/ML با AWS است. او در حال حاضر روی ارائه مدل ها و MLO ها در Amazon SageMaker تمرکز دارد. قبل از این نقش، او به عنوان مهندس یادگیری ماشین در ساختمان و مدل های میزبانی کار می کرد. خارج از محل کار، او از بازی تنیس و دوچرخه سواری در مسیرهای کوهستانی لذت می برد.

داوال پاتلداوال پاتل یک معمار اصلی یادگیری ماشین در AWS است. او با سازمان‌هایی از شرکت‌های بزرگ گرفته تا استارت‌آپ‌های متوسط ​​در زمینه مشکلات مربوط به محاسبات توزیع‌شده و هوش مصنوعی کار کرده است. او بر روی یادگیری عمیق از جمله دامنه های NLP و Computer Vision تمرکز دارد. او به مشتریان کمک می کند تا به استنباط مدل با عملکرد بالا در SageMaker دست یابند.

Boost inference performance for Mixtral and Llama 2 models with new Amazon SageMaker containers | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.راغو رامشا یک معمار ارشد راه حل های ML با تیم خدمات آمازون SageMaker است. او بر کمک به مشتریان در ساخت، استقرار و انتقال بارهای کاری تولید ML به SageMaker در مقیاس متمرکز است. او در زمینه های یادگیری ماشین، هوش مصنوعی و بینایی کامپیوتر تخصص دارد و دارای مدرک کارشناسی ارشد در علوم کامپیوتر از UT Dallas است. در اوقات فراغت از مسافرت و عکاسی لذت می برد.

تمبر زمان:

بیشتر از آموزش ماشین AWS