git clone https://github.com/microsoft/unilm/
cd unilm/textdiffuser-2
conda create -n textdiffuser2 python=3.8
conda activate textdiffuser2
pip install -r requirements.txt

conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xformers
先将flash-attention模型仓库克隆下来
git clone https://github.com/Dao-AILab/flash-attention.git
然后安装对应的软件包
pip install packaging
pip uninstall -y ninja && pip install ninja
conda install -c nvidia cuda
pip install flash-attn --no-build-isolation
pip install https://github.com/JingyeChen/diffusers_td2.git
模型下载方式: 采用git远程clone下来,具体方式可以参考之前的内容:huggingface学习 | 云服务器使用git-lfs下载huggingface上的模型文件;
CUDA_VISIBLE_DEVICES=4,5 torchrun --nproc_per_node=2 --master_port=50008 FastChat-main/fastchat/train/train_mem.py \
--model_name_or_path vicuna-7b-v1.5 \
--data_path data/layout_planner_data_5k.json \
--bf16 True \
--output_dir experiment_result \
--num_train_epochs 6 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 2 \
--gradient_accumulation_steps 16 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 500 \
--save_total_limit 5 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--fsdp "full_shard auto_wrap" \
--fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \
--tf32 True \
--model_max_length 2048 \
--gradient_checkpointing True \
--lazy_preprocess True
accelerate launch train_textdiffuser2_t2i_full.py \
--pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5" \
--train_batch_size=18 \
--gradient_accumulation_steps=4 \
--gradient_checkpointing \
--mixed_precision="fp16" \
--num_train_epochs=6 \
--learning_rate=1e-5 \
--max_grad_norm=1 \
--lr_scheduler="constant" \
--lr_warmup_steps=0 \
--output_dir="diffusion_experiment_result" \
--enable_xformers_memory_efficient_attention \
--dataloader_num_workers=8 \
--index_file_path='/path/to/train_dataset_index.txt' \
--dataset_path='/path/to/laion-ocr-select/' \
--granularity=128 \
--coord_mode="ltrb" \
--max_length=77 \
--resume_from_checkpoint="latest"
accelerate launch train_textdiffuser2_t2i_lora.py \
--pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5" \
--train_batch_size=18 \
--gradient_accumulation_steps=4 \
--gradient_checkpointing \
--mixed_precision="fp16" \
--num_train_epochs=6 \
--learning_rate=1e-4 \
--text_encoder_learning_rate=1e-5 \
--lr_scheduler="constant" \
--output_dir="diffusion_experiment_result" \
--enable_xformers_memory_efficient_attention \
--dataloader_num_workers=8 \
--index_file_path='/path/to/train_dataset_index.txt' \
--dataset_path='/path/to/laion-ocr-select/' \
--granularity=128 \
--coord_mode="ltrb" \
--max_length=77 \
--resume_from_checkpoint="latest"
下载官网提供的模型checkpoint:layout planner、diffusion model (full parameter fine-tuning) 和diffusion model (lora fine-tuning)
CUDA_VISIBLE_DEVICES=4 accelerate launch inference_textdiffuser2_t2i_full.py \
--pretrained_model_name_or_path="./stable-diffusion-v1-5" \
--mixed_precision="fp16" \
--output_dir="inference_results_1" \
--enable_xformers_memory_efficient_attention \
--resume_from_checkpoint="./textdiffuser2-full-ft" \
--granularity=128 \
--max_length=77 \
--coord_mode="ltrb" \
--cfg=7.5 \
--sample_steps=20 \
--seed=43555 \
--m1_model_path="./textdiffuser2_layout_planner" \
--input_format='prompt' \
--input_prompt='a hotdog with mustard and other toppings on it'
推理结果:

CUDA_VISIBLE_DEVICES=4 accelerate launch inference_textdiffuser2_t2i_lora.py \
--pretrained_model_name_or_path="./stable-diffusion-v1-5" \
--gradient_accumulation_steps=4 \
--gradient_checkpointing \
--mixed_precision="fp16" \
--output_dir="inference_results_2" \
--enable_xformers_memory_efficient_attention \
--resume_from_checkpoint="./textdiffuser2-lora-ft" \
--granularity=128 \
--coord_mode="ltrb" \
--cfg=7.5 \
--sample_steps=50 \
--seed=43555 \
--m1_model_path="./textdiffuser2_layout_planner" \
--input_format='prompt' \
--input_prompt='a stamp of u.s.a'
运行结果:

在运行过程中出现了各种各样的importerror,于是就是缺少哪个库就下载那个库:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
pip install protobuf
pip uninstall opencv-python
pip install opencv-python-headless
pip install diffusers==0.24.0 -i https://pypi.mirrors.ustc.edu.cn/simple/
由于作者在官网上提供了实验中使用的软件包列表可供参考,所以我直接将textdiffuser-2的assets文件夹下的refere_requirements.txt文件中的库一次性安装下来:
cd assets
pip install -r reference_requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/

这个错误是因为安装的diffusers包里有个文件需要用官网提供的新文件进行替换
可以先根据错误提示找到diffusers库包中attention_processor.py所在的位置,然后用assets文件夹下attention_processor.py进行替换即可解决问题。

参考:libGL.so.1: cannot open shared object file: No such file or directory