Buckets:
| namespace neuroflow { | |
| struct TrainLMConfig { | |
| size_t vocab_size = 128000; | |
| size_t d_model = 256; | |
| size_t max_seq_len = 128; | |
| size_t num_attn_layers = 2; | |
| size_t num_attn_heads = 4; | |
| size_t causal_window_size = 32; | |
| size_t sae_k = 64; | |
| size_t ntm_memory_slots = 16; | |
| bool weight_tying = true; | |
| bool use_rope = true; | |
| bool use_bridge = true; | |
| bool use_swiglu = true; | |
| bool use_qk_norm = true; | |
| size_t swiglu_intermediate_size = 0; | |
| std::string pooling = "mean"; | |
| float learning_rate = 5e-4f; | |
| float adam_beta1 = 0.9f; | |
| float adam_beta2 = 0.999f; | |
| float adam_eps = 1e-8f; | |
| float adam_weight_decay = 0.01f; | |
| float grad_clip = 1.0f; | |
| float lr_min_ratio = 0.1f; | |
| float warmup_ratio = 0.01f; | |
| size_t epochs = 10; | |
| size_t total_steps = 0; | |
| size_t log_interval = 10; | |
| size_t save_interval = 1000; | |
| std::string output_dir = "./checkpoints"; | |
| std::string data_path; | |
| }; | |
| class TrainLM { | |
| public: | |
| TrainLM(const TrainLMConfig& config); | |
| void train(const std::vector<std::vector<size_t>>& dataset); | |
| private: | |
| TrainLMConfig cfg_; | |
| std::unique_ptr<CausalLMHead> lm_head_; | |
| std::unique_ptr<AdamW> optimizer_; | |
| std::unique_ptr<CosineScheduler> scheduler_; | |
| void setup_optimizer(); | |
| float compute_loss_and_grad(const std::vector<size_t>& input_ids, | |
| const std::vector<size_t>& target_ids, | |
| Tensor& logits_grad); | |
| void save_checkpoint(size_t step, float loss); | |
| }; | |
| } // namespace neuroflow | |
Xet Storage Details
- Size:
- 1.86 kB
- Xet hash:
- 1f3fe396e29d2d18e4ef90a3280f35da7ff2f12104a4bdbfd9de114089081ce3
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.