LLM App ≈ 数据ETL管线

虽然现有的 LLM 应用程序工具(例如 LangChain 和 LlamaIndex)对于构建 LLM 应用程序非常有用,但在初始实验之外不建议使用它们的数据加载功能。 当我构建和测试我的LLM应用程序管道时,我能够感受到一些尚未开发和破解的方面的痛苦。 如果你计划构建一个生产就绪的数据管道来为你的 LLM 应用程序提供支持,应该认真考虑使用专为该工作而构建的 EL 工具。

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

1、介绍

自 OpenAI 发布 ChatGPT 以来的去年,人们兴奋不已,基于其技术构建的新内容和应用程序似乎无穷无尽。 随着最初的炒作尘埃落定,我们看到开发者生态系统开始后退一步,评估我们目前所处的位置。 Meltano 社区最近分享的两篇帖子激起了我们的兴趣,并激励我们进行更深入的研究。

第一篇是 a16z 的“LLM 应用程序的新兴架构”文章,重点介绍了构建大型语言模型 (LLM) 应用程序的新兴模式,其中重点介绍了数据预处理/嵌入阶段以及“这部分堆栈相对不发达,并且 有机会专门为 LLM 应用程序构建数据复制解决方案”

第二个是名为“Langchain Is Pointless”的 Reddit 帖子,后来也成为黑客新闻热点:

“为什么这不是 ETL,为什么你需要这里的东西? 这里不需要新的类别或产品。”

“这是毫无意义的—LlamaIndex 和 LangChain 正在重新发明 ETL—当你已经拥有强大的技术时为什么还要使用它们呢?”

Langchain 由 a16z 归入编排阶段,是 LLM 应用程序开发人员使用的主要工具之一,用于执行从源中提取数据、嵌入文档并将其存储在向量数据库中、为基于聊天的应用程序提示链接和存储内存等所有操作 ...如果你不理解其中一些术语,请不要担心,我将在下一节中解释它们。

受到这些帖子的启发,我进行了深入研究,以更好地了解正在发生的事情。 我阅读了大量文章,观看和收听了大量 YouTube 视频和播客(速度为 2 倍),并基于 Meltano SDK 文档构建了自己的 LLM 聊天应用程序来回答问题。

在这篇博文中,我将介绍以下内容:

  • 我将总结我在深入研究 LLM 应用程序生态系统时发现的内容以及随之而来的挑战
  • 我将从数据工程的角度亲自解读我们过去如何解决类似问题并提出理想的架构
  • 我将解释使用 Meltano 构建的 POC 以及 Meltano 如何帮助解决未来这些挑战的愿景

2、 LLM 应用程序生态系统摘要

我将尽力以简洁的方式总结我所发现的内容,以便你对 LLM 应用程序生态系统有足够的背景知识来理解术语。 我发现,就像许多其他生态系统一样,有很多缩写和行话,但一旦你剥开层层,它开始看起来像你以前见过的常见模式。

2.1 上下文学习与微调

我遇到的第一个概念是使用微调与上下文学习+检索增强生成(RAG)。 这两种技术试图解决的问题是,预先训练的 LLM —例如 OpenAI 的 GPT 模型或 Hugging Face 等开源替代方案 — 是在静态数据集上进行训练的,而这些数据集现在已经过时了,这就是为什么当你向 ChatGPT 询问当下问题时,它会给你一个预设的回复,比如“对不起,我是在 2021 年之前的数据上训练的……”。

两者之间的高级差异在于,上下文学习将上下文作为运行时提示的一部分发送给预先训练的模型,以帮助其更多地了解你的问题。 虽然微调是进一步训练预训练模型以考虑一组新的上下文数据,但所有未来的提示都会直接进入模型的新迭代。

我的结论是,对于大多数用例来说,上下文学习方法是最受欢迎的。 有关上下文学习的更多详细信息,我建议你参阅 a16z 摘要,但我的要点是:

在上下文学习中:

  • 作为 RAG 管道的一部分,对于大多数 LLM 用例来说,表现相当不错,并且是首选方法
  • 利用 OpenAI 的 API 等“现成”工具和 Pinecone 等矢量数据库,因此小型数据团队可以构建 LLM 应用程序,而无需雇用专门的 ML 工程师

而微调:

  • 当数据集很大且质量很高时,在充分聚焦的上下文中表现更好
  • 需要更多关于如何对数据进行适当加权的专业知识,即不要对内容建立过度或不足的索引
  • 要求你托管自己的模型和基础设施来为其提供服务

出于这些原因,我选择在余下的探索中主要关注情境学习应用程序。

2.2 矢量数据库和嵌入

下一个主题是矢量数据库和嵌入。

矢量数据库是存储上下文数据的地方,以便可以在运行时快速搜索它,为上下文提示找到语义相似的数据。 这是你的知识库。 矢量数据库并不是 LLM 浪潮期间出现的一项新技术,但它们在这个用例中确实获得了广泛的欢迎。 一些常见的有 Pinecone、Weaviate、Chroma、pgvector Postgres 扩展等等。

我不会详细介绍它们的工作原理,主要是因为我了解得不够😀,但也因为我发现矢量数据库的内部工作原理太低级,超出了本教程的范围。 了解如何使用它们。 这是我的淡化解释或如何在LLM应用程序的背景下使用矢量数据库......

这个概念是,你使用嵌入模型(如 OpenAI 的嵌入 API)将源文本数据(即我们的 SDK 文档 html 文本)转换为高维嵌入向量,然后将其与用于生成的源文本一起加载到矢量数据库中。 为了构建 LLM 应用程序,你不一定需要了解有关什么是嵌入以及它们如何生成的详细信息。 这些文本块有大小限制,因此这里有一个中间步骤将它们分成更小的子集。 然后,当想要在聊天应用程序中搜索类似文本时,你只需嵌入输入文本(再次使用 OpenAI API)并将向量作为查询传递到数据库即可。 数据库负责检索相似向量并最终返回附有原始文本 blob 的结果。 此时,你可以收集所有相关的文本片段,并将它们用作新的丰富聊天提示的上下文。

2.3 Langchain

在构建 LLM 应用程序时,这是最受关注的工具。 它抽象出了一些复杂的工作流程,并为开发人员提供了更简单的界面来进行构建。 关于它是否做得很好还有争议,但这就是目标。 在我看来,LangChain 似乎是应用程序层的一个很好的抽象,其中需要提示链、内存和从矢量数据库检索上下文数据等功能。 尽管 Langchain 的范围开始超出其数据连接能力的范围,但感觉就像以不太生产级别的方式重新发明轮子。

2.4 LlamaIndex

同样,LlamaIndex 也被大量提及,它在功能方面与 LangChain 有很多重叠,并且实际上在底层使用了 LangChain 相当多。 LlamaIndex 显然还有一些其他不错的应用程序级别功能,用于构建聊天应用程序,例如上下文搜索、缓存等。LlamaIndex 还拥有一个数据加载器和工具库,这些功能在名为 LlamaHub 的兄弟项目上进行了广告。 我再次遇到的主要问题是它们的范围渗透到了数据移动工具的范围,他们的文档在“为什么是 LlamaIndex?”中说了以下内容:

基于LLM构建的应用程序通常需要使用私有或特定领域的数据来增强这些模型。 不幸的是,这些数据可能分布在孤立的应用程序和数据存储中。 它位于 API 后面、SQL 数据库中,或者隐藏在 PDF 和幻灯片中。

所以看起来他们在某种程度上将其作为数据移动工具来营销🤔,但问题是他们正在以较低生产级别的方式重新发明轮子。 请参阅仅使用 while 循环的 slack reader,其作者批评道:

来自 Llama 的 Confluence 数据加载器只是 html2text Python 库的包装器,并将整个 Confluence 页面转储到字符串变量中

2、我们可以从数据工程中学到什么

感觉这些项目和世界变化得如此之快,以至于没有人有时间停下来考虑开发库的范围以及边界应该在哪里。 从我的角度来看,这些工具渗透到数据工程领域,并试图解决具有独特挑战的问题,最好留给专门构建的数据工程工具。

多年来,数据生态系统一直在解决许多类似的问题,因此让我们比较两个工作流程并找到重叠之处。 也许我们可以从DE中吸取一些教训。

当我思考大多数 LLM 应用程序正在做什么的摘要时,我会将它们分类如下:

  • 数据提取:例如 从 slack API 中提取消息文本
  • 数据清理:例如删除某些字符、多余空格、编码等。
  • 数据丰富:向量嵌入
  • 数据加载:写入矢量数据库
  • 应用程序用户体验,例如提示链、检索、推理、记忆、聊天 UI 等。

这些存储桶看起来很像传统数据团队多年来一直在做的事情:

  • 数据提取:例如从各种来源提取数据
  • 数据丰富和转换:例如删除重复项、添加一致的名称、将复杂数据聚合为可用的业务指标等。
  • 数据加载:写入数据仓库
  • 数据可视化和消费:讲述数据故事的图表和仪表板

出于我的论证目的,我们可以放弃应用程序用户体验,因为在我看来,这是像 LangChain 这样的工具的核心能力,而且他们做得很好,使用 LangChain 来实现这一点。 在数据方面,我们也可以放弃数据可视化阶段,因为对于许多数据团队来说,可视化步骤被传递给分析师和 BI 工程师,他们需要与数据消费者合作,以很好地解释和呈现数据。

这让我们剩下的步骤在这两种情况下都可以缩小到以下范围:

  • 数据提取
  • 数据转换,即清洁和丰富
  • 数据加载

在数据世界中,我们多年来一直在迭代这个过程,最初将其称为提取转换加载(ETL),现在过渡到提取加载转换(ELT)。 我们学到的教训是,提取缓慢且昂贵,因此我们只想执行一次,而转换和富集步骤则成本较低,并且需要更多迭代。 此外,随着时间的推移,存储成本显着降低。 将存储与计算分离成为主要的设计考虑因素。 有了这些认识,我们重新设计了我们的系统,以解耦两个工作流程,现在大多数数据团队一次提取+加载原始数据,然后对其进行多次转换。

这直接转化为LLM应用程序世界,因为许多团队正在试验和迭代构建其知识库和应用程序的最佳方法。 他们以不同的方式清理原始数据,或者使用不同的模型嵌入,或者使用不同的向量存储。

2.1 LLM 数据移动中最昂贵的部分是什么?

如果我们采用这种 ETL 与 ELT 学习并将其应用到 LLM 应用程序开发工作流程中,我们就会开始看到它几乎可以直接翻译。 当数据社区迭代 ETL 与 ELT 时,我们评估了最昂贵的步骤并设计了模式和工具来减少它们的影响。 在我看来,LLM 数据处理步骤中最昂贵的部分是:

  • 数据提取
  • 数据丰富

与传统数据工程一样,从数据库或 API 中提取数据速度慢、成本高,有时甚至很痛苦。 除了提取步骤之外,丰富步骤也很昂贵,特别是如果你使用 OpenAI 的嵌入 API 等 API。 富集步骤几乎开始看起来像第二个提取步骤。 当然,有一些方法可以减少这些昂贵步骤的影响,但重要的是要确定我们正在尝试优化的流程。

2.2 相关数据工程挑战

从表面上看,创建一个从 API 提取数据、清理和丰富数据、然后将其写入某个数据源的脚本似乎很简单。 我真的同意。 困难的部分是让它在生产中可靠、高效地运行所需的所有额外功能。 数据工程师经常思考和处理的一些事情是:

  • API 速率受限和中断
  • 分页
  • 元数据和日志记录
  • 模式验证和数据质量
  • 个人身份信息 (PII) 处理、混淆、删除等。
  • 在运行之间保持增量状态,以便您可以从上次中断的地方继续
  • 架构变更管理
  • 回填数据

这些 LLM 库目前能够从 API 中提取数据,但它们是否能够应对与将这些管道投入生产相关的所有挑战? 答案是不。 但公平地说,我不认为他们打算这样做,他们构建了用户当时需要的功能,这只是快速发展的开源项目的本质。

2.3 我们如何设计一个系统来应对这些挑战?

考虑到所有这些信息,我草拟了一个示例架构,感觉适合这样的工作流程。 该图从左到右阅读; 从源中提取数据,清理和嵌入文本,然后将其加载到矢量数据库中,而 LLM 应用程序本身目前超出了范围。

大家可以看到,大前提是我们每一步都坚持进步。 乍一看,这似乎是额外的开销,但特别是在我们可能想要迭代清理和嵌入步骤的世界中,我们会很高兴不必每次都重新提取或重新清理所有源数据。 此外,如果有合适的工具,应该很容易增量更新工作流程中的每个步骤,仅获取自上次运行以来的新数据,即仅检索昨天的 API 数据。 通过增量工作流程,你不必太担心 API 速率限制和处理性能,因为数据集要小得多。

此外,每个步骤中检查点进度的性质使你可以更轻松地随着时间的推移替换组件。 如果你今天使用 Pinecone,明天可以将其替换为 Weaviate,而无需重新提取所有数据并再次创建新的嵌入。

3、Meltano 和 LLM 应用程序

如果我让你相信使用数据工程模式和工具来处理这些工作负载是一个好主意,那么我们现在可以讨论为什么我认为 Meltano 很适合。 我将解释我使用 Meltano 构建的概念验证以及支持它的功能。 然后我将讨论我们如何对其进行迭代以使其在未来变得更好。 你还可以在 GitHub 上探索功能齐全的演示项目。

我构建了一个简单的管道来抓取 Meltano SDK 文档网站、清理 html、使用 OpenAI 的嵌入 API 嵌入它,然后将其加载到 Pinecone 中。 这是对原始版本的迭代。 为了验证我的输出,我最终还找到了一个示例 Streamlit LLM 聊天应用程序,该应用程序从我的 Pinecone 索引中检索数据以获取上下文,并根据我的需求进行调整。 所有这些都以演示项目中的代码形式表示,并且也包含在 Meltano Squared 项目中,该项目部署在 Meltano Cloud 的生产中。

由于我的 POC 的时间限制,我只实现了一个简单的端到端同步,没有检查点功能,尽管每个组件都是不同的插件这一事实将使我将来可以轻松扩展项目以包括强大的检查点功能。 其他竞争工具选择在幕后使用 Langchain 来分块、嵌入和加载矢量数据库数据,所有这些都在一个紧密耦合的步骤中进行,我认为这是一个设计缺陷。 紧密耦合所有这些步骤并且不允许你随着时间的推移迭代出更稳健的设计。

每个组件都是一个可以在 Meltano 项目中安装和运行的插件,因此你可以重新创建此 POC,而无需编写任何代码。 只需添加插件并根据你的用例进行配置即可。 MeltanoHub 还拥有 600 多个插件,可帮助你从任何其他来源提取数据。 让我们逐步完成每个步骤。

3.1 数据抽取

提取步骤使用配置为抓取 SDK 文档的 tap-beautifulsoup。 它会在本地下载所有相关的 html 页面,然后使用 beautifulsoup 库将它们处理成单独的记录:

- name: tap-beautifulsoupvariant: meltanolabspip_url: git+https://github.com/MeltanoLabs/tap-beautifulsoup.git@v0.1.0config:source_name: sdk-docssite_url: https://sdk.meltano.com/en/latest/output_folder: outputparser: html.parserdownload_recursively: truefind_all_kwargs:attrs:role: main

要预览输出,你可以运行 Meltano invoke Tap-beautifulsoup 并查看如下输出:

2023-08-17T15:28:57.408509Z [info     ] Environment 'dev' is active2023-08-17 11:28:58,886 | INFO     | tap-beautifulsoup    | Beginning full_table sync of 'page_content'...
{"type": "SCHEMA", "stream": "page_content", "schema": {"properties": {"source": {"type": ["string", "null"]}, "page_content": {"description": "The page content.", "type": ["string", "null"]}, "metadata": {"properties": {"source": {"type": ["string", "null"]}}, "type": ["object", "null"]}}, "type": "object"}, "key_properties": []}{"type": "RECORD", "stream": "page_content", "record": {"source": "output/sdk.meltano.com/en/latest/typing.html", "page_content": "JSON Schema Helpers#\nClasses and functions to streamline…..[Trimmed Content]", "metadata": {"source": "output/sdk.meltano.com/en/latest/typing.html"}}, "time_extracted": "2023-08-17T15:29:38.975515+00:00"}

3.2 数据净化

为此,我选择编写一个带有一些自定义解析逻辑的小脚本,以删除多余的空格和换行符。 该脚本由名为 generic-mapper 的 Meltano 映射器针对通过管道传递的每条记录执行:

def map_record_message(self, message_dict: dict) -> t.Iterable[Message]:page_content = message_dict["record"]["page_content"]text_nl = " ".join(page_content.split("\n"))text_spaces = " ".join(text_nl.split())message_dict["record"]["page_content"] = text_spacesreturn message_dict

该映射器允许你运行任意 python 脚本,因此可以选择安装非结构化库作为依赖项或 Langchain 本身,以帮助以你理想的方式准备数据。

3.3 生成嵌入

在此步骤中,我们还使用映射器来处理管道中的每个记录,但这次我们使用 map-gpt-embeddings。 该映射器将输入记录分割成块(如果需要),然后使用 OpenAI 嵌入 API 生成嵌入。 映射器在底层使用 Meltano 提取器 SDK,以最少的代码利用所有出色的功能,例如分页、速率限制处理等。

- name: map-gpt-embeddingsvariant: meltanolabspip_url: git+https://github.com/MeltanoLabs/map-gpt-embeddings.gitmappings:- name: add-embeddingsconfig:document_text_property: page_contentdocument_metadata_property: metadata

3.4 数据加载

最后,管道使用 target-pinecone 将这些记录写入你的 Pinecone 索引:

 - name: target-pineconevariant: meltanolabsconfig:index_name: target-pinecone-indexenvironment: asia-southeast1-gcp-freedocument_text_property: page_contentembeddings_property: embeddingsmetadata_property: metadatapinecone_metadata_text_key: textload_method: overwrite

这些步骤全部拼接在一起作为单个计划的 Meltano 作业,但可以使用简单的命令(如 meltano run tap-beautifulsoup clean-text add-embeddings target-pinecone)手动运行。 如果你愿意,可以自行托管它,或者使用 Meltano Cloud 来处理运行预定义计划所需的基础设施。

4、未来发展方向

在下一次迭代中,我计划利用 Singer JSONL 提取器和加载器来实现前面讨论的检查点功能。 这将解锁从检查点快速重新加载、保留数据备份以及在清理+嵌入步骤中快速进行实验的能力(例如尝试不同的嵌入模型、清理技术等)。

5、结束语

虽然现有的 LLM 应用程序工具(例如 LangChain 和 LlamaIndex)对于构建 LLM 应用程序非常有用,但不建议在初始实验之外使用它们的数据加载功能。 当我构建和测试我的LLM应用程序管道时,我能够感受到一些尚未开发和破解的方面的痛苦。 如果你计划构建一个生产就绪的数据管道来为你的 LLM 应用程序提供支持,应该认真考虑使用专为该工作而构建的 EL 工具。


原文链接:LLM App ≈ 数据管线 - BimAnt

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

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

相关文章

css3 初步了解

1、css3的含义及简介 简而言之,css3 就是 css的最新标准,使用css3都要遵循这个标准,CSS3 已完全向后兼容,所以你就不必改变现有的设计, 2、一些比较重要的css3 模块 选择器 1、标签选择器,也称为元素选择…

龙迅LT9211D MIPI(DSI/CSI)转LVDS和集创北方ICN6202 MIPIDSI转LVDS比对

龙迅LT9211D描述: Lontium LT9211D是一款高性能的MIPI DSI/CSI- 2到双端口LVDS转换器。LT9211D反序列化输入的MIPI视频数据,解码数据包,并将格式化的视频数据流转换为AP和移动显示面板或摄像机之间的LVDS发射机输出。LT9211D支持最大14 dB输…

谷歌提出AGI的6大原则,和5大能力等级

随着ChatGPT等大模型的出现,AGI概念正在从哲学层面快速转向实际应用落地,并且ChatGPT已经展示出了初级AGI的功能(如AutoGPT),有不少专家认为,AGI时代可能在10年内到来。 因此,需要一个明确的技术框架来讨论和衡量不同…

IP-guard flexpaper远程命令执行漏洞复现 [附POC]

文章目录 IP-guard flexpaper RCE漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 IP-guard flexpaper RCE漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测…

Django框架FAQ

文章目录 问题1:Django数据库恢复问题2:null和blank的区别3.报错 django.db.utils.IntegrityError: (1062, “Duplicate entry ‘‘ for key ‘mobile‘“)4.报错 Refused to display ‘url‘ in a frame because it set ‘X-Frame-Options‘ to deny5.报错 RuntimeError: cryp…

NovelD: A Simple yet Effective Exploration Criterion论文笔记

NovelD:一种简单而有效的探索准则 1、Motivation 针对稀疏奖励环境下的智能体探索问题,许多工作中采用各种内在奖励(Intrinsic Reward)设计来指导困难探索环境中的探索 ,例如: ICM:基于前向动力学模型的好奇心驱动探索RND&…

Linux文件系统

1.基础IO (1)文件操作 在C语言中,用来进行文件操作的函数有很多,比如: 所谓文件操作,简而言之就是通过语言层面向系统层面进行函数调用,命令操作系统为在磁盘上为其创建文件,那么这些…

react Antd3以下实现年份选择器 YearPicker

项目antd版本低,没有直接可使用的年份选择器,参考此篇(使用antd实现年份选择器控件 - 掘金) 一开始在state里设置了time: this.state {isopen: false,time: null } 在类似onChange事件里this.setState({time: valu…

一文搞懂Transformer

近期Transformer系列模型的出现,增加了CV领域的多样性。但是Transformer这一不同领域的模型对学习者来说需要一个细致的学习过程.下面就是本菜鸟总结学习路线。 Transformer是基于attention机制。而attention机制又在Encoder、Decode中。本篇博客将从Attention->…

C# Onnx 轻量实时的M-LSD直线检测

目录 介绍 效果 效果1 效果2 效果3 效果4 模型信息 项目 代码 下载 其他 介绍 github地址:https://github.com/navervision/mlsd M-LSD: Towards Light-weight and Real-time Line Segment Detection Official Tensorflow implementation of "M-…

Hive 查询优化

Hive 查询优化 -- 本地 set mapreduce.framework.namelocal; set hive.exec.mode.local.autotrue; set mapperd.job.trackerlocal; -- yarn set mapreduce.framework.nameyarn; set hive.exec.mode.local.autofalse; set mapperd.job.trackeryarn-- 向量模式 set hive.vectori…

最小二乘法及参数辨识

文章目录 一、最小二乘法1.1 定义1.2 SISO系统运用最小二乘估计进行辨识1.3 几何解释1.4 最小二乘法性质 二、加权最小二乘法三、递推最小二乘法四、增广最小二乘法 一、最小二乘法 1.1 定义 1974年高斯提出的最小二乘法的基本原理是未知量的最可能值是使各项实际观测值和计算…

[数据结构]—带头双向循环链表——超详解

💓作者简介🎉:在校大二迷茫大学生 💖个人主页🎉:小李很执着 💗系列专栏🎉:数据结构 每日分享✨:旅行是为了迷路,迷路是为了遇上美好❣️❣️❣️ …

XoT:一种新的大语言模型的提示技术

这是微软在11月最新发布的一篇论文,题为“Everything of Thoughts: Defying the Law of Penrose Triangle for Thought Generation”,介绍了一种名为XOT的提示技术,它增强了像GPT-3和GPT-4这样的大型语言模型(llm)解决复杂问题的潜力。 当前提…

如何让组织的KPI成为敏捷转型的推手而不是杀手 | IDCF

作者:IDCF学员 伍雪锋 某知名通讯公司首席敏捷教练,DevOps布道者。2020年到2021年小100人团队从0-1初步完成敏捷转型,专注传统制造业的IT转型,研发效能提升。 一、前言 在公司我们常常听见这么一个流传的故事,只要…

HCIA-经典综合实验(二)

经典综合实验(二) 实验拓扑配置步骤配置Eth-Trunk聚合链路第一步 配置二层VLAN第二步 配置MSTP生成树第三步 配置相关IP地址第四步 配置DHCP及DHCP中继第五步 配置三层的网关冗余协议 VRRP及OSPF第六步 配置静态路由,NAT地址转换及其他配置完善 配置验证…

Linux Ubuntu系统中添加磁盘

在学习与训练linux系统的磁盘概念、文件系统等,需要增加磁盘、扩展现有磁盘容量等,对于如何添加新的磁盘,我们在“Linux centos系统中添加磁盘”中对centos7/8版本中如何添加、查看、删除等,作了介绍,而对Ubuntu版本中…

解决k8s通过traefik暴露域名失败并报错:Connection Refused的问题

我敢说本篇文章是网上为数不多的解决traefik暴露域名失败问题的正确文章。 我看了网上太多讲述traefik夸夸其谈的文章了,包含一大堆复制粘贴的水文和还有什么所谓“阿里技术专家”的文章,讲的全都是错的!基本没有一个能说到点子上去&#xf…

解决:element ui表格表头自定义输入框单元格el-input不能输入问题

表格表头如图所示&#xff0c;有 40-45&#xff0c;45-50 数据&#xff0c;且以输入框形式呈现&#xff0c;现想修改其数据或点击右侧加号增加新数据编辑。结果不能输入&#xff0c;部分代码如下 <template v-if"columnData.length > 0"><el-table-colu…

八股文-面向对象的理解

近年来&#xff0c;IT行业的环境相较以往显得有些严峻&#xff0c;因此一直以来&#xff0c;我都怀有一个愿望&#xff0c;希望能够创建一个分享面试经验的网站。由于个人有些懒惰&#xff0c;也较为喜欢玩乐&#xff0c;导致计划迟迟未能实现。然而&#xff0c;随着年底的临近…