AgentSkillsCN

hf-diffusers-migrate

将 Hugging Face Diffusers 模型迁移到 mindone.diffusers。使用 auto_convert.py 实现自动化转换。

SKILL.md
--- frontmatter
name: hf-diffusers-migrate
description: Migrate Hugging Face diffusers models to mindone.diffusers. Uses auto_convert.py for automated conversion.

HF Diffusers Migration

Migrate Hugging Face diffusers models (PyTorch) to mindone.diffusers (MindSpore) using automated code conversion.

When to Use

  • Porting Stable Diffusion, SDXL, SD3, Flux, ControlNet, or other diffusion models
  • Converting diffusers pipelines to MindSpore framework
  • Migrating attention operations for Ascend NPU/GPU backends

Supported Models

Check SUPPORT_LIST.md for current status (240+ pipelines):

  • Base: SD 1.x, SD 2.x, SDXL, SD3, Flux, Flux2
  • Video: AnimateDiff, SVD, CogVideoX, Mochi
  • Conditioning: ControlNet, LoRA, IP-Adapter, T2I-Adapter
  • Text-to-Image: PixArt, Sana, Lumina, AuraFlow

Workflow

code
1. Analyze HF source → 2. Run auto_convert.py → 3. Manual fixes → 4. Validate

Step 1: Analyze HF Source

Before running conversion, identify dependencies and files to migrate.

Check support status:

  1. SUPPORT_LIST.md - is model already supported?
  2. Note HF diffusers version - API compatibility may vary

List mindone utility dependencies required:

code
mindone.diffusers.models.layers_compat
  - scaled_dot_product_attention
  - conv_transpose2d
  - interpolate

mindone.diffusers.utils
  - randn_tensor  (from diffusers.utils.torch_utils)

mindone.diffusers.schedulers.scheduling_utils

mindone.diffusers.utils.outputs
  - TextEncoderOutput
  - BaseModelOutput

Check if HF utilities need migration:

  • diffusers.utils.torch_utils.randn_tensormindone.diffusers.utils.mindspore_utils.randn_tensor
  • diffusers.utils.import_utils imports
  • Pillow PIL_INTERPOLATION constants

List HF files to migrate (by category):

  • Models: models/unet_2d_condition.py, models/vae.py, models/transformer_2d.py
  • Pipelines: pipelines/stable_diffusion/*.py, pipelines/flux/*.py
  • Schedulers: schedulers/*.py
  • Configs: configs/*.json, configuration_*.py
  • Tests: tests/models/*.py, tests/pipelines/*.py

Step 2: Run auto_convert.py (Automated Conversion)

USE THIS FIRST - The auto_convert.py tool handles most conversions automatically.

bash
# Convert folder
python auto_convert.py --src_root /path/to/hf/diffusers --dst_root /path/to/mindone/diffusers

# Convert single file in place
python auto_convert.py --src_file /path/to/file.py --inplace

Auto-converted by the tool:

CategoryExamples
Importstorchmindspore.mint, torch.nnmindspore.nn
Classesnn.Modulenn.Cell, forward()construct()
Tensor operations200+ functions (torch.catmint.cat, etc.)
Diffusers importsdiffusers.utils.randn_tensormindone.diffusers.utils.mindspore_utils.randn_tensor
CleanupXLA code blocks, .to("cuda") calls

What needs manual fixes (logged by converter):

  • Unmapped interfaces listed in output
  • Conditional device checks: if torch.cuda.is_available()
  • Dynamic module loading with importlib
  • Custom attention → use layers_compat.scaled_dot_product_attention()
  • Parameter keyword differences: dim=axis=

Step 3: Fix Unmapped Interfaces

Review the converter output log and fix reported issues manually.

Common manual fixes:

python
# Tensor method
tensor.numpy() → tensor.asnumpy()

# Device context (set once, not per tensor)
ms.set_context(device_target="Ascend")  # or "GPU"

Step 4: Validate

python
import numpy as np

# Compare outputs between HF and MindOne
hf_np = hf_output.numpy() if hasattr(hf_output, 'numpy') else hf_output
ms_np = ms_output.asnumpy()
assert np.allclose(hf_np, ms_np, rtol=1e-3, atol=1e-3)

Key API Mappings

PyTorchMindSpore
import torchimport mindspore as ms
torch.nn.Modulems.nn.Cell
forward()construct()
torch.cat()ms.mint.cat()
torch.nn.functional.scaled_dot_product_attentionmindone.diffusers.models.layers_compat.scaled_dot_product_attention

Reference Documents

FilePurpose
01-overview.mdFramework & architecture overview
02-api-mapping.mdAPI mappings
03-migration-guide.mdMigration workflow
04-support-status.mdSupport status & priorities
env.mdEnvironment setup
guardrails.mdMigration guidelines

Troubleshooting

IssueSolution
torch not definedauto_convert.py should handle - check unmapped log
Shape mismatchCheck dim vs axis parameter names
Accuracy lossVerify attention mask handling (boolean mask inversion)

References