
تصميم المعالجات يعود للوراء بسبب الذكاء الاصطناعي AI!
لقد دخل العالم عصر الذكاء الاصطناعي بقوة، لم يعد العالم كما كان في سابق العهد، لقد احتجنا أن يعرف الحاسب كيف يتعرف علي الوجوه، علي الصور، علي الاجسام الجامدة والكائنات الحية، احتجنا أن يقرا الحاسب الخرائط، وأن يشخص الأمراض من خلال الأشعة التشخيصية، واحتجنا أن يميز الحاسب الصوت واللكنة واللغة، وان يترجم بالصوت وان يترجم من لغة الي لغة .. وان يتحدث ويجيب ويتحاور مع الإنسان ..
احتجنا أن يقود الحاسب السيارة ذاتيا دون تدخل من الانسان، وأن يقدم السلع والخدمات لراغبي التسوق بناء علي تفضيلاتهم .. باختصار احتجنا ان يفكر الحاسب ويخطط ويشارك في التنفيذ .. بمعني آخر احتجنا ان يكون الحاسب أكثر من مجرد اداء استرجاع ضخمة، ان يكون اكثر من الة حاسبة ذات قدرات عملاقة.
لقد احتجنا ان يصطنع الحاسب الالي الذكاء، اصطناعا، نحن نعلمه كيف يميز من خلال عملية التدريب Training، ثم يطبق هو ما تعلمه علي البيانات ويستنتج منها مراده من خلال عملية الاستدلال Inference. وكتوابع لهذا فلقد احتجنا الي معالجات قوية لتحاكي هذا الذكاء .. معالجات قوية في التدريب Training و في الاستدلال Inference كذلك.
في البدء استخدمنا المعالجات المركزية CPUs في كلا العمليتين، استخدمنا عددا كبيرا منها في الواقع، ثم اكتشفنا ان المعالجات الرسومية GPUs اسرع وافضل بكثير من المعالجات المركزية فانتقلنا اليها. لكنها لم تكن سريعة بما فيه الكفاية رغم ذلك، واحتجنا الي ما هو أقوي وأقوي .. فجربنا استخدام أعداد أكبر من المعالجات الرسومية، لكن هذا لم يكن كافيا أيضا أمام تعقيد البيانات والمهام المطلوبة من الذكاء الاصطناعي.
لكننا فوجئنا بظاهرة غريبة، لقد كان الذكاء الاصطناعي يتعارض مع مدي تعقيد المعالج .. لقد تطلب الذكاء الاصطناعي مستوي مبسط من المعالجات كي يعمل بشكل سريع، مستوي مبسط لا يتوافر في المعالجات الحديثة التي لدينا، لقد تطلبت المعالجة المثلي للذكاء الاصطناعي تفكيك المعالجات الي عناصرها الأولية وبناء معالجات أبسط منها كي تعمل بكفاءة، بمعني آخر أكثر وضوحا، لقد أعاد الذكاء الاصطناعي عقارب ساعة الحاسب الآلي الي الوراء، لقد نبذ كل التقدم الذي أحرزناه في بناء المعالجات لصالح استخدام ما هو قديم. الي درجة أنه في أحيان كثيرة لم يطلب الا معالجات مبسطة التركيب تماما. أو قل أشلاء معالجات بمعني أدق. أو ما يسمي بمصفوفات المعالجة FPGAs.
والمعالحات تنقسم بشكل عام الي ثلاثة أنواع فيما يخص الذكاء الاصطناعي.
المعالج المركزي CPU و هو معالج تحكم وتسيير بالاساس، غالبية عتاده يختص بالبحث عن المعلومات في الذاكرة، ثم استخراجها منها، ويختص ايضا بترجمتها ثم تقسيمها وتوزيعها علي وحدات المعالجة لتتولي حسابها في النهاية. لذا فإن المعالج المركزي ينقسم الي شقين، شق كبير للتحكم والتسيير وشق اخر للمعالجة.
اما المعالج الرسومي GPU فغالبية عتاده انوية معالجة مع قدر ضئيل من عتاد التحكم. ويعتمد في عمله علي تعريفات القيادة drivers بشكل أساسي، فهي التي تتولي شق التحكم.
اما المصفوفات فهي فلا تحوي معالجات بالمعني المفهوم وانما تحوي اشلاء معالجات .. فهي عبارة عن دوائر كهربية كثيرة و متفرقة .. ومتصلة ببعضها بموجه شبكي router قابل للبرمجة، بحيث يمكن تغيير طريقة اتصالها ببعضها. وتعتمد في عملها أيضا علي برمجيات القيادة وبصورة أكبر كثيرا من المعالج الرسومي.
ولكي نفهم كيف اعاد الذكاء الاصطناعي عقارب ساعة الحاسب الي الوراء فاننا ينبغي أن نفهم سريعا كيف يعمل الحاسب من الاساس.
يعمل الحاسب بمدأ واحد فقط .. لو فهمه أغلب الناس لم يستعص عليهم فهم اي شئ في هذا المجال، هذا المبدأ هو الاختصار .. اختصار اللغة التي نتحدث ونتواصل بها ونتبادل بها المعلومات الي لغة بسيطة جدا .. بحروف أقل وبأرقام أقل حتي يفهمها الحاسوب!
لماذا يجب علي الحاسوب ان يتلقي لغة مبسطة؟ هل هو غبي ام احمق؟ نعم هو كذلك فهو لا يتحدث الا لغة اشارية تتكون من اشارتين .. الصفر والواحد فقط .. هذا لان كل خلايا الحاسوب هي دوائر كهربية لا تعرف إلا الانغلاق (فتتحدث بإشارة صفر) والانفتاح (فتتحدث بإشارة واحد).
والاختصار يعني ان كل ما هو موجود حولنا، كل حرف، كل رقم، كل لون، او نغمة او صوت سيكون لها رمز شفري او رمزي خاص بها هي فقط، غير قابل للتكرار.
وأبسط طرق الاختصار هي الاختصار بالتكرار، فلأن الحاسب لا يدرك سوي لغة الاشارات .. فاننا سنختصر بالاشارات المكررة، كل حرف وكل رقم وكل لون سيحصل علي اشارة مميزة، الحرف الاول يحصل علي اشارة واحدة، الحرف الثاني اشارتين، الحرف الثالث ثلاث اشارات .. الخ.
مثلا لحرف A فليكن الإشارة الرمزية 0 حرف B فليكن الإشارة الرمزية 00 حرف C فليكن الإشارة الرمزية 000 حرف D فليكن الإشارة الرمزية 0000 حرف E فليكن الإشارة الرمزية 00000 حرف Z فليكن 0000000000000000000000000000000000000000000000000
ان الاحتمالية من هذه الطريقة التكرارية تكون دائما احتمالا واحد، فكلما زدنا صفرا حصلنا علي رمز جديد واحد فقط.
0 يعطيك A 00 يعطوك B 000 يعطوك C 0000 يعطوك D و وهكذا .. كلما زدنا صفرا زدنا حرفا واحدا ..
لكننا وجدنا انها طريقة اختصارية غير فعالة، فلتمثيل ارقام ضخمة نحتاج الي عدد مهول من الإشارات .. و لتمثيل الوان واصوات نحتاج الي عدد اكبر .. وكلما زدنا في الأشياء التي نريد تمثيلها كلما زدنا في عدد الإشارات، مثلا لتمثيل الدرجة ال 5000 من اللون الاحمر فاننا نحتاج الي 5000 إشارة! فما بالك اذن لو أردنا تمثيل الدرجة المئة الف من اللون الاخضر؟ ان هذا يصبح سريعا شكلا من اشكال العبث.
لابد من البحث عن حل اخر، يكون عمليا أكثر. فمن الواضح ان الاختصار المباشر في ابسط عناصره لن يصلح معنا هذه المرة، ونحتاج الي مستوي أعقد من الاختصار.
و لحسن الحظ فإن المستوي الاعلي مباشرة في الاختصار يقدم لنا ما نريده، فبدلا من الاختصار بالتكرار برمز واحد سنختصر بالتكرار من رمزين، وليكونوا مثلا 0 و 1.
وهذا التغيير البسيط للغاية سيصنع فارقا مذهلا للغاية. فهو يزيد من القوة الاحتمالية والاختيارية لكل رمز بشكل هائل.
فلاننا نملك الان رمزين، فان الرمز الاول قد يكون واحد منهما، اما 0 واما 1 .. وهنا .. هنا تكمن قوة الاختيار الحقيقية .. في السابق كان الرمز الواحد لا يعطي الا خيارا واحدا، الآن ولأن الرمز الواحد قد يكون واحد من احتمالين فإنه يعطي خيارين، أي الضعف.
0 يعطيك رمزا واحدا كما قلنا ..لا اختلاف هنا .. الان تعال نزيده رمزا .. فيما سبق كانت زيادة الرمز لا تعطينا الا حرفا واحدا .. لكن هذه المرة ستختلف، فالزيادة اما ستكون 0 أو تكون 1.
0 تعطيك A 1 تعطيك B
الان نبدا في تكرار كل رمز منهما لنحصل علي المزيد ..
00 تعطينا حرف C 11 تعطينا حرف D
في السابق احتاج حرف D الي أربعة رموز، الان احتاج الي رمزين فقط .. اي اننا اختصرنا من عدد الرموز الي النصف بصربة واحدة!
لكن انتظر! هناك المزيد .. هناك قوة خفية في هذه الطريقة وهي قوة التباديل والتوافيق، بين 0 و 1 .. يمكننا تكرار رموز مختلفة معا، وهذا يعطينا حروفا أكثر بعدد رموز أقل!!
01 تعطينا حرف E 10 تعطينا حرف F
في السابق احتاج حرف E الي ستة رموز لتمثيله، لكنه الان لا يحتاج الا لرمزين فقط. واحتاج حرف F الي سبعة رموز، لكنه الان يحتاج الي رمزين فقط أيضا، .. وهكذا الخ، اي اننا اختصرنا عدد الرموز المطلوبة الي الثلث!
وهذه هي قوة الاختصار الحقيقية. استطعنا الحصول علي حروف أكثر باستخدام إشارتين مختلفتين، ثم تكرارهما عدة مرات مع التبديل فيما بينهما.
وبالمثل تظهر القوة الاختصارية بشكل أكبر وأكبر عندما نزيد في تكرارات الرموز بشكل أكبر ..
استعمال ثلاثة رموز فقط يعطينا القدرة علي تمثيل 8 حروف .. 4 رموز تعطينا القدرة علي تمثيل 16 حرف .. 5 رموز تعطينا القدرة علي تمثيل 32 حرف .. وهي الابجدية كلها .. 6 رموز تعطينا القدرة علي تمثيل 64 حرف ورقم .. 8 رموز تعطينا 256 .. وهو ما يسمح بتمثيل حروف وارقام وبعض الالوان البسيطة .. 16 تعطينا 65 ألف .. وهو الامر الذي يتيح لنا تمثيل عدد ضخم من الألوان ..
وهنا تظهر القوة الاختصارية المذهلة للشفرة الثنائية (رمزين اثنين) .. 16 تكرار تحولوا الي 65 الف .. بدلا من ان نحتاج الي 65 الف رمز احتجنا الي 16 فقط. أي اننا خفضنا عدد الرموز المطلوبة اضعافا مضاعفة.
بل وأزيدك أكثر .. مع 64 رمز نحصل علي الف تريليون احتمال للتمثيل .. وهو اختصار ما بعده اختصار!! وهو ما استحق وصف المذهل.
لكننا لم نتمكن من استغلال قوة هذا الاختصار مرة واحدة، بل حدث هذا بالتدريج.
ففي بداية صناعة المعالجات، تم صنعها كأبسط ما يكون، ولم تكن تحوي الكثير من الدوائر الكهربية ولا وحدات المعالجة ولا الاسلاك .. لهذا يكن لدينا في البدء سوي معالجات بعرض 1 رمز (أو بت Bit) .. والعرض هنا يعني انه لا يستطيع تخزين او استقبال اي بيانات اكبر من 1 بت في كل مرة..
هذا أبسط معالج ممكن .. ولأن البت الواحدة لا تقدم لنا سوي احتمالين فقط .. 0 و 1، فان هذا الحاسب لن يستطيع تخزين اكثر من رقمين او عنصرين او لونين او صوتين .. باختصار، لن يستطيع تخزين ولا معالجة اكثر من شيئين.
ثم ارتفع تعقيد المعالج وتركيبه ليستقبل بيانات بعرض 2 بت، ثم 4 بت، ثم 8 بت .. وفي كل مرة يزداد العرض مدفوعا بزيادة عدد البيانات المطلوبة .. فمع عرض 8 رموز/بت يستطيع المعالج التعامل مع حروف الأبجدية كلها اضافة الي عدد من الارقام.
حتي وصلنا الي عرض 64 بت في المعالجات الحديثة .. وهو عرض يكفي لتخزين والتعامل مع عدد مخيف من البيانات. لكن هذا تطلب زيادة تعقيد المعالج وتركيبه بشكل كبير، وزيادة استهلاكه للطاقة ايضا. وقد تعرضت أنظمة التشغيل لنفس التطور ايضا عندما تعرضت للترقية من 32 الي 64 بت.
لكن علماء الحاسب ما انفكوا يريدون الاختصار اكثر وأكثر في البيانات .. فكل ما سبق من رموز يمنحنا عدد ضخما من الاحتمالات لتغطية الحروف والرموز الصحيحة (اي التي بلا كسور او علامات عشرية) .. اما اذا اردنا تمثيل العلامات العشرية والكسور فاننا سنحتاج حتما الي رموز اكثر واكثر.
ولتخيل الامر .. يمكننا تمثيل رقم 200 كرقم صحيح كامل باستخدام ثمانية رموز .. لكن ماذا عن كسوره؟
ماذا عن 200.1 و 200.2 و 200.3 .. الخ بل ماذا عن 200.12 او 200.125 او 200.965 او 200.96325533
ان كل رقم صحيح يضم حرفيا مئات الالاف او الملايين من الارقام العشرية او الكسور الصغيرة، وتمثيل هذه الأرقام كلها بالرموز يدفعنا الي الانتقال الي عروض ضخمة للبيانات، مثل عرض 1024 او 2048 ..الخ، وهي عروض مكلفة للغاية. فكل رقم عشري سيتم تمثيله بألف رمز او الفين ..الخ.
بل ان الامر يزداد سوءا عندما تعرف ان هناك أرقام سالبة واخري موجبة!
لذا احتاج علماء الحاسب لطريقة تختصر اكثر واكثر في القدرة التمثيلية المطلوبة. ماذا نفعل ياتري؟
ولقد تفتق ذهن العلماء عن طريقة سحرية وبسيطة للغاية. سنقوم بتمثيل الرقم الكسري كأنه رقم صحيح كبير ثم تمثيل العلامة العشرية كانها رقم صغير يمثل ترتيب العلامة وسط الأرقام.
مثلا لتمثيل 200.125 يتم حذف العلامة العشرية ووضعه كرقم صحيح 200125 يمكن تمثيله بعرض 24 بت، ثم وضع بتات bits إضافية تحدد موقع العلامة العشرية في الرقم.. في مثالنا هنا فإن العلامة العشرية تأتي بعد ثلاثة أرقام .. لذا تأخذ قيمة 3 والتي يمكن تمثيلها ب 8 بت ايضا .. اي ان العملية كلها تنتهي في نطاق 32 بت من أولها الي آخرها.
كمثال آخر رقم 11200,998 نمثله بدون العلامة العشرية كرقم كامل 112000998 بعرض 24 بت، ونمثل العلامة العشرية برقم 6 والذي يمثل ترتيب العلامة العشرية، بعرض 8 بت أيضا. ثم ضمها علي الـ 24 بت الأولي لتصير 32 بت كاملة.
يطلق علي الاختصار بهذه الطريقة اسم Floating Point أوFP اختصارا، بمعني النقطة العشرية العائمة .. اما طريقة الاختصار العادية فتسمي Integer او INT اختصار، بمعني العدد الكامل او الصحيح.
تستخدم المعالجات المركزية الحديثة CPUs عروض أرقام عائمة كبيرة وصلت الي 512 بت Fp512 مثلما هو موجود في مصفوفات AVX في معالجات Intel الحديثة، او عروض FP128 مثلما هو موجود في مصفوفات SSE في معالجات AMD و Intel، أما الأرقام الصحيحة فتصل عروضها الي 64 بت INT64.
المعالجات الرسومية تستخدم أيضا خليطا من عروض FP32 , FP64 مع عروض INT32.
لكن الذكاء الاصطناعي ضرب بكل هذا عرض الحائط، فالذكاء الاصطناعي القوي يحتاج الآن الي عروض FP16 أو FP11 أو INT8 أو INT4!! أي أنه يسير في اتجاه الهبوط والعودة الي الوراء، علي الرغم من أنه يعمل علي أحجام مخيفة من البيانات!
والسبب في ذلك ان الوسائل الاستدلالية التي يستخدمها الذكاء الاصطناعي في التعلم والاستنتاج ليست معقدة التركيب ولا عميقة التعقيد، وانما تمثل مستوي متوسط أو مخفض من التعقيد، الي حد أن عرض 4 بت او 8 بت يكفي لتمثيلها بكفاءة بالفعل.
ولقد اضطر هذا جميع مصنعي المعالحات الي تبسيط وحدات معالجة البيانات في المعالجات لتصبح بهذه العروض المنخفضة .. معالجات NVIDIA الرسومية دمجت عروض FP16 بداخلها وكذلك فعلت AMD في كلا من معالجاتها الرسومية والمركزية .. وكذلك Intel أيضا في معالجاتها المركزية.
استعملت NVIDIA أيضا عرض INT4 و INT8 في معالجاتها الرسومية الأخيرة من فئة RTX وانتهجت Intel نفس النهج في معالجاتها المركزية الأخيرة من فئة Core 10xxx .. وتنتوي AMD حذو حذوهما قريبا في كلا من معالجاتها الرسومية والمركزية. حتي المصفوفات FPGAs انتهجت نفس النهج.
ولقد زاد هذا في تعقيد تركيب المعالجات والمصفوفات عموما، واضطر المصنعون الي وضع وحدات معالجة بعرض قليل الي جانب وحدات المعالجة ذات العرض الكبير، ولم يكن أمامهم أي خيار، فهم مرغمون علي الانصياع لأوامر الذكاء الاصطناعي ورغباته الصارمة حتي لو تضمن هذا اعادة عقارب الساعة الي الوراء.