论文阅读 - TIME-LLM: TIME SERIES FORECASTING BY REPROGRAMMING LARGE LANGUAGE MODELS

论文链接: https://arxiv.org/abs/2310.01728

目录

摘要

1 INTRODUCTION

2 RELATED WORK

3 METHODOLOGY

3.1 MODEL STRUCTURE

4 MAIN RESULTS

4.1 长期预测

 4.2 短期预测

 4.3 FEW-SHOT FORECASTING

 5 CONCLUSION AND FUTURE WORK


摘要

动机:

        时间序列预测在许多真实世界的动态系统中具有重要意义,并已得到广泛研究。

        与自然语言处理(NLP)和计算机视觉(CV)不同,在自然语言处理和计算机视觉中,一个大型模型可以处理多个任务,而时间序列预测模型往往是专门的,需要针对不同的任务和应用进行不同的去符号化。虽然预训练基础模型在 NLP 和 CV 领域取得了令人瞩目的进展,但它们在时间序列领域的发展却受到了数据稀缺性的限制。

        最近的研究表明,大型语言模型(LLM)对复杂的标记序列具有强大的模态识别和推理能力。然而,如何有效地调整时间序列数据和自然语言的模式以利用这些能力仍然是一个挑战

        

方法:

        在这项工作中,提出了 TIME-LLM,这是一个重新编程的框架,在保持骨干语言模型不变的情况下,将 LLM 重新用于一般时间序列预测。

                首先用文本原型对输入的时间序列进行重新编程,然后将其输入到冻结的 LLM 中,使两种模式保持一致。

                为了增强 LLM 对时间序列数据进行推理的能力,作者提出了 "提示即前缀"(Prompt-as-Prefix,PaP),它可以丰富输入上下文,并指导对重新编程的输入片段进行转换。

                LLM 最后对转换后的时间序列片段进行预测,从而获得预测结果。

        综合评估表明,TIME-LLM 是一种功能强大的时间序列学习器,其性能优于最先进的专业预测模型。更重要的是,TIME-LLM 在少数几次学习和零次学习的情况下都表现出色。

1 INTRODUCTION

背景:

        时间序列预测是许多真实世界动态系统的关键能力(Jin 等人,2023a),应用范围从需求规划(Leonard,2001 年)和库存优化(Li 等人,2022 年)到能源负荷预测(Liu 等人,2023a)和气候建模(Schneider & Dickinson,1974 年)。

        每项时间序列预测任务通常都需要广泛的领域专业知识和特定任务的模型设计。这与 GPT-3(Brown 等人,2020 年)、GPT-4(OpenAI,2023 年)、Llama(Touvron 等人,2023 年)等基础语言模型形成了鲜明对比。

LLM模型优势:

        预先训练的基础模型,如大型语言模型(LLM),推动了计算机视觉(CV)和自然语言处理(NLP)的快速发展。虽然时间序列建模没有获得同样的重大突破,但 LLMs 令人印象深刻的能力激发了它们在时间序列预测中的应用(Jin 等人,2023b)。利用 LLMs 推动预测技术的发展,有几个方面需要考虑: 通用性。LLMs 已经证明了其在少数几次和零次迁移学习方面的卓越能力(Brown 等人,2020 年)。它具有跨领域通用预测的潜力,而无需根据任务从头开始重新训练。与此相反,目前的预测方法往往是按领域僵化地专门化:

                数据效率。通过利用预先训练的知识,LLMs 已显示出只需少量示例就能执行新任务的能力。这种数据效率可以在历史数据有限的情况下进行预测。相比之下,目前的方法通常需要大量的领域内数据。

                推理。LLMs 具有复杂的推理和模式识别能力(Mirchandani 等人,2023 年;Wang 等人,2023 年;Chu 等人,2023 年)。利用这些技能,可以通过学习到的高层次概念进行高精度预测。现有的非 LLM 方法主要是统计方法,没有太多的先天推理能力。

                多模态知识。随着 LLM 架构和训练技术的改进,它们会获得更多不同模式的知识,如视觉、语音和文本(Ma 等人,2023 年)。利用这些知识可以实现融合不同数据类型的协同预测。传统工具缺乏联合利用多个知识库的方法。

                易于优化。LLM 只需在大规模计算中训练一次,然后就可以应用于预测任务,而无需从头开始学习。优化现有预测模型往往需要大量的架构搜索和超参数调整(Zhou 等人,2023b)。

                总之,与当前的专业建模范式相比,LLM 为时间序列预测提供了一条更通用、更高效、更协同和更易用的途径。因此,将这些功能强大的模型用于时间序列数据,可以释放尚未开发的巨大潜力。

将LLM用于时间序列推理的难点:

        上述优势的实现取决于时间序列数据和自然语言模式的有效协调。然而,这是一项具有挑战性的任务,因为 LLM 是在离散的token上运行的,而时间序列数据本质上是连续的。此外,解释时间序列模式的知识和推理能力并不自然地存在于 LLM 的预训练中。因此,如何释放 LLM 内的知识,以准确、数据高效和与任务无关的方式激活其进行一般时间序列预测的能力,仍然是一个有待解决的难题。

方法:

        在这项工作中,作者提出了 TIME-LLM,这是一个重新编程框架,可在保持骨干模型不变的情况下,将大型语言模型用于时间序列预测。

        其核心思想是将输入的时间序列重新编程为更适合语言模型能力的文本原型表示

        为了进一步增强模型对时间序列概念的推理能力,作者引入了 "提示即前缀"(Prompt-as-Prefix,PaP)这一新思路,利用额外的上下文来丰富输入时间序列,并以自然语言的方式提供任务指示。这为应用于重新编程输入的所需转换提供了声明性指导。

        然后对语言模型的输出进行预测,生成时间序列预测。

实验结果:

        综合评估结果表明,通过这种重新编程方法,大型语言模型可以作为有效的少量和零少量时间序列学习器,其性能优于专门的预测模型。通过利用 LLM 的推理能力,同时保持模型的完整性,作者的工作为多模态基础模型指明了方向,这些模型可以在语言和序列数据任务中表现出色。提出的重编程框架提供了一种可扩展的范式,可为大型模型赋予超出其原始预训练的新能力。在这项工作中的主要贡献可归纳如下:

                引入了一个新概念,即在不改变预先训练好的骨干模型的情况下,为时间序列预测重新编程大型语言模型。在此过程中,证明了预测可以被视为另一种 "语言 "任务,可以通过现成的 LLM 有效解决。

                提出了一个新框架--TIME- LLM,其中包括将输入时间序列重新编程为对 LLM 来说更自然的文本原型表示,并通过声明性提示(如领域专家知识和任务指示)来增强输入上下文,从而指导 LLM 进行推理。技术表明,多模态基础模型在语言和时间序列方面都很出色。

                在主流预测任务中,TIME-LLM 的性能始终优于最先进的技术,尤其是在少数几次预测和零次预测的情况下。此外,在实现这一卓越性能的同时,还保持了出色的模型重编程效率。因此,作者的研究为释放 LLM 在时间序列和其他序列数据方面尚未开发的潜力迈出了坚实的一步。

2 RELATED WORK

        特定任务学习。大多数时间序列预测模型都是为特定任务和领域(如交通预测)而设计的,并在小规模数据上进行端到端训练。示例如图1:例如,ARIMA 模型是为单变量时间序列预测而设计的(Box 等人,2015 年),LSTM 网络是为序列建模而定制的(Hochreiter & Schmidhuber,1997 年),而时间卷积网络(Bai 等人,2018 年)和变换器(Wen 等人,2023 年)则是为处理较长的时间依赖性而开发的。这些模型虽然在狭窄的任务中取得了良好的性能,但缺乏通用性,无法推广到各种时间序列数据中。

 (图 1:重新编程大型语言模型(LLMs)的示意图,比较(a)特定任务学习和(b)模型微调。(c) 建议研究并演示了如何有效地重新编程开源 LLM,使其成为功能强大的时间序列学习器,而在这种情况下,没有现成的经过精心开发的时间序列预训练模型。)

        模态内适应。CV 和 NLP 领域的相关研究已经证明了预训练模型的有效性,这些模型可以针对各种下游任务进行微调,而无需从头开始进行昂贵的训练(Devlin 等人,2018 年;Brown 等人,2020 年;Touvron 等人,2023 年)。受这些成功经验的启发,近期的研究主要集中在时间序列预训练模型(TSPTMs)的开发上。其中第一步涉及使用不同策略进行时间序列预训练,如监督学习(Fawaz 等人,2018 年)或自我监督学习(Zhang 等人,2022b;Deldari 等人,2022 年;Zhang 等人,2023 年)。这样,模型就能学习代表各种输入时间序列的知识。一旦经过预训练,它就可以在类似领域进行微调,学习如何执行特定任务(Tang 等人,2022 年)。图 1(b) 就是一个例子。TSPTMs 的开发利用了 NLP 和 CV 中预训练和微调的成功经验,但由于数据稀少,在较小规模上仍然受到限制。        

        跨模态适应。在模态内适应的基础上,最近的工作进一步探索了通过多模态微调(Yin 等,2023 年)和模型重编程(Chen,2022 年)等技术,将 NLP 和 CV 中强大的预训练基础模型的知识转移到时间序列建模中。作者的方法与这一类别相符;然而,目前关于时间序列的相关研究还很有限。一个例子是 Voice2Series(Yang 等人,2021 年),它通过将时间序列编辑为适合声学模型的格式,将声学模型(AM)从语音识别调整为时间序列分类。最近,Chang 等人(2023 年)提出了使用 LLM 进行时间序列预测的 LLM4TS。它在 LLM 上设计了一个两阶段的微调过程--首先对时间序列进行有监督的预训练,然后进行特定任务的微调。Zhou 等人(2023a)在不改变自注意层和前馈层的情况下,利用预训练语言模型。该模型在各种时间序列分析任务中进行了微调和评估,并通过转移自然语言预训练的知识,展示了可比的或最先进的性能。与上述方法不同的是,作者既不直接编辑输入时间序列,也不对主干 LLM 进行微调。相反,如图 1(c)所示,建议使用源数据模式对时间序列进行重新编程,同时进行提示,以释放 LLM 作为有效时间序列机器的潜力。

3 METHODOLOGY

        模型架构如图 2 所示。重点是重新编程嵌入式可视语言基础模型,如 Llama(Touvron 等人,2023 年)和 GPT-2(Radford 等人,2019 年),用于一般时间序列预测,而不需要对骨干模型进行任何微调。

        具体来说,考虑以下问题:给定一系列历史观测数据 X \in R^{N\times T},由跨 T 个时间步的 N 个不同一维变量组成,目标是重新编程一个大型语言模型 f (·) 以理解输入时间序列,并准确预测未来 H 个时间步的读数,用 \hat{Y} \in R^{N\times H} 表示,总体目标是最小化地面实况 Y 与预测之间的均方误差,即 \frac{1}{H} \sum_{h=1}^{H} ||\hat{Y}_h - Y_h||_F^2

        方法包括三个主要部分: (1) 输入转换;(2) 预训练和冻结的 LLM;(3) 输出投影。

        最初,一个多变量时间序列被分割成 N单变量时间序列,随后对其进行独立处理(Nie 等人,2023 年)。第 i 个序列表示为 X^{(i)} \in R^{1\times T},在用学习到的文本原型重新编程以调整源模态和目标模态之前,要对其进行归一化、修补和嵌入。

        然后,增强 LLM 的时间序列推理能力,促使它与重新编程的patch一起生成输出表示,并投射到最终预测结果 \hat{Y}^{(i)} \in R^{1\times H}中。

        只有轻量级输入转换和输出投影的参数会被更新,而骨干语言模型则被冻结。视觉语言模型和其他多模态语言模型通常通过配对的跨模态数据进行微调,而 TIME-LLM 模型则是直接优化的,只需一小组时间序列和几个训练历时就能使用,与从头开始建立大型特定领域模型或对其进行微调相比,TIME-LLM 保持了高效率,并减少了资源限制。为进一步减少内存占用,可无缝集成各种现成技术(如量化),以精简 TIME-LLM。

3.1 MODEL STRUCTURE

        输入嵌入。首先,通过可逆实例归一化(RevIN)将每个输入通道 X(i) 单独归一化为具有零均值和单位标准差,以减轻时间序列分布偏移(Kim 等人,2021 年)。

        然后,将 X(i) 划分为若干个长度为 Lp 的连续重叠或非重叠斑块(Nie 等人,2023 年);

        因此,输入斑块的总数为 P = ⌊ (T -Lp) /S ⌋ + 1,其中 S 表示水平滑动步长。其基本动机有两个方面:(1)通过将局部信息聚合到每个patch中,更好地保留局部语义信息;(2)作为token化,形成紧凑的输入标记序列,减少计算负担。给定这些patch X_P^{(i)} \in R^{P\times L_p},将其嵌入为 \hat{X}_P^{(i)} \in R^{P \times d_m},采用简单的线性层作为patch嵌入器,创建维度 d_m

        patch重编程。在这里,将patch嵌入重新编程到源数据表示空间,使时间序列和自然语言的模式相一致,从而激活骨干网的时间序列理解和推理能力。一种常见的做法是学习一种 "噪音 "形式,当这种噪音应用于目标输入样本时,可使预先训练好的源模型在无需更新参数的情况下产生所需的目标输出。. 对于数据桥接而言,这在技术上是可行的。

        示例包括重新利用视觉模型以处理跨域图像(Misra 等人,2023)或重新编程声学模型以处理时间序列数据(Yang 等人,2021)。

难点:

        在这两种情况下,源数据和目标数据之间都存在显式的、可学习的转换,从而允许直接编辑输入样本。然而,时间序列既不能直接编辑,也不能用自然语言无损描述,这对直接引导LLM在不进行资源密集型微调的情况下理解时间序列提出了重大挑战。

        为了缩小这一差距,作者建议在骨干网中使用预先训练好的词嵌入 E \in R^{V \times D}(其中 V 是词汇量大小)对\hat{X}_P^{(i)} 进行重新编程。尽管如此,并没有先验知识表明哪些源token是直接相关的。

        因此,简单地利用 E 将导致巨大且可能密集的重新编程空间。一个简单的解决方案是通过线性探测 E 来维护一小部分文本原型,表示为 E' \in R^{V' \times D},其中 V ′ ≪ V。

        图 3(a) 是一个示例。文本原型学习连接的语言线索,例如 "短上"(红线)和 "稳下"(蓝线),然后将其组合起来,以表示本地patch信息(例如,"短上然后稳下 "表示patch 5 的特征),而无需离开预先训练语言模型的空间。这种方法非常高效,可以自适应地选择相关的源信息。为此,采用了多头交叉注意层。

         具体来说,对于每个头 k = {1, - - - , K},定义查询矩阵 Q_k^{(i)} = \hat{X}_P^{(i)} W_K^Q、键矩阵 K_k^{(i)} = E'W_k^K和值矩阵 V_k^{(i)} = E' W_k^V,其中 W_k^Q \in R^{d_m \times d}W_k^K, W_k^V \in R^{D\times d}。具体来说,D 是骨干模型的隐藏维度,d = ⌊ d_m / K⌋。然后,对每个注意力头中的时间序列patch进行重新编程的操作,定义如下:

         将每个头部的Z^{(i)}_k \in R^{P \times d} 汇总,得到 Z^{(i)} \in R^{P \times d_m} 。然后进行线性投影,使隐藏维度与主干模型保持一致,得到 O^{(i)} \in R^{P \times D}

        提示作为前缀。提示是针对特定任务激活 LLMs 的直接而有效的方法(Yin 等人,2023 年)。然而,将时间序列直接转换为自然语言面临着相当大的挑战,既妨碍了指令数据集的创建,也妨碍了在不影响性能的情况下有效利用即时提示(Xue & Salim,2022 年)。

        最近的进展表明,其他数据模式(如图像)可以作为提示的前缀进行无缝整合,从而促进基于这些输入的有效推理(Tsimpoukelli 等人,2021 年)。受这些发现的启发,作者为了使方法直接适用于真实世界的时间序列,提出了另一个问题:提示可以作为前缀来丰富输入上下文并指导重新编程的时间序列patch的转换吗?它在完成patch重编程的同时,显著增强了 LLM 对下游任务的适应性(见后面的第 4.5 节)。

        图 3(b) 展示了这两种提示方法。在 "patch作为前缀 "方法中,语言模型在自然语言的提示下预测时间序列中的后续值。这种方法会遇到一些限制:

                (1) 语言模型在处理高精度数字时,如果没有外部工具的帮助,通常会表现出灵敏度较低的问题,因此,要准确地处理实际的长期预测任务,会面临巨大的挑战;

                (2) 不同的语言模型需要进行复杂的、个性化的后处理,因为它们是在不同的语料库中进行预训练的,在精确高效地生成高精度数字时,可能会采用不同的token化类型。这就导致预测用不同的自然语言格式表示,如用['0', '.','6','1']和['0', '.','61']表示十进制 0.61

        而 "提示作为前缀 "则巧妙地避免了这些限制。在实践中,确定了构建有效提示的三个关键要素:

                (1) 数据集上下文;

                (2) 任务指令;

                (3) 输入统计数据。

        图 4 是一个prompt示例。数据集的背景为 LLM 提供了有关输入时间序列的重要背景信息,而输入时间序列往往在不同领域表现出不同的特征。

        任务指令是 LLM 为特定任务转换patch嵌入的重要指南。还利用趋势和滞后期等其他重要统计数据来丰富输入时间序列,以促进模式识别和推理。

 

        输出投影。如图 2 所示,在通过冻结 LLM 对提示嵌入和patch嵌入 O^{(i)} 进行打包和前馈后,丢弃前缀部分,得到输出表示。

        然后,对其进行扁平化和线性投影,得出最终预测结果 \hat{Y}^{(i)}

4 MAIN RESULTS

        TIME-LLM 在多种基准和环境下,特别是在少次和零次情况下,始终以较大优势优于最先进的预测方法。作者将方法与大量最新模型进行了比较,包括最近一项对时间序列分析语言模型进行微调的研究(Zhou 等,2023a)。为了确保比较的公平性,在所有基线上都采用了统一的评估管道,并坚持使用(Wu 等,2023 年)中的实验配置。除非另有说明,否则使用 Llama-7B (Touvron 等,2023)作为默认主干。

        基线。与 SOTA 时间序列模型进行了比较,并引用了(Zhou et al. 基准包括一系列基于变换器的方法: PatchTST (2023)、ESTformer (2022)、Non-Stationary Transformer (2022)、FEDformer (2022)、Aut- oformer (2021)、Informer (2021) 和 Reformer (2020)。还选择了一组最新的竞争模型,包括 GPT4TS (2023a)、LLMTime (2023)、DLinear (2023)、TimesNet (2023) 和 LightTS (2022a)。在短期预测方面,进一步将模型与 N-HiTS (2023b) 和 N-BEATS (2020) 进行了比较。

4.1 长期预测

        设置。对 ETTh1、ETTh2、ETTm1、ETTm2、天气、电力(ECL)、交通和 ILI 进行了评估。实施和数据集详情见附录 B。输入时间序列长度 T 设为 512,使用四种不同的预测视距 H∈{96, 192, 336, 720}。评估指标包括均方误差(MSE)和平均绝对误差(MAE)

        结果 简要结果见表 1。在大多数情况下,TIME-LLM 都优于所有基线,而且明显优于大多数基线。与 GPT4TS(Zhou 等,2023a)的比较尤其值得注意。GPT4TS 是一项最新的工作,涉及对骨干语言模型的微调。作者注意到,GPT4TS 和 TimesNet 的平均性能分别提高了 12% 和 20%。与 SOTA 任务专用变换器模型 PatchTST 相比,通过重新编程最小的 Llama,TIME-LLM 实现了平均 MSE 降低 1.4%。与其他模型(如 DLinear)相比,作者的改进也很明显,超过了 12% 。

 4.2 短期预测

        设置。选择 M4 基准(Makridakis 等人,2018 年)作为测试平台,其中包含不同采样频率的营销数据集合。更多详情见附录 B。这种情况下的预测视野相对较小,在 [6, 48] 范围内。输入是预测范围的两倍。评估指标包括对称平均绝对百分比误差 (SMAPE)、平均绝对比例误差 (MSAE) 和总体加权平均值 (OWA)

        结果 表 2 列出了在所有方法中使用统一种子的简要结果。TIME-LLM 始终超越所有基线,比 GPT4TS 高出 8.7%。即使与 SOTA 模型、N-HiTS(Challu 等,2023b)、MASE 和 OWA 相比,TIME-LLM 仍然具有竞争力。

 4.3 FEW-SHOT FORECASTING

        设置。LLM 最近展示了非凡的少量学习能力(Liu 等人,2023b)。在本节中,将评估重新编程的 LLM 在预测任务中是否保留了这种能力。为了进行公平比较,作者沿用了(Zhou 等,2023a)中的设置,并在训练数据有限(即≤前 10%的训练时间步数)的情况下进行评估

        结果 简要的 10% 和 5% 少量学习结果见表 3 和表 4。表 3 和表 4中。TIME- LLM 明显优于所有基线方法,将其归功于重新编程的 LLM 成功激活了知识。有趣的是,作者的方法和 GPT4TS 都持续超越了其他具有竞争力的基线方法,进一步凸显了语言模型作为精通时间序列机器的潜在能力。

         与 GPT4TS 相比,作者的方法在 10% 少量学习的情况下实现了 5% 的 MSE 降低,而无需对 LLM 进行任何微调。与最近的 SOTA 模型相比例如 PatchTST、DLinear 和 TimesNet,作者的模型在 MSE 方面的平均提升率分别超过了 8%、12% 和 33%。在 5% 少量学习场景中,作者也发现了类似的趋势,与 GPT4TS 相比,平均提升超过了 5%。与 PatchTST、DLinear 和 TimesNet 相比,TIME-LLM 的平均改进幅度超过了 20%。

 5 CONCLUSION AND FUTURE WORK

        TIME-LLM 通过将时间序列数据重新编程为对 LLM 更为自然的文本原型,并通过 "提示作为前缀 "提供自然语言指导以增强推理能力,显示了将冷冻大型语言模型改编为时间序列预测模型的前景。评估结果表明,经过调整的 LLM 可以超越专门的专家模型,这表明它们具有作为有效时间序列机器的潜力。研究结果还提供了一种新见解,即时间序列预测可以被视为另一种 "语言 "任务,可以由现成的 LLM 来处理,从而通过我们的 Time-LLM 框架实现最先进的性能。进一步的研究应探索最佳的重编程表征,通过持续的预训练用显式时间序列知识丰富 LLM,并建立跨时间序列、自然语言和其他模式的联合推理的多模式模型。此外,还应该考虑应用重编程框架,使 LLM 具备更广泛的时间序列分析能力或其他新能力。

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

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

相关文章

设计模式19——观察者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 观察者模式(Observ…

C++学习/复习8--STL简介/六大组件/缺陷

一、STL简介 二、六大组件 三、面试题 四、STL缺陷

读后感:《SQL数据分析实战》运营SQL实用手册

学习SQL,先有用起来,有了使用价值,之后才是去了解它的原理,让使用更加顺畅。 在大部分业务场景中,通过SQL可以快速的实现数据处理与统计。《SQL数据分析实战》区别于其他工具书,它并没有介绍SQL是什么&…

视图【mysql数据库】

目录 一、视图的创建、查看、修改、删除 二、cascaded、local检查选项 cascaded和local的区别 三、视图的更新 四、视图的作用 一、视图的创建、查看、修改、删除 二、cascaded、local检查选项 上面的几句SQL中,我们虽然给视图插入了id 30的数据,但…

【vue-4】遍历数组或对象v-for

1、遍历数组 <ul><li v-for"(value,index) in web.number">index>{{index}}:value>{{value}}</li> </ul> 知识点&#xff1a; <ul>标签定义无序列表 举例&#xff1a; <ul><li>Coffee</li><li>Tea…

Windows UWP ContentDialog去掉阴影(全透明)的实现

一、前言 在WIndows开发中&#xff0c;使用UWP&#xff08;Universal WIndows&#xff09;项目开发过程中&#xff0c;使用ContentDialog 的过程中&#xff0c;我们可能并不满足现有的样式&#xff0c;这时就需要自定义样式。笔者在自定义样式过程中&#xff0c;遇到了一个难题…

使用prometheus监测MySQL主从同步状态方案

说明&#xff1a;本文介绍如何使用prometheus、alertmanager监测MySQL主从&#xff0c;当从节点中断同步时&#xff0c;发送邮箱报警&#xff0c;并使用grafana将数据视图化。 结构图如下&#xff1a; 安装 &#xff08;1&#xff09;安装应用 首先&#xff0c;来安装promet…

【Linux】线程安全及锁的使用

文章目录 前言一、锁1.定义一个锁变量2.pthread_mutex_init3.pthread_mutex_destroy4.pthread_mutex_lock/pthread_mutex_unlock5.静态变量锁和全局变量锁的初始化 二、问题描述及锁的运用三、RAII风格的锁 前言 临界资源: 在多个线程或进程间共享的资源. 临界区: 代码中访问临…

5 分钟快速上手图形验证码,防止接口被恶意刷量!

5 分钟快速上手图形验证码&#xff0c;防止接口被恶意刷量&#xff01; 大家好&#xff0c;我是程序员小白条&#xff0c;今天来给大家介绍一个快速实现图形验证码的优秀框架 AJ-Captcha。 需求分析 如果注册接口没有验证码这种类型的限制&#xff0c;很容易会被刷量&#x…

protobuf —— 快速上手

protobuf —— 快速上手 创建 .proto 文件添加注释指定proto3语法package 声明符定义消息&#xff08;message&#xff09; 定义消息字段字段定义基本格式字段名称命名规范字段类型字段唯一编号示例 转换关系示例&#xff1a;增加姓名和年龄字段 字段唯一编号字段编号范围编码效…

英伟达SSD视觉算法,jetson.inference在jetson nano中部署

一、用官方镜像刷机 安装SD卡擦除工具SD Card Formatter https://www.sdcardformatter.com/download/ 格式化SD卡 下载官方镜像 https://developer.nvidia.com/jetson-nano-sd-card-image 安装刷机工具balenaEtcher https://www.balena.io/etcher 将上面下载的镜像压缩包解…

spark的简单学习二

一 spark sql基础 1.1 Dataframe 1.介绍&#xff1a; DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表 格&#xff0c;除了数据以外&#xff0c;还掌握数据的结构信息&#xff0c;即schema。同时&#xff0c;与Hive类似&#xff0c;DataFrame也支 持…

gin框架精通篇(二)

原生数据库使用 导入模块&#xff1a;go get -u github.com/go-sql-driver/mysql 安装 mysql 数据库 安装数据库可能遇到的问题&#xff1a;&#xff08;网上的方法基本可以解决&#xff09; ERROR 1045 (28000): Access denied for user ‘-root’‘localhost’ (using passwo…

HTML 页面布局

慢慢生活&#xff0c;慢慢变好 —— 24.5.28 页面布局 盒子: 页面中所有的元素(标签)&#xff0c;都可以看做是一个盒子&#xff0c;由盒子将页面中的元素包含在一个矩形区域内&#xff0c;通过盒子的视角更方便的进行页面布局 盒子模型组成: 内容区域(content)、内边距区域(pa…

数据结构的希尔排序(c语言版)

一.希尔排序的概念 1.希尔排序的基本思想 希尔排序是一种基于插入排序算法的优化排序方法。它的基本思想如下: 选择一个增量序列 t1&#xff0c;t2&#xff0c;......&#xff0c;tk&#xff0c;其中 ti > tj, 当 i < j&#xff0c;并且 tk 1。 按增量序列个数k&#…

Centos安装,window、ubuntus双系统基础上安装Centos安装

文章目录 前言一、准备工作二、开始安装1、2、首先选择DATE&TIME2、选择最小安装3、 选择安装位置 总结 前言 因工作需要&#xff0c;我需要在工控机上额外装Centos7系统&#xff0c;不过我是装在机械硬盘上了不知道对性能是否有影响&#xff0c;若有影响&#xff0c;后面…

基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善-CSDN博客 本篇将完善主界面的管理员入库和出库功能&#xff0c;同样的&#xff0c;管理员入库和出库的设计套路适用于动态表的录入和编辑 首先还是介绍一下本项目将要实现的功能 &#xf…

[Android]项目打包APK时报错PKCS12 keystore not in version 3 format

报错&#xff1a; PKCS12 keystore not in version 3 format Execution failed for task :app:packageRelease. > A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable > com.android.ide.commo…

如何为个人网站部署SSL安全证书,以实现网站的 HTTPS 加密协议访问?

哈喽&#xff0c;大家好呀&#xff01;这里是码农后端。完成了域名的备案与解析后&#xff0c;就可以通过域名来访问我们的网站了。本篇将介绍如何为我们的网站部署SSL安全证书&#xff0c;实现网站的 HTTPS 加密协议访问。 1、购买SSL证书 未进行SSL证书部署&#xff0c;访问网…

回答篇二:测试开发高频面试题目

引用之前文章&#xff1a;测试开发高频面试题目 本篇文章是回答篇&#xff08;持续更新中&#xff09; 1. 在测试开发中使用哪些自动化测试工具和框架&#xff1f;介绍一下你对其中一个工具或框架的经验。 a. 测试中经常是用的自动化测试工具和框架有Selenium、Pytest、Postman…