محققان در Google* ابتدا BERT را با حدود 340 میلیون پارامتر آموزش دادند. سپس تغییرات متعددی شروع به ظهور کردند، از ترانسفورماتورهای مختلف مولد از پیش آموزش دیده (GPT) از OpenAI* با حدود 175 میلیارد پارامتر (برای GTP-3) تا ماموت Wu Dao* با حدود 1.75 تریلیون پارامتر. این اعداد چشمگیر هستند اما بار محاسباتی هم برای آموزش و هم برای استنتاج دارند.
نتایج زیر را میتوان در آخرین نسل پردازندههای مقیاسپذیر Intel® Xeon® که اکنون در سرویسهای وب آمازون* موجود است تأیید کرد. در اینجا، ما آن را روی نمونههای Amazon R6i و Amazon R7i آزمایش کردیم
ما از این بهینهسازی استفاده کردهایم تا با اجرای معماری ترانسفورماتور برنامههای NLP، عملکرد بهتری را برای مشتریان خود داشته باشیم. فعال کردن آنها برای استفاده از نمونه های CPU می تواند به کاهش هزینه های خرید پردازنده های گرافیکی گران قیمت کمک کند. مطمئن شوید که مخزن GitHub* را برای ترانسفورماتور مدل سبک برای اعلان ها یا مشارکت در پروژه پین کرده یا ستاره دار کنید.
توجه: این فرآیند بهینه سازی روی هر مدلی کار می کند، در اینجا دستورالعمل های بیشتری وجود دارد.
در این پست، کتابخانهای را به شما نشان میدهیم که میتواند نمایشهای رمزگذار دوطرفه را از مدلهای ترانسفورماتور (BERT) بهینه کند تا با تبدیل آنها به bfloat16 روی CPU اجرا شوند. ما توضیح خواهیم داد که این مدل ها چگونه کار می کنند و چرا نسخه های بهینه شده اهمیت دارند.
2. معیار را اجرا کنید:
برای امتحان کردن، پیش نیازها را نصب کنید:
آن را از منبع بسازید:
برای بهینه سازی مدل بزرگ BERT (بدون جعبه) برای برنامه خود، مراحل زیر را دنبال کنید.
در یادگیری عمیق، و به ویژه در مدلهای ترانسفورماتور، محاسبات به شدت بر هزاران ضرب برداری و ماتریس متکی هستند. اندازه مدل نمایش این بردارها و ماتریس ها را تعیین می کند. به عنوان مثال، برای نمایش عدد 1.23456789، فرمت داده float32 از بیت های بیشتری برای نمایش آن استفاده می کند و مقداری نزدیک به عدد اصلی به دست می آورد، در حالی که فرمت داده float16 از بیت های کمتری استفاده می کند و مقدار را به 1.234375 گرد می کند. این نمایش ها در طول آموزش مدل آموخته می شوند. هدف این است که آنها را به فرمت های کمتر دقیق تبدیل کنیم بدون اینکه تاثیر قابل توجهی بر عملکرد مدل داشته باشد و در عین حال سرعت پردازش را بهبود بخشد.
کاهش نیازهای محاسباتی مدل هر دوی این مشکلات را حل می کند. ما به شما نشان خواهیم داد که چگونه در این پیاده سازی با مدل ترانسفورماتور BERT-Large Hugging Face کار می کند.
این اغلب با پردازش زبان طبیعی (NLP) اتفاق میافتد، یک عنصر حیاتی در هر برنامهای که شامل زبان انسانی است. ترانسفورماتورهای مدل یادگیری ماشینی برای NLP پیشرفته هستند زیرا ماشین ها را قادر می سازند تا زبان را مانند قبل درک کنند. بهینه سازی عملکرد ترانسفورماتور برای اطمینان از اجرای سریع و کارآمد این مدل ها ضروری است.
نمونه AWS Ice lake -r6i.12xlarge 48 vcpu (Ice Lake, Intel(R) Xeon(R) Platinum 8375C ), 348 GB حافظه کل، بایوس: Amazon EC2 1.0 , میکروکد: 0xd000363 , Ubuntu1~1 ~1 Ubuntu 22.04، 5.4.0–1068-aws، حجم کار، معیار: Open MP Threads، Python 3.9.13، TensorFlow 2.9، OneDNN 2.7، اندازه دسته: 1،2،4،5، دقت: FP32. تست شده توسط اینتل در سپتامبر 2022.
امتیاز سجوانی یک معمار نرم افزار Cloud AI/ML در اینتل با تخصص در سیستم های جاسازی شده و تجربه طراحی در مدارهای مجتمع ویژه برنامه (ASIC)، آرایه های دروازه قابل برنامه ریزی میدانی (FPGA) و سطوح انتقال ثبت (RTL) است.
خبر خوب این است که میتوانید بهینهسازیهای اضافی را اضافه کنید که میتوانند از مزیت سختافزار، در این مورد، پردازندهها استفاده کنند. این پیاده سازی از کتابخانه شبکه عصبی عمیق Intel® OneAPI (oneDNN) استفاده می کند. مزیت دیگر؟ به لطف کار با Intel® Extension for TensorFlow*، به کدنویسی اضافی نیاز ندارد.
راه های مختلفی برای بهینه سازی یک مدل وجود دارد که یکی از آنها کوانتیزه کردن است. اینتل ابزاری به نام Intel® Neural Compressor (INC) ارائه میکند که میتوانید به تنهایی روی مدلهای خود اجرا کنید یا آنچه را که ما با این پیادهسازی انجام دادهایم بپذیرید. ما می توانیم درک کنیم که به عنوان یک “کاهش دقیق”، احتمالاً در مورد INT8، FP32 یا BFloat 16 شنیده اید، اما چه معنایی دارد که برای یک مدل اعمال می شود؟
از ویکی پدیا، مجوز Creative Commons Attribution-ShareAlike 3.0
source /opt/intel/oneapi/setvars.sh # Make sure CMake can find oneDNN
ازکیل لانزا یک مبشر متن باز در تیم اکوسیستم باز اینتل است که مشتاق کمک به مردم برای کشف دنیای هیجان انگیز هوش مصنوعی است. او همچنین یک مجری مکرر کنفرانس هوش مصنوعی و خالق موارد استفاده، آموزش و راهنماهایی است که به توسعه دهندگان کمک می کند تا ابزارهای AI منبع باز مانند TensorFlow* و Hugging Face* را بکار گیرند. او را در توییتر در @ پیدا کنیدeze_lanza
کد محاسباتی ذوب شده، کل محاسبات رمزگذار BERT و لایه خود گواهی را انجام می دهد. می توان آن را بر روی هر لایه خود توجهی انجام داد، بنابراین هر مدل BERT را می توان با استفاده از همان عملگر بهینه کرد. عملگر تک ذوب شده به عنوان عملگر TensorFlow در معرض دید قرار می گیرد که جایگزین عملگرهای گراف فرعی می شود. این امر محاسبات و دسترسی به حافظه را کاهش می دهد.
به دلیل اندازه مدل، دو مانع اصلی وجود دارد:
حافظه مدل های ترانسفورماتور مانند BERT از یک نمودار با عملگرهای زیادی تشکیل شده است. از آنجایی که عمدتاً از سلول های ترانسفورماتور انباشته تشکیل شده است، یک نسخه حافظه فشرده بین محاسبات ابتدایی متعدد وجود دارد. اکثر روشها بهینهسازی هر سلول را با ترکیب زیر نمودارهای کلیدی چند عملگر ابتدایی در هستههای منفرد، از جمله لایههای Self-Attention، Layer Normalization و Gaussian Error Linear Unit (Gelu) هدف قرار میدهند. اینها می توانند هزینه محاسبات و پهنای باند حافظه را به میزان قابل توجهی کاهش دهند.
CPU مدل ها می توانند از طریق موازی سازی از چندین هسته بهره ببرند. این زمانی اتفاق می افتد که لایه Self-Attention معماری ترانسفورماتور (بردارهای Q، K و V) بر اساس تعداد هدهای Self-Attention تقسیم بندی شوند. این می تواند موازی سازی را تقویت کند و به دستگاه اجازه دهد تا به طور کامل از هسته های CPU موجود استفاده کند.
اگر سرعت و کارایی همیشه برای توسعه دهندگان مهم است، آنها در هوش مصنوعی که در آن مدل های بزرگ می توانند در مراحل آموزش یا استنباط گرفتار شوند، کلیدی هستند.
آموزش مدل ترانسفورماتور از ابتدا نیازمند سخت افزار تخصصی، مدیریت تعداد زیادی پارامتر و رسیدگی به حجم وسیعی از داده است. این امر موفقیت افراد یا حتی یک شرکت را تقریبا غیرممکن می کند. به عنوان مثال، محققان از حدود 3.3 میلیارد کلمه برای آموزش BERT و 500 میلیارد کلمه برای GPT استفاده کردند که به آن مدلها اجازه میدهد به درک قابل توجهی از زبان دست یابند.
این بهینه سازی منبع باز معماری ترانسفورماتور را سبک می کند
خوشبختانه، پس از آموزش، آن مدلهای عمومی اکنون از طریق APIهای منبع باز (مانند Hugging Face*، PyTorch* یا TensorFlow*) در دسترس هستند. گام بعدی استفاده از این مدلهای آموزشدیده است، که همچنان نیاز به تنظیم دقیق مدلهای پایه برای موضوع خاص شما دارد، با توجه به اینکه این مدلهای پایه درک کلی از زبانی دارند که با آن آموزش دیدهاند، مانند Wikipedia*، Reddit* و غیره. پس از اینکه مدل را برای مورد استفاده خود تنظیم کردید، هنوز باید بر چالش استنتاج غلبه کنید.
اگرچه مدل های یادگیری عمیق فراوان هستند، یک معماری شبکه ساده ترانسفورماتورها را متمایز می کند. برای اولین بار در مقاله سال 2017 “توجه همه آن چیزی است که شما نیاز دارید” ارائه شد، آنها به سرعت به روشی پیشرفته برای NLP تبدیل شدند، زیرا توانایی تجزیه مفاهیم زبانی را داشتند که قبلاً از طریق روش های دیگر استفاده می شد.
Bfloat 16 یک فرمت داده عددی است که حافظه کمتری نسبت به سایرین اشغال میکند و برای ارائه کارایی بیشتر در برنامههای یادگیری ماشینی و کوههایی از دادههایی که پردازش میکنند طراحی شده است. از 16 بیت برای نمایش یک عدد ممیز شناور استفاده می کند.
cmake ..
سپاسگزاریها نویسندگان از کریستوف پیوتر چوتکیویچ و میکولای ژیچینسکی برای کمک هایشان تشکر می کنند.