AWS Trainium 和 Inferentia 文档

快速入门

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

快速入门

🤗 Optimum Neuron 的设计目标只有一个:让任何 🤗 Transformers 用户都能轻松进行训练和推理,同时充分利用 AWS 加速器的强大功能。

训练

有三个主要的类需要了解

  • NeuronArgumentParser:继承了 Transformers 中的原始 HfArgumentParser,并对参数值进行了额外的检查,以确保它们能与 AWS Trainium 实例良好配合。
  • NeuronTrainingArguments:扩展了原始的 TrainingArguments,添加了特定于 Trainium 的参数,以优化在 AWS Trainium 硬件上的性能。
  • NeuronTrainer:负责编译和分发模型以在 Trainium 芯片上运行,并执行训练和评估的 trainer 类。

NeuronTrainer 与 NeuronTrainer 非常相似,为 🤗 Transformers Trainer 实例调整脚本主要包括:

  • Trainer 类替换为 NeuronTrainer
  • 使用 NeuronTrainingArguments 代替 TrainingArguments

大多数示例脚本都是这样从其原始对应脚本改编而来的

-from transformers import TrainingArguments
+from optimum.neuron import NeuronTrainingArguments
-from transformers import Trainer
+from optimum.neuron import NeuronTrainer as Trainer
-training_args = TrainingArguments(
+training_args = NeuronTrainingArguments(
  # training arguments...
)
# A lot of code here
# Initialize our Trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset if training_args.do_train else None,
    eval_dataset=eval_dataset if training_args.do_eval else None,
    compute_metrics=compute_metrics,
    tokenizer=tokenizer,
    data_collator=data_collator,
)

所有 Trainium 实例至少配备 2 个 Neuron Core。为了利用这些核心,我们需要使用 torchrun 启动训练。下面您将看到一个示例,说明如何在 trn1.2xlarge 实例上使用 bert-base-uncased 模型启动训练脚本。

torchrun --nproc_per_node=2 huggingface-neuron-samples/text-classification/run_glue.py \
--model_name_or_path bert-base-uncased \
--dataset_name philschmid/emotion \
--do_train \
--do_eval \
--bf16 True \
--per_device_train_batch_size 16 \
--learning_rate 5e-5 \
--num_train_epochs 3 \
--output_dir ./bert-emotion

推理

您可以在 Neuron 设备上进行推理之前,将您的 🤗 Transformers 模型编译并导出为序列化格式

optimum-cli export neuron \
  --model distilbert-base-uncased-finetuned-sst-2-english \
  --batch_size 1 \
  --sequence_length 32 \
  --auto_cast matmul \
  --auto_cast_type bf16 \
  distilbert_base_uncased_finetuned_sst2_english_neuron/

上面的命令将导出具有静态形状的 distilbert-base-uncased-finetuned-sst-2-englishbatch_size=1sequence_length=32,并将所有 matmul 操作从 FP32 转换为 BF16。查看导出器指南以获取更多编译选项。

然后,您可以使用 NeuronModelForXXX 类在 Neuron 设备上运行导出的 Neuron 模型,这些类类似于 🤗 Transformers 中的 AutoModelForXXX

from transformers import AutoTokenizer
-from transformers import AutoModelForSequenceClassification
+from optimum.neuron import NeuronModelForSequenceClassification

# PyTorch checkpoint
-model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased-finetuned-sst-2-english")
+model = NeuronModelForSequenceClassification.from_pretrained("distilbert_base_uncased_finetuned_sst2_english_neuron")

tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased-finetuned-sst-2-english")
inputs = tokenizer("Hamilton is considered to be the best musical of past years.", return_tensors="pt")

logits = model(**inputs).logits
print(model.config.id2label[logits.argmax().item()])
# 'POSITIVE'