在模型训练的过程中,需要会经常调整数据的内容来优化模型的性能,例如在CV领域对图片的不同的裁剪。
一次数据处理就会产生一个数据版本,此外由于数据变换不一定导致性能提升,因此历史的版本也会保留着。
此外,模型训练会经常回溯模型效果,需要数据处理步骤保留着全部的数据版本。
当前方案,一般采用复制数据集来记录不同变更的记录,例如在上面的例子中:
Lance是数据湖架构,采用版本方式管理数据:
维度 | 当前方案 | Lance方案 |
---|---|---|
数据管理 | 按照不同文件路径和名字管理 | 通过版本管理 |
数据存储 | 最后存储3份全量数据 | 只有一份数据 |
数据操作 | 读取写入全量数据 | 只需要处理更改的数据 |
数据回退 | 人肉记忆 | 通过版本回退能力管理 |
df = pd.DataFrame({"a": [10]}) tbl = pa.Table.from_pandas(df) ## 创建第一个版本 dataset = lance.write_dataset(tbl, "/tmp/test.lance") ## 创建第二个版本 dataset = lance.write_dataset(parquet, "/tmp/test.lance", mode="append") ## 列举数据集的所有版本 dataset.versions() ## 读取第一个版本 ds = lance.dataset('/tmp/test.lance', version=1).to_table().to_pandas() ## 读取第二个版本 ds = lance.dataset('/tmp/test.lance', version=2).to_table().to_pandas() ## 版本2的ds,切换回到版本1 ds = ds.checkout_version(1) ## ds版本回退到版本1,实际上就是创建一个版本3,但内容实际上就是版本1 ds.restore()