Ascend-SACT/HiDream
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

一、准备运行环境

表 1 版本配套表

配套版本环境准备指导
Python3.10 / 3.11-
torch2.1.0-

1.1 获取CANN&MindIE安装包&环境准备

  • 设备支持 Atlas 800I A2/Atlas 800T A2设备:支持的卡数为1
  • Atlas 800I A2
  • Atlas 800T A2
  • 环境准备指导

1.2 CANN安装

# 增加软件包可执行权限,{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

1.3 MindIE安装

# 增加软件包可执行权限,{version}表示软件版本号,{arch}表示CPU架构。
chmod +x ./Ascend-mindie_${version}_linux-${arch}.run
./Ascend-mindie_${version}_linux-${arch}.run --check

# 方式一:默认路径安装
./Ascend-mindie_${version}_linux-${arch}.run --install
# 设置环境变量
cd /usr/local/Ascend/mindie && source set_env.sh

# 方式二:指定路径安装
./Ascend-mindie_${version}_linux-${arch}.run --install --install-path=${AieInstallPath}
# 设置环境变量
cd ${AieInstallPath}/mindie && source set_env.sh

1.4 Torch_npu安装

安装pytorch框架 版本2.1.0 安装包下载

使用pip安装

# {version}表示软件版本号,{arch}表示CPU架构。
pip install torch-${version}-cp310-cp310-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

二、下载本仓库

2.1 下载到本地

git clone https://modelers.cn/MindIE/HiDream-I1.git

2.2 安装依赖

pip install -r requirements.txt

三、HiDream-I1使用

3.1 权重及配置文件说明

1. 权重链接:

https://huggingface.co/HiDream-ai/HiDream-I1-Full/tree/main
https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct/tree/main

2. 各模型的配置文件、权重文件的层级样例如下所示:

|----main
|    |---- model_index.json
|    |---- scheduler
|    |---- text_encoder
|    |---- text_encoder_2
|    |---- text_encoder_3
|    |---- tokenizer
|    |---- tokenizer_2
|    |---- tokenizer_3
|    |---- transformer
|    |    |---- config.json
|    |    |---- 模型权重
|    |---- vae

3.2 单卡单batch推理性能测试

1. 进入主目录

cd HiDream-I1

2. 设置权重路径

path="/data/HiDream-I1-Full"
extra_path="/data/Llama-3.1-8B-Instruct"

3. 执行命令,进行推理:

python inference.py \
       --model_path ${path} \
       --model_path_extra ${extra_path} \
       --resolution "1024 x 1024" \
       --num_inference_steps 50 \
       --device_id 0

参数说明:

  • model_path:HiDream-I1-Full权重路径。
  • model_path_extra:Llama-3.1-8B-Instruct权重路径。
  • resolution:需要生成的图像的分辨率。
  • num_inference_steps:推理迭代步数。
  • device_id:推理设备ID。

注意:本仓库模型,是对开源模型进行优化。用户在使用时,应对开源代码函数的变量范围,类型进行校验,避免出现变量超出范围、除零等操作。

4. 采Profiling:

python inference.py \
       --model_path ${path} \
       --model_path_extra ${extra_path} \
       --resolution "1024 x 1024" \
       --num_inference_steps 4 \
       --infer_type Profiling \
       --device_id 0

参数说明:

  • model_path:HiDream-I1-Full权重路径。
  • model_path_extra:Llama-3.1-8B-Instruct权重路径。
  • resolution:需要生成的图像的分辨率。
  • num_inference_steps:推理迭代步数。
  • infer_type: 推理类型,包括Accuracy、Performance和Profiling。
  • device_id:推理设备ID。

3.3 多卡单batch推理性能测试

1. 进入主目录

cd HiDream-I1

2. 设置权重路径

path="/data/HiDream-I1-Full"
extra_path="/data/Llama-3.1-8B-Instruct"

3. 执行命令,进行推理:

ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node=4 inference.py \
       --enable_parallelism True \
       --tp_size 4 \
       --ep_size 4 \
       --model_path ${path} \
       --model_path_extra ${extra_path} \
       --resolution "1024 x 1024" \
       --num_inference_steps 50

参数说明:

  • ASCEND_RT_VISIBLE_DEVICES:device id,可设置其他卡数。ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7代表占用0-7卡进行8卡推理。
  • nproc_per_node:数值需要与卡数保持一致。
  • enable_parallelism:TP+EP并行开关。
  • tp_size: TP group的大小。
  • ep_size:EP group的大小。
  • model_path:HiDream-I1-Full权重路径。
  • model_path_extra:Llama-3.1-8B-Instruct权重路径。
  • resolution:需要生成的图像的分辨率。
  • num_inference_steps:推理迭代步数。

注意:本仓库模型,是对开源模型进行优化。用户在使用时,应对开源代码函数的变量范围,类型进行校验,避免出现变量超出范围、除零等操作。

4. 采Profiling:

ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node=4 inference.py \
       --enable_parallelism True \
       --tp_size 4 \
       --ep_size 4 \
       --model_path ${path} \
       --model_path_extra ${extra_path} \
       --resolution "1024 x 1024" \
       --num_inference_steps 4 \
       --infer_type Profiling

参数说明:

  • ASCEND_RT_VISIBLE_DEVICES:device id,可设置其他卡数。ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7代表占用0-7卡进行8卡推理。
  • nproc_per_node:数值需要与卡数保持一致。
  • enable_parallelism:TP+EP并行开关。
  • tp_size: TP group的大小。
  • ep_size:EP group的大小。
  • model_path:HiDream-I1-Full权重路径。
  • model_path_extra:Llama-3.1-8B-Instruct权重路径。
  • resolution:需要生成的图像的分辨率。
  • num_inference_steps:推理迭代步数。
  • infer_type: 推理类型,包括Accuracy、Profiling和Accuracy。

3.4 精度验证

1. 由于生成的图片存在随机性,提供两种精度验证方法:

  1. CLIP-score(文图匹配度量):评估图片和输入文本的相关性,分数的取值范围为[-1, 1],越高越好。使用Parti数据集进行验证。
  2. HPSv2(图片美学度量):评估生成图片的人类偏好评分,分数的取值范围为[0, 1],越高越好。使用HPSv2数据集进行验证

注意,由于要生成的图片数量较多,进行完整的精度验证需要耗费很长的时间。

2. 下载Parti数据集和hpsv2数据集

所有数据集放到HiDream-I1/prompts目录下

# 下载Parti数据集
wget https://raw.githubusercontent.com/google-research/parti/main/PartiPrompts.tsv --no-check-certificate

hpsv2数据集下载链接:https://gitee.com/ascend/ModelZoo-PyTorch/blob/master/MindIE/MindIE-Torch/built-in/foundation/stable_diffusion_xl/hpsv2_benchmark_prompts.json

3. 设置模型权重路径

path="/data/HiDream-I1-Full"
extra_path="/data/Llama-3.1-8B-Instruct"

4. 使用推理脚本读取Parti数据集,生成图片

python3 inference.py \
        --model_path ${path} \
        --model_path_extra ${extra_path} \
        --prompt_file ./prompts/PartiPrompts.tsv \
        --prompt_file_type parti \
        --info_file_save_path ./image_info_PartiPrompts.json \
        --save_dir ./results_PartiPrompts \
        --num_images_per_prompt 4 \
        --resolution "1024 x 1024" \
        --num_inference_steps 50 \
        --batch_size 1 \
        --seed 42 \
        --infer_type Accuracy \
        --device_id 0

参数说明:

  • model_path:HiDream-I1-Full权重路径。
  • model_path_extra:Llama-3.1-8B-Instruct权重路径。
  • prompt_file:提示词文件。
  • prompt_file_type: prompt文件类型,用于指定读取方式,可选plain,parti,hpsv2。
  • info_file_save_path:生成图片信息的json文件路径。
  • save_dir:生成图片的存放目录。
  • num_images_per_prompt: 每个prompt生成的图片数量。注意使用hpsv2时,设置num_images_per_prompt=1即可。
  • resolution:需要生成的图像的分辨率。
  • num_inference_steps:推理迭代步数。
  • batch_size:模型batch size。
  • seed:随机种子。
  • infer_type: 推理类型,包括Accuracy、Profiling和Accuracy。
  • device_id:推理设备ID。

执行完成后在./results_PartiPrompts目录下生成推理图片,在当前目录生成一个image_info_PartiPrompts.json文件,记录着图片和prompt的对应关系,并在终端显示推理时间。

5. 使用推理脚本读取hpsv2数据集,生成图片

python3 inference.py \
        --model_path ${path} \
        --model_path_extra ${extra_path} \
        --prompt_file ./prompts/hpsv2_benchmark_prompts.json \
        --prompt_file_type hpsv2 \
        --info_file_save_path ./image_info_hpsv2.json \
        --save_dir ./results_hpsv2 \
        --num_images_per_prompt 1 \
        --resolution "1024 x 1024" \
        --num_inference_steps 50 \
        --batch_size 1 \
        --seed 42 \
        --infer_type Accuracy \
        --device_id 0

参数说明:

  • model_path:HiDream-I1-Full权重路径。
  • model_path_extra:Llama-3.1-8B-Instruct权重路径。
  • prompt_file:提示词文件。
  • prompt_file_type: prompt文件类型,用于指定读取方式,可选plain,parti,hpsv2。
  • info_file_save_path:生成图片信息的json文件路径。
  • save_dir:生成图片的存放目录。
  • num_images_per_prompt: 每个prompt生成的图片数量。注意使用hpsv2时,设置num_images_per_prompt=1即可。
  • resolution:需要生成的图像的分辨率。
  • num_inference_steps:推理迭代步数。
  • batch_size:模型batch size。
  • seed:随机种子。
  • infer_type: 推理类型,包括Accuracy、Profiling和Accuracy。
  • device_id:推理设备ID。

执行完成后在./results_hpsv2目录下生成推理图片,在当前目录生成一个image_info_hpsv2.json文件,记录着图片和prompt的对应关系,并在终端显示推理时间。