Optimum 文档

GaudiTrainer

您正在查看 主分支 版本,需要从源代码安装。如果您希望使用常规 pip 安装,请查看最新的稳定版本 (v1.23.1)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

GaudiTrainer

GaudiTrainer 类为功能完备的 Transformers Trainer 提供了扩展的 API。它用于所有 示例脚本

在实例化您的 GaudiTrainer 之前,创建一个 GaudiTrainingArguments 对象以在训练期间访问所有自定义点。

GaudiTrainer 类针对在 Habana Gaudi 上运行的 🤗 Transformers 模型进行了优化。

以下是如何自定义 GaudiTrainer 以使用加权损失(当您拥有不平衡的训练集时很有用)的示例

from torch import nn
from optimum.habana import GaudiTrainer


class CustomGaudiTrainer(GaudiTrainer):
    def compute_loss(self, model, inputs, return_outputs=False):
        labels = inputs.get("labels")
        # forward pass
        outputs = model(**inputs)
        logits = outputs.get("logits")
        # compute custom loss (suppose one has 3 labels with different weights)
        loss_fct = nn.CrossEntropyLoss(weight=torch.tensor([1.0, 2.0, 3.0]))
        loss = loss_fct(logits.view(-1, self.model.config.num_labels), labels.view(-1))
        return (loss, outputs) if return_outputs else loss

自定义 PyTorch GaudiTrainer 的训练循环行为的另一种方法是使用 回调,这些回调可以检查训练循环状态(用于进度报告、在 TensorBoard 或其他机器学习平台上记录……)并做出决策(例如提前停止)。

GaudiTrainer

optimum.habana.GaudiTrainer

< >

( 模型: Union = None gaudi_config: GaudiConfig = None 参数: TrainingArguments = None 数据整理器: Optional = None 训练数据集: Union = None 评估数据集: Union = None 分词器: Optional = None 模型初始化: Optional = None 计算指标: Optional = None 回调: Optional = None 优化器: Tuple = (None, None) 预处理指标的logits: Optional = None )

GaudiTrainer 构建在 transformers 的 Trainer 之上,以支持在 Habana 的 Gaudi 上部署。

autocast_smart_context_manager

< >

( 缓存启用: Optional = True )

一个辅助包装器,它根据情况创建适合 autocast 的上下文管理器,同时向其提供所需的参数。Habana对其进行了修改,以支持在 Gaudi 设备上使用 autocast

评估

< >

( eval_dataset: Union = None ignore_keys: 可选 = None metric_key_prefix: str = 'eval' )

https://github.com/huggingface/transformers/blob/v4.38.2/src/transformers/trainer.py#L3162 并进行以下修改

  1. 注释掉与 TPU 相关的部分
  2. 在评估吞吐量计算中使用 throughput_warmup_steps

评估循环

< >

( dataloader: DataLoader description: str prediction_loss_only: 可选 = None ignore_keys: 可选 = None metric_key_prefix: str = 'eval' )

预测/评估循环,由 Trainer.evaluate()Trainer.predict() 共享。适用于有标签和无标签的情况。

日志

< >

( logs: Dict )

参数

  • logs (Dict[str, float]) — 要记录的值。

在观察训练的各种对象上记录 logs。子类并覆盖此方法以注入自定义行为。

预测循环

< >

( dataloader: DataLoader description: str prediction_loss_only: 可选 = None ignore_keys: 可选 = None metric_key_prefix: str = 'eval' )

预测/评估循环,由 Trainer.evaluate()Trainer.predict() 共享。适用于有标签和无标签的情况。

预测步骤

< >

( model: 模块 inputs: Dict prediction_loss_only: bool ignore_keys: 可选 = None ) Tuple[可选[torch.Tensor], 可选[torch.Tensor], 可选[torch.Tensor]]

参数

  • model (torch.nn.Module) — 要评估的模型。
  • inputs (Dict[str, Union[torch.Tensor, Any]]) — 模型的输入和目标。字典将在被馈送到模型之前解包。大多数模型期望目标在 labels 参数下。查看模型的文档以获取所有可接受的参数。
  • ignore_keys (List[str], 可选) — 模型输出(如果为字典)中在收集预测时应忽略的键列表。

返回

Tuple[Optional[torch.Tensor], Optional[torch.Tensor], Optional[torch.Tensor]]

包含损失、logits 和标签(每个都可选)的元组。

使用inputsmodel执行评估步骤。 子类并覆盖以注入自定义行为。

save_model

< >

( output_dir: Optional = None _internal_call: bool = False )

将保存模型,以便可以使用from_pretrained()重新加载它。 仅保存主进程中的模型。

train

< >

( resume_from_checkpoint: Union = None trial: Union = None ignore_keys_for_eval: Optional = None **kwargs )

参数

  • resume_from_checkpoint (strbool, 可选) — 如果是str,则为先前 Trainer 实例保存的已保存检查点的本地路径。 如果是bool且等于True,则加载先前 Trainer 实例保存在args.output_dir中的最后一个检查点。 如果存在,训练将从这里加载的模型/优化器/调度器状态恢复。
  • trial (optuna.TrialDict[str, Any], 可选) — 超参数搜索的试验运行或超参数字典。
  • ignore_keys_for_eval (List[str], 可选) — 模型输出(如果为字典)中在训练期间收集评估预测时应忽略的键列表。
  • kwargs (Dict[str, Any], 可选) — 用于隐藏已弃用参数的其他关键字参数

主要的训练入口点。

training_step

< >

( model: Module inputs: Dict ) torch.Tensor

参数

  • model (torch.nn.Module) — 要训练的模型。
  • inputs (Dict[str, Union[torch.Tensor, Any]]) — 模型的输入和目标。

    在馈送到模型之前,字典将被解包。大多数模型期望在参数labels下提供目标。请查看模型的文档以了解所有接受的参数。

返回

torch.Tensor

此批次的训练损失张量。

对一批输入执行训练步骤。

子类化并覆盖以注入自定义行为。

GaudiSeq2SeqTrainer

class optimum.habana.GaudiSeq2SeqTrainer

< >

( model: Union = None gaudi_config: GaudiConfig = None args: GaudiTrainingArguments = None data_collator: Optional = None train_dataset: Optional = None eval_dataset: Union = None tokenizer: Optional = None model_init: Optional = None compute_metrics: Optional = None callbacks: Optional = None optimizers: Tuple = (None, None) preprocess_logits_for_metrics: Optional = None )

评估

< >

( eval_dataset: Optional = None ignore_keys: Optional = None metric_key_prefix: str = 'eval' **gen_kwargs )

参数

  • eval_dataset (Dataset, 可选) — 如果您希望覆盖self.eval_dataset,请传递一个数据集。如果它是Dataset,则model.forward()方法不接受的列将自动删除。它必须实现__len__方法。
  • ignore_keys (List[str], 可选) — 模型输出(如果它是字典)中在收集预测时应忽略的键列表。
  • metric_key_prefix (str, 可选,默认为 "eval") — 用作指标键前缀的可选前缀。例如,如果前缀为"eval"(默认值),则指标“bleu”将命名为“eval_bleu”。
  • max_length (int, 可选) — 使用生成方法预测时使用的最大目标长度。
  • num_beams (int, 可选) — 使用 generate 方法预测时将使用的波束搜索的波束数。1 表示不使用波束搜索。gen_kwargs — 其他 generate 特定的关键字参数。

运行评估并返回指标。调用脚本将负责提供计算指标的方法,因为它们是依赖于任务的(将其传递给 init compute_metrics 参数)。您还可以子类化并覆盖此方法以注入自定义行为。

预测

< >

( test_dataset: Dataset ignore_keys: Optional = None metric_key_prefix: str = 'test' **gen_kwargs )

参数

  • test_dataset (Dataset) — 要在其上运行预测的数据集。如果它是 Dataset,则会自动删除 model.forward() 方法不接受的列。必须实现 __len__ 方法
  • ignore_keys (List[str], 可选) — 模型输出中(如果它是字典)应在收集预测时忽略的一系列键。
  • metric_key_prefix (str, 可选,默认为 "eval") — 用于作为指标键前缀的可选前缀。例如,如果前缀为 "eval"(默认值),则指标“bleu”将命名为“eval_bleu”
  • max_length (int, 可选) — 使用 generate 方法预测时要使用的最大目标长度。
  • num_beams (int, 可选) — 使用 generate 方法预测时将使用的波束搜索的波束数。1 表示不使用波束搜索。gen_kwargs — 其他 generate 特定的关键字参数。

运行预测并返回预测和潜在的指标。根据数据集和您的用例,您的测试数据集可能包含标签。在这种情况下,此方法还会返回指标,就像在 evaluate() 中一样。

如果您的预测或标签具有不同的序列长度(例如,因为您在令牌分类任务中执行动态填充),则预测将被填充(在右侧)以允许连接到一个数组中。填充索引为 -100。
返回值:*NamedTuple* 一个具有以下键的命名元组:- predictions (`np.ndarray`):`test_dataset` 上的预测。- label_ids (`np.ndarray`, *可选*):标签(如果数据集包含一些)。- metrics (`Dict[str, float]`, *可选*):潜在的指标字典(如果数据集包含标签)。

GaudiTrainingArguments

optimum.habana.GaudiTrainingArguments

< >

( output_dir: str overwrite_output_dir: bool = False do_train: bool = False do_eval: bool = False do_predict: bool = False eval_strategy: Union = 'no' prediction_loss_only: bool = False per_device_train_batch_size: int = 8 per_device_eval_batch_size: int = 8 per_gpu_train_batch_size: Optional = None per_gpu_eval_batch_size: Optional = None gradient_accumulation_steps: int = 1 eval_accumulation_steps: Optional = None eval_delay: Optional = 0 torch_empty_cache_steps: Optional = None learning_rate: float = 5e-05 weight_decay: float = 0.0 adam_beta1: float = 0.9 adam_beta2: float = 0.999 adam_epsilon: Optional = 1e-06 max_grad_norm: float = 1.0 num_train_epochs: float = 3.0 max_steps: int = -1 lr_scheduler_type: Union = 'linear' lr_scheduler_kwargs: Union = <factory> warmup_ratio: float = 0.0 warmup_steps: int = 0 log_level: Optional = 'passive' log_level_replica: Optional = 'warning' log_on_each_node: bool = True logging_dir: Optional = None logging_strategy: Union = 'steps' logging_first_step: bool = False logging_steps: float = 500 logging_nan_inf_filter: Optional = False save_strategy: Union = 'steps' save_steps: float = 500 save_total_limit: Optional = None save_safetensors: Optional = True save_on_each_node: bool = False save_only_model: bool = False restore_callback_states_from_checkpoint: bool = False no_cuda: bool = False use_cpu: bool = False use_mps_device: bool = False seed: int = 42 data_seed: Optional = None jit_mode_eval: bool = False use_ipex: bool = False bf16: bool = False fp16: bool = False fp16_opt_level: str = 'O1' half_precision_backend: str = 'hpu_amp' bf16_full_eval: bool = False fp16_full_eval: bool = False tf32: Optional = None local_rank: int = -1 ddp_backend: Optional = 'hccl' tpu_num_cores: Optional = None tpu_metrics_debug: bool = False debug: Union = '' dataloader_drop_last: bool = False eval_steps: Optional = None dataloader_num_workers: int = 0 dataloader_prefetch_factor: Optional = None past_index: int = -1 run_name: Optional = None disable_tqdm: Optional = None remove_unused_columns: Optional = True label_names: Optional = None load_best_model_at_end: Optional = False metric_for_best_model: Optional = None greater_is_better: Optional = None ignore_data_skip: bool = False fsdp: Union = '' fsdp_min_num_params: int = 0 fsdp_config: Union = None fsdp_transformer_layer_cls_to_wrap: Optional = None accelerator_config: Union = None deepspeed: Union = None label_smoothing_factor: float = 0.0 optim: Union = 'adamw_torch' optim_args: Optional = None adafactor: bool = False group_by_length: bool = False length_column_name: Optional = 'length' report_to: Union = None ddp_find_unused_parameters: Optional = False ddp_bucket_cap_mb: Optional = 230 ddp_broadcast_buffers: Optional = None dataloader_pin_memory: bool = True dataloader_persistent_workers: bool = False skip_memory_metrics: bool = True use_legacy_prediction_loop: bool = False push_to_hub: bool = False resume_from_checkpoint: Optional = None hub_model_id: Optional = None hub_strategy: Union = 'every_save' hub_token: Optional = None hub_private_repo: bool = False hub_always_push: bool = False gradient_checkpointing: bool = False gradient_checkpointing_kwargs: Union = None include_inputs_for_metrics: bool = False eval_do_concat_batches: bool = True fp16_backend: str = 'auto' evaluation_strategy: Union = None push_to_hub_model_id: Optional = None push_to_hub_organization: Optional = None push_to_hub_token: Optional = None mp_parameters: str = '' auto_find_batch_size: bool = False full_determinism: bool = False torchdynamo: Optional = None ray_scope: Optional = 'last' ddp_timeout: Optional = 1800 torch_compile: bool = False torch_compile_backend: Optional = None torch_compile_mode: Optional = None dispatch_batches: Optional = None split_batches: Optional = None include_tokens_per_second: Optional = False include_num_input_tokens_seen: Optional = False neftune_noise_alpha: Optional = None optim_target_modules: Union = None batch_eval_metrics: bool = False eval_on_start: bool = False use_liger_kernel: Optional = False eval_use_gather_object: Optional = False use_habana: Optional = False gaudi_config_name: Optional = None use_lazy_mode: Optional = True use_hpu_graphs: Optional = False use_hpu_graphs_for_inference: Optional = False use_hpu_graphs_for_training: Optional = False use_compiled_autograd: Optional = False compile_dynamic: Optional = None disable_tensor_cache_hpu_graphs: Optional = False max_hpu_graphs: Optional = None distribution_strategy: Optional = 'ddp' throughput_warmup_steps: Optional = 0 adjust_throughput: bool = False pipelining_fwd_bwd: Optional = False ignore_eos: Optional = True non_blocking_data_copy: Optional = False profiling_warmup_steps: Optional = 0 profiling_steps: Optional = 0 profiling_record_shapes: Optional = True fp8: Optional = False )

参数

  • gaudi_config_name (str可选) — 预训练的 Gaudi 配置名称或路径。
  • use_lazy_mode (bool可选,默认为 True) — 是否使用惰性模式运行模型。
  • use_hpu_graphs (bool可选,默认为 False) — 已弃用,请使用 use_hpu_graphs_for_inference 代替。是否使用 HPU 图进行推理。
  • use_hpu_graphs_for_inference (bool可选,默认为 False) — 是否使用 HPU 图进行推理。这将加快延迟,但可能与某些操作不兼容。
  • use_hpu_graphs_for_training (bool可选,默认为 False) — 是否使用 HPU 图进行训练。这将加快训练速度,但可能与某些操作不兼容。
  • use_compiled_autograd (bool可选,默认为 False) — 是否使用编译后的自动微分进行训练。目前仅适用于摘要模型。
  • compile_dynamic (bool|None可选,默认为 None) — 设置 torch.compile 的 ‘dynamic’ 参数的值。
  • disable_tensor_cache_hpu_graphs (bool可选,默认为 False) — 是否在使用 hpu 图时禁用张量缓存。如果为 True,则张量不会缓存在 hpu 图中,可以节省内存。
  • max_hpu_graphs (int可选) — 要缓存的最大 HPU 图数量。减少以节省设备内存。
  • distribution_strategy (str可选,默认为 ddp) — 确定如何实现数据并行分布式训练。可以是:ddpfast_ddp
  • adjust_throughput (‘bool’, 可选,默认为 False) — 是否从吞吐量计算中移除日志记录、评估和保存所需的时间。
  • pipelining_fwd_bwd (bool, 可选,默认为 False) — 是否在正向和反向之间添加一个额外的 mark_step,用于流水线主机反向构建和 HPU 正向计算。
  • non_blocking_data_copy (bool, 可选,默认为 False) — 是否在准备输入时启用异步数据复制。
  • profiling_warmup_steps (int, 可选,默认为 0) — 要忽略的概要分析步骤数。
  • profiling_steps (int, 可选,默认为 0) — 启用概要分析时要捕获的步骤数。

GaudiTrainingArguments 构建在 Transformers 的 TrainingArguments 之上,以支持在 Habana 的 Gaudi 上部署。

GaudiSeq2SeqTrainingArguments

optimum.habana.GaudiSeq2SeqTrainingArguments

< >

( output_dir: str overwrite_output_dir: bool = False do_train: bool = False do_eval: bool = False do_predict: bool = False eval_strategy: Union = 'no' prediction_loss_only: bool = False per_device_train_batch_size: int = 8 per_device_eval_batch_size: int = 8 per_gpu_train_batch_size: Optional = None per_gpu_eval_batch_size: Optional = None gradient_accumulation_steps: int = 1 eval_accumulation_steps: Optional = None eval_delay: Optional = 0 torch_empty_cache_steps: Optional = None learning_rate: float = 5e-05 weight_decay: float = 0.0 adam_beta1: float = 0.9 adam_beta2: float = 0.999 adam_epsilon: Optional = 1e-06 max_grad_norm: float = 1.0 num_train_epochs: float = 3.0 max_steps: int = -1 lr_scheduler_type: Union = 'linear' lr_scheduler_kwargs: Union = <factory> warmup_ratio: float = 0.0 warmup_steps: int = 0 log_level: Optional = 'passive' log_level_replica: Optional = 'warning' log_on_each_node: bool = True logging_dir: Optional = None logging_strategy: Union = 'steps' logging_first_step: bool = False logging_steps: float = 500 logging_nan_inf_filter: Optional = False save_strategy: Union = 'steps' save_steps: float = 500 save_total_limit: Optional = None save_safetensors: Optional = True save_on_each_node: bool = False save_only_model: bool = False restore_callback_states_from_checkpoint: bool = False no_cuda: bool = False use_cpu: bool = False use_mps_device: bool = False seed: int = 42 data_seed: Optional = None jit_mode_eval: bool = False use_ipex: bool = False bf16: bool = False fp16: bool = False fp16_opt_level: str = 'O1' half_precision_backend: str = 'hpu_amp' bf16_full_eval: bool = False fp16_full_eval: bool = False tf32: Optional = None local_rank: int = -1 ddp_backend: Optional = 'hccl' tpu_num_cores: Optional = None tpu_metrics_debug: bool = False debug: Union = '' dataloader_drop_last: bool = False eval_steps: Optional = None dataloader_num_workers: int = 0 dataloader_prefetch_factor: Optional = None past_index: int = -1 run_name: Optional = None disable_tqdm: Optional = None remove_unused_columns: Optional = True label_names: Optional = None load_best_model_at_end: Optional = False metric_for_best_model: Optional = None greater_is_better: Optional = None ignore_data_skip: bool = False fsdp: Union = '' fsdp_min_num_params: int = 0 fsdp_config: Union = None fsdp_transformer_layer_cls_to_wrap: Optional = None accelerator_config: Union = None deepspeed: Union = None label_smoothing_factor: float = 0.0 optim: Union = 'adamw_torch' optim_args: Optional = None adafactor: bool = False group_by_length: bool = False length_column_name: Optional = 'length' report_to: Union = None ddp_find_unused_parameters: Optional = False ddp_bucket_cap_mb: Optional = 230 ddp_broadcast_buffers: Optional = None dataloader_pin_memory: bool = True dataloader_persistent_workers: bool = False skip_memory_metrics: bool = True use_legacy_prediction_loop: bool = False push_to_hub: bool = False resume_from_checkpoint: Optional = None hub_model_id: Optional = None hub_strategy: Union = 'every_save' hub_token: Optional = None hub_private_repo: bool = False hub_always_push: bool = False gradient_checkpointing: bool = False gradient_checkpointing_kwargs: Union = None include_inputs_for_metrics: bool = False eval_do_concat_batches: bool = True fp16_backend: str = 'auto' evaluation_strategy: Union = None push_to_hub_model_id: Optional = None push_to_hub_organization: Optional = None push_to_hub_token: Optional = None mp_parameters: str = '' auto_find_batch_size: bool = False full_determinism: bool = False torchdynamo: Optional = None ray_scope: Optional = 'last' ddp_timeout: Optional = 1800 torch_compile: bool = False torch_compile_backend: Optional = None torch_compile_mode: Optional = None dispatch_batches: Optional = None split_batches: Optional = None include_tokens_per_second: Optional = False include_num_input_tokens_seen: Optional = False neftune_noise_alpha: Optional = None optim_target_modules: Union = None batch_eval_metrics: bool = False eval_on_start: bool = False use_liger_kernel: Optional = False eval_use_gather_object: Optional = False use_habana: Optional = False gaudi_config_name: Optional = None use_lazy_mode: Optional = True use_hpu_graphs: Optional = False use_hpu_graphs_for_inference: Optional = False use_hpu_graphs_for_training: Optional = False use_compiled_autograd: Optional = False compile_dynamic: Optional = None disable_tensor_cache_hpu_graphs: Optional = False max_hpu_graphs: Optional = None distribution_strategy: Optional = 'ddp' throughput_warmup_steps: Optional = 0 adjust_throughput: bool = False pipelining_fwd_bwd: Optional = False ignore_eos: Optional = True non_blocking_data_copy: Optional = False profiling_warmup_steps: Optional = 0 profiling_steps: Optional = 0 profiling_record_shapes: Optional = True fp8: Optional = False sortish_sampler: bool = False predict_with_generate: bool = False generation_max_length: Optional = None generation_num_beams: Optional = None generation_config: Union = None )

参数

  • sortish_sampler (bool, 可选,默认为 False) — 是否使用 *sortish sampler*。目前仅当底层数据集为 *Seq2SeqDataset* 时才可使用,但不久的将来将普遍可用。它根据长度对输入进行排序,以最大程度地减少填充大小,并为训练集提供一些随机性。
  • predict_with_generate (bool, 可选,默认为 False) — 是否使用 generate 来计算生成指标(ROUGE、BLEU)。
  • generation_max_length (int, 可选) — 当 predict_with_generate=True 时,在每个评估循环中使用的 max_length。将默认为模型配置的 max_length 值。
  • generation_config (strPathtransformers.generation.GenerationConfig可选) — 允许从 from_pretrained 方法加载 transformers.generation.GenerationConfig。这可以是:

    • 一个字符串,表示托管在 huggingface.co 上模型仓库中的预训练模型配置的模型 ID
    • 一个路径,指向使用 transformers.GenerationConfig.save_pretrained 方法保存的配置文件所在的目录,例如:./my_model_directory/
    • 一个 transformers.generation.GenerationConfig 对象。

GaudiSeq2SeqTrainingArguments 构建在 Transformers 的 Seq2SeqTrainingArguments 之上,以支持在 Habana 的 Gaudi 上部署。

to_dict

< >

( )

序列化此实例,同时将Enum替换为其值,并将GaudiGenerationConfig替换为字典(以支持 JSON 序列化)。它通过删除其值来模糊化令牌值。

< > 在 GitHub 上更新