DiT是一种基于Transformer的扩散模型,全称为Diffusion Transformer,DiT遵循ViT的技术方法。有关DiT模型的更多信息,请参考DiT github。
表 1 版本配套表
| 配套 | 版本 | 环境准备指导 |
|---|---|---|
| Python | 3.10/3.11 | - |
| PyTorch | 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# 增加软件包可执行权限,{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-path=${AieInstallPath}
# 设置环境变量
cd ${AieInstallPath}/mindie && source set_env.shtar -xzvf pytorch_v{pytorchversion}_py{pythonversion}.tar.gz
# 解压后,会有whl包
pip install torch_npu-{pytorchversion}.xxxx.{arch}.whlgit clone https://modelers.cn/MindIE/DiT.gitcd DiT
pip install -r requirements.txt --no-deps注:只有300I Duo设备下需要执行此步骤
cd pta_plugin
bash build.sh
cd ..DiT权重文件下载链接如下,按需下载:
vae权重文件下载链接如下,按需下载:
# ema
git clone https://huggingface.co/stabilityai/sd-vae-ft-ema
# mse
git clone https://huggingface.co/stabilityai/sd-vae-ft-mseecho performance |tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
sysctl -w vm.swappiness=0
sysctl -w kernel.numa_balancing=0apt-get update
apt-get install numactl查询卡的NUMA node
lspci -vs bus-idbus-id可通过npu-smi info获得,查询到NUMA node,在推理命令前加上对应的数字
可通过lscpu获得NUMA node对应的CPU核数
NUMA node0: 0-23
NUMA node1: 24-47
NUMA node2: 48-71
NUMA node3: 72-95当前查到NUMA node是0,对应0-23,推荐绑定其中单核以获得更好的性能。 2. 执行推理命令:
# Atlas 800I A2
numactl -C 0-23 python3 sample.py \
--vae mse \
--image_size 512 \
--ckpt ./DiT-XL-2-512x512.pt \
--vae_model ./sd-vae-ft-mse \
--device_id 0 \
--class_label 0
# Atlas 300I Duo
export CPU_AFFINITY_CONF=1
export TASK_QUEUE_ENABLE=1
numactl -C 0-23 torchrun --nproc_per_node=2 sample.py \
--vae mse \
--image_size 512 \
--ckpt ./DiT-XL-2-512x512.pt \
--vae_model ./sd-vae-ft-mse \
--class_label 0 \
--parallel参数说明:
执行完成后会在当前路径生成sample.png
下载数据集 ImageNet512x512(VIRTUAL_imagenet512.npz)和ImageNet256x256(VIRTUAL_imagenet256_labeled.npz)
使用脚本读取数据集,生成图片
# Atlas 300I Duo
torchrun --nproc_per_node=2 fid_test.py \
--vae mse \
--image_size 512 \
--ckpt ./DiT-XL-2-512x512.pt \
--vae_model ./sd-vae-ft-mse \
--parallel \
--results results
# Atlas 800I A2
python3 fid_test.py \
--vae mse \
--image_size 512 \
--ckpt ./DiT-XL-2-512x512.pt \
--vae_model ./sd-vae-ft-mse \
--device_id 0 \
--results results参数说明:
# 512分辨率使用VIRTUAL_imagenet512.npz数据集
python3 -m pytorch_fid ./VIRTUAL_imagenet512.npz ./results
# 256分辨率使用VIRTUAL_imagenet256_labeled.npz数据集
python3 -m pytorch_fid ./VIRTUAL_imagenet256_labeled.npz ./results 待测试