架构手册

Web 端 Python 算法调用与
模型训练架构选择手册

把 Python 算法接入 Web 平台时,开发者的真正问题不是「能不能调」,而是「数据放哪、算力跑哪、谁付钱、谁负责」。本手册把调用方式拆成三种、把架构拆成四种、并给出明确的决策路径与平台搭建方案。

3 调用方式 4 架构模式 5 决策维度 5 层平台架构 2 共享机制
3
Python → Web 调用路径
HTTP · WASM · ONNX
4
数据 × 算力 架构模式
① 本地·本地 / ② OSS·本地 / ③ OSS·云 / ④ 主机·云
$902
100GB · 月训练100次 · OSS总成本
vs $10 服务器本地
② + ④
推荐混合方案
本地算力为主 · 云端为备
arch_select.py — 架构决策伪代码
# 1. 数据敏感? → ① 本地 + 本地
# 2. 多用户共享? → 进入云端路径 ↓
def choose_arch(data_gb, calls_per_day, latency_s, budget):
    if data_gb > 5 and calls_per_day > 10:
        return "④ 服务器存储 + 云端算力"     # 高速 IO
    elif latency_s < 1:
        return "④ 服务器存储 + 云端算力"     # 数据预加载
    elif budget == "low":
        return "② OSS + 用户本地算力"       # Pyodide + WebGPU
    else:
        return "③ OSS + 云端算力"             # FastAPI + OSS SDK
// 01 · INVOCATION

让前端调用 Python 算法的三种方式

本质差别:算法运行在哪。这是后续所有架构选择的起点。

// 01

HTTP API · 服务端调用

将算法封装为 Web 服务,前端通过 HTTP 请求调用。最主流、最成熟的方案。

  • Flask轻量灵活 · 快速原型
  • FastAPI高性能 · 自动生成文档
  • Django大而全 · 自带 Admin
// 02

浏览器端 Python · 本地算力

WebAssembly 把 Python 解释器搬进浏览器,算法在用户本地执行。零服务端算力开销。

  • PyodideNumPy / Pandas / Matplotlib
  • Brython轻量 · 启动快 · 与 DOM 交互
  • Eryx支持快照恢复 · 状态持久化
// 03

ONNX Runtime · 模型推理

把训练好的模型导出为 ONNX,在浏览器用 onnxruntime-web 加载,支持 WebGPU 加速。

  • WebGPU调用用户本地显卡
  • WASMCPU 兜底
  • ONNX跨框架可移植
PRODUCTION API
生产级算法服务
复杂模型、大数据、需要稳定 SLA → HTTP API
CLIENT SIDE
轻量交互 · 教学 · 隐私
小脚本、不上传数据、即时反馈 → Pyodide
EDGE INFERENCE
已训练模型的快速推理
模型固定、调用频繁、低延迟 → ONNX Runtime Web
// 02 · ARCHITECTURE

四种训练 / 推理架构模式

两个维度交叉出四种模式:数据存在哪 × 算力跑在哪。这是整个手册最核心的一张图。

// MODE 01 数据·本地 / 算力·本地

① 本地数据 + 本地算力

硬盘 → 内存 → CPU/GPU
代码形态本地 Python 脚本
数据共享× 不支持
算力成本用户自付
隐私性最高
离线可用√ 支持
并发能力单用户
// MODE 02 数据·OSS / 算力·本地

② 云端数据 + 本地算力

云端OSS → ↓ 网络下载 → 内存 → CPU/GPU
代码形态Pyodide + WASM + WebGPU
数据共享√ 易于共享
算力成本用户自付
隐私性中等(数据暂存本地)
存储成本$0.02 / GB · 月
并发能力无限
// MODE 03 数据·OSS / 算力·云端

③ 云端数据 + 云端算力

云端OSS → ↓ 内网 → 服务器内存 → 服务器CPU/GPU
代码形态Flask / FastAPI + OSS SDK
数据共享√ 易于共享
算力成本按小时付费
隐私性中等(云上处理)
传输成本有(内/外网)
并发能力受实例数限制
// MODE 04 数据·主机 / 算力·云端

④ 服务器本地 + 云端算力

服务器硬盘 → 内存 → CPU/GPU
代码形态服务器本地文件 IO
数据共享! 需额外配置
算力成本按小时付费
IO 速度GB/s · 极快
训练速度最快
存储成本$0.10 / GB · 月
// 03 · SELECTION

方案选择:决策路径与核心对比

不直接告诉你「选哪个」,而是给你五个判断维度和一棵决策树,按你的实际约束走一遍。

对比维度 ① 本地·本地 ② OSS·本地 ③ OSS·云端 ④ 主机·云端
数据共享×√√!
算力成本用户自付用户自付按小时(高)按小时(高)
存储成本免费$0.02/GB·月$0.02/GB·月$0.10/GB·月
传输成本无有有(内网)无(本地IO)
隐私性最高中等中等中等
训练速度依赖设备依赖设备+网络稳定最快
单次数据上限设备内存内存+下载时间服务器内存内存+硬盘
离线可用√×××

决策树 · 按你的约束走一遍

decision_tree.txt
开始
 │
 ├─ 数据是否需要在多用户/多设备间共享?
 │   ├─ 否 → 数据是否高度敏感(医疗/金融/隐私)?
 │   │   ├─ 是 → ① 本地+本地
 │   │   └─ 否 → ① 本地+本地 或 ② OSS+本地(看便利性)
 │   └─ 是 → 继续 ↓
 │
 ├─ 单次计算数据量是否 > 5GB?
 │   ├─ 是 → 用户下载时间过长,考虑云端算力 → 继续 ↓
 │   └─ 否 → ② OSS+本地(省钱)
 │
 ├─ 训练/推理是否高频(每天 > 10 次)?
 │   ├─ 是 → 数据量是否 > 100GB?
 │   │   ├─ 是 → ④ 服务器存储+云端(本地高速IO)
 │   │   └─ 否 → ③ 或 ④(取决于预算)
 │   └─ 否 → 低频调用,选 ③ OSS+云端
 │
 ├─ 响应时间要求是否 < 1秒?
 │   ├─ 是 → ④ 服务器存储+云端(数据预加载)
 │   └─ 否 → ③ OSS+云端
 │
 └─ 预算是否充裕?
     ├─ 是 → ④ 服务器存储+云端
     └─ 否 → ② OSS+本地(利用用户算力)
// COST · 100GB 数据集

OSS vs 服务器本地

同样 100GB,低频 vs 高频访问成本差异巨大:

月存储费OSS $2主机 $10
训练一次读取+ $9(流量)免费
100 次/月$902$10
每月 1-2 次$2-20 ✅$10

决策结论:低频存为主 → OSS(③);高频算为主 → 主机(④)。

// SECURITY

隐私与安全

不同架构的数据泄露风险点不一样,对应不同的防护策略:

  • ① 设备丢失 / 硬盘损坏 → 设备加密 · 定期备份
  • ② 传输过程 / 内存残留 → HTTPS · 端到端加密 · 内存清理
  • ③ 云端访问 / 传输 → 服务端加密 · IAM 访问控制
  • ④ 云服务商访问 → 静态加密 · 严格 IAM 策略
// 04 · PLATFORM

Web 平台搭建:五层架构

从浏览器到算力集群,平台被划分为五层。每层各司其职,又通过统一的 API 契约互相调用。

L5 · 用户 浏览器端 用户在浏览器中运行 Pyodide + WebGPU,承担本地算力 PyodideWebGPUONNX Runtime
↕ HTTP / HTTPS
L4 · 接入 API Gateway 签名 URL、限流、鉴权、负载均衡 KongNginxSTS
↕
L3 · 业务 任务调度 用户管理 · 任务调度 · 权限控制 · 监控告警 CeleryRedisOAuth2.0
↕
L2 · 存储 对象存储 + 元数据 OSS 存数据 · PostgreSQL 存元数据 · 版本管理 OSS / S3PostgreSQLGit LFS
↕
L1 · 算力 本地 + 云端 GPU 优先使用用户本地算力 · 任务积压时启动云端 GPU PyodideK8s JobGPU Operator

平台核心模块与技术选型

模块功能技术选型
用户管理注册、登录、权限、配额OAuth2.0 + JWT
数据集管理上传、下载、版本控制、访问权限OSS + PostgreSQL
算法 / 模型管理算法上传、版本管理、ONNX 导出Git LFS + Model Registry
任务调度任务提交、排队、分发、结果回收Celery + Redis / K8s Job
本地算力引擎浏览器端 Python 运行环境Pyodide + onnxruntime-web + WebGPU
云端算力引擎按需启动的 GPU 计算节点K8s + GPU Operator
结果可视化图表、报告、NotebookECharts / D3 / Jupyter
监控与日志使用量、成本、任务追踪Prometheus + Grafana + ELK
// 05 · SHARING

数据共享 × 算力共享:平台的两条主线

平台真正的杠杆来自复用——数据共享让模型不需要重新发明轮子,算力共享把单点机器变成网格。

消费者之间的数据共享

核心原则:逻辑共享 · 物理隔离。数据从不离开 OSS,凭据只对单个用户短暂有效。
公开数据集 Bucket 公有读
团队内共享 IAM · 团队账号
项目内共享 按项目 ID 控制
私有数据 仅所有者读写
signed_url.js — STS 临时凭证
// 1. 平台生成带时效的签名 URL(不经过平台服务器)
const signedUrl = await generatePresignedUrl('bucket/data.parquet', {
  expiresIn: 3600,       // 1小时有效
  userId: currentUser.id
});

// 2. 用户直连 OSS 下载(节省平台带宽)
const data = await fetch(signedUrl).then(r => r.arrayBuffer());

// 3. 本地计算完成,回传结果
await fetch(uploadUrl, { method: 'PUT', body: JSON.stringify(result) });

消费者之间的算力共享

核心理念:把孤立的消费者算力转化为分布式计算网络。
自愿贡献 如 Folding@home Web 版
任务分发 网格计算 · 大任务拆分
算力市场 出租 GPU 获积分
联邦学习 本地训练 · 仅上传梯度
// TASK DISPATCH · 任务分发架构
调度中心 → 接收任务 · 拆分 · 查询在线 · 分发
用户 A
i9 + RTX
子任务 1
用户 B
M3 Pro
子任务 2
用户 C
Ryzen
子任务 3
用户 D
空闲
备用
↓ ↑
结果聚合服务 → 合并子任务 · 产出最终结果
// COST · ② 模式

OSS + 本地算力的成本特征

总成本随用户量线性增长(流量费),但无需 GPU 时长费。

// COST · ④ 模式

云端 + 云端的成本特征

总成本随计算量线性增长(GPU 时长费),但 IO 速度最快。

四条优化策略
CDN
缓存热门数据 · 降低 OSS 流量费
COMPRESS
Parquet / Arrow · 体积减 70-90%
TIER
冷热数据分级 · 标准层 vs 低频层
HYBRID
优先本地算力 · 低峰期调度云端
// 06 · CHEATSHEET

速查表:按需求特征反推架构

五分钟做决策。把你的场景对照下面五条,按图索骥。

// 01
数据敏感 · 无需共享 · 用户设备好
① 本地 + 本地
隐私性最高,无网络依赖
// 02
需要团队协作 · 数据共享 · 预算有限
② OSS + 本地
利用用户闲置算力,节省云成本
// 03
低频调用 · 用户设备差 · 数据量中等
③ OSS + 云端
按需付费,不维护长期服务器
// 04
高频训练 · 数据量大 · 需稳定性能
④ 主机 + 云端
高速 IO,训练效率最高
// 05
混合场景:共享 + 本地算力为主 + 云端为备
② + ④
平衡成本、性能与弹性