Skip to content

PyTorch 中的开源神经机器翻译和(大型)语言模型

License

Notifications You must be signed in to change notification settings

yuanzhongqiao/OpenNMT-py

 
 

Repository files navigation

OpenNMT-py:开源神经机器翻译和(大型)语言模型

构建状态 文档 吉特 论坛

OpenNMT-py 是OpenNMT项目的PyTorch版本,OpenNMT 项目是一个开源 (MIT) 神经机器翻译(及其他!)框架。它旨在方便研究,以尝试翻译、语言建模、摘要和许多其他 NLP 任务中的新想法。一些公司已经证明代码可以投入生产。

我们热爱贡献!请查看标有欢迎贡献标签的问题。

在提出问题之前,请确保您阅读了要求和完整文档示例。

除非出现错误,否则请使用论坛Gitter提问。


对于初学者:

有一个分步解释的教程(感谢 Yasmin Moslem):教程

在提出新手问题之前,请尝试阅读和/或关注。

否则,您可以查看快速入门步骤


新的:

  • 您将需要 Pytorch v2 最好是 v2.1,它修复了一些scaled_dot_product_attention问题
  • LLM 支持以下转换器:Llama (+ Mistral)、OpenLlama、Redpajama、MPT-7B、Falcon。
  • 支持 8 位和 4 位量化以及 LoRA 适配器,带或不带检查点。
  • 您可以在具有 4 位量化的单个 RTX 24GB 上微调 7B 和 13B 模型。
  • 可以使用与微调相同的层量化以 4/8 位强制进行推理。
  • 当模型不适合一个 GPU 内存时的张量并行性(训练和推理)
  • 模型经过微调后,您可以使用 OpenNMT-py 运行推理,或者使用 CTranslate2 运行推理速度更快。
  • MMLU 评估脚本,请在此处查看结果

对于包括 NMT 在内的所有用例,您现在可以使用 Multiquery 而不是 Multihead Attention(训练和推理速度更快),并消除所有 Linear(QKV 以及 FeedForward 模块)中的偏差。

如果您使用过 OpenNMT-py 的早期版本,您可以查看 ChangelogBreaking Changes


教程:

  • 如何使用 7B 或 13B llama(或 Open llama、MPT-7B、Redpajama)复制 Vicuna 语言模型:Tuto Vicuna
  • 如何使用您的数据集微调 NLLB-200:Tuto Finetune NLLB-200
  • 如何创建一个简单的 OpenNMT-py REST 服务器:Tuto REST
  • 如何创建简单的 Web 界面:Tuto Streamlit
  • 复制 WMT17 en-de 实验:WMT17 ENDE

设置

使用码头工人

为了方便设置和可重复性,一些 docker 镜像通过 Github 容器注册表提供: https://github.com/OpenNMT/OpenNMT-py/pkgs/container/opennmt-py

build.sh您可以使用和Dockerfiledocker存储库目录中根据特定需求调整工作流程并构建您自己的映像。

docker pull ghcr.io/opennmt/opennmt-py:3.4.3-ubuntu22.04-cuda12.1

用于运行容器并在其中打开 bash shell 的示例 oneliner

docker run --rm -it --runtime=nvidia ghcr.io/opennmt/opennmt-py:test-ubuntu22.04-cuda12.1

注意:您需要安装Nvidia Container Toolkit(以前称为 nvidia-docker)才能正确利用 CUDA/GPU 功能。

根据您的需要,您可以添加各种标志:

  • -p 5000:5000将一些暴露的端口从容器转发到主机;
  • -v /some/local/directory:/some/container/directory将某个本地目录挂载到某个容器目录;
  • --entrypoint some_command直接运行某些特定命令作为容器入口点(而不是默认的 bash shell);

本地安装

OpenNMT-py 需要:

  • Python >= 3.8
  • PyTorch >= 2.0 <2.2

OpenNMT-py从以下位置安装pip

pip install OpenNMT-py

或来自来源:

git clone https://github.com/OpenNMT/OpenNMT-py.git
cd OpenNMT-py
pip install -e .

注意:如果在安装过程中遇到MemoryError,请尝试使用pipwith --no-cache-dir

(可选)一些高级功能(例如工作预训练模型或特定转换)需要额外的软件包,您可以通过以下方式安装它们:

pip install -r requirements.opt.txt

手动安装一些依赖项

强烈建议 Apex 具有快速性能(尤其是传统的 Fusadadam 优化器和 FusedRMSNorm)

git clone https://github.com/NVIDIA/apex
cd apex
pip3 install -v --no-build-isolation --config-settings --build-option="--cpp_ext --cuda_ext --deprecated_fused_adam --xentropy --fast_multihead_attn" ./
cd ..

闪光注意:

截至 2023 年 10 月,Flash Attention 1 已上游到 pytorch v2,但建议使用 Flash Attention 2 和 v2.3.1 来支持滑动窗口 Attention。

当使用常规position_encoding=True或旋转与max_relative_positions=-1OpenNMT-py 将尝试使用优化的点积路径。

如果你想使用Flash Attention那么你需要先手动安装它:

pip install flash-attn --no-build-isolation

如果没有安装 flash 注意 2,那么我们将从F.scaled_dot_product_attentionpytorch 2.x开始使用

当使用max_relative_positions > 0或 Alibi max_relative_positions=-2OpenNMT-py 时,它将使用其遗留代码进行矩阵乘法。

Flash Attention 速度F.scaled_dot_product_attention更快,并且可以节省一些 GPU 内存。

水质要求:

如果您想运行推理或量化 AWQ 模型,您将需要 AutoAWQ。

对于AutoAWQ: pip install autoawq

文档和常见问题解答

完整的 HTML 文档

常见问题解答

致谢

OpenNMT-py 作为协作开源项目运行。项目于2016年由Systran和Harvard NLP在Lua中孵化,并于2017年移植到Pytorch。

当前维护者(自 2018 年起):

弗朗索瓦·埃尔南德斯 ·文森特·阮(Seedfall)

引文

如果您使用 OpenNMT-py 进行学术工作,请引用 ACL 2017 上发表的初始系统演示论文

@misc{klein2018opennmt,
      title={OpenNMT: Neural Machine Translation Toolkit}, 
      author={Guillaume Klein and Yoon Kim and Yuntian Deng and Vincent Nguyen and Jean Senellart and Alexander M. Rush},
      year={2018},
      eprint={1805.11462},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}

About

PyTorch 中的开源神经机器翻译和(大型)语言模型

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 95.8%
  • Shell 3.6%
  • Other 0.6%