এই নিবন্ধে, আমরা গ্রাফিক্স, নিউরাল নেটওয়ার্ক এবং ডিপ লার্নিং টাস্কে কেন GPU গুলি ভাল এবং সিপিইউগুলি বিস্তৃত ক্রমিক, জটিল সাধারণ উদ্দেশ্য কম্পিউটিং কাজগুলিতে ভাল তা বোঝার জন্য আমরা কিছু মৌলিক নিম্ন-স্তরের বিশদ বিবরণ দিয়ে যাব। বেশ কয়েকটি বিষয় ছিল যা আমাকে গবেষণা করতে হয়েছিল এবং এই পোস্টের জন্য একটু বেশি দানাদার বোঝাপড়া পেতে হয়েছিল, যার মধ্যে কয়েকটি আমি পাস করার সময় উল্লেখ করব। এটি ইচ্ছাকৃতভাবে করা হয় শুধুমাত্র CPU এবং GPU প্রক্রিয়াকরণের সম্পূর্ণ মৌলিক বিষয়গুলিতে ফোকাস করার জন্য।
আগেকার কম্পিউটার ছিল ডেডিকেটেড ডিভাইস। হার্ডওয়্যার সার্কিট এবং লজিক গেটগুলি একটি নির্দিষ্ট সেট করার জন্য প্রোগ্রাম করা হয়েছিল। যদি নতুন কিছু করতে হয়, সার্কিটগুলিকে পুনরায় ওয়্যার করা দরকার। "নতুন কিছু" দুটি ভিন্ন সমীকরণের জন্য গাণিতিক গণনা করার মতোই সহজ হতে পারে। দ্বিতীয় বিশ্বযুদ্ধের সময়, অ্যালান টুরিং এনিগমা মেশিনকে হারানোর জন্য একটি প্রোগ্রামেবল মেশিনে কাজ করছিলেন এবং পরে "টুরিং মেশিন" কাগজ প্রকাশ করেছিলেন। প্রায় একই সময়ে, জন ভন নিউম্যান এবং অন্যান্য গবেষকরাও একটি ধারণা নিয়ে কাজ করছিলেন যা মৌলিকভাবে প্রস্তাবিত:
আমরা জানি যে আমাদের কম্পিউটারের সবকিছুই বাইনারি। স্ট্রিং, ইমেজ, ভিডিও, অডিও, ওএস, অ্যাপ্লিকেশন প্রোগ্রাম, ইত্যাদি, সব 1s এবং 0s হিসাবে উপস্থাপন করা হয়। CPU আর্কিটেকচার (RISC, CISC, ইত্যাদি) স্পেসিফিকেশনে নির্দেশনা সেট (x86, x86-64, ARM, ইত্যাদি), যা CPU নির্মাতাদের অবশ্যই মেনে চলতে হবে এবং হার্ডওয়্যারের সাথে ইন্টারফেস করার জন্য OS এর জন্য উপলব্ধ।
ডেটা সহ ওএস এবং অ্যাপ্লিকেশন প্রোগ্রামগুলি সিপিইউতে প্রক্রিয়াকরণের জন্য নির্দেশ সেট এবং বাইনারি ডেটাতে অনুবাদ করা হয়। চিপ স্তরে, ট্রানজিস্টর এবং লজিক গেটে প্রক্রিয়াকরণ করা হয়। আপনি যদি দুটি সংখ্যা যোগ করার জন্য একটি প্রোগ্রাম চালান, প্রসেসরের একটি লজিক গেটে যোগ ("প্রসেসিং") করা হয়।
ভন নিউম্যান আর্কিটেকচার অনুসারে সিপিইউতে, যখন আমরা দুটি সংখ্যা যোগ করি, তখন একটি একক যোগ নির্দেশনা সার্কিটে দুটি সংখ্যার উপর চলে। সেই মিলিসেকেন্ডের একটি ভগ্নাংশের জন্য, প্রসেসিং ইউনিটের (এক্সিকিউশন) কোরে শুধুমাত্র অ্যাড নির্দেশনা কার্যকর করা হয়েছিল! এই বিস্তারিত সবসময় আমাকে মুগ্ধ.
উপরের চিত্রের উপাদানগুলো স্বতঃসিদ্ধ। আরও বিস্তারিত এবং বিস্তারিত ব্যাখ্যার জন্য এই চমৎকার নিবন্ধটি পড়ুন। আধুনিক CPU-তে, একটি একক ভৌত কোরে একাধিক পূর্ণসংখ্যা ALU, ফ্লোটিং-পয়েন্ট ALU ইত্যাদি থাকতে পারে, আবার, এই ইউনিটগুলি হল ভৌত লজিক গেট।
জিপিইউ-এর আরও ভাল উপলব্ধির জন্য আমাদের সিপিইউ কোরে 'হার্ডওয়্যার থ্রেড' বুঝতে হবে। একটি হার্ডওয়্যার থ্রেড কম্পিউটিংয়ের একটি ইউনিট যা একটি সিপিইউ কোরের এক্সিকিউশন ইউনিটে, প্রতিটি সিপিইউ ঘড়ি চক্রে করা যেতে পারে। এটি কাজের ক্ষুদ্রতম এককের প্রতিনিধিত্ব করে যা একটি কোরে কার্যকর করা যেতে পারে।
উপরের চিত্রটি CPU নির্দেশনা চক্র/মেশিন চক্রকে চিত্রিত করে। এটি একটি একক নির্দেশ (যেমন: c=a+b) কার্যকর করার জন্য সিপিইউ সঞ্চালিত পদক্ষেপগুলির একটি সিরিজ।
আনয়ন: প্রোগ্রাম কাউন্টার (সিপিইউ কোরে বিশেষ রেজিস্টার) কোন নির্দেশ আনতে হবে তা ট্র্যাক রাখে। নির্দেশ আনা হয় এবং নির্দেশ রেজিস্টারে সংরক্ষণ করা হয়। সাধারণ ক্রিয়াকলাপের জন্য, সংশ্লিষ্ট ডেটাও আনা হয়।
ডিকোড: অপারেটর এবং অপারেন্ড দেখতে নির্দেশনা ডিকোড করা হয়।
সঞ্চালন: নির্দিষ্ট অপারেশনের উপর ভিত্তি করে, উপযুক্ত প্রক্রিয়াকরণ ইউনিট নির্বাচন করা হয় এবং কার্যকর করা হয়।
মেমরি অ্যাক্সেস: যদি কোনও নির্দেশ জটিল হয় বা অতিরিক্ত ডেটার প্রয়োজন হয় (বেশ কয়েকটি কারণ এটি ঘটাতে পারে), মেমরি অ্যাক্সেস কার্যকর করার আগে করা হয়। (সরলতার জন্য উপরের চিত্রে উপেক্ষা করা হয়েছে)। একটি জটিল নির্দেশের জন্য, প্রারম্ভিক ডেটা গণনা ইউনিটের ডেটা রেজিস্টারে পাওয়া যাবে, তবে নির্দেশের সম্পূর্ণ বাস্তবায়নের জন্য, L1 এবং L2 ক্যাশে থেকে ডেটা অ্যাক্সেস প্রয়োজন। এর মানে হল কম্পিউট ইউনিট এক্সিকিউট হওয়ার আগে একটি ছোট অপেক্ষার সময় হতে পারে এবং অপেক্ষার সময় হার্ডওয়্যার থ্রেড এখনও কম্পিউট ইউনিট ধরে রাখে।
Write Back: যদি এক্সিকিউশন আউটপুট উৎপন্ন করে (যেমন: c=a+b), আউটপুটটি আবার রেজিস্টার/ক্যাশে/মেমরিতে লেখা হয়। (উপরের ডায়াগ্রামে উপেক্ষা করা হয়েছে বা সরলতার জন্য পোস্টে পরে অন্য কোথাও)
উপরের চিত্রে, শুধুমাত্র t2 এ গণনা করা হচ্ছে। বাকি সময়, কোরটি কেবল নিষ্ক্রিয় (আমরা কোন কাজ পাচ্ছি না)।
আধুনিক CPU-তে এইচডব্লিউ উপাদান রয়েছে যা অপরিহার্যভাবে সক্ষম করে (ফেচ-ডিকোড-এক্সিকিউট) পদক্ষেপগুলি ঘড়ির চক্রে একযোগে ঘটতে।
একটি একক হার্ডওয়্যার থ্রেড এখন প্রতিটি ঘড়ি চক্রে গণনা করতে পারে। একে বলা হয় ইন্সট্রাকশন পাইপলাইনিং।
ফেচ, ডিকোড, মেমরি অ্যাক্সেস এবং রাইট ব্যাক একটি CPU-তে অন্যান্য উপাদান দ্বারা সম্পন্ন হয়। একটি ভাল শব্দের অভাবের জন্য, এগুলিকে "পাইপলাইন থ্রেড" বলা হয়। পাইপলাইন থ্রেড একটি হার্ডওয়্যার থ্রেডে পরিণত হয় যখন এটি একটি নির্দেশ চক্রের কার্যকরী পর্যায়ে থাকে।
আপনি দেখতে পাচ্ছেন, আমরা t2 থেকে প্রতি চক্রের কম্পিউট আউটপুট পাই। পূর্বে, আমরা প্রতি 3 চক্রে একবার কম্পিউট আউটপুট পেয়েছি। পাইপলাইন গণনা থ্রুপুট উন্নত করে। এটি ভন নিউম্যান আর্কিটেকচারে প্রক্রিয়াকরণের বাধাগুলি পরিচালনা করার কৌশলগুলির মধ্যে একটি। এছাড়াও অন্যান্য অপ্টিমাইজেশান রয়েছে যেমন-আউট-অফ-অর্ডার এক্সিকিউশন, ব্রাঞ্চ প্রেডিকশন, স্পেকুলেটিভ এক্সিকিউশন ইত্যাদি।
আমরা শেষ করার এবং GPU-তে যাওয়ার আগে এটিই শেষ ধারণাটি আমি CPU-তে আলোচনা করতে চাই। ঘড়ির গতি বৃদ্ধির সাথে সাথে প্রসেসরগুলিও দ্রুত এবং আরও দক্ষ হয়ে উঠেছে। অ্যাপ্লিকেশন (নির্দেশনা সেট) জটিলতা বৃদ্ধির সাথে, CPU কম্পিউট কোরগুলি কম ব্যবহার করা হয়েছিল এবং এটি মেমরি অ্যাক্সেসের জন্য অপেক্ষায় আরও বেশি সময় ব্যয় করছে।
সুতরাং, আমরা একটি মেমরি বাধা দেখতে. কম্পিউট ইউনিট মেমরি অ্যাক্সেসের জন্য সময় ব্যয় করছে এবং কোনও দরকারী কাজ করছে না। মেমরি সিপিইউ-এর চেয়ে অনেকগুলি অর্ডার ধীর এবং ব্যবধানটি শীঘ্রই বন্ধ হবে না। ধারণাটি ছিল একটি সিপিইউ কোরের কিছু ইউনিটে মেমরি ব্যান্ডউইথ বাড়ানো এবং মেমরি অ্যাক্সেসের অপেক্ষায় থাকা অবস্থায় কম্পিউট ইউনিটগুলি ব্যবহার করার জন্য ডেটা প্রস্তুত রাখা।
হাইপার-থ্রেডিং 2002 সালে ইন্টেল দ্বারা Xeon এবং Pentium 4 প্রসেসরে উপলব্ধ করা হয়েছিল। হাইপার-থ্রেডিংয়ের আগে, প্রতি কোরে শুধুমাত্র একটি হার্ডওয়্যার থ্রেড ছিল। হাইপার-থ্রেডিংয়ের সাথে, প্রতি কোরে 2টি হার্ডওয়্যার থ্রেড থাকবে। এর মানে কী? কিছু রেজিস্টার, প্রোগ্রাম কাউন্টার, ফেচ ইউনিট, ডিকোড ইউনিট ইত্যাদির জন্য ডুপ্লিকেট প্রসেসিং সার্কিট।
উপরের চিত্রটি হাইপারথ্রেডিং সহ একটি CPU কোরে নতুন সার্কিট উপাদানগুলি দেখায়। এইভাবে অপারেটিং সিস্টেমে একটি একক ভৌত কোর 2 কোর হিসাবে দৃশ্যমান হয়। আপনার যদি একটি 4-কোর প্রসেসর থাকে, যার সাথে হাইপার-থ্রেডিং সক্ষম হয়, এটি OS দ্বারা 8 কোর হিসাবে দেখা হয়। L1 - L3 ক্যাশের আকার বাড়বে অতিরিক্ত রেজিস্টারের জন্য। উল্লেখ্য যে মৃত্যুদন্ড ইউনিট ভাগ করা হয়.
ধরে নিই আমাদের কাছে P1 এবং P2 প্রসেস আছে যা a=b+c, d=e+f করে, এগুলি HW থ্রেড 1 এবং 2 এর কারণে একক ঘড়ি চক্রে একযোগে চালানো যেতে পারে। সম্ভব হবে না। এখানে আমরা হার্ডওয়্যার থ্রেড যোগ করে একটি কোরের মধ্যে মেমরি ব্যান্ডউইথ বৃদ্ধি করছি যাতে প্রক্রিয়াকরণ ইউনিট দক্ষতার সাথে ব্যবহার করা যায়। এটি কম্পিউট কনকারেন্সি উন্নত করে।
কিছু আকর্ষণীয় পরিস্থিতি:
এই নিবন্ধটি দেখুন এবং Colab নোটবুক ব্যবহার করে দেখুন। এটি দেখায় কিভাবে ম্যাট্রিক্স গুণন একটি সমান্তরাল কাজ এবং কিভাবে সমান্তরাল কম্পিউট কোর গণনার গতি বাড়াতে পারে।
কম্পিউটিং শক্তি যেমন বেড়েছে, তেমনি গ্রাফিক্স প্রসেসিংয়ের চাহিদাও বেড়েছে। UI রেন্ডারিং এবং গেমিংয়ের মতো কাজগুলির জন্য সমান্তরাল ক্রিয়াকলাপগুলির প্রয়োজন হয়, সার্কিট স্তরে অসংখ্য ALUs এবং FPU-এর প্রয়োজনকে চালিত করে৷ সিপিইউ, ক্রমিক কাজের জন্য ডিজাইন করা, এই সমান্তরাল কাজের চাপগুলিকে কার্যকরভাবে পরিচালনা করতে পারেনি। এইভাবে, গ্রাফিক্স কাজগুলিতে সমান্তরাল প্রক্রিয়াকরণের চাহিদা পূরণের জন্য GPU গুলি তৈরি করা হয়েছিল, পরে গভীর শিক্ষার অ্যালগরিদমগুলিকে ত্বরান্বিত করার জন্য তাদের গ্রহণের পথ প্রশস্ত করে।
আমি অত্যন্ত সুপারিশ করব:
কোর, হার্ডওয়্যার থ্রেড, ঘড়ির গতি, মেমরি ব্যান্ডউইথ এবং সিপিইউ এবং জিপিইউ-এর অন-চিপ মেমরি উল্লেখযোগ্যভাবে আলাদা। উদাহরণ:
এই সংখ্যাটি GPU-এর সাথে তুলনা করার জন্য ব্যবহৃত হয় কারণ সাধারণ-উদ্দেশ্য কম্পিউটিং-এর সর্বোচ্চ কর্মক্ষমতা পাওয়া খুবই বিষয়ভিত্তিক। এই সংখ্যাটি একটি তাত্ত্বিক সর্বোচ্চ সীমা যার মানে, FP64 সার্কিটগুলি তাদের সম্পূর্ণরূপে ব্যবহার করা হচ্ছে।
আমরা CPU-তে যে পরিভাষাগুলি দেখেছি তা সবসময় সরাসরি GPU-তে অনুবাদ করে না। এখানে আমরা উপাদান এবং মূল NVIDIA A100 GPU দেখতে পাব। এই নিবন্ধটির জন্য গবেষণা করার সময় একটি জিনিস যা আমার কাছে আশ্চর্যজনক ছিল তা হল CPU বিক্রেতারা প্রকাশ করে না যে একটি কোরের এক্সিকিউশন ইউনিটে কতগুলি ALU, FPU, ইত্যাদি পাওয়া যায়। NVIDIA কোরের সংখ্যা সম্পর্কে খুব স্বচ্ছ এবং CUDA ফ্রেমওয়ার্ক সার্কিট স্তরে সম্পূর্ণ নমনীয়তা এবং অ্যাক্সেস দেয়।
GPU-তে উপরের চিত্রে, আমরা দেখতে পাচ্ছি যে কোনও L3 ক্যাশে নেই, ছোট L2 ক্যাশে, ছোট কিন্তু অনেক বেশি কন্ট্রোল ইউনিট এবং L1 ক্যাশে এবং প্রচুর পরিমাণে প্রসেসিং ইউনিট নেই।
আমাদের প্রাথমিক বোঝার জন্য এখানে উপরের ডায়াগ্রামে GPU উপাদান এবং তাদের CPU সমতুল্য রয়েছে। আমি CUDA প্রোগ্রামিং করিনি, তাই এটিকে CPU সমতুল্যের সাথে তুলনা করা প্রাথমিক বোঝার সাথে সাহায্য করে। CUDA প্রোগ্রামাররা এটা খুব ভালো বোঝে।
গ্রাফিক্স এবং ডিপ লার্নিং টাস্কের জন্য সিম(ডি/টি) [একক নির্দেশ মাল্টি ডেটা/থ্রেড] টাইপ এক্সিকিউশন প্রয়োজন। অর্থাৎ, একটি একক নির্দেশের জন্য প্রচুর পরিমাণে ডেটা পড়া এবং কাজ করা।
আমরা নির্দেশনা পাইপলাইনিং এবং সিপিইউতে হাইপার-থ্রেডিং নিয়ে আলোচনা করেছি এবং জিপিইউ-এরও ক্ষমতা রয়েছে। এটি কীভাবে বাস্তবায়িত হয় এবং কাজ করা হয় তা কিছুটা আলাদা তবে নীতিগুলি একই।
CPU-এর বিপরীতে, GPUs (CUDA এর মাধ্যমে) পাইপলাইন থ্রেডগুলিতে সরাসরি অ্যাক্সেস প্রদান করে (মেমরি থেকে ডেটা আনা এবং মেমরি ব্যান্ডউইথ ব্যবহার করা)। GPU শিডিউলাররা প্রথমে কম্পিউট ইউনিট পূরণ করার চেষ্টা করে (সংশ্লিষ্ট শেয়ার্ড L1 ক্যাশে এবং কম্পিউট অপারেন্ড সঞ্চয় করার জন্য রেজিস্টার সহ), তারপর "পাইপলাইন থ্রেড" যা রেজিস্টার এবং HBM-এ ডেটা নিয়ে আসে। আবার, আমি জোর দিয়ে বলতে চাই যে CPU অ্যাপ প্রোগ্রামাররা এটি সম্পর্কে ভাবেন না, এবং "পাইপলাইন থ্রেড" এবং প্রতি কোরে কম্পিউট ইউনিটের সংখ্যা সম্পর্কে চশমা প্রকাশ করা হয় না। এনভিডিয়া শুধুমাত্র এগুলি প্রকাশ করে না কিন্তু প্রোগ্রামারদের সম্পূর্ণ নিয়ন্ত্রণও প্রদান করে।
আমি CUDA প্রোগ্রামিং মডেল এবং মডেল পরিবেশন অপ্টিমাইজেশান টেকনিকের "ব্যাচিং" সম্পর্কে একটি উত্সর্গীকৃত পোস্টে এই সম্পর্কে আরও বিশদে যাব যেখানে আমরা দেখতে পারি এটি কতটা উপকারী।
উপরের চিত্রটি CPU এবং GPU কোরে হার্ডওয়্যার থ্রেড এক্সিকিউশনকে চিত্রিত করে। "মেমরি অ্যাক্সেস" বিভাগটি দেখুন যা আমরা আগে CPU পাইপলাইনিংয়ে আলোচনা করেছি। এই চিত্রটি তা দেখায়। CPUs জটিল মেমরি ম্যানেজমেন্ট এই অপেক্ষার সময়টিকে যথেষ্ট ছোট করে তোলে (কয়েকটি ঘড়ির চক্র) L1 ক্যাশে থেকে রেজিস্টারে ডেটা আনার জন্য। যখন L3 বা প্রধান মেমরি থেকে ডেটা আনার প্রয়োজন হয়, অন্য থ্রেড যার জন্য ডেটা ইতিমধ্যেই রেজিস্টারে রয়েছে (আমরা এটি হাইপার-থ্রেডিং বিভাগে দেখেছি) এক্সিকিউশন ইউনিটের নিয়ন্ত্রণ পায়।
GPU-তে, ওভারসাবস্ক্রিপশন (উচ্চ সংখ্যক পাইপলাইন থ্রেড এবং রেজিস্টার) এবং সহজ নির্দেশনা সেটের কারণে, রেজিস্টারে মুলতুবি থাকা অবস্থায় প্রচুর পরিমাণে ডেটা ইতিমধ্যেই পাওয়া যায়। এক্সিকিউশনের জন্য অপেক্ষমান এই পাইপলাইন থ্রেডগুলি হার্ডওয়্যার থ্রেডে পরিণত হয় এবং GPU-তে পাইপলাইন থ্রেডগুলি লাইটওয়েট হওয়ার কারণে প্রতিটি ঘড়ি চক্র যতবারই এক্সিকিউশন করে।
গোলের বেশি কি?
ছোট ম্যাট্রিক্সের ম্যাট্রিক্স গুণনের লেটেন্সি CPU এবং GPU-তে কমবেশি একই হওয়ার এটাই প্রধান কারণ। চেষ্টা কর .
কার্যগুলি যথেষ্ট সমান্তরাল হওয়া দরকার, কম্পিউট FLOPs এবং মেমরি ব্যান্ডউইথকে পরিপূর্ণ করার জন্য ডেটা যথেষ্ট পরিমাণে হওয়া দরকার। যদি একটি একক কাজ যথেষ্ট বড় না হয়, তবে হার্ডওয়্যারটি সম্পূর্ণরূপে ব্যবহার করার জন্য মেমরিকে পরিপূর্ণ করতে এবং গণনা করার জন্য এই জাতীয় একাধিক কাজকে প্যাক করতে হবে।
গণনা তীব্রতা = FLOPs / ব্যান্ডউইথ । অর্থাৎ, প্রতি সেকেন্ডে কম্পিউট ইউনিট দ্বারা করা কাজের পরিমাণ এবং প্রতি সেকেন্ডে মেমরি দ্বারা সরবরাহ করা ডেটার পরিমাণের অনুপাত।
উপরের চিত্রে, আমরা দেখতে পাচ্ছি যে আমরা উচ্চতর লেটেন্সি এবং কম ব্যান্ডউইথ মেমরিতে যাওয়ার সাথে সাথে গণনার তীব্রতা বৃদ্ধি পায়। আমরা এই সংখ্যাটিকে যতটা সম্ভব ছোট করতে চাই যাতে গণনা সম্পূর্ণরূপে ব্যবহার করা যায়। তার জন্য, আমাদের যতটা ডেটা L1/রেজিস্টারে রাখতে হবে যাতে কম্পিউট দ্রুত ঘটতে পারে। যদি আমরা HBM থেকে একক ডেটা আনয়ন করি, তবে মাত্র কয়েকটি অপারেশন আছে যেখানে আমরা একক ডেটার উপর 100টি অপারেশন করি যাতে এটিকে মূল্যবান করা যায়। যদি আমরা 100টি অপারেশন না করি, তাহলে গণনা ইউনিটগুলি নিষ্ক্রিয় ছিল। এখানেই GPU-তে উচ্চ সংখ্যক থ্রেড এবং রেজিস্টার কার্যকর হয়। কম্পিউটের তীব্রতা কম রাখতে এবং সমান্তরাল কোরকে ব্যস্ত রাখতে L1/রেজিস্টারে যতটা ডেটা রাখা হয়।
CUDA এবং টেনসর কোরের মধ্যে 4X এর কম্পিউট তীব্রতার পার্থক্য রয়েছে কারণ CUDA কোর শুধুমাত্র একটি 1x1 FP64 MMA করতে পারে যেখানে টেনসর কোর প্রতি ঘড়ি চক্রে 4x4 FP64 MMA নির্দেশনা করতে পারে।
উচ্চ সংখ্যক কম্পিউট ইউনিট (CUDA এবং টেনসর কোর), উচ্চ সংখ্যক থ্রেড এবং রেজিস্টার (অভার সাবস্ক্রিপশন), কম নির্দেশনা সেট, L3 ক্যাশে নেই, HBM (SRAM), সহজ এবং উচ্চ থ্রুপুট মেমরি অ্যাক্সেস প্যাটার্ন (CPU-এর তুলনায় - প্রসঙ্গ স্যুইচিং , মাল্টি লেয়ার ক্যাশিং, মেমরি পেজিং, TLB, ইত্যাদি) হল সেই নীতিগুলি যা GPU গুলিকে সমান্তরাল কম্পিউটিং (গ্রাফিক্স রেন্ডারিং, ডিপ লার্নিং, ইত্যাদি) থেকে CPU গুলিকে অনেক বেশি উন্নত করে তোলে৷
GPU গুলি প্রথমে গ্রাফিক্স প্রসেসিং কাজগুলি পরিচালনা করার জন্য তৈরি করা হয়েছিল। এআই গবেষকরা CUDA এবং CUDA কোরের মাধ্যমে শক্তিশালী সমান্তরাল প্রক্রিয়াকরণে এর সরাসরি অ্যাক্সেসের সুবিধা নেওয়া শুরু করেছেন। এনভিআইডিএ জিপিইউতে টেক্সচার প্রসেসিং, রে ট্রেসিং, রাস্টার, পলিমর্ফ ইঞ্জিন ইত্যাদি রয়েছে (গ্রাফিক্স-নির্দিষ্ট নির্দেশনা সেট বলা যাক)। AI গ্রহণের বৃদ্ধির সাথে সাথে, Tensor cores যা 4x4 ম্যাট্রিক্স ক্যালকুলেশনে ভালো (MMA নির্দেশনা) যোগ করা হচ্ছে যা গভীর শিক্ষার জন্য নিবেদিত।
2017 সাল থেকে, NVIDIA প্রতিটি আর্কিটেকচারে টেনসর কোরের সংখ্যা বাড়িয়ে চলেছে। তবে, এই জিপিইউগুলি গ্রাফিক্স প্রসেসিংয়েও ভাল। যদিও GPU-তে নির্দেশনা সেট এবং জটিলতা অনেক কম, এটি গভীর শিক্ষার (বিশেষ করে ট্রান্সফরমার আর্কিটেকচার) জন্য সম্পূর্ণরূপে নিবেদিত নয়।
FlashAttention 2 , ট্রান্সফরমার আর্কিটেকচারের জন্য একটি সফ্টওয়্যার স্তর অপ্টিমাইজেশান (অ্যাটেনশন লেয়ারের মেমরি অ্যাক্সেস প্যাটার্নের জন্য যান্ত্রিক সহানুভূতি) কাজগুলিতে 2X গতি প্রদান করে।
CPU এবং GPU সম্পর্কে আমাদের গভীরভাবে প্রথম নীতি-ভিত্তিক বোঝাপড়ার মাধ্যমে, আমরা ট্রান্সফরমার অ্যাক্সিলারেটরের প্রয়োজনীয়তা বুঝতে পারি: একটি ডেডিকেটেড চিপ (শুধুমাত্র ট্রান্সফরমার অপারেশনের জন্য সার্কিট), সমান্তরালতার জন্য এমনকি প্রচুর সংখ্যক কম্পিউট ইউনিট সহ, কম নির্দেশনা সেট, কোন L1/L2 ক্যাশে, HBM প্রতিস্থাপনকারী বিশাল DRAM (রেজিস্টার), ট্রান্সফরমার আর্কিটেকচারের মেমরি অ্যাক্সেস প্যাটার্নের জন্য অপ্টিমাইজ করা মেমরি ইউনিট। সর্বোপরি এলএলএমগুলি মানুষের জন্য নতুন সঙ্গী (ওয়েব এবং মোবাইলের পরে), এবং তাদের দক্ষতা এবং কর্মক্ষমতার জন্য নিবেদিত চিপগুলির প্রয়োজন৷