Pytorch 安装 APEX 疑难杂症解决方案

$ git clone https://github.com/NVIDIA/apex
$ cd apex
$ pip install -v --no-cache-dir --global-option="--pyprof" --global-option="--cpp_ext" --global-option="--cuda_ext" ./

(以上是安装 apex 的方法. apex 克隆在哪里都无所谓)

如果在执行第三行时出错 `”Cuda extensions are being compiled with a version of Cuda that does not…`, 尝试一下解决方案

安装全部完毕后记得删除你之前 cd 进去的 apex 目录.

0x00 安装 APEX 时报错

如果你打算保持你 pytorch version 不变, 但牺牲一些 apex 功能与效率(不推荐)

$ cd apex
$ nano setup.py

然后更改第 52 行代码, comment 掉

    if (bare_metal_major != torch_binary_major) or (bare_metal_minor != torch_binary_minor):
    	pass
        # raise RuntimeError("Cuda extensions are being compiled with a version of Cuda that does " +
        # "not match the version used to compile Pytorch binaries. " +
        # "Pytorch binaries were compiled with Cuda {}.\n".format(torch.version.cuda) +
        # "In some cases, a minor-version mismatch will not cause later errors: " +
        # "https://github.com/NVIDIA/apex/pull/323#discussion_r287021798. "
        # "You can try commenting out this check (at your own risk).")

重新运行即可解决错误

如果你打算调整 Pytorch Version 来适应 APEX (推荐)

首先用 nvcc --version 命令调查你的 nvcc 版本

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Tue_Jun_12_23:07:04_CDT_2018
Cuda compilation tools, release 9.2, V9.2.148

我的版本是 9.2

再进入 python 看看 pytorch cuda 版本

>>> torch.version.cuda
'9.0.176'

发现版本不符.

如果你的 GPU 是以下 GPU 的其中一种: 请调整 nvcc 与 pytorch.cuda 至 10.0

GeForce GTX 1650
GeForce GTX 1660
GeForce GTX 1660 Ti
GeForce RTX 2060
GeForce RTX 2060 Super
GeForce RTX 2070
GeForce RTX 2070 Super
GeForce RTX 2080
GeForce RTX 2080 Super
GeForce RTX 2080 Ti
Titan RTX
Quadro RTX 4000
Quadro RTX 5000
Quadro RTX 6000
Quadro RTX 8000
Tesla T4

如果你的 GPU 不是以上 GPU 的其中一种: 请调整 nvcc 与 pytorch.cuda 至 9.2

如果你需要重装 pytorch.cuda, PyTorch <- 按照这个说明.

如果你需要重装 nvcc, nvcc9.2, nvcc10.0.

安装完后测试 pytorch 可以用, 然后卸载 apex 并重新安装

pip uninstall apex
cd apex
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

0x01 安装 APEX 后报错

安装正常后大多数情况能正常运行(不能的话需要看看具体的错误是啥我才能帮你), 然后进入你的 project 加入 import

try:
    from apex.parallel import DistributedDataParallel as DDP
    from apex.fp16_utils import *
    from apex import amp, optimizers
    from apex.multi_tensor_apply import multi_tensor_applier
except ImportError:
    raise ImportError("Please install apex from https://www.github.com/nvidia/apex to run this example.")

然后在你创建后 net(model) 和 optimizer 后添加代码 (注意顺序)

net = net.cuda()
net, optimizer = amp.initialize(net, optimizer, opt_level="O1")

# if you need to use multiple GPU, uncomment this line
# net = torch.nn.DataParallel(net, device_ids=[i for i in range(torch.cuda.device_count())])

然后把你的 loss.backward() 换成

with amp.scale_loss(loss, optimizer) as scaled_loss: scaled_loss.backward()

如果你有用 pytorch 自带的 BCELoss 或 F.binary_cross_entropy , 请把他们替换成 BCEWithLogitsLoss 或 F.binary_cross_entropy_with_logists 并用 logists 作为输入.

大功告成! (如有问题欢迎骚扰)

    原文作者:陈瀚可
    原文地址: https://zhuanlan.zhihu.com/p/80386137
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞