This repository contains an intermediate checkpoint of my German base-model
experiment. I trained the tokenizer and model from random initialization. The
release does not use an imported tokenizer vocabulary, pretrained weights,
distillation, or synthetic training text.
The checkpoint was saved after 10,000 optimizer steps, equivalent to
5,242,880,000 training tokens at the configured global batch size. The prepared
corpus contains 30.00B training tokens, but this checkpoint has not completed
that training target.
This is a base model for text completion, not a chatbot. It has not been
instruction-tuned and should not be expected to answer questions or follow
commands reliably.
Release contents
model.safetensors: inference weights from step 10,000
config.json: architecture configuration
german_transformer_model.py: custom PyTorch model implementation
samples/training_curves/: loss, perplexity, optimization, and throughput plots
SHA256SUMS: integrity hashes for the model, runtime code, and tokenizer
The optimizer and scheduler states are intentionally excluded. The original
resumable checkpoint is a separate training artifact.
Model architecture
Property
Value
Architecture
Decoder-only Transformer
Parameters
341,885,952
Layers
24
Model width
1,024
Attention
16-head MHA, head dimension 64
Feed-forward network
SwiGLU, width 2,816
Normalization
Pre-RMSNorm
Positions
RoPE, theta 10,000
Context length
2,048 tokens
Vocabulary
32,768-token byte-level BPE
Embeddings
Tied input/output embeddings
Dropout
0.0
Training precision
bfloat16
I implemented the architecture directly with PyTorch. It is not registered
with the Hugging Face Transformers AutoModel classes, so trust_remote_code
and AutoModelForCausalLM are not supported by this release. The complete
training and data-preparation code is available in the
GitHub repository.
Tokenizer
The tokenizer is a byte-level BPE tokenizer trained for this experiment on a
sample from German Commons. Its fixed IDs are:
ID
Token
0
<unk>
1
<pad>
2
<s>
3
</s>
4
</w>
IDs 5 through 260 represent the 256 byte values. Higher IDs represent learned
BPE merges. The tokenizer uses </w> as an explicit word boundary marker.
Training data
The prepared data was streamed from
German Commons,
quality-filtered, domain-reweighted, and encoded into local uint16 shards.
The prepared dataset contains:
30,000,000,243 training tokens
50,002,350 validation tokens
a stable-hash document split with seed 1337
aggregate source and license counts recorded during preparation
The accepted-document license distribution recorded in the preparation
manifest was approximately 51.6% CC0-1.0, 46.2% CC-BY-4.0, and 2.2%
CC-BY-SA-4.0. These percentages count accepted documents, not tokens.
German Commons contains a substantial amount of historical newspaper and
cultural material. Domain reweighting reduced that concentration but did not
remove it. The resulting model frequently uses historical spelling and register.
Training configuration
Property
Value
Checkpoint step
10,000
Tokens consumed
5.243B
Prepared training target
30B tokens
Optimizer
AdamW
Adam betas
0.9, 0.95
Weight decay
0.1
Gradient clipping
1.0
Peak learning rate
3e-4
Warmup
2,000 steps
Schedule
Cosine decay to 3e-5
Global batch
524,288 tokens per step
Micro-batch
16 sequences
Gradient accumulation
16
Hardware
1 NVIDIA H100 PCIe 80 GB
Measured throughput
approximately 60,000 tokens/second
Compile mode
disabled for this run
At step 10,000, the recorded training loss was 3.2307. Evaluation over 20
batches from the held-out validation shards produced a validation loss of
3.2593 and perplexity of 26.03. This is a training diagnostic, not a broad
language-model benchmark.
Training and validation loss
Validation perplexity
Learning rate and gradient norm
Training throughput
Evaluation status
No standardized downstream benchmark results are reported for this checkpoint.
The available evaluation consists of held-out German Commons loss and direct
inspection of deterministic completions. The 5k and 10k comparison is published
in samples/generations_5k_vs_10k.md.
Those samples are intentionally unedited. They show improved German structure
at step 10,000, but also repetition, historical register, and severe factual
fabrication.
Usage
Install PyTorch and Safetensors, clone or download this repository, and run from
its root:
bash
1python inference.py \2 --model-dir .\3 --prompt "Die deutsche Sprache ist"\4 --max-new-tokens 80\5 --temperature 0.8\6 --top-k 40\7 --top-p 0.9
This example performs one greedy next-token step. Autoregressive sampling can
be implemented by repeatedly passing the most recent 2,048 tokens through the
model and applying temperature, top-k, or top-p filtering.
Intended use
Research on German base-model pretraining and tokenization
Inspection of training behavior at an early checkpoint
Continuation training and controlled fine-tuning experiments
Non-factual German text-completion experiments
Limitations
Intermediate checkpoint. The model has consumed about 17.5% of the
prepared 30B-token target.
Not instruction-tuned. Question answering and chat prompts are outside
the model's training objective.
Unreliable facts. The model confidently invents people, places, dates,
quantities, and relationships. Its output must not be treated as evidence.
Repetition. Longer generations often enter repeated phrases or sentence
structures.
Historical register. Archaic spelling and phrasing occur frequently due
to the composition of the accepted training documents.
German-focused. Other languages were not evaluated and are outside the
intended scope.
Inherited corpus bias. Filtering and provenance records do not remove
social, historical, geographic, or source-selection bias.
No safety evaluation. I have not completed red-team, memorization,
privacy, toxicity, or demographic-bias evaluations.
Do not use this checkpoint for medical, legal, financial, emergency, or other
high-impact decisions. It is not suitable for autonomous decision-making about
people.
Licensing and attribution
The project code in this repository is licensed under the MIT License; see
LICENSE.
The model weights are released under CC BY-SA 4.0 as stated in the repository
metadata.
German Commons and each constituent source retain their own attribution and
licensing requirements. Users are responsible for reviewing those terms for
their intended use.
Please attribute both Hamid Wakili for this model release and German Commons as
the training-data source.
Citation
bibtex
1@misc{wakili2026germancommons350m,
2 author = {Hamid Wakili},
3 title = {German Commons 350M, Step 10,000},
4 year = {2026},
5 note = {Intermediate German base-model checkpoint},
6 url = {https://github.com/ideployed/sovereign-german-llm}
7}