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

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 操作系统通过发送一定的信号,通知进程,某些事情已经发生,你可以在后续进行处理。 信号产生是随机的,进程可能正在忙自己的事情,所以&#xf…...

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 段的跨平…...

计算机网络拓扑结构

目录 <网络拓扑结构概念> <典型的拓扑结构介绍> 第一种&#xff0c;总线型网络拓扑结构 第二种&#xff0c;星型网络拓扑结构 第三种&#xff0c;树型网络拓扑结构 第四种&#xff0c;环型网络拓扑结构 第五种&#xff0c;网状型网络拓扑结构 第六种&#…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...