热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PyTorch0.4.0正式版Windows说明

让大家久等了,这次Windows的PyTorch终于正式发布了。欢迎大家去官网下载安装并体验使用,在此我补充一些官方没有的关于Windows的发布说明和常见问题。0.4.0发布说明

让大家久等了,这次 Windows 的 PyTorch 终于正式发布了。欢迎大家去官网下载安装并体验使用,在此我补充一些官方没有的关于 Windows 的发布说明和常见问题。

0.4.0 发布说明

错误修复:

  1. 修复多进程下的内存泄漏问题 PR #5585
  2. 使用多线程版本 MKL 替代顺序版 MKL ,在 CPU 上带来10%的速度提升 PR #6416
  3. 重新添加 Compute Capability 5.0 显卡的支持

新功能:

  1. 在编译中加入 MAGMA
  2. 添加 CUDA 9.1 build
  3. 提供 Wheels 包
  4. 支持新的cpp拓展 PR #5548

已知问题:

  1. 使用CPU来跑模型比Linux/Mac要慢很多,具体视模型复杂度和CPU核心数而定。原因是MSVC对新版本OpenMP的支持很差,因此我们会在下一个版本对一些组件进行替换,从而解决这个问题。使用GPU速度不受影响,与 Linux/Mac 没有区别。
  2. 包括分布式, NCCL等在内的一些组件在Windows下不受支持,详细可见:Issue #4092

常见问题

安装

1. Conda 依赖项冲突

Solving environment: failed
UnsatisfiableError: The following specifications were found to be in conflict:
- libxml2 -> libiconv -> *[track_features=vc14]
- libxml2 -> libiconv -> vc==14
- pytorch
Use "conda info " to see the dependencies for each package.

对于0.3.0及以下,请强制升级相关的包。

conda update libiconv
# 或者强制升级所有包
conda update --all

对于0.4.0及以上,请将 vc 恢复至默认状态。

conda install -c defaults vc=14

2. 在通道内找不到相应的包

Solving environment: failed
PackagesNotFoundError: The following packages are not available from current channels:
- pytorch
Current channels:
- https://conda.anaconda.org/pytorch/win-32
- https://conda.anaconda.org/pytorch/noarch
- https://repo.continuum.io/pkgs/main/win-32
- https://repo.continuum.io/pkgs/main/noarch
- https://repo.continuum.io/pkgs/free/win-32
- https://repo.continuum.io/pkgs/free/noarch
- https://repo.continuum.io/pkgs/r/win-32
- https://repo.continuum.io/pkgs/r/noarch
- https://repo.continuum.io/pkgs/pro/win-32
- https://repo.continuum.io/pkgs/pro/noarch
- https://repo.continuum.io/pkgs/msys2/win-32
- https://repo.continuum.io/pkgs/msys2/noarch

PyTorch 在32位系统上不受支持。请使用64位的 Windows 和 Python。

3. 从我的通道迁移至官方通道

如果你使用 peterjc123 通道的 0.3.1 版本 , 那么你可以直接进行升级。

conda install -c pytorch pytorch

否则请先卸载所有与 PyTorch 相关的包。

conda uninstall pytorch
# 如果是CUDA版本的话
conda uninstall cuda80 cuda90
# 如果 已安装的 PyTorch 版本 >= 0.3
conda install -c defaults vc=14
# 安装官方的包
conda install -c pytorch pytorch

4. 为什么没有 Python 2 的包?

因为它还不够稳定,在正式发布之前,我们需要解决一系列的问题。实在需要的话,你可以自己进行编译。

5. 怎么安装torchvision?

你可以通过 PyPI 进行安装。

pip install torchvision

6. 导入错误 1

from torch._C import *
ImportError: DLL load failed: The specified module could not be found.

这个问题说明缺少了必要的一些动态链接库。其实我们在发布时已经将几乎所有PyTorch需要的文件全部打包了,但是没有包含VC 2017 运行时。你可以尝试通过下面的命令进行安装:

conda install -c peterjc123 vc vs2017_runtime

另外一个原因是你安装了GPU版本的PyTorch,但是却没有Nvidia显卡。这种情况下,请将其替换为CPU版本。

7. 导入错误 2

from torch._C import *
ModuleNotFoundError: No module named 'torch._C'

这个错误与上一个不同。这通常会在以下情况发生:你的代码目录中有一个名为torch.py的文件。对文件做一下重命名就能解决。

8. 导入错误 3

ModuleNotFoundError: No module named 'torch'

这通常是你安装PyTorch的Python环境(pip/conda)和使用的Python环境不同造成的。你可以通过键入以下的指令进行检查。

where python.exe
# 如果使用 conda 进行安装
where conda.exe
# 如果使用 pip 进行安装
where pip.exe

注意这些命令输出的第一行,他们应该指向同一个Python环境。

C:\Anaconda2\Scripts\conda.exe
C:\Anaconda2\python.exe
C:\Anaconda2\Scripts\pip.exe

9. 网络错误

CondaError: EOFError('Compressed file ended before the end-of-stream marker was reached',)

[Anaconda dir]\pkgs 删除损坏的PyTorch包并重试。

使用(多进程)

1. 多进程错误 1

RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce an executable.

Python的 multiprocessing 库在 Windows 下的实现与 Linux 不同, 它使用的是 spawn ,而不是 fork 。所以我们需要在代码入口加上一个判断来防止程序多次执行。可以将代码重构为如下结构:

import torch
def main()
for i, data in enumerate(dataloader):
# do something here
if __name__ == '__main__':
main()

2. 多进程错误 2

ForkingPickler(file, protocol).dump(obj)
BrokenPipeError: [Errno 32] Broken pipe

这个错误当子进程过早结束时会发生。你的代码可能存在一些问题,可以将 DataLoadernum_worker 设置为0来进行调试。

3. 多进程错误 3

Couldn’t open shared file mapping: , error code: <1455> at D:\Downloads\pytorch-master-1\torch\lib\TH\THAllocator.c:154
[windows] driver shut down

请升级你的显卡驱动。如果升级后问题仍然存在,要么是你的显卡太老了,或者是计算太过复杂。可以尝试根据这个帖子修改TDR设置。

4. CUDA IPC 操作

THCudaCheck FAIL file=torch\csrc\generic\StorageSharing.cpp line=252 error=63 : OS call failed or operation not supported on this OS

这些在Windows上是不受支持的。有两个替代方案:

a). 不要使用 multiprocessing

b). 共享 CPU tensors。

CFFI拓展

1. 这种类型的拓展在 Windows 下支持比较差,而且这些拓展太多了,只靠几个人是没法改完的。如果硬要使用的话,可以看下面的说明。

2. 在Windows下编译,你需要在Extension对象中指明 libraries

ffi = create_extension(
'_ext.my_lib',
headers=headers,
sources=sources,
define_macros=defines,
relative_to=__file__,
with_cuda=with_cuda,
extra_compile_args=["-std=c99"],
libraries=['ATen'] # 在必要时添加CUDA相关的库,如cudart
)

3. 无法解析的外部链接 extern THCState *state;

error LNK2001: unresolved external symbol state caused by extern THCState *state;

将代码后缀名从.c改为.cpp,并对代码做如下改动。

#include #include
THCState *state = at::globalContext().thc_state;
extern "C" int my_lib_add_forward_cuda(THCudaTensor *input1, THCudaTensor *input2,
THCudaTensor *output)
{
if (!THCudaTensor_isSameSizeAs(state, input1, input2))
return 0;
THCudaTensor_resizeAs(state, output, input1);
THCudaTensor_cadd(state, output, input1, 1.0, input2);
return 1;
}
extern "C" int my_lib_add_backward_cuda(THCudaTensor *grad_output, THCudaTensor *grad_input)
{
THCudaTensor_resizeAs(state, grad_input, grad_output);
THCudaTensor_fill(state, grad_input, 1);
return 1;
}

C++拓展

这个类型的拓展在Windows下的支持比上面要好的多。但是他还是需要一些手工配置。首先,你需要打开x86_x64 Cross Tools Command Prompt for VS 2017,然后在其中打开git-bash,他一般的位置在C:\Program Files\Git\git-bash.exe,最后你可以开始进行编译。

其他

1. MAGMA 和 NCCL 支持

我们编译的包中包含了 MAGMA,但是当你的矩阵很大的时候 ,程序很可能不能正常工作。原因是在代码中它使用了 long 而不是 int64_t ,这就可能会在Windows上造成溢出问题。至于 NCCL,Nvidia只提供了Linux系统的二进制文件,也没有开源相应的代码,因此在NCCL for Windows发布之前,我们没有办法对其进行编译。

2. 分布式支持

我们会在未来对其进行研究和实现。

3. 老显卡架构支持

THCudaCheck FAIL file=torch\lib\thcunn\generic/Threshold.cu line=34 error=48 : no kernel image is available for execution on the device

为了和其他系统保持同步,我们无法对老显卡提供支持。不过你可以借助我的repo从源码进行编译,也可以安装 Google Drive 中的旧版本的包,亦或者安装我生成的 CI 包 。

以上,就是文章的全部内容啦,如果感觉还意犹未尽的话,可以给我的 Github 主页或者项目加个watch或者star之类的(滑稽),以后说不定还会再分享一些相关的经验。


推荐阅读
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
author-avatar
我俩的12月11_484
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有