SageMaker Dask报MaterializedLayer无pack_annotations属性错误
报错核心原因
该报错由Dask生态组件版本不兼容触发,是SageMaker Notebook环境的高发问题:
- SageMaker预装镜像默认带的
dask、distributed、dask-ml包常存在版本差,pack_annotations是Dask任务图层的内置方法,当distributed版本低于对应dask版本时,其MaterializedLayer类未实现该方法,执行数据编码、模型拟合等生成Dask任务图的操作时就会触发属性不存在的错误。 - 关闭Dask集群后仍报错,是因为Notebook内核中已经缓存了不兼容的Dask任务图对象、加载了版本错配的模块,没有做内核清理的情况下,后续计算会直接复用错误的缓存对象。
可行解决方案
按以下顺序操作可彻底解决问题:
- 首先重启SageMaker Notebook的Python内核,清空所有内存中缓存的Dask对象、已加载的错配模块,仅关闭Dask客户端无法清除这部分残留。
- 在新启动的内核中执行命令,将所有Dask生态相关包升级到完全一致的版本,禁止单独升级某一个组件:
!pip install --upgrade "dask==2024.3.0" "distributed==2024.3.0" "dask-ml==2024.3.0"
- 安装完成后再次重启内核,后续初始化Dask客户端时显式绑定本地集群,避免无参
Client()调用拉取环境中旧版本的Dask worker进程:
from dask.distributed import Client, LocalCluster cluster = LocalCluster() client = Client(cluster) # 打印客户端信息确认版本匹配 client
- 如果你使用的是SageMaker托管的远程Dask集群,需要同步修改集群启动脚本,保证集群所有worker节点安装的Dask相关包版本,和Notebook环境中的版本完全一致,大小版本号均不能存在差异。
避坑提示:Dask生态的所有组件必须严格版本对齐,只要dask、distributed、dask-ml任意两个包的发布版本差超过1个周期,就大概率出现API不匹配的属性报错。
内容的提问来源于stack exchange,提问作者Jorge
相关产品推荐
相关产品推荐

