Safetensors,高效安全易用的深度学习新工具

大家好,本文将介绍一种为深度学习应用提供速度、效率、跨平台兼容性、用户友好性和安全性的新工具。

Safetensors简介

Hugging Face开发了一种名为Safetensors的新序列化格式,旨在简化和精简大型复杂张量的存储和加载。张量是深度学习中使用的主要数据结构,其大小会给效率带来挑战。

Safetensors结合使用高效的序列化和压缩算法来减少大型张量的大小,使其比pickle等其他序列化格式更快、更高效。这意味着,与传统PyTorch序列化格式pytorch_model.binmodel.safetensors相比,Safetensors在CPU上的速度快76.6倍,在GPU上的速度快2倍。

 使用Safetensors的好处

Safetensors具有简单直观的API,可以在Python中序列化和反序列化张量。这意味着开发人员可以专注于搭建深度学习模型,而不必在序列化和反序列化上花费时间。

可以用Python进行序列化,并方便地使用各种编程语言和平台(如C++、Java和JavaScript)加载生成的文件,这样就可以实现在不同的编程环境中无缝共享模型。

Safetensors针对速度进行了优化,可以高效处理大型张量的序列化和反序列化,因此它是使用大型语言模型的应用程序的绝佳选择。

它混合使用了有效的序列化和压缩算法,以减小大型张量的大小,与其他序列化格式(如pickle)相比,性能更快、更高效。

为了防止序列化张量在存储或传输过程中出现损坏,Safetensors使用了校验和机制。这保证了额外的安全性,确保存储在Safetensors中的所有数据都准确可靠。此外,它还能防止DOS攻击。

在使用多个节点或GPU的分布式环境中工作时,只在每个模型上加载部分张量是很有帮助的。BLOOM利用这种格式在8个 GPU上加载模型仅需45秒,而普通PyTorch加权则需要10分钟。

使用Safetensors

在本节中我们将介绍safetensors API,以及如何保存和加载张量文件。可以使用pip管理器安装safetensors

pip install safetensors

本文将使用Torch共享张量中的示例来搭建一个简单的神经网络,并使用PyTorch的safetensors.torch API保存模型。

from torch import nn

class Model(nn.Module):
    def __init__(self):
        super().__init__()
        self.a = nn.Linear(100, 100)
        self.b = self.a

    def forward(self, x):
        return self.b(self.a(x))


model = Model()
print(model.state_dict())

正如所看到的,已经成功创建了模型。

OrderedDict([('a.weight', tensor([[-0.0913, 0.0470, -0.0209, ..., -0.0540, -0.0575, -0.0679], [ 0.0268, 0.0765, 0.0952, ..., -0.0616, 0.0146, -0.0343], [ 0.0216, 0.0444, -0.0347, ..., -0.0546, 0.0036, -0.0454], ...,

现在我们将通过提供model对象和文件名来保存模型,然后把保存的文件加载到使用nn.Module创建的model对象中。

from safetensors.torch import load_model, save_model

save_model(model, "model.safetensors")

load_model(model, "model.safetensors")
print(model.state_dict())
OrderedDict([('a.weight', tensor([[-0.0913, 0.0470, -0.0209, ..., -0.0540, -0.0575, -0.0679], [ 0.0268, 0.0765, 0.0952, ..., -0.0616, 0.0146, -0.0343], [ 0.0216, 0.0444, -0.0347, ..., -0.0546, 0.0036, -0.0454], ...,

在第二个示例中,我们将尝试保存使用torch.zeros创建的张量,为此将使用save_file函数。

import torch
from safetensors.torch import save_file, load_file

tensors = {
   "weight1": torch.zeros((1024, 1024)),
   "weight2": torch.zeros((1024, 1024))
}
save_file(tensors, "new_model.safetensors")

为了加载张量,我们将使用load_file函数。

load_file("new_model.safetensors")
{'weight1': tensor([[0., 0., 0.,  ..., 0., 0., 0.],
         [0., 0., 0.,  ..., 0., 0., 0.],
         [0., 0., 0.,  ..., 0., 0., 0.],
         ...,
         [0., 0., 0.,  ..., 0., 0., 0.],
         [0., 0., 0.,  ..., 0., 0., 0.],
         [0., 0., 0.,  ..., 0., 0., 0.]]),
 'weight2': tensor([[0., 0., 0.,  ..., 0., 0., 0.],
         [0., 0., 0.,  ..., 0., 0., 0.],
         [0., 0., 0.,  ..., 0., 0., 0.],
         ...,
         [0., 0., 0.,  ..., 0., 0., 0.],
         [0., 0., 0.,  ..., 0., 0., 0.],
         [0., 0., 0.,  ..., 0., 0., 0.]])}

Safetensors API适用于Pytorch、Tensorflow、PaddlePaddle、Flax和Numpy,可以通过阅读Safetensors文档来了解它。

简而言之,Safetensors是一种存储深度学习应用中使用的大型张量的新方法。与其他技术相比,它具有更快、更高效和用户友好的特点,此外它还能确保数据的保密性和安全性,同时支持各种编程语言和平台。通过使用Safetensors,机器学习工程师可以优化时间,专注于开发更优秀的模型。

强烈推荐在项目中使用Safetensors,许多顶级AI公司,如Hugging Face、EleutherAI和StabilityAI,都在他们的项目中使用了Safetensors。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
深度学习是一种机器学习的方法,它模拟人脑神经网络的工作原理,通过大数据和强大的计算能力,从数据中学习并进行预测和决策。而Python是一种高级编程语言,简单易学且功能强大,逐渐成为深度学习的首选开发语言。 在深度学习中,Python具有丰富的资源和优势,尤其是其开源工具。下面我们来介绍一些常用的深度学习开源工具: 1. TensorFlow:由Google开发的深度学习框架,提供丰富的API和工具,支持多种平台和硬件设备。其Python接口简单易用,广泛应用于各种深度学习任务。 2. PyTorch:Facebook开源的深度学习框架,具有动态图的优势,方便调试和研究。其Python编程接口类似于NumPy,易于使用和扩展。 3. Keras:一个高层次的深度学习框架,使用Python编写,易于快速上手。Keras可以作为TensorFlow、Theano或CNTK的前端接口,提供更简洁的API。 4. Scikit-learn:一个常用的机器学习库,提供了多种机器学习算法的实现,包括一些深度学习算法。使用Python编写,便于数据处理、模型训练和评估。 5. NumPy:一个常用的科学计算库,提供了多维数组对象和各种数学函数。在深度学习中经常使用NumPy进行数据的预处理和计算。 这些开源工具深度学习的开发和应用提供了便利,Python的简单易用和丰富的库生态系统使得深度学习工程师能够更加高效地进行模型训练、调优和部署。同时,Python社区活跃,可以快速获取解决方案和技术支持。总的来说,深度学习开源工具Python为研究者和开发者提供了强大的工具箱,推动了深度学习的发展和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python慕遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值