Singularity容器运行AlphaFold作业报错如何排查
报错根因
你看到的两段报错性质完全不同:
- 开头的
/sbin/ldconfig.real: Can't create temporary cache file /etc/ld.so.cache~: Read-only file system是非致命警告:Singularity运行SIF镜像时默认以只读模式加载镜像内部文件系统,ldconfig尝试更新动态链接库缓存时没有写入权限就会触发该提示,不会直接导致程序崩溃。 - 末尾的
AttributeError: module 'jaxlib.pocketfft' has no attribute 'pocketfft'是核心致命错误:容器内安装的jax和jaxlib版本不兼容,高版本jax调用低版本jaxlib中不存在的pocketfft接口导致运行中断,是AlphaFold镜像打包时最常见的依赖错配问题。
排查解决步骤
第一步:确认依赖版本错配
执行以下命令进入容器环境,核对两个核心依赖的版本:
singularity exec alphafold220.sif pip list | grep -E "jax|jaxlib"
适配AlphaFold 2.2.0的稳定版本组合为jax==0.3.15 + jaxlib==0.3.10,如果两个包版本跨度超过小版本范围(比如jax版本高于0.3.15、jaxlib版本低于0.3.10),就会触发本次pocketfft相关报错。
第二步:修复依赖错配
两种方案按需选择即可:
方案1:不修改原镜像,临时修复运行
运行时加--writable-tmpfs参数给容器分配临时可写层,启动时自动安装匹配版本的依赖,不会改动原有SIF文件:
singularity run --nv --writable-tmpfs alphafold220.sif \ -c "pip install --no-cache-dir jax==0.3.15 jaxlib==0.3.10 && \ python /app/alphafold/run_alphafold.py --fasta_paths=/home/igib/AF_singualrity/test.fasta"
如果要调用GPU运行,提前下载对应宿主机CUDA、cuDNN版本的jaxlib 0.3.10 GPU版whl包,挂载进容器后本地安装即可,不要直接用pip拉取的默认CPU版本。
方案2:重新构建镜像,永久修复
如果你是通过.def定义文件构建的镜像,找到文件中%post段的pip依赖安装部分,把jax、jaxlib的版本固定为适配版本,替换原有模糊版本的安装命令后重新构建镜像即可:
# 固定版本安装 pip install --no-cache-dir jax==0.3.15 pip install --no-cache-dir jaxlib==0.3.10
构建完成后直接用原有运行命令启动即可。
第三步:可选优化(不影响核心运行)
如果觉得开头的ldconfig只读提示干扰日志,可以在运行时加--contain参数,或者绑定宿主机可写的ld.so.cache文件到容器对应路径,不处理也完全不会影响AlphaFold的正常计算。
额外注意事项
- 你当前使用的运行命令缺少AlphaFold必填参数,就算依赖修复完成也会因参数不全报错,还需要补充
--data_dir(AlphaFold数据库路径)、--output_dir(结果输出路径)、--model_preset(运行模式,单体重组选monomer、多聚体选multimer)、--use_templates(是否使用模板)等必填参数。 - 用
--nv参数调用GPU前,先在宿主机执行nvidia-smi确认驱动正常,Singularity版本不低于3.7,避免GPU挂载失效。
内容的提问来源于stack exchange,提问作者comp-era
相关产品推荐
相关产品推荐

