环境配置完整指导——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.进程调度的时机…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.
这个警告表明您在使用Vue的esm-bundler构建版本时,未明确定义编译时特性标志。以下是详细解释和解决方案: 问题原因: 该标志是Vue 3.4引入的编译时特性标志,用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...
PLC入门【4】基本指令2(SET RST)
04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C),从 文件 - 主画面,“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...

作者说这个一定不要选,但是这个一定要选!不然会报错。