OpenNMT-py 快速入门指南:从零训练到LLM微调全流程

OpenNMT-py 快速入门指南:从零训练到LLM微调全流程

OpenNMT-py Open Source Neural Machine Translation and (Large) Language Models in PyTorch OpenNMT-py 项目地址: https://gitcode.com/gh_mirrors/op/OpenNMT-py

前言

OpenNMT-py 是一个基于 PyTorch 的开源神经网络机器翻译框架,支持多种序列到序列的学习任务。本文将全面介绍如何使用 OpenNMT-py 完成从基础模型训练到大型语言模型(LLM)微调的全流程。

基础模型训练流程

数据准备阶段

训练一个机器翻译模型首先需要准备平行语料。OpenNMT-py 要求数据以纯文本格式存储,源语言和目标语言文件需保持行对齐:

  • 训练集:src-train.txttgt-train.txt
  • 验证集:src-val.txttgt-val.txt

验证集规模建议控制在5000句以内,用于监控训练过程中的模型表现。

配置文件编写

OpenNMT-py 使用 YAML 格式的配置文件来定义数据处理流程。基础配置需包含:

save_data: toy-ende/run/example  # 处理后的数据保存路径
src_vocab: toy-ende/run/example.vocab.src  # 源语言词表路径
tgt_vocab: toy-ende/run/example.vocab.tgt  # 目标语言词表路径

data:
    corpus_1:
        path_src: toy-ende/src-train.txt
        path_tgt: toy-ende/tgt-train.txt
    valid:
        path_src: toy-ende/src-val.txt
        path_tgt: toy-ende/tgt-val.txt
词表构建

执行以下命令构建词表:

onmt_build_vocab -config toy_en_de.yaml -n_sample 10000

参数说明:

  • -n_sample 10000:从语料中采样10000行用于构建词表
  • 对于大规模语料,适当减少采样量可加快处理速度

模型训练阶段

在配置文件中添加训练参数:

# 使用单GPU训练
world_size: 1
gpu_ranks: [0]

# 模型保存设置
save_model: toy-ende/run/model
save_checkpoint_steps: 500  # 每500步保存一次检查点
train_steps: 1000  # 总训练步数
valid_steps: 500  # 每500步验证一次

启动训练命令:

onmt_train -config toy_en_de.yaml

默认使用2层LSTM网络,隐藏层维度为500。训练过程中会定期保存模型检查点。

模型推理阶段

使用训练好的模型进行翻译预测:

onmt_translate -model toy-ende/run/model_step_1000.pt \
               -src toy-ende/src-test.txt \
               -output pred_1000.txt \
               -gpu 0

参数说明:

  • -model:指定模型检查点路径
  • -src:待翻译的源语言文件
  • -output:预测结果输出文件
  • -gpu:指定使用的GPU设备

大型语言模型(LLM)应用

模型转换

OpenNMT-py 支持将Hugging Face模型转换为自有格式。以LLaMA模型为例:

python tools/convert_openllama.py \
    --model_dir /path_to_HF_model \
    --tokenizer_model /path_to_tokenizer.model \
    --output /path_to_Openllama-onmt.pt \
    --format pytorch \
    --nshards 1

对于使用BPE分词器的模型(如MPT、Falcon等),需额外提供BPE模型和词表文件。

推理配置

推荐使用YAML配置文件管理推理参数:

# LLaMA推理配置示例
transforms: [sentencepiece]
src_subword_model: "tokenizer.model"
tgt_subword_model: "tokenizer.model"
model: "llama7B-onmt.pt"

# 生成参数
max_length: 256
beam_size: 1
random_sampling_topk: 40
random_sampling_temp: 0.8

关键参数说明:

  • max_length:生成文本的最大长度
  • random_sampling_topk:采样时考虑的最高k个候选词
  • random_sampling_temp:温度参数,控制生成多样性

模型微调

微调LLM需要准备训练配置:

train_from: "llama7B-onmt.pt"
save_model: "llama7B-finetuned"

# 量化设置
quant_layers: ['w_1', 'w_2', 'w_3', 'linear_values']
quant_type: "bnb_NF4"

# LoRA设置
lora_layers: ['linear_values', 'linear_query']
lora_rank: 8
lora_dropout: 0.05

微调命令:

python train.py --config finetune.yaml

高级技巧:

  • 使用zero_out_prompt_loss可忽略prompt部分的损失计算
  • 通过response_pattern指定响应文本的起始标记

结语

本文详细介绍了OpenNMT-py从基础模型训练到LLM应用的全流程。实际应用中,建议:

  1. 对于翻译任务,使用更大规模的平行语料
  2. 对于LLM应用,合理调整生成参数以获得最佳效果
  3. 微调时注意硬件资源限制,合理使用量化和LoRA技术

OpenNMT-py Open Source Neural Machine Translation and (Large) Language Models in PyTorch OpenNMT-py 项目地址: https://gitcode.com/gh_mirrors/op/OpenNMT-py

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁菁令

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值