它在功能上是 OpenNMT-py 的分支,但我们进行了大量重构。
Eole 涵盖了 NMT、LLM、Encoder,以及 NMT 模型中的一个新概念 "Estimator"。详见这篇文章和这则消息。
如果您是开发者,请立即切换。如果您只是普通用户,我们不久将发布第一个 py-pi 版本。
OpenNMT-py 是 OpenNMT 项目(一个开源 MIT 协议的神经机器翻译及更多功能的框架)的 PyTorch 版本。它旨在方便研究,尝试翻译、语言建模、摘要及其他 NLP 任务的新想法。一些公司已证明该代码可投入生产。
我们欢迎贡献!请查看标记为 欢迎贡献 的问题。
在提出问题前,请确保您已阅读要求及完整文档中的示例。
有一个分步且有讲解的教程(感谢 Yasmin Moslem):教程
请在提出新问题前阅读或遵循该教程。
否则,您也可以查看快速入门步骤。
scaled_dot_product_attention 的问题。对于包括 NMT 在内的所有用例,您现在可以使用 Multiquery 注意力 替代 Multihead 注意力(训练和推理更快),并移除所有线性层(QKV 以及 FeedForward 模块)的偏置。
如果您使用过 OpenNMT-py 的旧版本,可以查看变更日志或破坏性变更。
为简化安装和确保可复现性,一些 Docker 镜像已通过 Github 容器注册表提供:
https://github.com/OpenNMT/OpenNMT-py/pkgs/container/opennmt-py
您可以根据特定需求,使用仓库 docker 目录中的 build.sh 和 Dockerfile 适配工作流并构建自己的镜像。
docker pull ghcr.io/opennmt/opennmt-py:3.4.3-ubuntu22.04-cuda12.1
一条命令示例,用于运行容器并在其中打开 bash shell:
docker run --rm -it --runtime=nvidia ghcr.io/opennmt/opennmt-py:test-ubuntu22.04-cuda12.1
注意:您需要安装 Nvidia 容器工具包(之前称为 nvidia-docker)才能充分利用 CUDA/GPU 功能。
根据需求,您可以添加各种参数:
- -p 5000:5000:将容器的某个暴露端口转发到宿主机;
- -v /some/local/directory:/some/container/directory:将本地目录挂载到容器目录;
- --entrypoint some_command:直接运行某个命令作为容器入口点(替代默认的 bash shell);
OpenNMT-py 要求:
从 pip 安装 OpenNMT-py:
pip install OpenNMT-py
或者从源码安装:
git clone https://github.com/OpenNMT/OpenNMT-py.git
cd OpenNMT-py
pip install -e .
注意:如果安装时遇到 MemoryError,请尝试使用 pip 时加上 --no-cache-dir 选项。
(可选) 某些高级功能(如使用预训练模型或特定变换)需要额外的包,您可以通过以下命令安装:
pip install -r requirements.opt.txt
强烈建议安装 Apex 以获得高性能(特别是传统的 fusedadam 优化器和 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 ..
Flash Attention:
截至 2023 年 10 月,flash attention 1 已上游到 pytorch v2,但建议使用 flash attention 2 (v2.3.1) 以支持滑动窗口注意力。
当使用常规 position_encoding=True 或 max_relative_positions=-1 的 Rotary 时,OpenNMT-py 会尝试使用优化的点积路径。
如果您想使用 flash attention,则需要先手动安装:
pip install flash-attn --no-build-isolation
如果没有安装 flash attention 2,我们将使用 pytorch 2.x 的 F.scaled_dot_product_attention。
当使用 max_relative_positions > 0 或 Alibi (max_relative_positions=-2) 时,OpenNMT-py 将使用其传统的矩阵乘法代码。
Flash attention 和 F.scaled_dot_product_attention 速度稍快,且能节省一些 GPU 内存。
AWQ:
如果要运行推理或量化 AWQ 模型,您需要安装 AutoAWQ。
AutoAWQ (https://github.com/casper-hansen/AutoAWQ) 安装命令:
pip install autoawq
OpenNMT-py 作为一个协作性开源项目运行。
该项目于 2016 年由 Systran 和 Harvard NLP 孵化,最初使用 Lua 语言,并于 2017 年移植到 PyTorch。
当前维护者(自 2018 年起):
François Hernandez
Vincent Nguyen (Seedfall)
如果您在学术工作中使用 OpenNMT-py,请引用 2017 年 ACL 发表的初始系统演示论文:
@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}
}