Jannah Theme License is not validated, Go to the theme options page to validate the license, You need a single license for each domain name.
تقنية وتكنولوجيا

قم بتسريع استنتاج البرمجة اللغوية العصبية (NLP) باستخدام ONNX Runtime على معالجات AWS Graviton


ONNX هو إطار عمل مفتوح المصدر للتعلم الآلي (ML) يوفر إمكانية التشغيل البيني عبر مجموعة واسعة من الأطر وأنظمة التشغيل ومنصات الأجهزة. ONNX Runtime هو محرك وقت التشغيل المستخدم للاستدلال على النماذج والتدريب مع ONNX.

تم تحسين معالجات AWS Graviton3 لأحمال عمل ML، بما في ذلك دعم bfloat16 وتعليمات Scalable Vector Extension (SVE) وتعليمات Matrix Multiplication (MMLA). نواة Bfloat16 المتسارعة SGEMM ونواة int8 MMLA المتسارعة GEMM (QGEMM) في ONNX قامت بتحسين أداء الاستدلال بنسبة تصل إلى 65% لاستدلال fp32 وما يصل إلى 30% لاستدلال int8 الكمي للعديد من نماذج معالجة اللغة الطبيعية (NLP) على AWS Graviton3- مثيلات Amazon Elastic Compute Cloud (Amazon EC2). بدءًا من الإصدار v1.17.0، يدعم ONNX Runtime هذه النوى المحسنة.

في هذا المنشور، نعرض كيفية تشغيل استنتاج ONNX Runtime على مثيلات EC2 المستندة إلى AWS Graviton3 وكيفية تكوينها لاستخدام نواة GEMM المحسنة. نعرض أيضًا السرعة الناتجة من خلال قياس الأداء.

حبات GEMM المحسنة

يدعم ONNX Runtime الواجهة الخلفية لـ Microsoft Linear Algebra Subroutine (MLAS) باعتبارها موفر التنفيذ الافتراضي (EP) لمشغلي التعلم العميق. تدعم مثيلات EC2 المستندة إلى AWS Graviton3 (مثيلات c7g وm7g وr7g وc7gn وHpc7g) تنسيق bfloat16 وتعليمات MMLA لتسريع مشغل التعلم العميق. تعمل هذه التعليمات على تحسين استخدام أجهزة SIMD وتقليل زمن الوصول للاستدلال الشامل بما يصل إلى 1.65 مرة مقارنةً بالنواة المستندة إلى تعليمات منتج Armv8 DOT.

قام فريق AWS بتنفيذ نواة MLAS للرياضيات السريعة bfloat16 وint8 quantized General Matrix Multiply (GEMM) باستخدام تعليمات BFMMLA وSMMLA وUMMLA، التي تتمتع بإنتاجية مضاعفة أعلى للمصفوفة مقارنة بتعليمات DOT. يتيح دعم bfloat16 النشر الفعال للنماذج التي تم تدريبها باستخدام bfloat16 وfp32 والدقة المختلطة التلقائية (AMP) دون الحاجة إلى التكميم. كما هو موضح في الرسوم البيانية التالية، تم دمج نواة GEMM المحسنة في ONNX Runtime CPU EP كنواة MLAS.

يوضح الشكل الأول حزمة برامج ONNX، مع إبراز (باللون البرتقالي) المكونات المحسنة لتحسين أداء الاستدلال على منصة AWS Graviton3.

يوضح الرسم البياني التالي تدفق ONNX Runtime EP، مع إبراز (باللون البرتقالي) المكونات المحسنة لتحسين أداء الاستدلال على منصة AWS Graviton3.

onnxruntime_flow_Graviton_kernels

تمكين التحسينات

تعد التحسينات جزءًا من إصدار ONNX Runtime 1.17.0، وهي متاحة بدءًا من عجلات onnxruntime-1.17.0 python وحزم conda-1.17.0. يتم تمكين نواة int8 المحسنة افتراضيًا، وسيتم التقاطها تلقائيًا لمعالجات AWS Graviton3. من ناحية أخرى، لا يتم تمكين نواة الرياضيات السريعة Bfloat16 افتراضيًا وتحتاج إلى خيارات الجلسة التالية في ONNX Runtime لتمكينها:

# لتطبيقات C++

SessionOptions so; 
so.config_options.AddConfigEntry( kOrtSessionOptionsMlasGemmFastMathArm64Bfloat16, "1");

# لتطبيقات بايثون

sess_options = onnxruntime.SessionOptions()
sess_options.add_session_config_entry("mlas.enable_gemm_fastmath_arm64_bfloat16", "1")

النتائج المرجعية

لقد بدأنا بقياس إنتاجية الاستدلال، بالاستعلامات في الثانية، لنموذج fp32 دون أي من التحسينات التي أجريناها (باستخدام ONNX Runtime 1.16.0)، والتي تم وضع علامة عليها عند 1.0 بالخط الأحمر المنقط في الرسم البياني التالي. ثم قمنا بمقارنة التحسينات من نواة الرياضيات السريعة bfloat16 من ONNX Runtime 1.17.1 لنفس استنتاج نموذج fp32. يتم رسم النتائج الطبيعية في الرسم البياني. يمكنك أن ترى أنه بالنسبة لنماذج BERT وRoBERTa وGPT2، يصل تحسين الإنتاجية إلى 65%. ولوحظت تحسينات مماثلة لزمن الاستدلال.

fp32_perf_improvement_onnx

على غرار الرسم البياني السابق لمقارنة الاستدلال fp32، بدأنا بقياس إنتاجية الاستدلال، بالاستعلامات في الثانية، للنموذج الكمي int8 دون أي من التحسينات التي قمنا بها (باستخدام ONNX Runtime 1.16.0)، والتي تم وضع علامة عليها عند 1.0 بالنقطة الحمراء. الخط في الرسم البياني التالي. ثم قمنا بمقارنة التحسينات من نواة MMLA المحسنة من ONNX Runtime 1.17.1 لنفس الاستدلال النموذجي. يتم رسم النتائج الطبيعية في الرسم البياني. يمكنك أن ترى أنه بالنسبة لنماذج BERT وRoBERTa وGPT2، يصل تحسين الإنتاجية إلى 30%. ولوحظت تحسينات مماثلة لزمن الاستدلال.

int8_perf_improvement_onnx

إعداد المعيار

استخدمنا مثيل c7g.4xl EC2 المستند إلى AWS Graviton3 مع AMI المستند إلى Ubuntu 22.04 لإظهار تحسينات الأداء باستخدام نواة GEMM المحسنة من ONNX Runtime. تم ذكر المثيل وتفاصيل AMI في المقتطف التالي:

Instance: c7g.4xl instance
Region: us-west-2
AMI: ami-0a24e6e101933d294 (Ubuntu 22.04/Jammy with 6.5.0-1014-aws kernel)

يوفر مستودع ONNX Runtime نصوصًا مرجعية لقياس الاستدلال لنماذج اللغة القائمة على المحولات. تدعم البرامج النصية مجموعة واسعة من النماذج والأطر والتنسيقات. لقد اخترنا نماذج BERT وRoBERTa وGPT المستندة إلى PyTorch لتغطية المهام اللغوية الشائعة مثل تصنيف النص، وتحليل المشاعر، والتنبؤ بالكلمة المقنعة. تغطي النماذج بنية محولات التشفير وفك التشفير.

يسرد التعليمة البرمجية التالية خطوات تشغيل الاستدلال لنموذج fp32 مع وضع الرياضيات السريع bfloat16 والوضع الكمي int8 باستخدام البرنامج النصي لقياس الأداء ONNX Runtime. يقوم البرنامج النصي بتنزيل النماذج، وتصديرها إلى تنسيق ONNX، وتكميمها إلى int8 لاستدلال int8، وتشغيل الاستدلال لأطوال تسلسلية وأحجام دفعات مختلفة. عند إكمال البرنامج النصي بنجاح، سيتم طباعة إنتاجية الاستدلال بالاستعلامات/الثانية (QPS) وزمن الوصول بالميلي ثانية جنبًا إلى جنب مع تكوين النظام. ارجع إلى البرنامج النصي ONNX Runtime Benchmarking للحصول على مزيد من التفاصيل.

# Install Python
sudo apt-get update
sudo apt-get install -y python3 python3-pip

# Upgrade pip3 to the latest version
python3 -m pip install --upgrade pip

# Install onnx and onnx runtime
# NOTE: We used 1.17.1 instead of 1.17.0 as it was the latest
# version available while collecting data for this post
python3 -m pip install onnx==1.15.0 onnxruntime==1.17.1

# Install the dependencies
python3 -m pip install transformers==4.38.1 torch==2.2.1 psutil==5.9.8

# Clone onnxruntime repo to get the benchmarking scripts
git clone --recursive https://github.com/microsoft/onnxruntime.git
cd onnxruntime
git checkout 430a086f22684ad0020819dc3e7712f36fe9f016
cd onnxruntime/python/tools/transformers

# To run bert-large fp32 inference with bfloat16 fast math mode
python3 benchmark.py -m bert-large-uncased -p fp32 --enable_arm64_bfloat16_fastmath_mlas_gemm

# To run bert-base  fp32 inference with bfloat16 fast math mode
python3 benchmark.py -m bert-base-cased -p fp32 --enable_arm64_bfloat16_fastmath_mlas_gemm

# To run roberta-base  fp32 inference with bfloat16 fast math mode
python3 benchmark.py -m roberta-base -p fp32 --enable_arm64_bfloat16_fastmath_mlas_gemm

# To run gpt2  fp32 inference with bfloat16 fast math mode
python3 benchmark.py -m gpt2 -p fp32 --enable_arm64_bfloat16_fastmath_mlas_gemm

# To run bert-large int8 quantized inference
python3 benchmark.py -m bert-large-uncased -p int8

# To run bert-base int8 quantized inference
python3 benchmark.py -m bert-base-cased -p int8

# To run roberta-base int8 quantized inference
python3 benchmark.py -m roberta-base -p int8

# To run gpt2 int8 quantized inference
python3 benchmark.py -m gpt2 -p int8

خاتمة

في هذا المنشور، ناقشنا كيفية تشغيل استنتاج ONNX Runtime على مثيل EC2 المستند إلى AWS Graviton3 وكيفية تكوين المثيل لاستخدام نواة GEMM المحسنة. لقد أظهرنا أيضًا عمليات التسريع الناتجة. نأمل أن تجربها!

إذا وجدت حالات استخدام لم تتم فيها ملاحظة مكاسب مماثلة في الأداء على AWS Graviton، فيرجى فتح مشكلة في دليل AWS Graviton الفني GitHub لإعلامنا بذلك.


عن المؤلف

سونيتا نادامبالي هو مدير تطوير البرمجيات في AWS. وهي تقود تحسينات أداء برنامج Graviton لأحمال عمل التعلم الآلي والحوسبة عالية الأداء (HPC). إنها متحمسة لتطوير البرمجيات مفتوحة المصدر وتقديم حلول برمجية عالية الأداء ومستدامة باستخدام Arm SoCs.

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى