当前位置: 首页 > news >正文

libtorch环境配置

环境配置

建议在linux上配置对应环境

可以在autoDL上租一个服务器来搭建,带有pytorch的环境
https://www.autodl.com/home
我自己的win电脑上安装了pytorch,但是配置时会报错,于是到ubuntu上配置
在这里插入图片描述

电脑上装有pytorch的就不需要再下载libtorch了,pytorch就带有libtorch
首先通过下面的代码找出pytorch自带的环境
import torch
torch.utils.cmake_prefix_path

在这里插入图片描述

整体架构图

在这里插入图片描述

编写CMakeLists.txt文件

cmake_minimum_required(VERSION 3.6 FATAL_ERROR)
project(test-libtorch)
# 设置libtorch的位置
set(CMAKE_PREFIX_PATH "/root/miniconda3/lib/python3.8/site-packages/torch/share/cmake")
message(${CMAKE_PREFIX_PATH})
find_package(Torch REQUIRED)
#op.cpp exe
add_executable(test-libtorch op.cpp)# #link libtorch .a .so
target_link_libraries(test-libtorch "${TORCH_LIBRARIES}")
#
set_property(TARGET test-libtorch PROPERTY CXX_STANDARD 14)

编写op.cpp

#include<torch/torch.h>
#include <iostream>int main() {torch::Tensor tensor = torch::rand({ 2, 3 });std::cout << tensor << std::endl;return 0;
}

编译

先创建build文件夹,再在build里面编译

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mkdir build
cd build
cmake ../
make
./test-libtorch

配置opencv

编写第一个自定义算子

算子的定义与实现

整体结构图

由于我们重写算子一般都是为了性能,所以多半使用C++

op.cpp

#include <torch/torch.h>
// 实现
torch::Tensor my_add(torch::Tensor t1, torch::Tensor t2)
{assert(t1.size(0) == t2.size(0));assert(t1.size(1) == t2.size(1));torch::Tensor t=t1+t2;return t;
}
// C++函数绑定到python中
TORCH_LIBRARY(my_ops, m)
{m.def("my_add", my_add);
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.6 FATAL_ERROR)
project(test-libtorch)
# 设置libtorch的位置
set(CMAKE_PREFIX_PATH "/root/miniconda3/lib/python3.8/site-packages/torch/share/cmake")
message(${CMAKE_PREFIX_PATH})
find_package(Torch REQUIRED)
# find_package(Opencv REQUIRED)
add_library(test-libtorch SHARED op.cpp)
# add_executable(test-libtorch op.cpp)# #link libtorch .a .so
target_link_libraries(test-libtorch "${TORCH_LIBRARIES}")
#
set_property(TARGET test-libtorch PROPERTY CXX_STANDARD 14)

test.py

import torchlib_path = r"/root/test/build/libtest-libtorch.so"
torch.ops.load_library(lib_path)def test_add():a = torch.rand([10, 10, 3])b = torch.rand([10, 10, 3])c = torch.ops.my_ops.my_add(a, b)d = a + bassert torch.allclose(c, d)
test_add()

运行步骤

mkdir build
cd build
cmake ../
make
cd ../
python test.py

将op.cpp替换
op.cpp

#include <torch/torch.h>
// 实现
torch::Tensor my_add(torch::Tensor t1, torch::Tensor t2)
{assert(t1.size(0) == t2.size(0));assert(t1.size(1) == t2.size(1));torch::Tensor t=t1+t2;return t;
}
// 直接用Pybind绑定了C++函数
PYBIND11_MODULE(my_ops, m)
{m.def("my_add", my_add);
}

编写setup.py

from setuptools import setup
from torch.utils import cpp_extensionsetup(name='my_add',ext_modules=[cpp_extension.CppExtension('my_ops', ['op.cpp'])],cmdclass={'build_ext': cpp_extension.BuildExtension})

test.py

import torch
import my_opsdef test_add():a = torch.rand([10, 10, 3])b = torch.rand([10, 10, 3])c = my_ops.my_add(a, b)d = a + bassert torch.allclose(c, d)
test_add()

运行步骤

python setup.py install
python test.py
http://www.lryc.cn/news/461073.html

相关文章:

  • 【C语言】define宏定义与const修饰限定
  • 基于深度学习的基于视觉的机器人导航
  • 苍穹外卖学习笔记(二十三)
  • vLLM 推理引擎性能分析基准测试
  • 图像增强论文精读笔记-Kindling the Darkness: A Practical Low-light Image Enhancer(KinD)
  • HALCON数据结构之字符串
  • string模拟优化和vector使用
  • Go-知识依赖GOPATH
  • PyTorch 中 reshape 函数用法示例
  • 安全光幕的工作原理及应用场景
  • 《深度学习》OpenCV LBPH算法人脸识别 原理及案例解析
  • 数据结构之顺序表——动态顺序表(C语言版)
  • Python 网络爬虫入门与实战
  • 成都睿明智科技有限公司电商服务可靠不?
  • fmql之Linux Uart
  • 【火山引擎】调用火山大模型的方法 | SDK安装 | 配置 | 客户端初始化 | 设置
  • 前端实现下载功能汇总(下载二进制流文件、数组下载成csv、将十六进制下载成pcap、将文件下载成zip)
  • iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
  • 【MySQL】入门篇—基本数据类型:NULL值的概念
  • Java设计模式10 - 观察者模式
  • LabVIEW示波器通信及应用
  • 西门子PLC中Modbus通讯DATA_ADDR通讯起始地址设置以及RTU轮询程序设计。
  • 趋势(一)利用python绘制折线图
  • 【含文档】基于Springboot+Vue的采购管理系统(含源码+数据库+lw)
  • 【C++11入门基础】
  • Pytest中fixture的scope详解
  • Springboot 接入 WebSocket 实战
  • 数据结构之红黑树的实现
  • 智能工厂的设计软件 中的AI操作系统的“三维时间”(历时/共时/等时)构建的“能力成熟度-时间规模”平面
  • Spring Boot常见错误与解决方法