Views
No views yet

| Especificação | Valor |
|---|---|
| Parâmetros | 870.2M (embeddings amarrados) |
| Arquitetura | Qwen3Next denso (GQA 12Q/2KV, head_dim 128, QK-norm) |
| Camadas / Hidden | 18 / 1536 |
| MLP intermediário | 8192 (SwiGLU) |
| Vocabulário | 32.000 (BPE próprio) |
| Contexto | 4096 tokens (RoPE θ=1M, rotary parcial 0.25; treinado em 2048) |
| Tokens de treino | 20.000.014.336 (20B) |
| Precisão | BF16 |
| Framework | JAX + optax + orbax |
| Hardware | TPU v5e-8 (Kaggle, sessões de 9h) |
<pad> (0), <unk> (1), <s> (2), </s> (3), <doc> (4)<doc> separa documentos e habilita masking intra-documento no treino.1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4tok = AutoTokenizer.from_pretrained("henriqueimoveis/Echoes-1.5-Base-PT-BR")
5model = AutoModelForCausalLM.from_pretrained(
6 "henriqueimoveis/Echoes-1.5-Base-PT-BR",
7 dtype=torch.bfloat16,
8).cuda()
9
10prompt = "A história dos fóruns brasileiros começou"
11ids = tok(prompt, return_tensors="pt").to("cuda")
12
13# use_cache=False e obrigatorio, veja a nota abaixo.
14out = model.generate(**ids, max_new_tokens=200, use_cache=False)
15print(tok.decode(out[0], skip_special_tokens=True))Passeuse_cache=False. Sem isso ogenerate()levantaValueError: has_previous_state can only be called on LinearAttention layers. O modelo declaramodel_type: qwen3_next, e essa implementacao monta a mascara de atencao linear mesmo quando todas as 18 camadas saofull_attention— que e o caso aqui, porque este modelo e denso. O contexto e curto (4096), entao reprocessar a janela custa pouco.
847 → ['8','47'], 396 →
['39','6']), então não há alinhamento posicional que permita aprender o
algoritmo. Isso não se resolve com mais dados.config.json diz qwen3_next, mas o modelo é denso: 18 camadas, todas
full_attention, sem MoE, sem atenção linear e sem camada MTP. A lista de
tensores é idêntica à de um Qwen3 denso — com uma exceção decisiva:model.layers.0.self_attn.q_proj.weight -> (3072, 1536) # e nao (1536, 1536)q_proj emite Q e um gate concatenados (head_dim * 2 por cabeça), e o
gate multiplica a saída da atenção:1query_states, gate = torch.chunk(
2 self.q_proj(hidden_states).view(*input_shape, -1, self.head_dim * 2), 2, dim=-1
3)qwen3 denso: check_tensor_dims: tensor 'blk.0.attn_q.weight' has wrong shape; expected 1536,1536, got 1536,3072qwen3_next: o conversor exige camada MTP (assert self.opt_num_mtp_layers != 0) e espera atenção linear + MoE, que não existem aquipartial_rotary_factor = 0.25, ou seja, RoPE em
apenas 32 das 128 dimensões por cabeça. O conversor denso não escreve
rope.dimension_count, então mesmo resolvendo o gate o GGUF sairia com RoPE
completo e geraria lixo.transformers (com use_cache=False, veja acima).1@misc{echoes15,
2 author = {Henrique},
3 title = {Echoes-1.5: um modelo de linguagem PT-BR treinado do zero em TPU gratuita},
4 year = {2026},
5 url = {https://huggingface.co/henriqueimoveis/Echoes-1.5-Base-PT-BR}
6}