在Vertex AI部署Flan-T5 LLM预测容器时遇'app'模块找不到错误
解决Docker部署Flan-T5容器时的
No module named 'app'错误 问题根源
- 模块路径不匹配:你在Dockerfile里用
COPY ./app /app,会把本地app/文件夹里的文件直接复制到容器的/app目录下,导致容器里只有/app/main.py,没有/app/app/main.py这个结构,但启动命令uvicorn app.main:app要求存在app这个Python模块(即包含main.py的app文件夹),所以触发模块找不到的错误。 - 模型目录复制错误:本地模型目录叫
model_output_flan_t5_base(下划线),但Dockerfile里写的是./model-output-flan-t5-base/(横杠),会导致模型文件根本没复制到容器里,后续预测也会报错。 - 模型路径依赖工作目录:main.py里用相对路径
./model-output-flan-t5-base,容易受容器工作目录影响,建议改用绝对路径。
修正步骤
1. 调整Dockerfile(两种可选方案)
方案一:保留app模块结构
修改COPY命令和WORKDIR,让容器内形成正确的Python包结构:
# gcloud builds submit --tag europe-west4-docker.pkg.dev/argolis-rafaelsanchez-ml-dev/ml-pipelines-repo/finetuning_flan_t5_base FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8 # 升级pip并安装依赖 RUN python3 -m pip install --upgrade pip RUN pip3 install transformers==4.25.1 sentencepiece==0.1.97 torch==1.13.0 fastapi==0.104.0 # 将本地app文件夹复制到容器的/app/app下,形成/app/app/main.py结构 COPY ./app /app/app # 修正模型目录的复制路径,匹配本地目录名 COPY ./model_output_flan_t5_base/ /model_output_flan_t5_base/ EXPOSE 8080 # 设置工作目录为/app,确保Python能找到app模块 WORKDIR /app # 启动命令:此时app模块存在,用app.main:app CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]
方案二:简化结构,直接启动main.py
如果不想嵌套app文件夹,直接修改启动命令:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8 RUN python3 -m pip install --upgrade pip RUN pip3 install transformers==4.25.1 sentencepiece==0.1.97 torch==1.13.0 fastapi==0.104.0 # 直接把本地app里的文件复制到容器的/app目录 COPY ./app/* /app/ # 修正模型目录复制路径 COPY ./model_output_flan_t5_base/ /model_output_flan_t5_base/ EXPOSE 8080 WORKDIR /app # 直接启动main.py里的app实例 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
2. 修正main.py中的模型路径
把相对路径改成容器内的绝对路径,避免工作目录影响:
# 替换原来的model_id model_id = '/model_output_flan_t5_base'
3. 重新构建并运行容器
# 重新构建镜像 docker build -t my-fastapi-app . # 启动容器 docker run -p 8080:8080 my-fastapi-app
额外优化建议
- 在本地的
app文件夹里加一个空的__init__.py文件,明确告诉Python这是一个可导入的模块,避免潜在的识别问题。 - 用
requirements.txt管理依赖更规范,把所有依赖写进文件:
然后在Dockerfile里替换pip安装部分:# requirements.txt fastapi==0.104.0 transformers==4.25.1 sentencepiece==0.1.97 torch==1.13.0 uvicorn==0.24.0.post1COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt
内容的提问来源于stack exchange,提问作者RajeshM
相关产品推荐
相关产品推荐

