SageMaker Studio Notebook训练任务完成后调用fit的单元格仍运行
问题排查与解决方案
核心原因分析
这个问题和Demo代码本身无关,是SageMaker Studio环境的配置或SDK层面的问题,常见触发原因如下:
1. SageMaker Python SDK版本存在状态轮询Bug
v2.70.0之前的SageMaker Python SDK版本存在已知的训练任务状态同步缺陷,部分场景下无法正确接收训练任务完成的回调信号,会一直卡在初始的任务启动日志轮询阶段。
- 验证方式:在单元格执行
pip show sagemaker查看当前安装的SDK版本 - 修复方案:执行
!pip install --upgrade sagemaker升级SDK到最新版本,重启Jupyter内核后重新运行代码即可
2. 网络配置拦截了状态查询请求
如果你的SageMaker Studio运行在私有VPC环境下,会出现两种网络拦截场景:
- 安全组/网络ACL没有开放443端口的出站访问权限,导致笔记本无法调用SageMaker服务接口查询训练任务状态
- VPC没有配置SageMaker服务的接口终端节点,且没有公网出口,无法访问SageMaker API endpoint
- 验证方式:单独执行如下代码,替换成你实际的训练任务名,看是否报错超时/权限拒绝:
import boto3 sm_client = boto3.client("sagemaker") print(sm_client.describe_training_job(TrainingJobName="你的训练任务ID"))
- 修复方案:
- 放宽Studio运行实例对应的安全组出站规则,允许443端口的HTTPS访问
- 私有VPC环境下配置SageMaker服务的VPC终端节点
3. 执行角色缺少状态查询权限
代码中调用get_execution_role()获取的SageMaker执行角色如果没有sagemaker:DescribeTrainingJob接口权限,SDK无法拉取任务最新状态,也会导致进程一直挂起。
- 修复方案:给对应IAM角色附加
sagemaker:DescribeTrainingJob权限,也可以直接托管AmazonSageMakerFullAccess策略快速验证
临时规避方案
如果需要快速推进测试,可以在调用fit方法时添加wait=False参数,让方法不阻塞等待训练完成直接返回:
linear.fit({"train": s3_train_data}, wait=False)
后续可以手动调用linear.latest_training_job.describe()查询训练任务状态,训练完成后再执行后续的部署/推理代码。
内容的提问来源于stack exchange,提问作者shtuken
相关产品推荐
相关产品推荐

