Essencial
Lendo pesos reais: abrindo o checkpoint do Qwen3.8-27B
Os arquivos safetensors do Qwen3.8-27B são um mapa tipado de nomes de tensor para shapes, e cada entrada — embeddings não amarrados, projeções de attention não quadradas, trios da FFN gated, maquinaria de estado do DeltaNet — remete a uma lição.
Atualizada em
01 · Conceito
Conceito
Você construiu um Transformer; agora abra um que já foi enviado para produção. O Qwen3.8-27B é distribuído como arquivos safetensors fragmentados — um formato só de dados que mapeia nomes de parâmetro para arrays tipados, com um arquivo de índice dizendo ao loader qual shard guarda qual nome. Não existe relatório técnico dedicado a esse modelo; sua arquitetura é documentada pela configuração e pela linhagem herdada do Qwen3.5. Isso torna o próprio checkpoint uma evidência incomumente importante: os tensores são a verdade fundamental, e depois desta track você consegue ler cada um deles.
O protocolo de leitura é sempre o mesmo. Recupere primeiro o contrato exato da arquitetura — configuração, tokenizer, convenções de nomes — depois liste nome, shape e dtype de cada tensor e mapeie-os para as equações do bloco. Os nomes seguem as convenções da Hugging Face para a classe de arquitetura do modelo; os índices de camada contam a partir de zero, e no layout três-para-um do Qwen3.8-27B a primeira camada de attention aparece no índice 3, depois de três camadas DeltaNet. Dois detalhes pegam as pessoas aqui. Este é um checkpoint multimodal, então a pilha de texto fica aninhada sob model.language_model. e a torre de visão sob model.visual.. Compare o prefixo de forma ancorada — ^model\.layers\. não retorna nada aqui, e é esse o sinal para procurar o prefixo real. Um model.layers. sem âncora é pior que inútil: language_model.layers. termina exatamente com essa substring, então casa com todo tensor de texto e esconde justamente o aninhamento que você precisava notar. E lm_head.weight fica no nível de cima, sem prefixo, porque os embeddings não são amarrados. Uma fatia representativa da listagem tem esta cara (pesos armazenados com as linhas de saída primeiro; confira por amostragem contra o próprio índice do checkpoint antes de confiar em qualquer entrada):
model.language_model.embed_tokens.weight [248320, 5120] lesson 1.5
model.language_model.layers.0.linear_attn.* DeltaNet tensors lesson 4.15
model.language_model.layers.3.self_attn.q_proj.weight [12288, 5120] lessons 4.2, 4.5
model.language_model.layers.3.self_attn.k_proj.weight [1024, 5120] lessons 4.2, 4.5
model.language_model.layers.3.self_attn.v_proj.weight [1024, 5120] lessons 4.2, 4.5
model.language_model.layers.3.self_attn.o_proj.weight [5120, 6144] lesson 4.5
model.language_model.layers.3.mlp.gate_proj.weight [17408, 5120] lesson 4.9
model.language_model.layers.3.mlp.up_proj.weight [17408, 5120] lesson 4.9
model.language_model.layers.3.mlp.down_proj.weight [5120, 17408] lesson 4.9
model.visual.blocks.* vision tower
lm_head.weight [248320, 5120] lesson 4.11
Percorra de cima a baixo e o curso inteiro se apresenta. embed_tokens é a tabela de 248.320 linhas da lição 1.5, um vetor de largura 5120 por entrada de vocabulário, cerca de 1,271 bilhão de parâmetros. O quarteto self_attn é a maquinaria multi-head da lição 4.5 vestindo seus shapes reais: a projeção de query emite features — as queries e sua porta de saída intercaladas head a head — keys e values apenas cada porque quatro KV heads servem a todos os vinte e quatro query heads, e o_proj dobra a saída de atenção de 6144, já escalada pela porta, de volta para o stream de 5120. O trio mlp é a FFN gated da lição 4.9 — gate e up expandindo para 17.408, down retornando, cerca de 267 milhões de parâmetros por camada. E lm_head fecha o ciclo da lição 4.11: uma segunda matriz 248.320 × 5120, não uma referência à primeira.
Esse último ponto merece parágrafo próprio, porque é aí que um leitor confiante erra. Muitos modelos famosos amarram o output head à tabela de embedding — uma matriz, dois papéis — e um hábito comum é contar lm_head como gratuito. Faça a checagem: se os pesos fossem amarrados, o checkpoint guardaria um tensor referenciado pelos dois nomes, e a contabilidade total de parâmetros o incluiria uma vez. O Qwen3.8-27B guarda os dois tensores. Os embeddings não são amarrados: cerca de 1,271 bilhão de parâmetros entrando, outros ~1,271 bilhão saindo, aproximadamente 2,54 bilhões somados. Uma auditoria de parâmetros que assume amarração erra por mais de um bilhão — dinheiro de verdade em bf16.
Agora percorra os índices de camada e algo mais estranho aparece: a maioria das camadas não tem nenhum tensor self_attn. As camadas 0, 1 e 2 carregam, em vez disso, uma família de maquinaria linear_attn — projeções para um tipo diferente de mixer, uma convolução curta cujo kernel abrange quatro posições e parâmetros que governam uma atualização de estado por passo. Essas são as camadas Gated DeltaNet: 48 das 64, três a cada quatro, exatamente como o layout prometia. Os nomes desses tensores vão parecer desconhecidos até a lição 4.15 abrir o mecanismo, e a lição 4.16 explicar por que o checkpoint intercala as duas famílias. Por ora, trate nomes desconhecidos como um arqueólogo trata uma ferramenta desconhecida: registre o shape, anote a camada a que pertence e resista a interpretá-lo antes de conhecer a equação a que ele serve. O que você já pode verificar é o padrão — três camadas de maquinaria de estado, uma camada de q/k/v/o, repetindo dezesseis vezes — e que toda camada, de qualquer um dos tipos, carrega o mesmo trio mlp e os vetores de escala do RMSNorm.
Estatísticas básicas vêm em seguida, exatamente como em qualquer checkpoint: procure NaNs e infinitos, calcule normas e faixas por tensor, compare camadas entre si. Uma camada de zeros é um shard faltando; um vetor de norm numa escala absurda é um cast de dtype ruim; distribuições de Q, K, V que divergem radicalmente de uma conversão sabidamente boa expõem um erro de fatiamento. O Qwen3.8-27B é distribuído em bfloat16, então um leitor float32 que faz upcast silenciosamente é inofensivo, enquanto um que interpreta mal os bytes brutos não é. Histogramas mostram saúde, não significado: um peso grande não é um conceito importante, e girar uma base interna pode mudar cada coordenada preservando o comportamento.
Para ir da estrutura à função, colete ativações sobre entradas controladas, pergunte o que um componente escreve no residual stream e intervenha — ablação, patching, projeção para fora — antes de afirmar causação. Esse é o trabalho da interpretabilidade, e ele se apoia no mapa que você acabou de fazer. A conclusão modesta é a poderosa: nomes e shapes revelam arquitetura, estatísticas revelam saúde, e este checkpoint em particular — embeddings não amarrados, attention não quadrada, trios de FFN gated e quarenta e oito camadas de maquinaria de estado ainda não explicada — acaba de lhe entregar a lista de leitura das próximas duas lições.
02 · Analogia
Analogia
Abrir um checkpoint é como receber cada peça usinada de um relógio em bandejas etiquetadas. As dimensões de uma bandeja dizem se aquilo é engrenagem, mola ou eixo; os arranhões mostram uso, não propósito. Você pode inventariar peças e detectar uma engrenagem empenada, mas entender a marcação do tempo exige traçar como as peças se conectam. Nomes e shapes de tensor são as bandejas; a arquitetura que você passou esta track aprendendo é o diagrama de montagem.
03 · Explique de volta
Explique de volta
Dada a listagem de safetensors do Qwen3.8-27B, explique como nomes e shapes de tensor identificam os embeddings não amarrados, as projeções de attention, a FFN gated e as camadas DeltaNet — e o que um shape sozinho não pode dizer.
Comparar com uma resposta-modelo
A tabela de embedding e o lm_head aparecem ambos como tensores 248.320 por 5120 sob nomes diferentes, confirmando pesos não amarrados de cerca de 1,271B parâmetros cada. Numa camada de attention, q_proj é 12288 por 5120, porque estas camadas com porta empacotam a porta de saída na mesma matriz: 24 heads vezes head dimension 256, duas vezes. k_proj e v_proj são 1024 por 5120 (4 KV heads), e o_proj mapeia a saída de atenção de 6144, já escalada pela porta, de volta para 5120 — não quadrado por design. A FFN de cada camada contribui com projeções gate, up e down entre 5120 e 17.408. Camadas cujos tensores de mixer não são q/k/v/o, mas convolução e maquinaria de atualização de estado, são as 48 camadas Gated DeltaNet. Shapes verificam a arquitetura e pegam erros de conversão, mas não revelam semântica: isso exige ativações e intervenções.
04 · Teste seu entendimento
Teste seu entendimento
Conclua o teach-back e acerte o quiz para finalizar a aula.
◎ · Marcador de evidência
Fontes
- Nelson Elhage et al. (2021). A Mathematical Framework for Transformer Circuits.
- Kevin Wang et al. (2022). Interpretability in the Wild: a Circuit for Indirect Object Identification in GPT-2 Small.
- Qwen Team (2026). Qwen3.8-27B Model Card.