Llm.c – LLM training in simple, pure C/CUDA

Project scope and intent

  • Repo is a ~1000-line C implementation of transformer training, currently CPU/OpenMP-based; CUDA is planned but not yet present.
  • Many see it as a minimal, didactic reference showing that LLM training internals are conceptually simple compared to large frameworks.
  • Others note that while the core algorithm fits in little code, production systems need far more functionality and engineering.

Python, overhead, and frameworks

  • Debate over Python’s performance: core tensor ops are in optimized low-level code, so runtime/memory overhead is often modest.
  • Counterpoints: hot Python loops and suboptimal data structures can dominate runtime; “using the wrong primitive” can yield huge slowdowns.
  • Some argue Python’s container variety invites performance traps; others say that’s a programmer, not language, problem.
  • Larger criticism targets ecosystem complexity and dependency bloat (PyTorch, CPython) versus small, focused C code.

CUDA, GPU stacks, and alternatives

  • CUDA SDK and associated libraries are seen as huge and complex (multi‑GB installs, very large shared objects).
  • Some emphasize that CUDA size is also a burden for Python stacks; GPU complexity is largely independent of language.
  • CUDA remains dominant in speed and tooling; alternatives (AMD ROCm, TPUs, Vulkan-based projects, Rust frameworks, etc.) exist but are less mature or harder to use.
  • Several comments describe frustrating experiences with AMD drivers and ecosystem stability.

Hardware and VRAM discussions

  • Desire for expandable GPU memory (e.g., SO‑DIMMs) to reduce VRAM constraints for LLMs.
  • Others explain technical and economic reasons against modular GPU memory: latency, bandwidth, power, cooling, and product segmentation.

Educational value and resources

  • Many view the project as an excellent learning tool that demystifies LLM training.
  • Multiple replies point to associated tutorials and video series that build similar models step by step in higher-level languages, then in C.

Transformers and other domains

  • Discussion notes that transformers are generic “array in, array out” modules; with appropriate tokenization they can handle time series, images, and audio.
  • References are given to time-series transformer work, alongside skepticism that these always beat strong classical baselines like gradient boosting.