إعداد RDMA عمليًا + تصميم وصلة الإرسال العنقودية

دافعت المقالات السابقة في المسار N عن تقنية RDMA (N02) واستعرض خيارات الطوبولوجيا (N04, N05). هذا هو الجزء العملي: قم بتثبيت برامج التشغيل، وتأكد من أن المسار يعمل، وقم بتشغيل GPUDirect، وتحقق من صحة NCCL، ثم انتقل إلى مستوى أعلى وفكر في كيفية اتصال المجموعة بأكملها بالعالم.

نفترض استخدام نظام Ubuntu 22.04 أو 24.04، وبطاقات شبكة Mellanox/NVIDIA ConnectX-5 أو ConnectX-6، وتقنية InfiniBand HDR/NDR أو RoCEv2 عبر شبكة إيثرنت بدون فقدان للبيانات. هذه هي الأوامر التي نستخدمها فعليًا على منصات اختبار Kentino قبل شحن مجموعة K-AI المكونة من 4 عقد.

برامج التشغيل: MLNX_OFED أو المصدر الرئيسي rdma-core?

مسار ما الذي ستحصل عليه؟ متى يتم قطفه
MLNX_OFED (الآن NVIDIA DOCA-OFED) حزمة برامج تشغيل تم اختبارها من قبل NVIDIA، وGPUDirect peermem، وperftest، وmlxconfig مجموعات الذكاء الاصطناعي الإنتاجية مع ConnectX-6/7 وGPUDirect
ضد التيار rdma-core + داخل الشجرة mlx5 ما يأتي مع أوبونتو، بدون مستودع إضافي صناديق المختبر، عقدة واحدة، بدون GPUDirect، بدون أدوات البرامج الثابتة

لأي شيء ينقل حركة مرور NCCL في بيئة الإنتاج، قم بتثبيت MLNX_OFED. المصدر الرئيسي mlx5 ينجح الأمر، لكنك تخسر. mlxconfig، الحزمة perftestوالأهم من ذلك كله، جانب النواة nvidia-peermem تمت مقارنتها بنفس شجرة OFED.

تثبيت نظيف على نظام أوبونتو 22.04 مع نواة 5.15.x:

tar xf MLNX_OFED_LINUX-*.tgz && cd MLNX_OFED_LINUX-*
sudo ./mlnxofedinstall --add-kernel-support --with-nvmf --force
sudo /etc/init.d/openibd restart && sudo systemctl enable openibd

استخدم --add-kernel-support يُعدّ العلم مهمًا. إذا تم تجاهله في نواة خارج مصفوفة OFED، فسيفشل بناء DKMS دون أي تنبيه - سينتهي بك الأمر بتشغيل النواة الافتراضية. mlx5 دون علم. تأكد من مكدس مساحة المستخدم باستخدام dpkg -l | grep -E 'libibverbs|rdma-core|mlnx-ofed'.

قم بتشغيل الرابط وتأكد من أن نظام معلومات الشبكة (NIC) يرى النسيج

ثلاثة أوامر تخبرك بكل شيء مهم:

sudo mst start && mst status   # firmware tools
ibstat                          # port state, width, speed
ibv_devinfo -v                  # GIDs, max_qp, MTU, hw revision

يدل الميناء الصحي على State: Active, Physical state: LinkUp، من المتوقع Rate: (مثلاً 200)، واليمين Link layer: (إنفينيباند أو إيثرنت). المجالان اللذان يغفل عنهما الناس:

  • Link layer: InfiniBand vs Ethernet. ينقلب جهاز ConnectX ثنائي الوضع مع mlxconfig -d /dev/mst/mt4125_pciconf0 set LINK_TYPE_P1=2 (1=IB، 2=Ethernet). يلزم إعادة التشغيل.
  • Rate: يطابق السرعة المتوقعة. يُعدّ ظهور منفذ NDR بسرعة 100 جيجابت/ثانية بسرعة 200 جيجابت/ثانية أكثر الأعطال الصامتة شيوعًا: كابل تالف، أو طول غير مناسب لمحول الإشارة الرقمية إلى التناظرية (DAC)، أو انخفاض جهد منفذ المحول قسرًا. تحقق من ذلك قبل إجراء اختبارات الأداء.

في RoCE، تأكد أيضًا من تحديد الإصدار v2 (الإصدار v1 هو نوع الإيثرنت 0x8915، والإصدار v2 هو UDP/4791 وهو ما تستخدمه كل حزمة برمجية حديثة): sudo cma_roce_mode -d mlx5_0 -p 1 -m 2.

مدير الشبكة الفرعية (خاص بتقنية إنفينيباند فقط)

إنفينيباند ليس إيثرنت - لا توجد مسارات على الشبكة حتى يقوم مدير الشبكة الفرعية (SM) بتعيين معرفات LID. على شبكة مختبرية، sudo apt install opensm && sudo systemctl enable --now opensm على عقدة واحدة. في بيئة الإنتاج، شغّل وحدة إدارة الشبكة المدمجة على المحوّل. وجود وحدتي إدارة شبكة برمجيتين تتنافسان في نفس الوقت هو مضيعة للوقت في تصحيح الأخطاء، وهو أمر لا يحتاجه أحد. لا يحتوي RoCE على وحدة إدارة شبكة - فالتوجيه من اختصاص بنية الإيثرنت، ولهذا السبب يركز تكوين RoCE بشكل أساسي على جودة الخدمة للمحوّل، وليس على المضيف.

إثبات أن تقنية RDMA تعمل بالفعل: perftest

قبل أي تشغيل لـ NCCL أو إطار العمل، تحقق من السلك باستخدام perftestعقدتان، الخادم أولاً:

# server (node A)        # client (node B)
ib_send_bw -d mlx5_0 -F --report_gbits -D 10
ib_send_bw -d mlx5_0 -F --report_gbits -D 10 10.10.1.1

الأرقام المتوقعة على قماش نظيف:

الرابط ib_send_bw (رسالة كبيرة) ib_send_lat (2 بايت)
100 جيجابت/ثانية EDR / 100 جيجابت إيثرنت RoCE 95-98 جيجابت/ثانية 1.0-1.5 ميكرومتر
200 جيجابت/ثانية HDR / 200 جيجابت إيثرنت RoCE 188-197 جيجابت/ثانية 0.9-1.3 ميكرومتر
400 جيجابت/ثانية NDR 370-395 جيجابت/ثانية 0.8-1.1 ميكرومتر

إذا كانت قيمك أقل بنسبة 20% من هذه الأرقام، فلا داعي لمحاولة ضبط NCCL. المشكلة تكمن في بنية الشبكة. تحقق بالترتيب التالي: (1) MTU، (2) PFC على RoCE، (3) كابل الإرسال/الاستقبال، (4) جيل PCIe وعدد المسارات لبطاقة الشبكة، (5) موضع NUMA. يمكن تحقيق زمن استجابة أقل من ميكروثانية لـ NDR داخل الرف؛ أما أي زمن استجابة يزيد عن 5 ميكروثانية على بنية RoCE أحادية المحول فهو معطل.

GPUDirect RDMA: تشغيل مسار DMA

يكمن الهدف الأساسي من تقنية RDMA في مجموعة الحوسبة الذكية في قيام بطاقة الشبكة بقراءة وكتابة ذاكرة وحدة معالجة الرسومات مباشرةً، متجاوزةً بذلك المضيف. وهذا يتطلب nvidia-peermem (أو، في النواة الأحدث، DMA-BUF - توصي NVIDIA الآن باستخدام DMA-BUF حيث تدعم النواة ذلك، ولكن معظم حزم الإنتاج لا تزال توفر peermem).

sudo modprobe nvidia-peermem
lsmod | grep nvidia_peermem
echo nvidia-peermem | sudo tee /etc/modules-load.d/nvidia-peermem.conf

إذا فشل التحميل، فهذا يعني أن النواة لم تُبنَ باستخدام واجهة برمجة تطبيقات ذاكرة RDMA متوافقة مع OFED. ترتيب التثبيت مهم: OFED أولاً، ثم برنامج تشغيل NVIDIA، ثم nvidia-peermem — يقوم peermem بالبناء باستخدام رؤوس OFED في وقت التثبيت.

أثبت المسار من البداية إلى النهاية باستخدام عملية كتابة RDMA من وحدة معالجة الرسومات إلى وحدة معالجة الرسومات:

# server                                # client
ib_write_bw -d mlx5_0 --use_cuda=0 -F --report_gbits -D 10
ib_write_bw -d mlx5_0 --use_cuda=0 -F --report_gbits -D 10 10.10.1.1

--use_cuda=0 يسجل ذاكرة CUDA على وحدة معالجة الرسومات 0 كمخزن مؤقت لـ RDMA. إذا كانت النتيجة ضمن نطاق بضعة بالمئة من حالة ذاكرة المضيف، فإن GPUDirect يعمل بشكل صحيح. أما إذا كانت أبطأ بخمس مرات، فإن المسار يمر عبر ذاكرة المضيف - وعادةً ما يكون ذلك بسبب مشكلة في تحميل الذاكرة المشتركة أو بنية PCIe حيث تقع بطاقة الشبكة ووحدة معالجة الرسومات على عقد NUMA متقابلة.

MTU و PFC لـ RoCE (هنا حيث تعيش أو تموت مجموعات RoCE)

يتطلب بروتوكول RoCEv2 عبر شبكة إيثرنت بدون فقدان البيانات عمل ثلاثة أشياء معًا:

  1. وحدة نقل بيانات ضخمة من طرف إلى طرف. قم بتعيين القيمة 9000 على كل بطاقة شبكة ومنفذ محول وموجه. يختار RoCE أكبر قيمة MTU من نوع IB تتناسب مع قيمة MTU الخاصة بشبكة Ethernet - حيث تمنح قيمة 9000 لشبكة Ethernet جهاز RoCE قيمة MTU تبلغ 4096 بايت، وهي القيمة المطلوبة.
  2. PFC على أولوية RDMA. إيقاف مؤقت على مستوى طبقة الربط يمنع فقدان البيانات في فئة مرور محددة. الممارسة القياسية: RDMA على الأولوية 3، وكل شيء آخر على الأولوية 0.
  3. وضع علامات ECN على المحولات وبطاقات الشبكة. إشارة ECN هي إشارة الازدحام المروري طويل الأمد، بينما إشارة PFC هي فرامل الطوارئ قصيرة الأمد. تقوم إشارة ECN بالعمل في معظم الأوقات، بينما لا تُفعّل إشارة PFC إلا عندما تعجز إشارة ECN عن مواكبة الازدحام.

من جانب المضيف، مع mlnx_qos:

sudo mlnx_qos -i enp1s0f0 --pfc 0,0,0,1,0,0,0,0   # PFC on prio 3
sudo mlnx_qos -i enp1s0f0 --trust dscp
echo 106 | sudo tee /sys/class/infiniband/mlx5_0/tc/1/traffic_class

يجب أن تتطابق قيمة DSCP (26) وأولوية PFC (3) في كل قفزة. يجب أن يعكس نسيج المحول هذا التطابق: تفعيل PFC على الأولوية 3، ووضع علامات ECN على تلك الطوابير، وتكوين المخزن المؤقت بدون فقدان، وحجم مساحة كافية لكل منفذ يتناسب مع BDP لأطول وصلة.

شراء محوّل شبكة من مورد لديه قوالب RoCE موثقة (مثل NVIDIA Spectrum أو Arista أو Cisco Nexus 9000) يوفر أسبوعًا من العمل. إجراء تعديلات PFC يدويًا على جهاز Broadcom عادي ممكن، لكنه مشروع معقد. لقد جربناه، لكننا لا ننصح به.

DCQCN (إشعار الازدحام الكمي لمركز البيانات) هي حلقة التحكم التي تربط بين PFC وECN: يقوم ECN بتمييز الحزم عند امتلاء قائمة الانتظار، فيرد المُستقبِل بإشعار CNP، ثم يُبطئ المُرسِل سرعة الإرسال، ثم يزيدها تدريجيًا عند انخفاض الازدحام في قائمة الانتظار. أما PFC فهو الخيار الاحتياطي عندما لا يستطيع DCQCN الاستجابة بالسرعة الكافية. في البرامج الثابتة الحديثة ConnectX-6/7، يكون مُفعّلاً افتراضيًا، وتكون الإعدادات الافتراضية مناسبة عند استخدام 4 إلى 16 عقدة. أما عملية الضبط (معامل ألفا، ومعدل الاستهداف، وعتبات البايت/المؤقت) فهي مُخصصة لمن يعملون على نطاق واسع حيث يُعادل تحسين أداء allreduce بنسبة 0.5% أسبوعين من العمل.

NCCL: المتغيرات المهمة

طبقة NCCL هي الطبقة التي تستخدم RDMA لـ PyTorch وJAX وDeepSpeed ​​وvLLM tensor-parallel وما شابه. وهي تكتشفها تلقائيًا، وبشكل صحيح في الغالب. تظهر أربعة متغيرات بيئية في كل نص برمجي لتشغيل الإنتاج:

متغير ماذا يفعل متى يتم ضبطه؟
NCCL_IB_DISABLE 1 يفرض استخدام مقابس TCP بدلاً من IB/RoCE تصحيح الأخطاء فقط
NCCL_SOCKET_IFNAME واجهة لتمهيد NCCL (وليس مسار البيانات) دائماً قم بالإشارة إلى بطاقة الشبكة الإدارية حتى لا يتسابق برنامج التمهيد على نسيج RDMA
NCCL_IB_HCA ما هي طبقة البيانات التي يستخدمها مركز NCCL؟ عقد متعددة بطاقات الشبكة - تفوق صريح على الوضع التلقائي
NCCL_NET_GDR_LEVEL مدى فعالية استخدام تقنية GPUDirect RDMA القائمة على بنية PCIe PIX/PHB عندما تتشارك وحدات معالجة الرسومات وبطاقات الشبكة في محول PCIe / عقدة NUMA

إطلاق تجريبي على مجموعة مكونة من 4 عقد، كل عقدة تحتوي على 4 وحدات معالجة رسومية:

export NCCL_SOCKET_IFNAME=eno1            # 1 GbE management network
export NCCL_IB_HCA=mlx5_0,mlx5_1          # both RDMA NICs
export NCCL_IB_GID_INDEX=3                # RoCE v2 GID
export NCCL_NET_GDR_LEVEL=PHB
export NCCL_DEBUG=INFO                    # one-shot, then drop to WARN

mpirun -np 16 -N 4 --hostfile hosts -x NCCL_SOCKET_IFNAME \
    -x NCCL_IB_HCA -x NCCL_IB_GID_INDEX -x NCCL_NET_GDR_LEVEL \
    -x NCCL_DEBUG ./build/all_reduce_perf -b 8 -e 8G -f 2 -g 1

استخدم NCCL_DEBUG=INFO يُعدّ هذا الناتج قراءةً إلزاميةً في التشغيل الأول. فهو يُخبرك بنوع وسيلة النقل التي اختارتها شركة NCCL (Channel ... via NET/IB/0 GDR) لكل رتبة، لكل قناة. انظر via NET/Socket في أي مكان، ولا يتم استخدام مسار RDMA - لم تختبر ما تعتقد أنك اختبرته.

التحقق باستخدام nccl-tests

nccl-tests يتحقق من صحة جميع مكونات النظام - برنامج التشغيل، وOFED، وذاكرة النظير، وNCCL، والشبكة - من البداية إلى النهاية. الرقم المهم هو عرض نطاق ناقل البيانات (busbw)، وليس عرض نطاق الخوارزمية (algbwيتم توحيد عرض نطاق ناقل البيانات وفقًا لحجم الحلقة/الشجرة وهو ما تقارنه بسرعة سلك بطاقة الشبكة.

حجم الكتلة توقع تقليل عرض النطاق الترددي (رسالة كبيرة)
عقدة واحدة، 4 وحدات معالجة رسومية عبر NVLink 200–400 جيجابايت/ثانية
عقدة واحدة، 8 وحدات معالجة رسومية عبر NVLink 250–500 جيجابايت/ثانية
عقدتان، كل منهما تحتوي على 4 وحدات معالجة رسومية، و200 جيجابت إيثرنت RDMA 20–24 جيجابايت/ثانية
4 عقد، 4 وحدات معالجة رسومية لكل منها، 200 جيجابت إيثرنت RDMA + GDR 20–22 جيجابايت/ثانية

تُحدد سعة نقل البيانات بين العقد باستخدام تقنية allreduce تقريبًا بمعدل خط بطاقة الشبكة مقسومًا على 2 (حيث تُرسل وتستقبل allreduce كل بايت مرة واحدة لكل رتبة). 200 جيجابت/ثانية ≈ 25 جيجابايت/ثانية كحد أقصى؛ وتُعتبر السرعة المُلاحظة البالغة 22 جيجابايت/ثانية سرعةً طبيعية. إذا انخفضت السرعة بمقدار 5 أضعاف عند الانتقال من عقدة واحدة إلى عقدتين، فهذا يعني أن تقنية RDMA لا تُستخدم في عملية النقل بين العقد. اقرأ NCCL_DEBUG=INFO الناتج.

الآن قم بالتصغير: تصميم وصلة الإرسال العنقودية

كل ما سبق يتعلق بـ طائرة البيانات — وحدات معالجة الرسومات النسيجية التي تستخدمها للتواصل فيما بينها. النصف الآخر من مجموعة مفيدة هو الإرسالكيف تتصل هذه الشبكة بالعالم الخارجي؟ يبني الناس وصلة صاعدة خاطئة طوال الوقت.

تحتوي مجموعة تدريب K-AI المكونة من 4 عقد على ثلاث علاقات خارجية:

  1. شبكة الشركة / الشبكة الواسعة (WAN) — سجلات النماذج، وتخزين مجموعات البيانات (S3، NFS، MinIO)، وGit، وسجلات الحاويات، والقياس عن بعد.
  2. محطات عمل المطورين — مهندسون يقومون بتسجيل الدخول عبر SSH، وإطلاق المهام، ونسخ نقاط التحقق، وتشغيل Jupyter.
  3. مجموعات أخرى — مجموعة تدريب ثانية، ومجموعة استدلال، ومجموعة تقييم/تكامل مستمر.

حسابات عرض النطاق الترددي

إذا قامت أربع عقد بتقليل حجم البيانات بمعدل 22 جيجابايت/ثانية لكل منها، فإن داخلي ينقل النسيج ما يقارب 700 جيجا بايت/ثانية من البيانات المجمعة من الشرق إلى الغرب. الإرسال لا يشترط أن يتطابق مع ذلك. بل يشترط أن يتطابق مع معدل استيعاب البيانات:

  • 4 عقد × 4 وحدات معالجة رسومية × ~1 جيجابايت/ثانية لكل وحدة معالجة رسومية (نموذج الصور/الفيديو) = 16 جيجابايت/ثانية ≈ 128 جيجابايت/ثانية قراءة مستمرة من وحدة تخزين الكائنات.
  • التدريب المسبق لنموذج التعلم الخطي على النص المجزأ أصغر بكثير - 1-4 جيجابايت/ثانية، لأن الرموز كثيفة وتستغرق كل دفعة وقتًا طويلاً.
  • تصل نقاط إعادة التحميل الدقيقة في كثير من الأحيان إلى ذروتها عند 40 جيجابت/ثانية لبضع ثوانٍ، ثم تنخفض إلى ما يقارب الصفر.
عبء العمل تناول مستمر انفجار الإرسال
التدريب المسبق لنموذج اللغة (نص مُجزأ إلى رموز) 1-4 جيجابت/ثانية 20 Gb / s 25 GbE
تدريب نماذج الصور/الفيديو 50-150 جيجابت/ثانية 200 Gb / s 2 × 100 جيجابت LAG أو 1 × 200 جيجابت
ضبط دقيق / RLHF مع تبديل نقاط التفتيش 5-20 جيجابت/ثانية 50 Gb / s 25-100 جيجابت إيثرنت
مجموعة الاستدلال خلف موازن الأحمال 5-50 جيجابت/ثانية يعتمد على النموذج 25-100 جيجابت إيثرنت

خطأ شائع: إنفاق 40 ألف يورو على وصلة صاعدة بسرعة 400 جيجابت إيثرنت لأن البنية التحتية الداخلية تدعم نفس السرعة. هذا هدف خاطئ. الهدف الصحيح هو معدل قراءة البيانات. لقد أنشأنا مجموعات من 4 عقد بوصلة صاعدة بسرعة 25 جيجابت إيثرنت، وعملت بكامل طاقتها لأسابيع على بيانات رموز LLM.

النطاق الترددي المجمع مقابل النطاق الترددي المخصص

تحتوي العقدة المزودة بأربع بطاقات شبكة بسرعة 100 جيجابت إيثرنت على إجمالي 400 جيجابت/ثانية سعة الشبكة. تُخصص هذه السعة لكل تدفق بيانات، وليست مجمعة. يستخدم اتصال TCP واحد بين عنواني IP بطاقة شبكة واحدة - بحد أقصى 100 جيجابت/ثانية. يعمل كل من ECMP والتجزئة لكل تدفق على توزيع السعة. مختلف تتدفق عبر البلدان الصناعية الوطنية الأربعة.

  • تقليل الكل يتم تنفيذ العديد من التدفقات بالتوازي - تدفق واحد لكل قناة لكل نظير. ينتشر NCCL بشكل أصلي عبر بطاقات الشبكة المتعددة (NCCL_IB_HCA (مع ذكر كليهما). 4× 100 جيجابت إيثرنت قريبة عمليًا من 400 جيجابت/ثانية لـ NCCL.
  • تدفق بيانات واحد (طلب HTTP GET واحد لسحب جزء بحجم 1 تيرابايت) يُعتبر تدفقًا واحدًا. أربعة منافذ 100 جيجابت إيثرنت تُعطي سرعة 100 جيجابت/ثانية، وليس 400. لاستخدام التجميع، يجب على مُحمِّل البيانات فتح تدفقات متوازية - وهو ما تقوم به كل من DALI وWebDataset وMosaicML's Streaming بشكل افتراضي.

فصل الأقمشة

طائرة البيانات
  • 100/200/400 جيجابت RoCE أو HDR/NDR InfiniBand
  • NCCL، قراءة مجموعة البيانات، كتابة نقاط التفتيش
  • بدون فقدان للبيانات، مع تصحيح معامل القدرة/تصحيح الخطأ الإلكتروني، ومفاتيح مخصصة
  • معقم - لا حركة مرور غير تابعة للذكاء الاصطناعي
طائرة الإدارة
  • 1 جيجابت إيثرنت أو 10 جيجابت إيثرنت
  • SSH، بروميثيوس، NTP، syslog، IPMI/BMC
  • مفاتيح رخيصة، قياسية من الطبقة الثانية/الثالثة، بدون جودة خدمة خاصة
  • يعمل دائمًا، حتى في حالة تعطل بنية البيانات.

قم بتشغيل نظامي نسيج دائمًا. يجب ألا يعتمد مستوى الإدارة على مستوى البيانات لكي يعمل - ستحتاج إلى الوصول عبر SSH عندما يتعطل نظام نسيج RDMA.

لا غنى عن طبقة الإدارة. فعند تعطل بنية البيانات - كعطل في جهاز الإرسال والاستقبال، أو سوء تكوين تصحيح معامل القدرة، أو تعطل المحول - ستحتاج إلى مسار SSH لا يعتمد على البنية المعطلة. إن تصحيح أخطاء عاصفة RoCE عبر الرابط الذي يعاني من العاصفة هو خطأ لا يتكرر. كما أن بروتوكولات IPMI/BMC وNTP موجودة هنا أيضًا؛ إذ لا يظهر انحراف الساعة إلا عندما يبدأ إطار العمل الموزع بإنتاج تدرجات خاطئة.

بروتوكول BGP غير مرقم لـ Clos الموجهة

عند تجاوز عدد العقد 8 تقريبًا، يصبح استخدام بنية L2 leaf-spine معقدًا للغاية، نظرًا لحدود شجرة الامتداد، وتوسع جدول عناوين MAC، وعواصف البث، وانعدام المسارات المتعددة الأصلية. أما الحل الحديث فهو استخدام بنية Clos الموجهة من الطبقة الثالثة: حيث يكون كل رابط leaf-spine غير مرقم، ويتولى بروتوكول BGP نقل المسارات، بينما يقوم بروتوكول ECMP بتوزيع التدفقات عبر الأعمدة.

في بروتوكول BGP، يتم تعيين عناوين IPv6 المحلية للرابط تلقائيًا بواسطة النواة، مما يغنيك عن إدارة عناوين /31 لكل رابط. يبدو جهاز طرفي يعمل بنظام FRRouting على لينكس كما يلي تقريبًا:

router bgp 65001
 neighbor swp1 interface remote-as external
 neighbor swp2 interface remote-as external
 address-family ipv4 unicast
  network 10.1.1.0/24
  redistribute connected

كل ورقة وكل عمود رئيسي يمثل نظامًا ذاتيًا مستقلًا، ويعلن بروتوكول eBGP عن عناوين الاسترجاع، بينما يكون بروتوكول ECMP عبر الأعمدة الرئيسية مجانيًا. يوثق RFC 7938 هذا النمط؛ وتدعم كل من Cumulus/NVIDIA وArista وCisco وJuniper بروتوكول BGP غير المرقم حاليًا. عند وجود 4 عقد، يكون استخدام محول واحد كافيًا. أما عند وجود 8-16 عقدة مع عمودين رئيسيين، فيبدأ بروتوكول Clos الموجه في تحقيق عائد على الاستثمار. وعند وجود أكثر من 16 عقدة، يصبح هذا هو الحل الأمثل.

الاتصال بمجموعات أخرى

لا تضع مجموعة تدريب ومجموعة استدلال على نفس بنية RDMA. التدريب عبارة عن عمليات إرسال بيانات ضخمة ومتقطعة، بينما الاستدلال عبارة عن رسائل صغيرة مستقرة. تختلف متطلبات جودة الخدمة (QoS)، وأي خلل في عملية التدريب سيؤدي إلى انقطاع مسار الاستدلال. الحل الأمثل هو استخدام بنيتين منفصلتين تلتقيان عند موجه من الطبقة الثالثة (L3) مع توجيه IP عادي. حركة مرور التحكم بين المجموعتين - قوائم انتظار المهام، ونقل السجلات، ونقل البيانات - تمر عبر مستوى الإدارة أو وصلة إيثرنت مخصصة بين المجموعتين. يبلغ حجم ملف وزن 70 بايت حوالي 140 جيجابايت، بينما تبلغ مساحة نقطة التحقق ضعف ذلك. يستغرق ذلك حوالي 90 ثانية عند سرعة 25 جيجابت إيثرنت، وحوالي 22 ثانية عند سرعة 100 جيجابت إيثرنت. لذا، خطط للحجم الأكبر.

ماذا تفعل بعد ذلك

سير عمل معقول لإعداد RDMA على مجموعة جديدة:

  1. قم بتوصيله وتحقق من طبقة الربط أولاً. يجري ibstat على كل عقدة. نفس المعدل، نفس وحدة النقل القصوى، نفس طبقة الربط. أصلح الطبقة الفيزيائية قبل تعديل البرمجيات.
  2. قم بتثبيت MLNX_OFED، وليس فقط rdma-core, إذا كان GPUDirect أو NCCL ضمن النطاق. قم بمطابقة إصدار OFED مع النواة قيد التشغيل.
  3. يجري perftest بين كل زوج من العقد قبل الخوض في تفاصيل الأطر. الأرقام ضمن نطاق 5% من القيمة النظرية = جيدة. أي شيء أقل من ذلك = توقف وقم بالإصلاح.
  4. حمل nvidia-peermemأثبت ذلك بـ ib_write_bw --use_cuda=0. يجب أن تتطابق النتيجة مع حالة الذاكرة المضيفة.
  5. قم بتكوين PFC و ECN و DCQCN إذا كنت تعمل في مجال العائد على رأس المال المستثمر (RoCE). أما في مجال الخدمات المصرفية الاستثمارية (IB)، فلا توجد هذه الخطوة؛ وهذا نصف سبب اختيار الناس للخدمات المصرفية الاستثمارية.
  6. يجري nccl-tests allreduce على عقدتين، ثم 4، ثم 8. افحص NCCL_DEBUG=INFO يتم عرض المخرجات في أول تشغيل لكل حجم مجموعة. تأكيد NET/IB ... GDR يظهر.
  7. أقمشة منفصلة. إدارة الشبكة عبر اتصال إيثرنت بسرعة 1/10 جيجابت/ثانية بتكلفة منخفضة. البيانات على شبكة RDMA. لا تشاركها.
  8. حدد حجم وصلة الإرسال بما يتناسب مع معدل استيعاب مجموعة البيانات الخاصة بكلا يتعلق الأمر بسرعة الشبكة الداخلية. تحتاج معظم المجموعات إلى نطاق ترددي خارجي أقل بكثير مما لديها.
  9. في حالة وجود أكثر من 8 عقد، يتم توجيه خطة Clos باستخدام BGP غير المرقم. أقل من 8، يكفي مفتاح واحد.

تتناول المقالات اللاحقة في المسار N تحليل زمن الكمون (N06) وتعقيد التوجيه (N07) — هنا تكمن مشاكل ضبط DCQCN وتجزئة ECMP. يستكمل المسار K من هنا مع التدريب الموزع (K02)، ومجموعات الاستدلال (K03)، والتخزين (K04) — وكلها تفترض أن حزمة RDMA المذكورة في هذه الصفحة تعمل بالفعل.


هذا جزء من ويكي كينتينو، وهي سلسلة مرجعية حول الحوسبة الذكية والأنظمة التي تربطها. نرحب بالتصحيحات على info@kentino.com.