Lora训练Windows[笔记]

一. 使用kohya_ss的GUI版本(https://github.com/bmaltais/kohya_ss.git)

这个版本跟stable-diffusion-webui的界面很像,只不过是训练模型专用而已,打开的端口同样是7860。

1.双击setup.bat,选择1安装好xformers,pytorch等和cuda相关的库,然后可以control+C退出.将requirements.txt里面的内容除了“-e .”外复制到req.txt,然后在虚拟环境下({venv}\Scripts=E:\SD_WIN\kohya_ss\venv\Scripts)执行下面代码加速安装:

pip install -r {xxx}/req.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

安装结束后,重新双击setup.bat并选择1,查缺补漏。

2.双击gui.bat运行,这个和stable-diffusion-webui不一样,不会自动打开浏览器的。自行在chrome上输入“http://127.0.0.1:7860/”.

注意:默认选择的是dreambooth,不要一上来就设置哦,那玩意非常大,通常一次7G+,默认来20次,哈哈
3.选择Lora标签,SD1.5模块不需要考虑Accelerate launch,设置model,注意“Pretrained model name or path”最好先点 选择好路径,然后点 选好模型。类似这样
值得一提的是图片和数据应该是放一块的,比如C:/database/1_images/ 里面的数据应该是1个图片对应一个text文本,类似这样:
这个另外图中的pr是模块输出的文件名,我这是测试,随便按的。
如果不需要调整啥参数,默认是值就是给SD1.5用的,所以我跳过“Parameters”等,只需要填写好“Folders”
主要是填好输出路径,logs路径随便填。
4.start training
==========以上是SD-Scripts GUI版本训练SD1.5的测试================
本来我也想测一下SDXL版本的Lora训练的,奈何机器不行,机器显存8G+,内存16G+的,一直出错,可以考虑改一下“Accelerate launch”的“Mixed precision”=“no”,我这边改了后还是没法通过,主要还是机器问题,out of memory,哈哈

19:07:38-166454 INFO     Start training LoRA Standard ...
19:07:38-167453 INFO     Validating lr scheduler arguments...
19:07:38-168449 INFO     Validating optimizer arguments...
19:07:38-169446 INFO     Validating E:/SD_WIN/kohya_ss/logs existence and writability... SUCCESS
19:07:38-171441 INFO     Validating E:/SD_WIN/kohya_ss/outputs existence and writability... SUCCESS
19:07:38-172439 INFO     Validating E:/SD_WIN/stable-diffusion-webui/models/Stable-diffusion/sd_xl_base_1.0.safetensorsexistence... SUCCESS
19:07:38-173436 INFO     Validating C:/sdxl existence... SUCCESS
19:07:38-174433 INFO     Folder 1_images: 1 repeats found
19:07:38-186400 INFO     Folder 1_images: 8 images found
19:07:38-187399 INFO     Folder 1_images: 8 * 1 = 8 steps
19:07:38-188396 INFO     Regulatization factor: 1
19:07:38-189394 INFO     Total steps: 8
19:07:38-190389 INFO     Train batch size: 1
19:07:38-191387 INFO     Gradient accumulation steps: 1
19:07:38-192384 INFO     Epoch: 1
19:07:38-193383 INFO     Max train steps: 1600
19:07:38-193383 INFO     stop_text_encoder_training = 0
19:07:38-194380 INFO     lr_warmup_steps = 160
19:07:38-221307 INFO     Saving training config to E:/SD_WIN/kohya_ss/outputs\pr1_sdxl_20240515-190738.json...
19:07:38-256213 INFO     Executing command: E:\SD_WIN\kohya_ss\venv\Scripts\accelerate.EXE launch --dynamo_backend no--dynamo_mode default --mixed_precision no --num_processes 1 --num_machines 1--num_cpu_threads_per_process 2 E:/SD_WIN/kohya_ss/sd-scripts/sdxl_train_network.py--config_file E:/SD_WIN/kohya_ss/outputs/config_lora-20240515-190738.toml
19:07:38-263218 INFO     Command executed.
2024-05-15 19:08:39 INFO     Loading settings from                                                    train_util.py:3744E:/SD_WIN/kohya_ss/outputs/config_lora-20240515-190738.toml...INFO     E:/SD_WIN/kohya_ss/outputs/config_lora-20240515-190738                   train_util.py:3763
2024-05-15 19:08:39 INFO     prepare tokenizers                                                   sdxl_train_util.py:134
2024-05-15 19:08:41 INFO     update token length: 75                                              sdxl_train_util.py:159INFO     Using DreamBooth method.                                               train_network.py:172INFO     prepare images.                                                          train_util.py:1572INFO     found directory C:\sdxl\1_images contains 8 image files                  train_util.py:1519WARNING  No caption file found for 1 images. Training will continue without       train_util.py:1550captions for these images. If class token exists, it will be used. /1枚の画像にキャプションファイルが見つかりませんでした。これらの画像についてはキャプションなしで学習を続行します。classtokenが存在する場合はそれを使います。WARNING  C:\sdxl\1_images\videoplayback[(000859)2023-11-09-22-17-15].jpg          train_util.py:1557INFO     8 train images with repeating.                                           train_util.py:1613INFO     0 reg images.                                                            train_util.py:1616WARNING  no regularization images / 正則化画像が見つかりませんでした              train_util.py:1621INFO     [Dataset 0]                                                              config_util.py:565batch_size: 1resolution: (1024, 1024)enable_bucket: Truenetwork_multiplier: 1.0min_bucket_reso: 256max_bucket_reso: 2048bucket_reso_steps: 64bucket_no_upscale: True[Subset 0 of Dataset 0]image_dir: "C:\sdxl\1_images"image_count: 8num_repeats: 1shuffle_caption: Falsekeep_tokens: 0keep_tokens_separator:secondary_separator: Noneenable_wildcard: Falsecaption_dropout_rate: 0.0caption_dropout_every_n_epoches: 0caption_tag_dropout_rate: 0.0caption_prefix: Nonecaption_suffix: Nonecolor_aug: Falseflip_aug: Falseface_crop_aug_range: Nonerandom_crop: Falsetoken_warmup_min: 1,token_warmup_step: 0,is_reg: Falseclass_tokens: imagescaption_extension: .txtINFO     [Dataset 0]                                                              config_util.py:571INFO     loading image sizes.                                                      train_util.py:853
100%|██████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<00:00, 2025.13it/s]INFO     make buckets                                                              train_util.py:859WARNING  min_bucket_reso and max_bucket_reso are ignored if bucket_no_upscale is   train_util.py:876set, because bucket reso is defined by image size automatically /bucket_no_upscaleが指定された場合は、bucketの解像度は画像サイズから自動計算されるため、min_bucket_resoとmax_bucket_resoは無視されますINFO     number of images (including repeats) /                                    train_util.py:905各bucketの画像枚数(繰り返し回数を含む)INFO     bucket 0: resolution (1024, 1024), count: 8                               train_util.py:910INFO     mean ar error (without repeats): 0.0                                      train_util.py:915WARNING  clip_skip will be unexpected / SDXL学習ではclip_skipは動作しません   sdxl_train_util.py:343INFO     preparing accelerator                                                  train_network.py:225
accelerator device: cudaINFO     loading model for process 0/1                                         sdxl_train_util.py:30INFO     load StableDiffusion checkpoint:                                      sdxl_train_util.py:70E:/SD_WIN/stable-diffusion-webui/models/Stable-diffusion/sd_xl_base_1.0.safetensors
2024-05-15 19:08:47 INFO     building U-Net                                                       sdxl_model_util.py:192INFO     loading U-Net from checkpoint                                        sdxl_model_util.py:196
2024-05-15 19:11:37 INFO     U-Net: <All keys matched successfully>                               sdxl_model_util.py:202
2024-05-15 19:11:38 INFO     building text encoders                                               sdxl_model_util.py:205
2024-05-15 19:11:41 INFO     loading text encoders from checkpoint                                sdxl_model_util.py:258
2024-05-15 19:11:47 INFO     text encoder 1: <All keys matched successfully>                      sdxl_model_util.py:272
2024-05-15 19:12:15 INFO     text encoder 2: <All keys matched successfully>                      sdxl_model_util.py:276INFO     building VAE                                                         sdxl_model_util.py:279
2024-05-15 19:12:19 INFO     loading VAE from checkpoint                                          sdxl_model_util.py:284
2024-05-15 19:12:23 INFO     VAE: <All keys matched successfully>                                 sdxl_model_util.py:287
2024-05-15 19:12:36 INFO     Enable xformers for U-Net                                                train_util.py:2660
import network module: networks.lora
2024-05-15 19:12:40 INFO     [Dataset 0]                                                              train_util.py:2079INFO     caching latents.                                                          train_util.py:974INFO     checking cache validity...                                                train_util.py:984
100%|████████████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:00<?, ?it/s]INFO     caching latents...                                                       train_util.py:1021
100%|████████████████████████████████████████████████████████████████████████████████████| 8/8 [00:37<00:00,  4.75s/it]
2024-05-15 19:13:19 INFO     create LoRA network. base dim (rank): 8, alpha: 1                               lora.py:810INFO     neuron dropout: p=None, rank dropout: p=None, module dropout: p=None            lora.py:811INFO     create LoRA for Text Encoder 1:                                                 lora.py:902INFO     create LoRA for Text Encoder 2:                                                 lora.py:902
2024-05-15 19:13:20 INFO     create LoRA for Text Encoder: 264 modules.                                      lora.py:910INFO     create LoRA for U-Net: 722 modules.                                             lora.py:918INFO     enable LoRA for text encoder                                                    lora.py:961INFO     enable LoRA for U-Net                                                           lora.py:966
prepare optimizer, data loader etc.
2024-05-15 19:13:24 INFO     use 8-bit AdamW optimizer | {}                                           train_util.py:3889
Traceback (most recent call last):File "E:\SD_WIN\kohya_ss\sd-scripts\sdxl_train_network.py", line 185, in <module>trainer.train(args)File "E:\SD_WIN\kohya_ss\sd-scripts\train_network.py", line 429, in trainunet = accelerator.prepare(unet)File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\accelerate\accelerator.py", line 1213, in prepareresult = tuple(File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\accelerate\accelerator.py", line 1214, in <genexpr>self._prepare_one(obj, first_pass=True, device_placement=d) for obj, d in zip(args, device_placement)File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\accelerate\accelerator.py", line 1094, in _prepare_onereturn self.prepare_model(obj, device_placement=device_placement)File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\accelerate\accelerator.py", line 1334, in prepare_modelmodel = model.to(self.device)File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\torch\nn\modules\module.py", line 1160, in toreturn self._apply(convert)File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\torch\nn\modules\module.py", line 810, in _applymodule._apply(fn)File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\torch\nn\modules\module.py", line 810, in _applymodule._apply(fn)File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\torch\nn\modules\module.py", line 810, in _applymodule._apply(fn)[Previous line repeated 6 more times]File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\torch\nn\modules\module.py", line 833, in _applyparam_applied = fn(param)File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\torch\nn\modules\module.py", line 1158, in convertreturn t.to(device, dtype if t.is_floating_point() or t.is_complex() else None, non_blocking)
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 50.00 MiB. GPU 0 has a total capacty of 4.00 GiB of which 0 bytes is free. Of the allocated memory 10.68 GiB is allocated by PyTorch, and 226.95 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
Traceback (most recent call last):File "C:\Python310\lib\runpy.py", line 196, in _run_module_as_mainreturn _run_code(code, main_globals, None,File "C:\Python310\lib\runpy.py", line 86, in _run_codeexec(code, run_globals)File "E:\SD_WIN\kohya_ss\venv\Scripts\accelerate.EXE\__main__.py", line 7, in <module>File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\accelerate\commands\accelerate_cli.py", line 47, in mainargs.func(args)File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\accelerate\commands\launch.py", line 1017, in launch_commandsimple_launcher(args)File "E:\SD_WIN\kohya_ss\venv\lib\site-packages\accelerate\commands\launch.py", line 637, in simple_launcherraise subprocess.CalledProcessError(returncode=process.returncode, cmd=cmd)
subprocess.CalledProcessError: Command '['E:\\SD_WIN\\kohya_ss\\venv\\Scripts\\python.exe', 'E:/SD_WIN/kohya_ss/sd-scripts/sdxl_train_network.py', '--config_file', 'E:/SD_WIN/kohya_ss/outputs/config_lora-20240515-190738.toml']' returned non-zero exit status 1.
19:16:29-337912 INFO     Training has ended.

二、ComfyUI之插件Lora-Training-in-Comfy(https://github.com/LarryJane491/Lora-Training-in-Comfy.git),顺道也安装一下Image-Captioning-in-ComfyUI(https://github.com/LarryJane491/Image-Captioning-in-ComfyUI.git)和Vector_Sculptor_ComfyUI(https://github.com/Extraltodeus/Vector_Sculptor_ComfyUI.git)

在“custom_nodes”下clone它下来,重启安装,一般大概率是没法顺顺利利的,自行安装一些库,我这边列一下xformers和pytorch几个需要注意的库,其他的随意吧

accelerate                0.29.3
library                   0.0.0              E:\SD_WIN\ComfyUI_windows_portable\ComfyUI\custom_nodes\Lora-Training-in-Comfy\sd-scripts
torch                     2.3.0+cu121
torchaudio                2.3.0+cu121
torchvision               0.18.0+cu121
xformers                  0.0.26.post1

xformers优先安装,使用

{venv}/Scripts/pip.exe install xformers --index-url --index-url https://download.pytorch.org/whl/cu121
然后根据pytorch的版本提示安装torchaudio和torchvision我的例子:{venv}/Scripts/pip.exe install xformers==0.0.26.post1 torch==2.3.0+cu121 torchaudio==2.3.0+cu121 torchvision==0.18.0+cu121 --index-url https://download.pytorch.org/whl/cu121

其次要到“custom_nodes/Lora-Training-in-Comfy/sd-scripts/library”目录下运行

{venv}/Scripts/pip.exe install -e .

后面这一步没做的话,可能会遇到library模块加不来,要是直接用线上的安装就傻眼了,大概率是对不上号的。

重新双击run_nvidia_gpu.bat运行ComfyUI,添加节点“LJRE/LORA/LORA training in ComfyUI”,SD1.5的LORA只需要改三个配置就可以运行了。

output_dir最好是相对run_nvidia_gpu.bat所在的路径,这样得到的lora不需要复制,重启ComfyUI就可以测试。

这个插件有个大问题,就是很多机器没法正常运行,哈哈,没错,是真的。我建议有两点:

1.更新sd-scripts,将原来删了,在同路径下运行

​
git clone https://github.com/kohya-ss/sd-scripts.git​

安装参考上面

2.修改train.py。 搜索"python -m accelerate",改为“{vevn-path}/python.exe -m accelerate”,vevn-path应该是run_nvidia_gpu.bat同目录下的python_embeded的绝对路径。(注:下载一键安装包,要是clone的版本应该自己知道venv路径的)

最后补充一张根据图片提取文本的流程图

用到Comfyui_image2prompt(https://github.com/zhongpei/Comfyui_image2prompt.git),这玩意要是完整几乎不太可能,低端机器下wd-swinv2-tagger-v3-hf足够了。等有空再聊聊这个插件的安装经历。

当然也可以安装其他的插件代替的,WD14是不太可能了,还有其他的插件可以考虑。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

malloc_consolidate

此文章用于详细介绍malloc_consolidate。 众所周知&#xff0c;fastbin一般是不能合并&#xff0c;但在malloc_consolidate中是个例外。 1.触发机制 首先构造这样的堆块结构 一个0x40的堆块在fastbin中&#xff0c;一个0x110的堆块在unbin中 随后我们尝试分配一个0x300的堆…

[ROS 系列学习教程] 建模与仿真 - URDF 建模实践

ROS 系列学习教程(总目录) 本文目录 一、机器人结构组成二、新建功能包三、编写launch文件四、创建底盘五、添加轮子六、添加其他部件七、解决部分实体位于地面以下的问题 前文介绍了URDF建模与URDF语法&#xff0c;接下来介绍怎么使用URDF从零构建一个机器人模型并在rviz中显示…

Linux网络编程——HTTP协议的理解与运用

目录 前言 一、认识URL 二、认识HTTP样例 三、HTTP的报头内容 1.url 2. Content-Type 3.Method 方法 1.GET方法 2.POST方法 4、状态码 5.cookie和session 前言 我们知道&#xff0c;协议就是一种约定&#xff0c;客户端与服务端统一的用这种约定进行传输数据。我们…

K210开发板MicroPython开发环境搭建

一、安装CanMV IDE开发软件 1、进入如下连接 https://developer.canaan-creative.com/resource 2、点击下载 3、下一步 4、修改安装路径&#xff0c;下一步 5、接受许可下一步 6、下一步 7、安装 8、完成 9、区域①菜单栏&#xff1a;操作文件&#xff0c;使用工具等。…

Hadoop3:HDFS副本节点选择逻辑讲解

一、副本节点选择&#xff08;机架感知&#xff09; 说明 第一个副本&#xff0c;因为我们的client可能是web页&#xff0c;也可能是shell终端。 如果是web页&#xff0c;则随机选取一个节点&#xff0c;如果是shell终端&#xff0c;则选择当前shell终端所在的节点。 节点距离最…

Spring编程使用DDD的小把戏

场景 现在流行充血领域层&#xff0c;在原本只存储对象的java类中&#xff0c;增加一些方法去替代原本写在service层的crud&#xff0c; 但是例如service这种一般都是托管给spring的&#xff0c;我们使用的ORM也都托管给spring&#xff0c;这样方便在service层调用mybatis的m…

计网面试干货---带你梳理常考的面试题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、HTTP和HTTPS的区别 1.安全性&#xff1a;HTTPS通过SSL/TLS协议对数据进行加密处理&#xff0c;有效防止数据在传输过…

函数栈帧的创建和销毁(详细理解)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;c语言课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 问题&#xff1a; 1.ebp&#xff0c;esp两个寄存器用来维护函数栈帧 2.main函数也一个函数&#…

Darknet+ros+realsenseD435i+yolo(ubuntu20.04)

一、下载Darknet_ros mkidr -p yolo_ws/src cd yolo_ws/src git clone --recursive https://github.com/leggedrobotics/darknet_ros.git #因为这样克隆的darknet文件夹是空的&#xff0c;将darknet_ros中的darknet的文件替换成如下 cd darknet_ros git clone https://github.…

2024年湖北省安全员-B证证模拟考试题库及湖北省安全员-B证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年湖北省安全员-B证证模拟考试题库及湖北省安全员-B证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;湖北省安全员-B证证模拟考试题库是根据湖北省安全员-B证最新版教材&#xff0c;湖北省安全员-B证大…

错误: 找不到或无法加载主类问题(已解决)

今天在虚拟机中安装了idea2023.2的版本&#xff0c;运行代码时发现错误找不到主类&#xff01; 直接说结论&#xff1a; 我先clean了一下target&#xff0c;然后重新build&#xff0c;发现maven报错了&#xff0c;idea2023.2默认使用了内置的maven&#xff0c;然后我切换了一下…

Linux基础之僵尸进程与孤儿进程

目录 一、僵尸进程 1.1 什么是僵尸进程 1.2 为什么要有僵尸状态 1.3 观察我们的僵尸状态 1.4 关于僵尸进程的小Tip 二、孤儿进程 2.1 什么是孤儿进程 一、僵尸进程 1.1 什么是僵尸进程 在上一篇文章中&#xff0c;我们有提到过进程的死亡状态的概念&#xff0c;而我们的…

Transformer 模型

文章目录 前言一、模型结构 前言 Transformer 模型是由谷歌在 2017 年提出并首先应用于机器翻译的神经网络模型结构。机器翻译的目标是从源语言&#xff08;Source Language&#xff09;转换到目标语言&#xff08;Target Language&#xff09;。Transformer 结构完全通过注意力…

IDC:2023年中国IT安全软件市场同比增长4.7%

IDC最新发布的《中国IT安全软件市场跟踪报告&#xff0c;2023H2》显示&#xff0c;2023年下半年中国IT安全软件市场厂商整体收入约为169.8亿人民币&#xff08;约合23.5亿元美元&#xff09;&#xff0c;同比上升2.7%。结合全年数据&#xff0c;2023全年中国IT安全软件市场规模…

Linux命令使用

一、ls tree clear 1.1 ls ls&#xff1a;查看当前目录下的文件名ls 目录名&#xff1a;查看指定目录下的文件名ls /&#xff1a;查看根目录下的文件名ls -a&#xff1a;查看当前目录下的所有文件名&#xff0c;包括隐藏文件ls -l&#xff1a;查看当前目录下文件的详细信息…

Java中的数组、Set、List、Map类型的互相转换总结

序言 数组、Set、List、Map是Java语言非常常用的几种数据类型&#xff0c;他们之间存在着千丝万缕的联系。关于底层的数据结构我这里就不再多说啦&#xff0c;直接从应用出发&#xff0c;总结他们之间的转换方法&#xff0c;并给出推荐方法。 大家可以点赞收藏等到需要的时候…

【JAVA】嵌入式软件工程师-2025校招必备-详细整理

一、Java 基础 1.JDK 和 JRE 有什么区别&#xff1f; jdk&#xff1a;java development kit jre&#xff1a;java runtime Environment jdk是面向开发人员的&#xff0c;是开发工具包&#xff0c;包括开发人员需要用到的一些类。 jre是java运行时环境&#xff0c;包括java虚拟机…

SVDD(Singing Voice Deepfake Detection,歌声深度伪造检测)挑战2024

随着AI生成的歌声快速进步&#xff0c;现在能够逼真地模仿自然人类的歌声并与乐谱无缝对接&#xff0c;这引起了艺术家和音乐产业的高度关注。歌声与说话声不同&#xff0c;由于其音乐性质和强烈的背景音乐存在&#xff0c;检测伪造的歌声成为了一个特殊的领域。 SVDD挑战是首个…

电脑常用的PDF阅读器-嗨动PDF编辑器!带你详细了解它

电脑常用的PDF阅读器-嗨动PDF编辑器&#xff01;在数字化信息爆炸的时代&#xff0c;PDF格式的文件因其易于打印和保留原始格式等优点&#xff0c;成为了人们日常工作和学习的常用格式。而对于PDF文件的处理&#xff0c;一款功能强大、操作简便的PDF阅读器是必不可少的。今天&a…

SprintBoot案例-增删改查

黑马程序员JavaWeb开发教程 文章目录 一、准备工作1. 准备数据库表1.1 新建数据库mytlias1.2 新建部门表dept1.3 新建员工表emp 2. 准备一个Springboot工程2.1 新建一个项目 3. 配置文件application.properties中引入mybatis的配置信息&#xff0c;准备对应的实体类3.1 引入myb…