当前位置: 首页 > news >正文

如何训练Stable Diffusion 模型

训练Stable Diffusion模型是一个复杂且资源密集的过程,通常需要大量的计算资源(如GPU或TPU)和时间。Stable Diffusion是一种基于扩散模型的生成式AI,能够根据文本提示生成高质量的图像。它的训练过程涉及多个步骤,包括数据准备、模型配置、训练参数调整等。以下是训练Stable Diffusion模型的基本步骤和注意事项:

1. 环境准备

1.1 安装依赖项

首先,确保你有一个适合深度学习的开发环境。你可以使用以下命令安装必要的依赖项:

# 创建虚拟环境并激活
python -m venv stable-diffusion-env
source stable-diffusion-env/bin/activate  # Linux/MacOS
# 或者
stable-diffusion-env\Scripts\activate  # Windows# 安装PyTorch和其他依赖项
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113  # CUDA 11.3版本
pip install diffusers transformers accelerate bitsandbytes safetensors

diffusers 是 Hugging Face 提供的一个库,专门用于实现和训练扩散模型。transformers 用于处理文本编码器(如CLIP),accelerate 用于分布式训练和优化,bitsandbytes 用于8位优化,safetensors 用于安全加载模型权重。

1.2 下载预训练模型

Stable Diffusion的训练通常从一个预训练的模型开始,这可以大大减少训练时间和资源消耗。你可以从Hugging Face Model Hub下载预训练的Stable Diffusion模型:

from diffusers import StableDiffusionPipelinemodel_id = "CompVis/stable-diffusion-v1-4"  # 选择一个预训练模型
pipeline = StableDiffusionPipeline.from_pretrained(model_id)
pipeline.save_pretrained("./pretrained_model")

2. 数据准备

2.1 数据集选择

Stable Diffusion模型的训练需要大量的高质量图像和对应的文本描述。你可以使用现有的公开数据集,如LAION-5B、COCO、Flickr30K等,或者创建自己的定制数据集。确保数据集中的图像和文本描述之间有良好的对应关系。

2.2 数据预处理

你需要对数据进行预处理,以便其符合模型的输入格式。通常包括以下步骤:

•图像缩放:将图像调整为固定的分辨率(如512x512)。

•归一化:将像素值归一化到[0, 1]或[-1, 1]范围内。

•文本编码:使用CLIP或其他文本编码器将文本描述转换为嵌入向量。

from transformers import CLIPProcessorprocessor = CLIPProcessor.from_pretrained("openai/clip-vit-large-patch14")def preprocess_data(image, caption):inputs = processor(images=image, text=caption, return_tensors="pt", padding=True)return inputs

3. 模型配置

3.1 配置训练参数

Stable Diffusion模型的训练涉及多个超参数,你可以根据具体需求进行调整。常见的训练参数包括:

•批量大小(Batch Size):通常设置为16或32,取决于你的硬件资源。

•学习率(Learning Rate):初始学习率通常设置为1e-4或1e-5,并使用学习率调度器进行动态调整。

•训练步数(Training Steps):通常需要几百万步才能收敛,具体取决于数据集的大小和复杂性。

•噪声调度器(Noise Scheduler):选择合适的噪声调度器(如DDIM、PNDM、LMS等),以控制扩散过程中的噪声添加和去除。

from diffusers import DDPMSchedulernoise_scheduler = DDPMScheduler(num_train_timesteps=1000, beta_start=0.0001, beta_end=0.02)

3.2 模型架构

Stable Diffusion模型由三个主要部分组成:

•UNet:负责去噪过程,逐步从加噪的图像中恢复原始图像。

•VAE(变分自编码器):用于将图像压缩到潜在空间,并在生成时解码回图像。

•CLIP(文本编码器):用于将文本描述转换为嵌入向量,指导图像生成。

你可以使用Hugging Face提供的预训练模型作为基础,然后进行微调(Fine-tuning)以适应特定任务或数据集。

4. 训练过程

4.1 训练循环训练

Stable Diffusion模型的核心是通过前向扩散过程将图像逐渐加噪,然后训练UNet网络预测每个时间步的噪声,并逐步去除噪声以恢复原始图像。以下是训练循环的基本结构:

from diffusers import UNet2DConditionModel, AutoencoderKL, DDIMScheduler
from transformers import CLIPTokenizer, CLIPTextModel
from accelerate import Accelerator
import torch.optim as optim# 初始化加速器
accelerator = Accelerator()# 加载预训练模型
unet = UNet2DConditionModel.from_pretrained("./pretrained_model", subfolder="unet")
vae = AutoencoderKL.from_pretrained("./pretrained_model", subfolder="vae")
text_encoder = CLIPTextModel.from_pretrained("./pretrained_model", subfolder="text_encoder")
tokenizer = CLIPTokenizer.from_pretrained("./pretrained_model", subfolder="tokenizer")# 设置噪声调度器
noise_scheduler = DDIMScheduler(beta_start=0.00085, beta_end=0.012, beta_schedule="scaled_linear", num_train_timesteps=1000)# 定义优化器
optimizer = optim.AdamW(unet.parameters(), lr=1e-4)# 将模型和优化器发送到加速器
unet, optimizer = accelerator.prepare(unet, optimizer)# 训练循环
for epoch in range(num_epochs):for batch in train_loader:# 获取图像和文本images, captions = batch["image"], batch["caption"]# 编码文本with torch.no_grad():text_inputs = tokenizer(captions, padding="max_length", max_length=77, return_tensors="pt")text_embeddings = text_encoder(text_inputs.input_ids.to(accelerator.device))[0]# 前向扩散过程noise = torch.randn_like(images)timesteps = torch.randint(0, noise_scheduler.num_train_timesteps, (images.shape[0],), device=accelerator.device)noisy_images = noise_scheduler.add_noise(images, noise, timesteps)# 去噪过程model_pred = unet(noisy_images, timesteps, text_embeddings).sample# 计算损失loss = F.mse_loss(model_pred, noise)# 反向传播和优化accelerator.backward(loss)optimizer.step()optimizer.zero_grad()# 打印损失if accelerator.is_main_process and step % 100 == 0:print(f"Epoch {epoch}, Step {step}, Loss: {loss.item()}")

4.2 学习率调度

为了提高训练效果,建议使用学习率调度器(如线性衰减调度器)来动态调整学习率:

from transformers import get_linear_schedule_with_warmupnum_training_steps = len(train_loader) * num_epochs
lr_scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps=1000, num_training_steps=num_training_steps)

5. 采样和评估

在训练过程中,你可以定期保存模型并进行采样,以评估生成图像的质量。你可以使用以下代码生成图像:

@torch.no_grad()
def generate_image(prompt, model, vae, tokenizer, scheduler, num_inference_steps=50, guidance_scale=7.5):# 编码文本text_input = tokenizer(prompt, padding="max_length", max_length=77, return_tensors="pt")text_embeddings = model.text_encoder(text_input.input_ids.to(accelerator.device))[0]# 生成随机噪声shape = (1, 4, 64, 64)  # 潜在空间的形状latents = torch.randn(shape, device=accelerator.device)# 采样过程for t in reversed(range(num_inference_steps)):t_tensor = torch.full((1,), t, device=accelerator.device, dtype=torch.long)latent_model_input = torch.cat([latents] * 2)latent_model_input = scheduler.scale_model_input(latent_model_input, t)# 预测噪声noise_pred = model.unet(latent_model_input, t_tensor, text_embeddings).sample# 分类自由引导noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)noise_pred = noise_pred_uncond + guidance_scale * (noise_pred_text - noise_pred_uncond)# 更新潜变量latents = scheduler.step(noise_pred, t, latents).prev_sample# 解码潜变量为图像image = vae.decode(latents / 0.18215).sampleimage = (image / 2 + 0.5).clamp(0, 1)image = image.cpu().permute(0, 2, 3, 1).numpy()return image# 生成图像
prompt = "A beautiful landscape with mountains and a lake"
generated_image = generate_image(prompt, pipeline, vae, tokenizer, noise_scheduler)
plt.imshow(generated_image[0])
plt.axis('off')
plt.show()

6. 优化与加速

6.1 使用混合精度训练

混合精度训练可以显著加快训练速度并减少显存占用。你可以使用 accelerate 库中的 fp16 模式来启用混合精度:

accelerator = Accelerator(mixed_precision="fp16")

6.2 分布式训练

如果你有多块GPU或TPU,可以使用分布式训练来加速训练过程。accelerate 库支持多GPU、多节点和TPU训练,只需在初始化时指定相应的配置。

accelerator = Accelerator(device_placement=True, mixed_precision="fp16")

6.3 8位优化

对于非常大的模型,可以使用 bitsandbytes 库进行8位优化,进一步减少显存占用并加速推理:

import bitsandbytes as bnboptimizer = bnb.optim.Adam8bit(unet.parameters(), lr=1e-4)

7. 保存和加载模型

训练完成后,你可以将模型保存到本地或上传到Hugging Face Model Hub,方便后续使用或共享。

pipeline.save_pretrained("./trained_model")

8. 注意事项

•计算资源:训练Stable Diffusion模型需要大量的计算资源,尤其是GPU或TPU。如果你没有足够的硬件资源,可以考虑使用云服务(如AWS、Google Cloud、Azure等)或Hugging Face的免费训练平台(如Colab)。

•数据质量:高质量的数据集对于生成逼真的图像至关重要。确保数据集中的图像和文本描述之间有良好的对应关系,并尽量避免低质量或不相关的数据。

•训练时间:Stable Diffusion模型的训练通常需要很长时间,可能需要几天甚至几周的时间,具体取决于数据集的大小和模型的复杂性。

•微调 vs 从头训练:如果你只是想生成特定风格的图像,建议从预训练模型开始进行微调,而不是从头训练整个模型。微调可以在较短的时间内获得不错的效果。

9. 参考资源

•Hugging Face Diffusers 文档

•Stable Diffusion GitHub 仓库

相关文章:

如何训练Stable Diffusion 模型

训练Stable Diffusion模型是一个复杂且资源密集的过程,通常需要大量的计算资源(如GPU或TPU)和时间。Stable Diffusion是一种基于扩散模型的生成式AI,能够根据文本提示生成高质量的图像。它的训练过程涉及多个步骤,包括…...

网络编程(王铭东老师)笔记

网络编程的目的 1.将多个设备通过网络进行连接在一起,可以将数据共享。 基础知识-01-ip地址 1.引入 为了能够确定网络数据收发双方是哪台电脑,需要用ip来标记电脑。 2.什么是地址 地址就是用来标记地点的 3.ip地址的作用 作用:在逻辑上标…...

项目亮点案例

其实对我来说是日常操作,但是如果在面试的时候面试者能把日常的事情总结好发出来,其实足矣。 想让别人认同项目,选取的示例需要包含以下要素: 亮点项目四要素:明确的目标,问题点,解决方法和结果…...

ShardingSphere-Proxy 连接实战:从 Golang 原生 SQL 到 GORM 的应用

在这篇文章《ShardingSphereProxy:快速入门》中,我们介绍了如何通过 Navicat 连接 ShardingSphere-Proxy。 实际上,ShardingSphere-Proxy 兼容标准的 SQL 和原生数据库协议,因此你可以使用任何 MySQL 客户端与其进行连接,包括 Go…...

uniapp验证码

一、 页面结构 假设你有一个发送短信按钮&#xff0c;点击按钮时会触发发送短信并启动倒计时。 <template><view><button click"sendSms" :disabled"isSending">{{ buttonText }}</button></view> </template>二、脚…...

C/C++基础知识复习(43)

1) 什么是运算符重载&#xff1f;如何在 C 中进行运算符重载&#xff1f; 运算符重载是指在 C 中为现有的运算符定义新的行为&#xff0c;使得它们能够用于用户定义的数据类型&#xff08;如类或结构体&#xff09;。通过运算符重载&#xff0c;可以让自定义类型像内置数据类型…...

GIT安装过程

文章目录 ‌下载安装包‌安装过程‌验证安装‌Git的基本使用‌ ‌Git的安装可以通过以下步骤完成‌ ‌下载安装包‌ 首先&#xff0c;访问Git官网(https://git-scm.com/)或Git for Windows(https://gitforwindows.org/)下载对应系统的安装包。 对于Windows系统&#xff0c;通常…...

评估大语言模型在药物基因组学问答任务中的表现:PGxQA

​这篇文献主要介绍了一个名为PGxQA的资源&#xff0c;用于评估大语言模型&#xff08;LLM&#xff09;在药物基因组学问答任务中的表现。 研究背景 药物基因组学&#xff08;Pharmacogenomics, PGx&#xff09;是精准医学中最有前景的领域之一&#xff0c;通过基因指导的治疗…...

[HNCTF 2022 Week1]你想学密码吗?

下载附件用记事本打开 把这些代码放在pytho中 # encode utf-8 # python3 # pycryptodemo 3.12.0import Crypto.PublicKey as pk from hashlib import md5 from functools import reducea sum([len(str(i)) for i in pk.__dict__]) funcs list(pk.__dict__.keys()) b reduc…...

MongoDB教程001:基本常用命令(数据库操作和集合操作)

1.1 案例需求 存放文章评论的数据存放到MongoDB中&#xff0c;数据结构参考如下&#xff1a; 数据库&#xff1a;【articledb】 专栏文章评论comment字段名称字段含义字段类型备注_id&#xff08;MongoDB自动生成&#xff09;IDObjectId或StringMongo的主键的字段articleId文…...

Springboot logback 日志打印配置文件,每个日志文件100M,之后滚动到下一个日志文件,日志保留30天(包含traceid)

全部配置 logback.xml <?xml version"1.0" encoding"UTF-8"?> <configuration debug"false"><property name"LOG_HOME" value"log"/><property name"LOG_NAME" value"admin"/&g…...

flink sink kafka

接上文&#xff1a;一文说清flink从编码到部署上线 之前写了kafka source&#xff0c;现在补充kafka sink。完善kafka相关操作。 环境说明&#xff1a;MySQL&#xff1a;5.7&#xff1b;flink&#xff1a;1.14.0&#xff1b;hadoop&#xff1a;3.0.0&#xff1b;操作系统&#…...

vue万达地产物业缴费分析系统

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设万达地产物业缴费分析…...

数据库 MYSQL的概念

数据库的概念 数据库是按照数据结 构来组织、存储和管理数据的系统&#xff0c;它允许用户高效地存储、检索、更新和管理数据 database&#xff1a;用来组织&#xff0c;存储&#xff0c;管理数据的仓库 数据库的管理系统&#xff1a;DBMS&#xff0c;实现对数据的有效储值&am…...

docker 容器的基本使用

docker 容器 一、docker是什么&#xff1f; 软件的打包技术&#xff0c;就是将算乱的多个文件打包为一个整体&#xff0c;打包技术在没有docker容器之前&#xff0c;一直是有这种需求的&#xff0c;比如上节课我把我安装的虚拟机给你们打包了&#xff0c;前面的这种打包方式是…...

Nginx IP优化限制策略

Nginx 如何限制每个 IP 地址的连接数&#xff0c;优化资源分配&#xff1f; Nginx 限制每个 IP 地址的连接数 Nginx 提供了多种机制来限制单个 IP 地址所能建立的同时连接数&#xff0c;这对于防止资源耗尽和提高服务稳定性至关重要。以下是几种有效策略&#xff1a; 1. 使用…...

某科技局国产服务器PVE虚拟化技术文档

环境介绍 硬件配置 服务器品牌&#xff1a;黄河 型号&#xff1a;Huanghe 2280 V2 Cpu型号&#xff1a;kunpeng-920 磁盘信息 :480SSD * 2 ,4T*4 网卡&#xff1a;板载四口千兆 如下表 四台服务器同等型号配置&#xff0c;均做单节点虚拟化&#xff0c;数据保护采用底层r…...

新能源汽车锂离子电池各参数的时间序列关系

Hi&#xff0c;大家好&#xff0c;我是半亩花海。为了进一步开展新能源汽车锂离子电池的相关研究&#xff0c;本文主要汇总并介绍了电动汽车的锂离子电池的各项参数&#xff0c;通过 MATLAB 软件对 Oxford Dataset 的相关数据集进行数据处理与分析&#xff0c;进一步研究各项参…...

单片机:实现自动关机电路(附带源码)

单片机实现自动关机电路 在许多嵌入式系统或便携式设备中&#xff0c;自动关机功能非常重要&#xff0c;尤其是在电池供电的设备中&#xff0c;防止设备长时间开启以节省电能。自动关机电路的基本功能是检测设备是否处于待机状态&#xff0c;若一定时间内未收到用户操作信号或…...

/etc/fstab 文件学习systemd与该文件关系

文章目录 一、文件字段1.1、设备标识1.2、挂载点1.3、文件系统类型1.4、挂载选项1.5、dump1.5、fsck顺序 二、/etc/fstab 与systemd 的关系2.1、/etc/fstab 与systemd 的关系2.2、systemd 之前/etc/fstab生效过程2.3、systemd 时代/etc/fstab生效过程 三、相关知识3.1、如何更具…...

springcloud基础

一 SpringCloud简介 1.1 SpringCloud是什么 SpringCloud,基于SpringBoot提供了一套微服务解决方案&#xff0c;包括服务注册与发现&#xff0c;配置中心&#xff0c;全链路监控&#xff0c;服务网关&#xff0c;负载均衡&#xff0c;熔断器等组件&#xff0c;除了基于NetFli…...

全面解析 Kubernetes 流量负载均衡:iptables 与 IPVS 模式

目录 Kubernetes 中 Service 的流量负载均衡模式 1. iptables 模式 工作原理 数据路径 优点 缺点 适用场景 2. IPVS 模式 工作原理 数据路径 优点 缺点 适用场景 两种模式的对比 如何切换模式 启用 IPVS 模式 验证模式 总结 Kubernetes 中 Service 的流量负载…...

HTML+CSS+JS制作汽车网站(内附源码,含5个页面)

一、作品介绍 HTMLCSSJS制作一个汽车网站&#xff0c;包含首页、新车发布页、预约试驾页、最新资讯页、品牌故事页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。 二、页面结构 1. 顶部导航栏 包含logo、主导航菜单&#xff08;首页、新车、二…...

GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Windows EXE文件

一、前言 在现代软件开发中,启动速度和资源利用率常常是衡量应用性能的关键指标。对于基于Spring Boot的应用来说,虽然它们易于开发和部署,但JVM的启动时间有时会成为一个瓶颈。本文介绍如何使用GraalVM将Spring Boot 3应用编译成原生Windows可执行文件(EXE),从而显著提…...

微软开源GraphRAG的使用教程-使用自定义数据测试GraphRAG

微软在今年4月份的时候提出了GraphRAG的概念&#xff0c;然后在上周开源了GraphRAG,Github链接见https://github.com/microsoft/graphrag,截止当前&#xff0c;已有6900Star。 安装教程 官方推荐使用Python3.10-3.12版本&#xff0c;我使用Python3.10版本安装时&#xff0c;在…...

C++ 中的字面量类型定义

在 C 中&#xff0c;字面量类型&#xff08;Literal Type&#xff09;是指可以作为字面量使用的类型。字面量是指代码中直接写出的常量值&#xff0c;比如整数 42、浮点数 3.14、字符串 "hello" 等。而字面量类型则是支持创建这些字面量的类型。 C 中的字面量类型定…...

LeetCode:101. 对称二叉树

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输…...

Docker Compose 配置指南

目录 1. Docker Compose 配置1.1 基本配置结构1.2 docker-compose.yml 的各部分1.3 常用配置选项 2. Docker Compose 使用方法2.1 创建 Docker Compose 配置文件2.2 启动服务2.3 查看容器状态2.4 查看服务日志2.5 停止服务2.6 重新构建服务 3. Docker Compose 常用命令3.1 dock…...

【Linux开发工具】自动化构建-make/Makefile

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;Linux &#x1f339;往期回顾&#x1f339;&#xff1a;【Linux开发工具】gcc和g &#x1f516;流水不争&#xff0c;争的是滔滔不 一、make和Makefile简介1.1 什么是…...

VSCode 搭建Python编程环境 2024新版图文安装教程(Python环境搭建+VSCode安装+运行测试+背景图设置)

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。—— 苏轼《水调歌头》 创作者&#xff1a;Code_流苏(CSDN) 目录 一、Python环境安装二、VScode下载及安装三、VSCode配置Python环境四、运行测试五、背景图设置 很高兴你打开了这篇博客&#xff0c;更多详细的安装教程&…...

Python 异步协程:从 async/await 到 asyncio 再到 async with

在 Python 3.8 以后的版本中&#xff0c;异步编程变得越来越重要。本文将系统介绍 Python 标准库中的异步编程工具&#xff0c;带领大家掌握 async/await 语法和 asyncio 的使用。 从一个简单的场景开始 假设我们在处理一些耗时的 I/O 操作&#xff0c;比如读取多个文件或处理…...

矩阵-向量乘法的行与列的解释(Row and Column Interpretations):中英双语

本文是学习这本书的笔记 网站是&#xff1a;https://web.stanford.edu/~boyd/vmls/ 矩阵-向量乘法的行与列的解释 矩阵-向量乘法&#xff08;Matrix-Vector Multiplication&#xff09;是线性代数中的基本操作&#xff0c;也是机器学习、数据科学和工程中常用的数学工具。本文…...

针对超大规模病理图像分析!华中科技大学提出医学图像分割模型,提高干燥综合征诊断准确性

口干、眼干、皮肤干&#xff0c;每天伴有不明原因的肌肉酸痛和全身乏力&#xff0c;如果以上症状你「中招」了&#xff0c;除了考虑冬季天气干燥外&#xff0c;还应该警惕一种常见却总是被我们忽视的疾病——干燥综合征 (Sjgren’s Syndrome, SS)。 干燥综合征是以外分泌腺高度…...

混合开发环境---使用编程AI辅助开发Qt

文章目录 [toc]1、说明2、演示视频 1、说明 新时代的浪潮早就已经来临&#xff0c;上不了船的人终将被抛弃&#xff0c;合理使用AI辅助开发、提升效率是大趋势 注意&#xff1a;不要被AI奴隶 合理使用AI辅助编程&#xff0c;十倍提升效率。 大部分的编程AI都有vs code插件&…...

Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定

本文仅作学习交流&#xff0c;不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本&#xff1a;Unity6 模板&#xff1a;3D 核心 渲染管线&#xff1a;URP ------------------------------…...

[前端]HTTP库Axios

一、Axios简介 Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于浏览器和 node.js 环境。它是一个流行的 JavaScript 库&#xff0c;用于发起 HTTP 请求&#xff0c;如 GET、POST、DELETE 等。Axios 提供了易于使用的 API&#xff0c;支持请求和响应的拦截、转换数据格…...

Excel中index()函数

函数功能概述 INDEX 函数用于返回表格或区域中的值或对值的引用。它可以根据指定的行和列的位置从一个单元格区域中提取数据。这个函数有两种形式&#xff1a;数组形式和引用形式。语法结构&#xff08;数组形式&#xff09; INDEX(array, row_num, column_num)array&#xff0…...

linux-----文件命令

文件和目录的基本概念 文件类型&#xff1a; 普通文件&#xff1a;这是最常见的文件类型&#xff0c;用于存储数据&#xff0c;如文本文件、二进制文件等。文本文件可以用文本编辑器打开并查看内容&#xff0c;二进制文件则包含机器可执行的代码或其他特定格式的数据。目录文件…...

lua dofile 传参数

cat 1.lua arg[1] 111 arg[2] 222 dofile(./2.lua) cat 2.lua print("First argument is: " .. arg[1]) print("Second argument is: " .. arg[2]) 执行 lua 1.lua&#xff0c;结果为&#xff1a; First argument is: 111 Second argument is: 222 l…...

【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?

要在 Windows 上编译 etcd 及 etcdctl 工具&#xff0c;并使用 bat 脚本启动 etcd 集群&#xff0c;首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤&#xff1a; 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…...

重温设计模式--备忘录模式

文章目录 备忘录模式&#xff08;Memento Pattern&#xff09;概述定义&#xff1a; 作用&#xff1a;实现状态的保存与恢复支持撤销 / 恢复操作 备忘录模式UML图备忘录模式的结构原发器&#xff08;Originator&#xff09;&#xff1a;备忘录&#xff08;Memento&#xff09;&…...

如何借助边缘智能网关实现厂区粉尘智能监测告警

在诸如木制品加工、纺织品加工、塑料橡胶制品加工等多种工业生产场景中&#xff0c;粉尘问题的隐患和风险不可小觑。如果缺少对生产环境中粉尘的监测和管理&#xff0c;可能发生易燃易爆、环境污染和工人尘肺等生产事故。 针对工业场景中的粉尘状况监测、管理及预警&#xff0c…...

解析mysqlbinlog

一、前置设置 ps -ef | grep mysql 查看mysql进程对应的安装目录 需设置mysql binlog日志模式为 ROW 二、执行命令 [rootlocalhost bin]# mysqlbinlog --verbose --base64-outputdecode-rows /usr/local/mysql/data/binlog.000069 > 1.sql 查看文件具体内容...

【gym】理解gym并测试gym小游戏CartPole (一)

一、gym与文件位置的联合理解 import gym import inspect# 加载 CliffWalking 环境 env gym.make(CliffWalking-v0)# 获取环境的类 env_class type(env)# 获取环境类所在的文件路径 file_path inspect.getfile(env_class)print(f"The source code for CliffWalking-v0…...

【jvm】内存泄漏的8种情况

目录 1. 说明2. 静态集合类持有对象引用3. 单例模式4. 内部类持有外部类5. 未关闭的连接6. 变量不合理的作用域7. 改变对象的哈希值8. 缓存Cache泄漏9. 监听器和回调 1. 说明 1.内存泄漏&#xff08;Memory Leak&#xff09;指的是程序中动态分配的内存由于某种原因没有被释放…...

android:sharedUserId 应用进程声明介绍

背景 adb install 安装系统软件报错,原因是签名不一致,进程改变。 代码分析 AndroidManifest.xml 定义的 android:sharedUserId 应用归属进程不同,从phone切换到system。 初始配置 <manifest xmlns:android="http://schemas.android.com/apk/res/android"c…...

WPSJS:让 WPS 办公与 JavaScript 完美联动

随着办公自动化需求的日益增长&#xff0c;WPS Office 推出了 WPSJS&#xff0c;这是一款强大的开发者工具&#xff0c;允许开发者通过 JavaScript 脚本与 WPS 办公软件进行互动。无论是在表格中自动填充数据、在文档中修改格式&#xff0c;还是在演示文稿中插入动态内容&#…...

【Linux进程】进程间通信(共享内存、消息队列、信号量)

目录 前言 1. System V IPC 2. 共享内存 系统调用接口 shmget ftok shmat shmdt shmctl 共享内存的读写 共享内存的描述对象 3. 消息队列 msgget msgsnd msgctl 消息队列描述对象 4. 信号量 系统调用接口 semget semctl 信号量描述对象 5. 系统层面IPC资源 6.…...

负载均衡的原理

负载均衡&#xff08;Load Balancing&#xff09;是一种计算机技术&#xff0c;用于在多个服务器、网络连接、计算资源之间合理分配工作负载&#xff0c;以提升应用程序的可用性、性能和可扩展性&#xff0c;以下是详细介绍&#xff1a; 工作原理 流量分配&#xff1a;负载均衡…...

Flash Attention

op融合 原始方法&#xff1a; 痛点&#xff1a;多次读取、写入显存。 解决&#xff1a;中间结果不保存&#xff0c;1个kernel顺序算完多个操作。 反向传播时用到这些中间结果要求导&#xff0c;怎么办&#xff1f; 答&#xff1a;类似activation checkpointing&#xff0c;重新…...