系列教程说明
这是「AI零基础70天学习计划」系列教程的第54天晚课。
上篇回顾
今天早课我们学习了微调(Fine-tuning)——如何用少量数据让通用大模型变成某个领域的专家。你已经知道了SFT、LoRA等概念,也了解了微调的基本流程。
但微调完的模型,还只是躺在你的电脑里。今晚的实战目标:把AI能力变成别人能用的产品。
第一步:理解”部署”到底是什么
很多初学者觉得”部署”很神秘,其实用一个生活比喻就能说清楚:
微调 = 学会做菜
部署 = 开餐厅
你学会了做菜(训练好模型),但朋友想吃你做的菜,总不能让人家来你家厨房吧?你需要开一家餐厅(部署),让人家点餐(调用API),你来做菜,然后端上去(返回结果)。
部署的核心就三件事:
- 让模型一直运行着——别人随时能用
- 提供一个”点餐窗口”——通常是API接口或网页
- 处理并发——多人同时用不能崩
第二步:零代码部署——用Gradio 5分钟上线
Gradio 是Python最简单的AI应用部署工具,只需要几行代码,就能把你的AI模型变成一个网页应用。
安装Gradio
`bash
pip install gradio
`
你的第一个AI应用
创建一个文件 my_app.py:
`python
import gradio as gr
def chat(message, history):
“””简单的聊天函数,实际项目中替换为你的AI模型”””
response = f”你说了:{message}。这是AI的回复!”
return response
demo = gr.ChatInterface(
fn=chat,
title=”我的AI助手”,
description=”这是我的第一个AI应用”,
)
demo.launch()
`
运行:
`bash
python my_app.py
`
就是这么简单! 浏览器会自动打开一个网页,你可以直接和AI对话。
接入真实AI模型
把上面的函数换成真正的AI调用:
`python
import gradio as gr
from openai import OpenAI
client = OpenAI(api_key=”你的API密钥”)
def chat(message, history):
messages = [{“role”: “system”, “content”: “你是一个有帮助的AI助手。”}]
for h in history:
messages.append({“role”: “user”, “content”: h[0]})
messages.append({“role”: “assistant”, “content”: h[1]})
messages.append({“role”: “user”, “content”: message})
response = client.chat.completions.create(
model=”gpt-4o-mini”,
messages=messages,
)
return response.choices[0].message.content
demo = gr.ChatInterface(fn=chat, title=”GPT-4o-mini 助手”)
demo.launch(server_name=”0.0.0.0″, server_port=7860)
`
关键参数说明:
server_name="0.0.0.0":允许外部访问(不只是本机)server_port=7860:指定端口号
添加更多功能
Gradio支持丰富的组件:
`python
import gradio as gr
def process(text, style, temperature):
“””根据风格调整文本”””
styles = {
“正式”: f”尊敬的用户,{text}”,
“活泼”: f”嘿!{text}~”,
“简洁”: text[:50] + “…”
}
return styles.get(style, text)
demo = gr.Interface(
fn=process,
inputs=[
gr.Textbox(label=”输入文本”, placeholder=”请输入内容…”),
gr.Radio([“正式”, “活泼”, “简洁”], label=”选择风格”, value=”正式”),
gr.Slider(0, 1, value=0.7, label=”创意程度”),
],
outputs=gr.Textbox(label=”处理结果”),
title=”文本风格转换器”,
description=”选择不同的风格,AI会帮你改写文本”,
)
demo.launch()
`
第三步:免费部署到云端——Hugging Face Spaces
本地运行的Gradio应用,关掉电脑就没了。Hugging Face Spaces 提供免费的云端托管,让你的应用24小时在线。
创建步骤
1. 注册Hugging Face账号
访问 https://huggingface.co 注册(免费)
2. 创建新的Space
- 点击右上角头像 → New Space
- 填写Space名称(如
my-ai-app) - 选择 Gradio 作为SDK
- 选择 Free 级别的硬件
3. 上传文件
你的Space需要至少两个文件:
app.py(你的Gradio代码):
`python
import gradio as gr
def chat(message, history):
return f”收到:{message}”
demo = gr.ChatInterface(fn=chat, title=”我的AI助手”)
demo.launch()
`
requirements.txt(依赖包):
`
gradio>=4.0
openai
`
4. 等待部署
上传文件后,Spaces会自动构建和部署,通常2-5分钟就能访问。
5. 获取链接
部署成功后,你的应用地址是:https://你的用户名.hf.space
实战:部署一个AI翻译助手
`python
import gradio as gr
from openai import OpenAI
import os
client = OpenAI(api_key=os.getenv(“OPENAI_API_KEY”))
def translate(text, target_lang):
“””AI翻译函数”””
lang_map = {
“English”: “英语”,
“日本語”: “日语”,
“한국어”: “韩语”,
“Français”: “法语”,
}
lang = lang_map.get(target_lang, target_lang)
response = client.chat.completions.create(
model=”gpt-4o-mini”,
messages=[
{“role”: “system”, “content”: f”你是一个专业翻译,请将用户输入翻译成{lang},只输出翻译结果。”},
{“role”: “user”, “content”: text}
],
)
return response.choices[0].message.content
demo = gr.Interface(
fn=translate,
inputs=[
gr.Textbox(label=”原文”, placeholder=”输入要翻译的文本…”, lines=3),
gr.Radio([“English”, “日本語”, “한국어”, “Français”], label=”目标语言”, value=”English”),
],
outputs=gr.Textbox(label=”翻译结果”, lines=3),
title=”AI翻译助手”,
description=”支持中→英/日/韩/法翻译”,
)
demo.launch()
`
注意: API密钥不要直接写在代码里!在Hugging Face Spaces的 Settings → Repository secrets 中添加 OPENAI_API_KEY,然后用 os.getenv("OPENAI_API_KEY") 读取。
第四步:Streamlit——更灵活的选择
如果Gradio的界面不够灵活,Streamlit 是另一个优秀的选择,适合构建更复杂的应用。
安装
`bash
pip install streamlit
`
创建应用 streamlit_app.py
`python
import streamlit as st
st.title(“AI文档分析助手”)
st.write(“上传文档,AI帮你提取关键信息”)
# 侧边栏设置
with st.sidebar:
st.header(“设置”)
analysis_type = st.selectbox(
“分析类型”,
[“摘要”, “关键词提取”, “情感分析”]
)
max_length = st.slider(“摘要长度”, 50, 500, 200)
# 文件上传
uploaded_file = st.file_uploader(“上传文档”, type=[“txt”, “pdf”, “docx”])
if uploaded_file:
text = uploaded_file.read().decode(“utf-8”)
st.subheader(“文档内容预览”)
st.text_area(“”, text[:500], height=150)
if st.button(“开始分析”):
with st.spinner(“AI正在分析…”):
# 这里调用你的AI模型
result = f”分析类型:{analysis_type}n文档长度:{len(text)}字n摘要:这是AI生成的摘要…”
st.success(“分析完成!”)
st.write(result)
`
运行:
`bash
streamlit run streamlit_app.py
`
部署到Streamlit Cloud
- 把代码推送到GitHub仓库
- 访问 https://share.streamlit.io
- 连接GitHub,选择仓库和主文件
- 点击Deploy
第五步:API服务化——给别人调用
如果你的AI能力要给其他程序员用,需要做成API服务。
用FastAPI创建API服务
`bash
pip install fastapi uvicorn
`
创建 api_server.py:
`python
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from openai import OpenAI
import os
app = FastAPI(title=”AI服务API”)
client = OpenAI(api_key=os.getenv(“OPENAI_API_KEY”))
class ChatRequest(BaseModel):
message: str
model: str = “gpt-4o-mini”
class ChatResponse(BaseModel):
reply: str
model: str
@app.post(“/chat”, response_model=ChatResponse)
async def chat(request: ChatRequest):
try:
response = client.chat.completions.create(
model=request.model,
messages=[{“role”: “user”, “content”: request.message}],
)
return ChatResponse(
reply=response.choices[0].message.content,
model=request.model,
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get(“/health”)
async def health():
return {“status”: “ok”}
if __name__ == “__main__”:
import uvicorn
uvicorn.run(app, host=”0.0.0.0″, port=8000)
`
运行和测试:
`bash
# 启动服务
python api_server.py
# 测试调用(另一个终端)
curl -X POST http://localhost:8000/chat
-H “Content-Type: application/json”
-d ‘{“message”: “什么是AI?”}’
`
第六步:Docker容器化——一次打包,到处运行
Docker把你的应用和所有依赖打包成一个”集装箱”,在任何服务器上都能运行。
创建Dockerfile
`dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install –no-cache-dir -r requirements.txt
COPY . .
EXPOSE 7860
CMD [“python”, “app.py”]
`
构建和运行
`bash
# 构建镜像
docker build -t my-ai-app .
# 运行容器
docker run -p 7860:7860 -e OPENAI_API_KEY=你的密钥 my-ai-app
`
部署到云服务器
`bash
# 推送到Docker Hub
docker tag my-ai-app 你的用户名/my-ai-app:latest
docker push 你的用户名/my-ai-app:latest
# 在服务器上拉取运行
docker pull 你的用户名/my-ai-app:latest
docker run -d -p 7860:7860 -e OPENAI_API_KEY=你的密钥 你的用户名/my-ai-app
`
实操练习:部署你的第一个AI应用
跟着做,10分钟内上线一个真正的AI应用:
练习1:最小可用版(5分钟)
- 安装Gradio:
pip install gradio - 复制上面的”第一个AI应用”代码
- 运行
python my_app.py - 在浏览器中测试
练习2:上线到云端(10分钟)
- 注册Hugging Face账号
- 创建Space,选择Gradio SDK
- 上传app.py和requirements.txt
- 等待部署完成,分享链接给朋友
练习3:进阶挑战
- 给你的应用添加文件上传功能
- 增加一个下拉菜单选择不同的AI模型
- 添加”点赞”和”反馈”按钮
今日收获
- 部署的本质:让模型一直运行 + 提供访问接口 + 处理并发
- Gradio:最简单的部署方式,几行代码搞定
- Hugging Face Spaces:免费云端托管,适合个人项目
- Streamlit:更灵活的界面,适合复杂应用
- FastAPI:API服务化,给其他程序调用
- Docker:容器化部署,一次打包到处运行
🚇 地铁深读:为什么大厂的AI应用比你的快?
你有没有注意到,ChatGPT的回复几乎是瞬间出现的,而你自己部署的Gradio应用可能要等好几秒?
这背后是推理优化的技术:
1. 模型量化
GPT-4原始模型可能需要几百GB显存,通过INT8/INT4量化,可以压缩到几分之一,速度提升2-4倍。
2. KV Cache
大模型生成每个token时,需要计算之前所有token的注意力。KV Cache把中间结果缓存起来,避免重复计算。
3. 批处理(Batching)
多个用户的请求打包在一起计算,GPU的并行能力被充分利用。这就是为什么大厂的API比你的单机部署快得多。
4. 模型蒸馏
用大模型(教师)训练小模型(学生),让小模型学到大模型的能力但体积小得多。比如GPT-4o-mini就是GPT-4的蒸馏版本。
5. 推测解码(Speculative Decoding)
用一个小模型快速”猜”出多个token,再用大模型验证。猜对了就直接用,速度提升2-3倍。
思考题: 如果你要为1000个用户部署一个AI客服系统,你会选择哪种架构?需要考虑哪些因素?
下篇预告
明天早上8点:Day55——早课 AI产品设计思维
明晚5点:Day55——晚课 AI产品设计实战
发表回复