Docker容器单机多GPU训练,apex安装踩坑记录

用了一个下午来安装apex,按照官方的3步流程,总在最后一步报错。

安装步骤如下(最好不要幻想用其它方式,因为其它方式大概率不报错但是用不了):

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

但是总是报下面这个错误,这个错误在github上非常常见,我去github上也找了很久,其实很多人讲了不少解决办法,但是我最终发现了一个致命的问题(核心错误在后四行)。

Cleaning up...
  Removing source in /tmp/pip-req-build-v0deounv
Removed build tracker '/tmp/pip-req-tracker-3n3fyj4o'
ERROR: Command errored out with exit status 1: /users4/zsun/anaconda3/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-v0deounv/setup.py'"'"'; __file__='"'"'/tmp/p
ip-req-build-v0deounv/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' --cpp_e
xt --cuda_ext install --record /tmp/pip-record-rce1cb4d/install-record.txt --single-version-externally-managed --compile Check the logs for full command output.
Exception information:

下面记录一下我发现的问题以及解决方案(记录性质的,没有截图)

# 首先查看docker 容器的cuda版本
nvcc --version

# '10.2.0'

# 进入python 查看其版本
python3

# 打印 python 3.6.9

# 查看torch对应的cuda版本
import torch
torch.version.cuda

# 10.1.0

这就有问题了,我的torch是1.4.0,torchvision是0.6.0,这两个对应cuda版本10.1,但是我容器cuda是10.2的。

别问,问就是梭哈,下载python3.6对应版本的 torch1.6.0,torchvision0.7.0,该版本对应的cuda就是10.2的,替换完成之后:

# 还在apex目录
$ pip uninstall apex
$ pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

****
****
****
successful install apex 0.1
****
****
****

安装成功,但是我们还是要去测试一下:

# 测试的原因在于amp的使用,如果不采用官方的方法,很可能在from apex import amp 
# 此时amp不存在,或者其他错误,但是import apex不会有问题,这也是为什么还是用官方的好点。

# 输入
python3

import apex
# 不报错, 但还没有结束

from apex import amp
# 直到这个时候,才是真正的安装成功。

总结一下,我看了github上很多类似的问题,大家好像都没有想过本机的cuda版本是否和自己的torch以及torchvision匹配,这应该是一个致命的隐患。

顺便附上apex的github地址 和 官方文档。

GitHub:https://github.com/NVIDIA/apex      API文档:https://nvidia.github.io/apex 

你可能感兴趣的:(Docker容器单机多GPU训练,apex安装踩坑记录)