在 Scnet 上微调 Stable Diffusion 3 模型

1 AI 算力反馈

1.1 运行的商品名称

我运行的商品为 Stable Diffusion 3 文本到图像高质量生成AI绘画推理服务,运行的环境为 异构加速卡AI 64G。具体创建流程如下:

1.1.1 购买模型服务

首先购买一下模型服务,这样我们就不需要再从 Hugging Face 下载预训练模型了
在这里插入图片描述

1.1.2 选择合适的开发机器

点击模型开发并配置开发环境(注意开发环境需要同步),这里选择的是 异构计算单卡 64G + pytorch dtk24.04.1 的开发环境。
在这里插入图片描述
在这里插入图片描述

1.1.3 打开开发环境

等待 Notebook 环境准备完成后点击 JupyterLab 来打开开发环境
在这里插入图片描述

1.1.4 创建一个新的项目文件

创建并新建一个 ipynb 文件(下面的步骤均在该环境下开发),注意,这里的Python版本需要是3.10。
在这里插入图片描述
在这里插入图片描述

1.2 运行的过程记录

在开始项目之前,我们先定义项目的工作目录。

work_path="/root/private_data/apprepo/model/20240729095814/stable-diffusion-3-medium-diffusers-2407251517"

1.2.1 安装 diffusers

Hugging Face 的 diffusers 仓库是一个用于处理和应用扩散模型的开源库,在这次的任务中,我们使用 diffusers 仓库来进行微调,在开始微调之前,我们需要安装 diffusers。执行以下代码来保证不会因为 Github Repo 的体积太大导致无法正常的下
载。

# 保证 Github 仓库在克隆时不会出现太大而无法下载的错误
!git config --global http.sslVerify "false"
!git config --global http.postBuffer 1048576000
!git config --global core.compression -1
!git config --global http.lowSpeedLimit 0 
!git config --global http.lowSpeedTime 999999 

执行以下代码来保证 git 工具把你的凭证保存到本地,方便二次开发。

# 配置 git 保存你的凭证
!git config --global credential.helper store

执行以下代码来下载并安装 diffusers 仓库,需要注意的是,由于网络原因,服务器在下载 diffusers 仓库时可能会出现问题,建议只下载深度为1的仓库。

%cd $work_path
# 克隆 Hugging Face 的 diffusers 仓库
!rm -rf diffusers
!git clone https://github.com/huggingface/diffusers --depth 1
# 进入 diffusers 目录
%cd diffusers
# 以可编辑模式安装 diffusers 库
!pip install -e .
# 配置 Accelerate 库的默认设置
!accelerate config default

1.2.2 安装微调所需要的依赖

如果你的目标是微调模型,你可能还需要安装微调所需要的依赖项。需要注意的是,当我们使用的是国产推理卡,运行 runtime 为 tk框架,需要安装特定版本的 torch。但是在安装 torchvision 这个包时,系统会自动安装 cuda 版本的torch,因此我们需要屏蔽掉这个安装包再执行安装命令。

%cd $work_path/diffusers/examples/dreambooth
# 安装 requirements_sd3.txt 中的依赖
!sed -i 's/torchvision/#torchvision/' requirements_sd3.txt
!pip install -r requirements_sd3.txt -i https://pypi.mirrors.ustc.edu.cn/simple/

接着手动安装 torchvision (以不安装依赖的方式),我这里的 torch 版本为 2.1.0,对应的torchvision 版本为 0.16,更详细的版本对应信息可以参考下表或参考
torchvision Repo。

torchtorchvisionPython
main / nightlymain / nightly>=3.8, <=3.12
2.40.19>=3.8, <=3.12
2.30.18>=3.8, <=3.12
2.20.17>=3.8, <=3.11
2.10.16>=3.8, <=3.11
2.00.15>=3.8, <=3.11
!pip install torchvision==0.16 -i https://pypi.mirrors.ustc.edu.cn/simple/ --no-deps

1.2.3 微调你的 Stable Diffusion 模型

这里使用 Python 的 heredoc 语法执行 Python 代码块,利用 Hugging Face 下载所需要的数据集。

%cd $work_path/diffusers/examples/dreambooth# 下载所需要的数据集。
from huggingface_hub import snapshot_download
# 设置数据集安装路径
local_dir = "./dataset/dog"
# 从 Hugging Face Hub 下载 "diffusers/dog-example" 数据集到本地目录
snapshot_download("diffusers/dog-example",local_dir=local_dir,repo_type="dataset",ignore_patterns=".gitattributes",
)# 这里必须删除掉没用的 .huggingface 目录
!rm -rf ./dataset/dog/.huggingface

如果你希望使用 Hugging Face 官方的预训练模型,请前往 Stable Diffusion 3 on Hugging Face 并登陆你的 Hugging Face ID 并签署协议,保证你不会用于商用。在签署完协议后,你需要手动在终端执行以下代码:

# 配置 token(输入以下命令 --> 输入你的Token --> 回车 --> 输入Y --> 回车)
huggingface-cli login

如果你使用的是 SCNet 提供的预训练模型,你不需要做任何操作,但也请确保你没有用于商用。

# 进入 diffusers/examples/dreambooth 目录
%cd $work_path/diffusers/examples/dreambooth# 使用 Accelerate 启动 train_dreambooth_lora_sd3.py 训练脚本
!accelerate launch train_dreambooth_lora_sd3.py \--pretrained_model_name_or_path=$work_path/stabilityai/stable-diffusion-3-medium-diffusers  \--instance_data_dir="./dataset/dog" \--output_dir="trained-sd3-lora" \--mixed_precision="fp16" \--instance_prompt="a photo of sks dog" \--resolution=512 \--train_batch_size=1 \--gradient_accumulation_steps=4 \--learning_rate=1e-5 \--lr_scheduler="constant" \--lr_warmup_steps=0 \--max_train_steps=500 \--validation_prompt="A photo of sks dog in a bucket" \--validation_epochs=25 \--seed="0"# 注意,如果你使用的是官方的预训练模型且没有成功签署协议,在训练代码时你可能会出现如下错误:
# OSError: Can't load tokenizer for 'stabilityai/stable-diffusion-3-medium'. 
# If you were trying to load it from 'https://huggingface.co/models', 
# make sure you don't have a local directory with the same name. 
# Otherwise, make sure 'stabilityai/stable-diffusion-3-medium' is the correct 
# path to a directory containing all relevant files for a CLIPTokenizer tokenizer.

训练结束后可能会报错 expected scalar type Float but found Half 这是 Hugging Face 的Bug,可以忽略它,我们的训练是没有问题的。

1.2.4 使用微调后的模型执行推理

接下来进行推理,注意这里必须使用 with torch.autocast("cuda") 再进行推理,否则会报和训练时一样的错误。

%cd $work_path/diffusers/examples/dreambooth/trained-sd3-lorafrom diffusers import StableDiffusion3Pipeline
import torchmodel_path = "./checkpoint-500"
pipe = StableDiffusion3Pipeline.from_pretrained(f"{work_path}/stabilityai/stable-diffusion-3-medium-diffusers", torch_dtype=torch.float16)
pipe.load_lora_weights(model_path)
pipe.to("cuda")prompt = "A photo of sks dog in a bucket."
with torch.autocast("cuda"):image = pipe(prompt).images[0]image.save("output.png")

推理后的输出结果如下,可以看到生成的图片质量还是可以的
在这里插入图片描述

1.3 运行的结果反馈

1.3.1 模型设备占用一览图

在终端模式下,使用 rocm-smi 命令可以看到模型训练时充分占用了 异构加速卡 的显存,如下图:
在这里插入图片描述

当然,也可以在工具面板中查看详细信息,下图为模型在训练时设备各外设的占用情况:
在这里插入图片描述

下图为模型在推理时设备各外设的占用情况:

在这里插入图片描述

1.3.2 保存开发镜像

点击关机按钮
在这里插入图片描述

选择保存环境并点击确定
在这里插入图片描述

2 运行体验与建议

是不是需要有一份详细的文档介绍一下开发环境具体怎么使用,现在就是在盲人摸象,像工具面板这种可以实时查看设备运行状态的好东西需要让更多的用户看到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3977.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ffmpeg命令——从wireshark包中的rtp包中分离h264

ffmpeg命令——从wireshark包中的rtp包中分离h264 过滤 RTP打开wireshark的RTP 播放器选中流并导出荷载使用 ffmpeg 命令行分离出 h264 过滤 RTP 打开wireshark的RTP 播放器 选中流并导出荷载 使用 ffmpeg 命令行分离出 h264 ffmpeg -i test.raw -vcodec copy -an -f h264 tes…

机器学习(二)——线性回归模型、多分类学习(附核心思想和Python实现源码)

目录 关于1. 基本形式2. 线性回归2.1 单变量线性回归2.2 多元线性回归2.2 对数线性回归 3. 对数几率回归4. 线性判别分析5. 多分类学习5.1 拆分策略 6. 类别不平衡问题X 案例代码X.1 源码X.2 数据集&#xff08;糖尿病数据集&#xff09;X.3 模型效果 关于 本文是基于西瓜书&a…

【机器学习】22. 聚类cluster - K-means

聚类cluster - K-means 1. 定义2. 测量数据点之间的相似性3. Centroid and medoid4. Cluster之间距离的测量方式5. 聚类算法的类别6. K-mean7. 如何解决中心初始化带来的影响8. K-means问题&#xff1a;处理空集群9. 离群值的问题10. Bisecting K-means&#xff08;二分K-means…

【python_pandas_将列表按照某几列进行分组,再求和,按照原列表的字段顺序返回】

说明&#xff1a; 1、按照[“行描述”,”‘公司代码’, ‘科目代码’, ‘预算项目代码’] 进行分组。 2、对“贷方”列进行求和。 3、最后按照之前的表头顺序进行排序&#xff0c;返回结果列表。 #-*- coding:utf-8-*import pandas as pd def consolidate_salary_provisions(l…

【Vue框架】基础语法练习(1)

其实更多知识点已经在Vue.js官网十分清楚了&#xff0c;大家也可以去官网进行更细节的学习 https://cn.vuejs.org/ 说明&#xff1a;目前最新是Vue3版本的&#xff0c;但是Vue2已经深得人心&#xff0c;所以就是可以支持二者合用。它们最大的区别就是Vue3是组合式API&#xf…

公司如何防止员工泄密?十佳措施拒绝泄密,公司防泄密刻不容缓! (2024最强科普)

如何有效防止员工泄露机密&#xff1f; 作为公司的经营者&#xff0c;您是否意识到了商业秘密的重要性&#xff1f;您是否已经知道应该采取什么样的措施才能保护好自己的商业秘密&#xff1f; 员工的泄密行为不仅可能造成重大的经济损失&#xff0c;还会对企业的声誉造成严重…

[大模型]视频生成-Sora简析

参考资料&#xff1a; Sora技术报告https://openai.com/index/video-generation-models-as-world-simulators/4分钟详细揭密&#xff01;Sora视频生成模型原理https://www.bilibili.com/video/BV1AW421K7Ut 一、概述 相较于Gen-2、Stable Diffusion、Pika等生成模型的前辈&am…

linux中级(防火墙firewalld)

一。firewalld与iptables区别1.firewalld可以动态修改单条规则&#xff0c;不需要像iptables那样&#xff0c;修改规则后必须全部刷新才可生效。firewalld默认动作是拒绝&#xff0c;则每个服务都需要去设置才能放行&#xff0c;而iptables里默认是每个服务是允许&#xff0c;需…

【C/C++】memcpy函数的使用

零.导言 当我们学习了strcpy和strncpy函数后&#xff0c;也许会疑惑整形数组要如何拷贝&#xff0c;而今天我将讲解的memcpy函数便可以拷贝整形数组。 一.memcpy函数的使用 memcpy函数是一种C语言内存函数&#xff0c;可以按字节拷贝任意类型的数组&#xff0c;比如整形数组。 …

软件测试用例设计:从功能测试到边界值分析

功能测试介绍 功能测试是软件测试的一种重要方式&#xff0c;通过对软件的功能进行测试&#xff0c;来验证软件是否满足需求规格说明书中的各项功能要求。例如&#xff0c;对于一个简单的计算器软件&#xff0c;功能测试的用例可能包括加减乘除等基本运算&#xff0c;以及各种特…

[论文阅读]BERT-based Lexical Substitution

BERT-based Lexical Substitution 基于BERT的词汇替换 ACL2019 BERT-based Lexical Substitution - ACL Anthology 以前关于词汇替换的研究倾向于通过从词汇资源&#xff08;例如 WordNet&#xff09;中找到目标词的同义词来获得替代候选词&#xff0c;然后根据其上下文对候…

【Java SE 】特殊报错机制 ---> 异常 !

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 异常概念 1.1 算术异常 1.2. 空指针异常 1.3 数组越界异常 2. 异常的分类 2.1 编译时产生的异常 2.2 运行时产生的异常 3. 如何处理异常 3.1 异常…

使用kettle同步数据流程

使用kettle同步数据流程 一&#xff0e;Kettle软件安装&#xff08;解压即可使用&#xff09; 1.windows安装解压 pdi-ce-8.2.0.0-342.zip&#xff0c;点Spoon.bat启动kettle 2.Linux安装 把data-integration目录所有文件上传到服务器 二&#xff0e;安装数据库驱动把需要的…

两级运放的电路版图设计

电路版图文件PDK&#xff0c;88出&#xff0c;点击此处获取&#xff0c;24h秒发 PDF文件免费&#xff0c;已绑定 《集成电路版图设计课程》 课程设计&#xff08;大作业&#xff09;报告 2023 - 2024 学年第 1 学期 题 目 CMOS运算放大器的电路设计 专 业 …

Windows不支持配置NFS?还有什么注意事项?

我们前面介绍了如果配置Windows Server的NFS共享&#xff08;Windows Server2012 R2搭建NFS服务器&#xff09;&#xff0c;也介绍了Linux如何配置NFS共享&#xff08;CentOS 7搭建NFS服务器&#xff09;。但是&#xff0c;我最近发现一个问题&#xff0c;那就是桌面版的Window…

解锁测试能力密码:直击三问,成就卓越测试

在测试人眼中真的是“万物皆可测”&#xff0c;不管是物体&#xff08;铅笔&#xff0c;桌子&#xff09;、终端&#xff08;手机&#xff0c;电脑&#xff09;、软件代码、硬件设备等等。那是因为在底层逻辑中&#xff0c;我们搞清楚了其核心本质&#xff0c;总结起来有三个方…

AutoCAD2021

链接: https://pan.baidu.com/s/1GG93ZFRfV_30xTWtDiv3Ew 提取码: dx8i 简介&#xff1a;一键安装&#xff0c;已经破解。支持W7-w10-w11系统64位

伍光和《自然地理学》电子书(含考研真题、课后习题、章节题库、模拟试题)

《自然地理学》&#xff08;第4版&#xff09;由伍光和、王乃昂、胡双熙、田连恕、张建明合著&#xff0c;于2018年11月出版。作为普通高等教育“十一五”国家级规划教材&#xff0c;本书不仅适用于高校地球科学各专业的基础课程&#xff0c;还可供环境、生态等有关科研、教学人…

奥数与C++小学四年级(第十七题 弹跳板)

参考程序代码&#xff1a; #include <iostream> bool visited[101] {false}; // 标记1-100是否被访问过int main() {int step 1; // 初始步数int i 2; // 步长visited[1] true; // 标记位置1已访问while (true) {step i; // 跳到下一个位置if (step >…

206面试题(28~46)

206道Java面试题&#xff08;28~46&#xff09; 28.Array和ArrayList有什么区别&#xff1f; 一、基本性质 Array(数组) Array是一种固定大小的数据结构。 用于存储多个相同类型的元素。 创建时需要指定数组的大小&#xff0c;且长度定义完后不能改变。 ArrayList(动态数组)…