最近在做一个内容创作类项目,后端需要集成 AI 图片生成能力。评估了几套方案:自建 GPU 服务器、租用 GPU 云主机、直接调 SaaS API。最后用了阿里云的函数计算方案,核心原因很简单——不想管服务器。

本文会从零开始,在函数计算上部署一套完整的 AI 生图服务,包括环境配置、模型部署、API 调用。

为什么选函数计算做 AI 推理?

部署 AI 模型有几种常见方案:

方案 优点 缺点 适合场景
自建 GPU 服务器 完全可控 运维负担重,硬件成本高 长期大规模训练任务
GPU 云主机 弹性比自建好 仍需管理实例,闲置浪费 持续高负载推理
SaaS API 调用 零运维 成本随量增长,定制受限 标准场景快速接入
函数计算 + GPU 免运维,按需付费,弹性伸缩 冷启动有一定延迟 间歇性 AI 推理任务

我的需求是零散的任务型调用——用户点一下生成,几秒后返回结果,请求之间可能有几小时空窗期。函数计算的按量付费模式刚好匹配:没有请求时不产生 GPU 费用,来请求自动弹性分配资源。Flux 模型单张生图成本约 0.02-0.2 元。

环境准备

1. 开通函数计算服务

登录阿里云控制台搜索「函数计算 FC」,按引导开通。关键点:

  • 服务角色:选 AliyunFCDefaultRole
  • 日志服务 SLS:建议顺手开通,后续排查问题全靠它
2. 开通 NAS 文件存储(强烈推荐)

Flux 完整模型包约 23GB,如果不挂载 NAS,每次函数实例冷启动都要从公网重新下载模型——冷启动 10-15 分钟,公网流量费约十几块一次。NAS 按量付费,50GB 月均几块钱。

核心实操:部署 Flux 生图服务

Step 1:通过应用中心一键部署

函数计算应用中心预置了「AI 生图 - Flux」模板。

路径:函数计算控制台 → 创建应用 → 选择「AI 生图 - Flux」

GPU 配置(实测最优):

实例类型:GPU 实例
GPU 显存:16GB(A10)
系统内存:32GB
vCPU:8 核

16GB 显存刚好跑 Flux 推理。分辨率需要 1024×1024 的话考虑 24GB 规格。

NAS 挂载

nasConfig:
  mountPoints:
    - serverAddr: "${your-nas-id}.cn-hangzhou.nas.aliyuncs.com:/flux-models"
      mountDir: /mnt/stable-diffusion-models

把 FLUX 模型文件、VAE、CLIP 等都指向 NAS 目录,首次下载后持久化。

Step 2:部署与获取端点

点击「创建并部署」,首次部署约 3-5 分钟(拉模型)。成功后页面显示:

  • HTTP 触发器地址
  • 函数名称
  • 日志仓库位置
Step 3:API 调用生图

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 封装

    参数:
      steps      - 采样步数,20-25 足够
      cfg_scale  - 提示词引导强度,5.0-7.5 推荐
    """
    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  # 冷启动预留
    )
    resp.raise_for_status()

    result = resp.json()
    if result.get("status") == "success":
        return base64.b64decode(result["image"])
    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"

    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 秒内返回。

踩坑与优化

坑 1:冷启动 60 秒体验差

GPU 实例初始化 + 模型加载不可避免。解决方向:

  • 预留实例:提前保持 GPU 存活,消除冷启动
  • 客户端超时设 120 秒
  • 生产环境用异步调用 + 回调通知

坑 2:采样步数过多拖慢推理

Flux 模型 20-25 步质量已足够。30 步以上边际收益极低,推理时间却翻倍。

坑 3:没挂 NAS 导致冷启动灾难

前面提过——23GB 模型每次从公网下载,冷启动 10-15 分钟 + 高额流量费。挂 NAS 是硬性的前置条件。

进阶:GPT-Sovits 语音克隆

应用中心选「AI 语音生成 - GPT-Sovits」模板,部署流程与 Flux 完全一致:

  1. 选模板 → 配 GPU → 挂 NAS
  2. 上传 1 分钟清晰语音样本
  3. 部署后通过 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:
    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)

冷启动生成 8 秒语音约 0.045 元,活跃调用 3 秒语音约 0.017 元。有声内容批量生产、客服语音合成等场景非常实用。

成本控制要点

  • 设置实例并发度:单实例并发处理多个请求,减少实例数量
  • 设短 idle timeout:稀疏请求场景下避免 GPU 空转
  • 日消费告警:控制台设 50 元/天告警,防止意外
  • 预留 vs 按量计算:日 GPU 使用超 6-8 小时选预留,否则按量更省

总结

把 Flux 部署在函数计算上跑了一周,最大感触是 AI 部署门槛确实在快速降低。以前需要买显卡、装 CUDA、调 Docker 镜像,现在几分钟就能拉起推理服务。

Serverless 有自己的适用边界:持续高 QPS 场景传统 GPU 主机可能更经济,但对原型验证、低频调用、测试开发来说,函数计算是最优解。

整套部署流程从环境到 API 接入,熟练的话 15 分钟内就能完成。

声明:本文实验基于阿里云函数计算服务完成。如需亲自尝试,可通过链接注册:点击查看函数计算部署服务一键部署,新用户有免费试用额度。


Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐