libtorch c++ 调用(三)CPU和GPU的使用

94 篇文章 12 订阅

1、头文件包含问题

前面练习libtorch调用时除了包含路径和库文件外,在源文件中一般包含头文件:

#include <torch/script.h>

然后在调用下面一行代码时总是提示函数未定义或者不存在,后来才知道少包含了一个头文件。

torch::cuda::is_avaliable();

使用上面这一句时需要包含头文件:

#include <torch/torch.h>

于是下面这些函数都可以找到了。

void test_libtorch_version() {
	std::cout << "cuDNN : " << torch::cuda::cudnn_is_available() << std::endl;
	std::cout << "CUDA : " << torch::cuda::is_available() << std::endl;
	std::cout << "Device count : " << torch::cuda::device_count() << std::endl;
}

2、属性设置问题(GPU)

在封装c++ 接口或者测试程序时,这样写编译不会报错,执行时会在加载模型时报错,。

    torch::DeviceType device_type;
	device_type = torch::kCUDA;
	torch::Device device(device_type);
	torch::jit::script::Module module = torch::jit::load(model_path, device);//

解决办法:参考:libtorch1.6 GPU版本无法使用的问题

我是用的是libtorch1.5.1,该方法同样适用。

下面是解决办法原文:

  在官网中下载libtorch1.6 GPU版本,如果在VS中只添加inclue和lib的路径,编译的过程或编译好执行的过程很有可能出现错误。当然,如果是使用cmake来构建工程,是可以正常编译和执行。

    出现错误的解决方法:

        1)使用VS2017及以上版本;

        2)windows上装的cuda版本需要与下载的libtorch的cuda版本相对应;

        3)在“属性 --> 链接器 --> 命令行 --> 其他选项”中添加:

  /INCLUDE:?warp_size@cuda@at@@YAHXZ

3、GPU/CPU模型

加载CPU模型使用下面的代码,模型是同一个,只是加载时的参数不同

    torch::DeviceType device_type;
	device_type = torch::kCPU;
	torch::Device device(device_type);
	torch::jit::script::Module module = torch::jit::load(model_path, device);//

加载GPU模型

    torch::DeviceType device_type;
	device_type = torch::kCUDA;
	torch::Device device(device_type);
	torch::jit::script::Module module = torch::jit::load(model_path, device);//

 

在Ubuntu下获取CPU使用率和GPU使用率可以通过多种方式实现。对于CPU,通常可以使用系统提供的工具和接口,比如`/proc/stat`文件或`top`、`htop`等命令行工具。对于GPU,通常需要使用专门的库或者工具,例如NVIDIA的`nvidia-smi`或AMD的`rocm-smi`。 1. CPU使用率获取方法: - 使用`/proc/stat`文件:这个文件包含了系统自启动以来的CPU统计信息。通过读取这个文件并计算相关时间数据,可以计算出CPU使用率。 - 使用`top`或`htop`命令:这些命令会显示实时的CPU使用情况。`htop`是一个增强版的`top`,提供了更友好的用户界面和更多的功能。 2. GPU使用率获取方法: - 使用`nvidia-smi`命令:这是NVIDIA提供的一个用于监视和管理GPU的工具。通过执行`nvidia-smi --query-gpu=utilization.gpu`命令,可以获取到当前GPU使用率。 - 对于AMD的GPU,可以使用`rocm-smi`工具来获取GPU使用率。 以下是一个简单的C++示例代码,展示如何通过系统调用`nvidia-smi`来获取GPU使用率: ```cpp #include <iostream> #include <stdlib.h> #include <stdio.h> #include <string> #include <sstream> std::string getGPUUtilization() { std::string command = "nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits"; std::string utilization; FILE* pipe = popen(command.c_str(), "r"); if (!pipe) throw std::runtime_error("popen() failed!"); try { if (fgets(&utilization[0], utilization.capacity(), pipe) == NULL) { throw std::runtime_error("fgets() failed!"); } } catch (...) { pclose(pipe); throw; } pclose(pipe); return utilization; } int main() { try { std::string gpuUtil = getGPUUtilization(); std::cout << "GPU utilization: " << gpuUtil << "%" << std::endl; } catch (const std::runtime_error& e) { std::cerr << "Error: " << e.what() << std::endl; } return 0; } ``` 在编译时,需要链接到`nvidia-ml`库: ```bash g++ -o get_gpu_util get_gpu_util.cpp -lnvidia-ml ``` 请注意,上述代码适用于NVIDIA的GPU,如果你使用的是AMD的GPU,你需要查找相应的工具和命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落花逐流水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值