English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

visitante
1 / ?

Sinal, Expoente, Mantissa

Formato de Ponto Flutuante IEEE 754

Todo número de ponto flutuante armazena três campos:


- Bit de sinal (1 bit): positivo ou negativo

- Expoente (E bits): a escala de magnitude, uma potência inteira de 2

- Mantissa (M bits): a precisão fracionária, um número entre 1.0 e ~2.0


Total de bits = 1 + E + M. O valor é aproximadamente (-1)^sign (1 + mantissa) 2^(exponent - bias).


Duas propriedades importam para o treinamento:


Faixa dinâmica = 2^(2^E) (aproximadamente). Mais bits de expoente significa representar números minúsculos e enormes sem overflow.


Precisão = 2^M valores distintos por potência de 2. Mais bits de mantissa significa representação mais fina entre potências de 2 consecutivas.


Os Três Formatos


FormatoBits totaisSinalExpMantFaixa dinâmicaPrecisão
FP32321823~10^-38 a ~10^38~7 dígitos
FP16161510~10^-5 a ~10^5~3 dígitos
FP8 E4M38143~2^-9 a ~448~2 dígitos

FP8 E4M3 significa "4 bits de expoente, 3 bits de mantissa". Uma alternativa FP8 E5M2 troca precisão por alcance; os experimentos ANDREA usam E4M3 porque as ativações do transformer permanecem em faixas estreitas de magnitude onde a precisão extra prevalece sobre o alcance extra.

Bytes Por Parâmetro

ANDREA-120M contém aproximadamente 120.000.000 parâmetros. Calcule o espaço de armazenamento apenas das matrizes de pesos em (a) FP32, (b) FP16, (c) FP8. Mostre sua aritmética em MB. Em seguida, calcule (d) o espaço de armazenamento com peso + primeiro momento Adam + segundo momento Adam (3x a contagem de pesos) em FP16.

Por que Menor Precisão Executa Mais Rápido

Largura de Banda de Memória Domina a Velocidade de Treinamento

GPUs modernas passam mais tempo esperando pela memória do que computando. A RTX 4090 tem 1008 GB/s de largura de banda de memória & 165 TFLOPS de computação FP16. Uma camada típica lê pesos da VRAM, multiplica ativações, escreve resultados de volta. Largura de banda, não computação, decide o throughput.


Reduzir a precisão pela metade reduz os bytes por parâmetro pela metade, então ler os mesmos pesos usa metade da largura de banda de memória. O throughput aproximadamente dobra.


Tensor Cores: Multiplicação de Matrizes Acelerada por Hardware

A RTX 4090 possui unidades dedicadas de tensor core que computam multiplicações de matrizes em FP16 ou FP8 diretamente. Uma única operação de tensor core multiplica um pequeno bloco (ex.: 16x16) em um ciclo, dramaticamente mais rápido que multiplicações escalares FP32.


Números empíricos do ANDREA-120M:


PrecisãoPassos/minNotas
FP32~3baseline; sem aceleração por tensor core
FP16~6núcleos tensor cuBLAS; 2x aceleração
FP8 E4M3~6núcleos tensor; comparável ao FP16

O FP8 não superou o FP16 em throughput nesta carga de trabalho porque o throughput de computação deixou de ser o gargalo; a largura de banda de memória e o overhead de lançamento tornaram-se limitantes. ANDREA-120M v3 é enviado com FP16 cuBLAS a 6 passos/min para uma margem de segurança confortável sem perda de throughput.


Risco de NaN no FP8

O FP8 E4M3 representa números de ~2^-9 a ~448. Ativações ou gradientes fora dessa faixa transbordam para NaN (não é um número) ou subtransbordam para zero. Um único NaN envenena toda computação downstream: multiplicações de matriz com NaN retornam tudo-NaN; gradientes tudo-NaN corrompem o estado AdamW; AdamW com NaN m & v gera atualizações NaN; pesos tornam-se NaN; toda a execução de treinamento morre.


Os experimentos FP8 da ANDREA produziram falésias ocasionais de NaN que exigiam loss scaling, alternância programada de precisão ou caminhos de fallback. O intervalo dinâmico do FP16 (~10^-5 a ~10^5) é amplo o suficiente para que eventos NaN permaneçam raros sem truques intricados de scaling.


Comparação de Precisão: FP32 vs FP16 vs FP8

Escolhendo Precisão para uma Nova Execução

Você está iniciando uma nova execução de treinamento no estilo ANDREA em uma RTX 4090. Você tem duas prioridades em conflito: (1) maximizar steps/min, (2) evitar depuração de falhas NaN no meio do treinamento. ANDREA-120M v3 escolheu FP16 cuBLAS em vez de FP8 E4M3, apesar de ambos rodarem a ~6 steps/min. Razone sobre por que o FP16 venceu essa decisão. Referencie o intervalo dinâmico **AND** suporte a *tensor cores* na sua resposta.

Ajustando 120M em uma Única 4090

O Multiplicador de 6-8x da Lição de Introdução

Lembre-se de grow_a_language_model_intro que a memória de treinamento é aproximadamente 6-8x a contagem bruta de pesos, considerando:


- Peso (1x)

- Primeiro momento Adam m (1x)

- Segundo momento Adam v (1x)

- Buffer de gradiente (1x)

- Ativações & temporárias (~2-4x, depende do lote & contexto)


ANDREA-120M em FP16 com batch_size=8, context=1024:


ComponenteTamanho FP16
Pesos240 MB
m (primeiro momento)240 MB
v (segundo momento)240 MB
Gradientes240 MB
Ativações~2-4 GB (batch, ctx)
Total~3.5 GB

A RTX 4090 tem 24 GB de VRAM. ANDREA-120M usa ~14% em FP16. Ampla margem para tamanhos de batch maiores ou janelas de contexto mais longas. ANDREA-12M usou apenas 1.4 GB no total.


Onde a Precisão Mista Reside

O ANDREA NÃO mantém tudo em uma única precisão. O treinamento de precisão mista armazena:


- Pesos mestres: FP32 (preserva a estabilidade do treinamento)

- Cálculo forward & backward: FP16 (usa tensor cores)

- Estado do otimizador AdamW: FP32 (m & v precisam de precisão para atualizações de cauda longa)

- Buffer de gradientes: FP16 (lado do compute)


O orçamento final de memória mistura ambos. A pegada real da ANDREA fica entre FP16 puro (720 MB estado do otimizador) & FP32 puro (1.44 GB estado do otimizador), mais próximo do FP32 porque m & v permanecem em FP32.

Dimensionando um Orçamento para ANDREA-480M

ANDREA-480M (o planejado terceiro membro da família) possui ~480 milhões de parâmetros. Estime (a) apenas pesos FP16 em MB, (b) pesos FP16 + m + v em MB (assuma m & v também FP16 por simplicidade), & (c) dada a regra de multiplicador 6-8x, pegada total no tempo de treinamento em FP16. A ANDREA-480M cabe em uma única RTX 4090 (24 GB)?

Precisão na Prática

Suponha que você descobriu durante o treinamento que o ANDREA-120M estava produzindo perdas NaN ocasionais a cada ~5000 passos em FP16, & cada NaN exigia reiniciar a partir de um checkpoint. Qual **UMA** mudança você tentaria primeiro para reduzir a frequência de NaN sem sair do FP16? Justifique com um mecanismo de uma frase.

Atividades Adjacentes

Três atividades irmãs ligam à precisão:


- Atividade 1: Intro / Orçamento de VRAM. Precisão multiplica cada termo na aritmética do orçamento de memória. A regra de ouro do multiplicador 6-8x é adimensional; bytes-por-parâmetro dá unidades a ela.

- Atividade 10: AdamW. O estado do otimizador (m & v) tipicamente permanece em FP32 mesmo quando o compute forward/backward roda em FP16. Razão: a precisão do acumulador de cauda longa importa mais do que a velocidade de runtime para o otimizador.

- Atividade 12: Clipping de gradiente. O clipping limita as magnitudes do gradiente antes das atualizações do estado do otimizador. Com FP16 forward/backward & FP32 otimizador, o clipping acontece na fronteira onde a precisão muda & onde o risco de overflow se concentra.


A precisão é um knob grátis: mude-a, o modelo treina mais rápido & usa menos memória. O custo é cuidado numérico: tratamento de NaN, escalonamento de perda, disciplina de precisão mista. ANDREA-120M v3 demonstra o payoff: 120M parâmetros treinados em hardware de consumidor em 23 dias porque FP16 cortou tudo pela metade.