AI Infra 技术栈拆解:从数据层到部署层的实战路径

0 阅读

先搞清楚一件事:AI Infra 到底是什么

很多人被"基础设施"这个词吓到,以为是特别底层的系统级技术。其实换个说法就明白了——AI Infra 就是盖 AI 应用这栋房子时,需要的地基、钢筋、水电和脚手架。

外卖平台能运转,靠的是订单系统、骑手调度、地图导航这套基础设施;AI 应用能跑起来,靠的是数据怎么存、算力从哪来、模型怎么管、服务怎么对外暴露。这四块拼在一起,就是 AI Infra 的全貌。

四层结构:别被复杂名词唬住

层级 干什么的 常用工具 典型场景
数据层 存数据、洗数据、给模型喂数据 MySQL、MongoDB、Pandas、Spark 训练前的数据准备、知识库文档存储
计算层 提供算力,调度任务 GPU、K8s、PyTorch、TensorFlow 模型训练、并行推理
模型层 选模型、改模型、存模型 Hugging Face、TensorRT、ONNX 模型微调、轻量化、多模型切换
部署层 把模型包成服务,对外可用 FastAPI、TFLite、Docker Web API、手机 App、IoT 设备

这四层环环相扣。想靠 Stable Diffusion 做副业赚钱?数据层存你的参考图和提示词历史,计算层租 GPU 跑推理,模型层选合适的 checkpoint 并做优化,部署层用 FastAPI 包成 Web 服务让用户访问。缺了哪层都转不动。

实战一:个人副业,搭个 AI 绘画服务

目标:用户打开网页输入提示词,后端生成图片返回,能支撑订阅制收费。

技术组合:

  • 计算层:RTX 3090 或 Colab 免费 GPU
  • 模型层:Stable Diffusion v1.5
  • 部署层:FastAPI + MinIO 存图片
  • 数据层:MinIO 存用户历史

核心代码就这些:

from fastapi import FastAPI
from diffusers import StableDiffusionPipeline
import torch
from minio import MinIO
import uuid

app = FastAPI()

# 加载模型,第一次会自动下载
pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16
).to("cuda")

# 连 MinIO 存图
minio_client = MinIO("your-minio-server", ...)
bucket = "ai-painting"

@app.post("/generate")
async def generate(prompt: str, negative: str = ""):
    image = pipe(prompt=prompt, negative_prompt=negative).images[0]
    
    # 存图
    name = f"{uuid.uuid4()}.png"
    img_bytes = image.tobytes()
    minio_client.put_object(bucket, name, img_bytes, len(img_bytes), "image/png")
    
    return {"url": minio_client.presigned_get_object(bucket, name)}

跑起来:uvicorn main:app --host 0.0.0.0 --port 8000,打开 localhost:8000/docs 就能试。

变现的关键不在代码,在部署优化。生成速度压到 3 秒以内,稳定性做到 99% 可用,用户才愿意付费。有人靠类似的工具月入两万,核心就是 Infra 层调得好——模型用 TensorRT 加速,图片走 CDN,API 加限流防刷。

实战二:企业知识库,LangChain + RAG 三小时落地

目标:员工用自然语言查内部文档,替代传统的关键词搜索。

技术组合:

  • 数据层:Chroma 向量数据库
  • 模型层:通义千问 + DashScope 嵌入
  • 部署层:FastAPI + Docker

核心流程:文档切分 → 向量化 → 存 Chroma → 检索时找最相关的片段 → 拼进 Prompt 让大模型回答。

from fastapi import FastAPI, Query
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import DashScopeEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import Tongyi

app = FastAPI()

# 初始化模型
llm = Tongyi(dashscope_api_key="your-key", model="qwen-turbo")
embeddings = DashScopeEmbeddings(dashscope_api_key="your-key")

# 加载文档、切分、建向量库
loader = TextLoader("company_docs.txt", encoding="utf-8")
docs = loader.load()
splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = splitter.split_documents(docs)

db = Chroma.from_documents(texts, embeddings, persist_directory="./chroma_db")
db.persist()

# 搭检索链
qa = RetrievalQA.from_chain_type(
    llm=llm, chain_type="stuff",
    retriever=db.as_retriever(search_kwargs={"k": 3}),
    return_source_documents=True
)

@app.get("/query")
async def query(q: str = Query(...)):
    result = qa({"query": q})
    return {
        "answer": result["result"],
        "sources": [d.page_content for d in result["source_documents"]]
    }

注意几个坑:

  • 文档切分别太大,1000 字左右刚好,太大检索不准,太小上下文碎
  • chunk_overlap 设 200 字,防止关键信息被切在边界
  • 向量库要 persist,不然重启数据丢

企业部署时打 Docker 镜像,扔内网服务器或私有云,配个 Nginx 做负载均衡,就能支撑部门级使用。

实战三:端侧部署,模型塞进手机

目标:手机离线跑图像分类,不联网、不泄露数据。

技术组合:

  • 模型层:MobileNetV2(轻量)+ TensorRT 量化
  • 部署层:TFLite + Android Studio

第一步:模型量化

import tensorflow as tf
from tensorflow.keras.applications import MobileNetV2

model = MobileNetV2(weights="imagenet", include_top=True)

converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]  # 默认量化
lite_model = converter.convert()

with open("mobilenetv2_quant.tflite", "wb") as f:
    f.write(lite_model)

量化后从 14MB 压到 3MB 左右,精度损失肉眼难辨。

第二步:Android 加载推理

// 加载模型
MappedByteBuffer model = loadModelFile(context, "mobilenetv2_quant.tflite");
Interpreter interpreter = new Interpreter(model);

// 预处理:缩放到 224x224,归一化
Bitmap resized = Bitmap.createScaledBitmap(bitmap, 224, 224, true);
ByteBuffer input = ByteBuffer.allocateDirect(224 * 224 * 3 * 4);
input.order(ByteOrder.nativeOrder());

// 填像素
int[] pixels = new int[224 * 224];
resized.getPixels(pixels, 0, 224, 0, 0, 224, 224);
for (int p : pixels) {
    input.putFloat(((p >> 16) & 0xFF) / 255.0f);
    input.putFloat(((p >> 8) & 0xFF) / 255.0f);
    input.putFloat((p & 0xFF) / 255.0f);
}

// 推理
float[][] output = new float[1][1000];
interpreter.run(input, output);

// 取最大概率
int maxIdx = 0;
for (int i = 1; i < 1000; i++) {
    if (output[0][i] > output[0][maxIdx]) maxIdx = i;
}
return labels.get(maxIdx);

端侧部署的核心矛盾是体积、速度、精度三选一。MobileNet 系列就是为此设计的,用深度可分离卷积换效率。实际项目中,先跑通再优化——能识别出来再说,精度不够再考虑知识蒸馏或换 EfficientNet。

三个正在发生的趋势

轻量化+端侧化

以前模型必须放云端,现在手机 NPU、IoT 芯片算力够用了。苹果 Core ML、华为 HiAI、高通 QNN 都在推端侧推理框架。未来更多 AI 功能会本地跑,隐私和延迟双赢。

模块化+低代码

LangChain、LlamaIndex 这类框架把 RAG、Agent 流程拆成可插拔的组件。开发者像搭积木一样组合,不用从零写检索逻辑。但低代码不代表没门槛——懂底层才能调得动,知道向量检索为什么慢、Prompt 怎么压缩,才能做出生产级应用。

多模态+智能体协同

单一模态的模型在收敛,下一代是图文音统一理解 + 多 Agent 协作。这要求 Infra 层支持多模态数据流、跨模型调度、长上下文管理。DeepSeek 的 mHC 架构就是例子,把智能体能力拆成模块,快速适配企业场景。

给新手的几条实在建议

别追高大上,先跑通一个

分布式训练、量子计算这些词很酷,但新手先从 Pandas + PyTorch + FastAPI 能搭出完整应用开始。能独立部署一个 AI 绘画服务或知识库,比看十篇论文有用。

重视实战,少看纯理论

AI Infra 是动手学科。环境配不通、CUDA 报错、模型加载失败,这些坑只有踩过才知道怎么绕。建议跟着上面的代码完整跑一遍,改参数看效果,比看视频有效。

先跑通,再优化

第一版别追求完美。AI 绘画服务先能生成图片、返回 URL,再考虑加队列、做限流、上 CDN。知识库先能问答,再调检索精度、加引用溯源。最小可行系统跑起来,迭代才有方向。

基础决定上限

很多人直接用现成工具,遇到瓶颈就卡住——想加速不知道怎么量化,检索不准不懂向量索引原理。系统学过神经网络、优化算法的人,能自己改模型结构、调推理引擎参数,这是核心竞争力。

最后

AI Infra 不是玄学,是工程。四层结构清楚、工具链熟悉、能定位性能瓶颈,就能支撑从副业到企业级的各种应用。2026 年智能体、端侧 AI、脑机接口都在爆发,底层能力的需求只会更旺。

建议现在就动手:选 Stable Diffusion、LangChain 或 TFLite 中的一个,跟着代码完整跑一遍。跑通的那一刻,四层结构怎么协作、哪里容易踩坑,自然就懂了。