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

SageMaker训练XGBoost仅生成profiler_report无训练报告如何解决

问题:SageMaker XGBoost训练任务未生成带特征重要性的训练报告

问题复现

配置SageMaker Debugger的create_xgboost_report()规则,期望自动生成包含特征重要性的XGBoost训练报告,训练完成后遍历规则输出S3路径,仅发现Profiler报告目录,无目标XGBoost训练报告。
使用的核心代码如下:

from sagemaker import get_execution_role
import numpy as np
import pandas as pd
from sagemaker.predictor import csv_serializer
from sagemaker.debugger import Rule, rule_configs
import boto3
import os
import sagemaker

# Define IAM role
rules=[
    Rule.sagemaker(rule_configs.create_xgboost_report())
]
role = get_execution_role()
prefix = 'sagemaker/models'
my_region = boto3.session.Session().region_name 

# 拉取XGBoost镜像
xgboost_container = sagemaker.image_uris.retrieve("xgboost", my_region, "latest")

bucket_name = 'binary-base' 
s3 = boto3.resource('s3')
try:
    if  my_region == 'us-east-1':
      s3.create_bucket(Bucket=bucket_name)
    else: 
      s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={ 'LocationConstraint': my_region })
    print('S3 bucket created successfully')
except Exception as e:
    print('S3 error: ',e)

# 上传数据集到S3
boto3.Session().resource('s3').Bucket(bucket_name).Object(os.path.join(prefix, 'train/train.csv')).upload_file('../Data/Base_Model_Data_No_Labels/train.csv')
boto3.Session().resource('s3').Bucket(bucket_name).Object(os.path.join(prefix, 'validation/val.csv')).upload_file('../Data/Base_Model_Data_No_Labels/val.csv')
boto3.Session().resource('s3').Bucket(bucket_name).Object(os.path.join(prefix, 'test/test.csv')).upload_file('../Data/Base_Model_Data/test.csv')

sess = sagemaker.Session()
xgb = sagemaker.estimator.Estimator(xgboost_container,
                                    role, 
                                    volume_size =5,
                                    instance_count=1, 
                                    instance_type='ml.m4.xlarge',
                                    output_path='s3://{}/{}/output'.format(bucket_name, prefix, 'xgboost_model'),
                                    sagemaker_session=sess, 
                                    rules=rules)

xgb.set_hyperparameters(objective='binary:logistic',
                        num_round=100, 
                        scale_pos_weight=8.5)

xgb.fit({'train': s3_input_train, "validation": s3_input_val}, wait=True)

检查输出路径的代码:

rule_output_path = xgb.output_path + "/" + xgb.latest_training_job.job_name + "/rule-output"
! aws s3 ls {rule_output_path} --recursive

故障原因

  • 镜像版本不兼容:使用latest标签拉取的XGBoost 1.5+版本镜像修改了训练日志输出格式,当前版本的Debugger create_xgboost_report()规则无法正确解析日志中的特征重要性指标,默认仅生成系统Profiler报告。
  • SDK版本bug:SageMaker Python SDK 2.80以下版本的XGBoost报告规则存在逻辑缺陷,会跳过特征重要性模块的生成逻辑。
  • 配置缺失:超参数中未显式指定特征重要性计算类型,且原代码存在语法错误(test.csv上传语句缺失右括号)、输入通道变量未定义的问题,会导致规则无法正常读取训练数据和输出指标。

修复方案

按顺序执行以下调整即可正常生成报告:

  1. 升级SageMaker SDK到兼容版本,修复规则本身的bug
pip install --upgrade sagemaker>=2.90
  1. 固定使用与Debugger规则兼容的XGBoost镜像版本,替换原有的latest标签
# 替换原镜像拉取代码,使用1.3-1版本(1.0~1.4区间版本均兼容)
xgboost_container = sagemaker.image_uris.retrieve("xgboost", my_region, "1.3-1")

注意:请勿使用1.5及以上版本的XGBoost内置镜像,这类镜像的日志格式与当前Debugger报告规则不兼容,会导致特征重要性模块无法生成

  1. 补全代码语法错误,正确定义训练/验证输入通道
# 补全test.csv上传语句缺失的右括号
boto3.Session().resource('s3').Bucket(bucket_name).Object(os.path.join(prefix, 'test/test.csv')).upload_file('../Data/Base_Model_Data/test.csv')

# 新增缺失的输入通道定义,指定输入格式为csv
from sagemaker.inputs import TrainingInput
s3_input_train = TrainingInput(
    s3_data=f's3://{bucket_name}/{prefix}/train/',
    content_type='csv'
)
s3_input_val = TrainingInput(
    s3_data=f's3://{bucket_name}/{prefix}/validation/',
    content_type='csv'
)
  1. 在超参数中显式开启特征重要性计算,指定重要性计算维度
xgb.set_hyperparameters(
    objective='binary:logistic',
    num_round=100, 
    scale_pos_weight=8.5,
    # 新增特征重要性配置
    importance_type='gain'
)
  1. (可选强化配置)在Debugger规则中显式开启特征重要性抓取开关,避免规则默认配置遗漏
rules=[
    Rule.sagemaker(
        rule_configs.create_xgboost_report(),
        rule_parameters={"compute_feature_importance": "True"}
    )
]

结果验证

训练完成后重新执行S3路径遍历命令,rule-output路径下会生成xgboost-report目录,目录内包含HTML格式的完整训练报告,打开即可查看特征重要性排序、模型评估指标、训练收敛曲线等内容,同时目录下会附带特征重要性的原始结构化数据文件,可直接读取做后续分析。


内容的提问来源于stack exchange,提问作者Alesandro Russo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:55:01