Pytorch源码编译Libtorch

创建虚拟环境:

conda create -n build-libtorch python=3.8
cd build-libtorch

安装相关依赖:

conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses

下载 Pytorch,可通过 HTTPSSSH 方式进行下载:

git clone https://github.com/pytorch/pytorch.git  # HTTPS
git clone git@github.com:pytorch/pytorch.git  # SSH

克隆下来的是最新版本,可根据需要切换不同版本:

cd pytorch
git tag  # 查看标签
git checkout v1.4.0  # 根据标签切换版本
git submodule sync  # 根据父仓库中的配置,将子模块的URL进行更新,以保证与父仓库中记录的URL一致。这样,当执行git submodule update命令时,Git就能正确地从指定的URL下载子模块的更新或特定版本的代码
git submodule update --init --recursive  # 初始化和更新父仓库中的子模块,并递归地初始化和更新所有嵌套的子模块

如果不能通过 HTTPS 方式更新子模块,可以通过 sudo gedit .gitmodules 命令打开 .gitmodules 文件,该文件中记录了子模块的存储路径和下载地址。打开文件后修改子模块的 url,例如将 url = https://github.com/pybind/pybind11.git 修改为 url = git@github.com:pybind/pybind11.git。所有子模块的 url 都修改好后,依次执行 git submodule syncgit submodule update --init --recursive

也可一步到位进行下载:

git clone -b v1.4.0 https://github.com/pytorch/pytorch.git
git clone -b v1.4.0 git@github.com:pytorch/pytorch.git

可根据需要设置编译选项:

export USE_CUDA=False
export BUILD_TEST=False
export USE_NINJA=OFF

执行编译:

方式一:
# 在pytorch目录下
mkdir build_libtorch && cd build_libtorch
python ../tools/build_libtorch.py方式二:
# 在pytorch的父目录下
mkdir pytorch-build && cd pytorch-build
cmake -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_BUILD_TYPE:STRING=Release -DPYTHON_EXECUTABLE:PATH=`which python3` -DCMAKE_INSTALL_PREFIX:PATH=../pytorch-install ../pytorch
cmake --build . --target install

新建 libtorch 目录,将 pytorch/torch/include 目录复制到 libtorch 目录下,将 build/lib 目录复制到 libtorch 目录下。

可能遇到的问题:

  1. 在执行 cmake 命令时,运行到 Performing Test COMPILER_SUPPORTS_LONG_DOUBLE 这一步就停止不动了,长时间没有反应,这很可能是 GCC 版本导致的问题,可尝试更换 GCC 版本来解决,更换的版本可以比之前更高,也可以更低,可以多尝试
  2. 出现 Could not run a simple program built with your compiler. If you are trying to use -fsanitize=address, make sure libasan is properly installed on your system (you can confirm if the problem is this by attempting to build and run a small program.) 问题,可尝试在 pytorch 目录下的 CMakeLists.txt 中设置 set(INTERN_BUILD_MOBILE ON) 来解决

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序快速入门01(含案例)

文章目录 前言一、组件1.常用视图容器类组件viewscroll-viewswiper、swiper-item 2.text、rich-text3.其他常用组件buttonimagenavigator 二、小程序API三、数据绑定1.定义页面数据2.绑定数据 四、事件绑定1.什么是事件2.小程序中常用的事件3.事件对象 的属性列表target和curre…

详解Renko图表如何表现价格变动

相信大多数投资者与FPmarkets澳福一样,都已发现Renko图表与日本烛台图一样,具有上升和下降的特性。增长期间的典型砖块颜色为绿色或白色,而衰退期前的Renko则呈现红色或黑色。 今天,FPmarkets澳福将与各位投资者共同探讨Renko图表…

计算机视觉的优势和挑战

计算机视觉(CV)是一项快速发展的技术,它具有许多优势和挑战。以下是一些可能的例子: 优势: 1. 自动化:CV技术可以自动化任务,例如图像分类、目标检测和跟踪,从而提高生产力和减少人…

第一个 Go 程序“hello,world“ 与 main 函数

第一个 Go 程序"hello,world" 与 main 函数 文章目录 第一个 Go 程序"hello,world" 与 main 函数一.创建“hello,world”示例程序二. “hello,world” 程序结构拆解三、main 函数四、Go 语言中程序是怎么编译…

C++qt Day10

1.制作闹钟 头文件 #include <QWidget> #include <QTimerEvent> #include <QTime> #include <QtTextToSpeech/QTextToSpeech> #include <QTextEdit> #include <QString>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMES…

PowerDesigner 连接 MYSQL

我使用的是powerDesigner16的版本&#xff0c;使用前先保证安装了 mysql odbc 驱动包 选择&#xff1a;文件 -> 反向工程 -> database… 一大波图片正在来袭。。。 点击确认 至此连接成功

代码随想录二刷day37

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣738. 单调递增的数字二、力扣968. 监控二叉树 前言 一、力扣738. 单调递增的数字 class Solution {public int monotoneIncreasingDigits(int n) {Str…

【JavaScript保姆级教程】Javascript常量

文章目录 前言一、常量1.1 常量是什么1.2 常量的作用 二、示例代码2.1 示例1&#xff1a;声明一个常量2.2 示例2&#xff1a;常量的命名规则2.3 示例3&#xff1a;常量与变量的区别 总结 前言 欢迎来到【JavaScript保姆级教程】&#xff01;在本篇教程中&#xff0c;我们将讨论…

【激光雷达码盘偏摆角的真假点映射关系】

激光雷达码盘偏摆角的真假点映射关系 一、概要二、完架构流程三、技术细节四、完整代码 一、概要 本代码主要计算激光雷达码盘偏摆角&#xff08;也可以理解为雷达的零位角&#xff09;导致的实际slam建图距离的偏差&#xff0c;只取了第一个象限作为分析目标。最终得出的结论是…

浅谈Deep Learning 与 Machine Learning 与Artificial Intelligence

文章目录 三者的联系与区别 三者的联系与区别 “Deep Learning is a kind of Machine Learning, and Machine Learning is a kind of Artificial Intelligence.” 人工智能&#xff08;AI&#xff09;&#xff0c;机器学习&#xff08;Machine Learning&#xff0c;简称ML&am…

41. Linux系统配置FTP服务器并在QT中使用QFtp实现文件上传

1. 说明 这篇博客主要记录一些在Linux系统中搭建FTP服务器时踩过的一些坑,以及在使用QFtp上传文件时需要注意的问题。 2. FTP环境搭建 在linux系统中,需要安装vsftpd,可以在终端中输入下面的命令进行安装: sudo apt-get install vsftpd使用上述命令安装后,系统中会有一…

深入探索RTPS/DDS协议:为嵌入式设备打造的可移植C++实现指南

第一部分&#xff1a;RTPS/DDS协议简介及其在嵌入式设备中的重要性 1. RTPS/DDS协议简介 RTPS (Real-Time Publish-Subscribe) 和 DDS (Data Distribution Service) 是两个紧密相关的中间件协议&#xff0c;专为实时系统设计。它们为分布式应用提供了一种高效、可靠和可扩展的…

价值1000的情感爆文写作prompt,助你写出10万+阅读微信爆文

原文&#xff1a;价值1000的情感爆文写作prompt&#xff0c;助你写出10万阅读微信爆文 - 知乎 是否经常看到一些自媒体晒出这样的图片&#xff1f; 或者是这样的10w的阅读文章 那么这是真实能赚钱的吗&#xff1f;还是自媒体夸大其说&#xff0c;吸引流量。 我们先简单了解什…

什么是重入锁?

重入锁&#xff08;Reentrant Lock&#xff09;是一种在多线程编程中用于控制对共享资源访问的锁机制。它的特点是允许同一个线程多次获得同一把锁&#xff0c;也就是说&#xff0c;线程可以进入由它已经持有的锁所保护的代码块&#xff0c;而不会被自己持有的锁所阻塞。这种特…

基础练习 回文数

问题描述 1221是一个非常特殊的数&#xff0c;它从左边读和从右边读是一样的&#xff0c;编程求所有这样的四位十进制数。 输出格式 按从小到大的顺序输出满足条件的四位十进制数。 solution1 #include <stdio.h> int main(){int n 1000, n1, n2, n3, n4;while(n &…

【C++】bitset位图的简单模拟实现及常见面试题

文章目录 前言一、 bitset模拟实现二、 常见面试题1.给你一百亿个整数&#xff0c;找到只出现一次的数字2. 给两个文件&#xff0c;分别有100亿个整数&#xff0c;我们只有1G内存&#xff0c;如何找到两个文件交集&#xff1f; 前言 快速查找某个数据是否在一个集合中排序 去重…

有名管道及其应用

创建FIFO文件 1.通过命令&#xff1a; mkfifo 文件名 2.通过函数: mkfifo #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); 参数&#xff1a; -pathname&#xff1a;管道名称的路径 -mode&#xff1a;文件的权限&a…

每日两题 70爬楼梯 746使用最小花费爬楼梯(动态规划)

70 70 题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示例 …

程序员的快乐如此简单

最近在GitHub上发起了一个关于Beego框架的小插件的开源仓库&#xff0c;这一举动虽然看似微小&#xff0c;但其中的快乐和意义却是无法用言语表达的。 Beego是一个开源的Go语言Web框架&#xff0c;它采用了MVC架构模式&#xff0c;并集成了很多常用的功能和中间件。小插件是指…

【RUST】HashMap、vector和String

HashMap 新建一个哈希hash use std::colection::HashMap;let mut scores HashMap::new();scores.insert(String::from("Blue"), 10); score.Vector 创建vector let arr vec![2, 3, 5]; let arr: [i32; 3] [2, 3, 5]; // 创建定长数组访问vec中的元素 # 报错…