如何将训练脚本输出写入AWS SageMaker训练任务日志文件
在SageMaker自定义训练脚本中添加日志到任务日志文件的方法
方法1:直接使用print或标准错误流输出
SageMaker训练任务默认会捕获脚本的标准输出(stdout)和标准错误(stderr),并将这些内容写入训练日志文件(最终同步到CloudWatch或SageMaker控制台的日志面板)。你可以直接在train_coco.py里用print语句输出日志:
print("开始加载COCO数据集...") # 训练代码逻辑 print(f"完成第{epoch}轮训练,损失值: {loss:.4f}")
如果需要标记错误类信息,也可以直接写入标准错误流:
import sys sys.stderr.write("警告:数据集路径未指定,将使用默认路径\n")
方法2:使用Python标准logging模块(推荐)
对于更规范的日志管理,建议用Python内置的logging模块,它支持日志级别、格式化输出等功能,输出内容同样会被SageMaker捕获。在train_coco.py开头配置logging:
import logging # 配置日志输出级别和格式 logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" ) logger = logging.getLogger(__name__) # 在训练代码中调用日志方法 logger.info("初始化训练环境完成") logger.warning("学习率设置过高,可能导致训练不稳定") logger.error("加载模型权重失败,终止训练")
这种方式输出的日志带有时间戳和级别标识,方便后续排查问题。
注意事项
- 无需修改你创建的
Framework子类,SageMaker默认会自动收集entry_point脚本的所有stdout/stderr输出。 - 如果训练脚本包含子进程,需确保子进程的输出重定向到主进程的stdout/stderr,否则这部分内容不会被纳入训练日志。
- 日志内容会同步到SageMaker控制台的「训练任务详情」→「日志」页面,以及对应CloudWatch日志组中。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

