diff --git a/docs/docs/blog/inference_stable_diffusion_fast_diffusers/README.md b/docs/docs/blog/inference_stable_diffusion_fast_diffusers/README.md new file mode 100644 index 0000000..dd4a73f --- /dev/null +++ b/docs/docs/blog/inference_stable_diffusion_fast_diffusers/README.md @@ -0,0 +1,48 @@ +## 基于TensorRT的Stable Diffusion推理 + +Stable Diffusion 是一种生成模型,可以根据文本和图像提示生成独特的逼真图像。 它最初于2022年推出。我们将介绍如何利用Colossal-AI faster-diffusers从Huggingface的仓库里将模型直接转换为TensorRT Engine并用于推理加速。 + +Tags: 加速,推理,Diffusers,Stable Diffusion,TensorRT + +### 运行环境要求 + +镜像:推荐使用官方镜像 colossalai 0.3.4 + +GPU规格:推荐使用H800 (1块及以上) + +### 1. 准备项目文件 + +在此样例中,我们使用预置好的`Stable Diffusion Inference`项目文件,稍后我们会将此项目挂载在我们的任务上。 + +### 3. 启动开发环境 + +1. 在控制台中选择`开发`选项,点击 `创建一个新的Notebook`; + +2. 填写对应的开发环境名称和描述; + +3. 挂载项目:将之前准备好的 `Stable Diffusion Inference` 文件挂载到 Container 中,在这个例子里,项目被挂载到了 `/mnt/project`; + +7. 镜像设置:选择官方镜像 `colossalai 0.3.4`; + +8. 显卡配置:推荐选择 `NVIDA-H800`,GPU 数量设置为 `1`; + +9. 最后点击 `创建`,启动开发环境; + +10. 连接开发环境,浏览器将会跳转到对应的 Jupyter notebook。 + + +### 4. Notebook使用 + +在本例中,我们准备了`./README.ipynb`来提供stable diffusion推理的教程。 其中包含了如下几步: + +1. 安装相关依赖; +2. [可选]下载Hugging Face模型,本例中我们已经预置好 sd-v1.5 Hugging Face模型; +3. [可选] 构建TRT引擎,本例中我们已经预置好 sd-v1.5 Hugging Face模型 (构建TensorRT Engine的时间比较久,可能会构建20分钟以上); +4. 测试txt2img; +5. 测试img2img; + +一个示例的text2img结果如下, 其prompt为 "a photo of an astronaut riding a horse on mars": + +![task_create](./images/text2img_example.png) + +开始使用此notebook体验您的stable diffsuion推理吧! \ No newline at end of file diff --git a/docs/docs/blog/inference_stable_diffusion_fast_diffusers/images/text2img_example.png b/docs/docs/blog/inference_stable_diffusion_fast_diffusers/images/text2img_example.png new file mode 100644 index 0000000..d6523e7 Binary files /dev/null and b/docs/docs/blog/inference_stable_diffusion_fast_diffusers/images/text2img_example.png differ diff --git a/docs/docs/blog/colossalai_parallelism/README.md b/docs/docs/blog/train_llama2_colossalai_parallelism/README.md similarity index 88% rename from docs/docs/blog/colossalai_parallelism/README.md rename to docs/docs/blog/train_llama2_colossalai_parallelism/README.md index 2755e35..d13eb0c 100644 --- a/docs/docs/blog/colossalai_parallelism/README.md +++ b/docs/docs/blog/train_llama2_colossalai_parallelism/README.md @@ -1,4 +1,4 @@ -# 并行优化策略: 利用Colossal-AI进行训练任务并行优化 +# 并行优化策略: 利用Colossal-AI进行LLaMA2训练任务并行优化 [Colossal-AI](https://github.com/hpcaitech/ColossalAI) 框架中包含了一系列训练时的并行优化策略,其中包括了张量并行,模型并行、数据并行和Zero等优化策略。在本个实例中,我们将演示如何便捷地使用我们Colossal-AI云平台框架使用这些并行策略训练LLaMA2 7B模型。 @@ -6,7 +6,7 @@ Tags:  Colossal-AI,训练并行, LLaMA2 ## 运行环境要求 -镜像:推荐使用官方镜像 notebook-colossalai-torch210-cu118 +镜像:推荐使用官方镜像 colossalai 0.3.4 GPU规格:推荐使用H800 (4块及以上) @@ -75,7 +75,7 @@ RedPajama-Data-1T 包含七个数据片段: 8. 最后点击 `创建`,启动任务; -![infernce_api_create](./images/task_create.jpg) +![task_create](./images/task_create.jpg) ## 3. 启动命令 @@ -110,7 +110,10 @@ RedPajama-Data-1T 包含七个数据片段: 如果您选择了Hybrid Parallel,您可以更改python训练脚本中第181行到第190行的HybridParallelPlugin配置代码,更改tp_size和pp_size以更改张量并行和管道并行的大小。HybridParallelPlugin是通过shardformer实现张量并行,在该插件中,可设置tp_size确定张量并行组的大小,此外,还有多个参数可设置张量并行时的优化特性: -enable_all_optimization(布尔类型,可选项):是否启用Shardformer支持的所有优化方法,目前所有优化方法包括融合归一化、flash attention和JIT。默认为False。 enable_fused_normalization(布尔类型,可选项):是否在Shardformer中启用融合归一化。默认为False。 enable_flash_attention(布尔类型,可选项):是否在Shardformer中启用flash attention。默认为False。 enable_jit_fused(布尔类型,可选项):是否在Shardformer中启用JIT。默认为False。 enable_sequence_parallelism(布尔类型):是否在Shardformer中启用序列并行性。默认为False。 enable_sequence_overlap(布尔类型):是否在Shardformer中启用序列重叠性。默认为False。 +- enable_all_optimization(布尔类型,可选项):是否启用Shardformer支持的所有优化方法,目前所有优化方法包括融合归一化、flash attention和JIT。默认为False。 +- enable_fused_normalization(布尔类型,可选项):是否在Shardformer中启用融合归一化。默认为False。 enable_flash_attention(布尔类型,可选项):是否在Shardformer中启用flash attention。默认为False。 +- enable_jit_fused(布尔类型,可选项):是否在Shardformer中启用JIT。默认为False。 enable_sequence_parallelism(布尔类型):是否在Shardformer中启用序列并行性。默认为False。 +- enable_sequence_overlap(布尔类型):是否在Shardformer中启用序列重叠性。默认为False。 HybridParallelPlugin通过设置pp_size确定流水线并行组的大小,num_microbatches设置流水线并行时将整个batch划分为小batch的数量,microbatch_size可设置小batch的大小,插件会优先使用num_microbatches来确定micro batch的配置。 HybridParallelPlugin的设置示例如下: @@ -135,6 +138,7 @@ DATASET_DIR="/mnt/dataset" OUTPUT_DIR="/output" TRAINING_DATASET_DIR=${DATASET_DIR}/RedPajama-Data-1T-Sample +COLOSSALAI_PROJECT_DIR=${SCRIPT_DIR}/ColossalAI TENSORBOARD_OUTPUT_DIR=${OUTPUT_DIR}/tensorboard CHECKPOINT_SAVE_DIR=${OUTPUT_DIR}/checkpoint SAVE_MODEL_PATH=${CHECKPOINT_SAVE_DIR} @@ -142,19 +146,20 @@ SAVE_MODEL_PATH=${CHECKPOINT_SAVE_DIR} mkdir -p ${TENSORBOARD_OUTPUT_DIR} mkdir -p ${SAVE_MODEL_PATH} -cd ColossalAI -cd ColossalAI/examples/language/llama2/ +cd ${COLOSSALAI_PROJECT_DIR} +pip install ./ +cd examples/language/llama2/ -colossalai run --nproc_per_node ${NPROC_PER_NODE} ${SCRIPT_DIR}/pretrain.py \ +colossalai run --nproc_per_node ${NPROC_PER_NODE} pretrain.py \ --plugin ${strategy} \ --dataset ${TRAINING_DATASET_DIR} \ --save_dir ${SAVE_MODEL_PATH} \ --num_epochs ${num_epochs} \ --batch_size ${batch_size} \ --max_length ${max_len} \ - save_interval ${save_interval}\ + --save_interval ${save_interval}\ --lr ${lr} \ - --log_dir ${TENSORBOARD_OUTPUT_DIR} \ + --tensorboard_dir ${TENSORBOARD_OUTPUT_DIR} \ ``` LLaMA2 将会就此开始训练,你同时也可以在项目页面查看输出和结果。 diff --git a/docs/docs/blog/colossalai_parallelism/images/task_create.jpg b/docs/docs/blog/train_llama2_colossalai_parallelism/images/task_create.jpg similarity index 100% rename from docs/docs/blog/colossalai_parallelism/images/task_create.jpg rename to docs/docs/blog/train_llama2_colossalai_parallelism/images/task_create.jpg diff --git a/docs/docs/blog/train_stable_diffusion_dreambooth/README.md b/docs/docs/blog/train_stable_diffusion_dreambooth/README.md new file mode 100644 index 0000000..301e229 --- /dev/null +++ b/docs/docs/blog/train_stable_diffusion_dreambooth/README.md @@ -0,0 +1,95 @@ +# 利用Colossal-AI Dreambooth进行Stable-Diffuison训练 + +[Colossal-AI Dreambooth](https://github.com/hpcaitech/ColossalAI/tree/main/examples/images/dreambooth) 。在本个实例中,我们将演示如何便捷地使用我们Colossal-AI云平台框架使用这些并行策略训练Stable Diffusion v1.4 模型。 + +Tags:  Colossal-AI, Dreambooth,训练, Stable Diffsuon + +## 运行环境要求 + +镜像:推荐使用官方镜像 colossalai 0.3.4 + +GPU规格:推荐使用H800 (2块及以上) + +## 1. 准备项目文件 + +我们需要克隆[Colossal-AI](https://github.com/hpcaitech/ColossalAI)代码仓库。在此样例中,我们使用预置好的项目文件,稍后我们会将此项目挂载在我们的任务上。 + +## 2. 准备数据库 + +我们使用[Teyvat](https://huggingface.co/datasets/Fazzie/Teyvat)数据集,此数据集已经预置于我们云平台,稍后我们会将此数据集挂载在我们的任务上。 + +这个数据集是什么? + +> BLIP 从 [genshin-impact fandom wiki](https://genshin-impact.fandom.com/wiki/Character#Playable_Characters) 和 [biligame wiki for genshin impact](https://wiki.biligame.com/ys/%E8%A7%92%E8%89%B2) 生成了角色图像的标题。 +> 对于每一行,数据集包含 `image` 和 `text` 键。`image` 是一个大小不等的 PIL png 图像,而 `text` 是相应的文本标题。只提供了一个训练集。 +> `text` 包括标签 `Teyvat`、`Name`、`Element`、`Weapon`、`Region`、`Model type` 和 `Description`,`Description` 使用 [预训练的 BLIP 模型](https://github.com/salesforce/BLIP) 进行标题标注。 + +## 3. 准备模型 + +我们需要准备预训练好的[CompVis/stable-diffusion-v1-4](https://huggingface.co/CompVis/stable-diffusion-v1-4)模型。在此样例中,此模型已经预置于我们云平台,稍后我们会将此模型挂载在我们的任务上。 + + +## 3. 启动任务 + +1. 在控制台中选择`任务`选项,点击 `新任务`; + +2. 填写对应的任务名称和描述; + +3. 挂载预训练模型:将之前准备好预训练模型的 `stable-diffusion-v1-4` 数据集挂载到 Container 中,在这个例子里,模型被挂载到了 `/mnt/model`; + +4. 挂载数据集:将之前准备好的 `Teyvat` 数据集挂载到 Container 中,在这个例子里,模型被挂载到了 `/mnt/dataset`; + +5. 挂载项目:将之前准备好的 Colossal AI 项目 `Dreambooth Stable Diffusion Training` 文件挂载到 Container 中,在这个例子里,项目被挂载到了 `/mnt/project`; + +6. 启动命令:填入我们项目中默认的启动命令 `bash /mnt/project/train.sh`。同时您可以在云平台页面通过设置环境变量选择此次训练配置,如并行策略,Flash Attention加速,epoch大小等。如果您想了解启动命令是如何启动服务的,或者想自定义启动命令,请参考 `3.启动命令`; + +7. 镜像设置:选择官方镜像 `colossalai 0.3.4`; + +8. 显卡配置:推荐选择 `NVIDA-H800`,GPU 数量设置为大于等于 `2`; + +9. 最后点击 `创建`,启动任务; + +![task_create](./images/task_create.jpg) + + +## 3. 启动命令 + +1. 在本例中,我们用如下启动命令运行python训练脚本,其位于`./train.sh`。如您想进行更改相关配置,可更改此文件。 +``` +#!/usr/bin/env bash +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +MODEL_DIR="/mnt/model" +DATASET_DIR="/mnt/dataset" +OUTPUT_DIR="/output" + +COLOSSALAI_PROJECT_DIR=${SCRIPT_DIR}/ColossalAI +TENSORBOARD_OUTPUT_DIR=${OUTPUT_DIR}/tensorboard +CHECKPOINT_SAVE_DIR=${OUTPUT_DIR}/checkpoint +SAVE_MODEL_PATH=${CHECKPOINT_SAVE_DIR} + +mkdir -p ${TENSORBOARD_OUTPUT_DIR} +mkdir -p ${SAVE_MODEL_PATH} + +cd ${COLOSSALAI_PROJECT_DIR} +pip install ./ +cd examples/images/dreambooth/ +pip install -r requirements.txt + +export MODEL_NAME=$MODEL_DIR/stable-diffusion-v1-4 +export INSTANCE_DIR=$DATASET_DIR/Teyvat/data + +torchrun --nproc_per_node ${NPROC_PER_NODE} train_dreambooth_colossalai.py \ + --pretrained_model_name_or_path=$MODEL_NAME \ + --instance_data_dir=$INSTANCE_DIR \ + --output_dir=$CHECKPOINT_SAVE_DIR \ + --logging_dir=$TENSORBOARD_OUTPUT_DIR + --instance_prompt="a photo of sks dog" \ + --resolution=512 \ + --train_batch_size=${batch_size} \ + --learning_rate=${lr} \ + --lr_scheduler="constant" \ + --lr_warmup_steps=0 \ + --max_train_steps=${num_train_step} +``` + +Stable Diffusion 将会就此开始训练,你同时也可以在项目页面查看输出和结果。 diff --git a/docs/docs/blog/train_stable_diffusion_dreambooth/images/task_create.jpg b/docs/docs/blog/train_stable_diffusion_dreambooth/images/task_create.jpg new file mode 100644 index 0000000..c6961ec Binary files /dev/null and b/docs/docs/blog/train_stable_diffusion_dreambooth/images/task_create.jpg differ