ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DiffSynth-Studio 多硬件适配实战:NVIDIA/AMD GPU 与 Apple Silicon、Ascend NPU 推理与训练完整指南

DiffSynth-Studio 多硬件适配实战:NVIDIA/AMD GPU 与 Apple Silicon、Ascend NPU 推理与训练完整指南 DiffSynth-Studio 多硬件适配实战NVIDIA/AMD GPU 与 Apple Silicon、Ascend NPU 推理与训练完整指南【免费下载链接】DiffSynth-StudioEnjoy the magic of Diffusion models!项目地址: https://gitcode.com/GitHub_Trending/dif/DiffSynth-StudioDiffSynth-Studio 是一套面向扩散模型的统一推理与训练框架在设备支持层面覆盖了 NVIDIA GPU、AMD GPUROCm、Apple SiliconMPS以及华为 Ascend NPU 四大硬件平台。本文以 GPU/NPU 支持文档 为主体结合仓库中的 NPU 训练脚本、设备抽象层与 NPU 融合算子实现完整讲解在不同硬件上运行推理与训练的最小改动方案读者学完后可以快速把任意示例代码迁移到目标设备并跑通。硬件支持总览DiffSynth-Studio 通过统一的 PyTorch 抽象接口对外暴露设备能力其核心逻辑集中在 diffsynth/core/device/npu_compatible_device.py。该模块在启动时自动探测当前环境IS_CUDA_AVAILABLE torch.cuda.is_available() IS_NPU_AVAILABLE is_torch_npu_available() and torch.npu.is_available()get_device_type()会按照 CUDA → NPU → CPU 的优先级返回当前可用设备类型get_device_name()则返回cuda:0、npu:0这类带设备号的完整名称供显存查询、日志打印等场景使用。这意味着框架本身并不绑定单一厂商跨硬件迁移时只需调整设备字符串即可。硬件平台需要做的改动备注NVIDIA GPU无所有示例代码默认支持devicecuda开箱即用AMD GPU无多数模型安装 ROCm 版 torch 后即可运行依赖特定 CUDA 指令的少量模型无法运行Apple Siliconcuda→mps或cpu显存与内存统一按需选择加速器或纯 CPUAscend NPUcuda→npu需安装 CANN 与torch_npu并替换 VRAM 管理配置中的设备字段开始之前请先按照 安装依赖 完成对应平台的依赖安装这是所有后续步骤的前提。NVIDIA GPU零改动运行仓库中examples/下所有model_inference/与model_training/目录中的示例均默认面向 NVIDIA GPU。直接执行即可python examples/wanvideo/model_inference/Wan2.2-T2V-A14B.py框架内部的显存管理、梯度检查点、量化后端等模块均以cuda为默认设备因此无需任何环境变量或代码修改。AMD GPU借助 ROCm 无缝运行AMD 官方维护了基于 ROCm 的 PyTorch 发行版因此绝大多数模型在 AMD GPU 上无需修改代码。安装方式参考 Setup.md以 ROCm 6.4、Linux 为例pip install torch torchvision --index-url https://download.pytorch.org/whl/rocm6.4随后直接运行示例脚本即可。需要说明的限制是少数模型由于依赖特定的 CUDA 指令如部分 CUDA kernel 绑定的算子无法在 ROCm 上运行这类情况需要替换为其他硬件或在代码层面规避相关算子。框架会在npu_compatible_device.py的设备探测中正常识别为 CUDA 设备因此 ROCm 环境下现有推理链路完全复用。Apple Silicon统一内存下的 MPS/CPU 切换Apple SiliconM 系列芯片将显存与内存统一管理PyTorch 提供了mps后端来利用 Metal 加速。使用要点将代码中所有cuda替换为mps追求加速或cpu追求最大兼容由于显存即内存vram_limit等显存限制参数需要按实际可用内存重新评估避免出现 OOM部分算子对 MPS 支持不完整时可退回cpu保证功能正确。同样安装步骤无需任何特殊处理见 Setup.md。Ascend NPU推理迁移全流程前置安装NPU 是本文档的绝对重点。需要完成两部分安装详见 Setup.md按官方文档安装 CANN 工具包从源码安装带 NPU 依赖的 DiffSynth-Studio# aarch64/ARM 架构 pip install -e .[npu_aarch64] # x86 架构 pip install -e .[npu] --extra-index-url https://download.pytorch.org/whl/cpu框架通过is_torch_npu_available()探测torch_npu是否可用并自动完成torch.npu.config.allow_internal_format False等初始化设置见 npu_compatible_device.py。核心迁移动作把 cuda 改成 npuNPU 推理的核心操作是把代码中的cuda全部替换为npu。以Wan2.1-T2V-1.3B为例原始推理代码经过如下最小改动即可在 NPU 上运行import torch from diffsynth.utils.data import save_video, VideoData from diffsynth.pipelines.wan_video import WanVideoPipeline, ModelConfig from diffsynth.core.device.npu_compatible_device import get_device_name vram_config { offload_dtype: disk, offload_device: disk, onload_dtype: torch.bfloat16, onload_device: cpu, preparing_dtype: torch.bfloat16, - preparing_device: cuda, preparing_device: npu, computation_dtype: torch.bfloat16, - computation_device: cuda, computation_device: npu, } pipe WanVideoPipeline.from_pretrained( torch_dtypetorch.bfloat16, - devicecuda, devicenpu, model_configs[ ModelConfig(model_idWan-AI/Wan2.1-T2V-1.3B, origin_file_patterndiffusion_pytorch_model*.safetensors, **vram_config), ModelConfig(model_idWan-AI/Wan2.1-T2V-1.3B, origin_file_patternmodels_t5_umt5-xxl-enc-bf16.pth, **vram_config), ModelConfig(model_idWan-AI/Wan2.1-T2V-1.3B, origin_file_patternWan2.1_VAE.pth, **vram_config), ], tokenizer_configModelConfig(model_idWan-AI/Wan2.1-T2V-1.3B, origin_file_patterngoogle/umt5-xxl/), - vram_limittorch.cuda.mem_get_info(cuda)[1] / (1024 ** 3) - 2, vram_limittorch.npu.mem_get_info(get_device_name())[1] / (1024 ** 3) - 2, ) video pipe( prompt纪实摄影风格画面一只活泼的小狗在绿茵茵的草地上迅速奔跑。小狗毛色棕黄两只耳朵立起神情专注而欢快。阳光洒在它身上使得毛发看上去格外柔软而闪亮。背景是一片开阔的草地偶尔点缀着几朵野花远处隐约可见蓝天和几片白云。透视感鲜明捕捉小狗奔跑时的动感和四周草地的生机。中景侧面移动视角。, negative_prompt色调艳丽过曝静态细节模糊不清字幕风格作品画作画面静止整体发灰最差质量低质量JPEG压缩残留丑陋的残缺的多余的手指画得不好的手部画得不好的脸部畸形的毁容的形态畸形的肢体手指融合静止不动的画面杂乱的背景三条腿背景人很多倒着走, seed0, tiledTrue, ) save_video(video, video.mp4, fps15, quality5)上述 diff 涉及三处关键替换VRAM 管理配置preparing_device与computation_device由cuda改为npu其余offload_device磁盘卸载、onload_deviceCPU 常驻保持 bfloat16 精度下的 CPU/磁盘卸载策略不变Pipeline 设备WanVideoPipeline.from_pretrained(devicenpu, ...)直接指定 NPU 为计算设备显存预算torch.cuda.mem_get_info(cuda)换成torch.npu.mem_get_info(get_device_name())。这里特意使用get_device_name()而非硬编码npu是因为框架的get_device_name()会返回npu:0这样带设备序号的形式在多卡场景下能精确获取当前卡的内存信息见 npu_compatible_device.py。此外pipe(...)中开启tiledTrue使用分块tiling推理可以在低显存 NPU 上运行长视频生成。使用 USPUnified Sequence Parallel加速长序列对于需要处理超长序列如长视频、超长文本条件的 NPU 场景框架支持 USP 统一序列并行。该特性依赖 xDiT 生态需要在 NPU 环境额外安装两个第三方库pip install githttps://github.com/feifeibear/long-context-attention.git pip install githttps://github.com/xdit-project/xDiT.git仓库中 USP 的落地实现在 diffsynth/utils/xfuser/xdit_context_parallel.py它对 NPU 做了针对性适配例如序列切分时若原张量在 NPU 上会先转回 CPUif original_tensor.device.type npu:RoPE 频域张量在 NPU 上转成complex64处理并支持ring_impl_type basic_npu的环状通信实现。diffsynth/utils/xfuser/__init__.py对外导出initialize_usp、usp_attn_forward、usp_dit_forward、get_sequence_parallel_world_size等接口供 Wan 系列等长序列视频模型在 NPU 上做序列维度并行推理。Ascend NPU训练迁移与性能调优训练脚本样例仓库为每类模型都提供了 NPU 训练启动脚本统一存放在examples/模型名/model_training/special/npu_training/目录下目前共 11 个Wan 系列Wan2.1-T2V-14B-NPU.sh、Wan2.2-T2V-A14B-NPU.sh、Wan2.2-VACE-Fun-A14B-NPU.shQwen-Image 系列examples/qwen_image/model_training/special/npu_training/下的 3 个脚本Edit-2509 全参 / LoRA、Qwen-Image-LoRAZ-ImageZ-Image-Turbo-NPU.shFLUX 系列FLUX.1-dev-NPU.sh、FLUX.1-Kontext-dev-NPU.shFLUX2 系列examples/flux2/model_training/special/npu_training/下的 2 个脚本FLUX.2-dev-LoRA、FLUX.2-klein-9B这些脚本在普通训练脚本的基础上追加了 NPU 特有的环境变量并按模型特性开启了对应参数。以 Wan2.2-T2V-A14B-NPU.sh 为例脚本开头即为两个核心环境变量export PYTORCH_NPU_ALLOC_CONFexpandable_segments:True export CPU_AFFINITY_CONF1脚本主体与普通训练流程一致先用modelscope download拉取示例数据集再用accelerate launch --config_file examples/wanvideo/model_training/full/accelerate_config_14B.yaml启动训练。Wan2.2-T2V-A14B 采用高低噪声双模型结构脚本分两次训练第一次用--max_timestep_boundary 0.417 --min_timestep_boundary 0对应 timesteps [875, 1000]训练高噪声模型第二次用--max_timestep_boundary 1 --min_timestep_boundary 0.417对应 timesteps [0, 875)训练低噪声模型两次均以--initialize_model_on_cpu结尾。环境变量性能优化的关键环境变量取值作用PYTORCH_NPU_ALLOC_CONFexpandable_segments:True使能 NPU 内存池的扩展段expandable segments功能即启用虚拟内存特性缓解显存碎片化与峰值压力CPU_AFFINITY_CONF0或不设置不启用绑核功能CPU_AFFINITY_CONF1开启粗粒度绑核CPU_AFFINITY_CONF2开启细粒度绑核其中CPU_AFFINITY_CONF通过将训练进程绑定到固定的 CPU 核心减少线程迁移开销对多卡数据并行训练的性能有明显影响训练线程数远大于核心数时建议使用细粒度2否则使用粗粒度1即可。特定模型的专属参数模型参数备注Wan 14B 系列--initialize_model_on_cpu14B 模型需要在 CPU 上进行初始化Qwen-Image 系列--initialize_model_on_cpu模型需要在 CPU 上进行初始化Z-Image 系列--enable_npu_patch使用 NPU 融合算子替换 Z-Image 模型中的对应算子以提升模型在 NPU 上的性能--initialize_model_on_cpu的参数语义可以在训练入口确认在 examples/wanvideo/model_training/train.py 中该参数定义为parser.add_argument(--initialize_model_on_cpu, defaultFalse, actionstore_true, ...)随后在第 180 行当该参数或--enable_model_cpu_offload开启时模型初始化设备被指定为cpudevicecpu if (args.initialize_model_on_cpu or args.enable_model_cpu_offload) else accelerator.device对于 Wan 14B、Qwen-Image 这类大模型直接在 NPU 上分配全部权重容易造成显存峰值过高先在 CPU 上完成初始化、再按需搬运权重是规避 OOM 的工程手段。Z-Image 的--enable_npu_patch同样在 examples/z_image/model_training/train.py 中定义开启后通过ZImagePipeline.from_pretrained(..., enable_npu_patchTrue)传入管线。NPU 融合算子Z-Image 性能提升原理--enable_npu_patch的底层实现位于 diffsynth/pipelines/z_image.py 的apply_npu_patch()当IS_NPU_AVAILABLE且开启该参数时框架会用 diffsynth/core/npu_patch/npu_fused_operator.py 中基于torch_npu的融合算子替换 Z-Image 模型内对应模块的前向函数rms_norm_forward_npu用torch_npu.npu_rms_norm替换通用 RMSNorm原实现在 general_modules.py省去中间张量创建rotary_emb_Zimage_npu用torch_npu.npu_rotary_mul(..., rotary_modeinterleave)替换 Z-Image 的 RoPE 旋转位置编码实现在关闭自动混合精度的情况下执行避免精度波动。这类融合算子将多个元素级操作合并为单个 NPU kernel减少 kernel 启动与访存开销是模型在 NPU 上提速的关键手段。如果不需要该行为可通过enable_npu_patchFalse显式关闭。迁移到 NPU 的完整检查清单综合以上内容把一个示例从 CUDA 迁移到 Ascend NPU 需要逐项确认安装CANN pip install -e .[npu]x86或pip install -e .[npu_aarch64]ARM见 Setup.md推理设备所有devicecuda改为devicenpuVRAM 配置preparing_device、computation_device改为npu显存查询torch.cuda.mem_get_info改为torch.npu.mem_get_info(get_device_name())分布式后端多卡场景下框架会根据设备自动选择通信后端——CUDA 用ncclNPU 用hccl见 npu_compatible_device.py训练环境变量追加PYTORCH_NPU_ALLOC_CONFexpandable_segments:True与CPU_AFFINITY_CONF1大模型初始化Wan 14B / Qwen-Image 系列追加--initialize_model_on_cpu算子优化Z-Image 系列追加--enable_npu_patch长序列推理按需安装long-context-attention与xDiT启用 USP。完成上述改动后即可在 Ascend NPU 上复现仓库model_inference、model_inference_low_vram与model_training目录下的绝大多数示例流程。【免费下载链接】DiffSynth-StudioEnjoy the magic of Diffusion models!项目地址: https://gitcode.com/GitHub_Trending/dif/DiffSynth-Studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表