Neural network 如何使用地图位置=';中央处理器';由于;RuntimeError:试图反序列化CUDA设备上的对象,但torch.CUDA.is_available()is False;
我试图在下载以下模型 我收到:Neural network 如何使用地图位置=';中央处理器';由于;RuntimeError:试图反序列化CUDA设备上的对象,但torch.CUDA.is_available()is False;,neural-network,pytorch,conda,Neural Network,Pytorch,Conda,我试图在下载以下模型 我收到: >>> import torch >>> tacotron2 = torch.hub.load('nvidia/DeepLearningExamples:torchhub', 'nvidia_tacotron2') Using cache found in .cache\torch\hub\nvidia_DeepLearningExamples_torchhub ... File "Anaconda3\envs\env3_p
>>> import torch
>>> tacotron2 = torch.hub.load('nvidia/DeepLearningExamples:torchhub', 'nvidia_tacotron2')
Using cache found in .cache\torch\hub\nvidia_DeepLearningExamples_torchhub
...
File "Anaconda3\envs\env3_pytorch\lib\site-packages\torch\serialization.py", line 79, in validate_cuda_device
raise RuntimeError('Attempting to deserialize object on a CUDA '
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location='cpu' to map your storages to the CPU.
因此,我在map\u location='cpu'
中使用了以下内容,但仍然得到了相同的错误
>>> tacotron2 = torch.hub.load('nvidia/DeepLearningExamples:torchhub', 'nvidia_tacotron2', map_location='cpu')
torch.version.cuda显示一个版本,但torch.cuda.is_available()为false
>>> import torch
>>> torch.version.cuda
'9.0'
>>> torch.cuda.is_available()
False
- 如何避免与
相关的错误,因为我使用的正是要求使用的命令错误消息map\u location
- 如何使用cuda加载模型
映射位置
,它只将额外的参数转发给模型的加载,因此它取决于是否支持
在这种情况下,它不受支持,加载是在中实现的,它不会将任何map\u位置
传递给
这意味着您需要手动加载检查点并将其应用于模型。谢天谢地,通过设置pretrained=False
,可以使用相同的配置加载模型,而无需加载检查点,并且可以单独加载检查点,这支持map\u location
。状态dict只需要一个小的更改,因为它是用DistributedDataParallel
训练的,它包装了模块,这样模型中的每个层都变成了module.layer
。在状态dict中,模块。
前缀需要去除
tacotron2=torch.hub.load('nvidia/DeepLearningExamples:torchhub','nvidia\u tacotron2',pretrained=False)
checkpoint=torch.hub.load\u state\u dict\u from\u url('https://api.ngc.nvidia.com/v2/models/nvidia/tacotron2pyt_fp32/versions/1/files/nvidia_tacotron2pyt_fp32_20190306.pth,map_location=“cpu”)
#展开分布式数据并行模块
#module.layer->layer
state_dict={key.replace(“module.”,“”):键的值,检查点[“state_dict”].items()中的值
#将状态dict应用于模型
tacotron2.加载状态指令(状态指令)
不专门支持映射位置
,它只将额外的参数转发给模型的加载,因此是否支持取决于实现
在这种情况下,它不受支持,加载是在中实现的,它不会将任何map\u位置
传递给
这意味着您需要手动加载检查点并将其应用于模型。谢天谢地,通过设置pretrained=False
,可以使用相同的配置加载模型,而无需加载检查点,并且可以单独加载检查点,这支持map\u location
。状态dict只需要一个小的更改,因为它是用DistributedDataParallel
训练的,它包装了模块,这样模型中的每个层都变成了module.layer
。在状态dict中,模块。
前缀需要去除
tacotron2=torch.hub.load('nvidia/DeepLearningExamples:torchhub','nvidia\u tacotron2',pretrained=False)
checkpoint=torch.hub.load\u state\u dict\u from\u url('https://api.ngc.nvidia.com/v2/models/nvidia/tacotron2pyt_fp32/versions/1/files/nvidia_tacotron2pyt_fp32_20190306.pth,map_location=“cpu”)
#展开分布式数据并行模块
#module.layer->layer
state_dict={key.replace(“module.”,“”):键的值,检查点[“state_dict”].items()中的值
#将状态dict应用于模型
tacotron2.加载状态指令(状态指令)
@michale Jungo所以我理解hub.load的问题是nvidia github链接中的hubconf.py没有像通常预期的那样实现,对吗?我尝试了>>tacotron2=torch.hub.load('nvidia/DeepLearningExamples:torchhub','nvidia\u tacotron2',pretrained=False)
。但是我一直得到PermissionError:[WinError 32]进程无法访问该文件,因为它正被另一个进程使用:'.cache\\torch\\hub\\torchhub.zip
,即使没有其他进程。这是为什么?我可以在这个链接上使用指令通过上面的WinError,但是现在我看到了加载检查点时的另一个问题:不兼容密钥(缺少密钥=[],意外的密钥=[])
。执行加载状态命令时
。有什么解决方案吗?``>>tacotron2.load_state_dict(state_dict)不兼容键(缺少键=[],意外键=[])>>>``有办法逐层查看模型摘要并以图形形式查看吗?当我尝试>>摘要(tacotron2)
时,我得到TypeError:summary()缺少一个必需的位置参数:“input\u size”
我猜summary()
引用了。如果是这样的话,您需要给出您将提供给模型的输入大小,因为它需要使用一些虚拟数据运行前向传递,以确定实际使用了哪些层。除此之外,如果直接打印模型,则可以获得模块的概述。大多数情况下,这些都是有序的,但任何不按顺序进行的操作(例如,多个分支)都不会反映出来。我指的是pytorch摘要,但无法确定tacotron-2的输入大小,或者如何指定模型的输入。@michale Jungo,所以我理解hub.load的问题是nvidia github链接中的hubconf.py没有按照通常的预期实现,对吗?我尝试了>>tacotron2=torch.hub.load('nvidia/DeepLearningExamples:torchhub','nvidia\u tacotron2',pretrained=False)
。但是我一直得到PermissionError:[WinError 32]进程无法访问该文件,因为它正被另一个进程使用:'.cache\\torch\\hub\\torchhub.zip
,即使没有其他进程。这是为什么呢?我在这个链接上使用指令通过了上面的WinError,但是现在我看到了加载检查点时的另一个问题
>>> import torch
>>> torch.version.cuda
'9.0'
>>> torch.cuda.is_available()
False