训练程序启动了,显卡却经常空闲;数据只增加了 20%,每轮训练时间却翻倍;模型恢复成功,验证分数却无法复现。这些现象都可能与存储有关。AI 存储关心的不只是“放得下多少文件”,还包括样本能否及时到达计算设备、训练状态能否可靠保存,以及结果能否对应到确定的数据版本。本课从公开数据集上的普通分类任务出发,建立测量、判断与选择的方法。
1 AI 存储要关注什么
先想象 3 个任务。用 UCI Bank Marketing 数据集预测客户是否订阅定期存款,输入包含年龄、职业、历史联系次数等字段;用 CIFAR-10 做图像分类,输入是图像和类别标签;用 AG News 做短文本分类,输入是新闻标题、正文与类别。它们都要读取样本、转换输入、组成批次,再交给模型,但存储压力并不相同。表格可能整体装入内存,图像可能被拆成大量文件,文本则可能把时间花在分词与填充上。
对这些任务,首先写清楚预测发生的时刻。Bank Marketing 的通话时长字段 duration 在通话结束后才知道;如果目标是在拨号前决定联系谁,就不能把它作为可用特征。即使某次读取优化使训练快了 30%,包含这种未来信息的 AUC 也不能说明模型能服务真实业务。存储系统需要保留字段定义、生成时间和数据来源,才能支持这类检查。读取正确的数据,比更快地读取错误的数据更基础。
其次区分数据量、样本数与文件数。100 GB 可以是少量连续文件,也可以是大量零散文件。前者往往容易顺序读取,后者可能不断等待文件查找。再区分原始数据与训练输入:压缩图像在磁盘上很小,解码成像素数组后会膨胀;文本原文、分词结果和填充后的张量也有不同大小。只拿下载包的体积估算训练带宽,通常缺少关键条件。
训练的数据路径可以写成“持久保存的数据集→读取→解码或分词→组成批次→设备计算”。模型输出的另一条路径是“训练状态→检查点→恢复”。前者影响训练是否持续前进,后者影响失败之后能保住多少进度。验证和测试还需要稳定的数据版本,防止比较的其实是不同输入。存储方案应同时回答速度、可靠性和可追溯性,而不能只给出 1 个容量数字。

本课使用的时间、容量和性能数字都是便于推理的教学假设,公开数据集名称用于说明真实任务。实际报告应记录机器配置、数据格式、代码版本和测量方法。判断方案是否有效时,把样本吞吐、训练时间、等待时间与模型质量放在一起看:吞吐变高但验证 F1 明显下降,可能是标签对应错了、部分样本被跳过,或者数据切分变了,不能直接宣布优化成功。
2 吞吐、元数据与小文件
吞吐表示单位时间完成多少工作。存储常用 MB/s,训练常用样本/s,两者需要通过平均样本大小联系起来。假设每个批次包含 128 张图像,训练每秒消耗 4 个批次,磁盘上每张图像平均 100 KB,忽略额外开销时,持续读取需求约为 51.2 MB/s。这里约定 KB、MB、GB 按十进制换算。若实际读入的是未压缩数组,就必须换成该表示的大小,不能沿用压缩文件的数字。
带宽足够不等于每次请求都很快。读取文件之前,程序可能先列目录、查找路径、检查权限、打开文件并取得大小。这些用于描述和定位数据的信息叫元数据。大文件能把这些固定开销分摊到较多字节上,小文件却可能每读几 KB 就重新付出成本。假设每次打开和定位平均花费 2 ms,单个串行读取者每秒最多完成约 500 次这样的操作;即使设备还剩很多字节带宽,样本供给也可能已经受限。
目录扫描也要单独看待。程序在启动时遍历全部文件并建立样本列表,可能让第 1 个批次迟迟不到达,但后续训练还算流畅。另一个程序启动很快,却每取 1 个样本都反复查询远端信息,因而持续卡顿。这是不同问题。前者可以考虑保存清单、避免每次重扫;后者要检查访问粒度和读取方式。只报整轮平均时间,会把启动等待与持续等待混在一起,难以定位。
把小文件组织成适当大小的数据分片,是常见改进。分片就是把一组样本放在同一容器中,通过索引或顺序遍历取出。它能减少打开次数和请求次数,但会增加格式管理责任:必须保存样本标识、标签关系、记录边界与校验信息。也不能把全部数据拼成 1 个巨大文件就算完成,因为任务可能需要并行读取、局部重试和样本打乱。合理的分片大小要结合读取库和实验测量选择。

增加读取工作进程可以重叠部分等待,但不是无限有效。进程越多,可能出现更多同时打开的文件、重复缓存、内存占用和存储竞争。对同一份数据,依次测量 0、2、4、8 个工作进程,观察吞吐是否还在增长,往往比直接设置很大的并行度更有价值。如果 CPU 已经忙于解码,换更快的磁盘可能无效;如果每次远端请求都很慢,只加解码进程也未必有帮助。
最后,要区分“随机顺序训练”与“对远端存储进行细粒度随机读取”。训练需要打乱样本以减少顺序偏差,但读取实现可以先打乱分片顺序,再在有限缓冲区中打乱样本。是否适用要看任务要求,不能默认这种近似打乱与全量随机排列完全等价。任何格式调整都应检查标签比例、重复样本和训练曲线,避免用改变学习问题的方式换取速度。
3 检查点、数据集与缓存
数据集、缓存和检查点解决不同问题。数据集是训练依据,需要明确内容和版本;缓存是可以重新生成的加速副本;检查点记录训练进度,用于继续运行。把它们混在同一目录里,常见结果是清理缓存时误删恢复点,或把旧预处理结果当成新数据使用。平台应说明每类文件由谁生成、保存多久、能否删除,以及丢失以后从哪里恢复。
先固定数据切分。对 AG News,可以从官方训练集合中划出训练集与验证集,例如按类别分层采用 90%/10%,并保留官方测试集到最终评估时使用。对 CIFAR-10,也可以在官方训练集合内划出验证集,保留官方测试集。这里的比例是实验选择,不改变官方测试集的角色。保存样本标识清单比只记“随机切分过”更可靠,因为数据顺序或库版本变化可能使同一个种子产生不同的实际输入。
如果用表格数据做 70%/15%/15% 的训练、验证、测试切分,要先判断是否存在时间关系或重复实体。同一客户的多次记录不应随意散落在不同集合中;目标是预测未来时,应优先考虑按时间划分。缺失值填充、标准化和词表构建等需要学习数据统计量的操作,只能在训练集上拟合,再应用到其他集合。预先用全量数据计算统计量并缓存,会把泄漏固化成看似便利的文件。

缓存键可以包含原始数据版本、切分清单摘要、预处理代码版本和相关参数。比如 AG News 的分词规则、最大长度改变后,旧分词缓存就不能直接复用;图像从 32×32 改为另一种尺寸,也需要重新确认缓存含义。随机增强通常要保留训练期间的变化,若只缓存增强后的固定图像,可能意外减少样本多样性。确定性预处理与随机增强应分别设计,验证和测试则要使用稳定的处理流程。
检查点通常包含模型参数、优化器状态、当前训练步数,以及恢复所需的随机状态等信息。仅保存模型权重常能用于推理,却不一定能准确接续训练。某些加载器还需要记录数据遍历位置;初学阶段可以约定从已完成的轮次边界恢复,并明确中途样本可能重放。不要承诺任意时刻都能无缝接续,却只保存了权重文件。检查点还应引用数据版本和训练配置,防止恢复到另一份数据上而无人察觉。
保存完成应有清晰标志:先写入独立临时位置,完成校验后再发布“可恢复”的清单或标志文件。具体发布方式要符合底层存储语义,不能假设所有存储都支持文件系统式的原子重命名。恢复时读取已确认完整的版本,并做实际加载演练。缓存可重建不代表不需要成本预算,重建可能占用数小时;检查点有副本也不代表可靠,至少要证明最近 1 份能被程序成功读取。
4 动手:测量一次数据加载瓶颈
选择公开图像分类任务作为实验,固定一份 CIFAR-10 训练子集与样本顺序,比较现有文件组织和分片组织。这里测量的是加载能力,不据此报告模型精度。先把实验条件写成记录:样本数量、磁盘格式、批次大小、工作进程数、变换步骤、缓存状态和机器配置。使用相同子集与相同变换,才能把时间差合理归因于读取组织方式,而不是偷偷减少了解码工作。
将测量拆成 3 段:数据集对象初始化、首批次到达、稳定加载阶段。下面代码可接在已有的 PyTorch DataLoader 之后,其中 loader 应在计时前构造完成。它只测 CPU 端批次交付,不包含设备传输、模型计算和数据集对象初始化。批次约定为“输入张量、标签张量”,若项目采用字典结构,需要相应调整计数位置。实验至少需要预热批次加测量批次那么多数据。
import time
warmup_batches = 10
measure_batches = 100
iterator = iter(loader)
for _ in range(warmup_batches):
next(iterator)
waits = []
samples = 0
start = time.perf_counter()
for _ in range(measure_batches):
before = time.perf_counter()
inputs, labels = next(iterator)
waits.append(time.perf_counter() - before)
samples += len(labels)
elapsed = time.perf_counter() - start
ordered = sorted(waits)
p95 = ordered[int(0.95 * (len(ordered) - 1))]
print({"samples_per_second": samples / elapsed,
"batch_wait_p95_seconds": p95})
如果数据不足,程序会抛出 StopIteration,应减少测量批次数并在各方案中保持一致,不能悄悄循环重复数据后仍声称测量了完整数据集。预热是为了观察运行稳定后的表现,但不能因此省略启动成本。真实训练只运行很短时间时,初始化和预热可能占主要部分;训练很多轮时,稳定阶段则可能更重要。应把这些时间分开报告,而不是只挑最好看的数字。
再做端到端对照:保留相同模型、批次大小和更新步数,用实际数据训练,记录每步耗时和设备等待;然后用形状、数据类型和放置位置都明确的合成输入测量计算基线。设备计算往往异步执行,计时边界必须使用框架提供的同步方法,否则可能只量到了任务提交时间。合成输入基线用于缩小排查范围,不能作为模型质量验证,也不能把时间差全部认定为磁盘问题,解码和传输同样在数据路径上。

每种配置重复 3 次,报告中位数以及波动范围,注明数据是否已经进入系统缓存。第 1 次读取和紧接着的第 2 次读取可能走不同路径,这种差异本身就是结果。不要在共享机器上为了制造冷缓存而随意清空全局缓存,可以改用独立实验环境或明确标注测量限制。最后一次只改变 1 个因素,例如仅将工作进程从 2 改为 4。若吞吐没有增长,就保留证据并转向下一个假设。
5 容量与带宽取舍
容量规划应从生命周期展开。原始数据、处理后的数据、切分清单、训练缓存、检查点和临时文件都占空间。假设原始数据为 200 GB,处理后副本为 300 GB,本地缓存为 100 GB,每个检查点为 8 GB,保留最近 3 份,则这些内容合计 624 GB。若保存新检查点时旧版本仍保留,写入期间还会短暂增加至少 8 GB;下载、转换和重试也可能产生额外临时文件,不能把磁盘填到刚好等于静态总量。
持久存储与本地缓存应分别估算。缓存中的 100 GB 可能只是持久数据的一部分副本,但它仍真实占用本地盘;若同时运行 4 个训练任务,而每个任务各建独立缓存,本地容量可能随并发增长。共享缓存能减少重复内容,却需要处理版本隔离、清理时机和访问竞争。初学阶段可以先采用任务级缓存并写清上限,再根据观测决定是否共享,不必一开始设计复杂的分布式缓存系统。
带宽规划则从消费速度倒推。假设每个训练工作进程每秒消耗 4 个批次,每批 128 个样本,源文件平均 100 KB,并发训练工作进程数为 4,则未命中缓存时总读取需求约为 204.8 MB/s。这里的工作进程指独立训练消费者,不能与 DataLoader 的读取进程混为一谈。若数据格式变化使平均读取字节数减半,应重新计算,不能只用样本数比较不同格式的带宽需求。
缓存命中率为 75% 时,按平均字节量估算,远端承担约 25% 的读取需求;但启动阶段可能全部未命中,且多个任务可能同时启动。平均值能用于预算,不能保证每个时刻都够用。读取还会受到单次请求延迟、并发上限和热点影响。滑块给出的“够用”只表示简化的字节带宽条件通过,不能替代实际样本吞吐测试,尤其不能直接用来承诺训练时间。

检查点写入也会消耗共享资源。若每 10 分钟写 8 GB,平均写入速率看起来不高,但真正保存时可能集中占用数秒到数10秒,与训练读取竞争。应该测量保存期间的批次等待,并说明训练是否暂停。异步保存能够重叠部分工作,却需要额外内存和一致性保证,本课只要求识别它不是免费的。先选择可恢复、可解释的保存方式,再根据证据优化。
选择方案时可以先列约束:持续样本吞吐达到目标,冷启动不超过可接受时间,峰值空间留有余量,失败损失的训练进度在容忍范围内。满足这些条件后再比较成本。便宜的容量如果让昂贵计算设备长期等数据,整体可能更贵;过度缓存只使用 1 次的数据,也可能浪费空间。把存储费用、计算等待和重建时间放到同一实验周期里,取舍才有实际依据。
6 常见坑:用对象存储硬扛训练随机读
对象存储适合通过对象标识保存和获取数据,适合承载可版本化的数据集、分片和检查点。但训练框架可能期待目录遍历、频繁打开文件与零散读取。如果把大量小对象直接伪装成普通目录,每个样本都跨网络发起请求,就可能把请求延迟放大到训练主路径。问题来自访问方式与接口特征的组合,不能根据“远端容量很大”推断它能够无代价地替代本地随机读。
假设单个请求平均往返需要 20 ms,每次只获取 1 个 10 KB 样本。串行状态下,理论上每秒只能完成约 50 次这样的请求,得到约 0.5 MB/s 的有效载荷。这个估算忽略了传输和处理时间,只用于说明小请求如何放大固定等待。增加并发可能改善吞吐,但会引入连接管理、重试和更多在途内存;服务端与网络也有各自限制,不能把并发数当成无上限的速度旋钮。
常见改法是保留远端作为持久来源,在启动或运行期间把需要的数据分片拉到本地,再进行适合训练的读取。若只使用数据集的一部分,可以按需缓存,但要避免多个进程同时重复下载同一分片。每份缓存应校验完整性,下载未完成的文件不应对读取者显示为可用。网络失败后应有有界重试和清晰报错,不能无限等待,也不能静默跳过样本继续训练。
静默跳过尤其危险。假设某些类别的图像更大、下载更容易超时,跳过失败样本后,训练集类别比例会发生变化。最终准确率可能仍然好看,但少数类别的召回率下降。每轮应记录计划样本数、实际成功数、失败数和按类别统计;需要丢弃不完整末批次时,也要与加载错误区分。样本覆盖率属于数据正确性指标,不只是运行日志里的附带数字。

不要把所有卡顿都归因于对象接口。若本地完整副本仍然同样慢,应检查 CPU 解码、分词、增强以及批次组装;若加载单测快而训练慢,应检查设备传输与计算同步;若只有启动慢,应看目录清单和首次填充缓存。每条结论都应配一个能否证它的对照实验。未经测量就引入缓存服务,可能只增加新的维护对象,原来的 CPU 瓶颈仍然存在。
还要保留适用边界:对象存储并非不能支撑训练。较大的顺序分片、合适的并行度以及与读取库匹配的格式,常能很好地供给数据。小型表格任务甚至可以在启动时下载后整体读入内存。课程要纠正的是把未经适配的细粒度随机读取直接搬到远端的习惯。最终应以代表性任务的吞吐、尾部等待、完整性和成本记录决定是否采用某条路径。
7 案例:百万小文件打爆元数据
一个图像分类团队准备了 100 万个平均 40 KB 的训练文件,总有效载荷约 40 GB。这个规模是案例设定,不是 CIFAR-10 的原始规模。团队可用自己的授权图像集做相同实验;使用公开小数据集演示时,应明确缩小规模,不能重复复制后仍把样本当成彼此独立的训练证据。案例的重点是文件数量与元数据操作之间的关系,而不是制造一个看起来庞大的数据集。
假设原方案启动扫描耗时 18 分钟,稳定供给为 260 样本/s。设备处理合成输入可以达到 1800 样本/s,而真实训练经常等待。团队最初想提升存储带宽,但监测发现实际字节吞吐很低,路径查询和打开操作很多。仅凭这些现象还不能定案,于是他们从同一切分清单选取固定子集,将解码结果丢弃,只比较“读取原始字节”和“读取后解码”的时间,以区分文件访问与 CPU 处理成本。
结果假设表明,只读原始字节仍然慢,去掉解码改善有限;同样的样本放到本地后有所改善,但大量打开操作依然明显。这个证据支持优先减少文件级开销。团队把样本打包成每份目标约 256 MB 的分片,约需 157 份,实际份数取决于记录开销和边界处理。每条记录包含稳定样本标识和标签,分片清单记录字节大小、样本数与摘要,读取器支持检查缺失和损坏。
打包以前先根据稳定标识完成训练、验证、测试切分,再分别生成分片,避免某个大容器同时装入多个集合而被读取器误用。图像近重复、同一主体的多张照片仍需按任务做分组或去重;文件打包本身不会消除泄漏。缓存目录也按数据版本区分,旧分片不能因为名字相近就混入新实验。打包顺序若按类别排列,还应检查打乱策略是否足以避免长时间只看到同类样本。
完成后,假设启动时间降到 2 分钟,稳定加载达到 1450 样本/s。报告同时列出读取进程数、缓存状态和变换配置,不能把示例数字当成任何系统的保证。1450 与 1800 的差距也不能直接等同于剩余磁盘损耗,因为真实训练还包含增强和传输。此时应重新观察瓶颈,可能已经转移到解码或计算;继续调整分片大小未必会产生收益。
质量验证沿用相同切分清单与训练预算,核对成功读取样本标识集合、各类别计数和标签映射,并比较固定验证集上的宏平均 F1 与各类别召回率。为了判断是否存在稳定差异,可在相同训练设置下使用多个预先指定的随机种子。宏平均 F1 给予各类别相同权重,适合帮助发现某类被忽略的情况,但仍要查看各类结果,单个汇总数字无法解释所有错误。
这个案例的可迁移结论是:容量很小的数据也会因文件数量过大而难以高效供给。修复成功需要同时看到元数据开销下降、样本交付更快和数据语义保持正确。分片格式、索引与生成脚本都是后续维护内容,应纳入版本管理。若之后改为需要频繁检索单张图像的交互应用,还要重新评估访问方式,不能直接沿用面向训练扫描的布局。
8 把 AI 存储写进平台方案
平台方案应把“支持 AI 训练”展开成可验收的场景。可以选择 3 个代表任务:小型表格二分类、图像多分类、短文本多分类。每个任务写明数据版本、切分方式、可用特征、批次大小、并发任务数和读取变换。表格任务检查数据能否一次载入与统计量缓存是否隔离;图像任务检查解码和小文件开销;文本任务检查分词缓存以及长度分布带来的内存变化。
模型质量的验收也要与任务对应。Bank Marketing 的正类通常不是多数类,报告精确率与召回率时,应明确正类含义和阈值。精确率回答预测订阅的客户中实际订阅的比例,召回率回答实际订阅客户中找回多少;F1 综合二者,AUC 则需要预测分数,反映阈值变化下的区分能力。阈值选择使用验证集,测试集留作最终评估。不能用“全预测不订阅”的高准确率掩盖少数类失效。
对 AG News 或 CIFAR-10,可以给出宏平均 F1、各类别召回率和混淆矩阵,再把性能结果与存储观测对应起来。若某次缓存升级后只有某类召回率下降,应检查该类样本是否缺失、文本是否被截断、标签编号是否变化。存储验收不负责保证某个固定模型分数,但有责任证明样本集合和预处理含义符合约定。模型指标是发现数据路径错误的一类证据,不能替代内容校验。
可验收的存储目标要写条件。例如“在指定机器、指定数据分片、4 个并发训练消费者下,稳定供给达到目标样本/s,并分别记录冷启动和热缓存结果”。再配上批次等待高分位数、读取失败率、样本覆盖率和检查点保存耗时。阈值应来自代表性实验与业务等待容忍度,不应从通用宣传页摘取。遇到未达标的情况,记录瓶颈归属及下一项对照实验,比简单填写失败更有用。
恢复目标应翻译成训练语言:最多能接受丢失多少分钟的进度,从哪个已验证的检查点恢复,恢复需要多久。如果每隔 10 分钟发起保存,而保存完成需要 2 分钟,失败时距最近完整检查点的间隔可能超过 10 分钟,还要考虑失败的保存尝试。方案应关注完整检查点之间的实际间隔,并通过中断演练测量恢复过程,不能只引用配置里的保存周期。
责任边界也要具体。数据负责人确认授权、字段含义和切分原则;训练负责人提供读取脚本、模型输入约定和可复现实验;平台负责人提供容量配额、缓存清理、监测与恢复机制。含客户信息的表格数据应控制访问并按要求处理,缓存和检查点也应纳入同样的权限边界。日志优先记录样本标识或摘要,避免为排查性能而随意输出原始敏感内容。
最后给出最小交付清单:数据清单与摘要、切分清单、预处理版本、性能记录、检查点恢复记录和清理策略。这些材料让下一位使用者知道“读了什么、为何这样读、失败后怎么办”。先把少量代表任务做好,再扩展到更多训练框架和更大并发,平台方案就能从实测证据生长,而不是只堆叠存储组件名称。
9 从AI 存储走向MLOps 进阶(A52)
到这里,我们能够解释某次训练为什么等数据,也能保存可恢复的进度。但模型交付不是只运行 1 次训练。数据更新后需要重做预处理,代码修改后需要重跑比较,模型上线后还需要知道输入是否变化。MLOps 进阶关注这些步骤如何形成可管理的过程。存储提供稳定的数据与产物基础,后续流程则把版本、实验、发布和监测连接起来。
先给一次训练建立明确身份。实验记录引用数据版本、切分清单、预处理配置、代码版本、随机种子和运行环境;训练产物引用检查点位置、摘要与验证结果。如果只保存一个名为 final 的文件,下一次覆盖后就无法解释旧报告。实验身份不一定需要复杂服务,初期可以用受版本管理的配置与不可覆盖的输出目录,但命名和引用关系必须清楚。
数据版本固定不等于数据永远合适。例如 Bank Marketing 的客户来源、联系渠道和活动策略可能变化,旧数据上的 AUC 不能保证新时期仍然成立。AG News 的文本长度、词汇和主题表达也可能变化。分布偏移指实际输入或相关关系偏离训练时的情况。应记录特征缺失率、类别比例、文本长度等可观测量,并在获得可靠标签后重新评估精确率、召回率或 F1,不能只监测请求是否成功。
模型指标变差时,排查路径应能回到具体版本:先确认服务使用的模型,再确认输入预处理,最后核对训练数据与评估数据。若某次训练用了旧分词缓存,而服务用了新规则,问题可能来自输入语义不一致;若数据路径完整且处理一致,再研究模型或现实分布的变化。可追溯的存储布局使这些问题能通过证据排查,不必依赖参与者记忆。
复现也有层次。第 1 层是能够取回相同数据和配置,第 2 层是能够重新执行流程并得到可比较的结果,第 3 层才是讨论严格到数值级别的一致性。硬件、算子和并行执行可能带来差异,不能仅凭随机种子相同就承诺逐位一致。本课要求把影响结果的材料保存完整,并在固定评估方式下判断变化是否值得关注,深入的确定性控制留给后续学习。
为 A52 准备一个最小实验包:包含数据引用、训练配置、完整检查点、独立测试结果,以及本课的数据加载测量记录。再写明触发重跑的条件,例如预处理版本改变或数据清单更新。检查依赖发生变化时,缓存应失效,相关实验应重新评估;与变化无关的产物可以按规则复用。这里先建立依赖意识,不展开复杂的流水线调度、分布式一致性与底层实现。
进入下一课之前,读者应能把一个模型文件解释为一段过程的产物:它使用哪些样本、采用什么处理、何时保存、如何验证、怎样恢复。存储性能决定这段过程能否高效进行,版本与完整性决定过程能否被信任。后续再讨论自动化时,就有了明确对象和验收证据,而不只是把手工命令放进一个定时任务。
放进方案里
本项目以表格二分类、图像分类和短文本分类作为 AI 存储验收场景,采用公开数据或获得授权的数据。每个场景固定数据版本、样本标识、切分清单和预处理配置;官方测试集保留用于最终评估,训练统计量仅在训练集拟合。表格特征按预测时刻检查可用性,重复实体与时间关系纳入切分规则,防止数据泄漏。
持久层保存原始数据、已发布分片、版本清单和完整检查点,本地层提供有容量上限的可重建缓存。缓存标识包含数据与预处理版本,下载完成并校验后才允许读取。图像任务优先测试分片读取,避免将大量小对象的随机请求直接放入训练主路径;表格和文本任务根据实际解码、分词与内存占用选择缓存内容。
容量预算包含处理副本、并发缓存、保留检查点和生成期间的临时空间。性能验收在指定硬件、批次大小和并发条件下进行,分别记录初始化、首批次、稳定样本吞吐及批次等待高分位数,每种配置重复 3 次并说明缓存状态。用合成输入基线协助识别计算与供给差距,同时核对成功样本数、类别比例和标签映射。
质量报告包含明确阈值下的精确率、召回率、F1,以及适用任务的 AUC;阈值在验证集选择,测试集用于最终评估。性能改造后沿用相同切分与训练预算,发现少数类召回下降时追查样本覆盖和预处理。检查点保存与恢复纳入验收,测量完整保存间隔、失败损失进度和恢复耗时,确保恢复产物对应相同数据及代码版本。
数据、训练和平台负责人分别维护字段与切分规则、读取及评估脚本、容量与恢复机制。缓存和产物沿用数据访问边界,清理策略区分可重建副本与需保留产物。交付数据清单、测量记录、质量报告和恢复记录,作为后续 MLOps 流程的输入。
10 小结:下一步MLOps 进阶(A52)
AI 存储连接样本供给、训练恢复和实验追溯。容量够用只是起点;文件数量、请求延迟、解码成本和缓存状态都会影响训练。判断优化是否成功,需要同时验证速度与数据含义。
自测时,试着解释下面的问题:为什么字节吞吐很低,训练仍可能被存储拖慢?为什么分片改造后还要核对各类别召回率?为什么权重文件能加载,不代表训练能准确继续?为什么同样的随机种子不能替代切分清单?能结合本课实验回答,就可以进入 A52,把数据、训练、评估和发布组织成可管理的 MLOps 流程。