Day55——晚课 AI应用部署与上线实战

作者:

系列教程说明

这是「AI零基础学习」系列教程的第55天晚课。每天早课讲理论,晚课做实战。

上篇回顾

今天早课,我们学习了AI应用部署的基本概念——从模型选型、API设计到部署平台选择。今晚的实战课,我们要真正动手,把一个AI应用从本地搬到线上,让全世界都能访问。

今晚目标

完成一个完整的AI应用部署流程:

  • 用Python搭建一个AI文本摘要API
  • 用Docker打包成容器
  • 部署到免费云平台
  • 绑定域名、配置HTTPS

学完今晚,你就能自豪地说:”我的AI应用上线了!”


第一步:搭建AI应用

我们以”文本摘要”为例,做一个简单但完整的AI应用。这个应用接收一段文字,返回摘要。

1.1 创建项目结构

打开终端,创建项目文件夹:

`bash

mkdir ai-summarizer

cd ai-summarizer

`

项目结构如下:

`

ai-summarizer/

├── app.py # 主应用

├── requirements.txt # 依赖列表

├── Dockerfile # Docker配置

└── README.md # 项目说明

`

1.2 编写主应用

创建 app.py

`python

from flask import Flask, request, jsonify

from transformers import pipeline

app = Flask(__name__)

# 启动时加载模型(只加载一次)

print(“正在加载摘要模型…”)

summarizer = pipeline(“summarization”, model=”facebook/bart-large-cnn”)

print(“模型加载完成!”)

@app.route(“/”)

def home():

return jsonify({

“message”: “AI文本摘要服务已启动”,

“usage”: “POST /summarize,body: {“text”: “你的文本”}”

})

@app.route(“/summarize”, methods=[“POST”])

def summarize():

data = request.get_json()

if not data or “text” not in data:

return jsonify({“error”: “请提供text字段”}), 400

text = data[“text”]

# 文本太短不需要摘要

if len(text) < 50:

return jsonify({“summary”: text, “note”: “文本较短,无需摘要”})

# 调用模型生成摘要

result = summarizer(text, max_length=130, min_length=30, do_sample=False)

summary = result[0][“summary_text”]

return jsonify({

“original_length”: len(text),

“summary_length”: len(summary),

“summary”: summary

})

if __name__ == “__main__”:

app.run(host=”0.0.0.0″, port=5000)

`

1.3 编写依赖文件

创建 requirements.txt

`

flask==3.1.1

transformers==4.52.4

torch==2.7.1

sentencepiece==0.2.0

`

1.4 本地测试

`bash

# 安装依赖

pip install -r requirements.txt

# 启动服务

python app.py

`

打开另一个终端,测试API:

`bash

curl -X POST http://localhost:5000/summarize

-H “Content-Type: application/json”

-d ‘{“text”: “人工智能(AI)正在改变我们的生活方式。从智能手机的语音助手到自动驾驶汽车,从医疗诊断到金融风控,AI技术已经渗透到各个领域。深度学习的突破使得机器在图像识别、自然语言处理等方面达到了接近甚至超越人类的水平。大语言模型的出现更是掀起了一场技术革命,让AI能够理解和生成人类语言,完成各种复杂的任务。”}’

`

你应该看到返回的摘要结果。本地测试通过,接下来把它打包部署上线!


第二步:Docker打包

Docker是把应用”装箱”的工具——不管在谁的电脑上,装了Docker就能跑你的应用。

2.1 编写Dockerfile

创建 Dockerfile

`dockerfile

FROM python:3.11-slim

WORKDIR /app

# 安装依赖

COPY requirements.txt .

RUN pip install –no-cache-dir -r requirements.txt

# 复制代码

COPY app.py .

# 暴露端口

EXPOSE 5000

# 启动命令

CMD [“python”, “app.py”]

`

2.2 本地Docker测试

`bash

# 构建镜像

docker build -t ai-summarizer .

# 运行容器

docker run -p 5000:5000 ai-summarizer

`

再次用curl测试,确认Docker容器内的应用正常工作。

2.3 推送到Docker Hub

`bash

# 登录Docker Hub(没有账号先去 hub.docker.com 注册)

docker login

# 给镜像打标签(替换yourusername为你的用户名)

docker tag ai-summarizer yourusername/ai-summarizer:latest

# 推送

docker push yourusername/ai-summarizer:latest

`


第三步:部署到云平台

这里介绍三个免费方案,选一个最适合你的。

方案一:Hugging Face Spaces(最简单,推荐新手)

Hugging Face Spaces是AI应用的”免费公寓”,特别适合AI项目。

步骤:

  1. 注册 huggingface.co
  2. 点击 “New Space”
  3. 选择 “Docker” 类型
  4. 上传你的代码(包括Dockerfile)
  5. 等待自动构建完成

创建 README.md(Spaces需要这个文件):

`yaml


title: AI文本摘要

emoji: 📝

colorFrom: blue

colorTo: purple

sdk: docker

pinned: false


`

推送到Spaces:

`bash

# 安装git lfs

git lfs install

# 初始化仓库

git init

git remote add origin https://huggingface.co/spaces/yourusername/ai-summarizer

# 推送

git add .

git commit -m “Initial commit”

git push origin main

`

几分钟后,你的AI应用就有了一个 .hf.space 域名,全世界都能访问!

方案二:Railway(适合全栈应用)

Railway提供免费额度,支持自动部署。

  1. 注册 railway.app
  2. 连接GitHub仓库
  3. Railway自动检测Dockerfile并部署
  4. 自动分配 .up.railway.app 域名

方案三:自己的服务器(最灵活)

如果你有云服务器(如阿里云、腾讯云),可以直接部署:

`bash

# SSH登录服务器

ssh user@your-server-ip

# 安装Docker

curl -fsSL https://get.docker.com | sh

# 拉取并运行

docker pull yourusername/ai-summarizer

docker run -d -p 80:5000 –name summarizer yourusername/ai-summarizer

`


第四步:配置域名和HTTPS

4.1 绑定自定义域名

以Cloudflare为例:

  1. 在Cloudflare添加A记录,指向服务器IP
  2. 在Railway/Hugging Face的设置中添加自定义域名
  3. 等待DNS生效(通常几分钟到几小时)

4.2 配置HTTPS(免费SSL证书)

如果用自己的服务器,用Caddy自动配置HTTPS:

`bash

# 安装Caddy

sudo apt install caddy

# 编辑Caddyfile

sudo nano /etc/caddy/Caddyfile

`

写入:

`

your-domain.com {

reverse_proxy localhost:5000

}

`

`bash

# 重启Caddy

sudo systemctl restart caddy

`

Caddy会自动申请Let’s Encrypt证书,HTTPS就这么搞定了!


第五步:监控和维护

上线不是终点,运维才是开始。

5.1 添加健康检查端点

app.py 中添加:

`python

@app.route(“/health”)

def health():

return jsonify({“status”: “ok”, “model”: “bart-large-cnn”})

`

5.2 添加日志

`python

import logging

logging.basicConfig(level=logging.INFO)

logger = logging.getLogger(__name__)

@app.route(“/summarize”, methods=[“POST”])

def summarize():

logger.info(f”收到摘要请求,文本长度: {len(data[‘text’])}”)

# … 原有代码 …

logger.info(f”摘要完成,摘要长度: {len(summary)}”)

`

5.3 简单的访问统计

`python

from collections import Counter

import time

request_count = Counter()

start_time = time.time()

@app.route(“/stats”)

def stats():

uptime = int(time.time() – start_time)

return jsonify({

“total_requests”: sum(request_count.values()),

“uptime_seconds”: uptime,

“endpoints”: dict(request_count)

})

`


今日实战成果

恭喜!你已经完成了AI应用部署的完整流程:

  1. 搭建了AI应用 — Flask + Transformers实现文本摘要API
  2. Docker打包 — 应用容器化,环境一致性有保障
  3. 云平台部署 — 选了Hugging Face Spaces/Railway/自建服务器
  4. 域名和HTTPS — 专业级上线配置
  5. 监控运维 — 健康检查、日志、统计

你的AI应用现在已经在公网上运行了! 把链接分享给朋友,让他们也试试你的AI摘要服务。


🚇 地铁深读:AI应用的成本控制

专为地铁通勤设计,5-10分钟深度阅读。不读不影响主线。

模型推理的成本陷阱

你可能注意到了,我们的摘要服务用了 facebook/bart-large-cnn 模型。这个模型大约有4亿参数,加载后占用约1.5GB内存。在免费平台上,这个开销是可以接受的。但如果你想用更大的模型(比如Llama 70B),成本就会急剧上升。

三个省钱技巧

技巧一:模型量化

把模型从FP32(32位浮点)压缩到INT8(8位整数),内存占用减少75%,速度提升2-4倍,精度损失通常在1-2%以内。

`python

# 使用bitsandbytes量化

from transformers import AutoModelForCausalLM, BitsAndBytesConfig

quantization_config = BitsAndBytesConfig(load_in_8bit=True)

model = AutoModelForCausalLM.from_pretrained(

“meta-llama/Llama-2-7b”,

quantization_config=quantization_config

)

`

技巧二:请求缓存

如果用户提交了相同的文本,直接返回缓存结果,省掉模型推理。

`python

import hashlib

cache = {}

def get_cache_key(text):

return hashlib.md5(text.encode()).hexdigest()

@app.route(“/summarize”, methods=[“POST”])

def summarize():

text = data[“text”]

key = get_cache_key(text)

if key in cache:

return jsonify(cache[key]) # 命中缓存

# … 正常推理 …

cache[key] = result

return jsonify(result)

`

技巧三:按需加载

用Serverless方案(如Modal、AWS Lambda),没有请求时不占资源,有请求时自动启动。适合访问量不大的个人项目。

成本对比

方案 月成本 适合场景

|——|——–|———-|

Hugging Face Spaces 免费 个人项目、Demo
Railway免费额度 免费(有限制) 小型应用
云服务器(2核4G) 50-100元 中小型生产应用
Serverless(Modal) 按调用计费 访问量波动大的应用
专业GPU云(A100) 2000-5000元/月 大模型生产级部署

关键原则:先用免费方案验证想法,有用户了再升级。不要一上来就租最贵的服务器。

推荐学习资源

  • Docker官方教程:docs.docker.com/get-started
  • Hugging Face部署指南:huggingface.co/docs/hub/spaces
  • Flask官方文档:flask.palletsprojects.com
  • Railway文档:docs.railway.app

下篇预告

明天早上8点:AI产品设计思维——如何从用户需求出发设计AI产品

明晚5点:AI产品设计实战——手把手设计一个AI产品方案

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注