人工智能大模型机器学习深度学习本地部署模型推理服务【免费下载链接】candleMinimalist ML framework for Rust项目地址https://gitcode.com/GitHub_Trending/ca/candle点击查看免费下载stable-diffusion是 candle 仓库中一个将 Hugging Face Diffusers 生态移植到 Rust/Candle 的端到端示例支持 Stable Diffusion v1.5、v2.1、XL 1.0 以及 XL Turbo 四种模型版本。本文将以 candle-examples/examples/stable-diffusion/README.md 为核心结合 main.rs 与 stable_diffusion 模块 源码完整讲解从权重下载、命令行运行、调度器选择到 flash-attention 加速和内存优化的全过程读完即可在 GPU 或 CPU 上自行生成高质量图像。图由 Stable Diffusion XL 在 Rust/Candle 下生成的手持蜡烛的锈蚀机器人出自 assets/stable-diffusion-xl.jpg。项目定位用 Rust 复刻 Diffusers APIstable-diffusion示例是 diffusers-rs 目录clip.rsCLIP 文本编码器负责把 prompt 编码为条件向量unet_2d.rs/unet_2d_blocks.rsUNet 2D 条件去噪网络含跨注意力vae.rsAutoEncoderKL负责图像与潜空间latent space之间的编解码schedulers.rs调度器抽象接口以及ddim.rs、euler_ancestral_discrete.rs、uni_pc.rs、ddpm.rs等具体实现。从源码结构可以推断整个生成流程遵循经典扩散管线文本编码 → 潜空间加噪 → 多步去噪 → VAE 解码为图像与 Python Diffusers 的 API 设计一一对应。支持的模型版本与权重获取本示例支持以下版本对应 main.rs 中的StableDiffusionVersion枚举版本--sd-version取值对应 Hugging Face 仓库Stable Diffusion v1.5v1-5runwayml/stable-diffusion-v1-5Stable Diffusion v2.1v2-1stabilityai/stable-diffusion-2-1Stable Diffusion XL 1.0xlstabilityai/stable-diffusion-xl-base-1.0SDXL Turboturbostabilityai/sdxl-turbo此外源码中还定义了v1-5-inpaint、v2-inpaint、xl-inpaint三个修图inpainting版本对应仓库stable-diffusion-v1-5/stable-diffusion-inpainting、stabilityai/stable-diffusion-2-inpainting、diffusers/stable-diffusion-xl-1.0-inpainting-0.1用于带蒙版的局部重绘场景。权重无需手动下载。首次运行时程序会通过 candle-examples/src/hub.rs 中的Api基于hf-hub封装自动从 Hugging Face Hub 拉取所需文件并按仓库结构分别下载unet/、vae/、text_encoder/XL 还有text_encoder_2/下的.safetensors权重以及tokenizer.json。若希望离线使用或指定自有权重可通过--unet-weights、--clip-weights、--clip2-weights、--vae-weights、--tokenizer传入本地文件路径见下文参数表运行--help可以查看全部可用选项。运行第一个示例在仓库根目录执行以下命令即可用 CUDA cuDNN 在 GPU 上生成图像cargo run --example stable-diffusion --release --featurescuda,cudnn \ -- --prompt a cosmonaut on a horse (hd, realistic, high-def)运行结束后默认在当前目录生成sd_final.png。若没有 NVIDIA GPU可去掉--featurescuda,cudnn并加--cpu改用 CPU 推理速度会慢很多macOS 用户可尝试--featuresmetal使用 Metal 后端。体验 SDXL Turbo一步成像Turbo 版本基于对抗蒸馏adversarial distillation训练去噪步数大幅减少生成速度远快于前几个版本。仅需增加一个--sd-version turbo参数cargo run --example stable-diffusion --release --featurescuda,cudnn \ -- --prompt a cosmonaut on a horse (hd, realistic, high-def) --sd-version turbo这一加速的根源在于源码中的默认配置从 mod.rs 可见普通版本v1-5 / v2-1 / xl默认n_steps 30而 Turbo 默认仅n_steps 1同时默认引导系数guidance_scale从 7.5 降为 0蒸馏模型本身已集成引导无需再对无条件分支做加权外推。命令行参数全解析以下参数均可在 main.rs 的Args结构中找到定义覆盖 README 所述全部选项并额外列出源码中支持的进阶参数参数说明默认值--prompt用于生成图像的提示词A very realistic photo of a rusty robot walking on a sandy beach--uncond-prompt可选的负向提示无条件 prompt用于引导系数计算空字符串--sd-version模型版本取值v1-5/v2-1/xl/turbov2-1--cpu强制使用 CPU 而非 GPU关闭--height/--width生成图像的高宽必须能被 8 整除源码中assert_eq!(height % 8, 0)强制校验随版本不同v1-5 为 512×512v2-1 为 768×768XL/Turbo 为 1024×1024Turbo 为 512×512--n-steps扩散去噪步数普通版本 30Turbo 1--num-samples迭代生成的样本数1--bsize同时生成的样本数批大小1--final-image输出图片文件名sd_final.png--use-flash-attn启用 flash-attention 加速关闭--use-f16使用 FP16 权重与半精度推理关闭--guidance-scale引导系数CFG 权重普通版本 7.5Turbo 0--seed随机种子复现结果用不指定时自动生成随机种子并在终端打印随机--sliced-attention-size切分注意力的大小0 表示自动切分默认关闭用于显存受限场景关闭--intermediary-images每个去噪步骤都输出一张中间图像文件名带-N后缀关闭--tracing启用 tracing生成trace-timestamp.json供 Chrome tracing 分析关闭--unet-weights/--clip-weights/--clip2-weights/--vae-weights/--tokenizer指定本地.safetensors权重与 tokenizer 文件跳过 Hub 下载自动下载当num_samples 1时输出文件会按basename.{idx}.png规则命名见output_filename函数。--num-samples与--bsize的区别在于前者是串行迭代生成多张图后者是单次去噪中并行生成一批图。关于--use-f16有个值得注意的细节SDXL/Turbo 在 FP16 下会改用社区修复版 VAE 仓库madebyollin/sdxl-vae-fp16-fix这是为了规避 SDXL 官方 VAE 在 FP16 下数值溢出的已知问题mod.rs 中的注释引用了相关 issue。调度器DDIM 与 Euler Ancestral调度器决定噪声如何逐步去除直接权衡生成速度与画质。本示例的默认调度器配置mod.rsv1.5、v2.1、XL 1.0默认使用DDIMDenoising Diffusion Implicit Model调度器即ddim::DDIMSchedulerConfig。DDIM 通过隐式采样可以在更少的步数下获得不错的画质XL Turbo默认使用Euler Ancestral 调度器euler_ancestral_discrete::EulerAncestralDiscreteSchedulerConfig并配合timestep_spacing Trailing的时间步划分与 Turbo 蒸馏模型的训练设置保持一致。调度器在代码层面被抽象为SchedulerConfig/Scheduler两个 traitschedulers.rs接口包括timesteps()生成时间步序列、add_noise()向潜变量加噪、init_noise_sigma()初始噪声标准差、scale_model_input()缩放模型输入与step()单步去噪。主循环在 main.rs 中按序调用先scheduler.scale_model_input归一化输入UNet 前向预测噪声再按guidance_scale对条件/无条件两支预测做加权融合最后scheduler.step更新潜变量如此往复直到所有时间步完成。使用 flash-attention 加速自注意力在扩散模型中计算量占比很高启用 flash-attention 可以显著提速并降低显存占用代价是编译时间较长。需要同时满足两个条件缺一不可特性开关编译时加--features flash-attn该特性在 candle-examples/Cargo.toml 中定义为[cuda, candle-transformers/flash-attn, dep:candle-flash-attn]即依赖candle-flash-attn这个 CUDA kernel 库运行时开关命令行加--use-flash-attn。cargo run --example stable-diffusion --release --featurescuda,cudnn,flash-attn \ -- --prompt a cosmonaut on a horse (hd, realistic, high-def) --use-flash-attn由于 flash-attention 内核需要针对不同 head 维度与精度编译大量 CUDA 变体可在 candle-flash-attn/kernels/ 中看到按hdim、fp16/bf16、causal组合生成的众多.cu文件建议设置环境变量CANDLE_FLASH_ATTN_BUILD_DIR指向固定目录以缓存编译产物避免每次重新编译export CANDLE_FLASH_ATTN_BUILD_DIR/home/user/.candle硬件前提flash-attention-v2 仅兼容 Ampere、Ada 或 Hopper 架构的 NVIDIA GPU如 A100/H100、RTX 3090/4090旧架构无法使用。图像到图像img2img与局部重绘InpaintingREADME 中Image to Image Pipeline一节标记为占位内容但对应能力已在 main.rs 中完整实现这里结合源码补充说明img2img基于输入图像生成变体通过--img2img 图片路径传入初始图像程序会执行image_preprocess先将宽高向下取整到 32 的倍数用 CatmullRom 滤波缩放再归一化到[-1, 1]并转为[1, 3, H, W]张量main.rs随后用 VAE 编码为初始潜变量。--img2img-strength取值 01默认 0.8控制对原图的保留程度值越大变换越剧烈为 1 时完全丢弃原图信息、退化为纯文生图。从源码看强度通过跳过去噪前若干步实现t_start n_steps - (n_steps * strength) as usizemain.rs并在起始步按对应时间步为初始潜变量添加噪声scheduler.add_noise。cargo run --example stable-diffusion --release --featurescuda,cudnn \ -- --prompt a cosmonaut on a horse --img2img input.png --img2img-strength 0.8Inpainting蒙版区域重绘选择 inpainting 版本v1-5-inpaint等时必须同时提供--mask-path 蒙版图和--img2img 原图源码中分别报错提示缺失。流程main.rs为mask_preprocess把蒙版转为单通道灰度张量白/黑分别表示待重绘/保留区域用蒙版遮罩原图得到masked_img经 VAE 编码为mask_latentsUNet 输入通道数从 4 扩为 9潜变量、蒙版、蒙版潜变量拼接见in_channels 9的分支去噪结束后若加了--only-update-masked则只把蒙版区域之外的像素还原为原图潜变量latents * mask latent_to_keep * (1-mask)保证背景不变化。常见问题内存与显存优化官方 FAQ 明确指出默认配置v2-1 768×768需要超过 8GB 显存的 GPU。显存不足时可按优先级采取以下措施缩小分辨率--height/--width调小可显著降低显存占用注意必须是 8 的倍数源码断言强制约束切分注意力--sliced-attention-size N将大尺寸注意力切成小块计算是显存受限场景的有效手段半精度--use-f16使用 FP16 权重与计算显存占用接近减半SDXL 会自动搭配 FP16 修复版 VAE启用 flash-attention--use-flash-attn在提速的同时降低显存峰值前提是 Ampere 及以上 GPU最后兜底--cpu用 CPU 推理速度显著变慢但无需 GPU。另外使用--seed可固定随机种子复现同一结果主程序在未指定种子时也会打印所用种子便于事后追溯。若开启--tracing可结合 Chrome 的chrome://tracing对 UNet 各阶段耗时做性能分析。小结candle-stable-diffusion是理解如何用纯 Rust 实现现代扩散模型推理的最佳切入点从 README 的启动命令出发到 main.rs 的完整管线再到 candle-transformers/src/models/stable_diffusion/ 的模型实现整个链路清晰可读。它既可作为开箱即用的文生图工具也可作为基于 Candle 二次开发扩散应用的参考模板——无论是替换调度器、接入新的模型仓库还是移植 img2img / inpainting 能力到自有管线都能从这套代码中直接获得实现路径。赞分享人工智能大模型机器学习深度学习本地部署模型推理服务【免费下载链接】candleMinimalist ML framework for Rust项目地址https://gitcode.com/GitHub_Trending/ca/candle点击查看免费下载相关推荐device-year-class社区贡献指南参与开源项目的完整流程device year class社区贡献指南参与开源项目的完整流程 device year class是一个Android库它通过分析设备的规格如RAM人工智能AI 应用AI 技能/插件AI Agent金融科技在Docker中流畅运行Stable Diffusion实践指南在Docker中流畅运行Stable Diffusion实践指南 项目核心价值 Stable Diffusion in Docker是一个革命性的解决方案让如何在Mac上原生运行Stable DiffusionMochi Diffusion完整指南如何在Mac上原生运行Stable DiffusionMochi Diffusion完整指南 Mochi Diffusion是一款专为Apple Silico人工智能AI 应用媒体生成本地部署上一篇Fang异步任务处理详解基于PostgreSQL的高效队列实现下一篇野火IM iOS二次开发指南定制属于你的专属即时通讯App3步实现个性化界面创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考