“NCCL Derinlemesine İnceleme: Veri Merkezi Ağı İletişimi ve Ağ Topolojisi Farkındalığı”

Yapay zeka eğitimindeki ölçek arttıkça, tek bir veri merkezi (DC) gereken hesaplama gücünü sağlamak için yetersiz kalmaktadır. Bu sorunu ele almak için en son yaklaşımlar, birden fazla veri merkezinin ya birlikte ya da coğrafi olarak dağıtılmış şekilde konumlandırılmasına dayanıyor. NVIDIA Kolektif İletişim Kütüphanesi (NCCL), artık ağ topolojisini dikkate alarak birden fazla veri merkezi arasında kesintisiz iletişim sağlayabilen yeni bir özellik ile açık kaynak olarak sunulmuştur.

Bu makalede, önerilen yaklaşımın iç işleyişi ve beklenen yetenekleri sunmak için dikkate alınması gereken önemli noktalar açıklanacaktır.

NCCL, farklı ağlara bağlı olan çoklu iletişimcileri desteklemektedir. Örneğin, bir tüm azalma kolektifini, intra-DC ağı ile bir iç DC reduce-scatter işlemi olarak başlatabiliriz, ardından inter-DC ağı üzerinde bir tüm azalma ve son olarak intra-DC ağı üzerinden bir tüm toplama işlemi gerçekleştirebiliriz. Bu yaklaşım NVIDIA Nemo çerçevesinde de kullanılmıştır.

NCCL’de Çoklu Veri Merkezi İletişimi

Önerilen NCCL’deki Cross-DC özelliğinin iki ana hedefi vardır. Birincisi, çoklu DC bağlantılarındaki en iyi performansı garanti etmektir. İkincisi ise, AI eğitim iş yüklerindeki minimal değişikliklerle çoklu DC iletişimini mümkün kılmaktır.

Bu özellik, özellikle iki bağlantı senaryosunu hedeflemektedir:

  1. Farklı veri merkezleri arasında homojen bir ağ üzerinden bağlantı (genellikle intra-DC ve inter-DC ağları için IB veya RoCE).
  2. Veri merkezleri arasında heterojen ağlarla bağlantı. Genellikle intra-DC bağlantısı için InfiniBand (IB) veya RDMA ve inter-DC ağları için TCP kullanılır.

Her iki senaryoda da, NCCL’deki cross-DC özelliğini nasıl kullanacağınızı ve performansı değerlendirirken dikkate almanız gereken bazı önemli noktaları açıklayacağız.

Ağ Topolojisi Bilincinin NCCL’deki Rolü

Ağlar, NCCL’ye ncclNet API’si aracılığıyla sunulmaktadır. Her ncclNet, aynı ağa bağlı sanal bir cihaz setini temsil eder ve bu setle etkileşim kurmak için bir API sağlar. NCCL açısından, farklı ağlarda sunulan iki cihaz, iki ayrı ve bağlantısız ağ olarak kabul edilir.

Bazı durumlarda, bu soyutlama, çoklu DC iletişimini desteklemek için gerekli olan yapı taşlarını sağlar. Burada “ağ” terimi, ncclNet şeklinde yorumlanmaktadır.

Birden Fazla Ağı Etkinleştirmek

NCCL’nin birden fazla ağ kullanabilmesi için, NCCL_ALLNET_ENABLE=1 olarak ayarlanması gerekmektedir. Bu ayar gerçekleştirildiğinde, NCCL her iletişimci için tüm ncclNet eklentilerini yüklemeye çalışacaktır. Bu durum, collNet kullanımını devre dışı bırakır. Değeri 0 (varsayılan) olarak ayarlanırsa, NCCL yalnızca ilk başarıyla yüklenen eklentiyi kullanmaya geri döner.

NCCL’nin, farklı ağlardan gelen cihazları ayrı ve bağlantısız olarak değerlendirdiği varsayımı, heterojen ağlar durumunda yeterli olsa da, homojen ağ senaryolarında yetersiz kalmaktadır. Bu nedenle, ağ topolojisi hakkında daha ayrıntılı bilgi sağlamak adına fabric ID kavramını getiriyoruz.

NCCL’nin Ağ Topolojisini Keşfetmesi

bilinci fabricId ile sağlanır; bu, cihazlar arasındaki bağlantıyı ve topoloji bilgisini kapsar. fabricId kullanılarak, NCCL, aynı ncclNet içindeki iki ağ cihazı arasındaki bağlantı ve diğer yol bilgilerini sorgular. NCCL, ağ topolojisini iki adımda keşfeder:

  1. Başlatma sırasında, iletişimci içindeki her rank için mevcut fabricId listesinin değişimi yapılır. fabricId, ağ eklentisi tarafından sağlanan 64 bitlik bir tanımsız kimliktir ve bu kimliğin anlamı eklenti uygulamasına bağlıdır.
  2. Bağlantı kurarken, NCCL, yeni eklenen ncclNet API’sini kullanarak getNetPath(uint64_t fabricId0, uint64_t fabricId1, ncclNetPath_t* path) ile ağ bağlantısını sorgular. Bu özellik özelinde, path bilgisi yalnızca verilen iki fabricId arasındaki bağlantıyı içerir: NET_LOC_DCL0 intra-DC bağlantıları için, NET_LOC_DCL1 ise cross-DC bağlantıları içindir.

Ağ Topolojisi Destekli Algoritmalar

NCCL, farklı kolektifler ve iletişim desenlerine destek veren Üst, Ağaç ve PAT algoritmalarına sahiptir. Cross-DC iletişimi üzerinde yoğunlaşan çalışmalarımız, Ring ve Ağaç algoritmaları gibi daha seyrek iletişim desenlerine odaklanmıştır. Aşağıda açıklanan değişikliklerin temel hedefleri şunlardır: (1) Genellikle daha yavaş olan inter-DC bağlantılarını en az sayıda geçmek, (2) inter-DC bağlantılarında mümkün olduğunca çok ağ cihazını kullanmaktır.

Ring Algoritması

Birden fazla inter-DC bağlantısından kaçınmak için, her DC içinde öncelikle sıralama yapılır. Sonrasında, her halka açılarak birbirine bağlanır. Bu yaklaşım ile cross-DC bağlantılarının sayısını 2*(nDc-1) olarak garanti ederiz.

Ancak heterojen ağlar durumunda, bu yaklaşımda bile tek bir inter-DC cihazı, tüm kolektif performansının darboğazı olabilir. NCCL, birden fazla halka (örneğin, dört halka) oluşturur, bu halkaların hepsi aynı düğümler arasında DC bağlantısını keser. Bu durumu aşmak için, dağıtım (artık NCCL_SCATTER_XDC=1 ile etkinleştirilebiliyor) uygulamasıyla, her halka iki farklı düğümü kullanarak DC bağlantısını geçer.

Bu değişimin performansa olan etkisi önemli olabilir. Örneğin, her biri 400 Gbps hızında dört GPU’ya sahip bir iletişimde, tek bir cross-DC bağlantısı 1.6 Tbps sağlamak zorunda olurken, dağıtım etkinleştirildiğinde bu ihtiyaç 400 Gbps’a düşer. Bu pratikte, HCA başına daha fazla kanal kullanarak cross-DC bağlantılarının sayısını artırarak daha da düşürülebilir. Bu açıklama bazı detaylardan yoksun olsa da, dağıtım etkinleştirildiğinde kanal davranışı hakkında güçlü bir sezgi sunar.

Ağaç Algoritması

Ring algoritmasında olduğu gibi, amacımız cross-DC bağlantısını gereksiz yere geçmekten kaçınmak ve dağıtımı birden fazla cihaza yayarak tek cihaz darboğazını önlemektir. Öncelikle her DC içinde ağaçlar oluşturuyoruz. NCCL ağaçları oluşturma şekli nedeniyle, her kökün boş bir çocuk slotu ve boş bir ebeveyn slotu bulunmaktadır. Bu sayede her DC’nin köklerini birbirine bağlayarak tüm DC’leri kapsayan bir küresel ağaç oluşturabiliriz. Bu yeni ağacın derinliği, DC sayısında lineer, DC içindeki düğüm sayısında ise logaritmik olacaktır. Düzgün bir DC düğüm sayısı varsayımı yapıldığında, (nDC – 1) + log2(nNodes) derinliği elde ederiz.

Kanal dağıtımı, ring algoritmasında olduğu gibi burada da benzer şekilde uygulanmıştır. Ağaç kökleri DC’ler arası iletişim kuran unsurlardır, bu yüzden bunları mevcut düğümler arasında dağıtmak NCCL’ye daha fazla geçiş imkânı tanır ve potansiyel darboğazları kaldırır.

Performans Dikkat Edilmesi Gerekenler

DC’ler arasındaki bağlantının kalitesi, uygulamanın genel performansını dikkate alırken çok önemlidir. İkili bağlantıların performansını nicelendirerek NCCL_SCATTER_XDC ile NCCL_MIN/MAX_CTAS için doğru değerleri belirlemek kritik bir adımdır. Birincisi, kanalları birden fazla cihaz arasında dağıtmaya olanak tanırken, ikincisi NCCL tarafından kaç kanaldan yararlanılacağını kontrol eder.

Aşağıda, cross-DC bağlantısında üst düzey performansa ulaşmak için dikkate alınması gereken bazı önemli parametrelerin kısa bir listesi bulunmaktadır:

  • NCCL_IB_QPS_PER_CONNECTION yüksek gecikme süreli IB/RoCE bağlantıları için.
  • NCCL_NSOCKS_PERTHREAD ve NCCL_SOCKET_NTHREADS yüksek gecikme süreli TCP bağlantıları için.
  • NCCL_SOCKET_INLINE ve NCCL_SOCKET_MIN_TASKSIZE TCP mesaj boyutu ve inline veri boyutunu kontrol etmek için.
  • NCCL_BUFFSIZE NCCL ile daha büyük mesajların gönderilmesine izin vermek için.

Özet

NCCL, son gelişmelerle birlikte, iki ana bağlantı senaryosunda çoklu DC’ler arasında kesintisiz kolektif iletişimi desteklemekte. Birincisi, homojen durumda, hem intra-DC hem de inter-DC için tek bir ağın sağladığı bağlantıdır. İkincisi ise heterojen durumda, düğümleri intra-DC ve inter-DC olarak birbirine bağlayan farklı ağların kullanılmasıdır.

Bununla birlikte, çoklu ağların desteğinin, NCCL’nin en iyi performansı elde etmesi için yeterli topolojik farkındalığı sağlamadığını bulduk. Bu boşluğu doldurmak için, fabricID ile birlikte yeni bir ncclNet API’si sunduk. Bu, NCCL’nin ağ topolojisi hakkında ayrıntılı bilgi sorgulamasına ve algoritmik seçimler yapmasına olanak tanır. Yaklaşımımızı göstermeyi, NCCL tarafından oluşturulan halkaları ve ağaçları optimize etmek adına bu ağ topolojisi bilgisinden faydalanmayı hedefliyoruz.

Aİ iletişiminin geleceğini geliştirmeye devam ederken, NCCL’nin cross-DC iletişimini nasıl kullandığınıza, performansına ve yaklaşımımızdaki zayıflıklara dair geri bildirimlerinizi toplamak için sabırsızlanıyoruz. Geri bildirimlerinizi Geliştirici Forumunda veya Github’da paylaşabilirsiniz.

Kaynak

Nvdia Blog

Exit mobile version