<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Greninja9257</title>
    <description>The latest articles on DEV Community by Greninja9257 (@greninja9257).</description>
    <link>https://dev.to/greninja9257</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4079634%2F1930ac43-a7e9-4151-b843-61652768b04c.jpg</url>
      <title>DEV Community: Greninja9257</title>
      <link>https://dev.to/greninja9257</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/greninja9257"/>
    <language>en</language>
    <item>
      <title>I built a native macOS app for training small language models</title>
      <dc:creator>Greninja9257</dc:creator>
      <pubDate>Sun, 16 Aug 2026 03:08:53 +0000</pubDate>
      <link>https://dev.to/greninja9257/i-built-a-native-macos-app-for-training-small-language-models-co9</link>
      <guid>https://dev.to/greninja9257/i-built-a-native-macos-app-for-training-small-language-models-co9</guid>
      <description>&lt;p&gt;I've been building &lt;strong&gt;LabLLM&lt;/strong&gt;, a free native macOS app for training small Transformer/LLM models from scratch using your own datasets.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if experimenting with language models felt more like using a creative tool than setting up an ML project?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Training a language model shouldn't require duct-taping together scripts, notebooks, dashboards, checkpoint folders, and a terminal window you're afraid to close.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LabLLM gives you a visual workspace for the entire training loop:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build a GPT-style model from random initialization&lt;/li&gt;
&lt;li&gt;Import your own text or instruction data&lt;/li&gt;
&lt;li&gt;Train locally using Apple Silicon + MLX&lt;/li&gt;
&lt;li&gt;Watch training and validation loss in real time&lt;/li&gt;
&lt;li&gt;Save and resume checkpoints&lt;/li&gt;
&lt;li&gt;Fine-tune model behavior&lt;/li&gt;
&lt;li&gt;Generate samples while the model trains&lt;/li&gt;
&lt;li&gt;Chat with the model you actually trained&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Greninja9257/LabLLM" rel="noopener noreferrer"&gt;https://github.com/Greninja9257/LabLLM&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Releases:&lt;/strong&gt; &lt;a href="https://github.com/Greninja9257/LabLLM/releases" rel="noopener noreferrer"&gt;https://github.com/Greninja9257/LabLLM/releases&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Discussions:&lt;/strong&gt; &lt;a href="https://github.com/Greninja9257/LabLLM/discussions" rel="noopener noreferrer"&gt;https://github.com/Greninja9257/LabLLM/discussions&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I made it
&lt;/h2&gt;

&lt;p&gt;Most LLM tooling is designed for people who are already comfortable living in Python scripts, configuration files, terminals, and infrastructure.&lt;/p&gt;

&lt;p&gt;That's powerful. But it makes the first experiment surprisingly expensive.&lt;/p&gt;

&lt;p&gt;If you're curious about language models and want to answer a question like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What happens if I train a tiny language model on this dataset?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;you should be able to find out without first building half a research platform.&lt;/p&gt;

&lt;p&gt;That's what LabLLM is for.&lt;/p&gt;

&lt;p&gt;I want it to feel more like a &lt;strong&gt;workshop&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bring a dataset → build a model → train it → watch it learn → inspect the result → try another idea.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's not intended to replace production ML infrastructure. It's designed for &lt;strong&gt;learning, experimentation, local model development, fine-tuning, and making the training process visible.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  What LabLLM can do
&lt;/h1&gt;

&lt;p&gt;The app can currently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create GPT-style decoder models&lt;/li&gt;
&lt;li&gt;Train models from scratch&lt;/li&gt;
&lt;li&gt;Fine-tune on instruction and conversation data&lt;/li&gt;
&lt;li&gt;Run LoRA fine-tuning&lt;/li&gt;
&lt;li&gt;Run DPO preference training&lt;/li&gt;
&lt;li&gt;Browse and import datasets&lt;/li&gt;
&lt;li&gt;Mix datasets by row count or percentage&lt;/li&gt;
&lt;li&gt;Monitor live training metrics&lt;/li&gt;
&lt;li&gt;Track validation loss separately&lt;/li&gt;
&lt;li&gt;Generate samples during training&lt;/li&gt;
&lt;li&gt;Save and load checkpoints&lt;/li&gt;
&lt;li&gt;Resume training&lt;/li&gt;
&lt;li&gt;Export model cards&lt;/li&gt;
&lt;li&gt;Chat with local models&lt;/li&gt;
&lt;li&gt;Serve a local OpenAI-compatible HTTP endpoint&lt;/li&gt;
&lt;li&gt;Export quantized models&lt;/li&gt;
&lt;li&gt;Browse and manage datasets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft9s4e08308cj0zon83uc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft9s4e08308cj0zon83uc.png" alt="LabLLM training interface" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F37gojcbolygw1heamkz5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F37gojcbolygw1heamkz5.png" alt="LabLLM interface" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  The part I'm focusing on now: trustworthy training
&lt;/h1&gt;

&lt;p&gt;At this point, I'm less interested in adding another flashy feature and more interested in making the &lt;strong&gt;training itself trustworthy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A training application shouldn't just draw a nice loss curve.&lt;/p&gt;

&lt;p&gt;If the curve goes down, you should be able to trust what that curve actually represents.&lt;/p&gt;

&lt;p&gt;So I've been focusing on things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deterministic dataset sampling&lt;/li&gt;
&lt;li&gt;Fixed validation sets&lt;/li&gt;
&lt;li&gt;Correct dataset windowing&lt;/li&gt;
&lt;li&gt;Masked padding loss&lt;/li&gt;
&lt;li&gt;Safer DPO truncation&lt;/li&gt;
&lt;li&gt;Checkpoint metadata&lt;/li&gt;
&lt;li&gt;Real optimizer-state resume&lt;/li&gt;
&lt;li&gt;Tests around core ML behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These details aren't particularly flashy.&lt;/p&gt;

&lt;p&gt;They're important anyway.&lt;/p&gt;

&lt;p&gt;The goal is for LabLLM to be a tool where you can run an experiment, change one variable, run it again, and have confidence that you're actually comparing the things you think you're comparing.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why contributors would be genuinely useful
&lt;/h1&gt;

&lt;p&gt;You don't need to be an ML researcher to contribute.&lt;/p&gt;

&lt;p&gt;There are plenty of useful areas across the project:&lt;/p&gt;

&lt;h3&gt;
  
  
  Swift / macOS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SwiftUI polish&lt;/li&gt;
&lt;li&gt;Accessibility&lt;/li&gt;
&lt;li&gt;Better onboarding&lt;/li&gt;
&lt;li&gt;UX improvements&lt;/li&gt;
&lt;li&gt;Crash investigation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ML / training
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;MLX training correctness tests&lt;/li&gt;
&lt;li&gt;Tokenizer edge cases&lt;/li&gt;
&lt;li&gt;LoRA and DPO invariants&lt;/li&gt;
&lt;li&gt;Dataset processing&lt;/li&gt;
&lt;li&gt;Checkpointing and resume behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tutorials&lt;/li&gt;
&lt;li&gt;Starter recipes&lt;/li&gt;
&lt;li&gt;Example datasets&lt;/li&gt;
&lt;li&gt;Beginner-friendly explanations&lt;/li&gt;
&lt;li&gt;Reproduction cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're interested in &lt;strong&gt;Swift, ML tooling, local-first software, or making machine learning easier to understand&lt;/strong&gt;, I'd love to have you involved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributing guide:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/Greninja9257/LabLLM/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;https://github.com/Greninja9257/LabLLM/blob/master/CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  The kind of app I want LabLLM to become
&lt;/h1&gt;

&lt;p&gt;I want LabLLM to be the app you open when you want to &lt;strong&gt;learn how language models work by actually training one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not just reading about loss curves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watching one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not just looking at a Transformer diagram.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building a small Transformer and experimenting with it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not just downloading a model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Training something small enough to understand and personal enough to care about.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the experience I'm trying to build.&lt;/p&gt;




&lt;h1&gt;
  
  
  It's still beta
&lt;/h1&gt;

&lt;p&gt;LabLLM is early software.&lt;/p&gt;

&lt;p&gt;It can train and fine-tune real models, but it's not a polished, production-grade ML platform yet. Expect rough edges, bugs, and fairly rapid changes.&lt;/p&gt;

&lt;p&gt;If you try it, keep backups of anything important and please report anything confusing or broken.&lt;/p&gt;

&lt;p&gt;Those reports are incredibly valuable at this stage.&lt;/p&gt;




&lt;h1&gt;
  
  
  Try it, break it, improve it
&lt;/h1&gt;

&lt;p&gt;If this sounds interesting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Try the latest beta&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Star the repository&lt;/strong&gt; if you want to help more people discover it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open an issue&lt;/strong&gt; when something breaks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Join Discussions&lt;/strong&gt; with ideas or questions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Send a focused pull request&lt;/strong&gt; if you want to help build it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Greninja9257/LabLLM" rel="noopener noreferrer"&gt;https://github.com/Greninja9257/LabLLM&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Latest releases:&lt;/strong&gt; &lt;a href="https://github.com/Greninja9257/LabLLM/releases" rel="noopener noreferrer"&gt;https://github.com/Greninja9257/LabLLM/releases&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Contributing:&lt;/strong&gt; &lt;a href="https://github.com/Greninja9257/LabLLM/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;https://github.com/Greninja9257/LabLLM/blob/master/CONTRIBUTING.md&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Discussions:&lt;/strong&gt; &lt;a href="https://github.com/Greninja9257/LabLLM/discussions" rel="noopener noreferrer"&gt;https://github.com/Greninja9257/LabLLM/discussions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you care about making ML tools feel &lt;strong&gt;understandable, trustworthy, and fun to explore&lt;/strong&gt;, I'd especially love your help.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Train a tiny model. See what happens.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
