استراتيجية ربط نوى وحدة المعالجة المركزية بحاوية GPU بناءً على التقارب

استراتيجية ربط نوى وحدة المعالجة المركزية بحاوية GPU بناءً على التقارب

مقدمة لتحسين أداء وحدة المعالجة المركزية ووحدة معالجة الرسومات

في الحوسبة عالية الأداء ومعالجة المهام المتوازية واسعة النطاق، أصبحت وحدات معالجة الرسومات مسرعات لا غنى عنها. للاستفادة الكاملة من قدرات الحوسبة لـ GPU، من الضروري تحسين العلاقة بين CPU وGPU عن طريق تخصيص وربط نوى CPU بـ GPU بشكل معقول. ستناقش هذه المقالة بالتفصيل مفاهيم المقابس وNUMA (الوصول غير المنتظم للذاكرة) وكيفية تنفيذ ربط نوى CPU وGPU بناءً على هذه البنى التحتية للأجهزة لضمان الأداء الأمثل للنظام.

مفهوم المقبس (Socket)

ما هو المقبس؟

يشير المقبس عادةً إلى فتحة تثبيت وحدة المعالجة المركزية الفعلية على اللوحة الأم. كل مقبس يتوافق مع وحدة معالجة مركزية فعلية، تحتوي عادةً على عدة نوى ومستوى أو أكثر من مستويات التخزين المؤقت (مثل L1 و L2 و L3). في الأنظمة متعددة المقابس (مثل الخوادم المزدوجة أو الرباعية)، لكل مقبس وحدة معالجة مركزية فعلية متصلة عبر وصلة عالية السرعة (مثل QPI من Intel أو Infinity Fabric من AMD).

خصائص الأنظمة متعددة المقابس

في الأنظمة متعددة المقابس، يمكن لوحدة المعالجة المركزية لكل مقبس الوصول إلى ذاكرته المحلية وكذلك الوصول إلى الذاكرة من المقابس الأخرى. يُدخل نمط الوصول إلى الذاكرة هذا مفهوم NUMA، بهدف تحسين كفاءة الوصول إلى الذاكرة.

بنية NUMA (الوصول غير المنتظم للذاكرة)

ما هي NUMA؟

NUMA تعني الوصول غير المنتظم للذاكرة. على عكس الوصول المنتظم للذاكرة (UMA) التقليدي، في بنية NUMA، يتم تقسيم ذاكرة النظام إلى مناطق متعددة، كل منطقة مرتبطة بوحدة معالجة مركزية محددة (مقبس). الوصول إلى الذاكرة المحلية (داخل نفس المقبس) أسرع من الوصول إلى الذاكرة البعيدة (من مقبس آخر)، مما يؤدي إلى زمن انتقال أعلى.

عُقد NUMA وتأخير الوصول إلى الذاكرة

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

العلاقة الفيزيائية بين CPU وGPU

بنية أجهزة GPU

تتواصل وحدات معالجة الرسومات عادةً مع وحدات المعالجة المركزية عبر ناقلات PCIe (توصيل المكونات الطرفية السريع). في الأنظمة متعددة المقابس، تكون وحدات معالجة الرسومات متصلة عادةً بمقبس واحد فقط (وعقدة NUMA المقابلة له) وليس عبر المقابس. وهذا يعني، في التشغيل الفعلي، أن GPU لديه نطاق ترددي أعلى وزمن انتقال أقل مع نوى وذاكرة وحدة المعالجة المركزية للمقبس المتصل.

تقارب CPU وGPU

يعتمد الاتصال بين CPU وGPU بشكل أساسي على نقل البيانات. يتم نقل البيانات من CPU إلى GPU والعودة إلى CPU، ويتضمن عمليات الوصول إلى الذاكرة التي تؤثر بشكل كبير على الأداء. إذا كانت نوى CPU المرتبطة بـ GPU موجودة داخل نفس عقدة NUMA مثل GPU، فسيتم تقليل زمن انتقال نقل البيانات بشكل كبير. لذلك، ربط نوى CPU بـ GPU هو خطوة حاسمة لتحسين الأداء.

استراتيجية ربط نوى GPU وCPU بناءً على التقارب

في النشر في حاويات Docker، يعد تنفيذ ربط التقارب بين GPU وCPU أمرًا بالغ الأهمية لتحسين أداء المهام في الحاويات. تتيح ميزات التحكم في موارد CPU وGPU في Docker التحكم الدقيق في نوى CPU وأجهزة GPU التي تستخدمها الحاويات.

تخصيص موارد CPU وGPU في الحاوية

تسمح حاويات Docker بالتحكم الدقيق في موارد CPU وGPU المخصصة. عن طريق تحديد نوى CPU وأجهزة GPU التي تستخدمها الحاوية، يمكن تنفيذ ربط التقارب لتحسين الأداء.

إعدادات CPU في Docker

في Docker، يمكن التحكم في تخصيص موارد CPU باستخدام المعلمات التالية:

  • --cpuset-cpus: يحدد نوى وحدة المعالجة المركزية الفعلية التي يمكن للحاوية استخدامها. على سبيل المثال، --cpuset-cpus="0-3" يقيد الحاوية باستخدام نوى CPU من 0 إلى 3.
  • --cpu-shares: يتحكم في وزن استخدام CPU للحاوية ولكنه لا يقيد استخدام نوى محددة.
  • --cpus: يحدد إجمالي عدد نوى وحدة المعالجة المركزية (بالنوى الافتراضية) التي يمكن للحاوية استخدامها.

إعدادات GPU في Docker

يمكن تحقيق ربط أجهزة GPU باستخدام معلمات Docker التالية:

  • --gpus: يحدد أجهزة GPU التي يمكن للحاوية الوصول إليها. على سبيل المثال، --gpus '"device=0"' يعين GPU 0 للحاوية.

تنفيذ ربط نوى GPU وCPU في Docker

لتنفيذ ربط نوى GPU وCPU في حاويات Docker، اجمع بين إعدادات CPU وGPU. إليك مثال لكيفية ربط نوى CPU محددة و GPU عند بدء حاوية Docker:

docker run --cpuset-cpus="0-3" --gpus '"device=0"' --memory="8g" my_gpu_container

في هذا الأمر:

  • --cpuset-cpus="0-3" يربط الحاوية بنوى CPU من 0 إلى 3، والتي يجب أن تكون ضمن نفس عقدة NUMA مثل GPU 0.
  • --gpus '"device=0"' يعين GPU 0 للحاوية.
  • --memory="8g" يحد من استخدام الذاكرة للحاوية إلى 8 جيجابايت، مما يضمن أن تخصيص الذاكرة متوافق أيضًا مع تقارب CPU/GPU.

تحقيق الربط الأمثل

لضمان الربط الأمثل في الحاويات، حدد أولاً البنية الفيزيولوجية للجهاز. استخدم nvidia-smi topo -m لعرض طوبولوجيا الجهاز:

nvidia-smi topo -m

من الإخراج، يمكنك تحديد تكوين NUMA للجهاز وتعيينات GPU. على سبيل المثال، إذا كان الجهاز يحتوي على عقدتين NUMA، NUMA 0 مع 4 وحدات GPU، و NUMA 1 مع 4 وحدات GPU، يمكنك تحديد تقارب GPU و CPU لكل عقدة NUMA.

كود زائف لحساب التقارب

فيما يلي كود زائف مبسط لحساب التقارب وتحديد معرفات GPU و CPU:

type Affinity struct {
}

// حساب ما إذا كان التقارب مستوفٍ وإرجاع معرفات GPU و CPU المقابلة
func calAffinity(affinity *Affinity, cpuUse []int, gpuUse []int, gpuReq int, cpuReq int) (bool, []int, []int) {
    return true, []int{}, []int{}
}

يمكن استخدام هذه الطريقة لتحديد ما إذا كانت العقدة تلبي متطلبات الربط الأمثل. عند وجود عقد متعددة، يمكن استخدام هذه الطريقة لتقييم واختيار العقدة الأكثر ملاءمة. طورت Novita AI محرك حاويات مخصص للحوسبة بالذكاء الاصطناعي من الجيل التالي، حيث تقوم بتعديل الخوارزميات ديناميكيًا لمراقبة استخدام الأجهزة في الوقت الفعلي وإجراء التحسين الشامل. يمكن للمستخدمين الاستمتاع بأقوى أداء حاسوبي دون القلق بشأن تفاصيل NUMA التقنية.

يمكن للمستخدمين أيضًا إجراء إعدادات NUMA أكثر تقدمًا في لوحة التحكم. إذا كانت لديك متطلبات إضافية، فلا تتردد في الاتصال بنا على Discord!

تفضل بزيارة Novita AI لمزيد من التفاصيل!

single numa </output_for_task>