尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

unilm (EdgeLM/fairseq) 中的轻量卷积翻译模型:LightConv 与 DynamicConv 的训练、评估与实现解析

unilm (EdgeLM/fairseq) 中的轻量卷积翻译模型:LightConv 与 DynamicConv 的训练、评估与实现解析 unilm (EdgeLM/fairseq) 中的轻量卷积翻译模型LightConv 与 DynamicConv 的训练、评估与实现解析【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm本文围绕edgelm/examples/pay_less_attention_paper/README.md展开系统讲解 EdgeLMfairseq仓库中 ICLR 2019 论文 Pay Less Attention with Lightweight and Dynamic Convolutions 对应实现的工程全貌LightConv/DynamicConv 两套预训练翻译模型的获取方式、IWSLT14/WMT14/WMT16/WMT17 训练与评估命令、CUDA 内核的安装方法以及从源码层面印证卷积算子、GLU、核大小列表与增量解码缓冲的实际实现位置。读完本文后你可以直接按文档复现训练流程、调用 torch.hub 加载预训练模型并理解--encoder-conv-type、--encoder-glu、--encoder-kernel-size-list等参数在 模型定义文件 中的真实作用。一、背景用轻量动态卷积少看注意力文档开头引用了 Wu et al. (ICLR 2019) 的工作 Pay Less Attention with Lightweight and Dynamic ConvolutionsarXiv 1901.10430核心思想是LightConv使用一组固定、轻量的卷积核每个注意力头共享一条kernel_size长度的可学习权重替代 self-attention参数量极小DynamicConv卷积核由输入动态生成每个位置用线性层预测自己的卷积权重表达力更强但参数量略高两者都可用 GLU 门控线性单元增强非线性也可去掉 GLU 换取更快的推理文档中no_glu系列模型即为此用途。在 EdgeLM 仓库中该模型以 fairseq 模型注册机制落地模型注册名是lightconv实现在 edgelm/fairseq/models/lightconv.pyregister_model(lightconv)的LightConvModel继承自FairseqEncoderDecoderModel文档中所有训练命令使用的-a lightconv_iwslt_de_en、--arch lightconv_wmt_en_de_big等架构名都由该文件末尾的register_model_architecture(lightconv, ...)注册函数定义卷积算子本体在 edgelm/fairseq/modules/lightweight_convolution.pyLightweightConv / LightweightConv1dTBC与 edgelm/fairseq/modules/dynamic_convolution.pyDynamicConv1dTBC中。二、预训练模型清单完整继承自文档文档提供了 10 个可直接下载的预训练模型。命名规则为架构.是否带GLU.数据集例如lightconv.no_glu.iwslt14.de-en表示IWSLT14 德英方向、LightConv 结构、不带 GLU的模型。部分数据集IWSLT14、WMT16 en-de同时提供了不带 GLU的版本文档明确说明其用途是faster at inference推理更快。ModelDescriptionDataset模型包内容lightconv.no_glu.iwslt14.de-enLightConv无 GLUIWSLT14 German-English模型 .tar.gz IWSLT14 test .tar.bz2dynamicconv.no_glu.iwslt14.de-enDynamicConv无 GLUIWSLT14 German-English模型 .tar.gz IWSLT14 test .tar.bz2lightconv.no_glu.wmt16.en-deLightConv无 GLUWMT16 English-German模型 .tar.gz newstest2014共享词表.tar.bz2dynamicconv.no_glu.wmt16.en-deDynamicConv无 GLUWMT16 English-German模型 .tar.gz newstest2014共享词表.tar.bz2lightconv.glu.wmt16.en-deLightConvWMT16 English-German模型 .tar.gz newstest2014共享词表.tar.bz2dynamicconv.glu.wmt16.en-deDynamicConvWMT16 English-German模型 .tar.gz newstest2014共享词表.tar.bz2lightconv.glu.wmt14.en-frLightConvWMT14 English-French模型 .tar.gz newstest2014 .tar.bz2dynamicconv.glu.wmt14.en-frDynamicConvWMT14 English-French模型 .tar.gz newstest2014 .tar.bz2lightconv.glu.wmt17.zh-enLightConvWMT17 Chinese-English模型 .tar.gz newstest2017 .tar.bz2dynamicconv.glu.wmt17.zh-enDynamicConvWMT17 Chinese-English模型 .tar.gz newstest2017 .tar.bz2这些模型名与仓库源码中的注册项一一对应edgelm/fairseq/models/lightconv.py 的LightConvModel.hub_models()方法返回了lightconv.no_glu.iwslt14.de-en、lightconv.glu.wmt17.zh-en等全部条目每条都带tokenizermoses、bpesubword_nmt的预处理配置。从源码结构看这正是 torch.hub 能直接按名字加载这些模型的依据。论文引用BibTeXinproceedings{wu2018pay, title {Pay Less Attention with Lightweight and Dynamic Convolutions}, author {Felix Wu and Angela Fan and Alexei Baevski and Yann Dauphin and Michael Auli}, booktitle {International Conference on Learning Representations}, year {2019}, url {https://arxiv.org/abs/1901.10430}, }三、内存高效的 CUDA 内核文档指出一個工程痛点PyTorch 原生实现unfold/band-matrix 两条路径见下一节在长序列下非常吃显存。为此仓库提供了两套 CUDA 内核在长序列上相比 PyTorch 版本可节省约 50% 显存。安装命令对 LightConv 与 DynamicConv 分别执行# 安装 lightconv CUDA 内核 cd fairseq/modules/lightconv_layer python cuda_function_gen.py python setup.py install # 安装 dynamicconv CUDA 内核 cd fairseq/modules/dynamicconv_layer python cuda_function_gen.py python setup.py install对应仓库中的真实文件edgelm/fairseq/modules/lightconv_layer/包含 cuda_function_gen.py、lightconv_cuda.cpp、lightconv_cuda_kernel.cu 与 setup.pyedgelm/fairseq/modules/dynamicconv_layer/包含 cuda_function_gen.py、dynamicconv_cuda.cpp、dynamicconv_cuda_kernel.cu 与 setup.py。内核自动接管机制可以在源码中得到印证edgelm/fairseq/modules/lightweight_convolution.py 中的工厂函数LightweightConv(...)会先尝试from fairseq.modules.lightconv_layer import LightconvLayer——若 CUDA 模块已安装则返回 CUDA 版本LightconvLayer否则回退到纯 PyTorch 的LightweightConv1dTBC并打印 ImportError 信息edgelm/fairseq/modules/dynamic_convolution.py 的DynamicConv(...)对dynamicconv_layer做同样处理。这就是文档所说安装后会自动替代 PyTorch 实现的具体实现方式无需改任何训练命令。四、torch.hub 交互式翻译与自定义模型加载4.1 依赖与 torch.hub 用法文档要求先安装两个预处理依赖pip install sacremoses subword_nmt然后通过 PyTorch Hub 交互式翻译完整示例继承自文档import torch # 列出可用模型 torch.hub.list(pytorch/fairseq) # [..., lightconv.glu.wmt17.zh-en, ... ] # 加载 WMT17 Zh-En 的 LightConv 模型 zh2en torch.hub.load(pytorch/fairseq, lightconv.glu.wmt17.zh-en, tokenizermoses, bpesubword_nmt) # 底层模型在 *models* 属性下 assert isinstance(zh2en.models[0], fairseq.models.lightconv.LightConvModel) # 翻译一句话 zh2en.translate(你好 世界) # Hello World4.2 加载本地自定义模型from fairseq.models.lightconv import LightConvModel en2fr LightConvModel.from_pretrained( /path/to/checkpoints, checkpoint_filecheckpoint_best.pt, data_name_or_pathdata-bin/wmt14_en_fr, bpesubword_nmt, bpe_codesdata-bin/wmt14_en_fr/en.code ) en2fr.translate(Hello world!) # Bonjour le monde从源码结构看LightConvModel.from_pretrained继承自 fairseq 的FairseqModel基类FairseqEncoderDecoderModel的通用类方法因此data_name_or_path必须指向fairseq-preprocess生成的 bin 目录checkpoint_file需包含与训练时一致的args含arch、encoder-conv-type等否则模型无法重建。五、训练/评估关键开关conv-type 与 GLU文档Training and evaluation options一节的三条核心规则使用不带 GLU 的模型--encoder-glu 0 --decoder-glu 0使用 LightConv--encoder-conv-type lightweight --decoder-conv-type lightweight默认是 DynamicConv为了最佳 BLEU可能需要手工调--lenpen长度惩罚。这三条规则在 edgelm/fairseq/models/lightconv.py 的参数定义中逐一得到印证参数默认值作用源码位置--encoder-conv-type/--decoder-conv-typedynamic可选dynamic/lightweight决定每层使用DynamicConv还是LightweightConv模型文件 中choices[dynamic, lightweight]--encoder-glu/--decoder-glu由架构默认值决定开启后在卷积前的线性投影使用Linear(embed_dim, 2*conv_dim)nn.GLU()关闭则退化为普通Linear(embed_dim, conv_dim)见 LightConvEncoderLayer--encoder-kernel-size-list/--decoder-kernel-size-list[3,7,15,31,31,31,31]/[3,7,15,31,31,31]每层卷积核大小若只给 1 个值则复制到所有层且必须与层数一致base_architecture--weight-softmaxTrue卷积权重是否做 softmax 归一化类似注意力权重--weight-dropout同--attention-dropout对卷积权重做 DropConnectlightweight_convolution.py 文档字符串明确其为 the drop rate of the DropConnect to drop the weight逐层核大小的含义从base_architecture的默认列表[3,7,15,31,31,31,31]可以看出浅层用较小核感受局部深层用较大的核覆盖更远上下文——用固定宽度、可学习的窗口替代注意力的全局访问这是该模型pay less attention的具体设计。六、IWSLT14 De-En单机单卡训练与评估以下命令完整继承自文档训练 DynamicConv无 GLU# 训练 SAVEsave/dynamic_conv_iwslt mkdir -p $SAVE CUDA_VISIBLE_DEVICES0 $(which fairseq-train)># 训练 SAVEsave/dynamic_conv_wmt16en2de mkdir -p $SAVE python -m torch.distributed.launch --nproc_per_node 8 $(which fairseq-train) \ ># 训练 SAVEsave/dynamic_conv_wmt14en2fr mkdir -p $SAVE python -m torch.distributed.launch --nproc_per_node 8 $(which fairseq-train) \ contenteditable="false">【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表