Flux.1-DEV是一种文本到图像的扩散模型,能够在给定文本输入的情况下生成相符的图像。
本模型使用的优化手段如下: 等价优化:FA、ROPE、RMSnorm、Fastgelu、ADALN、ND转NZ、缓存复用、CV双流并行、TP并行、SP并行 算法优化:量化、DiTCache
表 1 版本配套表
| 配套 | 版本 | 环境准备指导 |
|---|---|---|
| Python | 3.11.10 | - |
| torch | 2.9.0 | - |
注意:
# 增加软件包可执行权限,{version}表示软件版本号,{arch}表示CPU架构,{soc}表示昇腾AI处理器的版本。
chmod +x ./Ascend-cann-toolkit_{version}_linux-{arch}.run
chmod +x ./Ascend-cann-kernels-{soc}_{version}_linux.run
# 校验软件包安装文件的一致性和完整性
./Ascend-cann-toolkit_{version}_linux-{arch}.run --check
./Ascend-cann-kernels-{soc}_{version}_linux.run --check
# 安装
./Ascend-cann-toolkit_{version}_linux-{arch}.run --install
./Ascend-cann-kernels-{soc}_{version}_linux.run --install
# 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh安装pytorch框架 版本2.9.0 安装包下载
使用pip安装
# {version}表示软件版本号,{arch}表示CPU架构。
pip install torch-${version}-cp311-cp311-linux_${arch}.whl下载 pytorch_v{pytorchversion}_py{pythonversion}.tar.gz
tar -xzvf pytorch_v{pytorchversion}_py{pythonversion}.tar.gz
# 解压后,会有whl包
pip install torch_npu-{pytorchversion}.xxxx.{arch}.whl# 若环境镜像中没有gcc、g++,请用户自行安装
yum install gcc
yum install g++
# 导入头文件路径
export CPLUS_INCLUDE_PATH=/usr/include/c++/12/:/usr/include/c++/12/aarch64-openEuler-linux/:$CPLUS_INCLUDE_PATHgit clone https://modelers.cn/MindIE/FLUX.1-dev.gitpip install -r requirements.txt安装方式详见developer_guide 源码编译
git clone https://gitcode.com/Ascend/MindIE-SD.git && cd MindIE-SD && git checkout dev
python3 setup.py bdist_wheel安装
cd dist
pip install mindiesd-*.whlpip install -e .Flux.1-DEV权重下载地址
https://huggingface.co/black-forest-labs/FLUX.1-dev/tree/main修改权重配置文件:
vi ${model_path}/model_index.json做如下修改:
{
"_class_name": "FluxPipeline",
"_diffusers_version": "0.30.0.dev0",
"scheduler": [
"diffusers",
"FlowMatchEulerDiscreteScheduler"
],
"text_encoder": [
"transformers",
"CLIPTextModel"
],
"text_encoder_2": [
"transformers",
"T5EncoderModel"
],
"tokenizer": [
"transformers",
"CLIPTokenizer"
],
"tokenizer_2": [
"transformers",
"T5TokenizerFast"
],
"transformer": [
"FLUX1dev",
"FluxTransformer2DModel"
],
"vae": [
"diffusers",
"AutoencoderKL"
]
}export model_path="your local flux model path"# 在环境中导入以下环境变量提高推理性能
export CPU_AFFINITY_CONF=2
export TASK_QUEUE_ENABLE=2
# 等价优化
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ENABLE_LA=1
export ADALN_FUSE=1
export FAST_GELU=1
export USE_NZ=1
export CV_PARALLEL_LEVEL=2
python inference_flux.py \
--path ${model_path} \
--save_path "./res" \
--prompt "Beautiful illustration of The ocean. in a serene landscape, magic realism, narrative realism, beautiful matte painting, heavenly lighting, retrowave, 4 k hd wallpaper" \
--device_id 0 \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--use_cache参数说明:
export model_path="your local flux model path"# 在环境中导入以下环境变量提高推理性能
export CPU_AFFINITY_CONF=2
export TASK_QUEUE_ENABLE=2
export HCCL_OP_EXPANSION_MODE="AIV"
# 等价优化
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ENABLE_LA=1
export ADALN_FUSE=1
export FAST_GELU=1
export USE_NZ=1
export COMM_OVERLAP=1
export CV_PARALLEL_LEVEL=0
export TXT_SPLIT=1
ASCEND_RT_VISIBLE_DEVICES=0,1 torchrun --master_port=20095 --nproc_per_node=2 inference_flux.py \
--path ${model_path} \
--save_path "./res" \
--prompt "Beautiful illustration of The ocean. in a serene landscape, magic realism, narrative realism, beautiful matte painting, heavenly lighting, retrowave, 4 k hd wallpaper" \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--use_cache \
--sequence_parallel 参数说明:
参考官方README 1.git clone下载msit仓代码 2.进入到msit/msmodelslim的目录 cd msit/msmodelslim;并在进入的msmodelslim目录下,运行安装脚本 bash install.sh
执行命令:
# 设置权重路径
export model_path="your local flux model path"
# 指定量化类型
export quant_type="w8a16"
python quant.py \
--path ${model_path} \
--device_id 0 \
--prompt_path "./prompts.txt" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--quant_type ${quant_type}参数说明:
# 增加软件包可执行权限,{version}表示软件版本号,{arch}表示CPU架构。
chmod +x Ascend-cann-nnal_<version>_linux-<arch>.run
# 默认路径安装:
./Ascend-cann-nnal_<version>_linux-<arch>.run --install --torch_atb
# 配置环境变量:
source ${HOME}/Ascend/nnal/atb/set_env.sh执行命令:
# 设置权重路径
export model_path="your local flux model path"
# 指定量化类型
export quant_type="w8a16"
# 在环境中导入以下环境变量提高推理性能
export CPU_AFFINITY_CONF=2
export TASK_QUEUE_ENABLE=2
# 等价优化
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ENABLE_LA=1
export ADALN_FUSE=1
export FAST_GELU=1
export USE_NZ=1
export CV_PARALLEL_LEVEL=2
python inference_flux.py \
--path ${model_path} \
--save_path "./res" \
--prompt "Beautiful illustration of The ocean. in a serene landscape, magic realism, narrative realism, beautiful matte painting, heavenly lighting, retrowave, 4 k hd wallpaper" \
--device_id 0 \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--use_cache \
--use_quant \
--quant_type ${quant_type}参数说明:
参照Atlas-800I-A2-64g单卡w8a16安装量化工具msModelSlim说明
执行命令:
# 设置权重路径
export model_path="your local flux model path"
# 指定量化类型
export quant_type="w8a8_dynamic"
python quant.py \
--path ${model_path} \
--device_id 0 \
--prompt_path "./prompts.txt" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--use_calib_data \
--quant_type ${quant_type}参数说明:
参照Atlas-800I-A2-64g单卡w8a16安装量化模型推理工具NNAL神经网络加速库和torch_atb说明
执行命令:
# 设置权重路径
export model_path="your local flux model path"
# 指定量化类型
export quant_type="w8a8_dynamic"
# 在环境中导入以下环境变量提高推理性能
export CPU_AFFINITY_CONF=2
export TASK_QUEUE_ENABLE=2
# 等价优化
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ENABLE_LA=1
export ADALN_FUSE=1
export FAST_GELU=1
export USE_NZ=1
export CV_PARALLEL_LEVEL=2
python inference_flux.py \
--path ${model_path} \
--save_path "./res" \
--prompt "Beautiful illustration of The ocean. in a serene landscape, magic realism, narrative realism, beautiful matte painting, heavenly lighting, retrowave, 4 k hd wallpaper" \
--device_id 0 \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--use_cache \
--use_quant \
--quant_type ${quant_type}参数说明:
# 1. git clone msmodelslim 代码
git clone https://gitcode.com/Ascend/msmodelslim.git
# 2. 进入到 msmodelslim 的目录并运行安装脚本
cd msmodelslim
bash install.sh# 设置权重路径
export model_path="Your local flux model path"
# 设置权重保存路径
export save_path="Your weights save path"
msmodelslim quant \
--model_path ${model_path} \
--save_path ${save_path} \
--device npu \
--model_type FLUX.1-dev \
--trust_remote_code True \
--quant_type w8a8参照Atlas-800I-A2-64g单卡w8a16安装量化模型推理工具NNAL神经网络加速库和torch_atb说明
执行命令
# 设置权重路径
export model_path="Your local flux model path"
# 指定量化类型
export quant_type="w8a8_mxfp8"
# 在环境中导入以下环境变量提高推理性能
export CPU_AFFINITY_CONF=2
export TASK_QUEUE_ENABLE=2
#等价优化
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ADALN_FUSE=1
export FAST_GELU=1
export CV_PARALLEL_LEVEL=2
python inference_flux.py \
--path ${model_path} \
--save_path "./res" \
--device_id 0 \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--use_quant \
--quant_type ${quant_type}# 设置权重路径
export model_path="Your local flux model path"
# 设置权重保存路径
export save_path="Your weights save path"
msmodelslim quant \
--model_path ${model_path} \
--save_path ${save_path} \
--device npu \
--model_type FLUX.1-dev \
--trust_remote_code True \
--quant_type w8a8c8参照Atlas-800I-A2-64g单卡w8a16安装量化模型推理工具NNAL神经网络加速库和torch_atb说明
执行命令
# 设置权重路径
export model_path="Your local flux model path"
# 指定量化类型
export quant_type="w8a8_mxfp8"
# 开启FA量化
export USE_FA_QUANT=1
# 在环境中导入以下环境变量提高推理性能
export CPU_AFFINITY_CONF=2
export TASK_QUEUE_ENABLE=2
#等价优化
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ADALN_FUSE=1
export FAST_GELU=1
export CV_PARALLEL_LEVEL=2
python inference_flux.py \
--path ${model_path} \
--save_path "./res" \
--device_id 0 \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--use_quant \
--quant_type ${quant_type}# 设置权重路径
export model_path="your local flux model path"
# 执行命令进行权重切分
python3 tpsplit_weight.py --path ${model_path}备注:权重切分成功后,会在模型权重目录生成'transformer_0'与'transformer_1'两个文件夹,两个文件夹下内容与初始transformer文件夹文件相同,但大小不同,执行du -sh,大小应为15G
修改transformer_0与transformer_1下的config文件,添加is_tp变量:
{
"_class_name": "FluxTransformer2DModel",
"_diffusers_version": "0.30.0.dev0",
"_name_or_path": "../checkpoints/flux-dev/transformer",
"attention_head_dim": 128,
"guidance_embeds": true,
"in_channels": 64,
"joint_attention_dim": 4096,
"num_attention_heads": 24,
"num_layers": 19,
"num_single_layers": 38,
"patch_size": 1,
"pooled_projection_dim": 768,
"is_tp": true
}执行命令:
# 设置权重路径
export model_path="your local flux model path"
# 在环境中导入以下环境变量
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
# 使能等价优化
export HCCL_OP_EXPANSION_MODE="AIV"
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ENABLE_LA=1
export ADALN_FUSE=1
export FAST_GELU=1
ASCEND_RT_VISIBLE_DEVICES=0,1 torchrun --master_port=20095 --nproc_per_node=2 inference_flux.py \
--path ${model_path} \
--save_path "./res" \
--prompt "Beautiful illustration of The ocean. in a serene landscape, magic realism, narrative realism, beautiful matte painting, heavenly lighting, retrowave, 4 k hd wallpaper" \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--tensor_parallel \
--use_cache参数说明:
1.准备模型与数据集
# 下载Parti数据集
wget https://raw.githubusercontent.com/google-research/parti/main/PartiPrompts.tsv --no-check-certificate
# 下载clip模型
# 安装git-lfs
apt install git-lfs
git lfs install
git clone https://huggingface.co/laion/CLIP-ViT-H-14-laion2B-s32B-b79K也可手动下载clip模型权重
2.推理Parti数据集,生成图像 (1) Atlas-800I-A2-64g单卡推理, 等价优化推理
# 在环境中导入以下环境变量提高推理性能
export CPU_AFFINITY_CONF=2
export TASK_QUEUE_ENABLE=2
# 等价优化
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ENABLE_LA=1
export ADALN_FUSE=1
export FAST_GELU=1
export USE_NZ=1
export CV_PARALLEL_LEVEL=2
python inference_flux.py \
--path ${model_path} \
--save_path "./clipscore_res_wocache" \
--prompt_path "./PartiPrompts.tsv" \
--prompt_type "parti" \
--num_images_per_prompt 4 \
--info_file_save_path "./clip_info_wocache.json" \
--device_id 0 \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 参数说明:
(2) Atlas-800I-A2-64g单卡推理, 近似优化推理
# 在环境中导入以下环境变量提高推理性能
export CPU_AFFINITY_CONF=2
export TASK_QUEUE_ENABLE=2
# 等价优化
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ENABLE_LA=1
export ADALN_FUSE=1
export FAST_GELU=1
export USE_NZ=1
export CV_PARALLEL_LEVEL=2
python inference_flux.py \
--path ${model_path} \
--save_path "./clipscore_res_wocache" \
--prompt_path "./PartiPrompts.tsv" \
--prompt_type "parti" \
--num_images_per_prompt 4 \
--info_file_save_path "./clip_info_wocache.json" \
--device_id 0 \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--use_cache3.执行推理脚本计算clipscore (1) 等价优化
python clipscore.py \
--device="cpu" \
--image_info="clip_info_wocache.json" \
--model_name="ViT-H-14" \
--model_weights_path="./CLIP-ViT-H-14-laion2B-s32B-b79K/open_clip_pytorch_model.bin"(2) 近似优化
python clipscore.py \
--device="cpu" \
--image_info="clip_info_wcache.json" \
--model_name="ViT-H-14" \
--model_weights_path="./CLIP-ViT-H-14-laion2B-s32B-b79K/open_clip_pytorch_model.bin"
参数说明:
1.准备模型与数据集 下载权重:
wget https://huggingface.co/spaces/xswu/HPSv2/resolve/main/HPS_v2_compressed.pt --no-check-certificate2.推理hpsv2数据集,生成图像 (1) Atlas-800I-A2-64g单卡推理, 等价优化推理
# 在环境中导入以下环境变量提高推理性能
export CPU_AFFINITY_CONF=2
export TASK_QUEUE_ENABLE=2
# 等价优化
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ENABLE_LA=1
export ADALN_FUSE=1
export FAST_GELU=1
export USE_NZ=1
export CV_PARALLEL_LEVEL=2
python inference_flux.py \
--path ${model_path} \
--save_path "./hpsv2_res_wocache" \
--prompt_path "./hpsv2_benchmark_prompts.json" \
--prompt_type "hpsv2" \
--num_images_per_prompt 1 \
--info_file_save_path "./hpsv2_info_wocache.json" \
--device_id 0 \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 参数说明:
(2) Atlas-800I-A2-64g单卡推理, 近似优化推理
# 在环境中导入以下环境变量提高推理性能
export CPU_AFFINITY_CONF=2
export TASK_QUEUE_ENABLE=2
# 等价优化
export RMSNORM_FUSE=1
export ROPE_FUSE=1
export POSEMB_CACHE=1
export ENABLE_LA=1
export ADALN_FUSE=1
export FAST_GELU=1
export USE_NZ=1
export CV_PARALLEL_LEVEL=2
python inference_flux.py \
--path ${model_path} \
--save_path "./hpsv2_res_wocache" \
--prompt_path "./hpsv2_benchmark_prompts.json" \
--prompt_type "hpsv2" \
--num_images_per_prompt 1 \
--info_file_save_path "./hpsv2_info_wocache.json" \
--device_id 0 \
--device "npu" \
--width 1024 \
--height 1024 \
--infer_steps 50 \
--seed 42 \
--use_cache3.执行推理脚本计算hpsv2 (1) 等价优化
python hpsv2_score.py \
--image_info="hpsv2_info_wocache.json" \
--HPSv2_checkpoint="./HPS_v2_compressed.pt" \
--clip_checkpoint="./CLIP-ViT-H-14-laion2B-s32B-b79K/open_clip_pytorch_model.bin"(2) 近似优化
python hpsv2_score.py \
--image_info="hpsv2_info_wcache.json" \
--HPSv2_checkpoint="./HPS_v2_compressed.pt" \
--clip_checkpoint="./CLIP-ViT-H-14-laion2B-s32B-b79K/open_clip_pytorch_model.bin"
参数说明:
| 硬件形态 | cpu规格 | batch size | 分辨率 | 迭代次数 | 优化手段 | 性能 | 采样器 | 备注 |
|---|---|---|---|---|---|---|---|---|
| Atlas 800I A2(8*64G) | 64核(arm) | 1 | 1024*1024 | 50 | with DiTCache | 20.4s | FlowMatchEuler | 单卡运行 |
| Atlas 800I A2(8*32G) | 64核(arm) | 1 | 1024*1024 | 50 | with DiTCache | 24.6s | FlowMatchEuler | 双卡运行 |