OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  OpenNMT-py — 经典开源神经机器翻译与文本生成框架

OpenNMT-py — 经典开源神经机器翻译与文本生成框架

 
  necklace ·  2026-04-25 11:00:24 · 12 次点击  · 0 条评论  

公告:OpenNMT-py 不再积极维护。

我们启动了一个新项目 Eole,托管于 Github

它在功能上是 OpenNMT-py 的分支,但我们进行了大量重构。
Eole 涵盖了 NMT、LLM、Encoder,以及 NMT 模型中的一个新概念 "Estimator"。详见这篇文章和这则消息

如果您是开发者,请立即切换。如果您只是普通用户,我们不久将发布第一个 py-pi 版本。


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

构建状态
文档
Gitter
论坛

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

我们欢迎贡献!请查看标记为 欢迎贡献 的问题。

在提出问题前,请确保您已阅读要求及完整文档中的示例。

除非是 Bug,否则请使用论坛Gitter 提问。


初学者指南:

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

请在提出新问题前阅读或遵循该教程。

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


新特性:

  • 需要 Pytorch v2,最好 v2.2,后者修复了一些 scaled_dot_product_attention 的问题。
  • LLM 支持,提供转换器用于:Llama (+ Mistral)、OpenLlama、Redpajama、MPT-7B、Falcon。
  • 支持 8bit 和 4bit 量化,以及 LoRA 适配器,可带或不带检查点。
  • 可在单张 RTX 24GB 显卡上通过 4bit 量化微调 7B 和 13B 模型。
  • 推理时可强制使用与微调相同的层级量化(4/8bit)。
  • 张量并行:当模型无法放入单张 GPU 内存时(训练和推理均支持)。
  • 模型微调后,可使用 OpenNMT-py 或更快的 CTranslate2 进行推理。
  • MMLU 评估脚本,结果见此处

对于包括 NMT 在内的所有用例,您现在可以使用 Multiquery 注意力 替代 Multihead 注意力(训练和推理更快),并移除所有线性层(QKV 以及 FeedForward 模块)的偏置。

如果您使用过 OpenNMT-py 的旧版本,可以查看变更日志破坏性变更


教程:


安装

使用 Docker

为简化安装和确保可复现性,一些 Docker 镜像已通过 Github 容器注册表提供:
https://github.com/OpenNMT/OpenNMT-py/pkgs/container/opennmt-py

您可以根据特定需求,使用仓库 docker 目录中的 build.shDockerfile 适配工作流并构建自己的镜像。

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 要求:

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

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=Truemax_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

文档与常见问题

完整 HTML 文档

常见问题

致谢

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}
}
12 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 38 ms
Developed with Cursor