构建可在AWS SageMaker使用的含sklearn、pandas的Python Docker镜像求助
报错原因
你选用的jupyter/scipy-notebook基础镜像为了减小体积,没有预装gcc、g++等编译工具链,sagemaker-training的部分依赖需要从源码编译安装,因此触发找不到gcc的错误。
解决方案
方案1:不更换现有基础镜像,补充安装编译依赖
注意jupyter系列基础镜像默认使用普通用户jovyan运行,安装系统包需要先切换到root用户,安装完成后切回默认用户避免权限问题,修改后的Dockerfile如下:
FROM jupyter/scipy-notebook # 切换到root用户安装系统依赖 USER root RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ g++ \ make \ && rm -rf /var/lib/apt/lists/* # 切回默认普通用户 USER $NB_UID RUN pip3 install sagemaker-training COPY train.py /opt/ml/code/train.py ENV SAGEMAKER_PROGRAM train.py
该方案保留了原镜像的所有Jupyter相关组件,适合需要在镜像内直接运行Notebook做调试的场景。
方案2:更换为SageMaker适配的专用基础镜像
推荐使用AWS官方的SageMaker Python基础镜像,该镜像原生适配SageMaker的路径、权限规范,预装了编译工具链和常用AWS依赖,不用额外处理系统依赖,Dockerfile示例如下:
# 可根据需求选择对应Python版本的标签,比如3.8、3.9、3.10 FROM amazon/aws-sagemaker-base-python:3.9 # 该镜像默认已预装pandas、scikit-learn,如有其他依赖可在这一步补充安装 RUN pip3 install --no-cache-dir sagemaker-training COPY train.py /opt/ml/code/train.py ENV SAGEMAKER_PROGRAM train.py
该方案冗余依赖少、镜像体积小、启动速度快,更适合正式的训练任务部署场景。
内容的提问来源于stack exchange,提问作者Daniel Wyatt
相关产品推荐
相关产品推荐

