
这次我们来看深度学习领域绕不开的 PyTorch 框架。PyTorch 是目前学术界和工业界使用最广的深度学习框架之一核心优势是动态计算图、自动微分、完善的神经网络模块和庞大的社区生态。很多新模型如 Transformer、扩散模型、大语言模型微调都优先给 PyTorch 版本。这篇文章会带你完成环境安装、创建虚拟环境、验证 GPU 是否可用、上手 Tensor、autograd、nn.Module 三个核心知识点并跑通一个完整的训练流程最终把模型保存下来并包装成接口服务。先说结论PyTorch 不是一键式 WebUI 工具它是一个 Python 深度学习框架安装完以后通过代码调用。它能解决的任务范围非常大包括图像分类、目标检测、OCR、语音识别、文本生成、时序预测等。官方提供 CPU 版和 GPU 版安装命令GPU 推理需要 NVIDIA 显卡和 CUDA 驱动如果没有独显CPU 也能跑小模型和测试代码。本文不做高深理论推导以“能跑起来、能写核心代码、能部署”为目标适合刚接触深度学习的开发者也适合从 TensorFlow 或其他框架转过来的读者。1. PyTorch 核心能力速览能力项说明项目类型深度学习框架开源团队Meta 旗下 AI 团队开源并持续维护主要功能动态计算图、自动微分 autograd、神经网络模块 nn、数据加载 DataLoader、多卡训练 DDP、模型导出 TorchScript/ONNX支持硬件CPU、NVIDIA GPU部分平台支持 AMD ROCm 和 Apple Silicon MPS具体以官网安装包为准支持平台Windows、Linux、macOS启动方式Python 代码import torch无独立 WebUI是否支持 API不内置 HTTP API需要自建 FastAPI/Flask 服务层包装模型推理是否支持批量任务支持通过 DataLoader 批量处理数据分布式训练可扩展到大规模任务适合场景图像、文本、语音、时序预测、学术研究、模型部署、AI 应用开发PyTorch 是学习深度学习的“通用语言”。无论之后读论文复现、跑开源模型还是接 Stable Diffusion、TTS 等实际应用底层都离不开张量操作和自动求导这两件事。这里先明确一个边界PyTorch 本身不负责网页界面或任务队列它只负责模型计算前端展示、任务调度、接口服务需要自己组装。2. PyTorch 适用场景与使用边界PyTorch 适合直接用代码完成深度学习的全流程数据处理、模型定义、训练、验证、保存、推理。核心价值在于灵活你可以随时打印中间张量的形状调试体验比静态图框架友好。这也是它能成为 AI 研究和落地项目主流选择的原因。我建议把 PyTorch 用在下面这些方向上图像任务图像分类、目标检测、语义分割、风格迁移、批量处理图片数据集。文本任务文本分类、命名实体识别、机器翻译、大模型微调。语音任务语音识别、TTS 声学模型训练。时序任务股票预测、电量预测、异常检测例如用 TCN、Transformer 做时间序列建模。模型部署训练完成后导出 ONNX 或封装成 API接进业务系统。同时也要说清楚不擅长的事情。PyTorch 不是一个自动化深度学习平台它不会替你选择模型结构也不主动帮你调超参数。没有数据和标签PyTorch 也跑不出结果。它不内置显卡检测软件如果环境里 CUDA 版本和驱动不匹配模型会静默回退到 CPU。新手最容易在这里卡住后面会专门讲排查方法。涉及数据与模型使用边界时必须注意授权问题。训练数据中如果有真实人物肖像、版权图片、语音录音需要确认授权范围。开源模型也要看许可证是否允许商用。涉及金融场景的时序预测模型结果只能作为研究参考不能直接作为投资决策依据。发布 AI 生成内容时要遵守平台和当地的标识与合规要求。3. PyTorch 环境准备与前置条件动手安装前先检查本机条件。PyTorch 对操作系统要求不高Windows 10/11、Ubuntu 18.04 以上、macOS 都可以。Python 建议使用 3.9 到 3.11 之间的版本稳妥起见以当前官网版本要求为准。如果你准备用 GPU 跑模型需要一张 NVIDIA 显卡并安装对应版本的显卡驱动和 CUDA 运行库。CUDA 不装也可以PyTorch 会自动回退到 CPU但速度会明显慢很多。安装依赖建议使用 Anaconda 或 Miniconda 管理 Python 环境。好处是每个项目独立环境不污染系统 Python卸载也方便。没有 Anaconda 的话直接从官网安装 Python 再配 pip 也可以但环境隔离性差一些。磁盘空间方面PyTorch 基础安装包大约 2GB 到 4GB下载数据集和模型文件会根据任务增加建议预留 20GB 以上空间。安装前先看自己缺什么可以把 Windows 的显卡驱动更新到最新版然后打开命令行执行nvidia-smi这一步用来确认显卡型号、驱动版本和驱动的最高 CUDA 版本。注意nvidia-smi显示的 CUDA Version 是驱动支持的上限并不意味着你已经安装了 CUDA 工具包。PyTorch 自带了 CUDA 运行库多数情况下不需要单独安装完整 CUDA 工具包除非你要编译自定义算子。Apple 芯片用户不需要处理 CUDAPyTorch 会通过 MPS 后端加速纯 CPU 用户则完全跳过 CUDA 相关步骤。总的来说这套环境准备的关键点就是Python 环境隔离、显卡驱动可用、安装包与 CUDA 版本匹配。这三件事解决后安装基本不会出问题。4. PyTorch 安装部署与访问方式PyTorch 官网提供实时生成命令的安装页地址是https://pytorch.org/get-started/locally/进入页面后选择操作系统、包管理器、Python 版本和 CUDA 版本官网会自动生成对应命令。这里给两套通用命令模板实际运行时请把 CUDA 版本换成官网给出的最新版本。4.1 使用 conda 创建独立环境conda create -n pytorch python3.11 -y conda activate pytorch创建并激活环境后再安装 PyTorch。示例命令中的pytorch-cuda12.1取决于你的驱动版本conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia如果不需要 GPU只安装 CPU 版可以用conda install pytorch torchvision torchaudio cpuonly -c pytorch4.2 使用 pip 安装CPU 版pip install torch torchvision torchaudioGPU 版需要指定 PyTorch 官方包仓库以 cu121 为例pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121实际安装时打开官网安装页复制最新的--index-url。国内网络环境下载慢时可以给 pip 配置清华镜像源但需要注意CUDA 预编译包通常只在官方 index 完整可用如果镜像源没有对应版本还是建议从官方地址下载。也可以使用离线方式在官网选择对应 CUDA 版本后复制.whl文件链接用下载工具下载到本地再执行本地安装。4.3 验证安装是否成功环境激活状态下执行python -c import torch; print(torch.__version__); print(torch.cuda.is_available())如果输出类似2.5.1并且第二行为True说明 PyTorch 安装成功且 GPU 可用。第二行为False说明当前环境是 CPU 版本或 CUDA 不可用需要检查安装命令是否选对了 CUDA 版本。4.4 在云平台上使用如果本机没有 GPU也可以使用深度学习云平台或在线 Notebook 服务。这类平台一般预装了 PyTorch开个 GPU 实例后直接新建 Notebook 写代码即可。云平台的好处是不用自己处理驱动和 CUDA坏处是按量计费长时间的模型训练成本偏高。建议本地先写好代码、用小数据量验证逻辑再上云跑大模型。5. PyTorch 三个核心知识点Tensor、autograd、nn.Module这部分是 PyTorch 最核心的内容掌握了这三个知识点深度学习项目的基础就稳了。5.1 核心知识点一Tensor 张量Tensor 是 PyTorch 的基础数据结构可以理解成支持 GPU 计算的多维数组。它和 NumPy 的 ndarray 很像但增加了自动求导和 GPU 迁移能力。创建张量最简单的方式是直接传入列表也可以使用torch.zeros、torch.ones、torch.randn等常用函数。import torch a torch.tensor([[1.0, 2.0], [3.0, 4.0]]) b torch.ones(2, 2) c a b # 矩阵相乘 print(c) x torch.randn(4, 3, 256, 256) # 模拟 4 张 256x256 的图像 print(x.shape) # torch.Size([4, 3, 256, 256]) print(x.dtype) # torch.float32 print(x.device) # cpuTensor 的常用操作包括维度变换、切片、拼接和归约。view和reshape用于改变形状permute用于更换维度顺序squeeze和unsqueeze用于删减或增加维度。实际处理图像批量数据时张量形状通常是[batch_size, channel, height, width]文本数据则是[batch_size, seq_len]。搞清楚每个轴的含义是后续写模型代码的前提。Tensor 可以直接迁移到 GPUx x.to(cuda) print(x.device) # cuda:0如果使用 Apple 芯片可以把cuda换成mps。日常写代码建议用device cuda if torch.cuda.is_available() else cpu动态选择设备。5.2 核心知识点二autograd 自动微分深度学习的本质是通过梯度更新参数而梯度计算是一个绕不开的环节。PyTorch 的 autograd 机制能自动计算张量的梯度。只要在创建张量时指定requires_gradTrue后续所有计算过程都会被记录调用backward()就能把梯度反向传播到每个叶子节点。import torch x torch.tensor(2.0, requires_gradTrue) y x ** 2 3 * x 1 y.backward() print(x.grad) # 2*x 3 7这个例子里x.grad自动得到 7说明 PyTorch 正确求出了y对x的偏导。训练神经网络时损失函数对模型参数的梯度就是这样自动算出来的。backward()之后梯度会累加到param.grad中所以每轮更新前要执行optimizer.zero_grad()清零避免梯度累积导致结果错误。在推理阶段不需要计算梯度可以用torch.inference_mode()或torch.no_grad()禁用梯度记录这样既能减少显存占用也能提升推理速度。model.eval() with torch.inference_mode(): logits model(images)5.3 核心知识点三nn.Module 与训练循环nn.Module是构建神经网络的基类。只要继承它并在__init__里定义子层在forward里定义前向传播逻辑PyTorch 就会自动管理所有参数。使用nn.Sequential可以快速堆叠简单网络复杂模型建议用类方式实现。import torch import torch.nn as nn class MLP(nn.Module): def __init__(self, in_dim, hidden_dim, out_dim): super().__init__() self.fc1 nn.Linear(in_dim, hidden_dim) self.relu nn.ReLU() self.fc2 nn.Linear(hidden_dim, out_dim) def forward(self, x): x self.fc1(x) x self.relu(x) x self.fc2(x) return x model MLP(28 * 28, 128, 10) print(model)model.parameters()返回所有需要更新的参数把参数传给优化器即可。训练循环的标准流程是从 DataLoader 取一批数据。前向传播得到预测结果。计算损失函数。调用loss.backward()计算梯度。调用optimizer.step()更新参数。清零梯度。下面给出一套完整的 MNIST 手写数字分类训练流程import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) train_data datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform) train_loader DataLoader(train_data, batch_size64, shuffleTrue) model nn.Sequential( nn.Flatten(), nn.Linear(28 * 28, 128), nn.ReLU(), nn.Linear(128, 10), ) criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr1e-3) for epoch in range(3): total_loss 0.0 for images, labels in train_loader: optimizer.zero_grad() logits model(images) loss criterion(logits, labels) loss.backward() optimizer.step() total_loss loss.item() avg_loss total_loss / len(train_loader) print(fepoch {epoch 1}, avg loss: {avg_loss:.4f})跑通后可以看到每一轮 loss 在下降。对新手来说用这套流程验证环境、理解训练逻辑是最合适的。之后可以把nn.Sequential替换成自定义类加入卷积层、Dropout、BatchNorm 等模块。6. 数据加载、批量任务与模型保存训练深度学习模型离不开数据管理。PyTorch 用Dataset和DataLoader两个概念组织数据Dataset负责读取单条样本DataLoader负责批量加载、打乱顺序和多进程读取。批量处理图像时只需要自定义__getitem__方法返回图片张量和标签。from torch.utils.data import Dataset, DataLoader from PIL import Image import os class ImageDataset(Dataset): def __init__(self, img_dir, labels): self.img_dir img_dir self.labels labels self.img_names list(labels.keys()) def __len__(self): return len(self.img_names) def __getitem__(self, idx): name self.img_names[idx] img Image.open(os.path.join(self.img_dir, name)).convert(RGB) img_tensor torch.tensor(np.array(img)).permute(2, 0, 1).float() label self.labels[name] return img_tensor, labelDataLoader可以设置batch_size、shuffle、num_workers等参数。num_workers控制读取数据的进程数Windows 下建议设为 0 或按官方说明配置避免多进程报错。模型训练完成后需要保存。推荐只保存权重因为代码里模型结构已经定义好了torch.save(model.state_dict(), model.pt) # 推理时加载 new_model MLP(28 * 28, 128, 10) new_model.load_state_dict(torch.load(model.pt)) new_model.eval()eval()会把 Dropout、BatchNorm 等层切换到推理模式这一步容易遗漏导致结果不稳定。保存完整模型结构也可以但文件更大迁移到其他代码库时更容易出问题。批量推理时可以用torch.save结合循环记录结果也可以直接用torch.utils.data.DataLoader对全部测试数据做多次批量前向。7. 训练与推理中的浮点格式fp32、fp16、bf16、tf32热词里有一个高频问题深度学习模型部署时fp32、fp16、bf16、tf32 该怎么选这个问题在 PyTorch 中直接关系到显存占用和计算速度。fp32单精度浮点深度学习默认计算格式精度最高显存占用和计算量最大。fp16半精度浮点显存占用约是 fp32 的一半计算速度快但数值范围小容易梯度溢出。bf16Brain Float 16同样是 16 位但指数位更多数值范围接近 fp32适合训练大模型GPU 支持时优先考虑。tf32NVIDIA Ampere 架构引入的格式内部用 19 位近似 fp32用于矩阵乘法加速精度损失较小。推理阶段想要降低显存占用可以使用半精度推理model.eval() with torch.inference_mode(): with torch.autocast(device_typecuda, dtypetorch.float16): logits model(images)训练阶段做混合精度训练时PyTorch 官方推荐配合梯度缩放器。新版 PyTorch 中推荐使用torch.amp.GradScalerfrom torch.amp import GradScaler scaler GradScaler(cuda) for images, labels in train_loader: images, labels images.cuda(), labels.cuda() optimizer.zero_grad() with torch.autocast(device_typecuda, dtypetorch.float16): logits model(images) loss criterion(logits, labels) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()如果你的 PyTorch 版本尚未提供torch.amp也可以使用旧版的torch.cuda.amp.GradScaler本质上是同一个能力。选择哪种浮点格式核心看三点硬件是否支持、任务对精度是否敏感、显存是否紧张。做实验或调代码时默认用 fp32 最省心确认模型和损失函数在低精度下稳定后再切到混合精度训练或半精度推理。8. 模型接口 API 与工程化部署PyTorch 本身不提供 HTTP 接口但可以很方便地把训练好的模型包装成 API 服务。这里给出一个 FastAPI 的推理服务示例。先安装依赖pip install fastapi uvicorn然后创建app.pyfrom fastapi import FastAPI from pydantic import BaseModel import torch import torch.nn as nn app FastAPI() class MLP(nn.Module): def __init__(self, in_dim, hidden_dim, out_dim): super().__init__() self.fc1 nn.Linear(in_dim, hidden_dim) self.relu nn.ReLU() self.fc2 nn.Linear(hidden_dim, out_dim) def forward(self, x): x self.fc1(x) x self.relu(x) x self.fc2(x) return x model MLP(28 * 28, 128, 10) model.load_state_dict(torch.load(model.pt, map_locationcpu)) model.eval() class InputData(BaseModel): features: list[float] app.post(/predict) def predict(data: InputData): x torch.tensor([data.features]) with torch.inference_mode(): logits model(x) result logits.argmax(dim-1).item() return {prediction: result}启动服务uvicorn app:app --host 127.0.0.1 --port 8000用 curl 验证curl -X POST http://127.0.0.1:8000/predict \ -H Content-Type: application/json \ -d {features: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}实际项目里features的长度应该等于模型的输入维度演示时要注意。如果模型输出的是分类概率可以先做softmax再返回如果是回归任务则直接返回连续值。批量推理接口可以扩展为接收list[list[float]]循环处理后返回结果列表。部署到生产环境时要注意接口服务默认监听127.0.0.1只允许本机访问如果部署到服务器上开放对外访问需要加鉴权、限流和 HTTPS避免模型被恶意刷量。9. 资源占用与性能观察模型跑起来后怎么看显存占用最简单的方法是用系统命令观察 GPU 状态。Linux 和 Windows 自带nvidia-smi执行后能看到显存使用率、GPU 利用率和运行中的进程。训练过程中还可以在 PyTorch 代码里打印显存占用print(torch.cuda.memory_allocated() / 1024 ** 2, MB)更完整的观察方式print(torch.cuda.memory_summary())torch.cuda.memory_summary()会输出显存分配明细定位模型和数据各自占了多少空间。实际占用会因模型结构、输入分辨率、batch size、是否使用混合精度而变化所以不要轻信网上“4G 显存够用”之类的一概而论结论同一模型在不同配置下差异很大。降低显存占用的常见手段包括减小 batch size这是最直接有效的方法。降低输入图像分辨率。使用混合精度训练或半精度推理。启用梯度累积用小 batch 模拟大 batch。推理时使用torch.inference_mode()避免保存计算图。及时删除不再使用的中间变量必要时调用torch.cuda.empty_cache()。CPU 推理和 GPU 推理的差异主要体现在大矩阵运算和卷积上。CPU 跑小模型可能差别不大但跑到 256x256 以上图像或批量数据时GPU 优势会非常明显。训练模型时一定要确认数据被放到了 GPU 上否则模型可能在 CPU 上训练速度慢且命令行的torch.cuda.is_available()却在显示True。这里有一个容易忽略的坑torch.cuda.is_available()只表明 PyTorch 编译时使用了 CUDA不代表张量和模型都在 GPU 上需要用.to(cuda)显式迁移。10. PyTorch 常见问题与排查方法问题现象可能原因排查方式解决方案import torch报错Python 环境混杂、安装包不完整查看报错堆栈检查环境是否激活新建 conda 环境重新安装torch.cuda.is_available()返回 False安装的是 CPU 版或 CUDA 版本不匹配执行python -c import torch; print(torch.__version__)到官网重新生成带 CUDA 的安装命令启动训练后显存不足batch size 过大或输入分辨率过高看nvidia-smi显存占用减小 batch size、降低分辨率、开启混合精度模型训练速度非常慢数据或模型没有迁移到 GPUprint(next(model.parameters()).device)执行.to(cuda)迁移模型和张量下载 PyTorch 包很慢网络环境问题观察 pip/conda 下载速度配置镜像源或下载离线 whl 本地安装DataLoader多进程报错Windows 平台多进程兼容问题查看报错是否在worker部分将num_workers设为 0或把训练代码放进if __name__ __main__:加载模型权重时报 key 不匹配模型结构和训练时不一致打印state_dict的 key 列表比对结构或strictFalse加载后手动复制参数推理结果波动忘记model.eval()检查代码中是否切到 eval 模式在推理前调用model.eval()并使用inference_mode()FastAPI 启动失败端口被占用或依赖未安装检查端口 netstat -anofindstr 8000这里重点说两个最容易踩的坑。第一个是环境混淆系统里可能同时有多个 Pythonconda 环境中安装的 PyTorch 却用系统 Python 运行。解决办法很简单命令行先执行conda activate pytorch再用where python或which python确认路径。第二个是 GPU 版本装错很多人直接用pip install torch装到了 CPU 版之后代码跑得很慢还找不到原因。只要torch.cuda.is_available()为False优先检查安装命令是否带正确的--index-url。模型文件缺失通常发生在下载预训练权重时中断。可以重新下载或者按照项目 readme 把权重放到指定目录。批量任务卡住一般是因为某个样本读取异常建议在每个样本处理外围加异常捕获并打印文件名方便定位。11. 最佳实践与使用建议从学习到工程落地PyTorch 项目建议遵循下面这些经验。环境隔离要养成习惯。每个项目单独建一个 conda 环境依赖写进requirements.txt或environment.yml。临时做实验时可以用现成环境但长期项目不要混装不同版本的 torch 和 CUDA否则升级一次就可能导致模型加载失败。第一次跑实验先小规模验证。用少量数据、小分辨率、小 epoch 跑通全流程确认训练循环、验证逻辑、保存加载都没有问题再加大数据量和模型规模。很多新手一上来就训练大模型跑到一半才发现图像预处理有 bug既浪费时间又浪费资源。数据和模型文件分目录管理。输入图片、标注文件、日志、权重、下一次实验的输出结果尽量不要堆在同一层目录。一个项目目录建议分成data、src、models、outputs几个模块。批量任务要用日志记录每个文件的成功与失败状态失败时保留错误信息方便重试。固定随机种子可以提升实验可复现性。训练前做小批量对比时把 PyTorch、NumPy 和 Python 的随机种子统一固定结果才可比。import random import numpy as np import torch def set_seed(seed42): random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) if torch.cuda.is_available(): torch.cuda.manual_seed_all(seed)接口服务要注意安全边界。如果服务只在本机用保持监听127.0.0.1即可如果要部署到服务器加上 Token 校验、访问频率限制。任何上传上来的图片、文本、语音都要考虑隐私和合规问题不要用真实用户的敏感数据训练可公开的模型。发布模型前要做效果复核。训练集表现好不代表真实场景稳定至少要准备一套独立验证集覆盖不同光照、不同噪声、不同输入长度的情况。开源模型如果要用在商业产品里务必确认许可证条款避免法律风险。12. 总结与下一步PyTorch 最值得花时间学透的就是三个核心知识点Tensor 张量操作、autograd 自动微分、nn.Module 模型构建。把这三块弄明白后面学 CNN、RNN、Transformer、Diffusion 都会顺畅很多。建议按这个顺序快速验证自己的掌握程度先创建环境并装好 GPU 版 PyTorch再跑一遍 MNIST 训练循环然后尝试修改网络结构和 batch size最后把模型保存并通过 FastAPI 接口返回预测结果。如果这四步都能独立完成说明 PyTorch 的基本使用已经没问题了。最容易踩的坑是环境问题——要么装成 CPU 版要么模型和数据没迁移到 GPU要么忘记model.eval()。这些坑都不是算法问题但会消耗大量调试时间建议把第 10 节的排查表收藏备用。下一步可以继续扩展的方向有很多图像方向可以做目标检测和图像分割文本方向可以做分类和情感分析语音方向可以做识别和合成时序方向可以用 TCN、LSTM、Transformer 做股票预测或异常检测。也可以把它接入业务系统做成批量处理图像或文本的 API 任务。PyTorch 的生态足够大学会这层基础后续读论文复现代码、在开源模型上做微调都会轻松一些建议先按文章里的代码跑通一遍再根据自己的数据扩展模型。