You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SageMaker训练S-BERT模型的指标未在CloudWatch中显示?

SageMaker训练S-BERT指标无法追踪的解决方法

核心问题分析

你遇到的指标无法被CloudWatch和TrainingJobAnalytics捕获的问题,主要源于三个方面:正则表达式与日志输出格式不匹配、训练脚本日志输出配置不当、镜像选择不符合HuggingFace Estimator要求。

解决方案步骤

1. 替换为HuggingFace专用训练镜像

当前使用的PyTorch基础镜像未封装HuggingFace训练的日志捕获逻辑,需替换为官方专用镜像:

# 替换原镜像获取代码
estimator_image = image_uris.retrieve(
    framework='huggingface',
    region='eu-west-1',
    version='4.26.0',  # 适配PyTorch 1.13.1的HuggingFace版本
    py_version='py39',
    image_scope='training',
    instance_type='ml.p3.2xlarge'
)

2. 修正指标正则表达式

HuggingFace Trainer默认输出双引号JSON格式日志,原正则的单引号匹配规则无效,同时优化数值匹配逻辑覆盖小数、科学计数法场景:

metric_definitions = [
    {'Name': 'loss', 'Regex': '"loss": ([0-9]+(\.[0-9]+|e-[0-9]+))'},
    {'Name': 'learning_rate', 'Regex': '"learning_rate": ([0-9]+(\.[0-9]+|e-[0-9]+))'},
    {'Name': 'eval_loss', 'Regex': '"eval_loss": ([0-9]+(\.[0-9]+|e-[0-9]+))'},
    {'Name': 'eval_accuracy', 'Regex': '"eval_accuracy": ([0-9]+(\.[0-9]+|e-[0-9]+))'},
    {'Name': 'eval_f1', 'Regex': '"eval_f1": ([0-9]+(\.[0-9]+|e-[0-9]+))'},
    {'Name': 'eval_precision', 'Regex': '"eval_precision": ([0-9]+(\.[0-9]+|e-[0-9]+))'},
    {'Name': 'eval_recall', 'Regex': '"eval_recall": ([0-9]+(\.[0-9]+|e-[0-9]+))'},
    {'Name': 'eval_runtime', 'Regex': '"eval_runtime": ([0-9]+(\.[0-9]+|e-[0-9]+))'},
    {'Name': 'eval_samples_per_second', 'Regex': '"eval_samples_per_second": ([0-9]+(\.[0-9]+|e-[0-9]+))'},
    {'Name': 'epoch', 'Regex': '"epoch": ([0-9]+(\.[0-9]+|e-[0-9]+))'}
]

3. 确保训练脚本输出可捕获的日志

在script.py中配置Trainer参数,强制指标日志输出到控制台(SageMaker会捕获控制台日志):

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
    output_dir='/opt/ml/model',
    per_device_train_batch_size=64,
    per_device_eval_batch_size=64,
    learning_rate=2e-5,
    num_train_epochs=1,
    logging_steps=10,  # 每10步打印一次训练指标
    logging_dir='/opt/ml/output/logs',  # SageMaker指定日志目录
    evaluation_strategy="epoch",  # 每个epoch输出评估指标
    save_strategy="epoch"
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset
)

trainer.train()

4. 日志有效性验证

训练启动后,进入SageMaker训练任务详情页查看“日志”标签,确认存在如下格式的指标日志:

{"loss": 0.345, "learning_rate": 2e-05, "epoch": 0.1}
{"eval_loss": 0.210, "eval_accuracy": 0.92, "epoch": 1.0}

最终验证

重新提交训练任务后,执行以下代码验证指标是否可获取:

from sagemaker.analytics import TrainingJobAnalytics
df = TrainingJobAnalytics(training_job_name=huggingface_estimator.latest_training_job.name).dataframe()
print(df.head())

内容的提问来源于stack exchange,提问作者Yoan B. M.Sc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:22:33