如何在Sagemaker训练中打印调试信息?

13

我有一个Jupyter笔记本脚本,只是启动一个训练脚本,可能在Docker容器中。

我在那个训练脚本里添加了一些打印语句,但它们没有出现在笔记本或CloudWatch中。

我正在使用普通的print()语句。如何从训练脚本记录调试信息?


您是使用SageMaker提供的容器还是自己的容器?如果是这样,您介意分享一下您正在使用哪个容器以及有关您的Jupyter笔记本的更多信息吗? - Andre
使用标准的SageMaker提供的容器 - kane
SageMaker提供了许多不同的容器,包括用于运行TensorFlow脚本的容器,类似的MXNet、PyTorch和Chainer容器,以及带有scikit-learn的示例容器等。您可以分享一下您正在使用哪个SageMaker提供的容器吗? - Andre
你如何找到那个答案? - kane
一种方法是检查控制台,它有一个“培训作业”页面,您可以在其中看到使用的“培训图像”。 - Andre
3
有人知道这个问题的答案吗? - user3085459
4个回答

5

当Python尝试缓冲标准输出时,我曾经看到过这种情况。这种情况在与Docker一起使用时可能会有问题。如果这是原因,将ENV PYTHONUNBUFFERED=1添加到您的Dockerfile中(然后重新构建镜像)即可解决此问题。


在日志显示之前,你必须做的第二件事是将日志级别设置为你要添加日志的级别。默认情况下,Python日志的级别设置为WARN及更高。如果你想要以INFO级别记录日志,你必须将你的记录器设置为INFO: logger.setLevel(logging.INFO) - undefined

1
根据https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html,"Docker容器可能会向Stdout和Stderr文件发送消息。Amazon SageMaker将这些消息发送到您AWS帐户中的Amazon CloudWatch日志。"。因此,在您的情况下,print()应该可以工作。您是否检查过更改训练脚本后docker镜像是否已更新?


2
我之前一直在使用print(),但不只是我看不到print()的信息。 - kane

0

您可以在AWS CloudWatchLogs上找到日志。进入Sagemaker控制面板的训练作业,选择您要查找的训练作业。在其中,您会找到一个“查看日志”的选项。它将引导您到Cloudwatch日志。

希望这可以帮助您!


5
但它没有显示我在代码中添加的打印内容。 - Vineet
4
我这里有同样的问题。我认为print()会输出到标准输出,而CloudWatch不会记录标准输出。我认为我们需要一种日志记录方法,但还在探索中…… - kane

0

对于普通的 Python 打印,您可以手动刷新标准输出

print("My Message", flush=True)

那似乎没有显示我想要的内容。我希望在使用CLI命中端点时能够看到日志。 - Randy L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接