Рано, ох рано я взялся за вторую Гемму. Официальные приколы:
- Связанный embed_tokens и lm_head (из-за чего при развязывании модель становится уже 10B) и огромный словарь.
- Скользящее окно внимания в каждом втором слое. До сих пор не поддерживается в vllm.
- Мягкая обрезка логитов во внимании и в финальном слое. Не совместимо с родным FlashAttention, из-за чего в том же vllm используют FlashInfer вместо этого.
- Post-ln и pre-ln одновременно, и с RMSNorm. В целом не проблема, но вот ортогонализации мешает.
- GQA: пофиг, все уже привыкли.
А есть ещё и неофициальные приколы:
- Неправильная константа масштабирования во внимании, которую поправили только недавно. И из-за которой какое-то время не работала конвертация в GGUF.
- Домножение эмбеддингов на sqrt(hidden_dim), что может быть проблемой в bf16. Плюс об этом нужно помнить во всех реализациях.
Плюс в том же Unsloth всё ещё есть баги при дообучении.
- Связанный embed_tokens и lm_head (из-за чего при развязывании модель становится уже 10B) и огромный словарь.
- Скользящее окно внимания в каждом втором слое. До сих пор не поддерживается в vllm.
- Мягкая обрезка логитов во внимании и в финальном слое. Не совместимо с родным FlashAttention, из-за чего в том же vllm используют FlashInfer вместо этого.
- Post-ln и pre-ln одновременно, и с RMSNorm. В целом не проблема, но вот ортогонализации мешает.
- GQA: пофиг, все уже привыкли.
А есть ещё и неофициальные приколы:
- Неправильная константа масштабирования во внимании, которую поправили только недавно. И из-за которой какое-то время не работала конвертация в GGUF.
- Домножение эмбеддингов на sqrt(hidden_dim), что может быть проблемой в bf16. Плюс об этом нужно помнить во всех реализациях.
Плюс в том же Unsloth всё ещё есть баги при дообучении.