در این پست، کتابخانهای را به شما نشان میدهیم که میتواند نمایشهای رمزگذار دوطرفه را از مدلهای ترانسفورماتور (BERT) بهینه کند تا با تبدیل آنها به bfloat16 روی CPU اجرا شوند. ما توضیح خواهیم داد که این مدل ها چگونه کار می کنند و چرا نسخه های بهینه شده اهمیت دارند.
محققان در Google* ابتدا BERT را با حدود 340 میلیون پارامتر آموزش دادند. سپس تغییرات متعددی شروع به ظهور کردند، از ترانسفورماتورهای مختلف مولد از پیش آموزش دیده (GPT) از OpenAI* با حدود 175 میلیارد پارامتر (برای GTP-3) تا ماموت Wu Dao* با حدود 1.75 تریلیون پارامتر. این اعداد چشمگیر هستند اما بار محاسباتی هم برای آموزش و هم برای استنتاج دارند.
source /opt/intel/oneapi/setvars.sh # Make sure CMake can find oneDNN
cmake –build . -j 8
توجه: این فرآیند بهینه سازی روی هر مدلی کار می کند، در اینجا دستورالعمل های بیشتری وجود دارد.
کاهش نیازهای محاسباتی مدل هر دوی این مشکلات را حل می کند. ما به شما نشان خواهیم داد که چگونه در این پیاده سازی با مدل ترانسفورماتور BERT-Large Hugging Face کار می کند.
گرافیک: امتیاز سجوانی
mkdir build
Bfloat 16 یک فرمت داده عددی است که حافظه کمتری نسبت به سایرین اشغال میکند و برای ارائه کارایی بیشتر در برنامههای یادگیری ماشینی و کوههایی از دادههایی که پردازش میکنند طراحی شده است. از 16 بیت برای نمایش یک عدد ممیز شناور استفاده می کند.
اگرچه مدل های یادگیری عمیق فراوان هستند، یک معماری شبکه ساده ترانسفورماتورها را متمایز می کند. برای اولین بار در مقاله سال 2017 “توجه همه آن چیزی است که شما نیاز دارید” ارائه شد، آنها به سرعت به روشی پیشرفته برای NLP تبدیل شدند، زیرا توانایی تجزیه مفاهیم زبانی را داشتند که قبلاً از طریق روش های دیگر استفاده می شد.
cd light-model-transformer/BERT
خوشبختانه، پس از آموزش، آن مدلهای عمومی اکنون از طریق APIهای منبع باز (مانند Hugging Face*، PyTorch* یا TensorFlow*) در دسترس هستند. گام بعدی استفاده از این مدلهای آموزشدیده است، که همچنان نیاز به تنظیم دقیق مدلهای پایه برای موضوع خاص شما دارد، با توجه به اینکه این مدلهای پایه درک کلی از زبانی دارند که با آن آموزش دیدهاند، مانند Wikipedia*، Reddit* و غیره. پس از اینکه مدل را برای مورد استفاده خود تنظیم کردید، هنوز باید بر چالش استنتاج غلبه کنید.
cd build
کد محاسباتی ذوب شده، کل محاسبات رمزگذار BERT و لایه خود گواهی را انجام می دهد. می توان آن را بر روی هر لایه خود توجهی انجام داد، بنابراین هر مدل BERT را می توان با استفاده از همان عملگر بهینه کرد. عملگر تک ذوب شده به عنوان عملگر TensorFlow در معرض دید قرار می گیرد که جایگزین عملگرهای گراف فرعی می شود. این امر محاسبات و دسترسی به حافظه را کاهش می دهد.
این اغلب با پردازش زبان طبیعی (NLP) اتفاق میافتد، یک عنصر حیاتی در هر برنامهای که شامل زبان انسانی است. ترانسفورماتورهای مدل یادگیری ماشینی برای NLP پیشرفته هستند زیرا ماشین ها را قادر می سازند تا زبان را مانند قبل درک کنند. بهینه سازی عملکرد ترانسفورماتور برای اطمینان از اجرای سریع و کارآمد این مدل ها ضروری است.
برای بهینه سازی مدل بزرگ BERT (بدون جعبه) برای برنامه خود، مراحل زیر را دنبال کنید.