9

Pytorch入门——手把手带你配置云服务器环境

 3 years ago
source link: http://www.cnblogs.com/techflow/p/13191100.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

今天这篇是 Pytorch专题 第一篇文章。

大家好,由于我最近自己在学习Pytorch框架的运用,并且也是为了响应许多读者的需求,推出了这个Pytorch专题。由于这个专题是周末加更的,所以不能保证更新进度,我尽量和其他专题一样,每周一更。

Pytorch简介

Pytorch底层是Torch框架,Torch框架是一个科学计算框架,拥有一个与Numpy类似的张量操作库。非常灵活,但是它的语言是Lua,比较小众,因此没有广泛流行。

后来开发团队在Torch的基础上包装了一层Python的Api,使得我们可以通过Python来进行调用。它是由Facebook的人工智能小组开发维护的,目前在业内也非常流行,尤其是学术界,几乎清一色的Pytorch。它拥有两个最大的优点,一个是 动态网络 ,像是TensorFlow等框架定义出来的神经网络是静态的,一旦写死不能轻易改变。但是Pytorch我们可以零延迟地改变任何神经网络。第二个有点是具有 强大的GPU加速计算的工具 ,Pytorch的GPU加速非常好用。

另外Pytorch的语法更加简洁规范,更加Pythonic,学习曲线也更平稳一些。 写出来的代码更加容易理解 ,更适合初学者。

当然由于诞生的时间还短,并且在工业界的普及度还不如TensorFlow,所以它也有一些短板,比如一些底层的文档不够完善,一些功能欠缺等等。在我个人的学习和使用当中,我的体验非常好,因此如果你没有学过深度学习的框架的话,推荐使用它作为你的第一门框架。

云服务器

既然是深度学习的框架,那么最好是能够拥有GPU环境。但是对于我们大多数人而言,GPU环境并不是一个容易的事情。比如我是Mac党,本身的机器就没有N卡,外接也不方便。当然没有GPU用CPU硬肝也是可以的,不过发热很严重,对电脑也有损伤。所以,最好的办法就是租借网上的GPU 云服务器 或者是云服务。

推荐一下滴滴云服务器,我个人使用下来体验还不错,最便宜的只要两块多一个小时,应该比网吧上网便宜。最近在搞巨大活动,包年云GPU只要2200,简直是白菜价中的白菜价。注意这个优惠只能第一笔下单的时候享受。如果感兴趣的话可以访问链接:https://i.didiyun.com/2cvmFVGpCjz

Jj6FJ3.jpg!web

查看原文

因为我是特邀用户,所以我拿到了内部优惠的大师码,如果要购买其他GPU云服务器的话,可以在付款的时候输入我的大师码2323,可以再享受9折优惠。

当然你也可以购买装好环境的Notebook,或者是按照时常购买。Notebook好处是预装了各种环境,上手可用,但是缺点是 不支持定制化 ,一些操作不太方便。毕竟有了云服务器可以自己搭建Notebook,但是Notebook并不支持服务器的功能。

如果你想要使用其他云服务器平台,可以查看我之前的文章

想要学深度学习但是没有GPU?我帮你找了一些不错的平台

环境配置

为了防止一些小白租借了机器不会用,接下来提供一下 配置环境的详细教程 (基于滴滴云)。如果你用的别家的服务器,由于环境不一定完全相同,所以可能并不一定适用,只能当做参考。

总之我们整个流程是: 安装Python3,安装jupyter,配置jupyter远程访问,安装Pytorch

这些是明面上的流程,如果机器环境不健全,还会有一些隐藏流程。比如说普通的Linux环境需要配置apt-get,还需要下载git,wget等常用工具。如果没有cuda驱动的话,还需要自己安装cuda配置。如果其中的步骤出现了问题,还需要分析问题的原因解决问题。所以说配置环境说起来简单,但是实际操作的时候问题并不少。

安装Python3

yum install python36

安装 jupyter notebook

sudo pip3 install ipython jupyter notebook lab

设置jupyter的密码

jupyter notebook password

生成jupyter notebook的配置,这个配置默认不存在,需要我们通过这个命令来生成。

jupyter notebook --generate-config

运行之后,会返回配置文件所在的路径:

EF3QbuZ.jpg!web

我们用vim打开,修改其中的几行:

c.NotebookApp.ip='0.0.0.0'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 # 可以自己指定

我们需要将本地的端口和远程进行绑定,这样我们就可以在本地打开远程的jupyter了。这一行代码当中我们 将本地的8899绑定了远程的8888端口 。这里的8888端口就是上面配置当中的远程的jupyter端口。

ssh [email protected] -L 127.0.0.1:8899:127.0.0.1:8888

如果你喜欢的话,还可以安装一下jupyter lab

sudo pip3 install jupyterlab

使用方法和notebook类似,在远程执行命令开启jupyter

jupyter lab --allow-root

启动没有问题的话,我们在本地访问:http://localhost:8899就可以打开Jupyter,输入密码之后就可以使用了。

当我们用完了云服务器之后,要 记得删除机器 。但由于平台机器数量有限,根据当前平台的设置,关机之后依然会为用户保留资源,但是前提是需要付费。如果你是按时租的服务器显然不能接受自己没在使用还需要付费。针对这个问题,我们可以通过快照来解决。我们 在关机之前先创建快照

UBb63qq.jpg!web

然后 删除云服务器 ,下次重新创建服务器的时候选择从快照创建。这样下次创建的机器还可以保留当前的配置和数据,而且也不需要扣费了。如果你嫌麻烦的话,还可以加我的微信联系我,我帮你找到工作人员 加入关机免扣费的白名单

我们用pip安装一下Pytorch和一些其他需要用到的包。安装好了,之后,我们通过torch.cuda.is_avaiable()查看一下cuda的情况,如果输出是True,那说明已经安装好了。

INZR7bv.jpg!web

tensor

Pytorch当中很重要的一个概念就是tensor,它直译过来是 张量 ,TensorFlow当中的tensor也是这个意思。我们可以认为tensor是一个高维的数组。当它是0维的时候就是一个数,一个标量。当它是一维的时候就是一个向量,二维的时候是一个矩阵,多维的时候是高维的数组。它和Numpy当中的数组类似,不过Tensor可以使用GPU进行加速。

我们通过torch当中的接口来初始化tensor,和Numpy当中的数组类似,它支持好几种初始化的方式。

empty函数创建一个指定大小的未初始化的tensor,当中的元素内容是不可保证的。

Zbuq6jE.jpg!web

rand创建一个随机初始化的数组:

iA7nieE.jpg!web

ones和zeros创建全是0或者全是1的数组:

IRJF3eN.jpg!web

我们可以传入类型指定元素的类型

NB3m6jb.jpg!web

我们也可以通过现成的数组创建tensor:

6NzMJjM.jpg!web

这些创建函数都有对应的like方法,可以传入一个已有的tensor, 创建出一个和它一样大小 的新的tensor来。

UJBbi2r.jpg!web

这里只是列举了常用的几种,官方的api当中还有其他的几种创建tensor的方式:

除此之外,tensor还支持从numpy的数组当中创建,我们可以利用from_numpy函数来实现:

Bjma22r.jpg!web

同理,我们也可以通过numpy函数,从一个tensor得到numpy的数组:

JJnii27.jpg!web

还可以通过tolist方法将tensor转化成Python的数组:

M7BZBf.jpg!web函数 功能 Tensor(*sizes) 基础构造函数 tensor(data,) 类似np.array的构造函数 ones(*sizes) 全1Tensor zeros(*sizes) 全0Tensor eye(*sizes) 对角线为1,其他为0 arange(s,e,step) 从s到e,步长为step linspace(s,e,steps) 从s到e,均匀切分成steps份 rand/randn(*sizes) 均匀/标准分布 normal(mean,std)/uniform(from,to) 正态分布/均匀分布 randperm(m) 随机排列

我们在创建tensor的时候不仅可以指定它们的类型, 还可以指定它们存放的设备 。比如是CPU还是GPU。当然前期我们暂时用不到这点,只需要记得即可。

总结

这是Pytorch的第一篇文章,我们简单了解了一下这个框架,以及它当中tensor这个数据结构。简单来说,我们可以用常用的Numpy去类比它。基本上Numpy当中有的功能它都有,它还有一些自己特性Numpy没有的api。但不管怎么说,万变不离其宗, tensor的用处就是为了方便我们处理数据的

关于Pytorch中tensor的用法还有很多,实在是没有办法在一篇文章当中穷尽,所以这里只是简单介绍,具体的用法将会放在下一篇文章当中,让我们下周再见吧。

如果喜欢本文,可以的话,请 点个关注 ,给我一点鼓励,也方便获取更多文章。

本文使用 mdnice 排版


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK