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

GCP Vertex AI自定义训练因matplotlib字体管理器冻结求助

解决GCP Vertex AI自定义训练中matplotlib fontManager冻结问题

以下是几个针对该问题的有效解决思路:

  • 禁用matplotlib字体管理器初始化
    在Vertex AI训练任务的环境变量中添加MATPLOTLIB_NO_FONTMANAGER=1,该环境变量会强制matplotlib跳过字体管理器的生成流程,从根源避免冻结。如果使用Vertex AI SDK提交任务,可在CustomJob的environment_variables参数中设置:

    from google.cloud import aiplatform
    
    aiplatform.init(project="your-project-id", region="your-region")
    
    job = aiplatform.CustomJob(
        display_name="custom-training-job",
        script_path="training_script.py",
        container_uri="us-docker.pkg.dev/vertex-ai/training/scikit-learn-cpu.0-23:latest",
        environment_variables={"MATPLOTLIB_NO_FONTMANAGER": "1"},
    )
    job.submit()
    
  • 排查并切断间接依赖
    即使未直接导入matplotlib,训练环境中的其他依赖包(如pandas、seaborn等)可能会间接依赖并初始化matplotlib。可通过以下命令查看依赖树:

    pip show --requires matplotlib
    

    找到间接依赖matplotlib的包后,要么改用不依赖matplotlib的替代包,要么在安装该包时加上--no-deps参数,手动安装其必要依赖(排除matplotlib):

    pip install [package-name] --no-deps
    pip install [package-name-required-deps]
    
  • 使用精简自定义镜像
    Vertex AI的默认训练镜像可能预装了matplotlib等冗余包。可以构建自己的精简镜像,只安装训练所需的依赖。比如基于python:3.7-slim构建Dockerfile:

    FROM python:3.7-slim
    
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    COPY training_script.py .
    
    CMD ["python", "training_script.py"]
    

    然后将镜像推送到GCR,在提交训练任务时指定该自定义镜像。

  • 提前生成字体缓存(备选)
    如果必须保留matplotlib,可以在构建自定义镜像时提前生成字体缓存,避免训练时重复生成:

    FROM us-docker.pkg.dev/vertex-ai/training/scikit-learn-cpu.0-23:latest
    
    RUN python -c "import matplotlib.pyplot as plt; plt.plot([1,2,3])"
    

    镜像构建时会完成fontManager的初始化,训练阶段不会再触发该流程。

内容的提问来源于stack exchange,提问作者Hyeonsoo Moon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:30:06