大模型训练后的结果是怎么存储的

模型与算力

讲清大模型训练完之后权重和结果文件到底存成了什么、存在哪、怎么读,帮你分清 checkpoint、safetensors 和量化文件的区别。

很多人第一次拿到训练产物会懵:目录里一堆 bin、safetensors、json,还有一个几十 G 的文件夹,不知道哪个才是「模型」,也不知道能不能直接拷给别人用。这篇按存储形态、文件结构、硬件与版本三条线拆开讲,给你一套照目录就能对上号的判断顺序,最后附上选型和排查动作。

第一次打开训练产出目录的人基本都会愣一下:一堆名字相似的 bin 和 safetensors,一个不知道装什么的子文件夹,外加几个 json。想拷给别人用,又怕漏东西或者拷错,最后干脆整个几十 G 全打包发过去。其实这些文件各司其职,搞清楚「哪几样是推理必需、哪几样只是续训残留」,目录一眼就能对上号。

下面按存储形态、文件格式、存放位置、跨环境读取、收工核对五条线拆开讲,每条都给你能直接执行的判断动作。数字类的东西(体积、耗时、显存占用)跟具体模型和精度强相关,这里不写死,需要横向比的时候去站内页面看当时的记录。

训练结束到底存下了哪几样东西

先把「一次训练会写出什么」分清。完整可加载的模型是权重的张量数据、模型结构的配置文件、分词器与词表三样一起组成的。少任何一样,加载脚本都会在启动阶段直接报错。只把权重文件拷走是最常见的踩坑方式,因为它是目录里体积最大、看起来最像「模型本体」的那一个。

  • 推理必需三件套:权重张量、结构配置、分词器与词表;三个都在才叫能直接加载的模型
  • 续训用的额外产物:优化器状态、学习率调度状态、训练步数记录;推理完全用不到,但体积经常超过权重本身
  • 微调场景还多一层:LoRA 之类的适配器只是增量参数,必须跟基座权重合并、或者在运行时挂载才能生效
  • 判断口径很简单:看目录里有没有配置文件和分词器文件,有才是完整模型,只有权重的那是半成品

常见权重格式,各自适合谁

权重格式主要分三类:单文件全量式、分片式、量化式。分片不是为了压缩,而是为了绕开单文件体积上限,同时方便多线程下载和断点续传,加载时靠一个索引文件把各片拼回同一个模型。所以看到一堆编号分片别慌,关键是找索引文件在不在。

格式类型典型特征适合谁什么情况下别用
原生序列化格式单个或分片大文件,生态兼容广继续训练、权重合并、需要改结构的场景不确定来源时别直接加载,它会执行序列化内容
安全张量格式结构相似但加载更安全、更快纯推理部署、对外分发、生产环境要做结构魔改或深挖内部状态时选择有限
量化格式体积明显小,精度有损显存吃紧的单机推理、本地跑还要继续训练或做合并的场景,回不去原始精度

选型时的优先顺序是:先确认下游要干什么,再挑格式,而不是先下载再研究能不能用。要部署就优先安全格式,要接着训就守住原生格式,要省资源才考虑量化。

存在哪:本机、对象存储还是模型仓库

存放位置决定三件事:谁能访问、重启会不会丢、加载快不快。本地目录看着最直接,但容器里的路径经常挂的是临时卷,训练跑完没确认落盘位置就关机,产物可能随容器一起消失,这个坑很常见。

  1. 固化输出路径在训练脚本里写死一个输出目录,并要求脚本在结束前打印绝对路径。别依赖框架默认值,默认值随版本和启动方式变。
  2. 确认真的落盘进程退出前对该目录执行一次列表和大小核对,确认分片数量、索引、配置、分词器都在,不只看得见文件夹。
  3. 决定共享方式多人或多机要用就放对象存储,好处是带版本和权限、方便分发;代价是每次加载都要拉取,冷启动明显更慢。
  4. 对外分发先看许可放模型仓库之前确认许可证和访问权限,不是所有训练出来的权重都能公开传,训练数据来源也会限制分发。

换框架换卡之后还能不能读

权重本身只是一堆张量,不跟某张卡绑定,真正会影响能不能直接加载的是精度类型和并行切分方式。半精度换到只支持整型的推理框架、或者训练时按某种张量并行切分过,加载脚本就可能直接报维度或类型错误。

遇到加载报错,按固定顺序排查,别一上来就怀疑权重损坏:先看格式是否被目标框架支持,再看并行度配置是否匹配,最后对比结构配置的字段版本是否一致。三件事对齐之后,多数报错自己就消失了。跨设备迁移优先用框架自带的转换脚本,手工改文件名或索引内容很容易造成静默错误——不报错,但结果悄悄不对。

不适用的情况要写清楚:如果只是换成同架构的另一张卡,先原样跑一遍再谈转换,多数情况下根本不用转。真正需要转换的是换框架、换精度类型、改并行策略这三类场景。

收工前的核对清单

  • 逐项打勾:权重分片数量与索引、结构配置、分词器与词表、许可证说明,缺一项就记下来别放过
  • 写下来源:训练数据版本、代码提交、关键超参、精度设置,放进同目录的说明文件,半年后的你自己最需要它
  • 备份两份:一份冷存一份在线,大文件用哈希校验,只比大小看不出内容损坏
  • 清理有边界:确认不再续训后再删优化器状态那类文件,但务必留一份只含权重和配置的精简版给部署用
  • 留一份精简版的意义:部署环境不需要任何续训残留,文件越少,加载和排查都越快

这套动作的价值不在「整理得好看」,而在于别人接手、或者你自己几个月后重跑时,不用再靠猜。各格式的体积、加载耗时这类数字跟模型规模强相关,需要量化比较时到站内页面核对当时的记录,别拿记忆里的数值做判断。

下一步想横向比较不同模型和格式的实际占用与加载表现,直接去站内实测页看当时的记录,再回来决定给部署留哪一版文件。

常见问题

训练完目录里有一堆 bin 文件,必须全部保留吗?

如果只是拿去推理,保留权重分片、索引、配置和分词器这四类就够了。带优化器状态的那部分通常只在你要接着训练时才有意义,确认不再续训就可以单独归档或删掉。删之前先在同目录留一份说明,写清哪份是推理用、哪份是续训用,免得以后自己都分不清。

safetensors 和 bin 到底该用哪个?

优先 safetensors:加载时不执行序列化代码,安全性和加载速度都更好,也是现在分发的主流。bin 不是不能用,只是来源不明时风险更高。不确定就用加载一遍的方式验证——能正常起服务、输出不异常,基本就是对的,具体格式支持情况到模型库页面按框架对一遍。

权重文件能不能直接拷给同事用?

技术上通常可以,但先看两件事:一是许可证是否允许再分发,部分权重只给使用权不给传播权;二是对方环境的结构配置、精度和并行度是否一致,不一致会加载失败。稳妥做法是连同配置、分词器和一页说明一起打包,让对方按同样流程起一次服务验证。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。