一、模型部署是什么?
模型部署就是把训练好的模型,变成其他程序 / 用户可以调用的服务。
- 开发阶段:你在本地跑模型代码,只有自己能用
- 部署后:模型变成 API 接口,任何人通过网络都能调用,比如我们平时用的聊天机器人,背后都是部署好的模型服务
二、主流部署方式(按场景分)
1. 本地直接部署(仅开发测试用)
直接在本地 / 服务器上运行模型代码,没有封装接口,只能自己用,不适合线上服务。
2. API 服务化部署(生产环境主流)
用 Web 框架把模型封装成 HTTP 接口,其他服务 / 用户通过网络请求调用模型。
- 常用框架:FastAPI(Python)、Flask
- 优势:跨语言调用、易扩展、方便负载均衡
3. 容器化部署(工业界标准)
用 Docker 把模型、代码、依赖环境打包成一个镜像,部署到服务器上。
- 解决的核心问题:“本地能跑,线上跑不起来” 的环境依赖不一致问题
- 优势:一次打包,到处运行,可在多台服务器上快速部署、扩容
三、API 接口封装实战(FastAPI 示例)
这是生产环境最常用的方式,
from fastapi import FastAPI from transformers import AutoModelForCausalLM, AutoTokenizer from pydantic import BaseModel # 初始化应用 app = FastAPI(title="大模型聊天服务") # 加载模型和分词器(这里用你熟悉的量化方式省显存) model_name = "qwen-7b-chat" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained( model_name, load_in_4bit=True, # 4bit量化,省显存 device_map="auto" ) # 定义请求体格式 class ChatRequest(BaseModel): prompt: str max_tokens: int = 512 # 聊天接口 @app.post("/chat", summary="大模型对话接口") def chat(request: ChatRequest): # 处理输入 inputs = tokenizer(request.prompt, return_tensors="pt").to("cuda") # 模型生成 outputs = model.generate( **inputs, max_new_tokens=request.max_tokens, temperature=0.7 ) # 解码输出 response = tokenizer.decode(outputs[0], skip_special_tokens=True) return {"response": response} if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)运行后,你可以用http://localhost:8000/docs直接测试接口。
四、Docker 容器基础
1. 什么是 Docker?
Docker 是一个容器化平台,它把你的代码、依赖、环境一起打包成一个独立的 “容器”,不管部署到哪台服务器,运行环境都完全一样。
2. 核心文件:Dockerfile
用来定义镜像的构建步骤,示例如下:
dockerfile
# 基础镜像(带Python环境) FROM python:3.10-slim # 设置工作目录 WORKDIR /app # 复制依赖文件 COPY requirements.txt . # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制项目代码 COPY . . # 暴露端口(和FastAPI里的端口一致) EXPOSE 8000 # 启动命令 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]3. 常用 Docker 命令(记这几个就够)
bash
运行
# 构建镜像 docker build -t llm-chat-service . # 运行容器 docker run -d -p 8000:8000 llm-chat-service # 查看运行中的容器 docker ps # 停止容器 docker stop 容器ID灰度发布也叫金丝雀发布,是版本上线的稳妥策略。
- 核心逻辑:不一次性全量更新,先把新版本只开放给一小部分用户 / 流量使用。
- 流程:
- 第一步:切少量流量到新版本,实时监控报错、响应速度、模型效果;
- 第二步:如果运行稳定、没有问题,再逐步扩大范围,最终全量上线;
- 第三步:一旦发现 bug,立刻切回旧版本,风险可控。
- 适用场景:模型迭代、接口更新、服务升级。
- 对比:
- 全量发布:一次性所有用户用新版,出问题全体受影响,风险高;
- 灰度发布:小范围试错,风险低,是线上服务标准做法。