公告:OpenNMT-py 不再积极支持
我们启动了一个新项目 Eole,可在 Github 上访问。
Eole 在功能上是 OpenNMT-py 的延伸,但我们重做了很多内容。
Eole 处理 NMT、LLM、编码器以及 NMT 模型中的新概念估计器。详情请参阅这篇文章和这条新闻。
如果你是开发者,现在可以切换。如果你只是用户,那么我们会很快发布第一个 py-pi 版本。
OpenNMT-py:开源神经机器翻译和(大型)语言模型
OpenNMT-py 是 PyTorch 版本的 OpenNMT 项目,这是一个开源(MIT)神经机器翻译(以及更多!)框架。它被设计为研究友好型,可以尝试翻译、语言建模、摘要和许多其他 NLP 任务中的新想法。一些公司已证明该代码可用于生产环境。
我们欢迎贡献!请查看标记为欢迎贡献 的问题。
在提出问题之前,请确保你阅读了要求和完整文档示例。
对于初学者:
有一个详细解释的逐步教程(感谢 Yasmin Moslem):教程
在提出新手问题之前,请尝试阅读和/或遵循教程。
否则你可以看看 快速入门 步骤。
新功能:
- 你需要 Pytorch v2,最好是 v2.2,它修复了一些
scaled_dot_product_attention
问题。 - 支持以下模型的转换器:Llama(包括 Mistral)、OpenLlama、Redpajama、MPT-7B、Falcon。
- 支持 8bit 和 4bit 量化以及 LoRA 适配器,支持和不支持 checkpointing。
- 你可以在单个 RTX 24GB 显卡上对 7B 和 13B 模型进行 4-bit 量化微调。
- 推理可以强制在 4/8bit 下使用与微调相同的层量化。
- 当模型无法适应单个 GPU 的内存时,可以使用张量并行(适用于训练和推理)。
- 微调后的模型可以使用 OpenNMT-py 运行推理,或使用 CTranslate2 更快地运行。
- MMLU 评估脚本,请参阅此处的结果。
对于包括 NMT 在内的所有用例,你现在可以使用 Multiquery 替代 Multihead 注意力(在训练和推理时更快)并移除所有线性层(QKV 以及前馈模块)的偏差。
如果你使用了以前版本的 OpenNMT-py,可以查看更新日志或重大更改。
教程:
- 如何使用 7B 或 13B llama(或 Open llama、MPT-7B、Redpajama)语言模型复现 Vicuna:Vicuna 教程
- 如何使用你自己的数据集微调 NLLB-200:微调 NLLB-200 教程
- 如何创建一个简单的 OpenNMT-py REST 服务器:REST 教程
- 如何创建一个简单的网页界面:Streamlit 教程
- 复现 WMT17 en-de 实验:WMT17 ENDE
设置
使用 Docker
为了简化设置和可重复性,我们通过 Github Container Registry 提供了一些 Docker 镜像: 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 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
通过 pip
安装 OpenNMT-py
:
pip install OpenNMT-py
或从源码安装:
git clone https://github.com/OpenNMT/OpenNMT-py.git
cd OpenNMT-py
pip install -e .
注意:如果在安装过程中遇到 MemoryError
,尝试使用 --no-cache-dir
选项运行 pip
。
(可选) 一些高级功能(例如使用预训练模型或特定变换)需要额外的软件包,你可以通过以下方式安装它们:
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 注意力机制:
截至 2023 年 10 月,flash attention 1 已经上游到 pytorch v2,但建议使用带有滑动窗口注意力支持的 v2.3.1 的 flash