alterna ai
ALTERNA AI / ГЛАВА 19 · 02

19.2 Одинаковые модели видят разные примеры

На предыдущей странице: размер и качество — разные величины.

Скопируем веса на устройства и разделим данные. При соединении средних ошибок важно учитывать разное число токенов.

Можно делить данные, таблицы или этапы. Частичные результаты надо соединять. Разные modality сначала превращаются в вектора подходящей ширины, а эксперты выбираются по ограниченному маршруту.

Replicas видят разные examples и согласуют gradients

В synchronous data parallel каждая replica хранит полные parameters, обрабатывает local mini-batch и получает local gradient. Collective reduction формирует gradient global batch, после чего replicas выполняют одинаковый optimizer step. При равных local batch sizes это обычное среднее.

g=1R∑r=1Rgr,θ′=Opt⁡(θ,g,state).g=\frac1R\sum_{r=1}^{R}g_r, \qquad \theta' = \operatorname{Opt}(\theta,g,state).

Если число valid tokens на replicas различается из-за padding/masking, усреднение готовых local means может дать неверный вес. Надёжный контракт редуцирует gradient sums и denominator valid targets. Gradient accumulation увеличивает effective batch без дополнительной replica, но меняет число forward/backward на optimizer step.

Что показывает модель. Диаграмма показывает scatter examples, local forward/backward, all-reduce и единый update barrier. Optimizer state может быть replicated или sharded; последнее уже меняет memory/communication contract, хотя математический global gradient остаётся тем же.

Граница применимости. Удвоение replicas не гарантирует удвоение throughput: communication и input pipeline становятся bottleneck. Большой batch может потребовать другой learning-rate schedule и влиять на optimization. Asynchronous variants имеют stale gradients и не описываются этой формулой.

replica_grads_19b=[[1.0,3.0],[3.0,1.0]]
global_grad_19b=[sum(row_19b[j_19b] for row_19b in replica_grads_19b)/len(replica_grads_19b) for j_19b in range(2)]
weights_19b=[5.0,5.0]; lr_19b=0.1
updated_19b=[w_19b-lr_19b*g_19b for w_19b,g_19b in zip(weights_19b,global_grad_19b)]
assert global_grad_19b==[2.0,2.0] and updated_19b==[4.8,4.8]

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Token-weighted mean воспроизводит global objective.

Одна таблица разделена на части. Как этот вопрос продолжает полученный результат?

Python-примеры главы 19 Академическая база →