OnDiskCacheHolder¶
- class torchdata.datapipes.iter.OnDiskCacheHolder(source_datapipe: IterDataPipe, filepath_fn: Optional[Callable] = None, hash_dict: Optional[Dict[str, str]] = None, hash_type: str = 'sha256', extra_check_fn: Optional[Callable[[str], bool]] = None)¶
将多个 DataPipe 操作的输出缓存到本地文件,这些文件通常是性能瓶颈,例如下载、解压缩等(函数名:
on_disk_cache
)。必须使用
.end_caching()
停止跟踪 DataPipe 操作序列并将结果保存到本地文件。- 参数:
source_datapipe – IterDataPipe
filepath_fn – 给定来自
source_datapipe
的数据,返回本地文件系统上的文件路径。只允许单个文件路径作为函数的输出。如果结果文件名与 end_cache 的文件名函数生成的原始文件名不同,则使用该文件名存储 yield 文件列表(以及作为缓存项可用性检查)hash_dict – 一个字典,将文件名映射到它们相应的哈希值。如果指定了
hash_dict
,则将在保存数据到本地文件系统之前附加额外的哈希检查。如果数据不符合哈希值,管道将引发错误。hash_type – 要应用的哈希函数类型
extra_check_fn – 可选函数,用于对来自
filepath_fn
的给定文件路径执行额外的验证。
示例
>>> from torchdata.datapipes.iter import IterableWrapper, HttpReader >>> url = IterableWrapper(["https://path/to/filename", ]) >>> def _filepath_fn(url): >>> temp_dir = tempfile.gettempdir() >>> return os.path.join(temp_dir, os.path.basename(url)) >>> hash_dict = {"expected_filepath": expected_MD5_hash} >>> cache_dp = url.on_disk_cache(filepath_fn=_filepath_fn, hash_dict=_hash_dict, hash_type="md5") >>> # You must call ``.end_caching`` at a later point to stop tracing and save the results to local files. >>> cache_dp = HttpReader(cache_dp).end_caching(mode="wb", filepath_fn=_filepath_fn)