【背景】
最近接触了Transformer(s),但是受制于GPU显存,batch_size调不大,不能很好地复现原始的code,机缘巧合下,看到了Apex这个好东西(trick)。也看到不少的复现代码用到了这个trick。花了点时间,看了一下基本文档,顺带搬运过来,供今后查看。
【Apex介绍】
Nvidia Apex是由Nvidia公司维护的一套实用工具包,用于简化Pytorch的下游任务,故大部分代码是由Torch底层组成。对torch用户非常友好。这套工具包的用途基本概括为两项(其实有四项):
-
自动混合精度(Auto Mix Precision)
-
分布式训练(Distributed Training)
【安装指南】
官方安装文档:https : //github.com/NVIDIA/apex#quick-start
在文档中,我们可以大概总结出其需求:
-
Python3
-
CUDA 9.0 或者更高版本
-
PyTorch 0.4 或者更高版本(其中,CUDA 和C++扩展程序需要PyTorch 1.0 或者更高版本)
建议使用最新的PyTorch版本:https://pytorch.org/ 或者Pytorch的分支版本:https://github.com/pytorch/pytorch
嫌麻烦的,官方提供了Docker容器:
1、NGC的Nvidia Pytorch容器:容器中预装了Apex,如果要使用最新的Amp API, 还需要在这个容器中输入
pip uninstall apex
然后使用下面的Quick Start重新安装Apex
2、Pytoch官方的Dockerfiles:
docker pull pytorch/pytorch:nightly-devel-cuda10.0-cudnn7
然后使用下面的Quick Start重新安装Apex
【Quick Start】
官方提供的Quick Start中提及到的非常简单,对于一般的Linux系统用以下三行shell命令即可解决:
git clone https://github.com/NVIDIA/apex cd apex pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
如果是Pytoch 0.4 则把第三行命令替换成如下:
pip install -v --disable-pip-version-check --no-cache-dir ./
但是使用这样方法的安装会使一些库使用不正常:
apex.optimizers.FusedAdam apex.normalization.FusedLayerNorm apex.parralel.SyncBatchNorm
其中:
apex.parallel.DistributedDataParallel apex.amp.DistributedDataParallel amp SyncBatchNorm
仍可用,但是相比之下会更慢一些。
【Windows支持】
Windows下的Apex仍处于实验阶段,仍建议使用Linux。但一般的:在Windows下替换第三条命令如下:
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext"
如果没装CUDA或者C++扩展程序,则替换如下:
pip install -v --no-cache-dir .
如果是用Anaconda,安装前确保Apex对应相应环境。
【一些潜在问题以及官方回应】
-
2020.11.04 安装RTX 3090提示不支持RTX架构:https://github.com/NVIDIA/apex/issues/988#issuecomment-726343453
-
没装GCC G++ Make,或者检查不过:https://github.com/NVIDIA/apex/issues/932
有空多看看issues…