Facebook开源PyTorch版本fairseq翻译模型,训练速度提高50%

简介: FAIR的开源序列到序列(sequence-to-sequence)引擎现在可以在PyTorch使用了。FAIR今天发布了fairseq-py,这是一个用PyTorch实现的卷积seq2seq模型。fairseq-py是语言翻译以及其他 seq2seq 的NLP任务的一个很好的模型,新的工具包比以前的更高效率:生成翻译的速度比以前的提高了80%,训练速度提高了50%。


image

今年5月10日,Facebook AI 研究实验室(FAIR)发布了一项使用创新性的、基于卷积神经网络的方法来进行语言翻译的最新成果。Facebook 称,该研究取得了截止目前最高准确度,并且速度是基于循环神经网络(RNN)系统的9倍(谷歌的机器翻译系统使用的就是这一技术)。

今天开源的是一个PyTorch版本的fairseq。这个重新实现的原作者是Sergey Edunov,Myle Ott和Sam Gross。该工具包实现了 Convolutional Sequence to Sequence Learning(https://arxiv.org/abs/1705.03122 )中描述的完全卷积模型(fully convolutional model),在单个机器上实现多GPU训练,并在CPU和GPU上实现快速 beam search 生成。我们提供英语到法语和英语到德语翻译的预训练模型。


引用

如果要在论文中使用这些代码,请按如下格式引用:


@inproceedings{gehring2017convs2s,
  author    = {Gehring, Jonas, and Auli, Michael and Grangier, David and Yarats, Denis and Dauphin, Yann N},
  title     = "{Convolutional Sequence to Sequence Learning}",
  booktitle = {Proc. of ICML},
  year      = 2017,
}

要求和安装步骤

  • 运行macOS或Linux的计算机
  • 为了训练新模型,你还需要一个NVIDIA GPU和NCCL
  • Python 3.6
  • PyTorch安装

目前,Fairseq-py需要GitHub库里的PyTorch。有多种安装方式,我们建议使用Miniconda3并按照说明安装:

conda install gcc numpy cudnn nccl
conda install magma-cuda80 -c soumith
pip install cmake
pip install cffi

git clone https://github.com/pytorch/pytorch.git
cd pytorch
git reset --hard a03e5cb40938b6b3f3e6dbddf9cff8afdff72d1b
git submodule update --init
pip install -r requirements.txt

NO_DISTRIBUTED=1 python setup.py install

Clone GitHub 存储库并运行以下命令安装fairseq-py:

pip install -r requirements.txt
python setup.py build
python setup.py develop

快速开始

以下命令行工具可用:

  • python preprocess.py:数据预处理:构建词汇和二进制训练数据
  • python train.py:在一个或多个GPU上训练新模型
  • python generate.py:用训练好的模型翻译预处理的数据
  • python generate.py -i:使用训练好的模型翻译原始文本
  • python score.py:根据参考翻译对生成的翻译进行BLEU评分

评估预训练的模型

首先,下载一个预训练的模型及其词汇:


$ curl https://s3.amazonaws.com/fairseq-py/models/wmt14.en-fr.fconv-py.tar.bz2 | tar xvjf -

该模型使用字节对编码(BPE)词汇表,因此我们必须将该编码应用于源文本才能进行翻译。这可以通过使用wmt14.en-fr.fconv-cuda / bpecodes文件的apply_bpe.py脚本完成。@@ 用作连续标记,用 sed s / @@ // g 或将 --remove-bpe 标志传递给generate.py,原始文本可以很容易地恢复。在BPE之前,输入文本需要使用mosesdecoder中的tokenizer.perl进行标记化。

让我们使用python generate.py -i来生成翻译。在这里,我们使用beam的大小是5:


$ MODEL_DIR=wmt14.en-fr.fconv-py
$ python generate.py -i \
 --path $MODEL_DIR/model.pt $MODEL_DIR \
 --beam 5
| [en] dictionary: 44206 types
| [fr] dictionary: 44463 types
| model fconv_wmt_en_fr
| loaded checkpoint /private/home/edunov/wmt14.en-fr.fconv-py/model.pt (epoch 37)
> Why is it rare to discover new marine mam@@ mal species ?
S       Why is it rare to discover new marine mam@@ mal species ?
O       Why is it rare to discover new marine mam@@ mal species ?
H       -0.08662842959165573    Pourquoi est-il rare de découvrir de nouvelles espèces de mammifères marins ?
A       0 1 3 3 5 6 6 10 8 8 8 11 12

生成脚本产生四种类型的输出:以S为前缀的行显示了应用词汇表后提供的源语句(source sentence); O是原始来源句的副本(original source sentence); H是平均 log-likelihood以外的假设(hypothesis); 而A是假设中每个单词的注意力最大值( attention maxima),包括文本中省略的句末标记。

下面是预训练模型列表。

训练一个新模型

数据预处理

Fairseq-py源码分发包含了一个用于IWSLT 2014德语 - 英语语料库的预处理脚本示例。预处理和二值化数据如下:


$ cd data/
$ bash prepare-iwslt14.sh
$ cd ..
$ TEXT=data/iwslt14.tokenized.de-en
$ python preprocess.py --source-lang de --target-lang en \
  --trainpref $TEXT/train --validpref $TEXT/valid --testpref $TEXT/test \
  --thresholdtgt 3 --thresholdsrc 3 --destdir data-bin/iwslt14.tokenized.de-en

这将会将可用于模型训练的二值化数据写入 data-bin/iwslt14.tokenized.de-en。

训练

使用python train.py来训练一个新模型。这里有几个适用于IWSLT 2014数据集的示例设置:


$ mkdir -p checkpoints/fconv
$ CUDA_VISIBLE_DEVICES=0 python train.py data-bin/iwslt14.tokenized.de-en \
  --lr 0.25 --clip-norm 0.1 --dropout 0.2 --max-tokens 4000 \
  --arch fconv_iwslt_de_en --save-dir checkpoints/fconv

默认情况下,python train.py将使用机器上的所有可用GPU。使用CUDA_VISIBLE_DEVICES 环境变量选择特定的GPU和/或更改将要使用的GPU设备的数量。

另请注意,batch大小是根据每个batch的最大token数(--max-tokens)来指定的。你可能需要使用较小的值,具体取决于系统上可用的GPU内存。

生成

一旦模型训练好,就可以使用python generate.py(二进制数据)或python generate.py -i(原始文本)生成翻译:


$ python generate.py data-bin/iwslt14.tokenized.de-en \
  --path checkpoints/fconv/checkpoint_best.pt \
  --batch-size 128 --beam 5
  | [de] dictionary: 35475 types
  | [en] dictionary: 24739 types
  | data-bin/iwslt14.tokenized.de-en test 6750 examples
  | model fconv
  | loaded checkpoint trainings/fconv/checkpoint_best.pt
  S-721   danke .
  T-721   thank you .
  ...

如果要仅使用CPU生成翻译,请使用--cpu flag。可以使用--remove-bpe flag 来删除BPE连续标记。

预训练模型

我们提供以下预训练的完全卷积序列到序列模型:
wmt14.en-fr.fconv-py.tar.bz2:用于WMT14英语 - 法语的预训练模型,包括词汇
wmt14.en-de.fconv-py.tar.bz2:用于WMT14英语 - 德语的预训练模型,包括词汇

此外,我们还提供了上述模型的预处理和二值化测试集:
wmt14.en-fr.newstest2014.tar.bz2:WMT14英语 - 法语的newstest2014测试集
wmt14.en-fr.ntst1213.tar.bz2:WMT14英语 - 法语的newstest2012和newstest2013测试集
wmt14.en-de.newstest2014.tar.bz2:WMT14英语 - 德语的newstest2014测试集

生成二值化测试集可以像下面这样以batch的模式运行,例如,在GTX-1080ti的英语-法语:


$ curl https://s3.amazonaws.com/fairseq-py/models/wmt14.en-fr.fconv-py.tar.bz2 | tar xvjf - -C data-bin
$ curl https://s3.amazonaws.com/fairseq-py/data/wmt14.en-fr.newstest2014.tar.bz2 | tar xvjf - -C data-bin
$ python generate.py data-bin/wmt14.en-fr.newstest2014  \
  --path data-bin/wmt14.en-fr.fconv-py/model.pt \
  --beam 5 --batch-size 128 --remove-bpe | tee /tmp/gen.out
...
| Translated 3003 sentences (95451 tokens) in 81.3s (1174.33 tokens/s)
| Generate test with beam=5: BLEU4 = 40.23, 67.5/46.4/33.8/25.0 (BP=0.997, ratio=1.003, syslen=80963, reflen=81194)

# Scoring with score.py:
$ grep ^H /tmp/gen.out | cut -f3- > /tmp/gen.out.sys
$ grep ^T /tmp/gen.out | cut -f2- > /tmp/gen.out.ref
$ python score.py --sys /tmp/gen.out.sys --ref /tmp/gen.out.ref
BLEU4 = 40.23, 67.5/46.4/33.8/25.0 (BP=0.997, ratio=1.003, syslen=80963, reflen=81194)

原文发布时间为:2017-09-19
编译:neko
本文来自云栖社区合作伙伴新智元,了解相关信息可以关注“AI_era”微信公众号
原文链接

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
机器学习/深度学习 PyTorch 测试技术
从训练到推理:Intel Extension for PyTorch混合精度优化完整指南
PyTorch作为主流深度学习框架,凭借动态计算图和异构计算支持,广泛应用于视觉与自然语言处理。Intel Extension for PyTorch针对Intel硬件深度优化,尤其在GPU上通过自动混合精度(AMP)提升训练与推理性能。本文以ResNet-50在CIFAR-10上的实验为例,详解如何利用该扩展实现高效深度学习优化。
578 0
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
2828 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
机器学习/深度学习 并行计算 PyTorch
优化技巧与策略:提高 PyTorch 模型训练效率
【8月更文第29天】在深度学习领域中,PyTorch 是一个非常流行的框架,被广泛应用于各种机器学习任务中。然而,随着模型复杂度的增加以及数据集规模的增长,如何有效地训练这些模型成为了一个重要的问题。本文将介绍一系列优化技巧和策略,帮助提高 PyTorch 模型训练的效率。
1281 0
|
机器学习/深度学习 人工智能 PyTorch
使用PyTorch实现GPT-2直接偏好优化训练:DPO方法改进及其与监督微调的效果对比
本文将系统阐述DPO的工作原理、实现机制,以及其与传统RLHF和SFT方法的本质区别。
1617 22
使用PyTorch实现GPT-2直接偏好优化训练:DPO方法改进及其与监督微调的效果对比
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
10374 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
并行计算 PyTorch 算法框架/工具
基于CUDA12.1+CUDNN8.9+PYTORCH2.3.1,实现自定义数据集训练
文章介绍了如何在CUDA 12.1、CUDNN 8.9和PyTorch 2.3.1环境下实现自定义数据集的训练,包括环境配置、预览结果和核心步骤,以及遇到问题的解决方法和参考链接。
1224 4
基于CUDA12.1+CUDNN8.9+PYTORCH2.3.1,实现自定义数据集训练
|
机器学习/深度学习 并行计算 PyTorch
使用PyTorch Profiler进行模型性能分析,改善并加速PyTorch训练
加速机器学习模型训练是工程师的关键需求。PyTorch Profiler提供了一种分析工具,用于测量CPU和CUDA时间,以及内存使用情况。通过在训练代码中嵌入分析器并使用tensorboard查看结果,工程师可以识别性能瓶颈。Profiler的`record_function`功能允许为特定操作命名,便于跟踪。优化策略包括使用FlashAttention或FSDP减少内存使用,以及通过torch.compile提升速度。监控CUDA内核执行和内存分配,尤其是避免频繁的cudaMalloc,能有效提升GPU效率。内存历史记录分析有助于检测内存泄漏和优化批处理大小。
2155 1
|
机器学习/深度学习 并行计算 PyTorch
PyTorch与DistributedDataParallel:分布式训练入门指南
【8月更文第27天】随着深度学习模型变得越来越复杂,单一GPU已经无法满足训练大规模模型的需求。分布式训练成为了加速模型训练的关键技术之一。PyTorch 提供了多种工具来支持分布式训练,其中 DistributedDataParallel (DDP) 是一个非常受欢迎且易用的选择。本文将详细介绍如何使用 PyTorch 的 DDP 模块来进行分布式训练,并通过一个简单的示例来演示其使用方法。
2729 2
|
机器学习/深度学习 并行计算 PyTorch
GPU 加速与 PyTorch:最大化硬件性能提升训练速度
【8月更文第29天】GPU(图形处理单元)因其并行计算能力而成为深度学习领域的重要组成部分。本文将介绍如何利用PyTorch来高效地利用GPU进行深度学习模型的训练,从而最大化训练速度。我们将讨论如何配置环境、选择合适的硬件、编写高效的代码以及利用高级特性来提高性能。
2763 1

热门文章

最新文章

推荐镜像

更多