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

如何在Vertex AI的aiplatform.log_metrics中记录nan/inf指标?

Vertex AI log_metrics记录NaN/Inf值的解决方案

Vertex AI的aiplatform.log_metrics接口默认不支持直接记录NaN或Inf值,以下是几种可行的处理方案:

方案一:替换为特殊标识值并补充说明

将NaN/Inf替换为业务侧约定的特殊数值,同时通过metric_descriptions参数说明替换规则,确保后续查看指标时能明确原始含义:

from google.cloud import aiplatform

# 原始指标数据(含NaN/Inf)
raw_metrics = {
    "validation_accuracy": float("nan"),
    "training_loss": float("inf")
}

# 处理指标值
processed_metrics = {}
for metric_name, value in raw_metrics.items():
    if value != value:  # 判断NaN
        processed_metrics[metric_name] = -9999
    elif value == float("inf"):
        processed_metrics[metric_name] = 999999
    elif value == float("-inf"):
        processed_metrics[metric_name] = -999999
    else:
        processed_metrics[metric_name] = value

# 记录处理后的指标及说明
aiplatform.log_metrics(
    metrics=processed_metrics,
    metric_descriptions={
        "validation_accuracy": "原始值为NaN时用-9999表示",
        "training_loss": "原始值为Inf时用999999表示,-Inf时用-999999表示"
    }
)

方案二:将原始值记录到实验参数日志

如果需要保留原始的NaN/Inf值,可以借助Vertex AI实验的参数日志功能,直接记录原始数据:

from google.cloud import aiplatform

# 获取当前实验运行实例
current_run = aiplatform.get_current_run()

# 记录含NaN/Inf的原始指标到参数日志
current_run.log_params({
    "raw_validation_accuracy": float("nan"),
    "raw_training_loss": float("inf")
})

这种方式下,参数日志支持存储NaN/Inf,后续可在实验详情页查看原始数值。

方案三:封装工具函数兼顾指标面板与原始值记录

自己封装一个工具函数,同时完成指标值处理(用于log_metrics)和原始值记录(用于参数日志),兼顾可视化与数据完整性:

from google.cloud import aiplatform

def log_metrics_with_nan_inf(metrics):
    processed_metrics = {}
    raw_records = {}
    
    for name, val in metrics.items():
        raw_records[f"raw_{name}"] = val
        # 处理指标值
        if val != val:
            processed_metrics[name] = -9999
        elif val == float("inf"):
            processed_metrics[name] = 999999
        elif val == float("-inf"):
            processed_metrics[name] = -999999
        else:
            processed_metrics[name] = val
    
    # 记录到指标面板
    aiplatform.log_metrics(metrics=processed_metrics)
    # 记录原始值到实验参数
    aiplatform.get_current_run().log_params(raw_records)

# 使用封装函数
log_metrics_with_nan_inf({
    "validation_accuracy": float("nan"),
    "training_loss": float("inf"),
    "precision": 0.87
})

内容的提问来源于stack exchange,提问作者Katie O'Leary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:55:21