Win10下安装PyTorch

star2017 1年前 ⋅ 439 阅读

PyTorch简介

在2017年1月18日,facebook下的Torch7团队宣布PyTorch开源后就引来了剧烈的反响。PyTorchTorchPython 上的衍生版本。Torch 是一个使用 Lua 语言的神经网络库, Torch 很好用, 但是 Lua 流行度不够, 所以facebook开发团队将 LuaTorch 移植到了更流行的语言 Python 上,推出了PyTorch

2017年12月5日,深度学习框架PyTorch更新到0.3.0。

PyTorch是一个Python优先的深度学习框架,是一个和tensorflow,Caffe,MXnet一样,非常底层的框架。先说下PyTorch相比于Tensorflow的三大优势:

一、Python优先支持

PyTorch主推的特性之一,就是支持Python(官方的提法:puts Python first)。因为直接构建自 Python C API,PyTorch从细粒度上直接支持python的访问。相比于原生Python实现,引入的新概念很少,这不仅降低了 Python 用户理解的门槛,也能保证代码基本跟原生的 Python 实现一致。事实上,开发者可以直接用原生 Python 代码扩展 PyTorchoperation

Tensorflow总有一种用 Python 调用 C++ 写的第三方动态链接库的感觉;写模型需要更多代码,无法贯彻 Python的简约风格;而且写新的 operation 必须用 C++ 开发。


二、动态图的良好支持

Tensorflow运行必须提前建好静态计算图,然后通过feedrun重复执行建好的图。但是Pytorch却不需要这么麻烦:PyTorch的程序可以在执行时动态构建/调整计算图。相对来说,pytorch具有更好的灵活性。这得益于PyTorch直接基于 Python C API 构建的 Python 接口。

TensorFlow饱受诟病的痛点就是只支持静态图模型。也就是说,在处理数据前必须预先定义好一个完整的模型。如果数据非常规整,那还好。但实际工程和研究项目中的数据,难免有一些边角的情况。很多项目,其实需要大量实验才能选择正确的图模型。这就很痛苦了。因此,很多项目转而采用了PyTorch等支持动态图模型的框架,以便在运行程序的时候动态修正模型。

不过在2017年10月31日万圣节这天,Google发布了TensorFlow Eager Execution(贪婪执行),为TensorFlow添加了命令式编程的接口。启用贪婪执行后,TensorFlow操作会立刻执行,不用通过Session.run()执行一个预先定义的图。相信在TensorFlow1.5左右,谷歌会正式为TensorFlow加入动态图的支持!


三、易于Debug

Pytorch在运行时可以生成动态图,开发者就可以在堆栈跟踪中看到哪一行代码导致了错误。你甚至可以在调试器中停掉解释器并看看某个层会产生什么。

PyTorch的Windows支持

PyTorch官方暂时没有提供Windows下的pip或者conda安装包。不过关于PyTorchWindows官方CI和官方版本,Soumith大神已经发话了:准备在Pytorch 0.4.0添加Windows正式版支持,CI版本正在搭建中。

PyTorch在Windows下的安装

据网友反应,这次的包需要CUDA 9 才能使用。

conda-build没有提供MSVC 2017的支持之前,我们没有办法来制作相应的Conda包,因此只能通过whl包来进行安装。具体怎么安装呢?目前将编译好的包上传到了GithubRelease页面上(旧的包没有启用BLAS,已删除,新的正在上传中),国内的在百度云,需要的用户可以自己下载安装。安装的命令如下:

# 对于 Conda 的用户
conda install numpy mkl pyyaml cffi

# For Python 3.5
pip install torch-0.3.0b0.591e73e-cp35-cp35m-win_amd64.whl

# For Python 3.6
pip install torch-0.3.0b0.591e73e-cp36-cp36m-win_amd64.whl

测试

Python交互模式下输入:

import torch

如果不报错,就是安装成功!

版本日志

错误修复

  1. backward中的错误会导致死锁
  2. DataLoader多线程时的内存泄漏
  3. torch.cuda中的缩进bug

新功能

  1. 添加对 CUDAcuDNN 新版本的支持
  2. 添加对 Ninjaclcache 编译器的支持

存在问题

  1. Conda下的bz2b包不支持 Python3.5 及以下的版本
  2. 不能支持 torch.distributed(分布式)、NCCL(多卡)和 Magma
  3. 不能把 num_worker 设置为1以上的值。有问题可以尝试调成0。另外代码入口得用以下的if语句包裹。即代码里面必须要有:
if __name__ == '__main__':
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: