最近在做一个内容创作类项目,后端需要集成 AI 图片生成能力。评估了几套方案:自建 GPU 服务器、租用 GPU 云主机、直接调 SaaS API。最后选了阿里云的函数计算(FC)方案,核心原因很简单——不想管服务器。
如果你对快速部署 AI 推理服务感兴趣,可以通过链接了解:快速部署AI推理服务,新用户有免费额度,足够跑完本文的所有实验。
本文会从零开始,在函数计算上部署一套完整的 AI 生图服务,包括环境配置、模型部署、API 调用和成本优化。
为什么选函数计算做 AI 推理?
部署 AI 模型有几种常见方案:
| 方案 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| 自建 GPU 服务器 | 完全可控 | 运维负担重,硬件成本高 | 长期大规模训练任务 |
| GPU 云主机 | 弹性比自建好 | 仍需管理实例,闲置浪费 | 持续高负载推理 |
| SaaS API 调用 | 零运维 | 成本随调用量线性增长,定制受限 | 标准场景快速接入 |
| 函数计算 + GPU | 免运维,按需付费,弹性伸缩 | 冷启动有一定延迟 | 间歇性 AI 推理任务 |
我的需求是「零散的任务型调用」——用户点一下生成,几秒后返回结果,请求之间可能有几小时的空窗期。这种情况下,函数计算的按量付费优势非常明显:
- 没有请求时不产生费用:GPU 实例完全释放
- 来请求自动拉起:实例级别的弹性分配 GPU 资源
- Flux 模型生图成本约 0.02 - 0.2 元 / 张:开发测试阶段几乎零成本
环境准备
1. 阿里云账号与函数计算开通
如果还没有账号,可以走这个链接快速注册:快速注册阿里云,新用户有免费试用额度。
登录后,在控制台搜索「函数计算 FC」,进入首页按引导开通服务。首次开通免费,不需要预充值。关键点:
- 服务角色:选择
AliyunFCDefaultRole(FC 默认角色),有基础的资源访问权限 - 日志服务 SLS:建议顺手开通,后续排查冷启动、调用异常都靠它
2. 开通 NAS 文件存储(强烈推荐)
AI 模型文件是重量级的——Flux 完整模型包约 23GB。如果不挂载 NAS,每次函数实例冷启动都要重新从 HuggingFace 拉取模型,冷启动可能长达 10-15 分钟,还会产生较高的公网流量费用。
在 FC 控制台左侧「应用」→「文件存储 NAS」中开通,按量付费,存 50GB 月均也就几块钱。
核心实操:部署 Flux 生图服务
Step 1:通过应用中心一键部署
函数计算的应用中心预置了大量 AI 应用模板,我们要用的「AI 生图 - Flux」就在其中。
进入路径:函数计算控制台 → 创建应用 → 选择「AI 生图 - Flux」模板
在创建页面,重点关注以下配置:
基础信息
应用名称:flux-image-generator
部署地域:华东 1(杭州) # 选离你用户最近的
GPU 规格(这是性价比的关键选择)
实例类型:GPU 实例
GPU 显存:16GB(A10 推荐)
系统内存:32GB
vCPU:8 核
这个配置是我实测下来性价比最高的。16GB 显存刚好承载 Flux 模型的推理,8 核 vCPU 保证图像预处理和编码阶段不会成为瓶颈。如果输出分辨率需要到 1024×1024,可以考虑 24GB 显存的规格,但单价会上涨。
存储持久化
# NAS 挂载配置(在应用配置页「存储」tab 中设置)
nasConfig:
mountPoints:
- serverAddr: "${your-nas-id}.cn-hangzhou.nas.aliyuncs.com:/flux-models"
mountDir: /mnt/stable-diffusion-models
将 /mnt/stable-diffusion-models 指向 NAS,Flux 的模型文件、VAE、CLIP 会自动缓存到这里。
别忘了这一项:不配 NAS 的话每次冷启动都要重新下载 23GB 的模型文件,不仅慢还烧公网流量费,血的教训。
Step 2:部署与等待
点击「创建并部署」,后台会做三件事:
- 在所选地域创建函数计算服务
- 分配 GPU 实例并拉取 Flux 模型(首次约 3-5 分钟)
- 创建 HTTP 触发器并生成访问端点
部署成功后在「应用详情」页面可以看到:
- HTTP 触发器地址:形如
https://xxx-xxx.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/... - 函数名称:后续 SDK 调用时需要
- 日志仓库:排查问题时从这里入手
Step 3:通过 API 调用生成图像
FC 为你的应用自动创建了 HTTP 触发器。可以用标准 HTTP POST 与之交互。
Python 调用脚本:
import requests
import base64
from datetime import datetime
ENDPOINT = "https://your-function-url.cn-hangzhou.fc.aliyuncs.com/..."
def generate_image(
prompt: str,
negative_prompt: str = "",
width: int = 512,
height: int = 512,
steps: int = 20,
cfg_scale: float = 7.0,
seed: int = -1
) -> bytes:
"""
Flux 生图 API 调用封装
参数说明:
prompt - 正向提示词(支持自然语言)
negative_prompt - 负向提示词(排除不需要的元素)
width/height - 输出尺寸(默认 512×512)
steps - 采样步数,20-25 即可,过多边际收益极低
cfg_scale - 提示词引导强度,推荐 5.0-7.5
seed - 随机种子,-1 表示随机
"""
payload = {
"prompt": prompt,
"negative_prompt": negative_prompt,
"width": width,
"height": height,
"num_inference_steps": steps,
"guidance_scale": cfg_scale,
"seed": seed,
}
resp = requests.post(
ENDPOINT,
json=payload,
headers={
"Content-Type": "application/json"},
timeout=120, # 冷启动可能 60s+,设长超时
)
resp.raise_for_status()
result = resp.json()
if result.get("status") == "success":
return base64.b64decode(result["image"])
else:
raise RuntimeError(f"Generation failed: {result.get('error')}")
if __name__ == "__main__":
prompt = (
"a majestic chinese dragon soaring through clouds, "
"golden scales reflecting sunlight, dramatic lighting, 8k"
)
negative = "blurry, low quality, distorted, text, watermark"
print(f"[*] Prompt: {prompt}")
image_bytes = generate_image(prompt, negative)
filename = f"flux_out_{datetime.now().strftime('%Y%m%d_%H%M%S')}.png"
with open(filename, "wb") as f:
f.write(image_bytes)
print(f"[✓] Saved: {filename}")
curl 一行测试:
curl -X POST "https://your-function-url.cn-hangzhou.fc.aliyuncs.com/..." \
-H "Content-Type: application/json" \
-d '{"prompt":"a serene mountain lake at sunset, oil painting style","width":512,"height":512,"num_inference_steps":20}' \
-o sunset.png
请求发出去之后,第一次调用(冷启动)大概要等 60 秒左右拿到结果,后续调用 5 秒内就能返回——这就是 GPU 实例预热后的效果。
踩坑实录与优化
坑 1:冷启动 60 秒用户体验很差
GPU 实例初始化 + 模型加载需要时间,冷启动是 Serverless GPU 的天生短板。
解决方案:
- 预留实例:在函数配置中购买一个预留实例,提前保持 GPU 实例存活,彻底消除冷启动
- 客户端超时设置充足:至少 120 秒,生产环境建议搭配异步调用 + 回调通知
- 利用 FC 的异步模式:提交任务后立即返回 taskId,生图完成后通过 HTTP 回调通知结果
坑 2:采样步数设太高,一张图跑一分钟
Flux 模型的 num_inference_steps 默认可能设到 50,但对于绝大多数场景 20-25 步质量已经足够。
建议配置:
真实拍摄风格:20 步
艺术/插画风格:25 步
极致细节(不推荐):30 步
每多 10 步,推理时间基本翻倍。除非确实有细节要求,否则没必要。
坑 3:模型文件忘记挂 NAS
这个前面提过了,但值得再强调。Flux 模型包约 23GB,如果每次冷启动都从公网下载:
- 冷启动时间:10-15 分钟
- 公网流量费:23GB × 0.8 元/GB ≈ 18.4 元 / 次
一天冷启动几次,流量费就比 NAS 月费还高了。NAS 挂载不是可选项,是必选项。
进阶:快速上手 AI 语音克隆(GPT-Sovits)
AI 生图部署流程跑通之后,部署其他 AI 应用的模式完全一样。这里快速演示 GPT-Sovits 语音合成。
在应用中心选「AI 语音生成 - GPT-Sovits」模板,复制同样的部署流程:
- 选模板 → 配 GPU(16GB 显存) → 挂 NAS
- 上传 1 分钟清晰语音样本到 NAS 目录
- 部署完成后通过 HTTP API 调用
调用示例:
import requests
import base64
VOICE_ENDPOINT = "https://your-sovits-url.cn-hangzhou.fc.aliyuncs.com/..."
def text_to_speech(text: str, speaker: str = "default", lang: str = "zh") -> bytes:
"""
语音合成调用
成本参考:
- 冷启动生成 8s 语音 ≈ 0.045 元
- 活跃调用生成 3s 语音 ≈ 0.017 元
"""
resp = requests.post(
VOICE_ENDPOINT,
json={
"text": text, "speaker_id": speaker, "language": lang},
timeout=120,
)
resp.raise_for_status()
result = resp.json()
if result.get("status") == "success":
return base64.b64decode(result["audio"])
raise RuntimeError(f"Synthesis failed: {result.get('error')}")
audio = text_to_speech("你好,欢迎使用阿里云函数计算的 AI 语音服务")
with open("greeting.wav", "wb") as f:
f.write(audio)
语音生成成本极低,活跃调用时 3 秒语音不到 2 分钱。适合有声内容批量生产、客服语音合成、虚拟主播配音等场景。
成本管控与性能优化
1. 实例并发度
FC 默认一个实例同时只处理一个请求。如果调用量上来了,可以调高并发度:
# 函数配置中修改
instanceConcurrency: 5 # 单实例并发处理 5 个请求
2. 资源释放策略
timeout: 300 # 单次执行超时上限
idleTimeout: 60 # 实例空闲 60 秒后释放
请求稀疏的场景下,缩短 idle timeout 可以避免 GPU 实例空转浪费。
3. 预留实例 vs 按量实例
非预留实例:按 GPU 实际使用时长计费(含冷启动),单价略高
预留实例: 预付一定周期的 GPU 实例费用,单价更低
简单决策准则:如果你每天的实际 GPU 使用超过 6-8 小时,预留实例更省钱;低于这个阈值,按量更划算。
4. 成本监控
在 FC 控制台「监控」面板紧盯三个指标:
- 日总调用次数
- 平均 GPU 执行时长
- 日累计费用
建议设置日消费告警(比如 50 元/天),避免意外跑飞。
函数计算 AI 应用矩阵
除了生图和语音,FC 应用中心还支持:
| AI 应用类型 | 底层模型 | 典型场景 |
|---|---|---|
| 文生图 | Stable Diffusion / ComfyUI | 电商商品图、创意设计 |
| 对话大模型 | 通义千问(开源) | 智能客服、文本摘要 |
| AI 编码助手 | 通义灵码 | 实时代码补全、重构建议 |
| 多模态识别 | 多模态模型 | 教育评测、内容审核 |
所有应用都遵循同一套部署模式:「选模板 → 配资源 → 挂 NAS → 部署 → 调 API」。学会一个,其他全通用。
总结
把 Flux 部署在函数计算上跑了一个星期,最大的感受是:AI 推理部署的门槛确实被拉低了很多。以前需要自己买显卡、装 CUDA、调 Docker 镜像,现在三分钟点几下就行。
当然,Serverless 不是万能药。如果你的 AI 推理需要 7×24 持续运行且 QPS 很高,传统 GPU 云主机可能整体成本更低。但对于原型验证、低频生产调用、开发测试环境——函数计算几乎是最优解。
整套流程跑下来,从环境准备到 API 接入,熟练的话 15 分钟就能完成。如果你也想试试,可以用这个邀请链接开始:AI推理极简部署方案篇,新用户注册后有免费试用额度,正好跑通本文的所有实验。