监控训练作业

训练可能会花费很长一段时间,具体取决于您的数据集的大小和模型的复杂程度。例如,对现实世界数据进行的训练可持续数小时。在此期间,您可以监控作业的多个方面。

检查作业状态

对于总体状态,检查作业最简单的方法是使用 Google Cloud 控制台上的 AI Platform Training 作业页面。另外,您可以通过编程方式以及使用 Google Cloud CLI 获取这些详细信息。

控制台

  1. 在Google Cloud 控制台中打开 AI Platform Training 作业页面。

    在 Google Cloud 控制台中打开作业

  2. 点击列表中的作业名称以打开作业详细信息页面。

  3. 在报告顶部找到您的作业状态。显示的图标和文字描述了作业的当前状态。

    “作业详情”页面顶部的作业状态信息。

过滤作业

作业页面上,您可以按照几个不同的参数过滤作业,这些参数包括类型作业 ID状态、作业创建时间。

  1. 点击按前缀过滤字段,该字段位于作业列表上方。选择您要用于过滤的前缀。例如,您可以选择类型
  2. 如需完成过滤,请点击您要使用的过滤器后缀。 例如,类型前缀的后缀选项为:

    • 自定义代码训练
    • 内置算法训练
    • 预测
  3. 过滤器将应用到作业列表,并且过滤器的名称将显示在过滤器字段中。例如,如果您选择了自定义代码训练,则过滤器类型:自定义代码训练将显示在顶部,并过滤您的作业列表。如果需要,您可以添加多个过滤器。

查看超参数试验

作业详细信息页面上,您可以在 HyperTune 试验表中查看每次试验的指标。此表仅针对使用超参数调节的作业显示。您可以切换指标,以按最高或最低 rmseTraining stepslearning_rate 显示试验。

如需查看特定试验的日志,请点击more_vert图标,然后点击查看日志

gcloud

在命令行中使用 gcloud ai-platform jobs describe 可以获取作业当前状态的详细信息:

gcloud ai-platform jobs describe job_name

您可以使用 gcloud ai-platform jobs list 获取与项目关联的作业列表,其中包含作业状态和创建时间。请注意,此命令以最简单的形式列出了为项目创建的所有作业。 在请求时请注意划定范围以限制报告的作业数量。如需使用此方法,请参阅以下示例:

使用 --limit 参数限制作业数量。以下示例列出了 5 个最近的作业:

gcloud ai-platform jobs list --limit=5

使用 --filter 参数将作业列表限制为只显示具有给定特性值的作业。您可以过滤作业对象的一个或多个属性。除了核心作业属性之外,您还可以过滤作业中的对象,例如 TrainingInput 对象。

过滤列表的示例如下所示:

  • 列出在特定时间后启动的所有作业。以下示例使用的时间为 2017 年 1 月 15 日晚 7 点:

    gcloud ai-platform jobs list --filter='createTime>2017-01-15T19:00'
    
  • 列出名称以给定字符串开头的最后三个作业。例如,字符串可以表示您用于特定模型的所有训练作业的名称。以下示例使用了一个模型,其中作业标识符为“census”,后缀为按每个作业递增的索引:

    gcloud ai-platform jobs list --filter='jobId:census*' --limit=3
    
  • 列出名称以“rnn”开头的所有失败的作业:

    gcloud ai-platform jobs list --filter='jobId:rnn* AND state:FAILED'
    

如需详细了解过滤器选项支持的表达式,请参阅 gcloud 命令的相关文档

Python

  1. 通过将项目名称和作业名称组合到表单中来组成作业标识符字符串:'projects/your_project_name/jobs/your_job_name'

    projectName = 'your_project_name'
    projectId = 'projects/{}'.format(projectName)
    jobName = 'your_job_name'
    jobId = '{}/jobs/{}'.format(projectId, jobName)
    
  2. 创建对 projects.jobs.get 的请求:

    request = ml.projects().jobs().get(name=jobId)
    
  3. 执行请求(此示例将 execute 调用放在 try 块中以捕获异常):

    response = None
    
    try:
        response = request.execute()
    except errors.HttpError, err:
        # Something went wrong. Handle the exception in an appropriate
        #  way for your application.
    
  4. 检查响应以确保服务调用返回数据,无论 HTTP 发生了何种错误。

    if response == None:
        # Treat this condition as an error as best suits your
        # application.
    
  5. 获取状态数据。响应对象是包含作业资源的所有适用成员的字典,包括完整的 TrainingInput 资源和 TrainingOutput 资源的适用成员。以下示例展示了如何输出作业状态和作业消耗的 ML 单元数。

    print('Job status for {}.{}:'.format(projectName, jobName))
    print('    state : {}'.format(response['state']))
    print('    consumedMLUnits : {}'.format(
        response['trainingOutput']['consumedMLUnits']))
    

如果您的训练应用或 AI Platform Training 基础架构出现问题,则作业可能会失败。您可以使用 Cloud Logging 开始调试。

您还可以使用交互式 shell 在训练作业运行时检查训练容器。

监控资源消耗

您可以在作业详细信息页面上找到训练作业的以下资源利用率图表:

  • 作业的聚合 CPU 或 GPU 利用率以及内存利用率。这些信息按主实例、工作器、参数服务器细分。
  • 作业的网络使用情况(以每秒字节数为单位)。发送的字节数和接收的字节数分别有相应的图表。
  1. 前往Google Cloud 控制台中的 AI Platform Training 作业页面。

    转到 AI Platform Training“作业”页面

  2. 在列表中找到您的作业。

  3. 点击列表中的作业名称以打开作业详细信息页面。

  4. 选择标记为 CPUGPU网络的标签页以查看关联的资源利用率图表。

您还可以访问有关训练作业用于 Cloud Monitoring 的在线资源的信息。AI Platform Training 会将指标导出到 Cloud Monitoring。

每个 AI Platform Training 指标类型的名称中均包含“training”。例如 ml.googleapis.com/training/cpu/utilizationml.googleapis.com/training/accelerator/memory/utilization

使用 TensorBoard 进行监控

您可以对训练应用进行配置,以保存可以使用 TensorBoard 检查和显示的摘要数据。

将摘要数据保存到某个 Cloud Storage 位置,并将 TensorBoard 指向该位置以检查数据。您还可以将 TensorBoard 指向具有包含多个作业的输出的子目录的目录。

如需详细了解 TensorBoard 和 AI Platform Training,请参阅入门指南

后续步骤