spb/forge Public MIT
Forge — LLM training from scratch in pure C++20 + Metal on Apple Silicon.
C++ 61.2%
C 23%
Python 7.6%
TeX 7.2%
CMake 1.1%
1// Author: Simon-Pierre Boucher — contact@spboucher.ai2#pragma once34#include "nn/config.h"5#include "nn/transformer.h"6#include "train/dataloader.h"7#include "train/optimizer.h"89#include <memory>10#include <string>1112namespace forge::train {1314// Training loop: gradient accumulation, warmup+cosine LR, global-norm clip,15// periodic eval + resumable checkpoints, stdout + CSV logging (step, loss,16// tokens/sec, lr, grad norm — CLAUDE.md training-loop requirements).17class Trainer {18public:19 Trainer(Config cfg, const std::string& data_dir, const std::string& out_dir,20 const std::string& config_json);2122 // resume_from: checkpoint path or empty.23 void train(const std::string& resume_from);2425private:26 float eval_loss();27 void save(int64_t step);2829 Config cfg_;30 std::string out_dir_;31 std::string config_json_;32 std::unique_ptr<nn::Transformer> model_;33 std::unique_ptr<AdamW> opt_;34 std::unique_ptr<DataLoader> train_data_;35 std::unique_ptr<DataLoader> val_data_;36};3738} // namespace forge::train39