环境配置完整指导——Installing C++ Distributions of PyTorch
目录
- 一、前言
- 二、动手开始做
- 1. 安装cuda 11.4
- 2. 安装visual studio 2019 community
- 3. 安装libtorch
- 4. 安装mingw-w64
- 5. 配置环境变量
- 6. 打开vscode开始写程序
- 7. 运行程序
- 8. 其他报错信息
文章简介:这篇文章用于介绍在windows10 vscode中,跑通如下代码的全部过程:
#include <torch/torch.h>
#include <iostream>int main() {torch::Tensor tensor = torch::rand({2, 3});std::cout << tensor << std::endl;
}
代码来源:https://pytorch.org/cppdocs/installing.html
一、前言
能点进本文的同学们不需要我废话,所以简单讲一下,这是个c++和pytorch的“联动”,如果有同学需要用c++编写torch,就需要配置环境。
配环境是一个麻烦事,本文直接手把手保姆级教学,目标是:让同学们在windows上的vscode中,跑通上面那段代码。
注意:vscode请自行下载配置。
二、动手开始做
1. 安装cuda 11.4
信息提醒:我使用版本11.1会报错:No CUDA toolset found,搜到一些资料建议换成11.4,更换后就没问题了。
安装方法:https://blog.csdn.net/XunCiy/article/details/89070315,但注意其中有一个地方需要不一样:
作者说这个一定不要选,但是这个一定要选!不然会报错。
至此,我们安装好了cuda 11.4,并且安装了对应的cudnn,摆出来我在官网上下载的版本:
https://developer.nvidia.com/rdp/cudnn-archive
2. 安装visual studio 2019 community
我把我安装的放在这里供大家参考
我一共在安装器中勾选了这些内容。当然安装器大家就自己去官网下载,我下载的是Visual Studio 2019 community
3. 安装libtorch
注意我默认同学们已经安装了pytorch,我安装的是gpu版本的1.12.1.
至于libtorch,我选择的是libtorch-win-shared-with-deps-1.12.1+cu116.zip
,注意是release版本。下载的地方如下:
https://pytorch.org/get-started/locally/
注意上图的Release version,可以将链接中的1.13.1改成1.12.1,cu116保持不变就能够和我的版本保持一致了。
安装好之后,我放在了如下路径:
4. 安装mingw-w64
这个是和C++有关的东西,下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/,我下载的是这个:
也可以通过installer安装,但是我安装的时候报错了,所以选择直接将文件下载下来。下好之后解压,我放置的路径如下:
5. 配置环境变量
我整个过程中频繁修改环境变量的设置,所以已经忘了修改顺序,就直接将最终版本放在这里供大家参考。
windows10 进入环境变量的方法:点击键盘上的开始键——直接输入环境两个字,点击:
点进去选择环境变量,逐步添加:
第一,在用户变量中添加INCLUDE
变量,值为:
各位根据自己Visual Studio的安装位置和Windows Kits的文件夹位置修改就行了。
第二,在用户变量中添加LIB
变量,值为:
修改方法同上。
第三,在用户变量中Path变量下,添加几条,最终如下:
这是我全部的path,你需要添加的是上述第2、3、6行。
第四,在系统变量中添加如下变量:
这2个和mingw-64有关
第五,我的系统变量中有如下部分,表示cuda安装成功,在安装过程中自动加入的:
第六、在系统变量的Path部分,需要有如下内容:
上面这些就是配置此次环境,我的环境变量中多出来的内容,当然有些是自动生成的。
6. 打开vscode开始写程序
我说一下我的操作顺序,这种打开并构建项目的方式不一定是最优的,仅仅记录一种可行的方式:
第一步,按键盘的开始键
第二步,输入并打开它:
第三步,在桌面上(或者别的地方)创建一个空文件夹,叫做helloworld2
,并在打开的命令行中输入如下内容:
切换到文件夹下输入code .
,然后就能打开vscode
第四步,在vscode下,按ctrl+shift+P,输入并选择cmake: select a kit:
然后我选择的是下图的第一个(我机子是amd 64位的):
第五步,按同上的快捷键,这次选择quick start:
输入helloworld2(文件夹的名字)
按回车,然后选择executable
然后就会生成很多东西,包括cmakelist.txt,我们把相关配置写进去,然后build就行了。
第六步,配置cmakelist.txt
cmake_minimum_required(VERSION 3.0.0)
project(helloworld2 VERSION 0.1.0)# 提醒:如果find_package(Torch REQUIRED)语句报错,我在别的操作系统上遭遇了报错,
# 那么就添加下面这句,我的libtorch放在了"/usr/local/libtorch/",所以下面这一行的路径是那样写的
# set(Torch_DIR "/usr/local/libtorch/share/cmake/Torch/")# http://ruiy.leanote.com/post/find_package%E7%9A%84%E4%BD%9C%E7%94%A8
# 这个资料简单讲解了本文件一些语句的运作过程,并且可能讲清楚了${TORCH_LIBRATIES}这些变量是哪来的
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")include(CTest)
enable_testing()add_executable(helloworld2 main.cpp)
target_link_libraries(helloworld2 "${TORCH_LIBRARIES}")
set_property(TARGET helloworld2 PROPERTY CXX_STANDARD 14)set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)# 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 helloworld2POST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy_if_different${TORCH_DLLS}$<TARGET_FILE_DIR:helloworld2>)
endif (MSVC)
我再放一个官方的版本供参考:
https://pytorch.org/cppdocs/installing.html
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(example-app)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 14)# 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)
第七步,写main.cpp
#include <iostream>
#include <torch/torch.h>int main(int, char**) {std::cout << "Hello, world!\n";torch::Tensor tensor = torch::rand({2, 3});std::cout << tensor << std::endl;
}
7. 运行程序
看vscode下面:
先按一下Build,然后再按一下run(上图瓢虫右边的三角)。
然后输出结果:
至此,配环境的任务就结束了。
8. 其他报错信息
- 上面给的例子是#include <torch/torch.h>,如果要#include <torch/extension.h>,就会报错:找不到Python.h,那么这个时候就需要用
include_directores()
语句添加Python.h文件所在的路径,一般是"python安装路径/include"。我写的是"/Library/Frameworks/Python.framework/Versions/3.7/include/python3.7m",因为我的Python.h在这个路径下,然后重新build就不报错了。
相关文章:
环境配置完整指导——Installing C++ Distributions of PyTorch
目录一、前言二、动手开始做1. 安装cuda 11.42. 安装visual studio 2019 community3. 安装libtorch4. 安装mingw-w645. 配置环境变量6. 打开vscode开始写程序7. 运行程序8. 其他报错信息文章简介:这篇文章用于介绍在windows10 vscode中,跑通如下代码的全…...
深度学习——自注意力机制和位置编码(笔记)
1.自注意力: ①在深度学习中,经常使用卷积神经网络或者循环神经网络对序列进行编码 ②对于key,value和query,自注意力有一套自己的选法,因为key,value和query的值来自同一组输入。因此被称为自注意力或内部注意力 2…...
内网渗透(三十)之横向移动篇-利用远控工具向日葵横向移动
系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...
自动化测试中,该如何高效管理测试数据?
今晚在某个测试群,看到有人问了一个问题:把测试数据放配置文件读取和放文件通过函数调用读取有什么区别? 当时我下意识的这么回答:数据量越大,配置文件越臃肿,放在专门的数据文件(比如excel&am…...
Qt中项目A调用另一个项目B的方法汇总
在开发一个软件项目时候,当涉及到一个模块,已经有过类似的项目开发,为了避免重复开发,涉及到在该项目的工程中调用已开发的项目作为子项目,有很多种方法。 一、将项目编译成库文件然后进行调用 调用库文件通常有两种…...
【项目精选】基于Javaee的影视创作论坛的设计与实现(视频+论文+源码)
点击下载源码 基于Javaee的影视创作论坛的设计与实现主要用功能包括: 首页推荐、用户管理、影片管理、评论管理、 预告片管理、海报管理、公告管理、数据检索、用户注册与登录等等功能、统结构如下 (1)后台管理: 管理模块:管理员…...
深入【虚拟列表】动态高度、缓冲、异步加载... Vue实现
前言🎀 在前文中我们了解到: 1.在某种特殊场景下,我们需要将 大量数据 使用不分页的方式渲染到列表上,这种列表叫做长列表。 2.因为事件循环的机制,一次性大量的渲染耗时较长,并且渲染期间会阻塞页面交互…...
Windows 11 + WSL(ubuntu 20.04) + CLion(2022.3) 编译OpenJDK12
编译OpenJDK12 目录编译OpenJDK12前言一、下载OpenJDK源码二、编译OpenJDK参考https://openjdk.org/groups/build/doc/building.html1:安装编译所需的组件2:执行编译命令3:验证编译结果三、在Clion中调试OpenJDK源码1:Clion中配置…...
Freemarker 语法精粹
文章目录说明基本用法宏加载宏定义宏文件写法import和include区别内置方法注册全局共享变量处理空值和默认值获得hashmap的键值从map中拿对象遍历Map其它小技巧迁移事项参考说明 Freemarker 还存在我的一些老项目中,比起前端框架,自有它的简便之处&…...
使用Benchto框架对Trino进行SQL性能对比测试
有时需要对魔改源码前后的不同版本Trino引擎进行性能对比测试,提前发现改造前后是否有性能变差或变好的现象,避免影响数据业务的日常查询任务性能。而Trino社区正好提供了一个性能测试对比框架:GitHub - trinodb/benchto: Framework for runn…...
Redis之哨兵模式
什么是哨兵模式? Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是Redis高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些master服务的所有从服务。 某个master服务宕机后,会把这个master下…...
Selenium自动化测试Python二:WebDriver基础
欢迎阅读WebDriver基础讲义。本篇讲义将会重点介绍Selenium WebDriver的环境搭建和基本使用方法。 WebDriver环境搭建 Selenium WebDriver 又称为 Selenium2。 Selenium 1 WebDriver Selenium 2 WebDriver是主流Web应用自动化测试框架,具有清晰面向对象 API&…...
蓝桥杯模块学习17——AT24C02存储器(深夜学习——单片机)
一、硬件电路:1、引脚功能:(1)A0-A2:决定不同设备的地址码:(2)WP:写保护二、通讯方式(IIC协议)通讯方式与PCF8591相同,可参考以下文章…...
netty
Netty的介绍Netty是异步的(指定回调处理)、基于事件驱动的网络应用框架,用于快速开发高性能、高可靠性的网络IO程序。Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景,分布式节点远程调用中Netty往往作为R…...
Django项目部署-uWSGI
Django项目部署-uWSGIDjango运维部署框架整体部署架构web服务器与web应用服务器的区别部署环境准备安装python3安装mariadb安装Django和相关模块Django托管服务器uWSGI使用uWSGI配置使用Django运维部署框架 整体部署架构 操作系统: Linux 。优势:生态系统丰富&…...
jhipster自动生成java代码的方法
一、前言 java springboot后台项目用到了jpa查询数据库,还用到了jhipster,这个东西可以自动生成基础的Controller、Service、Dao、JavaBean等相关代码,减少重复开发。 在此总结下使用方法。 二、jhipster自动生成java代码的方法 1.需要先…...
LeetCode 82. 删除排序链表中的重复元素 II
原题链接 难度:middle\color{orange}{middle}middle 题目描述 给定一个已排序的链表的头 headheadhead , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,…...
tensorflow gpu环境安装
查看本电脑支持的最高cuda版本:nvidia-smi在~/.condarc修改conda 源:channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/- https://mirrors.tuna.tsinghua.edu.cn/…...
如何在现实场景中随心放置AR虚拟对象?
随着AR的发展和电子设备的普及,人们在生活中使用AR技术的门槛降低,比如对于不方便测量的物体使用AR测量,方便又准确;遇到陌生的路段使用AR导航,清楚又便捷;网购时拿不准的物品使用AR购物,体验更…...
操作系统-处理机调度
1.处理机调度的概念、层次1.1调度的基本概念制定某种规则来决定处理任务的顺序。1.2调度的三个层次高级调度(作业调度)中级调度(内存调度)进程的挂起态与七状态模型低级调度(进程调度)小结2.进程调度的时机…...
手机截图如何提取文字?
在当今信息爆炸的时代,图文并茂已经成为了一个广告宣传的常用方式。然而,图片中的文字信息往往难以获取,尤其对于那些需要快速获取信息的人们来说,阅读图片中的文字会是一项繁琐且费时的任务。现在,我们有一个好消息要…...
vue中复制内容
vue中复制内容vue2vue-clipboard2依赖项在main.js引入使用vue3vue-clipboard3依赖项引入使用更新于:2023-02-15vue2vue-clipboard2 依赖项 “vue”: “^2.6.11” “vue-clipboard2”: “^0.3.1” 在main.js引入 import VueClipboard from vue-clipboard2 Vue.us…...
MySQL CAST()函数用法
一、语法 expr:源数据,如字符串’China’。type:目标数据类型,例如CHAR。 cast(expr AS type)二、命令说明 将任何类型的值转换为具有指定类型的值。 CAST()函数通常用于返回具有指定类型的值,以便在WHEREÿ…...
【测试工程师面试】详细记录 自己的一次面试
【测试工程师面试】详细记录 自己的一次面试 目录:导读 Linux基础 Oracle基础 编程基础 测试的基础 面试的问题 扯闲话部分: 10点刚到,先进行笔试,笔试的题目很基础,涉及到linux,涉及到oracle数据库…...
Elasticsearch 安装(二)
目录前言一、Linux 安装1、下载安装包⑴、选择需要的安装包⑵、下载解压到安装目录2、查看解压后目录结构3、启动 Elasticsearch⑴、正常启动流程⑵、启动过程遇到的问题①、启动报错②、创建运行 Elasticsearch 的用户,启动成功,但无法访问③、停止Elas…...
Java基础:异常与错误(ExceptionError)
1 缘起 某天上网冲浪时,偶然看到一个问题,说Java的Error和Exception有什么区别? 一句话:不知道。并不能很清晰地描述出个中区别。 当然,曾经也看过Throwable相关的知识,但是,并没有通过源码及注…...
VAmPI:一个包含了OWASP Top10漏洞的REST API安全学习平台
关于VAmPI VAmPI是一个包含了OWASP Top10漏洞的REST API安全学习平台,该平台基于Flask开发,该工具的主要目的是通过一个易受攻击的API来评估针对API安全检测工具的有效性,并帮助广大研究人员学习和了解API安全。 功能介绍 1、基于OWASP Top…...
springboot(6)之前端传递参数的方式 普通 集合 数组
实体类传递 首先我们在后端定义一个实体类,通过lombok插件重写 有参 无参 get set toString 方法, 然后前端发送数据,后端就会自动收到,然后属性填写 后端代码如下 AllArgsConstructor Data NoArgsConstructor public class role …...
redis分布式锁的演变过程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、直接添加Redis缓存二、使用setnx执行抢锁过程三、setnx获取锁+设置过期时间四、引入UUID解决误删锁问题五、引入Lua脚本来做删除六、对递归部分优化进行自旋七、添加自旋次数八、改为重入锁,使…...
leaflet 修改popup的样式,个性化弹窗(069)
第069个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中修改popup组件的样式,个性化弹窗。主要方法是更改css, 中增加custom-popup类名,style的样式要做穿透处理 >>>.具体方法请参考源代码。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实…...
网站内容建设怎么写/推广恶意点击软件怎样使用
JEE用途web sesrvice JMS、JMX,servlet,JspspringJSE 主要解决大数据问题用 socket通信占主流大数据是量身订做不断优化 深层次是数学问题Jvm 即沙箱sandbox 是优点也是缺点 对比.Net游戏矩阵运算,三维向量矩阵photoshop大量数学知识越接近决…...
渑池县建设局网站/aso优化平台有哪些
1,选用服务器:smtp.example.qq.com 使用ssl用密码端口:465转载于:https://www.cnblogs.com/qianlizeguo/p/6834584.html...
外贸网站建设熊掌号/外贸推广是做什么的
ViewPager指针项目,在使用ViewPager的时候能够指示ViewPager所在的位置,就像Google Play中切换的效果一样,还能使用在应用初始化的介绍页面1. 引入ViewPagerIndicator库2. 编写布局文件<com.viewpagerindicator.TabPageIndicatorandroid:i…...
整人网站怎么做/sem分析是什么
我正在使用弹簧靴.我有一个休息的api POST调用,我需要使用x-www-form-urlencoded发送正文,调用不需要头文件.我可以从邮递员中获取此URL,并在db中成功创建一行.但是当我尝试从Java端调用它时,我收到400个错误的请求异常.以下是我在Java中尝试过的内容.MultiValueMap map new L…...
宜昌做网站的/极速一区二区三区精品
DHCP基础部分DHCP全称 Dynamic Host Configuration Protocol (动态主机配置协议)。提供主机 IP 地址的动态租用配置、并将其他配置参数分配给合法网络客户的 TCP/IP 服务协议。DHCP 提供既安全、可靠,又简便的 TCP/IP 网络配置,可…...
福州短视频seo网站/品牌策划方案ppt
【环球网综合报道】对大众而言,黑色就是黑色。英国科技公司早前研发的一种名为Vantablack、用于隐形战机上的极致黑色颜料,却招引一群艺术家争破头。据香港“东网”2月28日报道,英国知名印度裔雕塑家卡普尔(Anish Kapoor)近日获得使用这种特殊…...