我正在尝试使用 Cuda 10.1 和 Windows 10 使用 LibTorch 1.3 和 C++ 创建 NN。对于构建,我使用的是 Visual Studio 2019。
到目前为止,我尝试了基本示例和MNIST 示例,其中 CPU 正在工作。但是我不能用 CUDA 运行它。我试图将模型移动到 GPU,如此处所述,但它不起作用。
要将模型移动到 GPU 内存,您可以编写 model.to(at::kCUDA);。通过调用 tensor.to(at::kCUDA) 确保模型的输入也存在于 CUDA 内存中,这将在 CUDA 内存中返回一个新的张量。
所以我尝试了简单的
int main(){
auto net = std::make_shared<Net>();
net->to(torch::kCUDA); //crashes here
}
然后我尝试将简单的张量移动到 gpu 内存,但它也崩溃了。
#include <torch/torch.h>
int main()
{
torch::Tensor a = torch::ones({ 2, 2 }, torch::requires_grad());
torch::Tensor b = torch::randn({ 2, 2 });
a.to(torch::kCUDA); //Here it crashes
b.to(torch::kCUDA); //
auto c = a + b;
}
我得到了:
Exception thrown at 0x00007FFB8263A839 in Resnet50.exe: Microsoft C++ exception: c10::Error at memory location 0x000000E574979F30.
Unhandled exception at 0x00007FFB8263A839 in Resnet50.exe: Microsoft C++ exception: c10::Error at memory location 0x000000E574979F30.
KernelBase.dll
在调试模式下,它指向
auto operator()(Parameters... args) -> decltype(std::declval<FuncType>()(std::forward<Parameters>(args)...)) {
return kernel_func_(std::forward<Parameters>(args)...);
}
使用torch::cuda::is_available()
显示它可以找到 cuda 设备。
我对异常没有太多经验。