在AzureML Notebook中获取计算实例引用报UnboundLocalError如何解决
根因说明
这个错误是旧版本azureml-core包的已知代码缺陷:ComputeInstance._get_user_display_name方法中,调用微软Graph API请求用户信息时,如果请求发送阶段就抛出异常(比如网络不通、身份校验前置失败),resp变量还未完成赋值就会进入异常捕获分支,代码尝试读取resp.status_code时就触发了UnboundLocalError。
你当前环境安装的azureml-defaults依赖的azureml-core为存在该缺陷的旧版本。
可行解决方案
- 方案1:升级Azure ML核心依赖包
直接执行命令升级到修复了该缺陷的版本(1.44.0及以上版本均已修复):
升级后重启Notebook内核重新运行代码即可。pip install --upgrade azureml-core>=1.44.0 azureml-defaults>=1.44.0 - 方案2:更换计算目标获取方式(无需升级包的临时规避方案)
不使用ComputeTarget构造函数获取实例,改用工作空间内置的compute_targets字典读取,该方式不会触发用户信息拉取逻辑:from azureml.core import Workspace ws = Workspace.from_config() compute = ws.compute_targets["MyCompute"] - 方案3:临时修复本地源码(仅适用于无法升级依赖的特殊场景)
找到报错信息中对应的computeinstance.py文件,定位到_get_user_display_name方法的异常捕获分支,在判断resp.status_code前增加resp变量存在性校验,或者在方法开头初始化resp = None即可。
调试建议
- 先执行代码确认当前
azureml-core版本,排查版本匹配问题:import azureml.core print(azureml.core.VERSION) - 运行
print(ws.compute_targets.keys())确认当前工作空间下的计算资源名称,排除名称拼写错误、实例不存在的问题。 - 若升级后仍出现权限类报错,可验证当前登录Azure的身份凭证是否具备读取AAD用户信息的基础权限,以及租户是否有Graph API访问限制。
内容的提问来源于stack exchange,提问作者Mountassir EL MOUSTAAID
相关产品推荐
相关产品推荐

