详细内容或原文请订阅后点击阅览
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