🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

模型微调工具链 phelpsyacht/dsh-finetune

DeepSeek Harness
phelpsyacht32 天前有提交已提供中文文档扫描:含敏感能力

校验清洗数据集并完成 LoRA 微调训练

31.9/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add phelpsyacht/dsh-finetune
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · dev
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 32 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

engines.node 要求 >23,不满足 Node 22.19.0

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-finetune(未发布到 npm,仅可源码安装)
✗Node 引擎要求 >23 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 06:57:03

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 30 处,展示前 30 条)
  • 发起网络请求
    lib/provider.js:48
    const res = await fetch(new URL(path, this.baseURL), {
  • 读取本地文件
    lib/provider.js:71
    const content = await readFile(filePath, "utf8");
  • 读取本地文件
    lib/tools/dataset-validate.js:55
    const lines = createInterface({ input: createReadStream(args.path, "utf8"), crlfDelay: Infinity });
  • 执行外部命令来自配置/变量
    lib/tools/dataset-clean.js:60
    const child = spawn(python, [CLEAN_PY, "--config", configPath], {
  • 读取本地文件
    lib/tools/dataset-clean.js:82
    const lines = createInterface({ input: createReadStream(path, "utf8"), crlfDelay: Infinity });
  • 读取本地文件
    lib/tools/dataset-clean.js:230
    const reader = createInterface({ input: createReadStream(inPath, "utf8"), crlfDelay: Infinity });
  • 写入本地文件
    lib/tools/dataset-clean.js:236
    const writer = stageWritePath ? createWriteStream(stageWritePath) : null;
  • 写入本地文件
    lib/tools/dataset-clean.js:260
    await writeFile(
  • 删除本地文件
    lib/tools/dataset-clean.js:273
    await unlink(stageWritePath).catch(() => {});
  • 写入本地文件
    lib/tools/dataset-clean.js:305
    await writeFile(cfgPath, JSON.stringify(pyConfig, null, 2), "utf8");
  • 读取本地文件
    lib/tools/dataset-clean.js:311
    pythonReport = JSON.parse(await readFile(pythonReportPath, "utf8"));
  • 删除本地文件
    lib/tools/dataset-clean.js:326
    await unlink(cfgPath).catch(() => {});
  • 删除本地文件
    lib/tools/dataset-clean.js:327
    await unlink(stageWritePath).catch(() => {});
  • 删除本地文件
    lib/tools/dataset-clean.js:338
    if (args.dry_run && pyFinalPath) await unlink(pyFinalPath).catch(() => {});
  • 读取本地文件
    lib/tools/dataset-clean.js:345
    const ql = createInterface({ input: createReadStream(quarantinePath, "utf8"), crlfDelay: Infinity });
  • 写入本地文件
    lib/tools/dataset-clean.js:362
    await writeFile(reportPath, quarantineHtml(records, summary, { path: inPath }), "utf8");
  • 写入本地文件
    lib/tools/dataset-clean.js:363
    await writeFile(csvPath, quarantineCsv(records), "utf8");
  • 读取本地文件
    lib/tools/job-create.js:40
    const dataset = validateJsonlDataset(await readFile(args.dataset_path, "utf8"));
  • 执行外部命令来自配置/变量
    lib/tools/train.js:78
    const child = spawn(python, [TRAIN_PY, "--config", configPath], {
  • 写入本地文件
    lib/tools/train.js:146
    await mkdir(outputDir, { recursive: true });
  • 写入本地文件
    lib/tools/train.js:150
    await writeFile(dataPath, cleanResult.text);
  • 写入本地文件
    lib/tools/train.js:161
    await writeFile(configPath, JSON.stringify(trainConfig, null, 2));
  • 写入本地文件
    lib/tools/train.js:242
    await mkdir(localMetaDir, { recursive: true });
  • 写入本地文件
    lib/tools/train.js:246
    await writeFile(dataPath, cleanResult.text);
  • 写入本地文件
    lib/tools/train.js:259
    await writeFile(configPath, JSON.stringify(trainConfig, null, 2));
  • 读取本地文件
    lib/tools/train.js:382
    const text = await readFile(args.dataset_path, "utf8");
  • 读取本地文件
    lib/python.js:75
    if (cand.checkPath && !existsSync(cand.argv[0])) continue;
  • 执行外部命令来自配置/变量
    lib/python.js:76
    const res = spawnSync(cand.argv[0], cand.argv.slice(1), { encoding: "utf8", timeout: 30000 });
  • 执行外部命令来自配置/变量
    lib/python.js:82
    const exe = spawnSync(cand.argv[0], [...cand.extra, "-c", PY_EXE], { encoding: "utf8", timeout: 30000 });
  • 执行外部命令来自配置/变量
    lib/remote.js:74
    const child = spawn(bin, args, { stdio: ["ignore", "pipe", "pipe"] });
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 校验清洗数据集
  • LoRA微调训练

低成本学习微调大语言模型dshweb插件

README

由 DeepSeek 最新模型翻译生成
dsh-finetune 面向 DeepSeek Harness 的 LLM 微调插件。 dsh-finetune 把数据集校验、数据清洗、LoRA SFT 微调、训练监控和适配器验证串成一条可直接复用的工具链。它既可以在本机 CPU/GPU 上运行,也可以通过 SSH 调用远端 GPU 机器,或者对接 OpenAI-compatible 的远端微调 API。 Features - 数据集校验 - 支持 chat、prompt-completion、alpaca、sharegpt 四种格式。 - 检查 JSONL 合法性、格式一致性、assistant 结尾、字段完整性。 - 返回行级错误、格式、approximate token 数和预览。 - 数据清洗 - 去重、类似去重、长度过滤、重复字符过滤。 - 清理控制字符、HTML、URL,支持全角转半角。 - 支持 PII 脱敏:身份证、手机号、邮箱。 - 支持内联 /quarantine 边界样本审查报告。 - 支持按 source 覆盖阈值。 - 可选 PPL 过滤、语言检查、语义去重、主题下采样。 - 本地 LoRA SFT 微调 - 使用 torch + transformers + peft。 - 不依赖 trl / datasets,尽量减少框架依赖。 - 支持 assistant 回复 mask。
展开完整文档(README 剩余 1 节)
dsh-finetune

面向 DeepSeek Harness 的 LLM 微调插件。

dsh-finetune 把数据集校验、数据清洗、LoRA SFT 微调、训练监控和适配器验证串成一条可直接复用的工具链。它既可以在本机 CPU/GPU 上运行,也可以通过 SSH 调用远端 GPU 机器,或者对接 OpenAI-compatible 的远端微调 API。

Features

- 数据集校验
- 支持 chat、prompt-completion、alpaca、sharegpt 四种格式。
- 检查 JSONL 合法性、格式一致性、assistant 结尾、字段完整性。
- 返回行级错误、格式、approximate token 数和预览。

- 数据清洗
- 去重、类似去重、长度过滤、重复字符过滤。
- 清理控制字符、HTML、URL,支持全角转半角。
- 支持 PII 脱敏:身份证、手机号、邮箱。
- 支持内联 /quarantine 边界样本审查报告。
- 支持按 source 覆盖阈值。
- 可选 PPL 过滤、语言检查、语义去重、主题下采样。

- 本地 LoRA SFT 微调
- 使用 torch + transformers + peft。
- 不依赖 trl / datasets,尽量减少框架依赖。
- 支持 assistant 回复 mask。
- 训练完成后保存 adapter、tokenizer 和 training state。

- SSH 远端训练
- 自动上传数据集、配置和 trainer 到远端机器。
- 在远端 GPU 机器上启动训练并轮询日志。
- 适合本机没有 GPU、但有远端训练机的场景。

- 远端微调任务管理
- 适配 OpenAI-compatible /files 和 /fine_tuning/jobs 接口。
- 提供任务创建、状态查询、列表、取消和后台监视。

- 安全
- API key 只从环境变量读取,不进入 tool 参数和模型可见 transcript。
- side-effectful 工具声明为非并发安全,方便接入 permission policy。

Supported Tools

| Tool | Purpose |
| finetune_dataset_validate | 校验 JSONL 微调数据集 |
| finetune_dataset_clean | 清洗、去重、过滤和脱敏数据集 |
| finetune_train | 本地 / SSH LoRA SFT 训练 |
| finetune_job_create | 创建远端微调任务 |
| finetune_job_status | 查询远端微调任务状态 |
| finetune_job_list | 列出远端微调任务 |
| finetune_job_cancel | 取消远端微调任务 |
| finetune_job_watch | 后台监视远端微调任务 |

Requirements

- Node.js >= 22
- Python >= 3.10
- Python packages: torch, transformers, peft
- 本地训练时,模型需在 HuggingFace 缓存或本地路径中
- 远端 API 模式需要服务商支持 OpenAI-compatible fine-tuning endpoints
- DSH 宿主需为 0.2.0 及以上:@deepseek-ai/dsh-tools(^0.2.0-rc.2)、@deepseek-ai/cordis(~4.0.4)、@deepseek-ai/schemastery(~3.18.4)——三者以 peerDependencies 声明,随 DSH 本体升级同步;dsh 自 0.2.0 起会在加载时校验该区间,不匹配的插件会被整包跳过
- 后台监视依赖宿主组合的 jobs 注册表(@deepseek-ai/dsh-jobs-local,由 @deepseek-ai/dsh-base 组合),但它不是必需依赖:插件用 ctx.get("jobs") 惰性读取而非声明 inject,所以没有注册表时 8 个工具仍全部注册——只是 finetune_job_watch 在调用时报错并提示改用 finetune_job_status,finetune_train 退化为 detached 进程运行
- 后台任务按 0.2.0 的 jobs 契约注册:owner 传调用方会话 id(exec.agent.id)、输出经 run(handle).append() 写入任务输出环、done 结算为 JobOutcome({status, detail})。因此本版本不支持 0.1.5 世代的 dsh(run(handle) 与输出环是 0.2.0 新增)

Quick Start

1. 校验数据集

{
"path": "/data/train.jsonl"
}

工具:

finetune_dataset_validate

2. 清洗数据集

{
"path": "/data/train.jsonl",
"out": "/data/train.clean.jsonl"
}

工具:

finetune_dataset_clean

3. 本地 LoRA 微调

{
"dataset_path": "/data/train.clean.jsonl",
"name": "my-first-lora",
"model": "Qwen/Qwen3-0.6B",
"epochs": 2,
"device": "cpu"
}

工具:

finetune_train

4. SSH 远端训练

在插件配置中设置:

transport: ssh
remote:
host: cp.example.com
user: ubuntu
port: 22
keyPath: ~/.ssh/id_rsa
dir: /data/dsh-finetune
python: python3

之后调用 finetune_train 即可。

Project Structure

dsh-finetune/
├── index.js # 插件注册入口 ├── cordis.patch.yml # Bundle patch ├── lib/ │ ├── clean.js # 数据集清洗引擎 │ ├── dataset.js # 数据集格式校验 │ ├── provider.js # OpenAI-compatible fine-tuning adapter │ ├── python.js # Python / torch 环境探测 │ ├── remote.js # SSH 远端训练执行器 │ ├── tools/ │ │ ├── dataset-validate.js │ │ ├── dataset-clean.js │ │ ├── train.js │ │ ├── job-create.js │ │ ├── job-status.js │ │ ├── job-list.js │ │ ├── job-cancel.js │ │ └── job-watch.js │ └── trainer/ │ ├── train.py # 独立 LoRA SFT trainer │ └── clean.py # 可选 Python 清洗层 └── tests/

说明

- 训练方法只支持 LoRA,暂不支持 QLoRA / 全参微调,有扩展能力。
- 本机 CPU 可以训练小模型,但速度较慢;推荐用 GPU 或 SSH 远端机器。
- 本地 trainer 使用 HF_HUB_OFFLINE=1,模型必须已缓存到本地,或指定本地模型路径。
- 远端 API 模式能不能用,取决于服务商是否真的提供 OpenAI-compatible fine-tuning endpoints。
- loss 下降只能说明训练链路在拟合数据,不能替代 held-out 评估和人工评测。

License

MIT
预览分享卡片长什么样 ↓phelpsyacht/dsh-finetune
分享 · DeepSeek Harness Hub
phelpsyacht/dsh-finetune

校验清洗数据集并完成 LoRA 微调训练

回到顶部