为何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
相关产品推荐
相关产品推荐

