Pytorch Dataset问题解决:数据集读取报错DatasetGenerationError或OSError
问题描述
在huggingface上下载很大的数据集,用多个parquet文件的格式下载到本地。使用load_dataset加载的时候,进度条加载到一半会报错DatasetGenerationError: An error occurred while generating the dataset;如果加载为IterableDataset,则在读取到对应位置时报错OSError: Corrupt snappy compressed data.
解决思路
一开始以为是单条数据错误,想把这条数据用try catch来handle住,失败。后来意识到,load_dataset加载的时候,进度条的数据量是跳变的,说明加载机制是读取每个parquet文件,读取完成后把这个文件的条目数加在总数上。能卡在一个具体的点上,说明出问题的是某一个parquet文件。于是检查每个parquet文件的校验码,发现某个文件校验失败。重新下载后,数据集可以正常加载,无论是否streaming.
反思
由于校验流程比较麻烦耗时,平时下载数据集一般只简单看一下文件大小是否正确,如果每个文件的数据大小都正确,就直接开始做。这次的教训说明,当文件多了之后,校验还是很重要的。以后应该写一个自动校验的程序,来确保下载的数据来源正确。