Libtorch C++编译 使用问题整理

LibTorch问题整理

#C++ tensor cannot move from cpu to gpu
#libtorch C++ GPU版本编译问题
1.首先进行cuda版本编译,不建议手动在VS中创建项目然后进行,包含头include以及链接lib库,建议使用cmake进行编译。
按照如下的目录结构创建CMakeLists.txt文件
在这里插入图片描述
CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(custom_ops)
find_package(Torch REQUIRED)
add_executable(example-app example-app.cpp)
target_link_libraries(example-app "${TORCH_LIBRARIES}")
set_property(TARGET example-app PROPERTY CXX_STANDARD 14)

example_app.cpp中可先创建一个main的简单函数

#include <iostream>
#include "torch/torch.h"
#include "torch/jit.h"

int main() {
    std::cout << "Hello, World!" << std::endl;
    auto a = torch::tensor({{1, 2}, {3, 4}});
    std::cout << a << std::endl;
    return 0;
}
cd build
cmake -DCMAKE_PREFIX_PATH=/media/DATA2/libtorch ..

/media/DATA2/libtorch 指向libtorch cuda版库的路径,注意最后结尾的…不可少
编译后build内容大致如下
在这里插入图片描述
2.VS打开工程,torch::cuda::is_available() 一直返回false,网上很多说cuda版本与显卡驱动版本不兼容,可以检查下自己电脑上的cuda版本与显卡驱动是否兼容?自己本地显卡支持CUDA版本为10.1,本地安装的也是CUDA10.1。
另外太低的CUDA版本可能不支持libtorch。本地配置libtorch1.5,libtorch1.6,cuda10.1版本,仍然找不到可用的显卡。升级libtorch到最新的libtorch1.7后问题解决,具体问题没有深度分析,估计是libtorch库开源时间不久,仍存在一些小的兼容性问题。

在这里插入图片描述

auto cuda_available = torch::cuda::is_available();
	std::cout << cuda_available << std::endl;

3.配置好需要的环境后,可能还存在找不到显卡问题,需要在VS连接器中加入 /INCLUDE:"?warp_size@cuda@at@@YAHXZ",该指令应该是指定编译程序需要cuda的一些库。
在这里插入图片描述
4.如何将tensor从cpu移动到gpu上C++ Tensor not work move form cpu to gpu using opeator to 在Python中直接to操作即可完成数据CPU到GPU,或者GPU到CPU,但是在C++中遇到使用to结果数据移动不成功。
本人遇到的问题是模型从CPU 到GPU成功,例如:model.to(“cuda:0”)成功,但是输入数据input_tensor.to(“cuda:0”)不成功,改为input_tensor = input_tensor.to(“cuda:0”)之后成功,在判断input_tensor是在显卡显存空间。

torch::Tensor input_tensor = torch::rand({ 3,4 });
	std::cout << input_tensor.device() << std::endl;
	#输出cpu
	torch::Device device(torch::kCUDA, 0);
	torch::Tensor a = input_tensor.to(device)
	std::cout << input_tensor.device() << std::endl;
	#输出cpu
	std::cout << a.device() << std::endl;
	#输出cuda:0
 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值