Instruction Tuning

A pretrained language model is a superb next-token predictor. But it is a poor employee. Ask it "Summarize this article in three bullet points" and it might complete your sentence with "and explain why it matters." It won't actually summarize anything. This happens because its training objective only ever rewarded predicting plausible continuations of internet text. Instruction tuning closes this gap. It takes a model trained to imitate text. Then it retrains that model, on a much smaller curated dataset, to imitate helpful responses to directives. The change is deceptively simple — same architecture, same loss function, just different data. Yet it is the single intervention that converts a raw Language Model Pretraining checkpoint into something resembling an assistant. The practical stakes are enormous. Every production chat system — customer support bots, coding assistants, research aides — depends on something crucial. It depends on a model that reliably interprets "translate this," "write a function that," or "explain like I'm five" as commands. These must be treated as commands rather than as text to be continued. Before instruction tuning became standard practice, researchers relied on In-Context Learning and clever prompt engineering. They used these tools to coax desired behavior from raw pretrained models. Results were inconsistent across tasks and phrasings. Instruction tuning instead bakes the "follow directions" behavior directly into the model's weights. So it generalizes to instructions never seen during training. The big picture is a two-stage recipe that has become the industry default. First, pretrain on trillions of tokens of raw text to build broad linguistic and world knowledge. Then fine-tune on a much smaller set — often tens of thousands to a few million examples. This set consists of (instruction, response) pairs, and uses ordinary supervised learning. This second stage is frequently called supervised fine-tuning (SFT). It is cheap relative to pretraining. Yet it produces an outsized behavioral shift. This happens because it does not need to teach the model new facts. It only needs to teach a new mode of engagement with facts it already has. This article gives the precise mechanics of instruction tuning. It covers how the data is formatted. It explains how the loss is computed, and which tokens are masked out. It presents the algorithm end to end with pseudocode. It explores why the approach generalizes to unseen instructions, rather than merely memorizing the training set. Finally, it locates instruction tuning relative to its natural successor. That successor is Reinforcement Learning from Human Feedback, on the road to the broader Alignment & the Alignment Problem.

Key takeaways
  • Instruction tuning is supervised fine-tuning of a pretrained LM on (instruction, response) pairs so it follows directives instead of merely continuing text.
  • The training objective is the same next-token cross-entropy used in pretraining; only the data distribution and loss masking change.
  • Loss is typically computed only on the response tokens, not the instruction/prompt tokens, so the model learns to generate answers, not to predict prompts.
  • Generalization to unseen instructions comes from diversity of tasks in the tuning set, not from sheer example count — this is the key empirical finding behind datasets like FLAN and Super-NaturalInstructions.
  • Instruction tuning improves zero-shot and cross-task performance but does not by itself align a model with nuanced human preferences — that refinement typically comes from RLHF or preference optimization afterward.
  • It is cheap compared to pretraining (thousands of GPU-hours vs. millions) but can cause "alignment tax" — regressions on some raw capability benchmarks if done carelessly.
The core insight

Instruction tuning reshapes what a pretrained model is used for by fine-tuning it, with the ordinary language-modeling loss, on a diverse set of instruction–response pairs so it learns to treat instructions as commands rather than as text to extend.

The idea

A pretrained language model estimates P(xt∣x<t)P(x_{t} \mid x_{<t}) over sequences of raw text scraped from the web, books, and code. Nothing in this objective distinguishes "an instruction I should obey" from "a sentence I should continue." A prompt like "List three prime numbers" is, to the pretraining objective, just a string whose most probable continuation might be another clause of the same sentence, a related trivia question, or — if the model has memorized enough instructional text from the web — an actual list. This behavior is called zero-shot brittleness: the model can follow instructions some of the time, purely by luck of surface similarity to its training data, but it does so unreliably and unpredictably. Instruction tuning is the supervised fine-tuning of a pretrained model on a dataset D={(x(i),y(i))}i=1N\mathcal{D} = \{(x^{(i)}, y^{(i)})\}_{i=1}^N where x(i)x^{(i)} is an instruction (optionally with an input) and y(i)y^{(i)} is a desired response, drawn from many different tasks — summarization, translation, question answering, code generation, reasoning, chit-chat. Training minimizes the standard autoregressive cross-entropy loss, but computed only over the response tokens:

L(θ)=−∑i=1N∑t=1∣y(i)∣log⁡Pθ(yt(i)∣x(i),y<t(i))\mathcal{L}(\theta) = -\sum_{i=1}^{N} \sum_{t=1}^{|y^{(i)}|} \log P_\theta\big(y^{(i)}_t \mid x^{(i)}, y^{(i)}_{<t}\big)

The instruction tokens x(i)x^{(i)} appear in the context window and influence the hidden states, but their own next-token predictions are excluded from the gradient (masked with a loss weight of zero). This design choice is deliberate: we want the model to condition on instructions, not to learn to generate instructions, since the latter would waste capacity modeling a distribution we don't care about at inference time. The crucial empirical discovery — first demonstrated systematically in the FLAN (Fine-tuned LAnguage Net) and T0 lines of work, later scaled by InstructGPT, Alpaca, and their successors — is that task diversity, not dataset size, drives generalization. A model tuned on hundreds of distinct task types, each with modest numbers of examples, generalizes to genuinely novel instructions far better than a model tuned on millions of examples from only a handful of tasks. This mirrors a familiar idea from In-Context Learning: the model is learning a higher-level skill — "map an instruction to the behavior it names" — rather than memorizing input–output pairs for specific tasks. Instruction tuning is often described as teaching the model a meta-skill of instruction-following that transfers zero-shot to held-out task categories.

How it works

The pipeline has four stages: dataset construction, formatting/templating, masked supervised training, and evaluation on held-out (unseen) task categories to confirm generalization rather than memorization.

1. Dataset construction. Instruction-tuning datasets are built from a mix of sources:

  • Existing NLP datasets converted into instruction format via templates (e.g., turn a summarization dataset's document into "Summarize the following text: {document}" paired with its reference summary).
  • Human-written instruction–response pairs, sometimes crowd-sourced (as in the original InstructGPT pipeline, where labelers wrote both prompts and ideal completions).
  • Model-generated data, where a strong existing instruction-tuned model produces synthetic instructions and responses that are then filtered for quality (self-instruct style pipelines, used e.g. by Alpaca).
  • Multi-turn dialogue transcripts, for tuning models toward conversational assistants.

2. Templating. Each example is serialized into a single token sequence with explicit role markers, typically something like: ``` You are a helpful assistant. {instruction} {response} ``` Special tokens delimit roles so the model can later be prompted at inference time with the same structure, and so the loss mask can be computed automatically (mask everything up through ``, unmask the response, remask at end-of-turn).

3. Masked supervised training. This is the algorithmic core. ``` INPUT: pretrained model parameters θ0 dataset D = {(instruction_i, response_i)} for i = 1..N learning rate η, batch size B, epochs E θ ← θ0 for epoch in 1..E: shuffle D for each minibatch M of size B from D: loss ← 0 for (x, y) in M: tokens ← TEMPLATE(x, y) # concatenated prompt+response mask ← ZEROS(len(tokens)) response_span ← INDEX_OF_RESPONSE(tokens) mask[response_span] ← 1 # only response tokens contribute logits ← FORWARD(θ, tokens) # next-token distribution at each position for t in response_span: loss ← loss - mask[t] log P(tokens[t] | tokens[<t]; θ) loss ← loss / SUM(mask over M) # normalize by number of scored tokens g ← BACKWARD(loss, θ) θ ← θ - η OPTIMIZER_STEP(g) # e.g. AdamW with warmup + decay return θ ``` A few implementation details matter for correctness:

  • Padding vs. packing. Variable-length sequences are either padded to a common length (with padding tokens excluded from the loss mask and from attention) or packed — multiple short examples concatenated into one fixed-length sequence with attention restricted so tokens from different examples cannot attend across the boundary. Packing improves GPU utilization but requires care that the mask correctly resets per example.
  • Loss normalization. Dividing by the number of unmasked (response) tokens, not the total sequence length, prevents examples with long instructions and short answers from being under-weighted.
  • Learning rate. Instruction tuning typically uses a much smaller learning rate and far fewer steps than pretraining (often a single epoch or a few epochs over the tuning set), since the goal is to shift behavior without catastrophically overwriting the linguistic and factual knowledge acquired during pretraining.
  • Multi-turn masking. In dialogue data, every assistant turn is unmasked and every user/system turn is masked, even in the middle of a long transcript, so the model learns to produce assistant-style text at every assistant turn regardless of position.

4. Held-out task evaluation. To confirm the model has learned a transferable skill rather than memorized surface patterns, task clusters are held out entirely during training (e.g., all natural-language-inference tasks withheld) and the tuned model is evaluated zero-shot on them. Strong improvement on genuinely unseen task types is the signature of successful instruction tuning, as opposed to simple overfitting to the templates seen during training.

Figure
The instruction-tuning pipeline: from pretrained weights to an instruction-following model
Pretrained LM next-token loss on raw web text Instruction Dataset templated NLP tasks human-written pairs synthetic (self-instruct) multi-turn dialogue Template + Mask <user> instruction </user> <assistant> response loss mask: 0 0 0 …0 | 1 1 1…1 (masked prompt) (scored response) SFT Training Loop forward pass → logits cross-entropy on response tokens backprop, AdamW step small LR, 1-3 epochs Instruction-Tuned Model follows unseen instructions Held-out Task Evaluation task clusters withheld from training zero-shot score = generalization signal feeds into RLHF / preference optimization stage (refines beyond SFT)

Complexity & correctness

Time and space complexity. Instruction tuning uses exactly the same forward/backward pass as pretraining — a transformer forward pass over a sequence of length LL costs O(L2d+Ld2)O(L^2 d + L d^2) per layer (attention is quadratic in sequence length LL, projections are quadratic in hidden dimension dd), and there are O(layers)O(\text{layers}) such passes. What changes is how many tokens you process in total: pretraining consumes trillions of tokens across many epochs-equivalent of web-scale corpora, whereas instruction tuning typically consumes on the order of 10710^7–10910^9 tokens total, run for only one to a few epochs. If pretraining costs CpreC_{\text{pre}} FLOPs, instruction tuning typically costs Csft≪CpreC_{\text{sft}} \ll C_{\text{pre}}, often three to five orders of magnitude smaller — this is precisely why instruction tuning is affordable even for organizations that cannot themselves pretrain a foundation model. Memory requirements are identical to standard fine-tuning: full-parameter SFT needs to store gradients and optimizer state (roughly 12–16 bytes per parameter for Adam in mixed precision) in addition to the model weights, which is why parameter-efficient variants (adapters, LoRA) are common when compute is constrained — these freeze most weights and only fine-tune small added matrices, cutting optimizer-state memory roughly in proportion to the fraction of trainable parameters.

Why masking the instruction tokens is correct, not just a convention. Consider what an unmasked loss would optimize: the model would be rewarded for assigning high probability to the literal instruction text appearing in the training set, given whatever preceded it (which, at the start of a new turn, is often nothing informative). This wastes gradient signal on a subtask nobody cares about at inference time — generating instructions — and can even hurt instruction-following by making the model's next-token distribction imitate the instruction-writing style rather than the instruction-obeying style. Masking is correct because it aligns the training loss with the actual inference-time objective: at inference the instruction is given (fixed context), and the only quantity we ever sample from the model is the response distribution Pθ(y∣x)P_\theta(y \mid x). Restricting the loss to response tokens is simply maximum-likelihood estimation of exactly this conditional distribution, given data, which is the textbook justification for conditional cross-entropy: minimizing −E(x,y)∼D[log⁡Pθ(y∣x)]-\mathbb{E}_{(x,y)\sim \mathcal{D}}[\log P_\theta(y\mid x)] is equivalent (up to a constant) to minimizing the expected KL divergence DKL(Pdata(y∣x) ∥ Pθ(y∣x))D_{\mathrm{KL}}(P_{\text{data}}(y\mid x) \,\|\, P_\theta(y\mid x)) between the model's conditional distribution and the true data-generating conditional. Unmasked loss would instead be minimizing KL divergence on the joint (x,y)(x, y), which is not the quantity of interest.

Why diversity, not scale, drives generalization — a sketch. Model this as a multi-task learning problem: each task τ\tau in the tuning set defines a conditional distribution Pτ(y∣x)P_\tau(y \mid x), and the model is being fit to a mixture over many τ\tau's. If the tuning set contains only a few tasks, the model can fit each one via task-specific "shortcuts" — surface heuristics tied to that task's templates — without ever learning the shared, task-agnostic circuitry that maps any instruction to its intended behavior. With many diverse tasks, task-specific shortcuts no longer suffice to reduce loss uniformly across the mixture; the loss-minimizing solution is pushed toward parameters that implement a general instruction-interpretation mechanism, because that is the only strategy that reduces loss simultaneously across a heterogeneous task distribution. This is the same statistical argument underlying domain generalization more broadly: forcing a model to perform well across many distinct data-generating conditions discourages solutions that only work under one of them. Empirically this is confirmed by held-out-cluster evaluations (FLAN, T0, Super-NaturalInstructions all show monotonic improvement on unseen task clusters as the number of distinct training clusters grows, well past the point where adding more examples per existing cluster yields any further gain).

Honest tradeoffs.

  • Instruction tuning can induce an alignment tax: because the model's output distribution is reshaped toward the style and format of the tuning data, performance on some raw benchmarks (especially those requiring free-form generation different from the tuning distribution) can measurably drop even as instruction-following improves.
  • It does not remove hallucination, bias, or unsafe behavior; SFT only teaches the model the shape of a desired response, not a principled preference ranking among plausible responses — which is precisely the gap that Reinforcement Learning from Human Feedback is designed to close.
  • It is sensitive to data quality: since the total instruction-tuning corpus is tiny relative to pretraining, systematic errors, biased phrasing, or narrow style choices in the tuning set are disproportionately imprinted onto the model's behavior.
  • Full-parameter SFT risks catastrophic forgetting of pretraining-acquired knowledge if the learning rate is too high or training runs too long; this motivates small learning rates, few epochs, and sometimes parameter-efficient tuning that limits how much of the pretrained representation can shift.

Worked example

Consider a small instruction-tuning dataset used to teach a pretrained model to do two things it was never explicitly trained on: converting temperatures and writing polite email closings. Two examples, tokenized at a coarse (word-level, for clarity) granularity:

FieldExample 1Example 2
Instruction"Convert 100 Celsius to Fahrenheit.""Write a polite closing line for a work email."
Response"100°C is 212°F.""Best regards, and thank you for your time."

Templated sequence for Example 1 (tokens numbered for the loss trace): ``` 1: 2:Convert 3:100 4:Celsius 5:to 6:Fahrenheit 7:. 8: 9: 10:100°C 11:is 12:212°F 13:. 14: ``` Loss mask: positions 1–9 get mask value 0 (they are context, not scored); positions 10–14 get mask value 1.

PositionTokenPredicted given contextMasked?Contributes to loss?
2Convert``yesno
4Celsius` Convert 100`yesno
10100°Cfull instruction + ``noyes
11is…+ "100°C"noyes
12212°F…+ "100°C is"noyes
13.…+ "100°C is 212°F"noyes
14``full responsenoyes

The loss for this example is −∑t=1014log⁡Pθ(tokent∣tokens<t)-\sum_{t=10}^{14} \log P_\theta(\text{token}_t \mid \text{tokens}_{<t}), averaged with the corresponding sum from Example 2, then averaged again across the minibatch and all minibatches over training. Now suppose, after training on hundreds of such diverse pairs (unit conversions, email etiquette, code snippets, translations, arithmetic, and more — crucially not including, say, "convert kilometers to miles"), we probe the tuned model zero-shot with an unseen instruction: "Convert 5 kilometers to miles." A well-instruction-tuned model produces "5 kilometers is about 3.1 miles," despite never having seen this exact task during tuning, because it has learned the general pattern "when the instruction names a conversion between two named quantities, perform the numeric transformation and state it in the templated response form," rather than memorizing the Celsius-to-Fahrenheit example verbatim. This is the generalization signature described above: the tuning set supplied the shape of the skill (parse the instruction, extract quantity and units, compute, respond in kind) across many superficially different tasks, and the model's transformer layers, already rich with world knowledge from pretraining (including the conversion factor for km→miles, learned incidentally from web text), supplied the missing factual content. Contrast this with a model tuned on the same two examples but with the loss computed over the entire sequence, including instruction tokens. Because a large fraction of gradient signal during training is now spent making the model good at predicting instruction phrasing (which varies wildly and offers little consistent signal), the effective learning rate applied to "produce a correct, well-formatted response" signal is diluted, and empirically such models show slower and noisier improvement on held-out instruction-following benchmarks — a direct illustration of why the masking choice in the pseudocode is not cosmetic.

Common pitfalls & traps

PitfallWhy it happensConsequence
Forgetting to mask instruction tokensCopy-pasted pretraining loss code applied unchanged to instruction dataGradient signal diluted; model partially learns to imitate instruction phrasing instead of obeying it
Too high a learning rate / too many epochsTreating SFT like a from-scratch training run rather than a gentle nudgeCatastrophic forgetting of pretrained knowledge; degraded performance on unrelated tasks
Overly homogeneous tuning set (few task types, many examples each)Assuming "more data always helps"Model memorizes templates; fails to generalize to genuinely novel instructions
Mismatched train/inference templatingFine-tuning with one prompt format, deploying with a different one (missing special tokens, different role markers)Severe performance collapse at inference despite a well-trained model — the model has learned a narrow input distribution
Packing sequences without resetting attention at example boundariesOptimizing GPU throughput by concatenating examples in one context windowCross-example attention leakage; the model conditions on unrelated adjacent examples, corrupting training signal
Treating instruction tuning as "alignment complete"Conflating "follows instructions" with "produces safe, calibrated, human-preferred outputs"Models remain capable of confidently wrong, unsafe, or unhelpful completions that merely look like proper responses

Pioneers & history

Instruction tuning as a distinct, named technique crystallized in 2021–2022, though it draws on decades of work in multi-task learning and prompting. The key empirical insight — that fine-tuning on diverse natural-language-instruction-framed tasks produces strong zero-shot transfer to unseen tasks — was demonstrated at scale in Google's FLAN work and in the T0 model from the BigScience collaboration, both released in 2021–2022. OpenAI's InstructGPT paper (2022) then showed that combining instruction tuning with human preference modeling (the precursor to full Reinforcement Learning from Human Feedback) dramatically improved human-judged helpfulness relative to raw GPT-3, popularizing the now-standard "pretrain, then instruction-tune, then RLHF" pipeline. The subsequent open-source wave — Alpaca, Vicuna, and successors — showed that instruction tuning could be replicated cheaply using model-generated (self-instruct) data, democratizing the technique beyond large labs.

Origins · 1 minGeoffrey Hinton and how this was discovered
GH
Geoffrey Hinton
born 1947 · Deep learning pioneer whose work on distributed representations and backpropagation underlies the neural architectures that instruction tuning fine-tunes

Hinton's foundational contributions to training deep neural networks via backpropagation and his championing of connectionist, representation-learning approaches made possible the large transformer models that instruction tuning operates on. While instruction tuning itself is a data-and-training-recipe innovation rather than an architectural one, it is inseparable from the deep learning renaissance Hinton helped ignite, since the technique presupposes a network capable of rich, transferable internal representations — exactly the property connectionist learning was designed to produce.

History
2017
— the Transformer architecture (Vaswani et al.) supplies the backbone later fine-tuned by instruction tuning.
2020
— GPT-3 demonstrates strong few-shot In-Context Learning, exposing the brittleness of purely prompted, non-tuned models.
2021
— FLAN and T0 formalize instruction tuning across diverse NLP task collections and show zero-shot generalization to unseen tasks.
2022
— InstructGPT combines instruction tuning with reward-model-based fine-tuning, establishing the modern SFT-then-RLHF pipeline.
2023
— Self-instruct and synthetic-data pipelines (Alpaca, Vicuna, Dolly) show instruction tuning can be replicated cheaply from a small seed set plus model-generated data.

Where this matters

Nearly every deployed conversational AI system relies on instruction tuning as a mandatory stage before release. Commercial assistants — chat products, coding copilots, customer-support automations — are built by instruction-tuning a pretrained foundation model on curated task and dialogue data before any preference-based refinement is applied. Enterprise deployments frequently perform a further round of domain-specific instruction tuning: a legal-tech company fine-tunes on legal-document instructions, a healthcare vendor on clinical-summary instructions, using exactly the masked supervised-learning recipe described here, often via parameter-efficient methods (LoRA, adapters) to keep the cost tractable. Open-weight model releases (Llama-family instruct variants, Mistral-instruct, and others) ship both a "base" checkpoint (pretraining only) and an "instruct" checkpoint (base plus instruction tuning, sometimes plus further preference optimization), explicitly exposing this pipeline stage to downstream users. Instruction tuning is also the substrate on which subsequent alignment techniques operate: Reinforcement Learning from Human Feedback and direct preference optimization methods both assume as their starting point an already instruction-tuned model, refining which of several plausible instruction-following responses is preferred rather than teaching instruction-following from scratch. This layered pipeline — pretrain, instruction-tune, then align preferences — is the backbone of essentially every frontier assistant model in production today, and understanding it is a prerequisite for engaging seriously with the broader Alignment & the Alignment Problem.

Ask the tutor: How exactly does the loss-masking scheme change if a training example contains multiple back-and-forth conversational turns rather than a single instruction–response pair?

Is instruction tuning the same thing as prompt engineering?

No. Prompt engineering leaves the model's weights untouched and instead searches over wording, examples, or structure within the input at inference time, relying on the model's existing (often unreliable) capacity for In-Context Learning. Instruction tuning changes the model's parameters via gradient descent on a curated dataset, so the improved instruction-following behavior is baked into the weights and available without any special prompting. In practice the two are complementary: an instruction-tuned model still benefits from good prompting, but it starts from a much stronger baseline of reliably interpreting directives, requiring far less prompt engineering to get useful behavior for a new task.

How much data does instruction tuning actually require compared to pretraining?

Pretraining typically consumes hundreds of billions to trillions of tokens; instruction tuning typically consumes on the order of tens of thousands to a few million examples, often totaling well under a billion tokens, and training runs for only one to a few epochs. The disparity is intentional: pretraining builds broad linguistic and world knowledge, which is expensive and data-hungry, while instruction tuning only needs to reshape how that existing knowledge is expressed in response to directives, a much lower-information change that a comparatively small, carefully curated dataset can achieve.

Can instruction tuning introduce new factual knowledge into a model?

It can, incidentally, but that is not its purpose and it is not an efficient or reliable way to teach facts. Because the tuning set is small relative to pretraining data, any fact appearing only in instruction-tuning examples receives comparatively little reinforcement and may not be robustly retained; forcing large amounts of new factual content through a small SFT dataset also risks overfitting to that narrow set of facts and their phrasing. Instruction tuning is best understood as teaching a skill — how to respond to directives — layered on top of knowledge that pretraining already encoded.

What happens if the instruction template used at inference time differs from the one used during training?

Performance can degrade sharply, sometimes surprisingly so given how good the model appeared during evaluation. Instruction-tuned models learn to expect a fairly specific input distribution, including special role tokens (like ``, ``) and formatting conventions; deploying the model with a different chat template, missing system prompt, or reordered fields effectively puts it outside its training distribution. This is why production deployments are careful to preserve the exact chat template used during fine-tuning, often documenting it explicitly alongside the model weights.

Does instruction tuning make a model "aligned" in the sense used in AI safety discussions?

Only partially. Instruction tuning teaches a model to produce responses in the style and structure of the (instruction, response) pairs it was trained on, which substantially improves helpfulness and usability, but it does not by itself instill a calibrated preference ordering among multiple plausible responses, nor does it guarantee safety, honesty, or robustness to adversarial prompts. Those finer-grained objectives are the target of subsequent techniques such as Reinforcement Learning from Human Feedback and related preference-optimization methods, situating instruction tuning as a necessary but not sufficient stage within the broader Alignment & the Alignment Problem.

Why does task diversity matter more than sheer volume of training examples?

Because generalization requires the model to learn a mechanism robust across many different data-generating conditions rather than a shortcut tailored to one. If a tuning set contains only a handful of task types, however many examples each contains, the loss-minimizing solution can be a set of task-specific heuristics that do not transfer to a novel instruction. When the tuning set spans many distinct task clusters simultaneously, task-specific shortcuts stop being loss-efficient across the whole mixture, and the optimization is pushed toward a shared, general instruction-interpretation capability — the property held-out-cluster evaluations are specifically designed to detect.

Is instruction tuning ever done with parameter-efficient methods instead of full fine-tuning?

Yes, very commonly. Techniques like LoRA (low-rank adaptation) freeze the pretrained weights and insert small trainable low-rank matrices into each layer, drastically reducing the number of trainable parameters and the associated optimizer-state memory, while still using exactly the same masked cross-entropy loss and instruction-formatted data described in this article. This makes instruction tuning feasible on modest hardware and is widely used for domain-specific fine-tuning where an organization wants to adapt a large open-weight model to its own instructions without the cost of full-parameter training.

Before this

Where this leads