一文读懂deepSpeed:深度学习训练的并行化

引言

在深度学习领域,模型训练的过程不仅资源密集,而且技术复杂。近年来,随着模型规模和数据量的不断增长,深度学习训练面临着越来越多的挑战。这些挑战主要体现在计算资源的需求、训练效率、模型复杂度以及内存管理等多个方面。而DeepSpeed库的出现,正是为了解决这些问题,它提供了一整套优化工具和策略,极大地提升了深度学习训练的效率和可扩展性。

 

目录

引言

1. DeepSpeed简介

1.1 DeepSpeed是什么

1.2 DeepSpeed的发展历程和背景

1.3 DeepSpeed的主要特点和优势

1.4 深度学习训练过程中的挑战

1.5 DeepSpeed库的重要性和功能

2. DeepSpeed的核心技术

2.1 深度学习训练的并行化策略

2.2 内存优化技术

2.3 混合精度训练

三、DeepSpeed的安装与配置

3.1 安装步骤和依赖说明

3.2 配置文件详解

3.3 如何集成到现有的深度学习项目中

四、DeepSpeed实战案例分析

五、性能调优与最佳实践

5.1 如何选择合适的并行策略

5.2 内存使用与性能之间的权衡

5.3 常见的调优技巧和注意事项

六、总结与展望

DeepSpeed的贡献与影响

未来发展趋势和可能的新功能


1. DeepSpeed简介

1.1 DeepSpeed是什么

DeepSpeed是一个开源的深度学习优化库,它由微软开发并维护,旨在提高大规模模型训练的效率和可扩展性。通过创新的算法和技术,DeepSpeed能够降低训练超大规模模型的复杂性和资源需求,让深度学习训练变得更快、更高效。

1.2 DeepSpeed的发展历程和背景

随着深度学习模型的规模和复杂度不断增加,传统的训练方法和工具已经无法满足高效训练的需求。特别是在自然语言处理等领域,模型往往达到了数十亿甚至数千亿参数的规模,需要多卡或者多节点分布式训练。然而,现有的开源系统在训练效率、资源利用率以及易用性方面都存在一定的局限性。为了解决这些问题,微软推出了DeepSpeed库,为研究人员和工程师提供了一个高效、有效且易于使用的训练工具。

DeepSpeed的发展历程紧密跟随深度学习领域的需求变化。自推出以来,它不断更新和优化,以适应不断增长的模型规模和训练数据。通过引入创新的并行化策略、内存优化技术和混合精度训练等方法,DeepSpeed在深度学习训练领域取得了显著的成果。

1.3 DeepSpeed的主要特点和优势

  1. 高效的并行化策略:DeepSpeed支持多种并行化方法,包括数据并行、模型并行和流水线并行。这些方法可以灵活组合,以适应不同规模和复杂度的深度学习模型。通过并行化,DeepSpeed能够显著提高训练速度和可扩展性。
  2. 内存优化技术:为了降低内存占用和提高训练效率,DeepSpeed引入了ZeRO(Zero Redundancy Optimizer)技术。ZeRO通过将优化器的状态、梯度和参数在分布式环境中进行分割,从而减少了冗余的内存占用。这使得在有限的内存资源下训练更大的模型成为可能。
  3. 混合精度训练支持:DeepSpeed支持混合精度训练,即同时使用单精度和半精度浮点数进行训练。这种方法可以在保持模型性能的同时,减少内存占用和计算时间,降低能耗。
  4. 易用性和兼容性:DeepSpeed与PyTorch等主流深度学习框架紧密集成,提供了易用的API和丰富的文档支持。这使得用户能够轻松地将DeepSpeed集成到他们的项目中,并充分利用其提供的优化功能。此外,DeepSpeed还提供了高度优化的数据加载和网络通信工具,以减少通信量并提高多GPU和多节点环境下的训练效率。
  5. 社区支持和持续更新:由于其开源性质,DeepSpeed受到了全球开发者和研究者的广泛支持。它拥有丰富的文档和示例以及活跃的社区交流平台。微软团队不断对其进行优化和扩展以确保最新研究成果能迅速融入到库中。

1.4 深度学习训练过程中的挑战

  1. 计算资源需求:深度学习模型的训练,尤其是大型模型的训练,需要强大的计算资源。包括高性能计算机、大规模分布式集群以及高速网络连接等。这些资源的获取和维护成本高昂,对许多研究机构和公司来说是一个不小的负担。
  2. 训练效率问题:随着模型复杂度和数据量的增加,训练时间也在不断延长。长时间的训练不仅占用了大量的计算资源,还减慢了研究进度,影响了产品的上市时间。
  3. 模型复杂度:深度学习模型的复杂度越来越高,这使得模型的训练和优化变得更加困难。同时,复杂的模型也更容易出现过拟合等问题,影响模型的泛化能力。
  4. 内存管理:在训练大型深度学习模型时,内存管理成为了一个关键问题。模型参数、梯度以及中间计算结果都需要占用大量的内存空间。如果内存管理不当,很容易导致训练过程中断或效率低下。

1.5 DeepSpeed库的重要性和功能

DeepSpeed库是一个开源的深度学习优化库,旨在解决深度学习训练过程中的上述挑战。它的重要性和功能主要体现在以下几个方面:

  1. 提升训练效率和可扩展性:DeepSpeed通过一系列优化策略,如数据并行、模型并行和流水线并行等,显著提升了深度学习模型的训练速度和可扩展性。这使得研究人员和工程师能够更高效地训练出更大、更复杂的模型。
  2. 降低内存占用:通过引入ZeRO(Zero Redundancy Optimizer)技术,DeepSpeed能够显著减少模型训练时的内存占用。这使得在有限的内存资源下训练更大规模的模型成为可能。
  3. 混合精度训练支持:DeepSpeed支持混合精度训练,即同时使用单精度(FP32)和半精度(FP16)浮点数进行训练。这不仅可以减少内存占用和计算时间,还能在保持模型性能的同时降低能耗。
  4. 易用性和兼容性:DeepSpeed与PyTorch等主流深度学习框架紧密集成,提供了易用的API和丰富的文档支持。这使得研究人员和工程师能够轻松地将DeepSpeed集成到他们的项目中,并充分利用其提供的优化功能。

2. DeepSpeed的核心技术

2.1 深度学习训练的并行化策略

DeepSpeed提供了多种并行化策略,以适应不同深度学习训练场景的需求。

  1. 数据并行
    • 数据并行是将大型数据集分割成小块,并在多个处理器上并行处理这些小块数据的方法。
    • 在DeepSpeed中,数据并行允许模型的不同副本在不同的设备上运行,每个设备处理数据的一个子集,然后聚合结果以更新模型。
  2. 模型并行
    • 模型并行是将模型的不同部分分配给不同的处理器进行计算的方法。
    • 对于超大型模型,特别是那些无法完整放入单个设备内存的模型,模型并行非常有用。
    • DeepSpeed通过模型并行性支持将模型的不同层分配到不同的设备上,从而实现大型模型的训练。
  3. 流水线并行
    • 流水线并行是一种将模型划分为多个阶段,并在不同的处理器上并行处理这些阶段的方法。
    • 通过将模型的不同层或计算阶段分配给不同的处理器,并允许它们并行运行,可以显著提高训练效率。
    • DeepSpeed通过优化流水线并行的实现,减少了处理器之间的通信开销,从而进一步提高了训练速度。

2.2 内存优化技术

DeepSpeed采用了一种称为ZeRO(Zero Redundancy Optimizer)的内存优化技术。

  • ZeRO技术详解
    • ZeRO是DeepSpeed中的一项关键技术,它通过优化模型状态的存储和通信来大幅减少所需的内存占用。
    • ZeRO将模型的参数、梯度和优化器状态进行分片,平均分配到所有的GPU中,这样每个GPU只存储一部分数据,从而减少了单个设备的内存需求。
  • 如何减少模型训练时的内存占用
    • 通过ZeRO技术,DeepSpeed能够在分布式环境中高效地训练大型模型,而无需在每个设备上存储完整的模型状态。
    • ZeRO还通过动态通信调度在分布式设备之间共享必要的状态,以保持数据并行的计算粒度和通信量,从而进一步减少内存占用。

2.3 混合精度训练

  • 自动混合精度(AMP)训练的原理
    • 混合精度训练是一种同时使用不同精度的浮点数进行训练的方法,通常结合单精度(FP32)和半精度(FP16)浮点数。
    • 使用混合精度可以显著减少内存占用和计算时间,同时还能降低能耗。
    • AMP通过自动选择适当的精度来执行不同的计算任务,从而在保持模型性能的同时最大化训练效率。
  • 如何在DeepSpeed中启用AMP
    1. 在配置DeepSpeed的训练参数时,需要指定使用混合精度训练。
    2. 根据具体的模型和任务需求,调整混合精度训练的配置参数,如精度类型、比例因子等。
    3. 确保硬件和软件环境支持混合精度训练,特别是GPU硬件和相应的驱动程序及库文件。
    4. 在训练过程中监控模型的性能和稳定性,必要时进行调整和优化。

请注意,具体的启用步骤可能因DeepSpeed版本和具体的使用环境而有所不同。建议参考DeepSpeed的官方文档或相关教程以获取最新和详细的指导信息。

三、DeepSpeed的安装与配置

3.1 安装步骤和依赖说明

  1. 安装依赖
    • 安装Python 3.6或以上版本。
    • 安装CUDA和cuDNN,这些是深度学习计算中常用的加速库。
  2. 安装DeepSpeed
    • 可以通过pip直接安装:pip install deepspeed
    • 或者,可以从DeepSpeed的GitHub仓库(DeepSpeed GitHub)克隆代码,并按照仓库中的说明进行安装。
  3. 验证安装
    • 安装完成后,可以通过运行deepspeed --version来验证DeepSpeed是否成功安装。如果输出版本号,则说明安装成功。

请注意,安装过程中可能还需要满足一些其他条件,如安装NCCL库、配置环境变量等。具体细节可以参考DeepSpeed的官方文档。

3.2 配置文件详解

DeepSpeed的配置文件是一个JSON文件,用于定义训练参数和模型设置。以下是一些关键配置项的解释:

  • fp16:与半精度浮点数计算相关的配置,包括是否启用、自动类型转换、损失缩放等参数。
  • train_micro_batch_size_per_gpu:每个GPU上处理的单个微批量的大小。
  • gradient_accumulation_steps:在执行参数更新之前,累积的微批量梯度数量。
  • train_batch_size:整个训练批量的大小,即所有GPU上并行处理的总样本数。
  • optimizer:优化器配置,包括学习率、动量等参数。

此外,配置文件还可以包括其他高级选项,如学习率调度器、模型并行设置等。具体配置项和参数值应根据具体的模型和训练需求进行调整。

3.3 如何集成到现有的深度学习项目中

  1. 导入DeepSpeed库
    在代码中导入DeepSpeed库,通常是通过import deepspeed这样的语句。

  2. 配置DeepSpeed
    创建一个DeepSpeed的配置文件(通常为JSON格式),在其中指定模型的大小、优化器类型、学习率调度器等参数。

  3. 包装模型
    使用DeepSpeed提供的deepspeed.initialize()函数来包装原有的模型。这个函数将应用DeepSpeed的优化策略和技术。

  4. 训练模型
    替换原有的训练循环,通过调用model.backward()optimizer.step()来执行反向传播和参数更新。DeepSpeed会自动处理梯度累积、梯度压缩等技术,以提高训练效率。

  5. 调整超参数和配置
    根据具体的模型和训练需求,调整DeepSpeed的配置文件中的参数,以达到最佳的训练效果。

  6. 监控和调优
    在训练过程中,使用DeepSpeed提供的工具进行性能监控和调优,以确保训练过程的顺利进行。

四、DeepSpeed实战案例分析

 以下是一个简化的代码案例,展示了如何使用DeepSpeed来加速PyTorch模型的训练。

import torch  
import deepspeed  
  
# 初始化DeepSpeed引擎和相关配置  
params = {  
    "train_batch_size": 32,  
    "gradient_accumulation_steps": 1,  
    "optimizer": {  
        "type": "Adam",  
        "params": {  
            "lr": 0.001,  
            "betas": [0.9, 0.999],  
            "eps": 1e-8,  
            "weight_decay": 0  
        }  
    },  
    "fp16": {  
        "enabled": True  
    },  
    "zero_optimization": {  
        "stage": 2,  
        "allgather_partitions": True,  
        "allgather_bucket_size": 2e8,  
        "overlap_comm": True,  
        "reduce_scatter": True,  
        "reduce_bucket_size": 2e8,  
        "contiguous_gradients": True,  
        "cpu_offload": False  
    }  
}  
  
model_engine, optimizer, _, _ = deepspeed.initialize(args=params,  
                                                   model=model,  
                                                   model_parameters=model.parameters())  
  
# 训练循环  
for epoch in range(num_epochs):  
    for batch in dataloader:  
        inputs, targets = batch  
        outputs = model(inputs)  
        loss = criterion(outputs, targets)  
          
        # 使用DeepSpeed的后向传播  
        model_engine.backward(loss)  
        model_engine.step()

五、性能调优与最佳实践

5.1 如何选择合适的并行策略

选择合适的并行策略取决于多个因素,包括模型的规模、计算资源以及训练目标。以下是一些建议:

  • 数据并行:适用于模型规模适中且计算资源相对丰富的情况。通过将数据集分割并在多个设备上并行处理,可以加速训练过程。数据并行易于实现且扩展性好,但随着模型规模的增大,每个设备上的内存占用也会增加。

  • 模型并行:更适用于大型模型,特别是当单个设备无法容纳整个模型时。通过将模型的不同部分分配给不同的设备,模型并行可以有效地扩展到大型模型。然而,模型并行可能需要更复杂的通信模式和同步机制。

  • 流水线并行:适用于具有多个独立计算阶段的模型。通过将模型划分为不同的阶段并在多个设备上并行执行,可以提高硬件利用率并减少等待时间。流水线并行特别适合那些具有明显计算阶段划分的模型。

5.2 内存使用与性能之间的权衡

在深度学习训练中,内存使用和性能之间存在微妙的平衡。以下是一些权衡考虑:

  • 内存占用:减少内存占用可以降低硬件成本和提高资源利用率,但可能会牺牲一定的性能。例如,使用较小的批次大小可以减少内存占用,但可能会导致训练速度变慢。

  • 数据精度:使用半精度(FP16)或混合精度训练可以减少内存占用和计算时间,但可能会增加数值不稳定性和收敛难度。需要根据具体模型和任务来权衡精度和性能之间的关系。

  • ZeRO技术:采用ZeRO技术可以显著减少内存占用,同时保持高性能。ZeRO通过优化器状态、梯度和参数的分区来降低每个设备的内存需求。

5.3 常见的调优技巧和注意事项

  1. 合理设置批次大小:批次大小对训练速度和模型质量都有影响。过小的批次可能导致训练不稳定,而过大的批次可能会占用过多内存并降低训练速度。需要根据硬件资源和模型需求来选择合适的批次大小。

  2. 使用混合精度训练:混合精度训练可以结合单精度和半精度浮点数进行计算,以减少内存占用和提高计算速度。但需要注意调整超参数以避免数值不稳定。

  3. 启用ZeRO技术:ZeRO技术可以显著降低内存占用,使得在有限的硬件资源上训练更大的模型成为可能。确保正确配置ZeRO参数以获得最佳性能。

  4. 优化数据加载:数据加载通常是训练过程中的瓶颈之一。使用高效的数据加载库和并行数据加载策略可以提高训练速度。

  5. 监控资源利用率:定期检查GPU和其他硬件资源的利用率,以确保训练过程充分利用了可用资源。如果发现资源利用率低,可能需要调整并行策略或优化代码。

  6. 保持软件更新:定期更新DeepSpeed库和依赖项以确保获得最新的性能优化和bug修复。

六、总结与展望

DeepSpeed的贡献与影响

DeepSpeed作为一个深度学习优化库,对AI领域产生了显著的影响和贡献。以下是其主要贡献与影响的总结:

  1. 提升训练效率:DeepSpeed通过提供多种并行化策略,包括数据并行、模型并行和流水线并行,显著提升了深度学习模型的训练效率。这使得研究人员和工程师能够更快速地训练和部署大型模型。
  2. 降低内存占用:通过采用ZeRO(Zero Redundancy Optimizer)技术,DeepSpeed大幅减少了模型训练时的内存占用。这使得在有限的硬件资源上训练更大的模型成为可能,降低了深度学习训练的硬件门槛。
  3. 支持混合精度训练:DeepSpeed支持自动混合精度(AMP)训练,这种训练方式结合了单精度和半精度浮点数进行计算,不仅减少了内存占用,还提高了计算速度,同时保持了模型的准确性。
  4. 开源赋能:DeepSpeed的开源性质使得更多的研究者和开发者能够接触到并使用这些高级技术,从而推动了整个AI行业的进步。通过开源,DeepSpeed帮助了包括中小厂商在内的各类用户,在细分领域应用中快速实现自己的小型类ChatGPT模型,或在微调大模型时降低成本。
  5. 扩大应用场景:DeepSpeed的推出和应用加速了AI在多个领域如办公、多模态GPT、智能助理、金融、医疗等的应用落地,使得这些领域的模型训练变得更加高效和经济。

未来发展趋势和可能的新功能

展望未来,DeepSpeed可能会继续在以下几个方面进行发展:

  1. 更高效的并行策略:随着模型规模的不断增大,DeepSpeed可能会继续优化并行化策略,以适应更大规模的模型训练需求。
  2. 内存优化技术的进一步发展:除了现有的ZeRO技术外,DeepSpeed可能会探索更多创新的内存优化方法,以进一步降低内存占用和提高训练效率。
  3. 自动化调优:为了简化用户的调优过程,DeepSpeed可能会引入更多的自动化调优功能,帮助用户更轻松地找到最佳的训练配置。
  4. 支持更多类型的模型:目前DeepSpeed已经支持了多种深度学习模型,但未来可能会进一步扩展其支持范围,包括更复杂的模型和算法。
  5. 更好的硬件支持:随着硬件技术的不断发展,DeepSpeed可能会针对新的硬件设备进行优化,以充分利用新一代硬件的性能优势。例如,针对GPU、TPU或其他专用加速器的特定优化。
  6. 集成更多工具和服务:为了提供更全面的解决方案,DeepSpeed可能会集成更多的工具和服务,如数据预处理工具、模型评估工具以及云服务提供商的集成等。

总的来说,DeepSpeed作为一个深度学习优化库,已经在提升训练效率、降低内存占用和推动AI应用落地等方面取得了显著的贡献。展望未来,它有望继续在并行策略、内存优化、自动化调优以及支持更多模型和硬件方面取得新的突破。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

postgres 修改系统时间测试

修改系统时间 [rootmmsql01 ~]# date 2024年 05月 16日 星期四 13:07:02 CST [rootmmsql01 ~]# timedatectl set-time "2024-05-16 13:30:00" [rootmmsql01 ~]# date 2024年 05月 16日 星期四 13:30:03 CST [rootmmsql01 ~]# timedatectl set-time "2024-05-16…

基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统

1 基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统 文章目录 1 基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统1.1 二、基于qemu固件安装操作系统1.1.1 1、virt-manager安装1.1.2 2、创建虚拟机1.1.2.1 Ubuntu系统开机等待时间长问题解决 1.1.3 3、virt-manager日常使用1.1.4 4、…

GAN实例基于神经网络

目录 1.前言 2.实验 1.前言 需要了解GAN的原理查看对抗生成网络(GAN),DCGAN原理。 采用手写数字识别数据集 2.实验 import argparse import os import numpy as np import mathimport torchvision.transforms as transforms from torchvi…

怎么把照片变小做头像?多种方法教你图片改尺寸

现在在社交媒体平台或者是社交软件上,我们经常会去更改头像来展示自己,但是有时候我们拍摄的照片太大无法直接用作头像,这时候就需要去修改图片尺寸,将图片改大小到合适的数值才能使用,那么如何快速的将图片改大小呢&a…

在UBuntu上安装QT环境

一、UBuntu环境 二、官网下载QT https://download.qt.io/archive/qt/ 安装所需选择版本下载,可以现在windows下载在复制进去 三、安装QT 1、复制到ubuntu 2、打开终端,改变刚下载文件的权限 权限代号 r:读取权限,数字代号为 “…

手机图片恢复不求人:手动找回丢失的照片!

无论是外出旅行、聚会还是日常点滴,我们总是习惯用手机记录下来,让美好的瞬间定格在一张张照片中。然而,有时因为误删、清空缓存或是更换手机,那些珍贵的照片突然消失了。手机图片恢复有什么简单易行、容易上手的方法吗&#xff1…

MySQL创建存储过程函数(2)

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) DEFAULT NULL,sex char(2) DEFAULT NULL,i…

上海初中生古诗文大会倒计时4个月:单选题真题示例和独家解析

现在距离2024年初中生古诗文大会还有4个多月时间,备考要趁早,因为知识点还是相对比较多的。这些知识点对于初中语文的学习也是很有帮助的。 今天我们继续来看10道选择题真题和详细解析,以下题目截取自我独家制作的在线真题集,都是…

教你五行代码实现大批量文件重命名

问题背景 文件夹里的大量文件,命名很乱,并且要重新命名为固定长度顺序的文件很麻烦。这里采用5行python实现大批量文件按要求统一命名。 现有文件夹列表 tulips 代码实现 main.py import os path rtulips/ for num, file in enumerate(os.listdir(…

狙击策略专用术语以及含义,WeTrade3秒讲解

想必各位交易高手对狙击策略不会陌生吧!但你想必不知道狙击策略的开发者为了推广狙击策略,在狙击策略基础的经典技术分析理论引入了自己的术语。今天WeTrade众汇和各位投资者继续了解狙击策略专用术语以及含义。 一.BL 银行级别(BL)是前一日线收盘的级别。时间是格…

央视的AI动画《AI我中华》宣传视频,原来用AI工具Stable Diffusion制作,竟然这么简单?

大家好,我是向阳。 前段时间,央视的《爱我中华》AI宣传短片火爆全网,有一个穿越转场效果非常惊艳!先来回顾回顾: 今天就先来详细讲解,如何利用Stable Diffusion制作这样的穿越转场视频。 如你还没有安装St…

脑中风也会出现眩晕?快速识别中风,一定要牢记这些!

眩晕是许多人都会经历的不适感,发作时仿佛整个世界都在旋转,可能还伴随着站立不稳、脚步虚浮、恶心等症状。然而,你可能不知道的是,这些症状在某些情况下可能是脑中风的前兆。如果不及时关注并采取相应措施,一旦发展为…

linux ndk编译搭建测试

一、ndk下载 NDK 下载 | Android NDK | Android Developers 二、ndk环境变量配置 ndk解压: unzip android-ndk-r26d-linux.zip 环境变量配置: export NDK_HOME/rd/own/test/android-ndk-r26d/ export PATH$PATH:$NDK_HOME 三、编译测试验证 …

003_PyCharm的安装与使用

如果你正在学习PyQt,本系列教程完全可以带你入门直至入土。 所谓从零开始,就是从软件安装、环境配置开始。 不跳过一个细节,不漏掉一行代码,不省略一个例图。 IDE 开始学习一个编程语言,我们肯定是首先得安装好它&…

【深度学习】【Lora训练2】StabelDiffusion,Lora训练过程,秋叶包,Linux,SDXL Lora训练

文章目录 一、如何为图片打标1.1. 打标工具1.1.1. 秋叶中使用的WD1.41.1.2. 使用BLIP21.1.3. 用哪一种 二、 Lora训练数据的要求2.1 图片要求2.2 图片的打标要求 三、 Lora的其他问题qa1qa2qa3qa4qa5 四、 对图片的处理细节4.1. 图片尺寸问题4.2. 图片内容选取问题4.3. 什么是一…

python批量生成防伪识别二维码

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.总结 一.前言 二维码(QR Code)是一种矩阵条码技术,它使用黑白矩形图案来表示二进制数据,这些矩形图案可以被设备扫描并解读。二维码可以被用来存储

究极完整版!!Centos6.9安装最适配的python和yum,附带教大家如何写Centos6.9的yum.repos.d配置文件。亲测可行!

前言! 这里我真是要被Centos6.9给坑惨了,最刚开始学习linux的时候并没有在意那么的,没有考虑到选版本问题,直到23年下半年,官方不维护Centos6.9了,基本上当时配置的文件和安装的依赖都用不了了&#xff0c…

springboot 引用外配置json文件

场景 一些服务需要记录一些持久化的信息(没有数据库,redis,elasticsearch 可用) 我们就项目启动过程创建一个json 文件去记录工作内容的进程(json 可视化与改动非常方便) 实现效果 代码 application.yml…

HashTable, HashMap, ConcurrentHashMap 三者区别

目录 1. HashMap 2. HashTable 3. ConcurrentHashMap 1. HashMap HashMap 是 Java 中非常常用的一个数据结构,它主要用于存储 键值对(K,V)。 在JDK 1.7中,HashMap的实现是基于 Table数组 和 Entry链表 的组合。 从…

直播卖券有妙招:实景ai无人直播系统帮助商家自动化团购直播!

在数字化浪潮席卷的今天,直播卖券已成为商家推广和营销的重要手段。然而,如何高效、精准地利用直播卖券,让每一位观众都能沉浸在购物的乐趣中,成为商家们迫切需要解决的问题。幸运的是,实景AI无人直播系统应运而生&…