ubuntu配置libtorch CPU版本
- 配置环境:Ubuntu 20.04
- Date:2024 / 08
1、下载最新版本的libtorch
wget https://download.pytorch.org/libtorch/nightly/cpu/libtorch-shared-with-deps-latest.zip
unzip libtorch-shared-with-deps-latest.zip
2、创建一个C++工程文件夹,目录结构如下:
example-app/CMakeLists.txtexample-app.cpp
其中,CMakeLists.txt
文件如下:
cmake_minimum_required(VERSION 3.18 FATAL_ERROR)
project(example-app)# set(CMAKE_PREFIX_PATH "/path/to/libtorch;/another/path") #设置多个路径
set(CMAKE_PREFIX_PATH "/path/to/libtorch")find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")add_executable(example-app example-app.cpp)
target_link_libraries(example-app "${TORCH_LIBRARIES}")
set_property(TARGET example-app PROPERTY CXX_STANDARD 17)# The following code block is suggested to be used on Windows.
# According to https://github.com/pytorch/pytorch/issues/25457,
# the DLLs need to be copied to avoid memory errors.
if (MSVC)file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll")add_custom_command(TARGET example-appPOST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy_if_different${TORCH_DLLS}$<TARGET_FILE_DIR:example-app>)
endif (MSVC)
example-app.cpp
文件如下:
#include <torch/torch.h>
#include <iostream>int main() {torch::Tensor tensor = torch::rand({2, 3});std::cout << tensor << std::endl;
}
3、编译
在example-app文件夹下打开终端
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=/absolute/path/to/libtorch .. #这个路径可以直接在cmakelist中定义
cmake --build . --config Release
4、运行测试
./example-app
可以打印出数组证明安装成功
5、加载.pt
文件cpp使用示例:
#include <iostream>
#include <cmath>#include <torch/torch.h> // Libtorch头文件
#include <torch/script.h> // 需要加载PyTorch脚本模型// libtorch模型加载和推理函数
torch::Tensor load_model_and_predict(torch::Tensor input_tensor) {// 加载已保存的PyTorch脚本模型(torch::jit::script::Module)torch::jit::script::Module module;try {module = torch::jit::load("/path/to/policy.pt"); // 模型路径}catch (const c10::Error& e) {std::cerr << "Error loading the model\n";return torch::Tensor(); // 返回一个空的张量,表示加载失败}// 模型推理std::vector<torch::jit::IValue> inputs;inputs.push_back(input_tensor);at::Tensor output = module.forward(inputs).toTensor();return output;
}int main(int argc, char** argv) {// 构造输入张量进行模型推理(假设输入为1维张量,大小为48*15)torch::Tensor input_tensor = torch::rand({1, 48*15});//根据自己打模型输入设置torch::Tensor prediction = load_model_and_predict(input_tensor);std::cout << "Model prediction: " << prediction << std::endl;//std::cout << "input_tensor: " << input_tensor << std::endl;return 0;
}
参考:
https://pytorch.org/cppdocs/installing.html
相关文章:

ubuntu配置libtorch CPU版本
配置环境:Ubuntu 20.04Date:2024 / 08 1、下载最新版本的libtorch wget https://download.pytorch.org/libtorch/nightly/cpu/libtorch-shared-with-deps-latest.zip unzip libtorch-shared-with-deps-latest.zip2、创建一个C工程文件夹,目…...

Docker MySql 数据备份、恢复
docker-compose.yaml实例 version: 3.8 services:db:image: mysql:9.0.1environment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: dataMYSQL_USER: dataMYSQL_PASSWORD: 123456MYSQL_ROOT_HOST: % 1、备份 docker exec -it <容器名称> /usr/bin/mysqldump -u root -p12…...

django项目添加测试数据的三种方式
文章目录 自定义终端命令Faker添加模拟数据基于终端脚本来完成数据的添加编写python脚本编写shell脚本执行脚本需要权限使用shell命令来完成测试数据的添加 添加测试数据在工作中一共有三种方式: 可以根据django的manage.py指令进行[自定义终端命令]可以采用第三方…...

用Python提取PDF表格到Excel文件
在对PDF中的表格进行再利用时,除了直接将PDF文档转换为Excel文件,我们还可以提取PDF文档中的表格数据并写入Excel工作表。这样做可以避免一些不必要的文本和格式带来的干扰,获得更易于分析和处理的表格数据,并方便进行更多的格式设…...

Java基础|多线程:多线程分页拉取
前言: 通常我们都会遇到分页拉取的需求,比如与第三方系统同步数据,定时拉取全量数据做缓存,下面我们简单介绍下多线程分页写法 需求: 全量同步第三方系统数据,并在全部数据同步完后,统一做缓存…...

Android RecyclerView 实现 GridView ,并实现点击效果及方向位置的显示
效果图 一、引入 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30 二、使用步骤 1.Adapter public class UnAdapter extends BaseQuickAdapter<UnBean.ResultBean, BaseViewHolder> {private int selectedPosition RecyclerView.NO_POSITIO…...

Centos中dnf和yum区别对比
dnf和yum是两种不同的包管理工具,它们各自具有独特的特点和优势,主要用于在Linux系统上安装、更新和卸载软件包。以下是dnf和yum之间的主要区别: 1. 依赖关系解决 dnf:dnf在处理依赖关系方面表现出更强的能力。它能够更高效地解…...

CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task
论文汇总 当前的问题 图1:在VTAB-1k基准测试上,使用预训练的ViT-B/16模型,VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。 如图1所示,当给出大量提示时,VPT显示了性能的显著下降…...

基于双向 LSTM 和 CRF 的序列标注模型
基于双向 LSTM 和 CRF 的序列标注模型 在自然语言处理中,序列标注是一项重要的任务,例如命名实体识别、词性标注等。本文将介绍如何使用 Keras 构建一个基于双向 LSTM 和 CRF 的序列标注模型。 一、引言 序列标注任务要求为输入序列中的每个元素分配一个标签。传统的方法可…...

为何美国与加拿大边界看似那么随意?
我们在《日本移民巴西超200万,会成第二个“巴勒斯坦”吗?》一文中探讨了日本移民巴西的历史,以及移民对巴西的风险与挑战。 今天我们来探讨美国与加拿大边界为什么那么随意,并整理了加拿大和美国的国界、省界、市界行政边界数据分享给大家&a…...

什么是触发器(Trigger)?触发器何时会被触发?
在数据库管理系统中,触发器是一种特殊的存储过程,它会在特定的表上执行插入、更新或删除操作时自动触发。 触发器的主要用途是维护数据的一致性和完整性,以及实现一些复杂的业务逻辑。 触发器何时会被触发? 触发器可以在以下几…...

一步一步优化一套生成式语言模型系统
以下是这套生成式语言模型解决任务的流程图概述: #mermaid-svg-keXg8yGoCyObKDtu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-keXg8yGoCyObKDtu .error-icon{fill:#552222;}#mermaid-svg-keXg8yGoCyO…...

Q必达任务脚本
文章目录 1.购买服务器地址2.部署教程3. 代码如下4. 如何联系我 1.购买服务器地址 服务器购买地址 https://t.aliyun.com/U/rUHk58 若失效,可用地址 https://www.aliyun.com/activity/wuying/dj?source5176.29345612&userCode49hts92d 2.部署教程 2024年最…...

问请问请问2312123213123
📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…...

Vue3:快速生成模板代码
目录 一.模板代码 1.提供基础结构 2.定义组件名称 3.初始化数据和方法 4.应用样式 5.提高开发效率 二.操作 1.点击右下角设置按钮选择代码片段 2.输入vue.json,打开vue.json文件 3.构造模板 4.模板代码 5.使用 6.效果 一.模板代码 Vue3快速生成模板代…...

文件上传-php
查找方式 ***(1) 黑盒 查找(upload) 扫描 (2) 应用型 窗口 上传中心或者后台中心 上传 Ps:后台是后台 权限是权限 (3) 会员中心 (4) 白盒 基本函数定义 写前端的 Enctype 上传类型Method 提交方式Onsubmit 鼠标的时间Action"放在指定文件"Php 接受表单数据 isset(…...

C++设计模式(更新中)
文章目录 1、创建型模式1.1 简单工厂(Simple Factory)(1)示例(2)总结 1.2 工厂方法(Factory Method)(1)示例(2)总结 1.3 抽象工厂&…...

Kali crunsh字典工具
查看自带密码字典 vim /usr/share/wordlists 使用 crunch 字典工具 随机组成6位纯数字密码 crunch 6 6 0123456789 -o test1.txt 由 Abc1234 随机组成的 6~8 位密码 crunch 6 8 Abc1234 -o test2.txt 以A开头后面跟3位数字组成的4位密码 crunch 4 4 -t A%%% -o test3.txt...

Redis系列---Redission分布式锁
文章目录 类型原理使用看门狗与setNx比较 类型 使用Redission,lock的机制其实是使用了ttl,一直等ttl为0再get。无论是redission还是redis的setNx,只要是锁,都必须有加锁和释放锁两个动作,二者缺一不可,并且…...

算法打卡:第十一章 图论part05
今日收获:并查集理论基础,寻找存在的路径 1. 并查集理论基础(from代码随想录) (1)应用场景:判断两个元素是否在同一个集合中 (2)原理讲解:通过一个一维数组…...

3.《DevOps》系列K8S部署CICD流水线之部署MetalLB负载均衡器和Helm部署Ingress-Nginx
架构 服务器IP服务名称硬件配置192.168.1.100k8s-master8核、16G、120G192.168.1.101k8s-node18核、16G、120G192.168.1.102k8s-node28核、16G、120G192.168.1.103nfs2核、4G、500G操作系统:Rocky9.3 后续通过K8S部署GitLab、Harbor、Jenkins 为什么使用MetalLB 当使用云平…...

MySQL:表的约束
目录 1 空属性 2 默认值 3 列描述 4 zerofill 5 主键 6 自增长 7 唯一键 8 外键 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有…...

38.重复的子字符串
方法1: class Solution {public boolean repeatedSubstringPattern(String s) {if (s.equals("")) return false;String s2(ss).substring(1,(ss).length()-1);//去掉首尾字符return s2.contains(s);//判断是否包含s} } class Solution(object):def rep…...

Linux服务部署指南
在现代的IT基础设施中,Linux操作系统因其稳定性、安全性和灵活性而广泛用于服务部署。本文将提供一个全面的指南,介绍如何在Linux环境下部署服务,包括准备工作、部署流程、以及监控和维护。 1. 准备工作 在开始部署服务之前,确保…...

Unity中,如果你想让多个数字人轮流显示和隐藏
在Unity中,如果你想让多个数字人轮流显示和隐藏,可以通过控制它们的GameObject的激活状态 (SetActive()) 来实现。你可以创建一个简单的脚本来控制这些数字人的显示和隐藏,使用协程或者定时器来处理轮流的效果。 下面是一个基本的实现思路&a…...

【LeetCode】动态规划—删除并获得点数(附完整Python/C++代码)
动态规划—#740. 删除并获得点数 前言题目描述基本思路1. 问题定义:2. 理解问题和递推关系:3. 解决方法:4. 进一步优化:5. 小总结: 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 给你一个整数数组 n u m s nums nums ,你可以对它进行一…...

利用 PostgreSQL 构建 RAG 系统实现智能问答
在现代信息检索和自然语言处理的场景中,检索增强生成 (Retrieval-Augmented Generation, RAG) 系统因其结合了知识库检索和生成模型的优势,成为了一种非常流行的智能问答方法。在这篇博文中,我将展示如何利用PostgreSQL作为向量存储数据库&am…...

Go 并发模式:扩展与聚合的高效并行
当你搭建好一个管道系统后,数据在各个阶段之间顺畅地流动,并根据你设定的操作逐步转换。这一切看起来像是一条美丽的溪流,然而,为什么有时候这个过程会如此缓慢呢? 在处理数据时,某些阶段可能会非常耗时,导致上游的阶段被阻塞,无法继续处理数据。这不仅影响了管道的整…...

【Transformers基础入门篇2】基础组件之Pipeline
文章目录 一、什么是Pipeline二、查看PipeLine支持的任务类型三、Pipeline的创建和使用3.1 根据任务类型,直接创建Pipeline,默认是英文模型3.2 指定任务类型,再指定模型,创建基于指定模型的Pipeline3.3 预先加载模型,再…...

java反射学习总结
最近在项目上有一个内部的CR,运用到了反射。想起之前面试的时候被面试官追问有没有在项目中用过反射,以及反射的原理和对反射的了解。 于是借此机会,学习回顾一下反射,以及在项目中可能会用到的场景。 Java 中的反射概述 反射&…...