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

在Vertex AI部署Flan-T5 LLM预测容器时遇'app'模块找不到错误

解决Docker部署Flan-T5容器时的No module named 'app'错误

问题根源

  1. 模块路径不匹配:你在Dockerfile里用COPY ./app /app,会把本地app/文件夹里的文件直接复制到容器的/app目录下,导致容器里只有/app/main.py,没有/app/app/main.py这个结构,但启动命令uvicorn app.main:app要求存在app这个Python模块(即包含main.py的app文件夹),所以触发模块找不到的错误。
  2. 模型目录复制错误:本地模型目录叫model_output_flan_t5_base(下划线),但Dockerfile里写的是./model-output-flan-t5-base/(横杠),会导致模型文件根本没复制到容器里,后续预测也会报错。
  3. 模型路径依赖工作目录: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管理依赖更规范,把所有依赖写进文件:
    # requirements.txt
    fastapi==0.104.0
    transformers==4.25.1
    sentencepiece==0.1.97
    torch==1.13.0
    uvicorn==0.24.0.post1
    
    然后在Dockerfile里替换pip安装部分:
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:53:24