基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例

近年来,大型语言模型(Large Language Models, LLMs)在自然语言处理(Natural Language Processing, NLP)领域取得了显著进展。这些模型通过在大规模文本数据上进行预训练,能够习得语言的基本特征和语义,从而在各种NLP任务上取得了突破性的表现。为了将预训练的LLM应用于特定领域或任务,通常需要在领域特定的数据集上对模型进行微调(Fine-tuning)。随着LLM规模和复杂性的不断增长,微调过程面临着诸多挑战,如计算资源的限制、训练效率的瓶颈等。

Torchtune是由PyTorch团队开发的一个专门用于LLM微调的库。它旨在简化LLM的微调流程,提供了一系列高级API和预置的最佳实践,使得研究人员和开发者能够更加便捷地对LLM进行调试、训练和部署。Torchtune基于PyTorch生态系统构建,充分利用了PyTorch的灵活性和可扩展性,同时针对LLM微调的特点进行了优化和改进。

Torchtune的核心设计原则

Torchtune的设计遵循以下四个核心原则:

  1. 简单性和可扩展性:Torchtune采用原生PyTorch的设计风格,提供模块化的组件和接口。这使得用户能够根据自己的需求,轻松地对现有功能进行修改和扩展,构建定制化的微调流程。同时,Torchtune也提供了一系列开箱即用的工具和模块,降低了用户的使用门槛。
  2. 正确性:LLM微调对训练数据和算法实现的正确性有着较高的要求。Torchtune中的各个组件和模块都经过了严格的单元测试和验证,确保了其输出结果的可靠性。Torchtune还提供了一系列调试和分析工具,帮助用户快速定位和解决训练过程中遇到的问题。
  3. 稳定性:Torchtune构建在PyTorch的稳定版本之上,并针对LLM微调场景进行了充分的测试和优化。用户可以在各种硬件环境下稳定地运行Torchtune,不必担心兼容性和稳定性问题。
  4. 可访问性:Torchtune的一个重要目标是让更多的用户能够参与到LLM的开发和应用中来。因此,Torchtune提供了详细的文档和教程,以及常见问题的解决方案。Torchtune还提供了一系列预训练模型和数据集,降低了用户的入门成本。

Torchtune的主要特性

Torchtune提供了以下主要特性,以支持LLM的微调任务:

  • 模块化的PyTorch实现:Torchtune实现了当前主流的LLM架构,如Transformer、GPT、BERT等。用户可以直接使用这些模块,也可以基于它们构建自己的模型。
  • 数据集和评测工具的集成:Torchtune与Hugging Face的Datasets库和EleutherAI的Eval Harness无缝集成,提供了丰富的数据集资源和标准化的评测方案。用户可以方便地访问和使用这些资源,也可以将自己的数据集和评测方案集成到Torchtune中。
  • 高效的分布式训练:Torchtune支持多种并行训练方式,如数据并行、模型并行、流水线并行等。特别地,Torchtune针对LLM微调实现了Fully Sharded Data Parallel v2 (FSDP2),可以显著地加速大规模模型的训练速度,并减少显存占用。
  • 基于配置文件的任务管理:Torchtune使用YAML格式的配置文件来管理微调任务的参数和流程。用户可以通过修改配置文件,灵活地控制训练过程,而无需修改代码。Torchtune还提供了一系列预置的配置文件和脚本,进一步简化了任务的管理和执行。

Torchtune是一个专为LLM微调设计的PyTorch库,其目标是让LLM的开发和应用变得更加简单、高效、可靠。Torchtune提供了模块化的组件、高级的API、丰富的数据资源、先进的并行训练技术,以及基于配置文件的任务管理方式。Torchtune在提高LLM微调效率的同时,也大大降低了用户的使用门槛,使更多的研究人员和开发者能够参与到LLM的开发和应用中来。

在接下来的内容中,我们将介绍Torchtune中的一些关键概念,并通过实例展示如何使用Torchtune进行LLM微调。我们也会探讨一些高阶的主题,如LoRA和QLoRA等参数高效的微调方法。

Torchtune中的关键概念

Torchtune引入了两个关键概念:配置(Config)方案(Recipe)。这两个概念抽象了LLM微调任务的参数和流程,使得用户能够以更加灵活和高效的方式管理微调任务。

配置(Config)

在Torchtune中,配置以YAML文件的形式存在。每个配置文件定义了一个完整的微调任务,包括:

  • 数据集的路径和格式
  • 模型的架构和参数
  • 优化器的类型和超参数
  • 训练的批大小、学习率、迭代次数等
  • 评测和日志的设置

通过使用配置文件,用户可以将微调任务的参数与代码实现解耦。这样,用户可以通过修改配置文件来快速地试验不同的设置,而无需修改代码。同时,配置文件也提高了任务的可重复性和可移植性。

下面是一个简单的配置文件示例:

 dataset:path: /path/to/datasetformat: jsonfields:- name: texttype: string- name: labeltype: intmodel:type: transformerparams:num_layers: 12hidden_size: 768num_attention_heads: 12optimizer:type: AdamWparams:lr: 0.001weight_decay: 0.01train:batch_size: 32num_epochs: 10log_interval: 100evaluate:batch_size: 64metric: - accuracy- f1

方案(Recipe)

方案是Torchtune提供的一系列预置的微调流程。每个方案都针对特定的场景和任务,提供了一套优化的实现和最佳实践。用户可以直接使用这些方案,也可以基于它们进行定制和扩展。

Torchtune内置了多个常用的方案,如:

  • lora_finetune_single_device:单设备上使用LoRA进行微调
  • lora_finetune_distributed:多设备分布式环境下使用LoRA进行微调
  • qlora_finetune:使用QLoRA进行参数高效微调
  • distill_finetune:使用知识蒸馏技术进行微调

每个方案都定义了一个完整的微调流程,包括数据处理、模型初始化、优化器选择、训练循环、评测和日志等。方案通过组合Torchtune提供的各种模块和工具,实现了端到端的自动化微调。

下面是一个使用

lora_finetune_single_device

方案进行微调的示例:

 tune run lora_finetune_single_device \--config configs/llama2/7B_lora_single_device.yaml \--train.batch_size 128 \--optimizer.params.lr 0.0001

在这个例子中,我们使用

lora_finetune_single_device

方案在单个设备上对LLaMA-2-7B模型进行微调。我们指定了配置文件的路径,并通过命令行参数覆盖了原始配置中的

train.batch_size

optimizer.params.lr

参数。

Torchtune的配置和方案机制提供了一种灵活、高效、可复用的方式来管理LLM微调任务。通过使用配置文件和预置方案,用户可以快速启动微调任务,并以极低的成本试验不同的优化策略。

小结

Torchtune中的配置和方案是管理LLM微调任务的两个关键抽象。配置以YAML文件的形式存在,定义了微调任务的各种参数;方案则提供了一系列预置的、经过优化的端到端微调流程。通过灵活地组合配置和方案,用户可以以极低的成本开展LLM微调的实验和优化。

在接下来的内容中,我们将通过一个完整的实例,展示如何使用Torchtune进行LLM微调。我们也会介绍一些高阶的微调技术,如LoRA和QLoRA。

使用Torchtune微调LLM

在这一节中,我们将通过一个完整的实例,展示如何使用Torchtune微调LLM。我们会使用Torchtune提供的

lora_finetune_single_device

方案,在单个GPU设备上对LLaMA-2-7B模型进行微调。

准备工作

在开始之前,请确保你已经正确安装了Torchtune,并且可以访问Hugging Face Hub。Hugging Face Hub中托管了许多常用的预训练语言模型,如LLaMA、GPT、BERT等。你需要先注册一个Hugging Face账号,并获取访问Tokens。

下载预训练模型

首先,我们需要下载一个预训练的语言模型。在这个例子中,我们使用Meta发布的LLaMA-2-7B模型,这是一个在Hugging Face Hub上的开源模型。我们可以使用以下命令下载这个模型:

 tune download meta-llama/Llama-2-7b-hf \  --output-dir /tmp/Llama-2-7b-hf \  --hf-token <ACCESS TOKEN>

这个命令会将LLaMA-2-7B模型下载到

/tmp/Llama-2-7b-hf

目录下,其中

<ACCESS TOKEN>

需要替换为你自己的Hugging Face访问Token。除了模型的参数,这个命令还会下载对应的Tokenizer和一些其他的文件,如模型卡片、使用许可等。

选择微调方案

Torchtune提供了多个预置的微调方案,适用于不同的场景和任务。你可以通过以下命令查看所有可用的方案:

 tune ls

在这个例子中,我们选择

lora_finetune_single_device

方案。这个方案使用LoRA(Low-Rank Adaptation)技术在单个GPU设备上对LLM进行微调。LoRA通过引入低秩的适配器参数,在不改变原始模型参数的情况下,实现对模型的微调。这种方法可以显著减少微调过程中的内存消耗和计算开销,使得在单个GPU上微调大型LLM成为可能。

配置微调任务

每个微调方案都有一个对应的配置文件,定义了微调任务的各种参数。

lora_finetune_single_device

方案的默认配置文件路径为

llama2/7B_lora_single_device.yaml

。我们可以直接使用这个配置文件,也可以在此基础上进行修改。

Torchtune支持两种方式来修改配置文件:

  1. 通过命令行参数覆盖配置文件中的参数:
 tune run lora_finetune_single_device \--config llama2/7B_lora_single_device.yaml \train.batch_size=128 \train.num_epochs=5
  1. 将配置文件复制到本地,然后直接修改配置文件:
 tune cp llama2/7B_lora_single_device.yaml custom_config.yaml

修改

custom_config.yaml

文件,然后运行:

 tune run lora_finetune_single_device \--config custom_config.yaml

通过灵活地使用这两种方式,我们可以方便地控制微调任务的各种参数,如数据集、批大小、学习率、训练轮数等。

启动微调任务

配置文件准备好之后,我们就可以启动微调任务了。使用以下命令启动

lora_finetune_single_device

方案:

 tune run lora_finetune_single_device \--config llama2/7B_lora_single_device.yaml

Torchtune会自动加载预训练模型、Tokenizer、数据集等,并开始微调过程。在微调过程中,Torchtune会实时记录训练损失、评测指标、GPU使用情况等信息,方便用户监控训练进度和调试模型。

结果展示

下面是我用W&B做的示例结果,这张图时训练的表现

下面是内存的占用

保存和使用微调后的模型

微调完成后,我们可以使用以下命令将微调后的模型导出到指定路径:

tune export lora_finetune_single_device \--output_dir /path/to/output

导出的模型可以直接用于下游任务的推理和服务。我们也可以将导出的模型上传到Hugging Face Hub,方便其他用户使用。

小结

在这一节中,我们通过一个完整的实例,展示了如何使用Torchtune微调LLM。我们使用了

lora_finetune_single_device

方案在单个GPU上对LLaMA-2-7B模型进行了微调。整个过程包括:

  1. 准备工作:安装Torchtune,注册Hugging Face账号。
  2. 下载预训练模型:从Hugging Face Hub下载LLaMA-2-7B模型。
  3. 选择微调方案:选择lora_finetune_single_device方案。
  4. 配置微调任务:修改lora_finetune_single_device方案的默认配置文件。
  5. 启动微调任务:使用tune run命令启动微调任务。
  6. 保存和使用微调后的模型:使用tune export命令导出微调后的模型。

可以看到,Torchtune大大简化了LLM微调的流程,使得用户可以通过简单的命令行操作完成端到端的微调任务。同时,Torchtune提供了丰富的日志和可视化工具,方便用户监控和调试训练过程。

在接下来的内容中,我们将详细介绍两种参数高效的微调方法:LoRA和QLoRA。我们也会讨论如何使用Torchtune实现这两种方法。

参数高效的微调方法:LoRA和QLoRA

在前面的内容中,我们介绍了如何使用Torchtune微调LLM。然而,随着LLM规模的不断增长,传统的微调方法面临着越来越大的挑战。以LLaMA-2-7B为例,这个模型有70亿个参数,即使在现代的GPU设备上,也难以支持对所有参数的微调。因此,我们需要探索一些参数高效的微调方法,在保证微调效果的同时,降低计算和存储开销。

LoRA:低秩适配

LoRA(Low-Rank Adaptation)是一种参数高效的微调方法,由微软研究院在2021年提出。LoRA的核心思想是在预训练模型的基础上,引入一组低秩的适配器参数。在微调过程中,我们只更新这些适配器参数,而保持预训练模型的参数不变。这样,我们就可以在不增加模型规模的情况下,实现对模型的微调。

具体来说,对于预训练模型中的每个线性层,LoRA引入两个低秩矩阵A和B,将原始的线性变换y = Wx修改为:

其中

而r是一个远小于d的超参数,称为LoRA秩。在微调过程中,我们只训练和更新矩阵A和B,而保持W不变。由于r远小于d,因此LoRA引入的额外参数数量也远小于原始模型的参数数量。

下面是一个使用Torchtune实现LoRA微调的示例代码:

import torch  
from torchtune.models.llama2 import llama2_7b, lora_llama2_7b  
from torchtune.modules.peft.peft_utils import get_adapter_params, set_trainable_params  # 加载预训练的LLaMA-2-7B模型
base_model = llama2_7b(weights="/path/to/llama2_7b_weights", tokenizer="/path/to/llama2_tokenizer")# 在LLaMA-2-7B模型上应用LoRA
lora_model = lora_llama2_7b(  lora_attn_modules=['q_proj', 'v_proj'],  lora_rank=8,  lora_alpha=16
)  # 将预训练权重加载到LoRA模型中     
lora_model.load_state_dict(base_model.state_dict(), strict=False)  # 设置只有LoRA参数可训练
lora_params = get_adapter_params(lora_model) 
set_trainable_params(lora_model, lora_params)# 使用torchtune的LoRA微调方案进行训练
tune_command = """  
tune run --nnodes 1 --nproc_per_node 2 lora_finetune_distributed --config llama2/7B_lora \  
lora_attn_modules=['q_proj', 'k_proj', 'v_proj', 'output_proj'] \  
lora_rank=32 lora_alpha=64 output_dir=./lora_experiment_1  
"""

在这个例子中,我们首先加载了预训练的LLaMA-2-7B模型,然后在其上应用了LoRA。我们在attention层的query和value投影矩阵上引入了LoRA适配器,适配器的秩为8。接着,我们使用

load_state_dict

函数将预训练权重加载到LoRA模型中,并通过

set_trainable_params

函数设置只有LoRA参数是可训练的。最后,我们使用torchtune的

lora_finetune_distributed

方案在多个GPU上对LoRA模型进行微调。

通过引入LoRA,我们可以将微调过程中需要训练和更新的参数数量减少到原来的1%左右,大大降低了微调的计算和存储开销。同时,研究表明,LoRA微调的效果与全参数微调相当,在某些任务上甚至略有提升。

QLoRA:量化LoRA

QLoRA(Quantized Low-Rank Adaptation)是LoRA的一个扩展,由华盛顿大学与英伟达合作提出。QLoRA在LoRA的基础上,对预训练模型的权重进行量化,进一步减少了模型的存储开销。

具体来说,QLoRA使用4-bit NF4(4-bit Normalized Fixed-Point)格式对预训练模型的权重进行量化。NF4格式使用一个比特表示符号,三个比特表示尾数,动态范围为[-8, 7]。量化后的权重只需要原来的1/8的存储空间,但在实际使用时,需要将其解量化为全精度(FP16或FP32)格式。

下面是一个使用Torchtune实现QLoRA微调的示例代码:

import torch
from torchtune.models.llama2 import qlora_llama2_7b
from torchtune.trainers import LoRAFinetuneTrainer# 初始化QLoRA LLaMA-2-7B模型  
qlora_model = qlora_llama2_7b(lora_attn_modules=["q_proj", "v_proj"])# 准备QLoRA微调的Trainer
trainer = LoRAFinetuneTrainer(model=qlora_model,dataset_path="path_to_dataset", output_dir="output_dir",batch_size=2,  max_steps=1000,logging_steps=100
)# 开始微调
trainer.train()# 保存微调后的模型
trainer.save_model("path_to_saved_model")

这个例子与前面的LoRA微调非常类似,主要的区别在于:

  1. 我们使用qlora_llama2_7b函数初始化了一个QLoRA LLaMA-2-7B模型,该模型的权重是4-bit量化的。
  2. 我们使用LoRAFinetuneTrainer准备了一个专门用于QLoRA微调的Trainer,设置了数据集路径、输出路径、批大小等参数。
  3. 在微调过程中,QLoRA模型的权重始终保持量化状态,只有LoRA适配器的参数被更新。这进一步减少了微调过程中的内存消耗。
  4. 微调完成后,我们使用save_model函数将微调后的模型保存到指定路径。保存的模型中包含了量化的预训练权重和LoRA适配器参数。在实际使用时,我们需要将量化的权重解量化为全精度格式。

通过结合LoRA和量化,QLoRA可以将微调过程中的内存消耗降低到原来的1/8左右,使得在消费级GPU上微调十亿规模的LLM成为可能。同时,研究表明,QLoRA微调的效果与LoRA微调相当,在某些任务上甚至略有提升。

总结

本文介绍了如何使用PyTorch的Torchtune库进行大型语言模型(LLM)的微调。Torchtune提供了一套简单、灵活、高效的工具和框架,使得研究人员和开发者能够轻松地对LLM进行调试、训练和部署。文章详细介绍了Torchtune的设计原则、核心概念和主要特性,并通过一个完整的实例演示了如何使用Torchtune微调LLaMA-2-7B模型。此外,文章还介绍了两种参数高效的微调方法:LoRA和QLoRA。这两种方法通过引入低秩适配器和量化技术,大大减少了微调过程中的计算和存储开销,为LLM的应用开辟了新的可能性。

https://avoid.overfit.cn/post/b2ebc9f27bd64b949110f306ab0365df

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

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

相关文章

探索Unity:从游戏引擎到元宇宙体验,聚焦内容创作

unity是实时3D互动内容创作和运营平台&#xff0c;包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者&#xff0c;借助Unity将创意变成现实。提供一整套完善的软件解决方案&#xff0c;可用于创作、运营和变现任何实时互动的2D和3D内容&#xff0c;支持平台包括手机、…

3、setup语法糖

setup 概述 setup是Vue3中一个新的配置项&#xff0c;值是一个函数&#xff0c;它是 Composition API 组件中所用到的&#xff1a;数据、方法、计算属性、监视......等等&#xff0c;均配置在setup中。 特点如下&#xff1a; setup函数返回的对象中的内容&#xff0c;可直接…

USB协议学习

文章目录 USB发展背景发展变化速度等级通讯接口 四种传输主设备 & 从设备主设备从设备 连接与检测高速设备与主机连接USB总线常见的几种状态 枚举过程特点 控制传输学习资料 USB发展背景 发展变化 USB1.1&#xff1a;规范了USB低全速传输&#xff1b; USB2.0&#xff1a;…

讲讲 kafka 维护消费状态跟踪的方法?

大家好&#xff0c;我是锋哥。今天分享关于【讲讲 kafka 维护消费状态跟踪的方法&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 讲讲 kafka 维护消费状态跟踪的方法&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Kafka 中&#x…

【成都新篇】龙信科技电子取证实验室,引领科技取证新时代

文章关键词&#xff1a;电子数据取证实验室、手机取证、介质取证、云取证、现场勘查、电子物证 在科技创新的浪潮中&#xff0c;龙信科技成都实验室以其卓越的电子数据取证服务&#xff0c;成为了中西部地区一颗璀璨的明珠。随着新址的搬迁&#xff0c;我们不仅扩大了业务范围…

linux自动清理管理日志文件 logrotate

logrotate是linux通常会自带的工具&#xff0c;可以自动切割清理日志文件 一、安装&#xff08;通常无需&#xff09; 通常系统自带 sudo apt install logrotate或者 sudo dnf install logrotate二、具体使用 以nginx日志为例 1.创建脚本文件 vi /etc/logrotate.d/nginx…

JDBC学习笔记

九月十八: 需要添加jar包到依赖 虽然能驱动了,但是仍然不知道当时为什么不能驱动, 8.0以上会自动驱动, 也就是说只需要做好connection和statement 连接数据库的五种方式: 方式五: Statement: SQL注入小案例: ? 相当于占位符 JDBCUtils: 事务与批处理: String sql "INS…

wps Excel下拉框生成填充及下拉框内容颜色格式修改

一、Excel下拉框生成&#xff1a;(路径&#xff1a;数据-下拉列表) 1、先选中需要插入下拉列表的单元格 2、然后进入“数据-下拉列表”中增加对应的下拉项目(例如&#xff1a;√&#xff0c;X) 二、下拉框选项颜色和字体修改 1、先选中需要修改的下拉列表的所有单元格 2、然…

预约小程序多选修改——思路分享

预约小程序——多选的修改 预约小程序模版的来源&#xff1a;yunzizyy/ZixiAppt: 在这个小程序上做了较多的修改&#xff08;补充了丢失的代码、二维码签到、惩罚封禁机制、多选时间段和设置日期&#xff09;&#xff0c;其中有一个涉及到了时间段选择中的多选功能的添加&…

PostgreSQL核心揭秘(二)-进程和内存架构

目录 1、进程架构2、进程架构图 3、内存架构 4、内存架构图 PostgreSQL 的进程架构采用了一个多进程的设计&#xff0c;这使其能够有效地管理并发连接和资源。以下是 PostgreSQL 的主要进程架构组成部分的详细描述&#xff1a; 1. 主进程&#xff08;Postmaster&#xff09; 功…

pta题目

1.查询至少生产两种不同的计算机(PC或便携式电脑)且机器速度至少为133的厂商 AC: select distinct(pd.maker) --去重查询 from product pd where pd.type in (个人电脑, 便携式电脑) --题目上要求的&#xff0c;至少一个&#xff0c;in是从里面选择 and --这里也是model其实相…

【Effective C++】阅读笔记2

1. 复制对象时要保证复制内容完整性 错误场景复现&#xff08;没有复制基类部分&#xff09; 如果一个类中包含多个成员变量或者继承了基类&#xff0c;那么在拷贝构造函数或者赋值运算符中&#xff0c;必须保证所有成员的基类部分被复制。 基类没有被复制&#xff0c;这样就都…

线程基础知识、jmm(Java内存模型)

目录 线程基础知识 并发与并行 进程和线程 线程优先级 创建线程的方式主要有三种 休眠 作出让步 join() 方法 线程协作注意什么 理解线程状态 选择合适的协作工具 共享资源的访问控制 避免竞争条件 创建线程几种方式 线程状态&#xff0c;状态之间切换 新建&…

计算机毕业设计Spark+大模型股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

MyBatis-Plus快速入门:从安装到第一个Demo

一、前言 在现代 Java 应用程序中&#xff0c;数据访问层的效率与简洁性至关重要。MyBatis-Plus 作为 MyBatis 的增强工具&#xff0c;旨在简化常见的数据操作&#xff0c;提升开发效率。它提供了丰富的功能&#xff0c;如自动生成 SQL、条件构造器和简单易用的 CRUD 操作&…

零基础Java第十二期:类和对象(三)

目录 一、static成员&#xff08;补&#xff09; 1.1. static修饰成员方法 1.2. static成员变量初始化 二、代码块 2.1. 静态代码块和实例代码块 ​三、对象的打印 一、static成员&#xff08;补&#xff09; 1.1. static修饰成员方法 public class Linear {public st…

Topaz Video AI for Mac 视频无损放大软件安装教程【保姆级,操作简单轻松上手】

Mac分享吧 文章目录 Topaz Video AI for Mac 视频无损放大软件 安装完成&#xff0c;软件打开效果一、Topaz Video AI 视频无损放大软件 Mac电脑版——v5.3.5⚠️注意事项&#xff1a;1️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件&#xff0c;将安装包从左侧拖入右侧文…

Java基础语法①Java特点和环境安装

目录 1. Java的概念和用途 1.1 Java的概念和发展史 1.2 Java的重要性 1.3 Java的特点 2. Java环境 2.1 JVM 和 JDK 2.2 Java环境安装 2.3 安装IntelliJ IDEA并使用 写在前面&#xff1a;本人已经学习了C/C方向的内容&#xff0c;大二结束找到实习回学校后还有时间&…

atest v0.0.18 提供了强大、灵活的 HTTP API Mock 功能

atest 发布 v0.0.18 atest 是致力于帮助开发者持续保持高质量 API 的开源接口工具。 你可以在命令行终端或者容器中启动&#xff1a; docker run -p 8080:8080 ghcr.io/linuxsuren/api-testing:v0.0.18 亮点 在开源之夏 2024 中 atest 增加了基于 MySQL 的测试用例历史的支持HT…

ele-table表格列表内,双击编辑部分信息(el-table组件同理)

说明 ele-table 为公司内部组件&#xff0c;重点看 【主要代码】 部分代码 ele-table表格列表内&#xff1a;双击需要编辑的区域&#xff0c;编辑部分信息 实现 双击需要编辑的数据&#xff0c;展示输入框/日期选择&#xff0c; 展示输入框&#xff1a;修改完之后&#xff0c;按…