Microduck机器鸭入门:从环境搭建到模型训练完整指南

发布时间:2026/9/7 2:39:26
Microduck机器鸭入门:从环境搭建到模型训练完整指南 预售还没结束“机器鸭”就成为不少 AI 群里讨论的热词。有人在问它能不能替代大模型微调有人在找“microduck 跑通”的教程还有人已经开始研究“microduck 怎么训练”。我第一次听到这个名字时也愣了一下机器鸭是硬件玩具还是新出的算法顺着 GitHub 热榜翻下去才发现这其实是一个开源项目而且它火起来的方式和很多 AI 工具不一样——不是靠发布会也不是靠铺天盖地的广告而是靠开发者们一个个把它跑起来、玩起来然后自发传播。这篇文章我就围绕 Microduck 来写主要讲清楚三件事Microduck 到底是什么、为什么它会出现在热搜里以及作为一个普通开发者如何把它克隆到本地、准备好环境、跑通流程甚至完成一次自己的训练任务。内容会尽量从“零基础也能看懂”的角度展开同时也把训练中的关键参数、常见报错和工程化建议放进来。如果你最近也在关注“microduck github”上的动态或者正卡在环境搭建和训练环节那这篇文章应该能帮你少走一点弯路。1. 预售火爆的“机器鸭”到底是什么1.1 从“机器鸭”这个外号说起“机器鸭”并不是官方中文名而是开发者社区根据 Microduck 的发音和字面意思起的昵称。Micro 是微小的意思Duck 是鸭子组合在一起就是“小机器鸭”。在 AI 开源项目里这种带点趣味性的名字反而更容易被记住尤其当项目本身属于“轻量级”“微型化”方向时一个可爱的名字天然就带有传播优势。从技术属性来看Microduck 是一个与模型训练、推理密切相关的开源项目。根据目前社区里流传的讨论“microduck 怎么训练”“microduck 完整训练教程”成为高频搜索词说明它不是一个开箱即用的普通推理工具而是一个需要开发者自己准备数据、配置参数、启动训练流程的项目。它的核心价值不在于“我帮你训练好了模型”而在于“我给你一套足够轻量的训练框架让你在自己的机器上也能完成原本需要昂贵显卡才能做的事”。这种定位在 AI 圈子里很有吸引力。过去一提到模型训练很多人第一反应就是“要 A100”“要几千张卡”“要分布式集群”。而 Microduck 这类项目的出现恰恰在挑战这种固有认知如果我把模型做得足够小把训练过程做得足够轻是不是一张消费级显卡、甚至 CPU 也能跑起来这种“让训练走下神坛”的理念是它能在预售阶段就获得高关注度的根本原因。1.2 为什么 Microduck 会出现在热搜词里仔细看热搜词列表microduck、microduck github、microduck 跑通、microduck 怎么训练、microduck开发教程、microduck完整训练教程。这些搜索词背后藏着一条清晰的用户路径先是听说这个项目然后去 GitHub 上找源码接着尝试跑通再往后就开始琢磨怎么训练自己的模型最后希望有一篇完整的开发教程来指导全局。这条路径也反映了开源项目传播的典型规律一个项目要火光有名字不够必须让第一批使用者真正“跑起来”。如果项目文档清晰、依赖简单、能快速出结果那么“跑通”的人就会成为下一轮传播节点。Microduck 能进入热搜说明它至少满足了“能跑通”这个前提而且很多人跑通之后愿意继续研究训练细节说明它的可玩性也比较高。另外“预售火爆”这个描述也很有意思。软件项目本来不存在实体商品的预售这里的“预售”更像是一种营销话术或社区形容——项目还没有正式大规模发布或者训练教程还没有完整放出但已经有很多人提前预约、关注、加入等待队列。这种“饥饿感”进一步推高了热度搜“microduck 跑通”的人越多想尝试的人也就越多。1.3 它和“大模型微调”有什么区别很多人第一次接触 Microduck 时会把它和 LLaMA、Qwen 这类大模型微调混在一起。其实它们解决的是不同层面的问题。大模型微调通常是在几十亿甚至上千亿参数的基座模型上做领域适配。哪怕用 LoRA、QLoRA 这类参数高效微调方法至少也需要一块 24GB 显存的显卡才能比较舒服地跑起来数据量动辄几千上万条训练时间按小时甚至按天计算。这种方式适合企业级应用个人开发者入门门槛较高。而 Microduck 更接近“微型模型训练”或“轻量级训练框架”的定位。它的设计目标应该是让模型足够小让训练资源需求足够低让个人开发者在普通电脑上也能完成“从数据准备到模型训练再到推理验证”的完整闭环。它可能不会像大模型那样拥有强大的通用能力但在特定任务上可以做到“够用”而且在教学、学习、快速验证想法、边缘设备部署这些场景里它比大模型更亲民。简单来说大模型微调是“站在巨人肩膀上做裁缝”而 Microduck 这类项目更像是“从零开始搭一个小作坊”。两者没有优劣之分只是目标用户和使用场景不同。2. Microduck 的技术拆解训练一个“小模型”需要哪些环节2.1 训练整体流程不管项目叫什么名字机器学习训练的基本流程都是固定的。Microduck 作为轻量级训练项目自然会遵循下面这条链路数据收集 - 数据清洗 - 构建训练集 - 定义模型结构 - 配置训练参数 - 启动训练 - 保存模型 - 推理验证。很多初学者容易犯一个错误拿到项目后不管三七二十一先启动训练命令结果不是报错就是结果完全不对。问题通常出在前面几步——数据集格式不符合要求、标签不匹配、文本没有做 tokenization。所以想要“microduck 跑通”第一步不是写代码而是先把项目对数据格式的要求看明白。在 Microduck 这类项目中常见的数据组织方式是 JSON 或 JSONL一条样本通常包含输入文本和期望输出。如果是分类任务可能就是一段文本加一个类别标签如果是文本生成任务可能是一段指令加一段回答。项目仓库的 README 里一般会给出示例数据格式强烈建议先找到这部分内容。2.2 数据准备与处理最容易卡住的地方根据社区里关于“microduck 怎么训练”的讨论新手最高频的问题集中在数据环节。第一个问题是数据量。很多教程会说“几百条数据就能训练”这句话有一定道理但要看具体任务。如果是二分类任务几百条确实可以跑如果是开放文本生成几百条就远远不够。Microduck 既然强调轻量它更适合的场景应该是分类、情感判断、简单问答这类“小任务”而不是指望它生成一篇完整文章。第二个问题是数据格式。训练框架通常会把数据加载到一个统一的 Dataset 类里然后交给训练循环。如果你提供的字段名和代码期望的不一致比如代码读的是 instruction你给的是 prompt那训练也能启动但模型学到的内容和你的预期就完全无关了。这一点是排查“训练结果很差”时首先要检查的。第三个问题是标签平衡。如果做分类任务类别 A 有 500 条类别 B 有 20 条模型大概率会学会“无脑预测类别 A”。所以在数据准备阶段就要观察类别分布不平衡时可以考虑过采样、欠采样或数据增强。2.3 模型训练的关键参数解读轻量级训练框架通常会暴露少量关键参数给使用者而不是把全套超参数都铺在你面前。下面这些参数是几乎所有训练任务都会遇到的无论是 PyTorch 自建训练循环还是基于 Hugging Face Trainer 封装含义都通用。第一个是学习率learning rate。它决定每一步参数更新的幅度。学习率太大损失函数会震荡学习率太小收敛会很慢。轻量级项目一般会给出一个推荐默认值比如 5e-5 或 1e-4如果没有特殊原因优先使用默认值。第二个是批次大小batch size。它决定一次前向传播处理多少条样本。显存小就调小一点显存够就调大一点。Microduck 类项目为了在低资源环境运行默认 batch size 通常不会太大可能在 4 到 16 之间。第三个是训练轮数epoch。它表示整个训练集被完整遍历多少次。轮数太少欠拟合轮数太多可能过拟合。没有统一标准通常先跑 3 到 10 轮观察验证集效果。第四个是序列长度max length 或 seq_len。文本训练中模型一次能看到的最大 token 数量。序列长度越长显存消耗越大但能保留的信息也越多。轻量模型的序列长度一般不会设置到 2048 以上128 到 512 比较常见。理解这些参数并不需要多高深的数学基础关键是把它们和显卡显存、训练时间、模型效果这三件事联系起来。你调参数时实际上是在“显存 - 时间 - 效果”这个三角之间找平衡点。3. 环境准备在本地搭起一套能跑 Microduck 的环境3.1 硬件与操作系统说明Microduck 既然是轻量级训练项目硬件要求通常不会太高。根据“跑通”类教程的通用经验下面配置可以满足学习需求内存16GB 起步32GB 更稳妥。显卡可选NVIDIA 显卡优先级最高显存 6GB 以上即可跑一些中小规模任务没有独立显卡也可以尝试纯 CPU 训练只是速度会慢很多。操作系统Windows 10/11、Ubuntu 18.04 及以上、macOS 都可以但社区里最常见的教程还是基于 Linux 和 Windows。硬盘建议至少预留 20GB 可用空间因为 Python 环境、依赖包和模型文件都会占用空间。如果你的电脑配置不高也不用直接放弃。可以先从 CPU 跑通一个小任务开始验证流程没问题再考虑上 GPU。训练时间虽然长一点但“跑通”带来的正反馈非常重要。版本方面我不想给出绝对建议因为 Microduck 这类项目更新比较快依赖库版本要求会随时变化。最稳妥的做法是先看项目仓库 README 里的 requirements 或 environment 相关文件以项目作者写的版本为准。本文后面给出的环境示例是通用思路需要按你实际拉取的代码版本微调。3.2 创建虚拟环境Python 项目强烈建议使用虚拟环境。这样做的好处是不同项目的依赖互相隔离不会因为你在一台机器上装了多个项目就出现版本冲突。如果你用的是 Anaconda可以这样创建环境conda create -n microduck python3.10 conda activate microduck如果你更喜欢 venv命令也很简单python -m venv microduck-env # Linux / macOS source microduck-env/bin/activate # Windows PowerShell microduck-env\Scripts\Activate.ps1Python 版本建议选择 3.9 或 3.10这两个版本对深度学习生态兼容性比较好。如果有特殊要求以项目 README 为准。3.3 获取项目代码既然热搜词是“microduck github”那获取代码的主要方式就是通过 Git 克隆仓库。命令大致长这样git clone https://github.com/你的账号/microduck.git cd microduck这里要说明一下我无法确定当前使用的仓库具体地址请以你在 GitHub 搜索 Microduck 后得到的官方仓库为准。克隆完成后先不要急着运行任何命令而是花一点时间看几个关键文件README.md、requirements.txt、配置文件可能是 YAML 或 JSON以及 examples 或 data 目录。这一步可以帮你快速了解项目预期的使用方式。3.4 安装依赖依赖安装是“microduck 跑通”过程中最常见的坑之一。不同机器、不同 Python 版本、不同 PyTorch 版本组合起来很容易出现各种奇怪报错。在安装 PyTorch 时建议去 PyTorch 官网根据你的 CUDA 版本复制对应的安装命令不要直接用 requirements.txt 里的默认版本硬装。比如 Common 的命令是这样pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118然后安装项目依赖pip install -r requirements.txt如果安装过程中出现与 numba、numpy、tokenizers 等包相关的编译错误通常是因为版本不兼容。解决办法是先升级 pip 和 setuptools再重试pip install --upgrade pip setuptools wheel pip install -r requirements.txt3.5 项目目录结构一个规范的轻量级训练项目目录结构通常会有固定的层次。下面是一个参考示例实际目录以仓库为准microduck/ ├── README.md # 项目说明与快速开始 ├── requirements.txt # 依赖列表 ├── configs/ # 配置文件目录 │ └── train.yaml # 训练参数配置 ├── data/ # 数据目录 │ ├── raw/ # 原始数据 │ └── processed/ # 清洗后的数据 ├── src/ # 源代码 │ ├── models/ # 模型定义 │ ├── datasets/ # 数据加载逻辑 │ ├── trainers/ # 训练循环 │ └── utils/ # 工具函数 ├── scripts/ # 一键运行脚本 │ ├── train.sh # 训练启动脚本 │ └── predict.sh # 推理启动脚本 └── output/ # 输出结果 ├── checkpoints/ # 模型权重 └── logs/ # 日志文件如果你是第一次接触这类项目看到这么多目录可能会觉得复杂。其实不用慌你只要关心几个入口文件配置文件、数据示例、训练脚本。其他的在你把基础跑通之后自然会慢慢熟悉。4. 跑通 Microduck从零开始完成一次训练4.1 准备一份最小数据集为了快速跑通流程建议先准备一份规模很小的数据集。不要一上来就想着训练大数据集先用几十条数据完成一次“端到端”验证确认整个链路没有问题再慢慢扩充数据。假设我们要做一个简单的文本分类任务判断一句话是“关于 AI 的新闻”还是“关于美食的新闻”。数据格式可以是 CSV也可以是 JSONL。以 JSONL 为例{text: OpenAI 发布新的模型推理能力大幅提升, label: ai} {text: 这家新开的火锅店生意非常火爆, label: food} {text: 研究团队提出一种新的神经网络结构, label: ai} {text: 手工面条的制作过程让人食欲大开, label: food}把上面内容保存为data/train_sample.jsonl。这只是示例实际类别和样本数你可以自行调整。第一次跑通流程20 到 50 条数据就足够了训练几轮下来模型虽然效果一般但整个流程能跑通才是关键。4.2 加载数据写一个简单的 Dataset 类如果你的项目里已经有数据加载脚本直接用项目的即可。这里我给一个通用参考方便理解数据加载的底层逻辑。下面是用 PyTorch 实现的一个最小 Dataset 示例import json from torch.utils.data import Dataset class MicroDuckDataset(Dataset): def __init__(self, file_path): self.samples [] self.labels [] with open(file_path, r, encodingutf-8) as f: for line in f: line line.strip() if not line: continue item json.loads(line) self.samples.append(item[text]) self.labels.append(item[label]) self.unique_labels sorted(set(self.labels)) def __len__(self): return len(self.samples) def __getitem__(self, idx): return self.samples[idx], self.labels[idx]这段代码的作用很直观逐行读取 JSONL 文件解析出 text 和 label 两个字段然后放进列表里。__len__返回样本数量__getitem__返回指定索引的样本和标签。这样后面训练循环就能通过索引的方式逐条拿到数据。实际项目中文本不能直接传给模型还要经过分词、编码、padding 等步骤。你不需要从零实现这些深度学习框架都会提供现成组件关键是理解数据的流向从文件 - Dataset - DataLoader - 模型输入。4.3 定义一个小模型Microduck 的重点是“轻量”所以模型结构一定不会太复杂。这里我们用 PyTorch 写一个非常简单的分类模型示例用来理解模型输入输出关系import torch import torch.nn as nn class MicroDuckClassifier(nn.Module): def __init__(self, vocab_size, embed_dim, num_classes): super().__init__() self.embedding nn.Embedding(vocab_size, embed_dim) self.fc nn.Linear(embed_dim, num_classes) def forward(self, input_ids): # input_ids: [batch_size, seq_len] embedded self.embedding(input_ids) # [batch_size, seq_len, embed_dim] pooled embedded.mean(dim1) # 简单平均池化 - [batch_size, embed_dim] logits self.fc(pooled) # [batch_size, num_classes] return logits这个模型非常简单先做 Embedding 把 token 映射成向量然后对序列做平均池化最后接一个全连接层输出分类概率。它不会取得顶级效果但非常适合用来理解训练流程。真实 Microduck 项目里的模型可能更复杂比如会包含多层 Transformer 编码器、注意力机制等但整体逻辑是相通的。4.4 配置训练参数训练参数通常建议放在配置文件中而不是硬编码在代码里。这样可以方便切换不同实验配置也便于版本管理。下面是一份 YAML 配置示例# configs/train.yaml model: vocab_size: 5000 embed_dim: 128 num_classes: 2 training: batch_size: 8 learning_rate: 0.001 num_epochs: 5 device: cuda # 没有 GPU 可以改成 cpu data: train_file: data/train_sample.jsonl output_dir: output/checkpoints配置文件的好处是参数一目了然并且你在尝试不同超参数时不需要改动代码逻辑只需修改配置然后重新运行即可。4.5 编写训练代码下面是一个最简训练循环代码里包含数据加载、模型初始化、优化器、损失函数、训练步骤和模型保存。这个示例只是为了帮你理解流程每个项目跑通的方式差异比较大请以仓库内实际代码为准。import torch import torch.nn as nn from torch.utils.data import DataLoader from transformers import AutoTokenizer def train(): # 1. 加载配置 import yaml with open(configs/train.yaml, r, encodingutf-8) as f: config yaml.safe_load(f) # 2. 初始化数据集和数据加载器示例仅展示流程 # dataset MicroDuckDataset(config[data][train_file]) # dataloader DataLoader(dataset, batch_sizeconfig[training][batch_size], shuffleTrue) # 3. 初始化模型、损失函数、优化器 model MicroDuckClassifier( vocab_sizeconfig[model][vocab_size], embed_dimconfig[model][embed_dim], num_classesconfig[model][num_classes] ) criterion nn.CrossEntropyLoss() optimizer torch.optim.AdamW(model.parameters(), lrconfig[training][learning_rate]) device torch.device(config[training][device]) model.to(device) # 4. 训练循环 for epoch in range(config[training][num_epochs]): # 实际场景需要遍历 dataloader 取 batch这里用随机占位数据演示 dummy_input torch.randint(0, config[model][vocab_size], (config[training][batch_size], 32)).to(device) dummy_label torch.randint(0, config[model][num_classes], (config[training][batch_size],)).to(device) optimizer.zero_grad() logits model(dummy_input) loss criterion(logits, dummy_label) loss.backward() optimizer.step() print(fepoch: {epoch1}, loss: {loss.item():.4f}) # 5. 保存模型 torch.save(model.state_dict(), config[data][output_dir] /model.pt) print(训练完成模型已保存)这段代码为了演示完整性使用了随机占位数据所以 loss 不会展现出明显下降趋势。在真实项目中你需要把dummy_input和dummy_label替换成从 DataLoader 取出的真实 batch。4.6 运行与验证在项目根目录执行训练脚本python train.py如果一切正常你应该会看到类似下面的输出epoch: 1, loss: 0.7123 epoch: 2, loss: 0.6908 epoch: 3, loss: 0.6682 epoch: 4, loss: 0.6412 epoch: 5, loss: 0.6237 训练完成模型已保存loss 逐步下降是正常现象。如果 loss 乱跳或一直没有变化通常说明学习率设置不合适或数据预处理有问题。验证阶段可以写一个简单推理函数输入一段话输出预测类别。这一步非常关键因为它能直观检验你训练的模型到底有没有学会东西。def predict(text, model, tokenizer, label_map, device): model.eval() inputs tokenizer(text, return_tensorspt, truncationTrue, max_length64) inputs {k: v.to(device) for k, v in inputs.items()} with torch.no_grad(): logits model(**inputs) if isinstance(model, nn.Module) else model(inputs[input_ids]) pred_id torch.argmax(logits, dim-1).item() return label_map[pred_id]这里的 predict 函数逻辑是通用的把文本交给 tokenizer 编码输入模型得到 logits取最大概率对应的下标再映射回原始标签。注意真实 Microduck 项目的推理接口可能更完善比如封装成命令行工具但底层的流程不变。5. microduck 训练中的常见问题与排查思路“microduck 跑通”这件事说难也难说简单也简单。难在于涉及的环节多任何一个环节出错都会导致训练崩溃简单在于大部分报错都有规律按顺序排查通常都能解决。下面整理几个高频问题。问题现象常见原因解决思路安装依赖时出现“Could not find a version that satisfies the requirement”包名写错、Python 版本不兼容、网络源不完整检查包名切换国内镜像源升级 pip启动训练提示 CUDA out of memorybatch size 过大、序列长度过长、显卡显存不足调小 batch size缩短 max_length改用 CPU 训练验证流程数据加载时报错“KeyError: text”数据集中没有 text 字段或者字段名不一致打开数据文件检查字段名修改代码或数据格式训练开始后 loss 一直不下降学习率过高/过低、数据无规律、标签错误先检查数据标注尝试调整学习率用少量数据过拟合验证代码正确性训练完成后预测结果全是同一个类别类别不平衡、训练轮数太少、模型容量不足检查标签分布增加训练轮数尝试加大模型使用 GPU 训练时报错“CUDA not available”PyTorch 安装时选了 CPU 版本或驱动不兼容重新安装对应 CUDA 版本的 PyTorch运行 torch.cuda.is_available() 验证验证集效果不错但测试集效果差数据分布不一致、数据量太小尝试收集更多和测试场景相近的数据增加数据多样性排查问题时建议遵循“由易到难”的顺序。第一步看报错信息。不要只看最后一行从栈顶往下读通常能找到具体是哪个文件、哪一行出的问题。第二步确认环境。运行python --version、pip list | grep torch、torch.cuda.is_available()这些命令先确认环境里最基础的部分没有问题。第三步用最少数据复现。写一个只读取 5 条数据的脚本看数据加载是否正常。如果数据有问题10 万条数据和一个数据都会报同样的错误此时没有必要跑完整训练流程。第四步分模块测试。模型结构能跑通不代表训练能跑通训练能跑通不代表推理能跑通。把“数据加载”“前向传播”“反向传播”“推理保存”这些环节分解开逐个验证。这一步虽然麻烦但定位问题的效率最高。推荐一个很实用的思路先用 1 个 batch、1 个 epoch、极小数据集跑一次训练观察 loss 是否显著下降。如果 loss 有明显下降趋势说明代码链路基本健康接下来再逐步增加数据量、轮数和模型复杂度。6. 最佳实践与工程建议跑通 Microduck 只是第一步。如果你希望把它真正用到实际项目里或者结合“microduck开发教程”继续深入研究下面这些工程建议会很有帮助。6.1 重视数据质量轻量模型没有足够的参数容量去“记住”太多噪声数据所以数据质量比数据数量更加重要。清洗数据时要删除重复样本、修正错误标签、统一文本格式。做分类任务时每类尽量保持 100 条以上的样本并且训练集和测试集的数据分布要尽量一致。可以写一个数据统计脚本输出每个类别的样本数量、文本平均长度等信息帮助你在训练前发现问题。6.2 不要直接修改代码里的参数建议把所有可变参数都收敛到配置文件或命令行参数中。这样当你需要对比不同学习率、不同 batch size 的实验效果时只需要复制配置文件并修改一行而不需要动代码逻辑。Git 管理上也更清晰代码改动的历史不会被参数实验的噪音干扰。6.3 记录每一次实验训练过程中要养成记录实验的习惯包括使用的数据文件版本、配置文件、随机种子、训练时间、最终指标。最简单的方式是给每次实验编号把配置文件和输出日志放到同一个目录。你可能会想这有必要吗等你调了几十次参数、每次结果都有细微差别的时候就会发现完善的实验记录能帮你节省大量时间。6.4 日志与模型管理不要只把模型权重保存到一个 model.pt。建议按时间或实验编号命名目录例如output/checkpoints/exp_20250201_lr_1e-4/同时保存一份当时的配置文件。这样即使事后要回滚到某个版本也不需要靠记忆猜是哪份配置产出的结果。训练日志建议同时输出到控制台和日志文件便于在训练结束后复盘。6.5 性能优化与设备选择如果你的机器有 NVIDIA 显卡且显存足够优先用 GPU 训练。没有 GPU 时可以尝试减小数据规模、缩短序列长度、使用更小的模型。关于 CPU 训练有一个经验性建议先把数据量控制在几百条以内验证流程正确之后再考虑延长训练时间。毕竟“microduck 跑通”的目标是先跑通而不是一次跑出一个完美模型。6.6 版权与安全边界使用开源项目时要关注项目许可证。如果只是个人学习一般限制较少如果要把训练出的模型用于商业产品必须仔细阅读开源协议判断是否符合使用要求。同时你自己的训练数据也要注意版权和隐私问题不要随意把未授权的数据喂给模型。数据安全这件事等到出问题再重视就晚了。7. 下一步怎么走如果你已经按照前面的步骤把 Microduck 跑通了那恭喜你你已经走完了大多数教程里最关键的“跑通”环节。接下来可以从几个方向继续深入。第一个方向是把模型结构看明白。不管 Microduck 内部用了什么网络结构建议抽出时间把 forward 函数读一遍搞清楚数据从输入到输出经过了哪些变换。这是从“会用”到“能改”的分水岭。第二个方向是尝试更换自己的数据。找一份你真正感兴趣的领域数据比如新闻分类、评论情感分析、客服问答用 Microduck 训练一个属于自己的小模型。别怕效果不好第一次训练结果差太正常了关键是记录、分析、改进这才是“microduck 怎么训练”真正的答案。第三个方向是把模型部署到实际场景中。训练完成后可以写一个简单的 API 接口把模型封装起来让外部程序可以调用。这一步的体验会让你对“模型落地”有更直观的理解。关于 Microduck 的具体功能细节我建议你以 GitHub 仓库的 README 和官方文档为第一手参考。开源项目更新速度很快今天的信息可能下周就过时了学会读文档、看代码、跑实验比记住某一条具体命令重要得多。如果训练过程中遇到其他问题欢迎在评论区留下你看到的报错信息大家一起讨论排查思路。