Lora模型训练的参数-学习笔记

任何一个lora都会有三重属性,易调用性、泛化性和还原性,任何一个lora只能完美满足其中的两项;

  • 易调用性:在已调用lora后,还需要多少提示词才能让该lora完全生效;
  • 泛化性:能不能还原lora训练素材中的局部特征,能不能和其他lora、模型、标签兼容生效;
  • 还原性:在lora完全生效之后生成图片和训练素材之间的相似度

但具体训练的目标和思路,之后再说,先记录一下对训练参数的认识。

虽然我认为训练参数,其实在lora训练中,并不是最重要的。

最重要的还是训练素材,优秀的、符合要求的训练素材,才是炼丹成功的前提和关键。

训练模型,也像是炒菜,训练素材是菜。

至于训练参数,在我看来,不过是炒菜时的佐料。

如果自己的训练素材是一坨屎,那么即使掌握了训练参数,也不过是在屎上雕花...

阿弥陀佛,有点儿粗俗了。

但不懂训练参数也很麻烦,毕竟就算你有一堆昂贵的食材,却在炒菜的时候下料过猛,那也会破坏食材的鲜美。

学习的过程,已经是吃的百家饭,完全记不得到底谁家饭更香....

模型保存精度

一个字节(Byte)=8位

一个float32的数值=32位(bit)=4个字节(Byte)=4B

那么一个1000x1000的矩阵=10^6个数值=4*10^6B ≈ 4*10^3KB≈4MB

如果是float16的数值,就表示一个数值只占2B,所以整体的参数占内存就少一半

详解FP16和BF16的区别

batchsize

epoch\iteration\batchsize之间的关系

一个epoch:表示所有样本都训练过1次

一个iteration:表示一次反向传播,逐层对参数进行迭代

一个batchsize:表示有多少个样本进行前向计算后,再进行的一次反向传播

深度学习中的batch理解:https://blog.csdn.net/Dontla/article/details/104373682

一般来说,假设样本总数是all

  • 如果batchsize=1,表示一个样本经过1次前向计算,就立刻开始1次反向传播,逐层迭代参数
  • 那么一个epoch就会有 all 次iteration
  • 如果batchsize=10,表示一个样本经过1次前向计算,直到10个样本都完成了10次前向计算后,把这10个样本各自更新的值相加后,再开始1次反向传播,逐层迭代参数
  • 如果batchsize=all,表示一个样本经过1次前向计算,直到所有样本都完成了所有的前向计算后,把所有样本各自更新的值相加后,再开始1次反向传播,逐层迭代参数

batchsize=1,所有样本(例如500个样本)就要经过500次的前向计算+500次的反向传播

batchsize=500,500个样本只要经过500次的前向计算+1次的反向传播

虽然看上去,batchsize越大,好像耗时更短。

但实际如果是从训练结果的收敛上看。batchsize=1反而要比batchsize=500的快,为什么呢?。

batchsize=1的训练过程

这里需要知道,batchsize=1时的计算过程

  • 1次反向传播是要经过逐层的迭代参数计算,所以1次反向传播速度,要比前向传播久
  • 但是,根据统计概率来说,1个样本的值,与另外样本的值变化差距会比较大,也就是说,如果batchsize=1,那么每次的反向传播,参数都会有比较大的改变,这会导致两个影响:
  • 影响1:收敛速度比较快,参数变化大,但经过所有样本的依次迭代,它最终有可能会收敛到某个范围(未必会收敛到极值)
  • 影响2:可能不会收敛,因为每个样本都对参数进行了更新,那么很难收敛到极值(可能会震荡在某个范围)
  • 解决它不能收敛到极值的方式:降低学习率

batchsize=all的训练过程

如果是batchsize=all时的计算过程,

  • 每次反向传播时,参数迭代的变化不会太大,即每次收敛速度相对更慢,需要更多轮的epoch迭代,才能达到与batchsize=minibatch时的相同精度:
  • 根据概率统计,每次迭代时,虽然是经过所有样本前向计算后才进行一次反向传播逐层迭代,但因为所有样本的均值差异并不大,这就导致了两次迭代的参数变量不会太大,相当于每次反向传播的迭代收敛比较慢,对于初始的随机参数来说,要收敛到极值就需要比较多次(多次epoch)的反向传播迭代,耗时更长。
  • 但也有个优点,就是可以收敛到极值,在训练集上几乎不会产生震荡,这会对训练数据产生过拟合,泛化能力低
  • 但是如果batchsize太大,一次将十万条数据扔进模型,很可能会造成内存溢出,而无法正常进行训练。

batchsize=minibatch的训练过程

batchsize=小批量minibach时的计算过程

  • 相对于batchsize=1,minibatch可以降低震荡效果,适当拟合
  • 相对于batchsize=all,minibatch可以适当提高收敛速度,避免过拟合,避免爆显存

在合理范围内,增大batch size的好处

1)内存利用率提高了,大矩阵乘法的并行化效率提高。
2)跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
3)在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
随着 Batch_Size 增大,处理相同数据量的速度越快。
随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。

盲目增大 Batch_Size 有何坏处

1Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。
2)太大的batch size 容易陷入sharp minima,泛化性不好。
3Batch_Size 太大,收敛太慢,算法在 200 epoch 内不收敛。

如何平衡batchsize的大小?

batchsize太大或者太小都不好。所以 batch size 的值越大,梯度也就越稳定,而 batch size 越小,梯度具有越高的随机性,但如果 batch size 太大,对于内存的需求就更高,同时也不利于网络跳出局部极小点。所以,我们需要设置一个合适的batchsize值,在训练速度和内存容量之间寻找到最佳的平衡点。

batchsizeepoch的平衡

①一般在Batchsize增加的同时,我们需要对所有样本的训练次数(也就是后面要讲的epoch)增加(以增加训练次数达到更好的效果)这同样会导致耗时增加,因此需要寻找一个合适的batchsize值,在模型总体效率和内存容量之间做到最好的平衡。

②由于上述两种因素的矛盾,batchsize增大到某个时候,达到时间上的最优。由于最终收敛精度会陷入不同的局部极值,因此batchsize增大到某些时候,达到最终收敛精度上的最优。

batchsizelearning_rate的平衡

大的batch_size往往建议可以相应取大点learning_rate, 因为梯度震荡小,大learning_rate可以加速收敛过程,也可以防止陷入到局部最小值

而小batch_size用小learning_rate迭代,防止错过最优点,一直上下震荡没法收敛(这也是一个小trick

batchsizelearningrate这块,有专家说,没有超过几十倍的batchsize,不需要调学习率)

补充认识:学习率

图片简单(特征明显相近),把学习率低一些,因为开高了容易无法收敛,容易震荡。

图片复杂,把学习率开高一些,因为学习路程比较大,要加速(如果学习率很低,那就需要更多次的参数迭代,才能收敛到某个区域的精度)

问题5:文本编码器TE对学习率的敏感度,要远高于噪声预测器UNET

补充认识潜在扩散模型LDM

正如前文所述,扩散模型主要用来生成高质量的图像。稳定扩散模型(StableDiffusion)可以视为一种特殊的扩散模型,学术上叫做潜在扩散模型(Latent Diffusion model),相关概念来自于论文《 High-Resolution Image Synthesis with Latent Diffusion Models》。简单来说,原始的扩散模型通常会消耗更多的内存,因此创建了潜在扩散模型,可以在被称为潜在低维度特征空间进行扩散过程。更进一步,扩散模型是机器学习模型,它被训练来在带有高斯噪声的图像上逐步进行去噪,以获得高质量图像。而潜在扩散模型被训练成在低纬度的特征空间上进行同样的过程。

一般来说,潜在扩散模型LDM含有三个组件:

  • text encoder 文本编码器,这里主要指基于CLIP的文本编码器
  • autoencoder 自编码器,这里主要指Variational Auto Encoder,也被简称为VAE
  • Unet 扩散模型

本文先从最基础的text encoder讲起,主要介绍其在扩散过程中的用途。

CLIP Text Encoder作用

补充认识CLIP

SD使用的是OpenAi的CLIP预训练模型,即别人训练好的拿来就用。CLIP的训练 用到了Text-Image配对的数据集,大概4亿张,主要是通过网络爬取图片以及相应的标签。

CLIP的作用,就是将文本转换为语言信息并使其与图像信息在UNet中采用Attention更好的偶合到一起,成为了文本和图像之间的连接通道。

(简单来说:CLIP是一个已经被训练好的模型,文本和图像已经训练出一一对应的关系)

补充认识SD中是如何应用CLIP

CLIP的网络结构由两部分组成:图像 Image Encoder + 文字 Text Encoder。

其中Text Encoder用来提取文本特征, Image Encoder用来提取图像特征。

Stable Diffusion中只用到了Text Encoder模块。

CLIP Text Encoder模型将输入的文本Prompt进行编码,转换成Text Embeddings(文本的语义信息),作为UNet网络的Context输入,并在UNet网络中的CrossAttention模块中,结合提取特征F对生成图像的内容进行一定程度的控制与引导;

(我们需要给出提示词Prompt, 然后利用CLIP模型将文本转换成嵌入表示Context,作为UNet的一个输入。

CLIP text Encoder 以文本作为输入,并在潜在特征空间中生成文本嵌入(text embeddings);我们也可以通过CLIP模型对图像进行特征编码一样。

补充认识UNET&&Text_encoder

UNet模型是一种用于图像分割的深度学习模型,它基于卷积神经网络(CNN)构建。UNet模型的特点是采用编码器-解码器结构,编码器用于提取图像特征,解码器则用于将特征图恢复到与原始图像相同的尺寸,从而进行像素级的分类。此外,UNet模型还引入了跳跃连接,将编码器的特征图与解码器的特征图进行拼接,以提高分割的精度

通常来说一个U-Net包含两个输入:

‒ Noisy latent/Noise : 该Noisy latent主要是由VAE编码器产生并在其基础上添加了噪声;

(或者如果我们想仅根据文本描述来创建随机的新图像,则可以采用纯噪声作为输入。)

‒ Text embeddings: 基于CLIP的将文本输入提示转化为文本语义嵌入(embedding)

https://zhuanlan.zhihu.com/p/521151393

所以大模型本身的CLIP已经能够对准备用来训练lora的素材:图片和提示词,大模型已经可以产生一个对应关系了。

但现在lora要自己再专门去做这个(图片和提示词)素材的一一对应训练,然后把自己训练出来的参数,更新到大模型里边。

lora训练的提示词参数(即上述的文本向量)和图片特征的参数(即上述的图片向量)是分别需要进行迭代训练的。

这里边的训练效果,我猜测:

  • (整体对应)把共性的图像特征,一一对应所有图片的相同触发词。
  • (局部对应)把相似的图像特征,再一一对应符合该特征图片提示词。

就好像中国人:符合全体中国人民。

但汉族:对应的是中国人中的汉族人民

于是在训练过程中,同时迭代提示词的参数向量,这个提示词的参数向量不仅仅是受到大模型的影响,同时会收到lora模型的影响。

那因为大模型本身就有标签(即提示词)跟图像的对应关系,比如1horse=一只马的图片。

但如果在lora训练中,加强了1horse和一只鹿图片的对应训练。

那么SD在用lora生成图片的时候,就需要考虑这个horse,到底是受大模型影响比较严重,还是受lora模型影响比较严重。【很想测试一下,训练一只鹿的图片,但标签都是马horse,试试指鹿为马】

那么就要考虑一个问题:怎样提高lora对提示词的敏感程度?

什么意思呢?

其实就是,这个提示词要怎么跟lora关系更大?

是不是让lora的提示词参数向量,训练的拟合程度更高一些??比如降低文本编码器的学习率,同时降低Unet编码器的学习率,提高batchsize,然后增多它们的迭代步数。

这样是不是就可以拟合程度更高?

哦?所以其实拟合程度高,是指的提示词受lora影响比较大,受模型影响比较小?

那至于上边的text_encoder_lr,和unet_lr,它们之间是没有关系的。

text_encode_lr其实是用来调节提示词的向量参数,unet_lr是用来图片特征向量的?我不太确定

这是一篇,我认为写的肥肠适合入门观看的理解入门,太棒了!!!:https://jishuzhan.net/article/1777179120795389953

  • Unet为什么要加噪再去噪,有什么意义?

加噪再去噪,本质上其实是用多重高斯分布去拟合真实的图像分布,然后用拟合好的多重高斯分布,去重新生成一张新的图片。

  • Unet去噪的过程,跟text encoder生成的文本向量有什么关系呢?

又是一篇惊喜好文!!!!讲解非常详细的Unethttps://zhuanlan.zhihu.com/p/696562930

Text embbeding在Unet的去噪的过程,参与进来了。

虽然不确定会怎么影响,但问题不大,至少知道是参与进来了。

问题6:优化器是干嘛用的 ?(不考虑,默认用)

  • 问题7:学习率调度器是干嘛用的?

其实就是学习率的改变函数,之前基础的学习率都是固定的。

但在训练过程中,我们一般更倾向于让学习率在训练初期能够比较大,加快前期的训练速度。然后在临近拟合或者是到训练后期能让学习率逐渐变小,避免训练结果出现震荡,难以拟合达到局部最优。

另外学习率的合理设置,比如余弦退火学习器啥的,可以避免训练陷入局部最优点。

所以提供了很多种学习率随训练过程产生变化的函数,就叫做学习率调度器。

问题8:什么是学习率周期。-不重要,不管他

NetworkRank(维度)和Alpha

问题9:NetworkRank(维度)和NetworkAlpha有什么用?

NetworkRank(维度):抽取出来训练的行列,直接影响lora模型的大小

如果设置为128,lora模型的大小约为144M(标准)

最小值如果是8,炼出来的lora模型只有不到10M

如果图片简单,那么rank太高,容易出现过拟合(AI会学习到很多无关紧要的细节和画风等等)

【跟B站花了钱的某个博主说的不一致】

其实NetworkRank越大,用于训练的画面信息、lora训练中会改变更多的大模型参数就会越多,所以lora影响力越大,大模型因为被lora改变了,所以大模型对生成的图片影响力更小,这就导致lora会更容易出现过拟合!

如果NetworkRank越小,用于训练的画面信息,更新大模型的参数就越小,那么大模型影响就更多一些,一定程度上可以避免lora过拟合。

不同的Lora类型,对rank是有限制的,洛哈哈Loha&locon可以简单了解一下

NetworkAlpha:调节Lora对原大模型影响作用的参数。

Alpha和Rank的比值等于使用Lora时的“减弱权重”程度

(什么是减弱权重程度)

因为Lora是整个神经网络训练过程中比较小的一部分,如果它变得太小,机器就学不到东西,看不到明显效果。

所以一开始就固定设置Lora训练的部分,权重值很大

Lora在学习过程中,权重是恒定速率减弱的,会让原本固定的Lora权重值渐渐变小。

那这个NetworkAlpha就是用来调节它在训练过程中的减弱率。——有待商榷

Rank表示Lora抽取出来学习的数据维度(参数)(在一定程度上与数据量的大小成正相关,表示数据量大小)

Rank越大,那lora权重就会更大。

(因为你学习的数据量大,那lora改变大模型的参数量就会比较大,导致lora更拟合。所以换个说法,就会让lora权重大)

Alpha越大,那Lora权重就会越小,因为Alpha是。

所以Alpha/Rank→意味着lora权重的改变程度。

类似于一种整体的学习率。

  • 那如果scaling = Alpha/Rank,scaling越大,表示权重变化程度比较大,这种情况下训练速度比较快,同时也比较容易出现震荡,难以收敛。
  • 这就需要将学习率learning_rate降低,才可以避免震荡,实现一个比较好的收敛效果。
  • 那如果scaling = Alpha/Rank,scaling越小,表示权重变化程度比较小,这种情况下训练速度比较慢,有可能难以实现拟合(欠拟合)。
  • 这就需要将学习率learning_rate提高,才可以加快学习速度,实现适当的拟合。【这也是为什么秋叶的炼丹炉在alpha旁给出的提醒:使用较小的alpha,需要提升学习率】

单张重复次数

单张重复次数,到底有什么用?

我可否认为是单张图片重复多次,相当于是一个文件夹里有10张这个图片。

【姑且这么认为吧】

一般来说,要求泛化能力强的文件夹,重复次数不宜过多。

但要求拟合能力强的文件夹,重复次数可以多一些。

关于学习速率的参数:

混合精度-fp16\fp32,浮点数

默认fp16,差别不大,但速度更快

缓存潜变量Cache Latents和缓存潜变量到磁盘

潜变量:潜变量就是被VAE转化为向量的数据

缓存潜变量

开启缓存潜变量,就会先一次性转换后缓存到显存里,

如果不开启,就会每训练一次,就转换一次(拖慢训练速度)

缓存潜变量到磁盘

开启缓存潜变量到磁盘,可以保存到本地,进行连续训练(它会在单次训练里稍微降速,因为需要读取本地磁盘)

开启xformers

交叉注意力cross attention:xformers,降低显存需求并显著提高速度

内存高效注意率:压缩显存使用,低配用户可以考虑降低爆显存风险(但效果比xformers差一些)

VRAM是什么?显存吗?

控制台参数认识:生成速度、训练速度

1.6 it/s,每秒可以跑多少步数,或多少迭代数iteration/second

34 s/it,每步或每次迭代需要多少秒。

BatchSize和Rank都会影响生成或训练速度。

avr_loss=0.134,平均损失函数数值

loss越低,AI拟合越高

训练过程loss应该是逐渐降低,但如果loss只在小数点3、4位进行小范围变动,大概率就是过拟合了

如果loss在训练过程中忽高忽低,就是欠拟合

【不同训练集的loss值标准不同,重点关注loss的变化过程】

但有时候Loss值丢失NaN,因为有些参数过于极端,导致爆显存

  • 比如text_encoder_lr,如果设置的太高,就会出现梯度爆炸的情况,Loss无法收敛越来越大

什么是正则化?

刚做完正则化训练的课,有个很惊奇的发现,之后有时间了,再抽空去梳理吧

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

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

相关文章

新电脑怎么装系统?一文带你轻松搞定

对于刚刚购置的新电脑,安装操作系统是必不可少的一步。一个高效、稳定的操作系统能让您的新电脑发挥出最佳性能。本文将介绍新电脑怎么装系统的3种方法,每种方法都提供了详细的步骤说明,帮助您顺利完成系统安装。 方法1:通过网络安…

Java中锁的全面详解(深刻理解各种锁)

一.Monitor 1. Java对象头 以32位虚拟机位例 对于普通对象,其对象头的存储结构为 总长为64位,也就是8个字节, 存在两个部分 Kclass Word: 其实也就是表示我们这个对象属于什么类型,也就是哪个类的对象.而对于Mark Word.查看一下它的结构存储 64位虚拟机中 而对于数组对象,我…

基于python旅游景点满意度分析设计与实现

1.1研究背景与意义 1.1.1研究背景 随着旅游业的快速发展,满意度分析成为评估旅游景点质量和提升游客体验的重要手段。海口市作为中国的旅游城市之一,其旅游景点吸引了大量游客。然而,如何科学评估和提升海口市旅游景点的满意度,…

百度网盘Android一二面凉经(2024)

百度网盘Android一二面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《百度网盘Android一二面凉经(2024)》。 面试职位: 网盘主端研发组_Android高级研…

芯课堂 | SWM34S系列驱动TFT屏走线布局设计参考

​在TFT屏驱电路设计中,好的PCB板布局走线可以让调试更轻松,让EMC测试更容易通过,关于34S的PCB板设计应注意以下几点: 关于布局 在布局中需要尽量靠近MCU的元器件有:晶振电路所有元器件、复位电路RC、CAP滤波电容以及…

【AI大模型Agent探索】Qwen-Agent:基于Qwen的LLM应用开发框架

系列篇章💥 No.文章1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用4【Q…

实战打靶集锦-31-monitoring

文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 ssh服务4.2 smtp服务4.3 http/https服务 5. 系统提权5.1 枚举系统信息5.2 枚举passwd文件5.3 枚举定时任务5.4 linpeas提权 6. 获取flag 靶机地址:https://download.vulnhub.com/monitoring/Monitoring.o…

Chapter12 屏幕后处理效果——Shader入门精要学习笔记

Chapter12 屏幕后处理效果 一、屏幕后处理概述以及基本脚本系统1.OnRenderImage 函数 —— 获取屏幕图像2.Graphics.Blit 函数 —— 使用特定的Shader处理3.在Unity中实现屏幕后处理的基本流程4.屏幕后处理基类 二、调整亮度、饱和度和对比度1.BrightnessSaturationAndContrast…

[计算机基础]一、计算机组成原理

计算机组成原理的考察目标为: 1. 掌握单处理器计算机系统中主要部件的工作原理、组成结构以及相互连接方式。 2. 掌握指令集体系结构的基本知识和基本实现方法,对计算机硬件相关问题进行分析,并能够对相关部件进行设计。 3. 理解计算机系统的…

001、Mac系统上Stable Diffusion WebUI环境搭建

一、目标 如标题所述,在苹果电脑(Mac)上搭建一套Stable Diffusion本地服务,以实现本地AI生图目的。 二、安装步骤 1、准备源码【等价于准备软件】 # 安装一系列工具库,包括cmake,protobuf,rust,python3.10,git,wge…

C#学习-刘铁猛

文章目录 1.委托委托的具体使用-魔板方法回调方法【好莱坞方法】:通过委托类型的参数,传入主调方法的被调用方法,主调方法可以根据自己的逻辑决定调用这个方法还是不调用这个方法。【演员只用接听电话,如果通过,导演会…

请你谈谈:spring bean的生命周期 - 阶段2:Bean实例化阶段

在Spring框架中,Bean的实例化是Bean生命周期中的一个重要阶段。这个过程包括两个关键的子阶段:Bean实例化前阶段和Bean实例化阶段本身。 BeanFactoryPostProcessor:BeanFactoryPostProcessor是容器启动阶段Spring提供的一个扩展点&#xff0…

智慧城市遐想

很少有人会考虑自己居住的地方。我的意思是真正考虑效率、经济、美观和标准。我们甚至很少抬起头,将目光从智能手机上移开,去欣赏风景或享受城市风光。而且通常这是有道理的。 往日之城 过去,城市建在水源旁,距离河流或湖泊不超过一英里,这样才可以供水。现在,夜间飞越…

海豚调度器(DolphinScheduler)集群搭建详细笔记

海豚调度器集群搭建笔记 1.DolphinScheduler Cluster部署1.1 集群部署规划1.2 集群准备工作1.3 初始化数据库1.4 修改安装环境配置1.5 安装DolphinScheduler1.6 启停命令1.7 登录 DolphinScheduler UI 1.DolphinScheduler Cluster部署 分布式去中心化易扩展的工作流任务调度系…

中国机器视觉行业上市公司市场竞争格局分析

中国机器视觉产业上市公司汇总:分布在各产业链环节 机器视觉就是用机器来代替人眼做测量和判断的系统,机器检测相较于人工视觉检测优势明显。目前,我国机器视觉产业的上市公司数量较多,分布在各产业链环节。具体包括:…

【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 配置篇 -- flash的使用 --(八)

💌 所属专栏:【BES2500x系列】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#x1f49…

ClickHouse集成LDAP实现简单的用户认证

1.这里我的ldap安装的是docker版的 docker安装的化就yum就好了 sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo systemctl start docker 使用下面的命令验证sudo docker run hello-world docker pull osixia/openl…

RK3568笔记三十九:多个LED驱动开发测试(设备树)

若该文为原创文章,转载请注明原文出处。 通过设备树配置一个节点下两个子节点控制两个IO口,一个板载LED,一个外接LED。 一、介绍 通过学习设备树控制GPIO,发现有多种方式 一、直接通过寄存器控制 二、通过设备树,但…

windows和linux的等保加固测评的经验分享

一头等保加固测评的牛马,需要能做到一下午测评n个服务器 接下来就讲讲如何当一头xxxxxxxxx》严肃的等保测评加固的经验分享( 一、window等保 首先你要自己按着教程在虚拟机做过一遍(win2012和win2008都做过一遍,大概windows的…

MATLAB科研数据可视化教程

原文链接:MATLAB科研数据可视化https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247609462&idx3&snf7043936fc5ee42b833c7c9f3bcd24ba&chksmfa826d91cdf5e4872eb275e5319b66ba6927ea0074fb2293fe1ca47d6aedf38ab91050be484c&token1551213…