Views
No views yet
| Cấu hình | d_model | Attention heads | KV heads | Layers | FFN dimension |
|---|---|---|---|---|---|
| 35M | 512 | 8 | 8 | 8 | 2.048 |
| 100M | 768 | 12 | 6 | 12 | 3.072 |
| 500M | 1.024 | 16 | 8 | 32 | 4.096 |
d_model bằng nn.Embedding. Khác với Transformer trong bài báo Attention Is All You Need, vốn cộng sinusoidal positional encoding trực tiếp vào token embedding, SAI sử dụng Rotary Positional Embedding (RoPE). RoPE mã hoá vị trí tương đối bằng cách xoay các vector query và key trong attention. Context tối đa của mô hình là 2.048 token.scaled_dot_product_attention của PyTorch, cho phép tự chọn cuDNN Attention, Flash Attention, memory-efficient attention hoặc math backend phù hợp. Causal mask ngăn mô hình nhìn thấy token tương lai; padding mask loại bỏ token đệm khi huấn luyện.1x = x + Dropout(GQA(RMSNorm(x)))
2x = x + Dropout(SwiGLU(RMSNorm(x)))gate và up, sau đó tính up × SiLU(gate) và chiếu trở lại d_model. Tất cả lớp tuyến tính trong attention và SwiGLU đều không dùng bias. Sau chồng decoder block, mô hình áp dụng một RMSNorm cuối trước language-model head.torch.compile để tăng tốc trên GPU.build_input của dự án, bao gồm chuyển nội dung về chữ thường và thêm các token vai trò. Bước prefill xử lý toàn bộ prompt một lần và lưu key/value của từng decoder block vào KV buffer cấp phát sẵn. Các bước sau gọi decode_step cho token mới và cập nhật trực tiếp buffer, thay vì dùng GenerationMixin hoặc DynamicCache của Transformers.1.2 và no-repeat 3-gram. Quá trình sinh dừng khi gặp [EOS], <|im_end|>, đạt giới hạn context hoặc thoả điều kiện dừng sớm.TransformerModel.py, DecoderBlock.py, GroupedQueryAttention.py, RotaryPositionalEmbedding.py, SwiGLU.py và generate.py. Nội dung thuật toán lấy trực tiếp từ project gốc; thay đổi duy nhất là chuyển các import src.* thành relative import để cơ chế trust_remote_code tải được chúng.modeling_sai.py chỉ là adapter mỏng: đọc SAIConfig, giữ nguyên tên tensor trong state dict, chuyển lời gọi sang TransformerModel gốc và materialize RoPE/causal-mask buffer sau cơ chế meta-device của from_pretrained(). Adapter không cài đặt lại attention, decoder, KV cache hay beam search.pip install torch transformers sentencepiece1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4
5model_id = "thongbuind/SAI_100M"
6
7tokenizer = AutoTokenizer.from_pretrained(
8 model_id,
9 trust_remote_code=True,
10)
11model = AutoModelForCausalLM.from_pretrained(
12 model_id,
13 trust_remote_code=True,
14)
15device = "cuda" if torch.cuda.is_available() else (
16 "mps" if torch.backends.mps.is_available() else "cpu"
17)
18model = model.to(device).eval()
19
20answer = model.generate(
21 "vì sao giải đua xe F1 hấp dẫn trong lòng người hâm mộ",
22 tokenizer,
23 max_new_tokens=200,
24 beam_size=5,
25 penalty=1.2,
26 no_repeat_ngram=3,
27 early_stop=False,
28 patience=30,
29)
30print(answer)AutoModelForCausalLM và AutoTokenizer chỉ được dùng làm lớp tương thích để tải config, trọng số và SentencePiece tokenizer. Thuật toán inference không gọi GenerationMixin.generate(), DynamicCache, GenerationConfig, apply_chat_template() hay beam search mặc định của Transformers. Phương thức SAIForCausalLM.generate() gọi trực tiếp beam search trong generate.py.lm_head. Không dùng device_map="auto" để chia model qua nhiều device.