Context Parallelism
Bağlam paralelliğinin bellek kullanımını azaltmak, Transformer eğitimini ölçeklendirmek ve uzun belge ve video yapay zekâ iş yüklerini desteklemek için uzun dizileri GPU'lara nasıl dağıttığını öğren.
Bağlam paralelliği, uzun bir girdi dizisini birden fazla hızlandırıcıya bölen dağıtık bir hesaplama tekniğidir. Dikkat sırasında her GPU dizinin yalnızca bir kısmını işlerken diğer GPU'larla eşgüdümlü çalışır. Bu, cihaz başına aktivasyon belleği kullanımını azaltarak bir Transformer modelinin tek bir GPU'nun belleğini aşabilecek çok uzun belgeler, uzun videolar veya geniş görüntü parçası koleksiyonları gibi girdilerle eğitilmesini sağlar.
Modelin bağlam penceresini basitçe büyütmekten farklı olarak bağlam paralelliği, mimarinin teorik olarak kabul edebileceği bilgi miktarını değiştirmez. Bunun yerine, dizi boyutunu dağıtarak bu bağlamın işlenmesini hesaplama açısından uygulanabilir kılar.
Bağlam Paralelliği Nasıl Çalışır?#
Bir dizinin 32.000 belirteç içerdiğini ve bağlam paralelliğinin dört GPU kullandığını varsayalım. Her cihaz başlangıçta yaklaşık 8.000 belirteç alır ve bunlara karşılık gelen ara aktivasyonları saklar.
Normalleştirme ve ileri beslemeli katmanlar gibi birçok işlem, yerel dizi parçalarını bağımsız olarak işleyebilir. Zorluk dikkat mekanizmasındadır: Yerel bir sorgunun, diğer tüm cihazlarda tutulan anahtar ve değerlere dikkat etmesi gerekebilir.
Bu nedenle uygulamalar, GPU'lar arasında anahtar-değer veya KV blokları aktarır. Halka dikkatinde her cihaz yerel verileriyle kısmi dikkati hesaplar, bir KV bloğunu sonraki cihaza iletir ve tüm diziyi işleyene kadar bu işlemi yineler. PyTorch bağlam paralelliği öğreticisi, dağıtık ölçeklenmiş nokta çarpımı dikkatini kullanarak bu davranışı gösterirken NVIDIA bağlam paralelliği paketi, tümünü toplama, dağıtarak toplama ve halka tabanlı iletişim seçeneklerini açıklar.
Normal sayısal farklılıklar dışında nihai sonuç, dizinin tamamına uygulanan dikkatle matematiksel olarak eşdeğerdir; ancak hiçbir GPU tüm dizi aktivasyonlarını tutmak zorunda kalmaz.
Bağlam Paralelliği Neden Önemlidir?#
Uzun diziler, ölçeklendirmeyle ilgili iki büyük sorun yaratır. Birincisi, dizi uzunluğu arttıkça saklanan aktivasyonlar daha fazla bellek tüketir. İkincisi, standart öz dikkat dizideki belirteçleri karşılaştırarak önemli miktarda hesaplama ve geçici veri üretir.
Bağlam paralelliği, aktivasyonları cihazlara bölerek bellek sorununu çözer. Dikkat işini de bölebilir; ancak iletişim yeni bir maliyet getirir. Verimli sistemler, NCCL toplu kolektif işlemler kılavuzunda belgelendiği gibi KV aktarımlarını hesaplamayla örtüştürür.
Bu teknik, model ağırlıkları veya grup boyutu yerine dizi uzunluğu bellek yetersizliği hatasına neden olduğunda en çok fayda sağlar. Daha geniş dağıtık eğitim alanının bir parçasıdır ve birden fazla boyutu aynı anda ölçeklendirmek için genellikle başka stratejilerle birlikte kullanılır.
Bağlam Paralelliği ve İlgili Teknikler#
- Tensor paralelliği, tek tek katmanların içindeki işlemleri veya ağırlık matrislerini böler. Bağlam paralelliği ise belirteçleri dizi boyutu boyunca böler.
- Boru hattı paralelliği, farklı model katmanı gruplarını farklı cihazlara atar. Dizi uzunluğu yerine model derinliğini bölümlere ayırır.
- Veri paralelliği, modeli çoğaltır ve her kopyaya farklı eğitim örnekleri verir. PyTorch dağıtık genel bakışı, modelin tamamı ve her örnek tek bir GPU'ya sığdığında veri paralelliğinin kullanılmasını önerir.
- Dizi paralelliği, genellikle tensor paralelliğiyle ilişkili seçili işlemler için aktivasyonları parçalara ayırır. Bağlam paralelliği ise dizi bölümlemesini ağ girdileri ve aktivasyonları genelinde daha geniş biçimde uygular.
Bu yaklaşımlar birbirini tamamlar. NVIDIA paralellik stratejileri kılavuzu, bağlam, tensor, boru hattı ve veri paralelliğinin çok boyutlu bir cihaz düzenini nasıl oluşturabileceğini gösterir.
Gerçek Dünya Uygulamaları#
-
Uzun belgeler üzerinde yapay zekâ: Hukuki veya tıbbi bir dil modelinin bir dava dosyasının, hasta geçmişinin ya da teknik el kitabının tamamını işlemesi gerekebilir. Bağlam paralelliği, binlerce belge belirtecini hızlandırıcılara dağıtarak uzaktaki bölümler arasındaki dikkati korurken aktivasyon belleği baskısını azaltır.
-
Uzun video ve çok modlu anlama: Video Transformer'ları ve büyük görsel modeller, kareleri, görüntü parçalarını, ses bölümlerini ve metni tek bir uzun belirteç dizisi olarak temsil edebilir. Bu dizinin dağıtılması, modellerin kare sayısını veya uzamsal ayrıntıyı ciddi ölçüde azaltmadan uzun kayıtları çözümlemesine yardımcı olur. AWS Neuron bağlam paralelliği genel bakışı, hızlandırıcı gruplarının bu uzun bağlamlı iş yüklerinde KV parçalarını nasıl değiştirebileceğini gösterir.
Ultralytics YOLO26 gibi kompakt bilgisayarlı görü mimarilerinde bağlam paralelliği genellikle gereksizdir. Ultralytics model eğitim iş akışı üzerinden standart çok GPU'lu veri paralelliğini kullanmak, eğitimi hızlandırmak için genellikle daha uygun bir yöntemdir.
Pratik Kullanım ve Ödünleşimler#
Aşağıdaki basit örnek, PyTorch'un deneysel bağlam paralelliği API'sini ve ölçeklenmiş nokta çarpımı dikkat denetimlerini kullanır. Örneği cp_example.py adıyla kaydet ve torchrun --standalone --nproc-per-node=2 cp_example.py ile iki GPU'da başlat.
import os
import torch
import torch.distributed as dist
import torch.nn.functional as F
from torch.distributed.device_mesh import init_device_mesh
from torch.distributed.tensor.experimental import context_parallel
from torch.nn.attention import SDPBackend, sdpa_kernel
rank = int(os.environ["RANK"])
world_size = int(os.environ["WORLD_SIZE"])
torch.cuda.set_device(rank)
torch.cuda.manual_seed(0)
dist.init_process_group("nccl")
mesh = init_device_mesh("cuda", (world_size,))
qkv = [torch.randn(1, 4, 4096, 64, device="cuda", dtype=torch.bfloat16, requires_grad=True) for _ in range(3)]
with sdpa_kernel(SDPBackend.FLASH_ATTENTION), context_parallel(mesh, buffers=tuple(qkv), buffer_seq_dims=(2, 2, 2)):
output = F.scaled_dot_product_attention(*qkv, is_causal=True)
output.float().square().mean().backward()
dist.destroy_process_group()Burada 2. boyut dizi boyutudur; dolayısıyla her işlem, cihaz ağı genelinde eşgüdümlü yürütülen dikkat işlemi sırasında dizinin bir parçasını alır.
Uygulamada mühendisler, azalan bellek kullanımının iletişim yükünü aştığını doğrulamalı, hızlı bağlantılar kullanmalı ve temsili dizi uzunluklarını kıyaslamalıdır. Standart görüntü projelerinde Ultralytics Platform, manuel bağlam paralelliği yapılandırması gerektirmeden veri kümesine açıklama ekleme, eğitim, dağıtım ve izleme için daha basit bulut ve yerel iş akışları sunar.









