PyTorch Windows 常见问题

2025-06-25 10:27 更新

一、构建 PyTorch

1.1 包括可选组件

在 Windows 上构建 PyTorch 时,可以包含可选组件如 MKL 和 MAGMA。以下是构建步骤:

REM 确保安装了 7z 和 curl
REM 下载 MKL 文件
curl https://s3.amazonaws.com/ossci-windows/mkl_2018.2.185.7z -k -O
7z x -aoa mkl_2018.2.185.7z -omkl


REM 下载 MAGMA 文件
set CUDA_PREFIX=cuda90
set CONFIG=release
curl -k https://s3.amazonaws.com/ossci-windows/magma_2.5.0_%CUDA_PREFIX%_%CONFIG%.7z -o magma.7z
7z x -aoa magma.7z -omagma


REM 设置环境变量
set "CMAKE_INCLUDE_PATH=%cd%\\mkl\\include"
set "LIB=%cd%\\mkl\\lib;%LIB%"
set "MAGMA_HOME=%cd%\\magma"

1.2 加快 Windows 的 CUDA 构建

可以使用 Ninja 来并行化 CUDA 构建任务:

REM 安装 Ninja
pip install ninja


REM 设置 CMake 生成器为 Ninja
set CMAKE_GENERATOR=Ninja

二、扩展开发

2.1 CFFI 扩展

在 Windows 上启用 CFFI 扩展需要额外步骤。首先,在 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', '_C']  # 根据需要添加 CUDA 库
)

其次,将源代码从 C 更改为 C++

#include <THC/THC.h>
#include <ATen/ATen.h>


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;
}

2.2 C++ 扩展

对于 C++ 扩展,建议使用 x86_x64 VS 2017 的交叉工具命令提示符进行编译。

三、安装问题

3.1 在 Win-32 频道中找不到软件包

PyTorch 不支持 32 位系统,请使用 Windows 和 Python 的 64 位版本。

3.2 导入错误

错误 1:DLL 加载失败

该错误通常是由于缺少必要的运行库文件引起的。可以通过以下命令解决:

conda install -c peterjc123 vc vs2017_runtime
conda install mkl_fft intel_openmp numpy mkl

对于 wheel 包,确保安装了 VS 2017 可再发行组件和 NumPy:

pip install numpy mkl intel-openmp mkl_fft

错误 2:操作系统无法运行模块

该错误通常是由于使用了不兼容的 GPU 版本或 Anaconda 问题引起的。可以尝试以下命令修复:

conda install -c defaults intel-openmp -f

四、并行处理问题

4.1 没有 if 子句保护的并行处理错误

在 Windows 上,multiprocessing 使用 spawn 而不是 fork。需要将代码包裹在 if __name__ == '__main__': 块中:

import torch


def main():
    # 数据加载和训练代码
    pass


if __name__ == '__main__':
    main()

4.2 并行处理错误“管道破裂”

该错误通常是由于子进程在父进程完成发送数据之前结束引起的。可以通过将 DataLoadernum_workers 设置为零来调试:

dataloader = torch.utils.data.DataLoader(dataset, num_workers=0)

4.3 并行处理错误“驱动程序关闭”

请更新您的图形驱动程序。如果问题仍然存在,可以尝试更新 TDR 设置。

4.4 CUDA IPC 操作不支持

Windows 不支持 CUDA IPC 操作。可以选择不使用 multiprocessing 或共享 CPU 张量:

## 不使用 multiprocessing
dataloader = torch.utils.data.DataLoader(dataset, num_workers=0)


## 共享 CPU 张量
class CustomDataset(torch.utils.data.Dataset):
    def __getitem__(self, idx):
        # 确保返回 CPU 张量
        return self.data[idx].cpu(), self.labels[idx].cpu()

五、常见问题解答

Q1:为什么 PyTorch 在 Windows 上不支持 CUDA IPC 操作?

A1:Windows 系统不支持 CUDA IPC 操作,这是由于操作系统的限制。可以选择不使用 multiprocessing 或共享 CPU 张量来解决。

Q2:如何解决导入错误?

A2:导入错误通常是由于缺少必要的运行库文件或使用了不兼容的包版本。可以通过安装所需的运行库和检查包版本来解决。

Q3:如何在 Windows 上构建 PyTorch?

A3:在 Windows 上构建 PyTorch 需要额外的步骤,包括下载和配置 MKL 和 MAGMA 等可选组件。可以参考官方文档获取详细的构建指南。

六、总结与展望

通过本文的详细介绍,我们掌握了 PyTorch 在 Windows 平台上的常见问题及解决方案。这些内容涵盖了从构建、安装到并行处理的各个方面,希望能帮助你在 Windows 环境下顺利开发和部署 PyTorch 项目。

关注编程狮(W3Cschool)平台,获取更多 PyTorch 开发相关的教程和案例。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号