0Pricing
Learn AI with Python · 课时

使用 Docker 容器化机器学习模型

多阶段 Dockerfile、CUDA 基础镜像、模型工件 COPY,以及健康检查端点。

使用 Docker 容器化机器学习模型 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

为什么要将机器学习模型容器化

机器学习模型依赖特定版本的 Python、系统库和固定版本的软件包。Docker 会将所有这些内容打包成一个不可变镜像,使模型能够在笔记本电脑、持续集成运行器和生产集群上以完全相同的方式运行。

对于机器学习来说,最大的麻烦是依赖漂移:针对 numpy 1.24 训练的模型在 numpy 2.0 上可能会悄无声息地出现异常。容器会冻结这些版本。

朴素的单阶段镜像

第一次尝试会在一个阶段中安装所有内容。它确实能够运行,但会将构建工具(编译器、缓存和开发头文件)一并带入最终镜像,使镜像体积更大,攻击面也更广。

FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "serve.py"]

多阶段构建:理念

多阶段构建使用一个阶段编译并安装依赖(即构建阶段),然后只将完成的构建产物复制到干净的最终阶段。仅用于构建的工具永远不会进入生产环境。

  • 构建阶段:完整的基础镜像,运行 pip install
  • 最终阶段:精简的基础镜像,复制已安装的软件包

构建阶段:pip install

构建阶段会将软件包安装到一个已知前缀下,使其易于复制出来。使用 --user 会将它们放置在 /root/.local 下,这是一个稍后可以整体复制的目录。

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

最终精简阶段

最终阶段从 python:3.11-slim 开始,并从构建阶段复制已安装的软件包。精简镜像不包含构建工具链,可将镜像大小减少数百兆字节。

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .

复制模型权重

大型模型的权重应复制为独立层,以便 Docker 对其进行缓存。如果只有代码发生变化,就可以复用权重层,从而快速完成重建。

COPY model/ /app/model/
COPY src/ /app/src/

EXPOSE 服务端口

推理服务器(FastAPI、Triton、TorchServe)会监听某个端口。EXPOSE 8000用于说明容器通过 8000 端口提供服务。它不会自动发布端口;运行时仍需使用 -p 8000:8000 进行映射。

EXPOSE 8000
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]

HEALTHCHECK 基础

编排器需要知道模型服务器是否正常运行。HEALTHCHECK 指令会按固定间隔运行一条命令;非零退出状态会将容器标记为不健康,以便重新启动容器,或将其从负载均衡器中移除。

使用 curl 的 HEALTHCHECK

一种常见做法是访问轻量级的 /health 端点。curl -f 遇到任何 HTTP 错误都会失败(返回非零退出状态),这正是 HEALTHCHECK 所需要的行为。

HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1

最小健康检查端点

服务应用应提供一个快速端点,用于确认模型已经加载,而无需执行完整推理。

from fastapi import FastAPI

app = FastAPI()
model = None  # loaded at startup

@app.get("/health")
def health():
    return {"status": "ok", "model_loaded": model is not None}

完整 Dockerfile

将所有内容组合起来:构建阶段安装依赖项,精简的最终阶段复制这些依赖项和模型,暴露 8000 端口,并声明健康检查。

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY model/ /app/model/
COPY src/ /app/src/
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]

快速检查

检验您对多阶段构建的理解。

回顾

您已经学会使用生产级 Dockerfile 将 ML 模型容器化:

  • 多阶段构建:构建阶段安装依赖项,精简的最终阶段复制这些依赖项
  • EXPOSE 8000用于说明服务端口
  • HEALTHCHECK CMD curl帮助编排器检测失效的容器
  • 将权重复制为可缓存的独立层

接下来,您将把容器化模型部署到托管云服务。

常见问题解答

「使用 Docker 容器化机器学习模型」课时是免费的吗?

是的 — 「使用 Docker 容器化机器学习模型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「使用 Docker 容器化机器学习模型」这节课中我会学到什么?

多阶段 Dockerfile、CUDA 基础镜像、模型工件 COPY,以及健康检查端点。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「使用 Docker 容器化机器学习模型」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 Docker 容器化机器学习模型
  2. 云部署:AWS SageMaker
  3. 使用 Triton Inference Server 实现高性能服务
  4. 扩展与自动扩展模型端点
← 返回 Learn AI with Python