001-Windows下PyTorch极简开发环境配置(上)
本节介绍Windows系统下配置一套基于Pytorch框架的极简深度学习开发环境。
目录
0.1 缘起
0.1 缘起
其实大概在2016就开始接触深度学习的相关知识,但一直到2018年左右,还停留在门外汉的状态太,原因很简单,感觉学习的门槛过高。
虽然是所学专业算是半个CS,经常使用各种软硬件平台,但遇到深度学习,却觉得困难重重。
先说一下硬件。这里提到的硬件,其实就是带大容量显存,且支持GPU运算的显卡。现在一提到GPU,放在以前玩家的第一反应是玩大型游戏需要,但估计现在大家的第一反应是用来挖矿或者跑深度网络模型采用到。在当年深度学习快速发展的那个年代(其实也没太久远,还不到10年),不用说1080Ti,TITANX了,那是有一张能带6G现存的1060显卡,都当作香饽饽。有5年以上深度学习开发经验的人都知道,这是最丐版的要求了。
再说软件平台。在windows版的TensorFlow和PyTorch推出之前,早期的深度仿真平台只有一个选择:Unbutu,版本是16.04或18.04 LSTC版。对于习惯了在Windows下简单点击几下鼠标,顶多再手动修改一下环境变量,即能分分钟搞定某个开发平台。刚开始接触Ubuntu时的感觉简直无从下手,更不用谈什么设置、程序安装、调试什么的。这还是对于我这类半个CS专业出身的人员而言。相信看到这儿,有不少人感同身受。
最后说框架。如果说硬件的苦难可以通过金钱来解决,软件平台的不习惯可以通过动手熟悉来克服,那么框架所带来的问题直接是无解的。那个年代,计算机视觉领域主流的框架是Caffee,大家可能听说过其他的名称,比如Keras、Theano等等。这些框架都是专业人员开发的,集成度很高,但对非专业人员很不友好。说明文档少、结构复杂、但功能又不够强大。以Caffee为例,它是贾大神读博期间用C语言开发的一个经典的CNN框架,当我听到它是用C语言写的时候,就早早放弃了。不是不会C语言,相反,个人真正系统学习过的编程语言就只有C。但当一定到Caffee是用C开发的时,就放弃了。C语言写的东东,既常长又难。
基于上述三点原因,虽然很早我就攒好了一台深度学习工作站,但一直让它在吃灰。期间处于好奇,让实验室精通此术的学生,花了已整整一天的时间,才完成了配置。但配好之后从来就没自己用过,想想那个陌生的Ubuntu,就想再等等。这一等就是2年。
时间到了2020年,出现了转机。在此就不得不提到本专栏的第一主角:PyTorch。其实从0.4版本开始PyTorch就开启了对Windows的支持,但奈何当时功能还不能与TensorFlow匹敌。更重要的一个原因,相对于其他同等级的框架,PyTorch退出的时间很晚(它最初其实看作是Torch的python重写版本),对经典模型支持的一般,且使用它开行算法设计和开发的工作很少。但酒香不怕巷深,是金子总会发光的。与其他框架相比,PyTorch有着诸多不可替代的优势。随着时间的推移,版本更新越高,功能越来越强大,使用的人越来越多。终于,在2020年发布了2.0版,功能以及易用性大大提高。也就是在那个时间点之前半年,开始接触并使用Python进行CV经典算法的设计与研发。手头上也有一块全新的2080Ti(目前现在写这个专栏正在用主机上配的)。心里仔细盘算,硬件有了,软件系统也换成Windows了,框架也有PyTorch2.0了,还缺啥?没有任何不干的理由了,Go!
0.2 准备
在配置之前,需要做好以下准备。下面列出的方案只是我使用的,大家根据自己的事情情况调整即可。
硬件:
- CPU:最好是10代以上的i5或i7。
- 内存:32G起,有条件的上64G,再大意义不大。
- 主板:大厂的大版,供电好、扩展性好,比如华硕、微星等。
- GPU:这是主角,建议1080起,能用4090当然更好。如果能用A100,土豪,请受我一拜。
- 硬盘:其实很多人忽略了硬盘的重要性,系统盘尽量使用512G以上的M2 SSD,速度快;数据盘可考虑使用HDD,容量4T起(很便宜,但要注意选CMR的),用于大量的数据读写操作。
- 电源:这是另外一个容易被忽略的配件,其功率一定足够大。可以跟一个参考选项,即你所使用GPU最大功耗+500W,就是建议选用的主机电源功率值。比如,我使用的2080Ti最大功率约250W,则可考虑标称值为750W及以上的电源,最好选大品牌的。
注:为什么选用性能更差的HDD作为数据存储盘?这是因为在训练过程中可能会产生大量的数据读写操作,如果直接在SSD上进行写操作,会影响到SSD的寿命(SSD是有读写上限),但HDD不存在这个问题。开始我也没注意到此事,后来实验室新购的一批机器,在半年内SSD(还是三星的)纷纷出现问题,送到售后检测,被告之到了读写上限,才意识到该问题的严重性。特地在此注明,希望引起大家的重视。
软件:
- Windows10 :建议安装2021年十月份发布的LSTC版(64位),稳定,简约,既能得到长期的更新(据说是六年,到),又不会安装一些用不到的功能。Why not?
- Anaconda:用过的都知道,Python的最佳基友,方便强大还免费,还有赠品。Why not?
- 其他:一些必要的Python扩展库,如OpenCV、Pytorch;CUDA相关的套件。
然后呢?然后就没有了,你没看错,既然是极简配置,在不影响基本开发功能的前提下,能不用其他软件就不用。有人说,总要有个代码编辑器吧。有的,我们用Anaconda赠送的,无论是Jupyter Lab/Notebook,还是Spyder,都能完成基本功能。当然,如果您需要搭建更复杂的工程,那么安装一个PyCharm或者VS code还是值得的。
1.1 开始
经过前期的准备工作,默认已经安装好了Windows系统和Anaconda。
有关Anaconda安装的流程和注意事项,网上有的是资料可查,不再赘述。在此强调两个问题。
一是确认Anaconda中Python的版本,因为扩展库的更新通常赶不上Python的版本迭代,在安装扩展库时需要选择对应的Python版本,总的宗旨是,在能用的前提下,版本越高越好。
如何查Python版本?再简单不过了,打开Anaconda Prompt,键入python,系统即自动显示版本号。
二是完成安装之后,一定记得修改环境变量,将以下四条路径添加到Path路径下:
- 安装路径\anaconda3
- 安装路径\anaconda3\Scripts\
- 安装路径\anaconda3\Library\bin
- 安装路径\anaconda3\Library\mingw-w64\bin
(未完待续)
相关文章:
001-Windows下PyTorch极简开发环境配置(上)
本节介绍Windows系统下配置一套基于Pytorch框架的极简深度学习开发环境。 目录 0.1 缘起 0.1 缘起 其实大概在2016就开始接触深度学习的相关知识,但一直到2018年左右,还停留在门外汉的状态太,原因很简单,感觉学习的门槛过高。…...
分布式Raft原理详解,从不同角色视角分析相关状态
分布式Raft原理详解,从不同角色视角分析相关状态 1. CAP定理2.Raft 要解决的问题3. Raft的核心逻辑3.1. Raft的核心逻辑2.1. 复制状态机2.2. 任期 Term2.3. 任期的意义:逻辑时钟2.4 选举定时器 3. Leader选举逻辑4. 从节点视角查看Leader选举4.1. Follow…...
大数据的实时计算和离线计算你理解吗?
不管是实时计算还是离线计算,都有着同样的业务目标,那就是根据业务要求把数据源计算处理成业务需要的直接可用的数据结果。 如果把数据源比作是水龙头里的水,把数据计算比作是生产纯净水的过程;那么实时计算就是用一根水管接在水龙…...
OS Package Manager
Windows Package Manager winget chocolatey Mac homebrew Linux apt-get apt snap yum 使用wget和curl拉取相关工具的shell脚本执行安装...
【滑动窗口、矩阵】算法例题
目录 三、滑动窗口 30. 长度最小的子数组 ② 31. 无重复字符的最长子串 ② 32. 串联所有单词的子串 ③ 33. 最小覆盖子串 ③ 四、矩阵 34. 有效的数独 ② 35. 螺旋矩阵 ② 36. 旋转图像 ② 37. 矩阵置零 ② 38. 生命游戏 ② 三、滑动窗口 30. 长度最小的子数组 ② 给…...
【事务】开发用到的事务,TransactionDefinition实例详解,事务的传播机制
【事务】开发中用到的事务,TransactionDefinition实例详解 一、TransactionDefinition 介绍1、隔离级别(Isolation Level):2、传播行为(Propagation Behavior):3、超时设置(Timeout …...
Linux信号处理
Linux信号处理 什么是linux信号 本质是一种通知机制,用户 or 操作系统通过发送一定的信号,通知进程,某些事情已经发生,你可以在后续进行处理。 信号产生是随机的,进程可能正在忙自己的事情,所以…...
nuclei使用方法
nuclei使用方法 查看帮助 nuclei -h 列出所有模板 nuclei -tl 查找某种cms的相关漏洞模板,wordpress为例 nuclei -tl -tc "contains(name,wordpress)"便会列出内容里含有wordpress关键字的漏洞检测模板 使用与某cms相关的所有漏洞模板进行扫描&#…...
【并查集专题】【蓝桥杯备考训练】:网络分析、奶酪、合并集合、连通块中点的数量、格子游戏【已更新完成】
目录 1、网络分析(第十一届蓝桥杯省赛第一场C A组/B组) 2、奶酪(NOIP2017提高组) 3、合并集合(模板) 4、连通块中点的数量(模板) 5、格子游戏(《信息学奥赛一本通》…...
数据结构(三)复杂度的深层次剖析
之前发布了数据结构(一),很多同学反响不够清晰,那今天就发一篇对复杂度专题的博客,希望对大家理解复杂度提供一些帮助。 时间复杂度 我们先来一个理解一个复杂度,二分查找的复杂度(之前写过二…...
JavaWeb -- HTTP -- WEB服务器TOMCAT
一.HTTP介绍: HTTP(Hyper Text Protocol) 实际上是一种超文本传输的协议,规定了浏览器跟服务器之间的一些数据传输的规则 例如B/S 对于浏览器的请求,以及相应服务器的响应,都必须依靠这种协议,规范,才能够彼此之间相互 理解 HTTP的协议特点: 1.基于TCP协议: 面向连接 更加安全…...
GitHub与Git命令使用笔记
GitHub与Git命令使用笔记 文章目录 GitHub与Git命令使用笔记上传本地的新项目到github1. 创建新的GitHub仓库2. 初始化本地项目目录3. 将本地仓库关联到GitHub4. 推送本地代码到GitHub上传本地项目到GitHub时发生冲突 将默认分支名称从master改为maingit 把远程项目拉到本地&am…...
二叉树的层次遍历经典问题-算法通关村
二叉树的层次遍历经典问题-算法通关村 1 层次遍历简介 广度优先在面试里出现的频率非常高,整体属于简单题。广度优先又叫层次遍历,基本过程如下: 层次遍历就是从根节点开始,先访问根节点下面一层全部元素,再访问之后…...
SQLiteC/C++接口详细介绍sqlite3_stmt类(十二)
返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(十一) 下一篇: SQLiteC/C接口详细介绍sqlite3_stmt类(十三) 48、sqlite3_stmt_isexplain sqlite3_stmt_is…...
大模型时代如何做安全?
现在应该没人怀疑AI时代的到来了吧,在HUB上每天100的新的预训练模型产生,不夸张的说的,现在稍微有点计算机基础的人都可以训练自己的模型了。 说远了,还是说说那些不争气的安全厂商吧。为啥只说安全厂商?因为国内还是…...
新型储能是什么,储能系统解决方案现状及趋势详细说明
新型储能是指新兴的能够存储电能并在需要时释放的储能技术。其中主要包括光伏储能和商业储能。 光伏储能是指通过光伏电池将太阳能转化为电能,并将其存储起来以供后续使用。光伏储能系统一般由太阳能电池板、储能装置和逆变器组成。光伏储能可以将白天产生的电能存…...
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
在Go语言中,字典通常指的是map类型,它是一种用于存储键值对的数据结构。字典在Go中非常常见,是一种高效的数据结构,用于快速查找和检索数据。 字典的详细使用方法 创建字典 可以使用make函数来创建字典,并指定键值对…...
Flutter-仿携程首页类型切换
效果 唠叨 闲来无事,不小心下载了携程app,还幻想可以去旅游一番,奈何自己运气不好,自从高考时第一次吹空调导致自己拉肚子考试,物理,数学考了一半就交卷,英语2B铅笔除了问题,导致原…...
C语言 自定义类型:结构体
目录 前言 一、结构体类型 1.1 结构体的声明 1.2 结构体变量的创建和初始化 1.3 结构体的特殊声明 1.4 结构体的自引用 二、结构体的对齐 2.1 对齐规则 2.2 内存对齐的原因 2.3 修改默认对齐数 2.4 结构体传参 三、结构体实现位段 3.1 位段的内存分配 3.2 段的跨平…...
计算机网络拓扑结构
目录 <网络拓扑结构概念> <典型的拓扑结构介绍> 第一种,总线型网络拓扑结构 第二种,星型网络拓扑结构 第三种,树型网络拓扑结构 第四种,环型网络拓扑结构 第五种,网状型网络拓扑结构 第六种&#…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...
