1

我正在尝试使用 SWAG 数据集 https://github.com/huggingface/transformers/tree/master/examples/pytorch/multiple-choice的一个拥抱脸样本

我想在我的代码中使用 Intel Extension for Pytorch 来提高性能。

在这里,我使用的是未经培训的(run_swag_no_trainer)

在 run_swag_no_trainer.py 中,我做了一些更改以使用 ipex 。#修改前的代码如下:

device = accelerator.device
model.to(device)

#添加ipex后:

import intel_pytorch_extension as ipex
    device = ipex.DEVICE
    model.to(device)

运行以下命令时,它花费了太多时间。

export DATASET_NAME=swag

accelerate launch run_swag_no_trainer.py \
  --model_name_or_path bert-base-cased \
  --dataset_name $DATASET_NAME \
  --max_seq_length 128 \
  --per_device_train_batch_size 32 \
  --learning_rate 2e-5 \
  --num_train_epochs 3 \
  --output_dir /tmp/$DATASET_NAME/

有没有其他方法可以在 intel ipex 上进行相同的测试?

4

1 回答 1

2

首先您必须了解,哪些因素实际上会增加运行时间。以下是这些因素:

  1. 大输入尺寸。
  2. 数据结构;均值偏移,未归一化。
  3. 大的网络深度和/或宽度。
  4. 大量的时代。
  5. 批量大小与物理可用内存不兼容。
  6. 非常小或高的学习率。

为了快速运行,请确保处理上述因素,例如:

  1. 将输入大小减小到适当的尺寸,以确保不会丢失重要特征。
  2. 始终对输入进行预处理以使其均值为零,并通过将其除以 std 对其进行归一化。最大值、最小值的偏差或差异。
  3. 保持不高不低的网络深度和宽度。或者总是使用理论上经过验证的标准架构。
  4. 始终确保时代。如果您无法在超出定义阈值的错误或准确性方面做出任何进一步的改进,则无需花费更多时间。
  5. 批量大小应根据可用内存和 CPU/GPU 的数量来确定。如果批处理无法完全加载到内存中,那么由于内存和文件系统之间的大量分页,这将导致处理缓慢。
  6. 适当的学习率应该通过尝试多个来确定,并使用能够最大程度地减少错误 wrt epoch 数的学习率。
于 2021-10-18T04:53:40.637 回答