ice40GPT
чат-модель на ~1,07 млн параметров для FPGA
ice40GPT — decoder-only трансформер, который целиком помещается в память FPGA iCE40UP5K. Хранится 1 069 280 параметров: один блок повторяется 6 раз, на каждом проходе свои нормы. Ширина 96, 4 головы, 1 KV-голова, FFN 256; словарь 2048 BPE-токенов, контекст 32 токена. Эмбеддинги — 64-широкая таблица токенов, проецируется до 96 и связана с выходной головой.
✨ Ключевые особенности
- 💻 Веса, KV-кэш и таблицы занимают 134KB — это укладывается в 128KB SPRAM + 15KB EBR чипа iCE40UP5K.
- 💎 int4-блоки весов и int4-эмбеддинги с per-row scales; обучение с QAT. В forward pass применяется int4/int4-округление (
fake_quant), логиты уже отражают квантованные веса. - 📌 Формат промпта:
[INST] текст [/INST]. Текст приводится к нижнему регистру, делится на слова и пунктуацию, затем BPE; конец слова —</w>. - ⏳ Генерация идёт скользящим окном 32 токена и без KV-кэша; останавливается на
<eos>,[INST]или[/INST]. - 🧸 Обучение на TinyChat (CC BY-NC 4.0, данные сгенерированы GPT-4o mini); веса non-commercial.
💻 Пример
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained('.', trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained('.', trust_remote_code=True)
prompt = tok('[INST] hello, how are you today? [/INST]', return_tensors='pt').input_ids
out = model.generate(prompt, max_new_tokens=40)
print(tok.decode(out[0, prompt.shape[1]:], skip_special_tokens=True))
Подробнее
Валидация: 2.631 nats/word, ppl 10.3, top-1 47.6%.Веса, KV-кэш и таблицы — 134KB; чип: 128KB SPRAM + 15KB EBR.
Контекст — 32 токена; язык — английский; обучение на TinyChat (CC BY-NC 4.0), веса non-commercial.
Отвечает на бытовой и эмоциональный small talk; фактические вопросы не решает.






Комментарии