掘金 人工智能 前天 10:54
微调篇--基于PyTorch微调T5模型
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了如何在PyTorch和TensorFlow环境中运行摘要训练脚本,基于 🤗 Transformers 库。内容涵盖了环境设置、脚本运行、分布式训练、混合精度、TPU的使用,以及如何使用自定义数据集、测试脚本、从checkpoint恢复训练和分享模型等多个方面,为开发者提供了全面的指导。

⚙️ **环境设置**:为了运行示例脚本,需要在新虚拟环境中从源代码安装 🤗 Transformers 库。文章详细说明了安装步骤,包括克隆仓库、安装依赖项以及切换到特定版本。

🚀 **脚本运行**:文章提供了PyTorch和TensorFlow的示例脚本,展示了如何在CNN/DailyMail数据集上微调T5-small模型。PyTorch脚本使用Trainer,而TensorFlow脚本使用Keras。同时,还介绍了T5模型所需的source_prefix参数,用于指示摘要任务。

💻 **分布式训练与混合精度**:文章介绍了如何使用Trainer启用分布式训练和混合精度。对于PyTorch,需要添加fp16参数以启用混合精度,并使用nproc_per_node参数设置GPU数量。TensorFlow脚本则默认使用MirroredStrategy进行分布式训练。

☁️ **TPU的使用**:文章详细介绍了如何在TPU上运行脚本。PyTorch使用XLA深度学习编译器支持TPU,需要启动xla_spawn.py脚本。TensorFlow脚本使用TPUStrategy在TPU上进行训练,需要将TPU资源的名称传递给tpu参数。

📝 **自定义数据集、测试与恢复**:文章还介绍了如何使用自定义数据集,包括指定训练和验证文件的路径、文本列和摘要列。此外,还提供了测试脚本、从checkpoint恢复训练以及分享模型的指导,方便用户进行模型训练和部署。

前言

本次分享如何在PyTorch和中运行示例摘要训练脚本

设置

要成功运行示例脚本的最新版本,您必须在新虚拟环境中 源代码 安装 **** 🤗 Transformers

git clone https://github.com/huggingface/transformerscd transformerspip install .

然后切换您clone的 🤗 Transformers 仓到特定的版本,例如v3.5.1:

git checkout tags/v3.5.1

在安装了正确的库版本后,进入您选择的版本的example文件夹并安装例子要求的环境:

pip install -r requirements.txt

运行脚本

示例脚本从🤗 Datasets库下载并预处理数据集。然后,脚本通过Trainer使用支持摘要任务的架构对数据集进行微调。以下示例展示了如何在CNN/DailyMail数据集上微调T5-small。由于T5模型的训练方式,它需要一个额外的source_prefix参数。这个提示让T5知道这是一个摘要任务。

python examples/pytorch/summarization/run_summarization.py \    --model_name_or_path google-t5/t5-small \    --do_train \    --do_eval \    --dataset_name cnn_dailymail \    --dataset_config "3.0.0" \    --source_prefix "summarize: " \    --output_dir /tmp/tst-summarization \    --per_device_train_batch_size=4 \    --per_device_eval_batch_size=4 \    --overwrite_output_dir \    --predict_with_generate

示例脚本从 🤗 Datasets 库下载并预处理数据集。然后,脚本使用 Keras 在支持摘要的架构上微调数据集。以下示例展示了如何在 CNN/DailyMail 数据集上微调 T5-small。T5 模型由于训练方式需要额外的 source_prefix 参数。这个提示让 T5 知道这是一个摘要任务。

python examples/tensorflow/summarization/run_summarization.py  \    --model_name_or_path google-t5/t5-small \    --dataset_name cnn_dailymail \    --dataset_config "3.0.0" \    --output_dir /tmp/tst-summarization  \    --per_device_train_batch_size 8 \    --per_device_eval_batch_size 16 \    --num_train_epochs 3 \    --do_train \    --do_eval

分布式训练和混合精度

Trainer 支持分布式训练和混合精度,这意味着你也可以在脚本中使用它。要启用这两个功能,可以做如下设置:

torchrun \    --nproc_per_node 8 pytorch/summarization/run_summarization.py \    --fp16 \    --model_name_or_path google-t5/t5-small \    --do_train \    --do_eval \    --dataset_name cnn_dailymail \    --dataset_config "3.0.0" \    --source_prefix "summarize: " \    --output_dir /tmp/tst-summarization \    --per_device_train_batch_size=4 \    --per_device_eval_batch_size=4 \    --overwrite_output_dir \    --predict_with_generate

TensorFlow脚本使用MirroredStrategy进行分布式训练,您无需在训练脚本中添加任何其他参数。如果可用,TensorFlow脚本将默认使用多个GPU。

在TPU上运行脚本

张量处理单元(TPUs)是专门设计用于加速性能的。PyTorch使用XLA深度学习编译器支持TPU(更多细节请参见这里)。要使用TPU,请启动xla_spawn.py脚本并使用num_cores参数设置要使用的TPU核心数量。

python xla_spawn.py --num_cores 8 \    summarization/run_summarization.py \    --model_name_or_path google-t5/t5-small \    --do_train \    --do_eval \    --dataset_name cnn_dailymail \    --dataset_config "3.0.0" \    --source_prefix "summarize: " \    --output_dir /tmp/tst-summarization \    --per_device_train_batch_size=4 \    --per_device_eval_batch_size=4 \    --overwrite_output_dir \    --predict_with_generate

张量处理单元(TPUs)是专门设计用于加速性能的。TensorFlow脚本使用TPUStrategy在TPU上进行训练。要使用TPU,请将TPU资源的名称传递给tpu参数。

python run_summarization.py  \    --tpu name_of_tpu_resource \    --model_name_or_path google-t5/t5-small \    --dataset_name cnn_dailymail \    --dataset_config "3.0.0" \    --output_dir /tmp/tst-summarization  \    --per_device_train_batch_size 8 \    --per_device_eval_batch_size 16 \    --num_train_epochs 3 \    --do_train \    --do_eval

基于🤗 Accelerate运行脚本

🤗 Accelerate 是一个仅支持 PyTorch 的库,它提供了一种统一的方法来在不同类型的设置(仅 CPU、多个 GPU、多个TPU)上训练模型,同时保持对 PyTorch 训练循环的完全可见性。如果你还没有安装 🤗 Accelerate,请确保你已经安装了它:

注意:由于 Accelerate 正在快速发展,因此必须安装 git 版本的 accelerate 来运行脚本。

pip install git+https://github.com/huggingface/accelerate

你需要使用run_summarization_no_trainer.py脚本,而不是run_summarization.py脚本。🤗 Accelerate支持的脚本需要在文件夹中有一个task_no_trainer.py文件。首先运行以下命令以创建并保存配置文件:

accelerate config

检测您的设置以确保配置正确:

accelerate test

现在您可以开始训练模型了:

accelerate launch run_summarization_no_trainer.py \    --model_name_or_path google-t5/t5-small \    --dataset_name cnn_dailymail \    --dataset_config "3.0.0" \    --source_prefix "summarize: " \    --output_dir ~/tmp/tst-summarization

使用自定义数据集

摘要脚本支持自定义数据集,只要它们是CSV或JSON Line文件。当你使用自己的数据集时,需要指定一些额外的参数:

使用自定义数据集的摘要脚本看起来是这样的:

python examples/pytorch/summarization/run_summarization.py \    --model_name_or_path google-t5/t5-small \    --do_train \    --do_eval \    --train_file path_to_csv_or_jsonlines_file \    --validation_file path_to_csv_or_jsonlines_file \    --text_column text_column_name \    --summary_column summary_column_name \    --source_prefix "summarize: " \    --output_dir /tmp/tst-summarization \    --overwrite_output_dir \    --per_device_train_batch_size=4 \    --per_device_eval_batch_size=4 \    --predict_with_generate

测试脚本

通常,在提交整个数据集之前,最好先在较少的数据集示例上运行脚本,以确保一切按预期工作,因为完整数据集的处理可能需要花费几个小时的时间。使用以下参数将数据集截断为最大样本数:

python examples/pytorch/summarization/run_summarization.py \    --model_name_or_path google-t5/t5-small \    --max_train_samples 50 \    --max_eval_samples 50 \    --max_predict_samples 50 \    --do_train \    --do_eval \    --dataset_name cnn_dailymail \    --dataset_config "3.0.0" \    --source_prefix "summarize: " \    --output_dir /tmp/tst-summarization \    --per_device_train_batch_size=4 \    --per_device_eval_batch_size=4 \    --overwrite_output_dir \    --predict_with_generate

并非所有示例脚本都支持max_predict_samples参数。如果您不确定您的脚本是否支持此参数,请添加-h参数进行检查:

examples/pytorch/summarization/run_summarization.py -h

从checkpoint恢复训练

另一个有用的选项是从之前的checkpoint恢复训练。这将确保在训练中断时,您可以从之前停止的地方继续进行,而无需重新开始。有两种方法可以从checkpoint恢复训练。

第一种方法使用output_dir previous_output_dir参数从存储在output_dir中的最新的checkpoint恢复训练。在这种情况下,您应该删除overwrite_output_dir

python examples/pytorch/summarization/run_summarization.py    --model_name_or_path google-t5/t5-small \    --do_train \    --do_eval \    --dataset_name cnn_dailymail \    --dataset_config "3.0.0" \    --source_prefix "summarize: " \    --output_dir /tmp/tst-summarization \    --per_device_train_batch_size=4 \    --per_device_eval_batch_size=4 \    --output_dir previous_output_dir \    --predict_with_generate

第二种方法使用resume_from_checkpoint path_to_specific_checkpoint参数从特定的checkpoint文件夹恢复训练。

python examples/pytorch/summarization/run_summarization.py    --model_name_or_path google-t5/t5-small \    --do_train \    --do_eval \    --dataset_name cnn_dailymail \    --dataset_config "3.0.0" \    --source_prefix "summarize: " \    --output_dir /tmp/tst-summarization \    --per_device_train_batch_size=4 \    --per_device_eval_batch_size=4 \    --overwrite_output_dir \    --resume_from_checkpoint path_to_specific_checkpoint \    --predict_with_generate

分享模型

所有脚本都可以将您的最终模型上传到Model Hub。在开始之前,请确保您已登录Hugging Face:

huggingface-cli login

然后,在脚本中添加push_to_hub参数。这个参数会创建一个带有您Hugging Face用户名和output_dir中指定的文件夹名称的仓库。

为了给您的仓库指定一个特定的名称,使用push_to_hub_model_id参数来添加它。该仓库将自动列出在您的命名空间下。

以下示例展示了如何上传具有特定仓库名称的模型:

python examples/pytorch/summarization/run_summarization.py    --model_name_or_path google-t5/t5-small \    --do_train \    --do_eval \    --dataset_name cnn_dailymail \    --dataset_config "3.0.0" \    --source_prefix "summarize: " \    --push_to_hub \    --push_to_hub_model_id finetuned-t5-cnn_dailymail \    --output_dir /tmp/tst-summarization \    --per_device_train_batch_size=4 \    --per_device_eval_batch_size=4 \    --overwrite_output_dir \    --predict_with_generate

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

PyTorch TensorFlow 摘要 Transformers TPU
相关文章