模型详情

概述

简述

LayoutXLM是用于多语言文档理解的多模式预训练模型,旨在消除视觉丰富的文档理解的语言障碍。实验结果表明,它在XFUND数据集上显著优于现有的SOTA跨语言预训练模型。

LayoutLMv2详见 README_MV2.md

  • 参考实现:

      url=https://github.com/microsoft/unilm/tree/master/layoutxlm
      commit_id=ec8c2624c8832aa4ca89005fd20e85a211f20a8f
  • 适配昇腾 AI 处理器的实现:

      url=https://gitee.com/ascend/ModelZoo-PyTorch.git
      code_path=PyTorch/built-in/others

准备训练环境

准备环境

  • 当前模型支持的 PyTorch 版本和已知三方库依赖如下表所示。

    表 1 版本支持表

    Torch_Version 三方库依赖版本
    PyTorch 1.8 transformers==4.5.1; detectron2==0.3; seqeval==1.2.2; datasets==2.7.1; packaging==21.0
    PyTorch 1.11 transformers==4.5.1; detectron2==0.3; seqeval==1.2.2; datasets==2.7.1; packaging==21.0
    PyTorch 2.1 transformers==4.5.1; detectron2==0.3; seqeval==1.2.2; datasets==2.7.1; packaging==21.0
  • 环境准备指导。

    请参考《Pytorch框架训练环境准备》。

  • 安装依赖。

    # 安装detectron2
    git clone https://github.com/facebookresearch/detectron2.git -b v0.3
    python -m pip install -e detectron2

    在模型源码包根目录下执行命令,安装模型对应PyTorch版本需要的依赖。

    pip install -r requirements.txt
    pip install -e .

准备数据集

  • 在有网络的情况下,模型训练需要的数据集会在训练开始之前由训练脚本自动下载,无需准备数据集。

  • 在没有网络的情况下,用户也可以自行下载xfun-zh数据集,并且移动到 /root/.cache/huggingface/datasets/xfun/xfun.zh/0.0.0/affa7f771c23899f4ea7b3b522db75470abe55a08e8cf96de60597348837b9ed 路径下,数据集目录参考结构如下所示:

    0.0.0
    |——————affa7f771c23899f4ea7b3b522db75470abe55a08e8cf96de60597348837b9ed
    |        └——————dataset_info.json
    |        └——————xfun-train.arrow
    |        └——————xfun-validation.arrow   

获取预训练模型

本文使用layoutxlm-base预训练模型

  • 用户在有网络的情况下,预训练模型会在训练开始之前由训练脚本自动下载。

  • 在没有网络的情况下,需要用户自行下载预训练模型layoutxlm-base,将获取的预训练模型上传至 /root/.cache/huggingface/transformers/8680422ada73a219d10ded26623c015f44a909e815304488fd43ed77efe03e27.89dd075ca1cb2d01705599c66b2867ecedda5e15879080b08735d2dbdf3631b7 目录下。

开始训练

训练模型

  1. 进入解压后的源码包根目录。

    cd /${模型文件夹名称} 
  2. 运行训练脚本。

    该模型支持单机单卡训练、单机8卡训练。

    • 单机单卡训练

      启动单卡训练:

      bash test/train_full_1p_re.sh   # RE任务
      bash test/train_performance_1p_re.sh   # RE性能任务
        
      bash test/train_full_1p_ser.sh     # SER任务 
      bash test/train_performance_1p_ser.sh     # SER性能任务 
    • 单机8卡训练

      启动8卡训练:

      bash test/train_full_8p_re.sh   # RE任务
      bash test/train_performance_8p_re.sh   # RE性能任务
        
      bash test/train_full_8p_ser.sh     # SER任务      
      bash test/train_performance_8p_ser.sh     # SER性能任务      

    --fp32开启FP32模式

    • 脚本中调用的python命令参数说明如下:

      --output_dir                                   // 训练结果和checkpoint保存路径
      --nproc_per_node                               // 训练使用的卡数
      --model_name_or_path                           // 预训练模型文件夹路径
      --do_train                                     // 执行训练
      --do_eval                                      // 执行评估
      --fp16                                         // 使用混合精度
      --fp16_opt_level                               // 混合精度级别
      --per_device_train_batch_size                  // 训练时使用的batch_size
      --warmup_ratio                                 // warmup率,用于调整学习率

      训练完成后,权重文件保存在output_dir路径下,并输出模型训练精度和性能信息。

训练结果展示

表 2 训练结果展示表

RE:

NAME eval f1 FPS AMP_Type Epochs Batch Size
1p-NPU - 3.03 O1 26.6 2
1p-竞品V - 3.934 O1 26.6 2
1p-竞品A - 6.282 O1 26.6 2
8p-NPU 0.6781 9.57 O1 208.42 16
8p-竞品V 0.6820 20.30 O1 208.42 16
8p-竞品A 0.6868 37.728 O1 208.42 16

SER:

NAME eval f1 FPS AMP_Type Epochs Batch Size
1p-NPU - 9.256 O1 41.67 8
1p-竞品V - 13.184 O1 41.67 8
1p-竞品A - 19.312 O1 41.67 8
8p-NPU 0.8835 32.51 O1 333.33 64
8p-竞品V 0.8892 68.352 O1 333.33 64
8p-竞品A 0.8834 129.856 O1 333.33 64

版本说明

变更

2023.03.09:首次发布。

FAQ

1.下载数据集时,出现报错SSLCertVerificationError时,可以将 site-packages/requests/api.py 下的

return session.request(method=method, url=url, **kwargs)  

修改为

return session.request(method=method, url=url, verify=False, **kwargs)

2.无法连接hugginface的情况下,需要提前下载模型需要的配置文件以及权重文件,并且在模型代码中修改,如提前下载xlm-roberta-base相关文件,结构为:

path/to/xlm-roberta-base
|  └——————config.json
|  └——————pytorch_model.bin
|  └——————sentencepiece.bpe.model
|  └——————tokenizer.json
 

修改layoutlmft/data/datasets/xfun.py

 tokenizer = AutoTokenizer.from_pretrained("xlm-roberta-base")

 tokenizer = AutoTokenizer.from_pretrained("path/to/xlm-roberta-base")

以及训练脚本中指定 model_name_or_path 为本地模型权重以及配置的路径。

最后,修改 site-packages/datasets/builder.py

     version_data_dir = path_join(
            self._cache_dir_root, self._relative_data_dir(with_version=True, is_local=is_local)
        )

为实际的数据集路径。

公网地址说明

代码涉及公网地址参考 ./public_address_statement.md

使用模型资源和服务前,请您仔细阅读并理解透彻《昇腾深度学习模型许可协议 3.0》
该页面对您有帮助吗?
我要评分