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服务价值、可靠性和持续性的战略资产。

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

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

相关文章

postgresql数据库|

概述 Oracle_fdw 是一种postgresql外部表插件,可以读取到Oracle上面的数据。是一种非常方便且常见的pg与Oracle的同步数据的方法 配置Oracle环境 Oracle_fdw 的编译依赖pg_config和Oracle的客户端环境 pg_config 是什么呢?其实就是postgresql的一个可执…

OpenFOAM学习笔记

OpenFOAM 计算流体力学:用计算机求解流体控制方程,来模拟真实情况下,流体的流动状态OpenFOAM的离散方法:有限体积法,将整个空间划分成若干个控制体OpenFOAM使用的网格系统:同位网格(Collocated…

动态属性的响应式问题和行内编辑的问题

动态属性的响应式问题 通过点击给目标添加动态数据,该数据不具备响应式特性 如下图: 点击编辑,前面的数据框会变成输入框,点取消会消失 // 获取数据 async getList () {const res await xxxthis.list res.data.rows// 1. 获…

跨国网络通信挑战与解决方案:优化越南工厂与中国总部连接的网络质量

在全球化不断深入的今天,越来越多的中国企业走出国门,在世界各地设立分支机构和生产基地。然而,随之而来的是跨国网络通信的挑战。最近,客户位于越南的工厂与中国总部之间的网络连接出现了问题,直接影响了企业的日常运…

Windows启动项管理器Autoruns

文章目录 AutoRunsVirusTotalAutorunsc AutoRuns AutoRuns用于启动程序管理,可显示系统启动或登录时的各种自动启动行为,并扩展和加载各种系统进程,要比任务管理器中的自启动管理高级得多,其界面如下,列出了所有开机启…

阿里云幻兽帕鲁多人联机服务器多少钱?4核16G或8核32G配置

2024阿里云幻兽帕鲁专用服务器价格表:4核16G幻兽帕鲁专用服务器26元一个月、149元半年,默认10M公网带宽,8核32G幻兽帕鲁服务器10M带宽价格90元1个月、271元3个月。阿里云提供的Palworld服务器是ECS经济型e实例,CPU采用Intel Xeon …

c++11 标准模板(STL)本地化库 - 平面类别 - (std::ctype) 定义字符分类表(五)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义字符分类表 std::ctype template< class CharT > clas…

159 Linux C++ 通讯架构实战14,epoll 函数代码实战

ngx_epoll_init函数的调用 //&#xff08;3.2&#xff09;ngx_epoll_init函数的调用&#xff08;要在子进程中执行&#xff09; //四章&#xff0c;四节 project1.cpp&#xff1a;nginx中创建worker子进程&#xff1b; //nginx中创建worker子进程 //官方nginx ,一个…

卫星遥感影像统计农业产量、作物分类及面积

卫星遥感技术的广泛应用为农业领域带来了巨大的变革&#xff0c;其中&#xff0c;卫星遥感影像在农业产量估算方面的应用正成为一项关键技术。通过高分辨率的遥感数据&#xff0c;农业生产者可以更准确、及时地了解农田状况&#xff0c;实现精准农业管理&#xff0c;提高产量和…

零基础如何闯入IT的神秘大门?

前言 随着信息技术的飞速发展&#xff0c;IT行业成为了许多有志之士梦寐以求的职业领域。但对于零基础的人来说&#xff0c;如何成功进入这个行业却是一个不小的挑战。下面&#xff0c;我将结合自身的C语言专业知识&#xff0c;为大家详细阐述一条可行的学习路径&#xff0c;并…

canvas画图,画矩形、圆形、直线可拖拽移动,可拖拽更改尺寸大小

提示&#xff1a;canvas画图&#xff0c;画矩形&#xff0c;圆形&#xff0c;直线&#xff0c;曲线可拖拽移动 文章目录 前言一、画矩形&#xff0c;圆形&#xff0c;直线&#xff0c;曲线可拖拽移动总结 前言 一、画矩形&#xff0c;圆形&#xff0c;直线&#xff0c;曲线可拖…

LLM大语言模型(九):LangChain封装自定义的LLM

背景 想基于ChatGLM3-6B用LangChain做LLM应用&#xff0c;需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。 LangChain中对LLM的封装 继承关系&#xff1a;BaseLanguageModel——》BaseLLM——》LLM LLM类 简化和LLM的交互 _call抽象方法定义 ab…

教你快速认识Java中的抽象类和接口

目录 引言 抽象类&#xff08;Abstract Class&#xff09; 抽象类的概念 抽象类的图标 抽象类的语法 抽象类的特点 接口&#xff08;Interface&#xff09; 接口的概念 接口的图标 接口的语法 接口的特点 接口的使用 接口的意义 抽象类与接口的区别 Object类 结…

idea开发 java web 高校学籍管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 高校学籍管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 css jq…

最优算法100例之33-数据流的中位数

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位…

对PAC的侧信道攻击

PAC存不存在安全性问题&#xff1f;侧信道攻击&#xff1f;本博客探讨这些问题。

达梦DMHS-Manager工具安装部署

目录 1、前言 1.1、平台架构 1.2、平台原理 2、环境准备 2.1、硬件环境 2.2、软件环境 2.3、安装DMHS 2.3.1、源端DMHS前期准备 2.3.2、源端DMHS安装 2.3.3、目的端DMHS安装 3、DMHS-Manager客户端部署 3.1、启动dmhs web服务 3.2、登录web管理平台 4、添加DMHS实…

手搓Docker-Image-Creator(DIC)工具(03):实现alpine+jre的镜像

此篇博客将介绍如何使用 Docker 创建一个alpine3.10-jre1.8.0_401 的 Docker 镜像&#xff0c;并使用 Docker 运行起来。将用到 Dockerfile 的 COPY 命令、RUN 命令、ENV 命令&#xff0c;最终实现基于单一应用的 Dockerfile 构建镜像和运行。 紧急修改&#xff1a;代码我是在m…

python笔记(9)Dictionary(字典)

目录 创建字典 取值 修改字典 删除 内置函数和方法 创建字典 字典键值和value用&#xff1a;隔开&#xff0c;键值是不可变的&#xff0c;而且必须是唯一的&#xff0c;值可以变&#xff0c;可以是任意类型 dict {key1 : value1, key2 : value2 } 1&#xff09;不允许同…

【C语言】“vid”Microsoft Visual Studio安装及应用(检验内存泄露)

文章目录 前言安装包获取配置VLD完成 前言 我们在写代码时往往容易存在内存泄漏的情况&#xff0c;所以存在这样一个名为VLD的工具用来检验内存泄漏&#xff0c;现在我来教大家安装一下 安装包获取 vld下载网址&#xff1a;https://github.com/KindDragon/vld/releases/tag/…