【背景】

最近接触了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对应相应环境。

【一些潜在问题以及官方回应】

有空多看看issues…

作者 WellLee

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注