Peft Fine Tuning
Orchestra-Research/AI-Research-SKILLs
Parameter-efficient fine-tuning for LLMs using LoRA, QLoRA, and 25+ methods.
This skill should be used when picking or diagnosing a training move (SFT, LoRA, DPO/KTO/ORPO, RFT, GRPO/PPO/RLOO, RLHF), or when the user mentions fine-tuning, post-training, training recipe…
$ npx skills add evo-hq/evo --skill finetuning -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install evo-hq/evo finetuning --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/evo-hq/evo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/evo/skills/finetuning .claude/skills/finetuning && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "finetuning" agent skill from https://github.com/evo-hq/evo/tree/main/plugins/evo/skills/finetuning into .claude/skills/finetuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "finetuning", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/evo-hq/evo/tree/main/plugins/evo/skills/finetuningType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add evo-hq/evo --skill finetuning -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install evo-hq/evo finetuning --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evo-hq/evo.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/evo/skills/finetuning .agents/skills/finetuning && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "finetuning" agent skill from https://github.com/evo-hq/evo/tree/main/plugins/evo/skills/finetuning into .agents/skills/finetuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "finetuning", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add evo-hq/evo --skill finetuning -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install evo-hq/evo finetuning --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evo-hq/evo.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/evo/skills/finetuning .cursor/skills/finetuning && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "finetuning" agent skill from https://github.com/evo-hq/evo/tree/main/plugins/evo/skills/finetuning into .cursor/skills/finetuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "finetuning", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/evo-hq/evo.git --path plugins/evo/skills/finetuning--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add evo-hq/evo --skill finetuning -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install evo-hq/evo finetuning --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evo-hq/evo.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/evo/skills/finetuning .gemini/skills/finetuning && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "finetuning" agent skill from https://github.com/evo-hq/evo/tree/main/plugins/evo/skills/finetuning into .gemini/skills/finetuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "finetuning", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install evo-hq/evo finetuningInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add evo-hq/evo --skill finetuning -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/evo-hq/evo.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/evo/skills/finetuning .github/skills/finetuning && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "finetuning" agent skill from https://github.com/evo-hq/evo/tree/main/plugins/evo/skills/finetuning into .github/skills/finetuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "finetuning", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add evo-hq/evo --skill finetuning -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install evo-hq/evo finetuning --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evo-hq/evo.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/evo/skills/finetuning .opencode/skills/finetuning && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "finetuning" agent skill from https://github.com/evo-hq/evo/tree/main/plugins/evo/skills/finetuning into .opencode/skills/finetuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "finetuning", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
finetuningThis skill should be used when picking or diagnosing a training move (SFT, LoRA, DPO/KTO/ORPO, RFT, GRPO/PPO/RLOO, RLHF), or when the user mentions fine-tuning, post-training, training recipe…
Finetuning is an agent skill from evo-hq/evo. This skill should be used when picking or diagnosing a training move (SFT, LoRA, DPO/KTO/ORPO, RFT, GRPO/PPO/RLOO, RLHF), or when the user mentions fine-tuning, post-training, training recipe, reward design, or weight updates. Decision tree by reward shape, smoke-run gate, three failure diagnostics, five false-progress patterns. Provider recipes and I/O contract in references/.
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 12 other files, including reference files (for example `references/diagnostics.md`, `references/false-progress.md` and `references/glue.md`).
It sits in AI & LLM Engineering, covering Fine-tuning. The repository describes itself as: turns your codebase into an autoresearch loop — discovers what to measure, instruments the benchmark, then runs tree search with parallel subagents. The licence is Apache-2.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit c70c04b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python and bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
WANDB_API_KEYHF_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Finetuning loads about 4.5k tokens when it runs, and up to ~9k if it reads all its reference files. Until then it costs about 98 tokens; SKILL.md has 2,079 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from evo-hq/evo at commit c70c04b, republished under its Apache-2.0 licence (© evo-hq). 2,079 words, ~4,492 tokens.
.claude/skills/finetuning/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.Priors, not rules. Only firm guardrails: held-out eval you never train on, no leakage, trust evo's recorded numbers over the run's self-report. Override anything else against the gate.
Decide on the reward first, technique second. Choosing the comfortable technique over the matching one is the most common failure.
| Reward shape | Technique |
|---|---|
| Verifiable (exact match, unit tests, parser-decidable) | RL (GRPO / RLOO / PPO) — reward includes format, so the model learns to emit verifier-acceptable shape |
| Preference pairs (chosen vs rejected) | DPO / KTO / ORPO — cheaper than full RL, no rollouts |
| Demonstrations only (curated traces, chat data) | SFT — install format/tone/capability the base lacks |
| Have a scorer + want SFT stability | RFT — sample, filter by reward, SFT on survivors |
"SFT-then-RL" is not a law. For a competent base model on a verifiable benchmark, RL-from-base often beats SFT-then-RL end-to-end.
The decision tree above is the structural prior. The empirical answer for this model on this benchmark usually has a recent paper, blog, or HF Space recipe behind it -- and what beats baseline on a 4B base model in 2026 is not what the agent's pre-training data captures. Before picking the technique for exp_0001 (the first experiment after baseline), invoke evo:ideator with a literature brief:
Task(
subagent_type="evo:ideator",
prompt="brief=literature\n"
"model_family=<e.g. Qwen3-4B-Base, Llama-3.1-8B-Base>\n"
"benchmark=<name + URL/paper if known>\n"
"objective=<one line: what beats baseline looks like>\n"
"constraints=<budget, data sources allowed, gated models forbidden, etc>"
)The ideator returns ranked proposals with references (arXiv, HF Hub, GitHub, blogs). Read them before picking from the reward-shape table. A paper showing GRPO-from-base works on <model_family> for a similar verifiable benchmark beats applying the table cold.
Run this once before exp_0001, and again whenever the optimize loop hits a plateau (the "stuck across distinct techniques" diagnostic below). Not every subsequent experiment needs a literature pass -- the table + diagnostics carry the rest.
Run the full pipeline on ~10 examples for ~1 minute. Must produce: a checkpoint the benchmark can load AND a non-zero eval on a held-out item. If not, the recipe is broken — fix it, don't scale it. dtype mismatch, tokenizer/template drift, OOM at this batch size, empty artifacts dir despite falling loss — all surface on 10 examples. Running longer doesn't surface them differently, just more expensively.
Training for an hour and getting one number at the end is the wrong granularity for evo's tree search. By the time you know the recipe failed, you've spent the budget. Build the verification into the training script, not around it.
Pattern for any training run expected to exceed ~30 min wall-clock:
patience checkpoints (typically 2). Don't burn 60 more minutes once the trajectory has flattened or reverted.## Stream training metrics live). The user watching the live dashboard sees the trajectory build up step-by-step instead of staring at the loss curve hoping it transfers.HuggingFace TRL: implement as a TrainerCallback on on_step_end — save checkpoint, run the mini-eval via vLLM or HF transformers, compare to best_score, set control.should_training_stop = True on stall. Pattern is one ~30-line class.
Keep vLLM warm across mid-evals when you can (one serve process, reload adapter between checkpoints) — cold-starting vLLM every 200 steps adds 5 min of overhead per checkpoint.
Use a tighter mini-eval subset than the full held-out. The mini-eval is a signal, not the score that gets committed. If the mini-eval scores ≥ baseline on its subset, run the full held-out as the eval-gate scoring pass at the end. If it doesn't, early-stop.
This is Pattern B from the design tradeoff with multi-node staging (Pattern A — break the training into multiple committed evo nodes, each a stage). Pattern B keeps the experiment as one evo node with the verification logic inside the script; it's simpler to write and avoids per-stage vLLM spin-up, at the cost of less tree-search introspection. Multi-stage as separate nodes is preferable when you want the orchestrator to be able to branch alternative continuations from any mid-training checkpoint.
evo run allows up to max_attempts=3 retries per experiment by default. That budget was designed for second-scale benchmarks where retrying after an edit-bug fix is free. At training scale (~hours per attempt), it's the wrong tradeoff — by attempt 2 you've spent more compute than just trying a fresh hypothesis would cost.
For training-heavy workspaces, set the cap to 1 once at init:
evo config set max-attempts 1One attempt, one shot. Regression → evo discard → new branch from parent with a different hypothesis. This pairs with the in-script early-stop above: each attempt is single-shot, but its internal verification keeps it from burning the budget on a clearly-failing trajectory.
The "fix-and-rerun" retry pattern still applies for sub-minute benchmarks; leave the default max_attempts=3 there.
Stuck at 0 on a verifiable benchmark after 2+ SFT runs. Technique class is wrong, not the recipe. Pivot to RL with the verifier as reward; SFT loss can be healthy while the model emits unparseable output.
Base scores below random before any training (knowledge-heavy benchmark). Model lacks the knowledge, not the format. Post-training shapes existing knowledge; it does not install new knowledge. Right axis: continued pre-training on a domain corpus, distillation from a stronger model that has the knowledge, or retrieval-augmented inference.
delta <= 0 across several committed train moves. Method exhausted on this target. Try a different method, change the data, or improve the harness instead of the weights.
Stuck at the same non-zero score across 3+ experiments spanning distinct techniques. When 3+ committed experiments — across structurally different techniques (e.g. SFT, GRPO, RFT) — all land at the same non-zero score, the bottleneck is not the training method. The most common cause is a train↔verifier objective mismatch: the model has learned to emit answers in one format, but the verifier expects a different one. Examples: training data uses \boxed{X} but the verifier prompt requests ANSWER: X (or vice versa); training uses one chat template, eval uses another; training optimizes step-by-step CoT but the verifier wants the answer alone.
Diagnostic action: spot-check 3 training examples and 3 eval-prompt examples side by side. If a perfect-score training example would NOT pass the verifier (or vice versa), the objective is mismatched. Realign the training data format to the verifier's expected output, OR change the eval prompt (if rules allow). Do NOT try a fourth training-technique variant before doing this spot-check.
Five patterns produce a number going up without the model improving. See references/false-progress.md for examples + detection.
The verifier should catch these. List is here so the train move doesn't produce them.
Write the dataset URL, method choice, user-imposed constraints, and hyperparameters you converged on to methodlog.md in the experiment worktree. One line each. Re-read after any context reset, before the next train move. Prevents silent dataset swaps between experiments and re-running ablations.
Method/provider-specific numbers (LR, KL, group size) live in the recipe under references/.
A long training run is observability-blind until the experiment commits — without a live tracker, nobody can tell if loss is converging, if the GPU is idle, or if the recipe is silently broken. They get one number at the end. Wire a tracker into the training script by default.
Detection prior — apply when the corresponding env var is set, skip otherwise. Don't install a tracker the user didn't opt into:
| Env var | Tracker | TRL one-liner |
|---|---|---|
WANDB_API_KEY | wandb | SFTConfig(report_to="wandb") |
TRACKIO_SPACE_ID | trackio (wandb-compatible OSS, logs to a public HF Space) | SFTConfig(report_to="trackio") |
MLFLOW_TRACKING_URI | mlflow | SFTConfig(report_to="mlflow") |
| (none set) | none | train without a tracker; don't invent one |
For custom training loops, use tracker.init(project=..., name=f"exp_{exp_id}") + tracker.log({"loss": ..., "step": ...}) — concrete patterns in references/observability.md.
Use EVO_EXPERIMENT_ID as the run name so each experiment shows up as its own line in the tracker dashboard. The same env detection applies to HuggingFace datasets / Hub uploads: if HF_TOKEN is set, treat gated datasets and private Hub pushes as available.
When the orchestrator branches an experiment from a committed or preserved checkpoint with evo new --from-artifact <exp[:label]>, evo exposes that artifact's path to your recipe as EVO_SEED_ARTIFACT (and, for back-compat, the same value as EVO_PARENT_POLICY). Warm-start from it rather than re-training from base — re-training from base every time burns the budget on duplicated work and stops the tree from accumulating capability across generations. To make a run reusable this way you must DECLARE your checkpoint as an artifact: write it to EVO_CHECKPOINT_DIR and name it in the benchmark result's artifacts field (full contract in references/glue.md). Only declared artifacts are preserved on discard and seedable via --from-artifact.
Concrete pattern:
seed = os.environ.get("EVO_SEED_ARTIFACT") or os.environ.get("EVO_PARENT_POLICY")
if seed and os.path.exists(seed):
print(f"warm-starting from {seed}")
model = AutoModelForCausalLM.from_pretrained(seed, ...)
else:
print("no seed; loading base")
model = AutoModelForCausalLM.from_pretrained(BASE_MODEL, ...)Override only when the brief explicitly asks for a fresh-from-base ablation. The full I/O contract is in references/glue.md.
Configure for training, not inference. Put the whole training computation on the accelerator you're training on, and don't enable inference-oriented conveniences for a training run. Auto device-mapping / model-sharding / CPU-offload exist to fit oversized models for inference by spreading or offloading layers; inside a training step they either break the backward pass or silently fall back to slower memory — so training still "runs" but crawls, with no error to surface the problem (the most dangerous case: it looks like it's working). Shard only when the model genuinely doesn't fit one device, and then use the framework's training parallelism path, not an inference placement shortcut. Same logic for other inference-mode defaults that leak into training (eval-mode quantization, kv-cache, dropout off). (Concrete instance — HuggingFace: load with device_map={"": 0} / .to("cuda"), never device_map="auto", which errors with a meta-device gradient mismatch or offloads to CPU at a large slowdown; for real multi-GPU use accelerate/FSDP/DDP.)
LoRA adapters, filtered/curated datasets, tokenized datasets, computed embeddings, generated rollouts -- expensive to produce, large, and gitignored. They don't ride the experiment branch. They also don't have to be rebuilt per experiment.
Write expensive artifacts to a stable, workspace-level path; check for them first, compute only on miss. Subsequent experiments (siblings, descendants, or re-runs of the same experiment after a worktree clean) read the same path.
Convention: under .evo/cache/, sibling to run_<NNNN>/. Already gitignored (via .evo/ in the workspace's git excludes). Survives across runs -- it's not nested inside any run_<id>/, so evo new/evo run/evo reset don't touch it.
Pattern:
import os
from pathlib import Path
# walk up from cwd to find the workspace root (the dir that has .evo/)
def _workspace_root() -> Path:
p = Path.cwd().resolve()
for d in [p, *p.parents]:
if (d / ".evo").is_dir():
return d
raise RuntimeError("not inside an evo workspace")
cache = _workspace_root() / ".evo" / "cache" / "datasets"
cache.mkdir(parents=True, exist_ok=True)
# Cache key embeds every input that changes the artifact: dataset name,
# filter recipe version, tokenizer, max length, etc. Different recipe ->
# different key, so a sibling experiment with a different filter keeps
# its own cache without trampling yours.
key = cache / "numina-cot-r1-filter-v2-qwen3-tok-3072.arrow"
if key.exists():
ds = datasets.Dataset.load_from_disk(str(key))
else:
ds = build_and_filter_dataset()
ds.save_to_disk(str(key))High-value caches (not exhaustive): curated/tokenized training corpora (tokenization is the slow part on millions of rows); LoRA adapters produced by prior experiments that a sibling might warm-start from (the parent path is already handled by EVO_PARENT_POLICY above; this is for sibling-reachable named adapters); computed embeddings, retrieval indexes, precomputed eval-time generations.
Don't duplicate the HuggingFace Hub cache (~/.cache/huggingface/). That handles from_pretrained downloads automatically and is user-level, already shared across all experiments.
Anti-pattern: writing the artifact inside the experiment's worktree (<worktree>/some_cache/). Worktrees are gitignored for these files, the artifact doesn't propagate to descendants via the git tree, and a worktree clean / gc removes it. Use the workspace-level .evo/cache/ instead.
A first-class named registry (evo asset put/get/list/use) for these is tracked in issue #55. The path convention above is the lightweight version anyone can adopt today.
Pull via Read tool when the trigger applies. Tree organized by category --
core contracts first, then provider-specific recipes under rl/, sft/, serving/.
finetuning/references/
│
├── glue.md writing train.py -- I/O contract evo expects.
│ Read FIRST when starting any training code.
├── trace-schema.md TrainingTrace JSON shape (per-step train trace fields)
├── diagnostics.md held_out_score / delta / reward_saturation /
│ generalization_gap -- read when interpreting a result
├── false-progress.md the five patterns + how to detect them.
│ Read when a score improves implausibly fast or
│ breaks the smoke gate.
├── observability.md wandb / trackio / mlflow wiring -- env-driven detection,
│ TRL report_to options, custom-loop patterns.
│ Read when writing a training script.
│
├── rl/ RL framework recipes (rollouts + reward + policy update)
│ └── art.md ART (Algorithm-Refined Training)
│
├── sft/ SFT framework recipes
│ └── tinker.md Tinker SFT runner
│
└── serving/ Eval-time inference framework references
└── vllm.md vLLM serving config + LoRA-multi (load multiple
adapters in one server -- saves cold-start per experiment)Cross-skill references also worth pulling during finetuning work:
discover/references/sdk_python.py / sdk_node.js -- wiring per-task instrumentation in the benchmarkdiscover/references/inline_instrumentation.py -- inline fallback when SDK can't be used (copy as-is)references/evo-wait.md -- waiting for training / eval without burning context© evo-hq, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 8 other files (references) in plugins/evo/skills/finetuning of evo-hq/evo.
Open the folder on GitHubat commit c70c04b
Finetuning next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Finetuning this skillevo-hq/evo | 1.5k | — | ~4.5k | Automated safety check: Pass | Apache-2.0 | |
| Peft Fine TuningOrchestra-Research/AI-Research-SKILLs | 13k | 9 repos | ~3.1k | Automated safety check: Pass | MIT | |
| Hugging Face LLM Trainerhuggingface/skills | 11k | 3 repos | ~7.2k | Automated safety check: Pass | Apache-2.0 | |
| Sentence-Transformers Training Routerhuggingface/skills | 11k | 1 repos | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Dataset Evaluationawslabs/agent-plugins | 915 | 2 repos | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Train RlOpenPipe/ART | 11k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 |
Orchestra-Research/AI-Research-SKILLs
Parameter-efficient fine-tuning for LLMs using LoRA, QLoRA, and 25+ methods.
huggingface/skills
Trains or fine-tunes language and vision models with TRL or Unsloth on Hugging Face Jobs cloud GPUs, then converts the results to GGUF.
huggingface/skills
Routes a sentence-transformers training task to the right model type and required reference docs and example scripts, covering bi-encoders, rerankers, sparse and multi-vector models.
awslabs/agent-plugins
Validates dataset formatting and quality for SageMaker model fine-tuning (SFT, DPO, or RLVR).
OpenPipe/ART
RL training reference for the ART framework. An agent skill from OpenPipe/ART.
R6410418/Jackrong-llm-finetuning-guide
Prepare, validate, launch-plan, monitor, resume, and stop configurable Qwopus 27B reinforcement-learning workflows for GRPO or GSPO.
evo-hq/evo
Initialize evo for the current repository by exploring the codebase, proposing unexplored optimization dimensions, constructing the benchmark inside a baseline worktree, and running the first…
evo-hq/evo
Read-only evo run reporting. An agent skill from evo-hq/evo.
evo-hq/evo
Non-user-invocable provider/setup reference for evo backend switching, prerequisite checks, and auth/install guidance.
evo-hq/evo
Land the winning experiment from an evo run as a clean, mergeable change -- open a PR when the repo has a remote, otherwise merge into the working branch.
evo-hq/evo
Protocol that evo optimization subagents follow when dispatched from /optimize.
evo-hq/evo
Drive structured autoresearch iteration after evo:discover and the baseline commit.
Categories
This skill should be used when picking or diagnosing a training move (SFT, LoRA, DPO/KTO/ORPO, RFT, GRPO/PPO/RLOO, RLHF), or when the user mentions fine-tuning, post-training, training recipe…. Finetuning is an agent skill from evo-hq/evo. This skill should be used when picking or diagnosing a training move (SFT, LoRA, DPO/KTO/ORPO, RFT, GRPO/PPO/RLOO, RLHF), or when the user mentions fine-tuning, post-training, training recipe, reward design, or weight updates.
Finetuning fits situations like: mentions fine-tuning; training recipe.
Run `npx skills add evo-hq/evo --skill finetuning -a claude-code`. Or copy the skill folder (plugins/evo/skills/finetuning in evo-hq/evo) into .claude/skills/finetuning in your project. Claude Code loads it when a task matches its description.
Run `npx skills add evo-hq/evo --skill finetuning -a codex`. Or copy the skill folder (plugins/evo/skills/finetuning in evo-hq/evo) into .agents/skills/finetuning in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add evo-hq/evo --skill finetuning -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/finetuning, .gemini/skills/finetuning, .github/skills/finetuning and .opencode/skills/finetuning in your project.
Going by SKILL.md and its folder, Finetuning needs credentials named WANDB_API_KEY and HF_TOKEN. Our summary lists: A credential in WANDB_API_KEY.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Finetuning is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Finetuning: Peft Fine Tuning (Orchestra-Research/AI-Research-SKILLs, 13k stars), Hugging Face LLM Trainer (huggingface/skills, 11k stars), Sentence-Transformers Training Router (huggingface/skills, 11k stars) and Dataset Evaluation (awslabs/agent-plugins, 915 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
evo-hq (a GitHub organization) maintains it in evo-hq/evo, which has 1,466 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 5, 2026.
Source: evo-hq/evo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.