Ultra Tech النسخة الإنجليزية

تصويب

  1. أُعيد أخذ القراءات الثلاث في هذه الصفحة على جهاز آخر، وأُعيدت كتابة النصّ حولها. كانت القراءات السابقة من حاسوب الكاتب نفسه وتسمّي رقم بناء نظامه وموديل معالجه وبطاقة رسوميّاته؛ وسُحبت الصفحة في 12 أيلول 2026 لهذا السبب، وغُيّر الملفّ الذي ينتج القراءات ليحجب هذه القيم الثلاث. والجهاز الآن حاوية لينكس عاديّة بلا بطاقة رسوميّات، فتقول الخطوة 2 إنّها لم تجد بطاقة ويقرأ عمود GPU في الجدول n/a في كلّ صفّ. أمّا أحجام النماذج والمواصفات المقتبسة وقاعدة الدليل فلم تتغيّر.

العتاد الدليل 1 من 2

أيّ جهاز يشغّل نموذجاً محلّيّاً

آخر تحقّق من المصادر في .

تريد أن تشغّل نموذج لغة على جهازك — لأنّ بياناتك تخصّك، أو لأنّ التجربة ممتعة، أو لأنّك سئمت الدفع عن كلّ طلب — وكلّ دليل تفتحه يبدأ بقائمة مشتريات. هذا الدليل يبدأ بالجهاز الذي عندك أصلاً. قبل أن تشتري شيئاً، تستطيع في ثلاث قراءات قصيرة أن تعرف ما الذي يشغّله حاسوبك اليوم، وأيّ رقم بالضبط تنظر إليه إن قرّرت الشراء.

الرقم هو الذاكرة. لا سرعة المعالج، ولا عدد الأنوية، ولا درجة الأداء المكتوبة على العلبة. النموذج ملفّ، ولكي يعمل يجب أن يقيم هذا الملفّ في ذاكرة الجزء الذي ينفّذ العمل: ذاكرة بطاقة الرسوميّات في حاسوب PC، والذاكرة المشتركة في جهاز Mac. فإن لم يتّسع فلا شيء آخر يهمّ؛ وإن اتّسع فالرقم الثاني — عرض نطاق الذاكرة — هو ما يقرّر سرعة خروج الكلمات. هذا هو الدليل كلّه، والباقي قراءة أرقام.

وكلّ ما قيس في هذه الصفحة قيس على جهاز واحد بالأوامر المعروضة: حاوية لينكس عاديّة بذاكرة ستّة عشر غيغابايت وأربعة أنوية وبلا بطاقة رسوميّات — من النوع الذي يمنحه خادم بناء، يُحفَظ طول تشغيل واحد ثمّ يُرمى. ليست حاسوب أحد، وليست جهازاً جيّداً لتشغيل النماذج. وهي هنا لأنّ القراءات لا بدّ أن تأتي من مكان حقيقيّ، والمكان الحقيقيّ الوحيد عند هذا الموقع مكان يُرمى بعد استعماله. وكلّ رقم آخر — عرض نطاق شريحة، أو ذاكرة بطاقة، أو حجم ملفّ نموذج، أو سرعة جهاز آخر — مقتبس من صفحة مواصفات صانعه أو من اختبار منشور، والمصدر مسمّى. هذا الموقع لا مختبر له ولا يدّعي مختبراً.

وعليه ففي القراءات التي ستراها ثقب في موضع بطاقة الرسوميّات، والدليل يقول ذلك عند كلّ خطوة بدل أن يخفيه. جهازك أنت هو الجهاز الذي يهمّ، والأوامر الثلاثة أدناه تقرؤه.

بنهاية هذا الدليل ستقدر

  • تقرأ كم ذاكرة في جهازك وكم منها لبطاقة الرسوميّات، بملفّ واحد تشغّله بنفسك.
  • تقول أيّ نموذج من أحد عشر نموذجاً شائعاً يتّسع في جهازك اليوم، من أحجام ملفّاتها المنشورة، وأيّها لن يتّسع أبداً.
  • تختار بين Mac بذاكرة موحّدة وPC ببطاقة رسوميّات منفصلة بالرقمين اللذين يهمّان، لا بالأرقام المكتوبة على العلبة.
  • تشرح في فقرة واحدة ما معنى نموذج «بأربعة بتّات» أو «مُكمَّم»، ولماذا يتّسع حيث لا يتّسع النموذج الكامل.

قبل أن تبدأ

تحتاج شيئين، ولا يكلّفك أيّ منهما شيئاً.

  • Node.js إصدار 22 أو أحدث. شغّل node --version. يطبع إصداراً مثل v24.14.1، وهو الإصدار الذي جرت عليه قراءات هذه الصفحة. إن طبع رسالة خطأ، نزّل Node.js من موقعه الرسميّ.
  • طرفيّة في مجلّد فارغ. شغّل mkdir machine-check ثمّ cd machine-check. الملفّ الذي ستكتبه يقرأ جهازك ولا يمسّ شيئاً غيره: بلا مفتاح، وبلا شبكة، وبلا تثبيت.

وإن كانت عندك بطاقة رسوميّات من NVIDIA، فمع تعريفها عادةً أمر اسمه nvidia-smi؛ والملفّ يستخدمه إن وُجد ويقول لك إن لم يوجد. وعلى Mac لا توجد بطاقة منفصلة تُسأل، والملفّ يقول ذلك أيضاً.

الخطوة 1 — اقرأ كم ذاكرة في جهازك

أنشئ ملفّاً اسمه machine.mjs وضع فيه هذا:

مثال system-memory
import os from 'node:os';

const gb = (bytes) => (bytes / 2 ** 30).toFixed(1);

// What stands where a value is withheld: a name for the value, not a blank. Printed by this
// script, never substituted afterwards.
const CPU_TYPE = '[CPU type]';
const GPU_TYPE = '[GPU type]';
const OS_BUILD = '[OS build number]';

// The platform's family, not its build: `os.release()` on Windows is the exact patch level.
const family = { win32: 'windows', darwin: 'macOS', linux: 'linux' }[os.platform()] ?? os.platform();

console.log(`system: ${family} on ${os.arch()} (build ${OS_BUILD})`);
console.log(`processor: ${CPU_TYPE}, ${os.cpus().length} logical cores`);
console.log(`memory: ${gb(os.totalmem())} GB in total, ${gb(os.freemem())} GB free right now`);

المخرجات

system: linux on x64 (build [OS build number])
processor: [CPU type], 4 logical cores
memory: 15.7 GB in total, 15.1 GB free right now

شغّلناه في node@24.14.1 node 24.14.1

شغّله بالأمر node machine.mjs. ترجع ثلاثة أسطر. هذا ما قالته على الجهاز الذي كُتبت عليه هذه الصفحة، وكيف تقرأ أسطرك أنت.

  • system: linux on x64 (build [OS build number]) — عائلة نظام التشغيل باسمها عند Node، ومعمار المعالج. فـlinux لينكس، وwindows ويندوز مهما كان إصداره، وmacOS جهاز Mac. وفي موضع رقم البناء يطبع الملفّ اسماً للقيمة بدل القيمة. وهذا مقصود: رقم البناء يقول بالضبط أيّ إصلاحات أمنيّة منشورة لم يثبّتها الجهاز، وهذه الصفحة على الوِب المفتوح. ونسختك أنت تطبع رقم بنائك إن أردته — والملفّ يريك أين.
  • processor: [CPU type], 4 logical cores — الترتيب نفسه: عدد الخيوط التي ينفّذها الجهاز معاً مطبوع، واسم موديل المعالج لا. سجّل العدد ثمّ ضعه جانباً: أثره في تشغيل النموذج أقلّ بكثير من أثر السطر التالي.
  • memory: 15.7 GB in total, 15.1 GB free right now — الرقم الذي من أجله كُتب الدليل. الدالّة os.totalmem() تُرجع بايتات، والملفّ يقسمها على 2 مرفوعة للقوّة 30 ويعرض منزلة عشريّة واحدة. والجهاز الذي يُباع بوصفه «16 غيغابايت» يظهر هنا أقلّ قليلاً، لأنّ الذاكرة تُعدّ بالنظام الثنائيّ ولأنّ العتاد يحجز لنفسه شريحة. والرقم الثاني يتغيّر من دقيقة إلى دقيقة — وعلى حاوية بدأت للتوّ يكون أغلبه حرّاً — أمّا الأوّل فهو ما تخطّط به.

اكتب رقمك الأوّل. على Mac هذا هو الذاكرة التي سيستخدمها النموذج، وانتهى الأمر: أنوية الرسوميّات في الشريحة تتقاسمها مع كلّ شيء آخر، وهذا ما تعنيه Apple بالذاكرة الموحّدة. وعلى PC ببطاقة رسوميّات هو الاحتياطيّ، وذاكرة البطاقة نفسها هي الرقم الذي تحتاجه تالياً.

الخطوة 2 — اقرأ ذاكرة الرسوميّات

أضف هذا أسفل ما كتبته في الخطوة 1، في الملفّ نفسه:

مثال graphics-memory
import { execFileSync } from 'node:child_process';

// Run a command and return what it printed, or null when the command is not there.
const run = (file, args) => {
  try {
    return execFileSync(file, args, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
  } catch {
    return null;
  }
};

// The card's memory, not its name: `--query-gpu=memory.total` alone, so the model is never read.
// Add `name,` to that query on your own machine and the real name prints beside the memory.
const nvidiaMemory = run('nvidia-smi', ['--query-gpu=memory.total', '--format=csv,noheader']);

if (nvidiaMemory !== null) {
  const cards = nvidiaMemory.split(/\r?\n/);
  console.log(`graphics card: ${GPU_TYPE} (${cards.length} NVIDIA card found)`);
  console.log(`GPU memory: ${cards.join('; ')}`);
} else if (process.platform === 'darwin') {
  console.log('graphics card: none separate — a Mac: the graphics cores use the unified memory counted above');
} else {
  console.log('graphics card: no NVIDIA card found — read a discrete GPU\'s memory in its vendor\'s own tool');
}

المخرجات

graphics card: no NVIDIA card found — read a discrete GPU's memory in its vendor's own tool

شغّلناه في node@24.14.1 node 24.14.1

شغّل node machine.mjs من جديد. تُطبع أسطر الخطوة 1 الثلاثة أوّلاً، ثمّ سطر واحد، أو سطران. على الحاوية:

  • graphics card: no NVIDIA card found — read a discrete GPU's memory in its vendor's own tool — سطر واحد، وهو جواب الخطوة 2 كلّه هنا. فـnvidia-smi غير مثبَّت، فيقول الملفّ ذلك بدل أن يخمّن. وهذه هي الصورة الصادقة للقراءة على جهاز لا شيء فيه ليُسأل: لا رقم ثانٍ، وذاكرة الخطوة 1 هي كلّ الذاكرة الموجودة.

وعلى جهاز فيه بطاقة NVIDIA يُطبع سطران بدل ذلك، وستراهما حين تشغّل الملفّ بنفسك: سطر بطاقة الرسوميّات وفيه اسم لموديل البطاقة وكم بطاقة أجابت، وسطر ذاكرة الرسوميّات وفيه ذاكرة كلّ بطاقة بالميبيبايت — الوحدة التي يبلّغ بها nvidia-smi، و1024 منها غيغابايت واحد من غيغابايتات الخطوة 1. اقسم ذلك الرقم على 1024 يكن عندك الرقم الذي تحتاجه الخطوة 3. واسم موديل البطاقة محجوب في هذه الصفحة للسبب نفسه الذي حُجب له رقم البناء؛ وعلى جهازك أنت يدلّك الملفّ على الكلمة الواحدة التي تضيفها للاستعلام لتراه.

وعلى Mac لا يظهر أيّ من السطرين. يقول الملفّ بدلهما إنّ أنوية الرسوميّات تستخدم الذاكرة الموحّدة المعدودة في الخطوة 1 — فلا رقم ثانٍ تبحث عنه، لأنّ البركة واحدة.

وهكذا صرت تعرف أيّ الرقمين اللذين يدور حولهما هذا الدليل عند جهازك: ذاكرة النظام، وذاكرة الجهاز الذي سيحمل النموذج فعلاً إن كانت هناك بطاقة. وعلى Mac هما رقم واحد. وعلى هذه الحاوية الأوّل وحده: 15.7.

الخطوة 3 — ضع الأحجام المنشورة أمام ذاكرتك

ملفّ النموذج يجب أن يتّسع في تلك الذاكرة، فالخطوة الأخيرة مقارنة. والأحجام أدناه ليست مقيسة هنا: كلّ واحد منها هو ما تُدرجه صفحة النموذج في مكتبة Ollama للحجم الذي تخدمه افتراضيّاً حين تكتب ollama run <name>، والدليل يستشهد بكلّ صفحة. أضف هذا أسفل شيفرة الخطوة 2:

مثال what-fits
// The download size of each model at the size Ollama serves by default, as its library page lists
// it on 2026-09-11 (the guide cites each). A file this size has to sit in memory to run.
const models = [
  ['llama3.2:1b', 1.3],
  ['llama3.2:3b', 2.0],
  ['qwen3:4b', 2.5],
  ['gemma3:4b', 3.3],
  ['llama3.1:8b', 4.9],
  ['qwen3:8b', 5.2],
  ['gemma3:12b', 8.1],
  ['qwen3:14b', 9.3],
  ['gemma3:27b', 17],
  ['qwen3:32b', 20],
  ['llama3.1:70b', 43],
];

// This guide's rule of thumb, not a measurement: a model's file should take no more than three
// quarters of the memory it will live in, leaving the rest for the text it holds and the system.
const room = (memoryGb) => memoryGb * 0.75;

const systemGb = os.totalmem() / 2 ** 30;
const gpuMib = nvidiaMemory === null ? null : Number(/(\d+) MiB/.exec(nvidiaMemory)?.[1] ?? NaN);
const gpuGb = gpuMib === null || Number.isNaN(gpuMib) ? null : gpuMib / 1024;

console.log(`memory to fit into: ${systemGb.toFixed(1)} GB system` + (gpuGb === null ? '' : `, ${gpuGb.toFixed(1)} GB on the GPU`));
console.log('model           file      GPU memory  system memory');
for (const [name, sizeGb] of models) {
  const inGpu = gpuGb === null ? 'n/a' : sizeGb <= room(gpuGb) ? 'fits' : 'no';
  const inSystem = sizeGb <= room(systemGb) ? 'fits' : 'no';
  console.log(`${name.padEnd(15)} ${(sizeGb.toFixed(1) + ' GB').padEnd(9)} ${inGpu.padEnd(11)} ${inSystem}`);
}

المخرجات

memory to fit into: 15.7 GB system
model           file      GPU memory  system memory
llama3.2:1b     1.3 GB    n/a         fits
llama3.2:3b     2.0 GB    n/a         fits
qwen3:4b        2.5 GB    n/a         fits
gemma3:4b       3.3 GB    n/a         fits
llama3.1:8b     4.9 GB    n/a         fits
qwen3:8b        5.2 GB    n/a         fits
gemma3:12b      8.1 GB    n/a         fits
qwen3:14b       9.3 GB    n/a         fits
gemma3:27b      17.0 GB   n/a         no
qwen3:32b       20.0 GB   n/a         no
llama3.1:70b    43.0 GB   n/a         no

شغّلناه في node@24.14.1 node 24.14.1

شغّل node machine.mjs مرّة ثالثة. بعد أسطر الخطوتين 1 و2 يأتي جدول. على الحاوية قال:

  • memory to fit into: 15.7 GB system — الأرقام من الخطوتين الأوليَين، معادةً. ولا يظهر إلّا واحد، لأنّ الخطوة 2 لم تجد بطاقة. وعلى جهاز فيه بطاقة يحمل هذا السطر الرقمين.
  • llama3.2:1b 1.3 GB n/a fits حتى qwen3:14b 9.3 GB n/a fits — ثمانية نماذج تتّسع في الـ15.7 غيغابايت التي في النظام بحسب قاعدة هذا الدليل. والعمود الأوسط يقرأ n/a في كلّ صفّ: لا بطاقة، فسؤال «هل يتّسع النموذج في ذاكرة بطاقة» لا جواب له هنا، لا أنّ جوابه «لا». وعمود يقول no كان سيخبرك بشيء غير صحيح.
  • gemma3:27b 17.0 GB n/a no وqwen3:32b 20.0 GB n/a no وllama3.1:70b 43.0 GB n/a no — هذه لا تتّسع في 15.7 غيغابايت، ولا يغيّر ذلك أيّ إعداد. والعمود الأخير هو الذي يقرّر هنا.
  • وما يقوله العمود الأوسط على جهاز فيه بطاقة هو fits أو no أمام ذاكرة البطاقة بدل ذلك، وهو العمود الذي تخطّط به — فهو الأصغر من الرقمين في الغالب، والنموذج يعمل بسرعة الذاكرة التي يتّسع فيها. فعلى بطاقة بستّة غيغابايت مثلاً تقرأ الصفوف الأربعة الأولى fits ويقرأ كلّ ما بعد llama3.1:8b نزولاً no بينما يظلّ عمود النظام fits: تلك النماذج تعمل، لكنّ جزءاً من العمل يغادر الذاكرة السريعة فتخرج الكلمات أبطأ.

والقاعدة التي يطبّقها الجدول قاعدة هذا الدليل، وهي مكتوبة في الشيفرة: ملفّ النموذج ينبغي ألّا يأخذ أكثر من ثلاثة أرباع الذاكرة التي سيقيم فيها. والباقي للنصّ الذي يحمله النموذج أثناء عمله وللنظام نفسه. وهي هامش لا قياس؛ وقد يعمل مشغّل يحشر ملفّاً في 90% من ذاكرة بطاقة، وقد لا يعمل.

ومن أين الأحجام؟ تُدرِج مكتبة Ollama النموذج llama3.2:1b بحجم 1.3GB وllama3.2:3b بحجم 2.0GB. وتُدرِج مكتبة Ollama النموذج qwen3:4b بحجم 2.5GB وqwen3:8b بحجم 5.2GB وqwen3:14b بحجم 9.3GB وqwen3:32b بحجم 20GB. وتُدرِج مكتبة Ollama النموذج gemma3:4b بحجم 3.3GB وgemma3:12b بحجم 8.1GB وgemma3:27b بحجم 17GB. وتُدرِج مكتبة Ollama النموذج llama3.1:8b بحجم 4.9GB وllama3.1:70b بحجم 43GB. وهذه أحجام تنزيل للصورة المضغوطة التي تخدمها المكتبة افتراضيّاً، ولهذا يكون نموذج بثمانية مليارات مُعامِل ملفّاً بخمسة غيغابايت لا بستّة عشر — والقسم التالي يشرح الضغط.

ضع رقميك أمام القائمة نفسها يكن عندك جوابك اليوم: مع 8 غيغابايت من ذاكرة الرسوميّات تتّسع النماذج حتى 5.2 غيغابايت؛ ومع 16 كلّ شيء حتى qwen3:14b بحجم 9.3؛ ومع 24 ينضمّ gemma3:27b بحجم 17؛ وqwen3:32b بحجم 20 يريد 32؛ وllama3.1:70b بحجم 43 يريد 64 غيغابايت يراها جهاز واحد.

القاعدة الوحيدة

على النموذج أن يتّسع في ذاكرة الجهاز الذي يشغّله، ثمّ يحدّد عرض النطاق السرعة. رقمان بهذا الترتيب: أوّلاً حجم الذاكرة، وهو يقرّر هل يعمل النموذج أصلاً؛ ثمّ سرعة قراءة تلك الذاكرة، وهي تقرّر كم كلمة في الثانية تحصل من نموذج اتّسع.

والرقم الثاني هو سبب اختلاف إحساس جهازين بالذاكرة نفسها اختلافاً كاملاً. فلإنتاج كلّ كلمة يقرأ النموذج أرقامه كلّها، فسرعة قراءة الذاكرة هي — تقريباً — سرعة خروج الكلمات. واختبار منشور يبيّن الشكل. في الجدول الذي نشره مشرف llama.cpp لنموذج بسبعة مليارات مُعامِل، تولّد شريحة M1 بعرض نطاق 68 غيغابايت في الثانية ومعالج رسوميّات من 7 أنوية 14.19 رمزاً في الثانية عند Q4_0. وفي الجدول نفسه تولّد شريحة M4 بعرض نطاق 120 غيغابايت في الثانية ومعالج من 10 أنوية 24.11 رمزاً في الثانية عند Q4_0. وفي الجدول نفسه تولّد شريحة M5 Max بعرض نطاق 614 غيغابايت في الثانية ومعالج من 40 نواة 119.92 رمزاً في الثانية عند Q4_0. والرسم البيانيّ في المناقشة نفسها يضع معالجة الموجِّه مقابل أنوية معالج الرسوميّات، وتوليد النصّ مقابل عرض النطاق. اقرأ الصفوف الثلاثة خطّاً واحداً: تسعة أضعاف عرض النطاق تقابل نحو ثمانية أضعاف الكلمات في الثانية (والرمز في الثانية وحدة سرعة، والرمز كلمة أو جزء منها).

ماذا تختار انظر إلى تجاهل
هل يعمل النموذج أصلاً ذاكرة الجهاز الذي سيحمله، بالغيغابايت سرعة المعالج وعدد الأنوية
كم تخرج الكلمات بسرعة عرض نطاق الذاكرة، بالغيغابايت في الثانية تردّد الساعة المكتوب على العلبة
Mac أم PC حجم الذاكرة الموحّدة وعرض نطاقها مقابل ذاكرة البطاقة وعرض واجهتها مجموع ذاكرة النظام وذاكرة البطاقة، فلا شيء يستطيع استخدامه ذاكرةً واحدة

الذاكرة الموحّدة في Mac مقابل بطاقة منفصلة

على Mac تتقاسم أنوية الرسوميّات والمعالج بركة واحدة، فجهاز بـ32 غيغابايت يستطيع حمل نموذج بعشرين غيغابايت في الذاكرة السريعة. تُدرِج مواصفات MacBook Pro من Apple شريحة M5 بعرض نطاق ذاكرة 153 غيغابايت في الثانية. وتُدرِج مواصفات MacBook Pro من Apple شريحة M5 Pro بعرض نطاق ذاكرة 307 غيغابايت في الثانية. وتُدرِج مواصفات MacBook Pro من Apple شريحة M5 Max بعرض نطاق 460 غيغابايت في الثانية مع معالج رسوميّات من 32 نواة، و614 غيغابايت في الثانية مع معالج من 40 نواة. وتبدأ الذاكرة الموحّدة في MacBook Pro من 16 أو 24 أو 32 غيغابايت وتُهيَّأ حتى 128 غيغابايت على M5 Max بمعالج رسوميّات من 40 نواة. وتُدرِج مواصفات Mac mini من Apple ذاكرة موحّدة 16 غيغابايت تُهيَّأ إلى 24 أو 32 غيغابايت، بعرض نطاق 170 غيغابايت في الثانية. فقوّة Mac حجمٌ: بركة كبيرة يقيم فيها النموذج، بعرض نطاق يرتفع مع فئة الشريحة.

وعلى PC تكون ذاكرة البطاقة منفصلة، وحجمها هو الجدار. تُدرِج مواصفات NVIDIA بطاقة GeForce RTX 5090 بذاكرة قياسيّة 32 غيغابايت من نوع GDDR7 على واجهة ذاكرة عرضها 512 بتّاً. وتُدرِج مواصفات NVIDIA بطاقة GeForce RTX 5080 بذاكرة قياسيّة 16 غيغابايت من نوع GDDR7 على واجهة عرضها 256 بتّاً. وتُدرِج مواصفات NVIDIA بطاقة RTX 5070 Ti بذاكرة 16 غيغابايت GDDR7 على واجهة 256 بتّاً، وبطاقة RTX 5070 بذاكرة 12 غيغابايت GDDR7 على واجهة 192 بتّاً. فرقم الذاكرة وحده يخبرك بسقف حجم الملفّ؛ وعرض الواجهة هو ما يُقارَن بين بطاقات جيل واحد، لأنّ الواجهة الأعرض تنقل بتّات أكثر في النبضة. وقوّة البطاقة سرعةٌ على نموذج يتّسع؛ وضعفها جدار الاثني عشر أو الستّة عشر غيغابايت، وما بعده يفيض النموذج إلى ذاكرة النظام الأبطأ أو لا يعمل.

التكميم في فقرة واحدة

التكميم تقنية لتقليل كلفة الحوسبة والذاكرة في تشغيل الاستدلال، بتمثيل الأوزان والتنشيطات بأنواع بيانات منخفضة الدقّة مثل العدد الصحيح ذي الثمانية بتّات بدل العدد العشريّ ذي الاثنين والثلاثين بتّاً المعتاد. وتقليل عدد البتّات يعني أنّ النموذج الناتج يحتاج ذاكرة تخزين أقلّ، ويستهلك طاقة أقلّ نظريّاً، وأنّ عمليّات مثل ضرب المصفوفات تصير أسرع بكثير بحساب الأعداد الصحيحة. وبعبارة بسيطة: النموذج مليارات الأرقام، وكلّ رقم يمكن تخزينه ببتّات أكثر أو أقلّ. خزّن كلّ واحد بثمانية بتّات بدل ستّة عشر يصر الملفّ نصفاً؛ وبأربعة يصر ربعاً، بكلفة في الدقّة لا يلاحظها أغلب الناس في محادثة. وهذا هو الحساب وراء جدول الخطوة 3: نموذج بثمانية مليارات مُعامِل عند أربعة بتّات هو ثمانية مليارات في نصف بايت، أي نحو أربعة غيغابايت، والـ4.9 التي تُدرجها Ollama قريبة من ذلك. وهو أيضاً سبب ظهور التسميتينQ4_0 وQ8_0 في جدول llama.cpp — النموذج نفسه عند أربعة وعند ثمانية بتّات، والأوّل أسرع لأنّ البايتات التي تُقرأ لكلّ كلمة أقلّ.

متى تستخدمه ومتى لا

الحالة القرار السبب
بياناتك يجب ألّا تغادر الجهاز — عقود، ملاحظات مرضى، كتابتك أنت شغّله محلّيّاً لا شيء يُرسَل إلى أيّ مكان؛ والنموذج لا يقرأ إلّا ما على قرصك
تريد أن تتعلّم كيف تتصرّف النماذج، بلا فاتورة لكلّ طلب شغّله محلّيّاً نموذج بين 2 و5 غيغابايت على حاسوب محمول يكفي لتعلّم كلّ فكرة في أدلّة هذا القسم
جهازك 8 غيغابايت أو أقلّ وبلا بطاقة منفصلة شغّل الصغيرة النماذج حتى نحو 5 غيغابايت في جدول الخطوة 3 هي التي تتّسع
تحتاج نموذجاً من فئة 70 مليار وجهازك 16 غيغابايت لا ملفّ 43 غيغابايت لا يتّسع في 16، ولا يجعله أيّ إعداد يتّسع
ناس كثيرون أو طلبات كثيرة معاً، والسرعة تهمّ لا، استخدم خدمة الحاسوب المحمول يولّد عشرات الكلمات في الثانية لشخص واحد؛ وطابور الناس يحتاج جهازاً آخر
تختار جهازاً جديداً للنماذج اختر بالذاكرة ثمّ بعرض النطاق الخطوات 1–3 و«القاعدة الوحيدة» — وأرقام العلبة الأخرى تأتي ثالثةً

مصطلحات مرّت معنا

  • ملفّ النموذج — النموذج بوصفه ملفّاً على القرص: مليارات الأرقام، مخزَّنة بعدد ما من البتّات لكلّ رقم. ويجب أن يتّسع في الذاكرة ليعمل.
  • المُعامِلات — تلك الأرقام؛ و«8B» تعني ثمانية مليارات منها. وكلّما زادت زاد الملفّ وتحسّنت الأجوبة عادةً.
  • الذاكرة الموحّدة — بركة الذاكرة الواحدة في Mac، يتقاسمها المعالج وأنوية الرسوميّات؛ ويقيم النموذج فيها مباشرةً.
  • بطاقة الرسوميّات المنفصلة — بطاقة لها ذاكرتها (GDDR7 في بطاقات NVIDIA الحاليّة)؛ وعلى PC يعمل النموذج في تلك الذاكرة.
  • الغيغابايت والغيبيبايت — أحجام الملفّات في هذه الصفحة بالغيغابايت كما تُدرجها المكتبة؛ والقراءات تقسم البايتات على 2 مرفوعة للقوّة 30، ولهذا يقرأ جهاز «16 غيغابايت» 15.7.
  • الميبيبايت (MiB) — الوحدة التي يطبعها nvidia-smi حين تكون هناك بطاقة تُسأل؛ و1024 منها غيغابايت واحد من غيغابايتات الخطوة 1. ولم يطبعها شيء في قراءات هذه الصفحة، لأنّ الجهاز بلا بطاقة.
  • n/a — ما يقوله عمود GPU memory في الجدول حين لا تجد الخطوة 2 بطاقة: لا «لا يتّسع»، بل «لا شيء هنا ليتّسع فيه».
  • عرض نطاق الذاكرة — كم غيغابايت في الثانية يمكن قراءتها من الذاكرة؛ وهو الرقم وراء الكلمات في الثانية.
  • عرض واجهة الذاكرة — عدد البتّات التي تنقلها ذاكرة البطاقة في النبضة؛ والأعرض أسرع مع تساوي الباقي.
  • التكميم — تخزين أرقام النموذج ببتّات أقلّ؛ وQ4_0 أربعة بتّات وQ8_0 ثمانية. وهو سبب صيرورة نموذج بستّة عشر غيغابايت ملفّاً بخمسة.
  • الرمز في الثانية (t/s) — سرعة إنتاج النموذج للنصّ؛ والرمز كلمة أو جزء منها.
  • معالجة الموجِّه وتوليد النصّ — قراءة ما أعطيته للنموذج، وكتابة الجواب؛ والجدول المنشور يقيس الاثنين، والثاني وحده يعتمد أساساً على عرض النطاق.

الخلاصة

اعرف ذاكرة الجهاز الذي سيحمل النموذج — البطاقة على PC، والجهاز كلّه على Mac — وأبقِ ملفّ النموذج في حدود ثلاثة أرباعها. ثمّ، إن كنت تختار عتاداً، قارن عرض نطاق الذاكرة، فهو ما يحوّل نموذجاً اتّسع إلى كلمات في الثانية. وكلّ ما عدا هذين الرقمين على العلبة يأتي بعدهما.

ما تغيّر مؤخراً

لم يتغيّر أيّ مصدر من مصادر هذا الدليل منذ آخر فحص.