python - <<'PYCODE'
import json
from pathlib import Path
for name, keys, expected in [
('pretrain.jsonl', ['text'], 575),
('sftdata.jsonl', ['instruction', 'input', 'output'], 495),
]:
rows = [json.loads(s) for s in (Path('/data/data')/name).read_text().splitlines() if s.strip()]
assert len(rows) == expected, (name, len(rows))
assert all(all(k in r for k in keys) for r in rows), name
print(name, len(rows), '条,字段检查通过')
PYCODE
PaperScope
Academic Paper Classification with InternLM
基于 InternLM 的学术论文分类实战(沐曦 GPU)。
本教程使用 VS Code 连接远端沐曦 GPU 开发机,完成环境配置、论文数据准备、LoRA 领域适配、分类指令微调和模型推理。学习者需要具备基本的终端操作能力,并准备支持 SSH 登录的 GPU 容器。
项目目标
学生任务
自行寻找并整理论文训练数据,基于统一的 InternLM2.5-1.8B-Chat 模型完成分类微调,提交模型 adapter、数据和训练配置。教师使用不公开的统一测试集评测并打分。
教程演示两阶段训练;课程作业采用单阶段 LoRA SFT,便于统一加载和评测。具体要求见 学生任务与提交要求。
目录
1. 环境介绍
1.1 软件与硬件要求
本文配置面向以下沐曦软件栈。创建开发机时应核对镜像版本;其他版本需要重新确认兼容性。
/opt/conda/bin/python3.10,3.10.102.8.0+metax3.5.3.90.16.5+9e364b1b.maca3.5.3.5容器分配的显存可能小于显卡物理显存,请以容器实际配额为准。Python 环境需要继承镜像中的沐曦 PyTorch,因此应选用预装厂商软件栈的镜像。
1.2 任务和训练流程
输入论文标题、作者与摘要,模型输出对应学科类别。训练使用 InternLM2.5-1.8B-Chat,分为两个阶段:
目录中的
pretrain指领域适配阶段,不是从零预训练。按照配套数据和配置,两个阶段分别包含 575 和 1485 个训练迭代。2. 算力获取与 VS Code 连接
2.1 领取算力券并创建实例
0. 领取算力
进入对应通道,按页面提示完成领取。领取条件、券的使用范围和有效期以活动页面为准。
1. 访问沐曦算力平台
进入 模力方舟(Gitee AI)沐曦算力平台。
2. 创建沐曦 GPU 实例
3. 准备远端连接信息
在算力平台创建符合第 1 节要求的实例,启用 SSH,并记录服务器地址、SSH 端口、用户名及登录方式。确认实例可以下载模型和 Python 软件包,且账号有权创建
/data下的目录。系统安装命令按具备管理员权限的容器编写。准备 教程配套文件包,解压后可获得配置、训练脚本、推理脚本和两份数据。将配套包与本教程一起提供给学习者。
2.2 使用 Remote - SSH 连接
F1打开命令面板,选择 **Remote-SSH: Add New SSH Host…**。F1,选择 **Remote-SSH: Connect to Host…**,选择刚添加的主机;如提示选择远端系统,选 Linux。左下角出现
SSH: 主机名称表示当前窗口已连接远端。以上操作通过 Remote - SSH 打开远端工作区。参考:VS Code Remote - SSH 官方说明。2.3 打开远端终端和工作目录
在已连接的 VS Code 窗口中选择 终端 → 新建终端,运行:
随后选择 文件 → 打开文件夹,输入
/data/paper-classify。资源管理器中的文件和这个窗口中新建的终端都属于远端开发机。后续所有 Bash 和 Python 命令均在 VS Code 的远端终端中执行。 上传、下载文件的操作会单独说明。
每次新开远端终端,先加载登录环境;虚拟环境创建完成后,再激活它:
首次操作时先跳过
source,按第 4 节创建环境。3. 开发机和目录介绍
/opt/conda/data/xtuner-env/data/models/internlm2_5-1_8b-chat/data/data/data/paper-classifywork_dirs/pretrain/hfwork_dirs/pretrain/mergedwork_dirs/sft/hfwork_dirs/sft/merged4. 安装包、模型与数据准备
依次完成软件环境、训练文件、数据和模型准备。本节依赖第 1 节的厂商镜像及其基础包,不适用于未配置 GPU 软件栈的纯 Ubuntu 镜像。
4.1 系统工具和 Python 环境
仅在缺少基础工具时执行:
使用镜像自带的 Python 创建环境,以继承沐曦 PyTorch;保留厂商 PyTorch,避免安装普通 CPU/CUDA 版本将其覆盖。
应看到
/data/xtuner-env/bin/python和2.8.0+metax3.5.3.9。--system-site-packages用来继承镜像中的厂商 PyTorch。4.2 安装训练依赖
安装与上述软件栈匹配的固定版本。使用
--no-deps避免依赖解析替换厂商 PyTorch;这不是适用于任意裸 Ubuntu 的通用依赖清单。镜像需要提供 NumPy 1.26.4、datasets 4.8.4、SciPy 1.15.3 等基础包。若镜像不同、出现缺包,请先核对版本,不要直接升级整个环境。即使不用 ZeRO,XTuner 启动也会导入 DeepSpeed,因此厂商版 DeepSpeed 仍需安装。
4.3 GPU 和关键导入检查
沐曦兼容层也使用
torch.cuda接口。4.4 上传配置、脚本和数据
配套包中的配置已经使用本文约定的目录。请保持文件名和路径一致。
pretrain_metax_16g.py/data/paper-classify/sft_metax_16g.py/data/paper-classify/run_full_training.sh/data/paper-classify/validate_final_model.py/data/paper-classify/restore_from_adapters.sh/data/paper-classify/data/pretrain.jsonl/data/data/pretrain.jsonldata/sftdata.jsonl/data/data/sftdata.jsonl在 VS Code 远端资源管理器中打开
/data/paper-classify,将解压后的五个脚本文件从电脑文件管理器拖入这个文件夹。通过 文件 → 将文件夹添加到工作区 添加/data/data,再把两份 JSONL 数据拖入该目录。文件较多或拖拽不可用时,也可以使用算力平台的文件上传入口,上传到表中相同位置。确认上传完成后,在远端终端校验数据:
4.5 下载原始模型
等待下载完成;基础模型约 3.6 GiB,包含配置、Tokenizer、模型代码和两个 safetensors 权重分片。不要在下载未完成时开始训练。
5. 开启训练
5.1 正式配置为何这样设置
这里使用 BF16 LoRA,不使用 bitsandbytes 4bit、FlashAttention 或 DeepSpeed ZeRO。SFT 使用
internlm2_chat模板。请直接使用配套配置文件,避免遗漏模型路径、数据模板或优化器设置。5.2 推荐:后台运行完整流水线
只在尚无正式训练输出的工作目录启动。脚本检测到已有正式
.pth会停止,以免误覆盖;如要重新实验,先备份并迁移旧的正式输出,确认没有训练进程运行后再开始。必须保留
bash -lc:登录环境会加载 MACA 的路径设置。nohup能避免普通 SSH 断开终止任务,但不能抵御容器重启或释放。查看进度:
流水线依次运行
pretrain、pretrain_convert、pretrain_merge、sft、sft_convert、sft_merge。各阶段日志位于logs/对应阶段.log。启动返回 PID 不代表完成。完成后
pipeline.status应包含:5.3 学习用:拆开执行六步
这是 5.2 的替代方式,不要和后台流水线同时运行,也不要在完成后再重复运行。以下检查点编号对应本文同一份数据和配置;改变样本数或 epochs 后必须换成实际保存的编号。
逐条执行并检查是否报错。最后一步基础模型必须是
work_dirs/pretrain/merged,不能重新指向最初下载的模型,否则无法保留完整的两阶段训练链路。6. 模型推理与论文分类
6.1 加载训练完成的模型
脚本加载最终模型,对自然语言处理和量子物理两篇示例论文生成分类,并将结果写入
final_model_validation.json。对应类别分别为 D 和 J,可将生成结果与类别含义对照。这是推理演示,不能代替独立数据集的准确率评测。流水线不会自动运行此验证脚本,训练完成后需要单独执行。
6.2 输入自己的论文
最终模型可能保存为两个
.bin分片;不要求一定出现.safetensors。通过实际加载和生成判断模型是否有效。7. 常见问题
/opt/conda/bin/python3.10创建继承系统包的 venv+metax版;不要覆盖NoneTypebash -l;后台任务用bash -lc.pth出现 weights-only 加载错误TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1pip check显示 vLLM、OpenCV 等冲突pretrain/mergedGPU 检查失败时,先核对
MACA_PATH、厂商 torch 版本和容器 GPU 配额。对应软件栈的登录环境中MACA_PATH=/opt/maca。如果不是同一镜像,停止照搬安装步骤并重新核对厂商依赖。8. 备份与恢复
8.1 保存两阶段 adapter
训练完成后,在远端终端执行:
在算力平台文件管理器中下载压缩包及校验文件,并保存在容器之外。这个包可以恢复推理模型,未包含原始模型、训练数据、完整合并权重和优化器检查点。两阶段 adapter 必须一起保留。
8.2 在新开发机中恢复模型
按第 2—4 节准备环境并下载同一原始模型,通过文件上传入口将压缩包和校验文件上传到
/data,然后执行:校验成功会显示
OK。恢复输出目录/data/paper-classify-restored必须尚不存在;最终模型位于/data/paper-classify-restored/final。将推理代码中的path改成这个目录即可使用。environment-freeze.txt用于记录版本,不能直接作为另一镜像的通用安装清单。8.3 保存完整工作目录
需要保留数据、检查点和完整合并模型时,先确认训练进程已经结束,并检查存储空间:
通过平台文件管理器下载备份后再释放容器。数据盘是否在重启、释放后保留取决于平台存储策略,不能将容器内文件作为唯一副本。
9. 模型发布与评测
9.1 模型发布(可选)
训练和推理不依赖模型发布。若需要分享模型,可以在支持的模型托管平台创建自己的模型仓库,并上传
work_dirs/sft/merged目录内的模型、配置、Tokenizer 和模型代码,同时补充模型说明、使用方式与许可信息。只分享 adapter 时,应注明原始模型标识及“两阶段依次合并”的使用方式。
9.2 独立评测
准备未参与训练的有标签论文数据,保持标题、作者、摘要及分类选项的提示格式一致,逐条生成分类。统计总体准确率、各类别表现与混淆情况,用于判断模型对新论文的分类能力。
完成本教程后,应得到最终模型目录
work_dirs/sft/merged,能够输入论文信息获得分类,并将训练成果备份到容器之外。