OpenNMT-py 是OpenNMT项目的PyTorch版本,OpenNMT 项目是一个开源 (MIT) 神经机器翻译(及其他!)框架。它旨在方便研究,以尝试翻译、语言建模、摘要和许多其他 NLP 任务中的新想法。一些公司已经证明代码可以投入生产。
我们热爱贡献!请查看标有欢迎贡献标签的问题。
在提出问题之前,请确保您阅读了要求和完整文档示例。
有一个分步解释的教程(感谢 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 的早期版本,您可以查看 Changelog或Breaking 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
您可以使用和Dockerfile
在docker
存储库目录中根据特定需求调整工作流程并构建您自己的映像。
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
,请尝试使用pip
with --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=-1
OpenNMT-py 将尝试使用优化的点积路径。
如果你想使用Flash Attention那么你需要先手动安装它:
pip install flash-attn --no-build-isolation
如果没有安装 flash 注意 2,那么我们将从F.scaled_dot_product_attention
pytorch 2.x开始使用
当使用max_relative_positions > 0
或 Alibi max_relative_positions=-2
OpenNMT-py 时,它将使用其遗留代码进行矩阵乘法。
Flash Attention 速度F.scaled_dot_product_attention
更快,并且可以节省一些 GPU 内存。
水质要求:
如果您想运行推理或量化 AWQ 模型,您将需要 AutoAWQ。
对于AutoAWQ: pip install autoawq
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}
}