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

环境配置完整指导——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. 其他报错信息文章简介&#xff1a;这篇文章用于介绍在windows10 vscode中&#xff0c;跑通如下代码的全…...

深度学习——自注意力机制和位置编码(笔记)

1.自注意力&#xff1a; ①在深度学习中&#xff0c;经常使用卷积神经网络或者循环神经网络对序列进行编码 ②对于key,value和query&#xff0c;自注意力有一套自己的选法&#xff0c;因为key&#xff0c;value和query的值来自同一组输入。因此被称为自注意力或内部注意力 2…...

内网渗透(三十)之横向移动篇-利用远控工具向日葵横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

自动化测试中,该如何高效管理测试数据?

今晚在某个测试群&#xff0c;看到有人问了一个问题&#xff1a;把测试数据放配置文件读取和放文件通过函数调用读取有什么区别&#xff1f; 当时我下意识的这么回答&#xff1a;数据量越大&#xff0c;配置文件越臃肿&#xff0c;放在专门的数据文件&#xff08;比如excel&am…...

Qt中项目A调用另一个项目B的方法汇总

在开发一个软件项目时候&#xff0c;当涉及到一个模块&#xff0c;已经有过类似的项目开发&#xff0c;为了避免重复开发&#xff0c;涉及到在该项目的工程中调用已开发的项目作为子项目&#xff0c;有很多种方法。 一、将项目编译成库文件然后进行调用 调用库文件通常有两种…...

【项目精选】基于Javaee的影视创作论坛的设计与实现(视频+论文+源码)

点击下载源码 基于Javaee的影视创作论坛的设计与实现主要用功能包括&#xff1a; 首页推荐、用户管理、影片管理、评论管理、 预告片管理、海报管理、公告管理、数据检索、用户注册与登录等等功能、统结构如下 &#xff08;1&#xff09;后台管理: 管理模块&#xff1a;管理员…...

深入【虚拟列表】动态高度、缓冲、异步加载... Vue实现

前言&#x1f380; 在前文中我们了解到&#xff1a; 1.在某种特殊场景下&#xff0c;我们需要将 大量数据 使用不分页的方式渲染到列表上&#xff0c;这种列表叫做长列表。 2.因为事件循环的机制&#xff0c;一次性大量的渲染耗时较长&#xff0c;并且渲染期间会阻塞页面交互…...

Windows 11 + WSL(ubuntu 20.04) + CLion(2022.3) 编译OpenJDK12

编译OpenJDK12 目录编译OpenJDK12前言一、下载OpenJDK源码二、编译OpenJDK参考https://openjdk.org/groups/build/doc/building.html1&#xff1a;安装编译所需的组件2&#xff1a;执行编译命令3&#xff1a;验证编译结果三、在Clion中调试OpenJDK源码1&#xff1a;Clion中配置…...

Freemarker 语法精粹

文章目录说明基本用法宏加载宏定义宏文件写法import和include区别内置方法注册全局共享变量处理空值和默认值获得hashmap的键值从map中拿对象遍历Map其它小技巧迁移事项参考说明 Freemarker 还存在我的一些老项目中&#xff0c;比起前端框架&#xff0c;自有它的简便之处&…...

使用Benchto框架对Trino进行SQL性能对比测试

有时需要对魔改源码前后的不同版本Trino引擎进行性能对比测试&#xff0c;提前发现改造前后是否有性能变差或变好的现象&#xff0c;避免影响数据业务的日常查询任务性能。而Trino社区正好提供了一个性能测试对比框架&#xff1a;GitHub - trinodb/benchto: Framework for runn…...

Redis之哨兵模式

什么是哨兵模式&#xff1f; Sentinel(哨兵)是用于监控Redis集群中Master状态的工具&#xff0c;是Redis高可用解决方案&#xff0c;哨兵可以监视一个或者多个redis master服务&#xff0c;以及这些master服务的所有从服务。 某个master服务宕机后&#xff0c;会把这个master下…...

Selenium自动化测试Python二:WebDriver基础

欢迎阅读WebDriver基础讲义。本篇讲义将会重点介绍Selenium WebDriver的环境搭建和基本使用方法。 WebDriver环境搭建 Selenium WebDriver 又称为 Selenium2。 Selenium 1 WebDriver Selenium 2 WebDriver是主流Web应用自动化测试框架&#xff0c;具有清晰面向对象 API&…...

蓝桥杯模块学习17——AT24C02存储器(深夜学习——单片机)

一、硬件电路&#xff1a;1、引脚功能&#xff1a;&#xff08;1&#xff09;A0-A2&#xff1a;决定不同设备的地址码&#xff1a;&#xff08;2&#xff09;WP&#xff1a;写保护二、通讯方式&#xff08;IIC协议&#xff09;通讯方式与PCF8591相同&#xff0c;可参考以下文章…...

netty

Netty的介绍Netty是异步的&#xff08;指定回调处理&#xff09;、基于事件驱动的网络应用框架&#xff0c;用于快速开发高性能、高可靠性的网络IO程序。Netty本质是一个NIO框架&#xff0c;适用于服务器通讯相关的多种应用场景&#xff0c;分布式节点远程调用中Netty往往作为R…...

Django项目部署-uWSGI

Django项目部署-uWSGIDjango运维部署框架整体部署架构web服务器与web应用服务器的区别部署环境准备安装python3安装mariadb安装Django和相关模块Django托管服务器uWSGI使用uWSGI配置使用Django运维部署框架 整体部署架构 操作系统: Linux 。优势&#xff1a;生态系统丰富&…...

jhipster自动生成java代码的方法

一、前言 java springboot后台项目用到了jpa查询数据库&#xff0c;还用到了jhipster&#xff0c;这个东西可以自动生成基础的Controller、Service、Dao、JavaBean等相关代码&#xff0c;减少重复开发。 在此总结下使用方法。 二、jhipster自动生成java代码的方法 1.需要先…...

LeetCode 82. 删除排序链表中的重复元素 II

原题链接 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 给定一个已排序的链表的头 headheadhead &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,…...

tensorflow gpu环境安装

查看本电脑支持的最高cuda版本&#xff1a;nvidia-smi在~/.condarc修改conda 源&#xff1a;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的发展和电子设备的普及&#xff0c;人们在生活中使用AR技术的门槛降低&#xff0c;比如对于不方便测量的物体使用AR测量&#xff0c;方便又准确&#xff1b;遇到陌生的路段使用AR导航&#xff0c;清楚又便捷&#xff1b;网购时拿不准的物品使用AR购物&#xff0c;体验更…...

操作系统-处理机调度

1.处理机调度的概念、层次1.1调度的基本概念制定某种规则来决定处理任务的顺序。1.2调度的三个层次高级调度&#xff08;作业调度&#xff09;中级调度&#xff08;内存调度&#xff09;进程的挂起态与七状态模型低级调度&#xff08;进程调度&#xff09;小结2.进程调度的时机…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...