Safetensors后缀名的文件是一种用于存储深度学习模型的文件格式,并使用numpy库来保存张量数据,确保加载过程中的安全性和速度。Safetensors文件格式与.pt(PyTorch tensor)和.h5(HDF5)等其他深度学习模型存储格式相比,提供了安全且高效的模型压缩方法,但在安全性和压缩效率之间取得了平衡。此外,Safetensors格式的文件可能包含一些额外的元数据,用于验证数据的完整性和一致性。因此,Safetensors后缀名的文件主要用于安全地存储和加载张量数据,适用于跨平台或长期存储,以避免兼容性问题。
表格每列含义:
Safe:能否确定文件不包含可执行代码?
Zero-copy:载入该文件是否比原文件花费更多内存?
Lazy loading:查看(inspect)文件的时候能否不加载整个文件?加载部分tensor时能否不扫描整个文件(在分布式设置下)?
Layout control:如果tensor信息在文件中传播,那么惰性载入并不足够,此时即使信息是惰性访问的,也必须访问大部分文件才能读取可用tensor(导致许多从硬盘到内存的拷贝动作)。通过layout control快速访问单个tensor非常重要。
No file size limit:是否有文件大小限制?
Flexibility:能否保存定制代码,并且之后能在无需额外代码的情况下使用?
Bfloat16:是否原生支持Bfloat16?这在机器学习领域中越来越重要。
Safetensors的额外优势:
防止DOS (Denial of Service) 攻击:一方面,通过限制文件头大小为100MB以阻止极端大JSON的生成。另一方面,当读取文件时,限制文件地址不被覆盖,使其在载入过程中不会在内存中超出文件大小。
载入更快:对机器学习常用格式中,PyTorch似乎是加载最快的文件格式。而Safetensors通过跳过额外的CPU拷贝,在常规Linux硬件上的载入速度是PyTorch的2倍。
惰性加载:在多节点或多GPU的分布式设置下,不同模型可以仅仅加载文件中的部分tensors。例如使用 8 GPU载入BLOOM模型的时间可以从用常规PyTorch的10分钟降至45秒。