AI from scratch

15. Open weights

"Open weights" is a narrower phrase than it sounds.

You get the numbers. You get enough config to load them. You usually get a tokenizer and a license. You do not get the training data, the training code, the reward model, or a promise that the download matches the API.

What shipped

On August 12, 2026 — files were staged on Hugging Face a few days earlier — Qwen published:

Same thing on ModelScope.

The bf16 repo is 213 safetensors shards, plus:

config.json
generation_config.json
chat_template.jinja
tokenizer.json
tokenizer_config.json
vocab.json
merges.txt
LICENSE
README.md
model.safetensors.index.json

safetensors is just a file format for big arrays that is safer to load than raw pickle. A shard is one slice of the pile, so you can download in parallel and map pieces onto different GPUs.

This is a multi-terabyte artifact. Plan for a cluster, or do not plan to run it.

What the files actually are

config.json is the blueprint. It is how we know the layer list, the expert counts, the head counts. If a blog disagrees with config.json, believe config.json.

The tokenizer files are the codec from chapter 2. Without them the weight matrices are a pile of floats with no agreed-upon alphabet.

chat_template.jinja is the wrapper that turns [{role, content}, ...] into the exact token string the model was trained to see. For this checkpoint it also refuses enable_thinking=false. That is not your inference engine being difficult. That is the official template.

generation_config.json is the official die: temperature 1.0, top-p 0.95, top-k 20.

The license is custom. Chapter 13 summarized it. Read the file before you build a business on it.

What you still cannot do

You cannot see how it was trained. "Pre-training & Post-training" is the entire official sentence.

You cannot assume the API and the file are the same model. Max has vision. The file does not. Max can skip thinking. The file cannot. The benchmark table is labeled Max.

You cannot fine-tune this at home. Fine-tuning 2.4T, even sparsely, is a lab activity. The 27B, when it exists, is the fine-tune target.

You cannot treat a random Hugging Face repo named Qwen3.8-27B as official. Until it lives under Qwen/, it is a placeholder, a leak, or a guess.

How people will actually run it

The card points at SGLang, vLLM, and TokenSpeed. Those are serving engines. They implement the architecture, the cache, the batching, sometimes the speculative decoding. You do not load this into a Python REPL on a laptop and .generate().

Quantization — FP8 already official, community 4-bit later — is how you shrink the storage and sometimes the memory traffic. It does not turn 2.4T into a desktop model. All the experts still have to live somewhere.

If you just want to use the thing, call the API. The interesting fact about the open weights is not that you will serve them. It is that researchers can now look at the tensors, write independent evals, distill from them, and argue about the architecture with a file in hand instead of a press release.