【背景】
最近接触了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, 还需要在这个容器中输入
1 | pip uninstall apex |
然后使用下面的Quick Start重新安装Apex
2、Pytoch官方的Dockerfiles:
1 | docker pull pytorch /pytorch :nightly-devel-cuda10.0-cudnn7 |
然后使用下面的Quick Start重新安装Apex
【Quick Start】
官方提供的Quick Start中提及到的非常简单,对于一般的Linux系统用以下三行shell命令即可解决:
1 2 3 | 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 则把第三行命令替换成如下:
1 | pip install - v --disable-pip-version-check --no-cache- dir ./ |
但是使用这样方法的安装会使一些库使用不正常:
1 2 3 | apex.optimizers.FusedAdam apex.normalization.FusedLayerNorm apex.parralel.SyncBatchNorm |
其中:
1 2 3 4 | apex.parallel.DistributedDataParallel apex.amp.DistributedDataParallel amp SyncBatchNorm |
仍可用,但是相比之下会更慢一些。
【Windows支持】
Windows下的Apex仍处于实验阶段,仍建议使用Linux。但一般的:在Windows下替换第三条命令如下:
1 | pip install - v --no-cache- dir --global-option= "--cpp_ext" --global-option= "--cuda_ext" |
如果没装CUDA或者C++扩展程序,则替换如下:
1 | 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…