torch 0.11.0

torch v0.11.0 现已在 CRAN 上发布。此版本大大增强了对执行 JIT 操作的支持。我们还修改了模型参数的加载,并增加了一些生活质量改进,例如支持临时修改默认 torch 设备、支持将数据类型指定为字符串等等。

来源:RStudio AI博客

torch v0.11.0 现已在 CRAN 上发布!这篇博文重点介绍了此版本中包含的一些更改。但您始终可以在 torch 网站上找到完整的更改日志。

变更日志

改进了状态字典的加载

长期以来,一直可以使用 R 中的 torch 通过 load_state_dict() 函数加载使用 PyTorch 训练的状态字典(即模型权重)。但是,经常会出现以下错误:

load_state_dict()
cpp_load_state_dict(path) 中的错误:isGenericDict() 内部断言失败于
cpp_load_state_dict(path) 中的错误:isGenericDict() 内部断言失败于

发生这种情况的原因是,当从 Python 保存 state_dict 时,它实际上并不是一个字典,而是一个有序字典。 PyTorch 中的权重被序列化为 Pickle 文件——一种类似于我们的 RDS 的 Python 特定格式。为了在不使用 Python 运行时的情况下在 C++ 中加载它们,LibTorch 实现了一个 pickle 读取器,它只能读取文件格式的子集,并且这个子集不包含有序字典。

state_dict ordered Pickle

此版本增加了对读取有序字典的支持,因此您将不再看到此错误。

除此之外,读取这些文件所需的峰值内存使用量只有一半,而且 inconsequence 也快得多。以下是使用 v0.10.0 读取 3B 参数模型 (StableLM-3B) 的时间:

system.time({ x <- torch::load_state_dict("~/Downloads/pytorch_model-00001-of-00002.bin") y <- torch::load_state_dict("~/Downloads/pytorch_model-00002-of-00002.bin")})
system.time({ x <- torch::load_state_dict("~/Downloads/pytorch_model-00001-of-00002.bin") y <- torch::load_state_dict("~/Downloads/pytorch_model-00002-of-00002.bin")}) system.time({ system.time system.time ( { x <- torch::load_state_dict("~/Downloads/pytorch_model-00001-of-00002.bin") x <- torch :: load_state_dict ( "~/Downloads/pytorch_model-00001-of-00002.bin" ) y <- torch::load_state_dict("~/Downloads/pytorch_model-00002-of-00002.bin") y <- torch :: load_state_dict ( "~/Downloads/pytorch_model-00002-of-00002.bin" ) }) } )

和 v0.11.0

jit_ops read_file ( 3