跳转至

Python AI 绘画

概念与用途

Python 可编排文本到图像模型的加载、推理、随机种子和结果保存。Hugging Face Diffusers 是常见本地方案,运行通常需要 PyTorch、模型权重和足够的 GPU 显存。

核心 API

外部依赖包括模型权重、磁盘空间和与设备匹配的 PyTorch。先按 PyTorch 官方安装器安装兼容版本,再执行 python -m pip install "diffusers>=0.25" transformers accelerate safetensors。DiffusionPipeline.from_pretrained() 加载模型,调用 pipeline 返回 PIL 图像;生产项目应锁定实际验证过的版本和模型 revision。

设备 推荐 dtype 特点
NVIDIA CUDA float16 或硬件支持的 bfloat16 通常最快,需要匹配驱动/CUDA
Apple Silicon MPS 通常 float16 部分算子可能回退 CPU
CPU float32 可用但慢,内存压力可能较高
import torch
from diffusers import DiffusionPipeline

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = DiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to("cuda")
generator = torch.Generator("cuda").manual_seed(2026)
image = pipe("a small robot reading Python documentation", generator=generator).images[0]
image.save("robot.png")

示例:检测 CUDA、MPS 与 CPU

不要无条件把 float16 模型放到 CPU。下面先检测设备,再选择 dtype;模型标识仅是示例,首次运行还需要网络下载和接受对应许可证。

import torch

if torch.cuda.is_available():
    device, dtype = "cuda", torch.float16
elif hasattr(torch.backends, "mps") and torch.backends.mps.is_available():
    device, dtype = "mps", torch.float16
else:
    device, dtype = "cpu", torch.float32

print("device=", device, "dtype=", dtype)
# pipe = DiffusionPipeline.from_pretrained(model_id, torch_dtype=dtype)
# pipe = pipe.to(device)

MPS 遇到不支持算子时可按 PyTorch 文档评估 CPU fallback,但回退会影响性能且不应作为无监控的生产默认值。CPU 推理可降低分辨率、步数或使用更小模型;显存不足时可评估 attention slicing、CPU offload 等 Diffusers 能力,并逐项测试质量和延迟。

资源与服务边界

推理服务应限制提示词长度、图片尺寸、批量大小和并发数,配置任务超时,并在请求结束后释放大对象引用。模型下载必须来自可信来源;safetensors 比任意 pickle 权重更适合不可信分发边界,但仍需校验来源和许可证。

常见错误与安全注意

  • 示例需要兼容的 CUDA GPU;CPU 可运行但通常很慢且 dtype 配置不同。
  • 核对模型许可证、数据与商用限制,不要生成或传播违法侵权内容。
  • 固定模型版本、依赖和种子仍不保证跨硬件完全逐像素一致。
  • API 或队列任务失败时应保存可诊断元数据,但日志中避免记录用户敏感提示词和原图。