【PyTorch】2024保姆级安装教程-Python-(CPU+GPU详细完整版)-

【PyTorch】2024保姆级安装教程-Python-(CPU+GPU详细完整版)-

一、准备工作

  1. pytorch需要python3.6及以上的python版本
  2. 我是利用Anaconda来管理我的python。可自行安装Anaconda。
  3. Anaconda官网 Free Download | Anaconda

具体Anaconda安装教程可参考

https://blog.ZEEKLOG.net/weixin_43412762/article/details/129599741?fromshare=blogdetail&sharetype=blogdetail&sharerId=129599741&sharerefer=PC&sharesource=2201_75436278&sharefrom=from_link

二、pytorch介绍

安装 PyTorch 时,可以选择在 CPU 或 GPU 上运行,取决于你的硬件支持和需求。

  • CPU版本安装:CPU 版本适用于没有 GPU 或不需要使用 GPU 进行深度学习的情况。安装过程相对简单,因为没有依赖 GPU 驱动和 CUDA 的要求。
  • GPU版本安装:如果你的计算机上有 NVIDIA GPU,并且你希望加速深度学习计算,可以安装 GPU 版本的 PyTorch。GPU 版本依赖于 CUDA 和 cuDNN。

三、CPU版本pytorch安装

为了更好的管理不同项目的Python项目,通常建议创建一个虚拟环境。可以隔离不同项目的依赖项,避免项目之间的冲突。

1、创建虚拟环境

安装好Anaconda后会有这些程序


输入以下指令可查看当前的虚拟环境

conda env list 
在这里插入图片描述


利用 conda create 指令创建新的虚拟环境

conda create –n 虚拟环境名字(自己设置) python=版本 

演示如下

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


输入y,等待安装

2、路径处理

如果安装后的虚拟环境没在 annconda3\enxs 的目录下,通常是以下几个原因导致的(以我的目录为例):

  • 没有写入权限:如果当前用户对 C:\ProgramData\anaconda3\envs 目录没有写入权限,Conda 会选择使用用户本地目(C:\Users\Xzwzh\.conda\envs)来存放环境。
  • 用户环境配置:Conda 的配置文件 .condarc 中可以设置 envs_dirs,用于指定环境的默认存放位置。如果设置了用户本地目录,那么新建的环境会存放在那里。
  • 环境隔离:在某些情况下,用户可能会故意选择将环境安装在用户目录下,以便不同用户使用各自的环境,避免对全局安装目录的修改。

如果希望将环境放在anaconda3\envs 目录下,可以在创建环境时显示指定 --prefix 参数。

例如:

以管理员权限运行命令提示符,注意,下面的命令要以管理员身份运行,否则报错

conda create --prefix C:\ProgramData\anaconda3\envs\pytorch_env python=3.8 

也可以修改 .condarc 文件,将 envs_dirs 添加或修改为默认全局路径:

envs_dirs: - C:\ProgramData\anaconda3\envs 

然后重新创建环境即可。

3、删除虚拟环境

通过环境名称删除

conda remove --name 环境名称 --all 

通过环境路径删除

conda remove --prefix 路径 --all 

4、配置镜像源

根据上述操作,以如下的环境列表为例(虚拟环境已经创建好):

在这里插入图片描述

由于安装指令都是从国外的通道下载,下载速度会非常慢。所以我们可以用国内的镜像地址下载pytorch

conda config --show 

输入上述指令可以查看我们的通道地址

在这里插入图片描述

我的环境中有三个清华的镜像源。如果是之前没用过镜像源,这里只会显示dafaults。

在这里插入图片描述
镜像名镜像地址
清华源镜像https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch
阿里巴巴镜像http://mirrors.aliyun.com/anaconda/pkgs/main
淘宝镜像源https://registry.npmmirror.com/

这里的淘宝镜像源不推荐,由于淘宝npm镜像的旧域名(如npm.taobao.org和registry.npm.taobao.org)已经停止服务,并且HTTPS证书已经过期,需要使用淘宝最新的镜像源。列表给出的是(2024年9月) 淘宝的最新镜像的地址。

conda config --add channels 通道地址 

输入以上命令可以添加通道地址,添加后输入以下地址也可以查看通道地址(验证是否加上通道)

conda config --get 
在这里插入图片描述

如果想删除通道,可执行下面代码

conda config --remove channels 通道地址 

5、安装pytorch

1、首先激活环境变量

conda activate 创建的虚拟环境 
在这里插入图片描述

2、进入pytorch官网,找到安装指令

点击Get started 进行如下配置

在这里插入图片描述

找到安装代码

conda install pytorch torchvision torchaudio cpuonly -c pytorch //注意,这种就是直接从国外下载了 

用镜像源安装

conda install pytorch torchvision torchaudio cpuonly –c 镜像地址 
在这里插入图片描述
在这里插入图片描述

直接复制自己对应的镜像源即可

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入y即可

报错处理:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果出现如上报错,使用管理员身份进行上述步骤即可解决。

出现下图所示,就是安装完成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6、验证pytorch是否安装成功

  • 在安装pytorch的虚拟环境下输入conda list 查看是否有pytorch
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在虚拟环境下运行python并导入torch

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
print(torch.__version__) 
  • 输入上述命令,显示PyTorch 的版本号,说明 PyTorch 已经成功安装。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四、GPU版本pytorch安装

首先和CPU版本安装一样,创建一个虚拟环境,前面提到,这里不在重复。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1、查看自己电脑的GPU

在任务管理器中可查看GPU

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果没安装显卡驱动,先安装最新的显卡驱动,到官网自行安装即可。

查看驱动版本。win + r ,输入cmd 进入终端,输入指令:

nvidia-smi 
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的 CUDA 驱动版本是 12.1,这表示驱动所支持的最大 CUDA 运行时 API 版本是 12.1。因此,如果要安装 CUDA 运行时版本,就需要确保 CUDA 驱动版本 >= CUDA 运行时版本,也就是说可以安装 12.1 及更早的版本。

2、安装pytorch

直接进入创建的虚拟环境中输入命令,安装成功:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 
在这里插入图片描述

3、验证是否安装成功

指令:

import torch print(torch.__version__) print(torch.cuda.is_available()) 
  • 可以直接进入终端python运行指令检验
在这里插入图片描述


出现以上界面说明安装成功

  • 也可以直接在pycharm编辑器中验证。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用GPU环境,最后输出cu121True,说明安装成功

五、补充

1、卸载当前的PyTorch版本

进入所在的虚拟环境,输入以下指令即可。

pip uninstall torch torchvision torchaudio 
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、失败的安装过程

可以利用condapip进行安装,但是我都没安装成功,这里就不在过多介绍,可能是国内的镜像源很多都不能GPU版本的安装。可以参考。严格按照用pip安装应该能成功,只不过我当时安装指令错了。

https://blog.ZEEKLOG.net/weixin_44752340/article/details/130542629?fromshare=blogdetail&sharetype=blogdetail&sharerId=130542629&sharerefer=PC&sharesource=2201_75436278&sharefrom=from_link

最后我直接下载轮子文件(.whl)进行安装。

https://download.pytorch.org/whl/torch_stable.html 

上面这个是pytorch轮子文件的下载链接。根据自己的需求下载。

分别下载相应的torchtorchvision

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我下载的是2.2.2版本torchtorchvision,对应的CUDA版本是11.8,python版本是3.8,正如绿色、蓝色框所示。注意后面对应的 win 和 linux。下载过程较长。

下载完后,将两个文件放在虚拟环境的目录下。然后运行:

pip install 轮子文件名(torch-2.2.2+cu118-cp38-cp38-win_amd64.whl) 

但是我也安装失败了,后来我又安装的12.1的CUDA,也不行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


应该是版本不兼容问题。

Read more

LeetCode 761. 特殊的二进制字符串

LeetCode 761. 特殊的二进制字符串 题目描述 特殊的二进制序列是具有以下两个性质的二进制序列: * 0 的数量与 1 的数量相等。 * 二进制序列的每一个前缀码中 1 的数量不少于 0 的数量。 给定一个特殊的二进制序列 S,我们可以将其中任意相邻的两个 特殊子串 进行交换(这两个子串本身也是特殊串)。通过任意次这样的交换,求出所能得到的字典序最大的结果。 题目理解 这种特殊的二进制序列与有效的括号序列非常相似:把 1 看作左括号 (,把 0 看作右括号 ),则满足括号匹配的序列就是特殊串。例如 "1100" 对应 (()),"10" 对应 ()。多个特殊串可以并列,如 "1010" 对应 ()()。 题目允许交换任意两个 相邻的、并列的 特殊子串,

By Ne0inhk
【数据结构手札】顺序表实战指南(五):查找 | 任意位置增删

【数据结构手札】顺序表实战指南(五):查找 | 任意位置增删

🌈个人主页:聆风吟 🔥系列专栏:数据结构手札 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 * 📚专栏订阅推荐 * 📋前言 - 顺序表文章合集 * 一. ⛳️顺序表:重点回顾 * 1.1 🔔顺序表的定义 * 1.2 🔔顺序表的分类 * 1.2.1 👻静态顺序表 * 1.2.2 👻动态顺序表 * 二. ⛳️顺序表的基本操作实现 * 2.1 🔔查找某个值的下标 * 2.2 🔔在下标为pos位置插入x * 2.3 🔔删除下标为pos位置的数据 * 三. ⛳️顺序表的源代码 * 3.1 🔔SeqList.h 顺序表的函数声明 * 3.2 🔔SeqList.c

By Ne0inhk
【算法通关指南:数据结构和算法篇 】链表相关算法题:3. 队列安排,4.约瑟夫问题

【算法通关指南:数据结构和算法篇 】链表相关算法题:3. 队列安排,4.约瑟夫问题

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人方向学习者 ❄️个人专栏:《算法通关指南 》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、队列安排 * 1.1题目 * 1.2算法原理 * 1.3代码 * 二、约瑟夫问题 * 2.1题目 * 2.2算法原理 * 2.3代码 * 总结与每日励志 前言 本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长 一、队列安排 1.1题目 链接:

By Ne0inhk
优选算法——前缀和(5):和为 K 的子数组

优选算法——前缀和(5):和为 K 的子数组

🔥近津薪荼: [个人主页]🎬个人专栏: 《近津薪荼的算法日迹》《Linux操作系统及网络基础知识分享》《c++基础知识详解》《c语言基础知识详解》✨不要物化,矮化,弱化,钝化自己,保持锋芒,不要停止学习这个世界上只有两个人真正在注意着你八岁的你,和八十岁的你,他们此刻正在注视着你,一个希望你 勇敢开始,一个希望你 不留遗憾 1.上期参考代码 classSolution{public: vector<int>productExceptSelf(vector<int>& nums){int n=nums.size(); vector<int>front(n,1);for(int i=1;

By Ne0inhk