Gradient با AWS Inferentia، معیار LLM را مقرون به صرفه و بدون دردسر می کند | خدمات وب آمازون

Gradient با AWS Inferentia، معیار LLM را مقرون به صرفه و بدون دردسر می کند | خدمات وب آمازون

این یک پست مهمان است که با همکاری مایکل فیل در Gradient نوشته شده است.

ارزیابی عملکرد مدل‌های زبان بزرگ (LLM) یک مرحله مهم از فرآیند پیش‌آموزشی و تنظیم دقیق قبل از استقرار است. هرچه سریعتر و مکررتر بتوانید عملکرد را تأیید کنید، شانس بیشتری برای بهبود عملکرد مدل خواهید داشت.

At گرادیان، ما روی توسعه LLM سفارشی کار می کنیم و به تازگی راه اندازی شده است آزمایشگاه توسعه هوش مصنوعی، به سازمان های سازمانی یک سرویس توسعه شخصی و سرتاسر برای ساختن LLM های خصوصی و سفارشی و کمک خلبان های هوش مصنوعی (AI) ارائه می دهد. به عنوان بخشی از این فرآیند، ما به طور منظم عملکرد مدل‌های خود (تنظیم، آموزش‌دیده، و باز) را در برابر معیارهای باز و اختصاصی ارزیابی می‌کنیم. در حالی که با تیم AWS کار می کنیم تا مدل های خود را آموزش دهیم AWS Trainium، متوجه شدیم که وقتی نوبت به ابزار اصلی برای ارزیابی LLM می شود، هم به VRAM و هم در دسترس بودن نمونه های GPU محدود شده ایم. lm-evaluation-harness. این چارچوب متن‌باز به شما امکان می‌دهد مدل‌های زبان مولد مختلف را در وظایف ارزیابی و معیارهای مختلف امتیاز دهید. توسط تابلوهای امتیازاتی مانند در آغوش کشیدن صورت برای معیارهای عمومی

برای غلبه بر این چالش ها، تصمیم گرفتیم راه حل خود را بسازیم و منبع باز کنیم - یکپارچه سازی نورون AWS، کتابخانه پشت سر استنتاج AWS و Trainium، به lm-evaluation-harness. این ادغام امکان محک زدن را فراهم کرد v-alpha-tross، نسخه اولیه مدل آلباتروس ما، در برابر سایر مدل های عمومی در طول فرآیند آموزش و پس از آن.

برای زمینه، این ادغام به عنوان یک کلاس مدل جدید در lm-evaluation-harness اجرا می‌شود، که استنتاج نشانه‌ها و تخمین احتمال ورود به سیستم دنباله‌ها را بدون تأثیر بر کار ارزیابی واقعی انتزاع می‌کند. تصمیم برای انتقال خط لوله آزمایش داخلی ما به ابر محاسبه الاستیک آمازون (Amazon EC2) نمونه های inf2 (طراحی شده توسط AWS Inferentia2) ما را قادر می سازد تا به 384 گیگابایت حافظه شتاب دهنده مشترک دسترسی داشته باشیم که بدون زحمت با تمام معماری های عمومی فعلی ما سازگار است. با استفاده از نمونه‌های AWS Spot، ما توانستیم از ظرفیت استفاده‌نشده EC2 در AWS Cloud استفاده کنیم—که باعث صرفه‌جویی در هزینه‌ها تا 90 درصد از قیمت‌های درخواستی می‌شود. این امر زمان آزمایش را به حداقل می رساند و به ما امکان می داد مکرراً آزمایش کنیم زیرا می توانستیم چندین نمونه را که به راحتی در دسترس بودند آزمایش کنیم و پس از پایان کار نمونه ها را منتشر کنیم.

در این پست، تجزیه و تحلیل دقیقی از تست‌های خود، چالش‌هایی که با آن‌ها مواجه شدیم، و نمونه‌ای از استفاده از مهار تست در AWS Inferentia را ارائه می‌دهیم.

بنچمارک در AWS Inferentia2

هدف این پروژه ایجاد امتیازات یکسانی بود که در نشان داده شده است تابلوی امتیازات LLM را باز کنید (برای بسیاری از مدل‌های CausalLM موجود در Hugging Face)، در حالی که انعطاف‌پذیری برای اجرای آن در برابر معیارهای خصوصی حفظ می‌شود. برای مشاهده نمونه های بیشتر از مدل های موجود به ادامه مطلب مراجعه کنید AWS Inferentia و Trainium در بغل کردن صورت.

کد مورد نیاز برای پورت کردن روی یک مدل از ترانسفورماتور Hugging Face به Hugging Face تغییر می کند نورون بهینه کتابخانه پایتون بسیار کم بود. زیرا lm-evaluation-harness استفاده می کند AutoModelForCausalLM، کاهش استفاده از جایگزینی وجود دارد NeuronModelForCausalLM. بدون یک مدل از پیش کامپایل شده، مدل به طور خودکار در لحظه کامپایل می شود، که می تواند 15 تا 60 دقیقه به یک کار اضافه کند. این به ما انعطاف پذیری برای استقرار آزمایش برای هر نمونه AWS Inferentia2 و پشتیبانی از مدل CausalLM را داد.

نتایج

به دلیل نحوه عملکرد معیارها و مدل ها، ما انتظار نداشتیم که نمرات دقیقاً در اجراهای مختلف مطابقت داشته باشند. با این حال، آنها باید بر اساس انحراف معیار بسیار نزدیک باشند، و همانطور که در جدول زیر نشان داده شده است، ما به طور مداوم این را دیده‌ایم. بنچمارک های اولیه ای که ما در AWS Inferentia2 اجرا کردیم همگی توسط تابلوی امتیازات Hugging Face تایید شدند.

In lm-evaluation-harness، دو جریان اصلی وجود دارد که توسط تست های مختلف استفاده می شود: generate_until و loglikelihood. تست gsm8k در درجه اول استفاده می کند generate_until برای ایجاد پاسخ درست مانند هنگام استنتاج. Loglikelihood عمدتاً در محک زدن و آزمایش استفاده می شود و احتمال تولید خروجی های مختلف را بررسی می کند. هر دو در نورون کار می کنند، اما loglikelihood روش در SDK 2.16 از مراحل اضافی برای تعیین احتمالات استفاده می کند و می تواند زمان بیشتری را صرف کند.

نتایج Lm-Evaluation-Harness
پیکربندی سخت افزار سیستم اصلی AWS Inferentia inf2.48xlarge
زمان با batch_size=1 برای ارزیابی mistralai/Mistral-7B-Instruct-v0.1 در gsm8k دقیقه 103 دقیقه 32
امتیاز در gsm8k (دریافت پاسخ - exact_match با std) 0.3813 - 0.3874 (± 0.0134) 0.3806 - 0.3844 (± 0.0134)

با Neuron و lm-evaluation-harness شروع کنید

کد موجود در این بخش می تواند به شما در استفاده کمک کند lm-evaluation-harness و آن را با مدل های پشتیبانی شده در Hugging Face اجرا کنید. برای دیدن چند مدل موجود به ادامه مطلب مراجعه کنید AWS Inferentia و Trainium در بغل کردن صورت.

اگر با مدل‌های در حال اجرا در AWS Inferentia2 آشنا هستید، ممکن است متوجه شوید که وجود ندارد num_cores کد ما تعداد هسته‌های موجود را تشخیص می‌دهد و به‌طور خودکار آن عدد را به‌عنوان پارامتر ارسال می‌کند. این به شما امکان می دهد بدون توجه به اندازه نمونه ای که استفاده می کنید، آزمایش را با استفاده از همان کد اجرا کنید. همچنین ممکن است متوجه شوید که ما به مدل اصلی ارجاع می دهیم، نه نسخه کامپایل شده Neuron. هارنس به صورت خودکار مدل را در صورت نیاز برای شما کامپایل می کند.

مراحل زیر نحوه استقرار Gradient را به شما نشان می دهد gradientai/v-alpha-tross مدلی که ما تست کردیم اگر می خواهید با یک مثال کوچکتر در نمونه کوچکتر تست کنید، می توانید از آن استفاده کنید mistralai/Mistral-7B-v0.1 مدل.

  1. سهمیه پیش‌فرض برای اجرای نمونه‌های On-Demand Inf 0 است، بنابراین باید از طریق Service Quotas درخواست افزایش دهید. درخواست دیگری برای همه درخواست‌های Inf Spot Instance اضافه کنید تا بتوانید با Spot Instance‌ها آزمایش کنید. برای این مثال به سهمیه 192 vCPU با استفاده از نمونه inf2.48xlarge یا سهمیه 4 vCPU برای inf2.xlarge اولیه (اگر مدل Mistral را به کار می برید) نیاز دارید. سهمیه ها مختص منطقه AWS هستند، بنابراین مطمئن شوید که درخواست خود را انجام داده اید us-east-1 or us-west-2.
  2. بر اساس مدل خود در مورد نمونه خود تصمیم بگیرید. زیرا v-alpha-tross یک معماری 70B است، ما تصمیم گرفتیم از یک نمونه inf2.48xlarge استفاده کنیم. یک inf2.xlarge (برای مدل 7B Mistral) مستقر کنید. اگر مدل دیگری را آزمایش می‌کنید، ممکن است لازم باشد نمونه خود را بسته به اندازه مدل خود تنظیم کنید.
  3. استقرار نمونه با استفاده از Hugging Face DLAMI نسخه 20240123، تا تمامی درایورهای لازم نصب شوند. (قیمت نشان داده شده شامل هزینه نمونه است و هزینه نرم افزار اضافی ندارد.)
  4. اندازه درایو را روی 600 گیگابایت (100 گیگابایت برای Mistral 7B) تنظیم کنید.
  5. کلون و نصب کنید lm-evaluation-harness در مورد نمونه ما یک ساخت را مشخص می کنیم تا بدانیم هر گونه واریانسی به دلیل تغییرات مدل است، نه تغییرات تست یا کد.
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
# optional: pick specific revision from the main branch version to reproduce the exact results
git checkout 756eeb6f0aee59fc624c81dcb0e334c1263d80e3
# install the repository without overwriting the existing torch and torch-neuronx installation
pip install --no-deps -e . 
pip install peft evaluate jsonlines numexpr pybind11 pytablewriter rouge-score sacrebleu sqlitedict tqdm-multiprocess zstandard hf_transfer

  1. دویدن lm_eval با نوع مدل hf-neuron و مطمئن شوید که پیوندی به مسیر بازگشت به مدل در Hugging Face دارید:
# e.g use mistralai/Mistral-7B-v0.1 if you are on inf2.xlarge
MODEL_ID=gradientai/v-alpha-tross

python -m lm_eval --model "neuronx" --model_args "pretrained=$MODEL_ID,dtype=bfloat16" --batch_size 1 --tasks gsm8k

اگر مثال قبلی را با Mistral اجرا کنید، باید خروجی زیر را دریافت کنید (در inf2.xlarge کوچکتر، ممکن است 250 دقیقه اجرا شود):

███████████████████████| 1319/1319 [32:52<00:00,  1.50s/it]
neuronx (pretrained=mistralai/Mistral-7B-v0.1,dtype=bfloat16), gen_kwargs: (None), limit: None, num_fewshot: None, batch_size: 1
|Tasks|Version|  Filter  |n-shot|  Metric   |Value |   |Stderr|
|-----|------:|----------|-----:|-----------|-----:|---|-----:|
|gsm8k|      2|get-answer|     5|exact_match|0.3806|±  |0.0134|

پاک کردن

وقتی کارتان تمام شد، حتماً موارد EC2 را از طریق کنسول آمازون EC2 متوقف کنید.

نتیجه

تیم‌های Gradient و Neuron از دیدن پذیرش گسترده‌تر ارزیابی LLM با این نسخه هیجان‌زده هستند. خودتان آن را امتحان کنید و محبوب ترین چارچوب ارزیابی را در نمونه های AWS Inferentia2 اجرا کنید. اکنون می توانید هنگام استفاده از در دسترس بودن AWS Inferentia2 بر حسب تقاضا بهره مند شوید توسعه سفارشی LLM از Gradient. با اینها میزبانی مدل ها در AWS Inferentia را شروع کنید آموزش.


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

Gradient با AWS Inferentia، معیار LLM را مقرون به صرفه و بدون دردسر می کند | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.مایکل فیل مهندس هوش مصنوعی در Gradient است و قبلاً به عنوان مهندس ML در Rodhe & Schwarz و محقق در مؤسسه Max-Plank برای سیستم‌های هوشمند و Bosch Rexroth کار کرده است. مایکل یکی از مشارکت کنندگان پیشرو در کتابخانه های استنباط منبع باز مختلف برای LLM ها و پروژه های منبع باز مانند StarCoder است. مایکل دارای مدرک لیسانس مکاترونیک و فناوری اطلاعات از KIT و مدرک کارشناسی ارشد رباتیک از دانشگاه فنی مونیخ است.

Gradient با AWS Inferentia، معیار LLM را مقرون به صرفه و بدون دردسر می کند | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.جیم برتافت یک معمار ارشد راه‌حل‌های راه‌اندازی در AWS است و مستقیماً با استارت‌آپ‌هایی مانند Gradient کار می‌کند. جیم یک CISSP، بخشی از انجمن میدان فنی AWS AI/ML، یک سفیر نورون است و با جامعه منبع باز کار می کند تا امکان استفاده از Inferentia و Trainium را فراهم کند. جیم دارای مدرک لیسانس ریاضیات از دانشگاه کارنگی ملون و مدرک کارشناسی ارشد در اقتصاد از دانشگاه ویرجینیا است.

تمبر زمان:

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