LLMOps快速入门,轻松开发部署大语言模型

大家好,如今我们能够与ChatGPT进行轻松互动:只需输入提示,按下回车,就能迅速得到回应。然而,这个无缝互动的底层,是一系列复杂而有序的自动执行步骤,即大型语言模型运营(LLMOps),确保用户的提示有效传递和处理,并在几秒内生成精准、可靠的回答。

本文将分析大型语言模型(LLM)服务,例如ChatGPT背后的运作机制,即LLMOps范式。同时,介绍从提示的初步处理到模型的精准选择,再到有效回应的生成,关注那些容易被忽略却极为重要的环节,包括负载均衡、系统监控和持续集成。

1. LLMOps简介

LLMOps(Large Language Model Operations)是机器学习运营(MLOps)的演变,专门针对大型语言模型(LLMs)的独特需求和挑战。

LLMOps 超越了MLOps的通用模型生命周期管理,更加专注于大型语言模型。核心目标是确保大型语言模型能够高效、稳定地运行,并能够持续提供高质量的输出,这包括但不限于模型的训练、调优、部署、监控和优化等环节。

LLMOps对于实现大型语言模型在各种应用场景中的成功落地起着关键作用。

1.1  LLMOps的起源

自2018年GPT-2的问世以来,大型语言模型(LLM)如GPT系列逐渐发展壮大,尤其是GPT-3及其后续版本的推出,性能方面显著提升。

这些模型的强大能力催生了众多应用,如客户服务的聊天机器人、多语言翻译服务和辅助写作编程的工具等。

面对LLM在实际应用中的独特挑战,业界发展出了新的工具和最佳实践,以更有效地管理这些模型的整个应用生命周期,这一进程的集合即为“LLMOps”。

1.2 LLMOps的重要性

LLMOps对于高效管理大型语言模型至关重要,主要原因包括:

  • 它确保基础设施能够应对模型处理的大量数据和众多参数,满足存储和带宽需求。

  • 通过优化响应时间,LLMOps保障用户能够及时获得准确反馈,维持流畅的交互体验。

  • 持续监控不仅限于基础设施的运行状态,还包括对模型决策行为的跟踪分析,以便不断优化模型。

  • 鉴于运行LLM的成本较高,LLMOps采用成本效益策略,高效利用资源,同时保持性能。

2. 大型语言模型服务

要理解LLMOps,关键在于掌握大型语言模型(LLMs)作为服务时的运作流程。这包括从模型接收用户提示开始,到生成并返回响应的全过程。在这个流程中,用户输入会在送入模型前经过一系列处理,而模型输出也会在呈现给用户前经过转换。

图片

LLMOps工作流程:通用的大型语言模型(LLM)作为服务背后的步骤。用户输入(绿色部分)在输入到模型之前会经历一些处理步骤。同样,模型输出(红色部分)在展示给用户之前也会经历几轮转换。

可以看出,提示在传递给模型之前需经过多个阶段,这些步骤虽有差异,但基本的目的相同:确保输入被正确理解,并且模型的输出与上下文相匹配。下面分解这些步骤:

2.1 预处理

预处理步骤旨在使模型能够更好地理解和处理用户输入。首先通过分词将输入文本分解成称为“tokens”的小单元,接着进行数据规范化,移除或替换特殊字符、纠正拼写错误,并使文本格式统一。

在编码阶段,这些tokens通过嵌入技术被转换成数字形式,即在高维空间中的向量,以便模型进行处理。

2.2 定位

这涉及根据之前的对话轮次或外部知识源对提示进行上下文化,以确保模型的响应是连贯和上下文适宜的。此外,实体识别和链接帮助系统识别提示中的实体(如名称、地点和日期),并将它们与相关上下文关联起来。

2.3 负责任的AI

为了确保LLMs的良好使用,服务会对用户提示进行审查,主要根据安全和合规准则评估,尤其在处理敏感信息、不当内容、偏见或可能的虚假信息时。

审查通过后,提示才会送至模型处理。模型的响应在呈现给用户前,也可能再次经过定位和负责任AI的流程。

2.4 后处理

模型产生的响应最初是以数值形式呈现的,得益于之前的向量嵌入。因此,解码过程对于将这些数值数据转换回人类可读的文本起着重要作用。解码之后,通过细化步骤对响应进行润色,提升语法、风格和可读性。

最后响应显示给用户,LLMOps基础设施负责透明地执行这些步骤。

可以看到,LLMOps基础设施处理用户提示并生成响应涉及多个步骤,延迟是衡量性能的关键指标。

为了降低延迟,LLMOps采取了一系列策略和最佳实践,优化从输入到输出的整个流程。通过自动化步骤和高效管理资源,LLMOps减少了模型处理的等待时间。此外,还有多种方法可以进一步减少延迟:

  • 缓存:保存常用的或计算量大的输出部分,避免每次请求都重新计算。

  • 并发处理:同时处理多个请求,提高资源利用率,减少用户等待时间。

  • 监控:分析模型和基础设施的各个组件,快速发现并解决瓶颈问题。

减少延迟不仅改善了用户体验,还通过高效利用资源降低了成本。

3. LLMOps的关键组成部分

LLMOps设置中应该使用哪种模型,市面上有各种类型的模型可供选择。每种模型都针对特定的用例进行了优化,且有不同的大小选项等,选择合适的模型主要取决于应用和可用资源。

3.1 选择合适的基础模型

LLM提供商

LLM模型和提供商可以分为以下几类:

  • 专有模型:这一类别包括像OpenAI(GPT模型)、Google(PaLM模型)和Anthropic(Claude模型)这样的公司,它们训练专有的LLM,并通过Web界面或API端点将它们作为服务提供。

  • 开源模型:这一类别包括由社区、学术界或像Eleuther AI和Big Science这样的组织开发的免费模型。这些组织通常依赖于计算基础设施的捐赠。理想情况下,我们可以采用一个开源模型,并自行构建服务,包括LLMOps基础设施。

  • 提供基础设施的公司:这些公司为开源LLM提供LLMOps基础设施。因此,他们通过提供部署服务来实现盈利,如Together AI这样的公司。在这里,公司提供了轻松定制您的LLMOps基础设施的机会。

专有模型与开源模型

开源模型的核心优势在于其高度的透明度和可定制性。它们允许用户完全掌控所有组件,简化了调试和个性化调整的过程。这种灵活性使得大型语言模型(LLM)能够更精准地满足用户的特定需求,而不是简单地适应提供商设定的标准选项。

然而,自行管理开源LLM可能会面临重大的工程挑战,并带来与计算和存储相关的额外成本。尽管开源模型提供了基础的基础设施支持,但在延迟、吞吐量和推理成本等方面,它们通常难以与专有模型相匹敌。

模型选择标准

  • 成本:不仅要考虑模型推理的成本,还要考虑与维护、监控和优化模型相关的工程费用。

  • 任务类型:LLM将被用于的任务性质,如摘要、问答等,应与模型的能力相匹配。已经针对我们的目标任务进行了微调的模型将节省我们在执行微调时的时间和精力和金钱。

  • 性能指标:许多提供商披露了他们模型的性能指标,如文本生成的速度(每个输出令牌的时间)和生成第一个令牌所需的时间(第一个令牌的时间)。我们应该确保模型在我们的用例中表现如预期。

  • 许可:选择允许我们预期使用的模型至关重要。即使明确允许商业使用的模型也可能对特定类型的用例有限制。例如,BigScience Open RAIL-M许可对LLM在与执法、移民和庇护程序等相关领域的使用施加了限制。

3.2 微调策略

大型语言模型(LLM)无论是专有还是开源,通常都需要经过微调才能适应特定的应用场景。市面上已有针对特定任务预微调的LLM,如聊天机器人、文本摘要和情感分析模型。此外,针对长文本处理的需求,一些模型提供了能够处理更多上下文(如GPT 3.5的16k上下文大小变体)的长上下文版本。

如果现有的模型无法满足特定需求,可以选择对模型进行微调或从头开始训练,而选择合适的数据集对于后者尤为关键,它决定了模型对目标任务的理解和适应能力。

模型定制

如果我们的应用程序需要对现有模型进行微调,相关步骤也应成为LLMOps设置的一部分。现在将这个定制步骤添加到原始的图表中:

图片

LLMOps工作流程:将模型定制步骤(橙色部分)纳入我们的通用工作流程中。

拥有一个一致的微调流程可以帮助开发者随着更多数据的可用性,扩展模型的知识,允许轻松升级LLM版本或进行其他修改。

当依赖第三方模型时,重要的是要注意这些模型可能在可用性到成本方面发生变化。这可能会迫使我们切换到不同的基础模型。一个健壮的LLMOps设置将使我们能够通过简单地用不同的LLM替换“模型”框来顺利处理这种关键情况。

训练数据

虽然有人认为微调LLM或完全训练模型是在LLMOps基础设施之外的初步步骤,但实际上,这一步是最重要的。因为成功的服务不仅需要模型的持续改进,还需要能够灵活应对服务提供商的变更。

为了确保在LLMOps基础设施中有效地进行训练、微调和模型优化,保持训练数据与后续推理数据格式的一致性至关重要。通常,采用JSON Lines(.jsonl)格式来组织训练数据,这种格式得益于其结构特点,非常适合用于LLM的微调,并且能够高效地处理大规模数据集。

典型的用于微调的.jsonl文件像这样:

{"prompt": "问题:法国的首都是什么?", "completion": "法国的首都是巴黎。"}{"prompt": "问题:谁写了《麦克白》?", "completion": "《麦克白》是由威廉·莎士比亚写的。"}

.jsonl文件中的每一行都是一个独立的JSON对象,代表一个单一的训练示例,其中promptcompletion键分别指示输入文本和预期的模型响应。此外,这种格式便于向模型的知识库中增量添加新数据。

训练和推理参数

在设置LLMOps基础设施时,模型参数也很重要,因为它们会影响模型大小和资源消耗等特性。

关于训练参数,优化训练参数以平衡模型的复杂性与部署限制(如内存使用)至关重要。这种优化对于在资源容量不同的多样化环境中部署模型非常重要,确保模型不仅先进,而且适用于现实世界的应用。

关于推理参数,调整温度和最大令牌等参数可以控制响应的长度和随机性。这些设置作为LLMOps过程的一部分进行管理,以使模型的输出与特定应用要求和用户意图保持一致。

3.3 提示工程和管理

已经证明,提示工程技术可以增强LLM的默认能力。原因之一是它们有助于将模型置于上下文中。例如,指导模型在特定领域充当专家,或引导模型朝着期望的输出方向发展。提示工程和管理是应该包含在我们LLMOps设置中的重要组件。

最有效的提示工程实践之一是少数示例提示和思维链推理。让我们简要回顾这些技术,并讨论如何将它们整合到我们的LLMOps设置中:

  • 少数示例提示涉及在提示本身内提供少量示例(shots)来说明手头的任务。这有助于模型更有效地理解和执行特定任务。

  • 思维链推理涉及构建提示,引导模型通过逐步推理过程。这种技术对于需要逻辑推理或与外部资源交互的复杂任务特别有用。

通过使用提示模板,在我们的LLMOps设置中实施少数示例提示和思维链推理等技术可以有效地实现。

提示模板

提示模板是一套预定义的框架,用于引导大型语言模型(LLM)进行有效的推理。它们确保了请求的一致性,并在不显著影响用户体验的情况下,融入了高级的提示工程技术。

在LLMOps环境中,构建一个针对不同场景精心设计的提示模板库是至关重要的。选择合适的模板作为预处理阶段的一部分,这发生在查询传递给模型之前。

对于使用少数示例的提示,模板应包含几个示例来指导模型理解预期任务或响应方式。同时,为了实施思维链推理,模板应细致规划,以包含一个逐步的思考过程,引导模型系统地分析问题并将其分解为更简单的子任务。

在思维链推理中,可能需要结合外部知识源,如在LangChain框架中,模型可以根据需要从互联网检索信息来补充其知识库。

对于少数示例提示和思维链推理,进行A/B测试是一种有效的优化手段。通过对比不同用户群体对不同提示版本的反应,我们可以客观评估并选择最有效的提示。此外,基于性能数据不断迭代和优化提示模板也是非常关键的。

4. 部署与监控

当基础模型训练或微调完成,并且对成果满意后,接下来就是部署模型的阶段。在LLMOps中,部署意味着将语言模型从训练状态转移到生产环境,使其能够在实际工作中发挥作用。在标准图表中,这一步骤用橙色表示。

图片

LLMOps工作流程强调部署步骤(以橙色表示)在通用流程中,这一步包括将模型从开发环境“迁移”到生产环境。

部署还包括设置我们与生产中的模型通信的接口。通常,接口取决于处理模式:

  • 实时处理:对于需要实时交互的应用,如聊天应用,部署模型的方式必须允许立即处理数据并生成输出。这通常通过创建与模型接口的应用程序编程接口(API)来实现。如今,有许多库,如Flask,允许我们通过简单的步骤创建API接口。

API可以部署在Web服务器或云平台上,确保用户或需要与模型交互的系统可以访问它们。我们的LLMOps设置应确保API能够处理预期的负载,并考虑扩展性、负载均衡和故障转移机制。

  • 批量预测:在许多用例中,实时预测并不必要。例如,如果有一批客户评论,需要每周分类一次,我们可以使用训练好的模型批量处理这些评论。这种方法对于时间不敏感的任务来说是高效且资源友好的。

对于批量用例,可以使用cron(在类Unix系统)或基于云的任务调度服务等工具来安排批量作业。这些作业将在指定的时间间隔内运行模型处理新数据,处理数据并存储结果。

最后,将模型部署到生产设置通常涉及模型打包和版本控制:

  • 打包包括将模型及其依赖项包装成可以轻松部署和在生产环境中使用的格式。这可能涉及容器化技术,如Docker,它封装了模型及其环境,以确保在不同平台间的一致性。

  • 模型版本控制:跟踪模型的不同版本至关重要,特别是当您更新或重新训练模型时。版本控制有助于保持模型迭代、训练数据和提示模板的清晰记录。

4.1 CI/CD流水线

持续集成(CI)和持续交付(CD)流水线自动化了将模型从开发环境带到生产的步骤,确保模型可靠、最新且高效部署。

在LLMOps中,当对模型(如超参数调整、模型架构更改或新训练数据)进行新代码或更改时,CI确保这些更改自动进行测试。这包括运行单元测试、集成测试以及任何其他检查,以验证更改不会破坏模型或降低其性能。在这个意义上,CI是一种持续监控我们模型的方式。

一旦更改在CI阶段通过所有测试,CD就会自动化模型部署到生产环境。这确保了最稳定、经过测试的模型版本始终在LLMOps生产设置中运行。CD还便于在生产环境中检测到问题时快速回滚到以前的版本,最小化停机时间并确保服务可靠性。

4.2 编排

最后,编排LLMOps组件,以形成一个合理的步骤链。

编排涉及定义和管理LLMOps设置中的操作顺序,形成所谓的工作流。例如,定义预处理和后处理步骤的顺序,或新模型在准备部署之前必须经过的不同测试。

在LLM上下文中,编排通常涉及在工作流的不同组件之间传递数据。这通常通过指定数据路径或工作区来管理,其中一个步骤的输出存储在这里,然后被下一步拾取。

编排通常通过配置文件来管理,通常用YAML(Yet Another Markup Language)编写。这些文件定义了组件、它们的顺序和工作流中每个步骤的参数。这些配置文件通常使用领域特定语言(DSL)来提供更直观和专业的语法,用于定义工作流。

最后,工作流通常是自动化的。这确保了一旦启动工作流,所有相关步骤就会顺利运行,无需手动干预,从一个步骤到下一个步骤,从而减少了手动执行任务的需求,避免了问题。

5. LLMOps中的先进技术

本文我们讨论了LLMOps基础设施的关键组件及其存在的原因。然而,其他先进技术可以提高LLMOps基础设施的性能:

  • 高性能资源:使用高性能计算资源,如GPU或TPU,可以导致更快的推理,与使用CPU相比显著降低延迟。在设置LLMOps基础设施时,必须明智地选择硬件。

  • 负载均衡:如果我们计划在不同国家提供广泛使用的服务,类似于ChatGPT,建议部署同一模型的多个实例。这种方法允许您将传入的请求分布在不同的模型上。我们的LLMOps设置应该意识到每个时刻可用的模型数量及其计算能力。

  • 地理分布:此外,如果在不同国家有多个模型可用,一个简单的技术是将模型(以及LLMOps基础设施的必要部分)托管在靠近最终用户的地方。这种策略涉及优化数据序列化和传输协议,以确保用户、基础设施和模型之间的数据传输快速高效。

6. 解决安全问题

确保LLMOps基础设施中的数据隐私和用户保护是构建可靠服务的核心。

例如,实施强大的数据匿名化技术至关重要。可以使用差分隐私、k-匿名性或数据掩蔽等技术,以确保训练数据不会泄露在形成训练数据集时收集的敏感个人信息。此外,如果我们计划使用现实世界的数据来迭代改进我们的模型,用户应该意识到这一点,并且在将其纳入微调循环之前,必须匿名化他们的数据。

另一个涉及安全方面的问题是,如果我们计划在我们的系统中存储任何私人用户信息,如ChatGPT中的对话历史。在这种情况下,我们必须确保所有数据都得到安全处理,并符合GDPR等数据保护法规。这包括确保我们基础设施中的安全数据存储和加密数据传输。

最后,必须确保LLMOps基础设施中的强大访问控制,确保只有授权人员可以访问模型、数据和训练环境,并且不会有任何泄露用户个人信息的风险。

7. 总结

自去年以来,随着LLM的最新迭代提升了性能,基于LLM的应用程序数量不断增加。这些应用将LLM作为服务提供,凸显了LLMOps基础设施在管理和优化这些服务中的核心作用。

文章探讨了LLMOps在构建成功、高效、以客户为中心的LLM服务中的关键角色。首先审视了从用户输入提示到接收响应的整个流程,强调了LLMOps在确保这一流程高效顺畅中的重要性。

接着,讨论了LLMOps如何包含模型的训练、部署、监控和维护等环节,并且强调了为应对不同负载而进行资源扩展的必要性,以确保基于LLM的应用程序的稳定性和可扩展性。同时,我们也提到了提升LLMOps基础设施的先进方法。

最后,指出LLMOps在保障LLM服务的完整性和安全性方面的重要性。鉴于这些模型经常处理敏感数据,强化的LLMOps实践对于实施严格的安全措施、保护数据隐私和遵守监管标准至关重要。

综上所述,本文旨在强调LLMOps不仅是运营的基础,更是提升LLM服务价值、可靠性和持续性的战略资产。

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

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

相关文章

SpringBoot快速入门笔记(4)

文章目录 一、Vue框架1、前端环境准备2、简介3、快速开始4、事件绑定 二、Vue组件化开发1、NPM2、Vue Cli3、组件化开发4、SayHello自定义组件5、Movie自定义组件 一、Vue框架 1、前端环境准备 编码工具:VSCode 依赖管理:NPM 项目构建:VueCl…

JDI LCD 驱动时序介绍

1. 引言 绝大多数 STM32 MCU 都可应用于图形界面,而且很多系列还内置图形硬件 LTDC,支持驱动 RGB 接口的 LCD。但是存在少数类型的 LCD,如 JDI 屏,除了 STM32L4P5 支持外,其它 MCU 只能根据屏的接口时序要求&#xff…

数学与人工智能:共舞于数字时代的奥秘

数学,这一源远流长的学科,长久以来一直为人类社会的发展与进步提供了坚实的基础。与此同时,随着科技的迅猛发展,人工智能这一新兴领域正逐渐改变着我们的生活方式。这两者之间,似乎存在着一种难以言喻的紧密联系。本文…

hbuilderX创建的uniapp项目转移到vscode

场景:一直使用hbuilderX开发的朋友想转移到vscode获取更好的TypeScript支持,所以想把整个项目目录拖到vscode进行开发,但发现运行不了,提示没有package.json等,并且不能执行pnpm命令 首先,我们先来看一下h…

软件测试(测试用例详解)(三)

1. 测试用例的概念 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合。 测试环境操作步骤测试数据预取结果 测试用例的评价标准: 用例表达清楚,无二义性。。用例可操作性强。用例的输入与输出明确。一条用例只有…

力扣---反转链表 II ***

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;[1,4,3,…

【MATLAB】GA_BP神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 GA_BP神经网络时序预测算法是一种结合了遗传算法(GA)和反向传播(BP)神经网络的时序预测方法。它利用了遗传算法的全局搜索和优化能力&#xff0c;以及BP神经网络的学习和逼近能力&#xff0c;可以更有效地预…

Ubuntu中文输入法设置指南:从添加输入源到自定义设置的完整步骤

文章目录 Ubuntu设置中文输入法教程步骤1&#xff1a;打开“设置”应用程序步骤2&#xff1a;进入“区域与语言”设置步骤3&#xff1a;添加中文输入源步骤4&#xff1a;选择中文输入法步骤5&#xff1a;设置默认输入源&#xff08;可选&#xff09;步骤6&#xff1a;使用中文输…

C++算法 —— 前缀和

一、【模版】前缀和 1.链接 【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 2.描述 3.思路 前缀和的思想其实就是一种简单的动态规划&#xff0c;以i位置记录从头位置到i位置的和&#xff0c;然后间接的求一段连续区间的数组和&#xff0c;时间复杂度是O&#xff08;n&…

解密项目管理工具数据安全:防火防盗,保密有招

相关数据显示&#xff0c;2021年中国数字经济规模总量达到45.5万亿元&#xff0c;占到国内GDP总量的39.8%。数字经济已经渗入我们工作生活的方方面面&#xff0c;项目管理工具就是其中之一&#xff0c;在数据安全备受重视的今天如何保证项目管理工具的数据安全性&#xff1f;Zo…

达梦disql登录数据库显示“未连接”

问题&#xff1a;达梦数据库在使用disql登录时&#xff0c;显示“未连接”。 指定了IP和端口号还是连接异常。 [dmdbatest ~]$ disql sysdba/Dameng123 disql V8 SQL> select * from v$instances; 未连接 SQL> exit [dmdbatest ~]$ disql sysdba/Dameng123localhost:52…

C++运算符重载如何模拟数学表达式,或模拟Python sympy和numpy

在人工智能数学基础一书中&#xff0c;下面是一题Python求函数极限的例子&#xff1a; 【例2.6】使用Python编程求 lim( x → 1) (x^2 - 1 / x - 1) ————————————————————————————————————————— import sympy from sympy import oo…

医疗大数据现状及发展问题探讨

医疗大数据&#xff0c;作为近年来备受瞩目的领域&#xff0c;其发展和变化的速度之快令人瞩目。从最初的概念炒作到如今的实际应用&#xff0c;短短三年多的时间&#xff0c;我们已经见证了医疗大数据领域的巨大变革。 临床数据的公开透明&#xff0c;为医疗大数据的利用提供…

漫谈GIS和空间数据库技术

1 GIS和CAD有啥区别 地理信息系统&#xff08;GIS&#xff09;和计算机辅助设计&#xff08;CAD&#xff09;是两种不同的技术&#xff0c;它们在功能、应用和数据处理方面有着显著的区别。以下是根据搜索结果得出的GIS和CAD的主要区别&#xff1a; 1. **数据处理的侧重点不同…

金陵科技学院软件工程学院软件工程专业

感兴趣的小伙伴可以私信我哦~~ 是笔者写的各种高质量作业和实验哦~~ 感兴趣的小伙伴可以私信我哦~~ 是笔者写的各种高质量作业和实验哦~~ 感兴趣的小伙伴可以私信我哦~~ 是笔者写的各种高质量作业和实验哦~~ 感兴趣的小伙伴可以私信我哦~~ 是笔者写的各种高质量作业和实验哦…

【其他】灾害预警,科技助力:手机地震预警功能设置指导

22024年4月3日7时58分在台湾花莲县海域遭遇了一场7.3级的强烈地震&#xff0c;震源深度12公里&#xff0c;震中位于北纬23.81度&#xff0c;东经121.74度&#xff0c;距台湾岛约14公里。震中5公里范围内平均海拔约-3560米。这场突如其来的自然灾害给当地居民的生活带来了巨大的…

从永远到永远-Git中tag的使用

Git中tag的使用 1.tag的作用2.使用背景3.tag的使用1.种类2.创建标签3.查看标签3.推送标签4. 删除标签: 4.idea可视化操作1.创建标签2.推送标签 999 删除、指定commit、验证暂时不表 1.tag的作用 Tag(标签)用来记录某个特定的提交(commit)。一个 Tag 被用来标记重要的历史节点&…

物联网实战--入门篇之(八)嵌入式-空气净化器

目录 一、风扇调速 二、通讯协议 三、净化器运行逻辑 一、风扇调速 单片机是不能直接驱动电机的&#xff0c;因为主芯片的驱动电流比较小(50mA左右)&#xff0c;他们之间正常还要有个电机驱动器&#xff0c;常用的有TB6612、L298和L9110等&#xff0c;目前项目用的这个电机它…

猫头虎技术分享 || 断网了,还能ping127.0.0.1吗?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【数据分析面试】6.计算对话总数(SQL)

题目&#xff1a;计算对话总数 给定了名为 messenger_sends 的消息发送表格&#xff0c;找出总共有多少个唯一的对话。 注&#xff1a;在某些记录中&#xff0c;receiver_id 和 sender_id 从初始消息中互换了。这些记录应视为同一个对话。 示例&#xff1a; 输入&#xff1…