ChatGPT一周年:开源语言大模型的冲击

news2024/12/24 2:14:19

2aab90a93cf1b299c0c2d07a5b7195ac.jpeg

自2022年末发布后,ChatGPT给人工智能的研究和商业领域带来了巨大变革。通过有监督微调和人类反馈的强化学习,模型可以回答人类问题,并在广泛的任务范围内遵循指令。在获得这一成功之后,人们对LLM的兴趣不断增加,新的LLM在学术界和工业界不断涌现,其中包括许多专注于LLM的初创公司。

尽管闭源LLM(如OpenAI的GPT、Anthropic的Claude)通常优于其对应的开源模型,但后者的进展十分迅速,并且声称在某些任务上取得了与ChatGPT相当甚至更好的表现。这不仅深刻影响了语言大模型的研究,同时还具有非凡的商业价值。在ChatGPT发布一周年之际,本文旨在提供开源LLM这一成功的全面综述,并全面调研了开源LLM声称已达到或超过ChatGPT水平的任务。
 

注:本文最新版本更新至12月5日,暂未收录近期发布的首个开源MoE大模型Mixtral(8x7B),据称已达到甚至超越了LLaMA2(70B)和GPT-3.5的水平。(以下内容由OneFlow编译发布,转载请联系授权。原文:https://arxiv.org/pdf/2311.16989.pdf)

作者 | Hailin Chen、Fangkai Jiao等

OneFlow编译

翻译|宛子琳、杨婷

引言

一年前,OpenAI发布了ChatGPT,它迅速横扫了人工智能社区和整个世界。这是第一款基于应用的人工智能聊天机器人,它能够就大多数问题提供有用、安全且详细的答案,并能遵循指令,甚至能承认并改正之前的错误。值得注意的是,它似乎能够出色地完成自然语言任务,而这些任务通常是由经过预训练,然后进行定制微调的语言模型(如摘要或问答)完成的。

作为该领域的首创之作,ChatGPT得到了广泛关注——在推出后两个月内就吸引了1亿用户,比TikTok或YouTube等其他热门应用的增长快得多。[1] 由于ChatGPT能够降低劳动成本、自动化工作流程,甚至还能为客户带来全新体验(Cheng等,2023年),所以还吸引了巨额投资。

然而,ChatGPT并未开源,而是由由私人公司掌控,因此大部分技术细节仍处于未知状态。尽管OpenAI声称其遵循了InstructGPT(也称为GPT-3.5)中所介绍的程序(Ouyang等,2022b),但其确切架构、预训练数据和微调数据均未可知。这种闭源特性导致了几个关键问题。

第一,由于不了解预训练和微调程序等的内部细节,特别是在已知LLM惯于生成有害、不道德、不真实内容的情况下,我们很难准确评估ChatGPT对社会存在的潜在风险。第二,已有报道称,ChatGPT的性能会随时间发生变化,这妨碍了复现结果(Chen等,2023)。第三,ChatGPT已多次发生故障,仅在2023年11月就发生过两次重大故障,期间ChatGPT网站及其API访问被完全阻断。第四,采用ChatGPT的企业可能会担忧调用API的成本过于高昂、服务中断、数据所有权、隐私等问题以及其他突发事件,比如最近发生的CEO Sam Altman被解雇、员工逼宫董事会以及Sam最终重返公司董事会的戏剧性事件。

另一方面,开源语言大模型潜在弥补或规避了前面所述的大部分问题,因此它们提供了一个充满希望的方向。基于这一原因,研究界一直在积极推动在开源环境下维护高性能LLM。然而,截至2023年末,人们普遍认为LLaMa-2(Touvron等,2023年)或Falcon(Almazrouei等,2023年)等开源LLM落后于对应的闭源模型,比如OpenAI的GPT3.5(ChatGPT)和GPT-4(OpenAI, 2023b),Anthropic的Claude 2或Google的Bard 3,其中GPT-4通常被认为是最优秀的闭源模型。然而令人振奋的是,开源和闭源模型之间的差距正逐渐缩小,开源LLM正迅速追赶。

c848e30df63246bb8480e58f87d854fa.png

图1:不同LLM在各种通用基准上的总览。


实际上,正如图1所示,最优秀的开源LLM已经在某些标准基准上取得了优于GPT-3.5-turbo的表现。然而,对于开源LLM来说,这并不是一场简单挑战。局势依旧在不断演变:闭源LLM定期在更新的数据上重新训练以进行更新,开源LLM也不甘落后,不断发布着新版本。目前,LLM的评估数据集和基准繁杂多样,因此难以评选出最优秀的LLM。

本文旨在整合最近有关开源LLM的研究,并概述它们在各个领域与ChatGPT相匹敌甚至超越的情况。我们的贡献主要包括以下三方面:

• 整合了对开源LLM的各种评估,提供了比较开源LLM与ChatGPT的公正而全面的视角(见图1,第3.1节)。

• 系统地调研了在各种任务中匹敌或超越ChatGPT性能的开源LLM,并进行了相应分析(见图2,第3节,第4.2节)。同时,我们还在维护一个用于追踪最新模型更新的实时网页。[4]

• 分析开源LLM的发展趋势(第4.1节),训练开源LLM的优秀实践(第4.3节)以及开源LLM可能存在的问题(第4.4节)。

谁能从这份报告中受益?本研究旨在帮助学界和业界了解开源LLM的当前格局和未来潜力。对于研究人员,本文提供了对开源LLM当前进展和不断变化趋势的详尽综述,指出了未来研究有前景的方向。对于商业领域,本调查提供了宝贵的见解和指导,能帮助决策者评估采用开源LLM的适用性和好处。

接下来,我们将首先介绍背景概念(第2节),然后对各个领域中击败ChatGPT的开源LLM进行深入探究(第3节),随后讨论关于开源LLM的见解和问题(第4节),最后进行总结(第5节)。

2

背景

本节将简述与LLM相关的基本概念。

2.1 训练模式

预训练:所有LLM都依赖于在互联网文本数据上进行的大规模自监督预训练(Radford等,2018;Brown等,2020)。仅解码器LLM(Decoder-only LLM)遵循因果语言建模目标,即模型学习在先前词元序列的条件下预测下一个词元(Bengio等,2000)。根据开源LLM分享的预训练细节(Touvron等,2023a),文本数据来源包括CommonCrawl5、C4(Raffel等,2020)、GitHub、Wikipedia、书籍,以及Reddit或StackOverFlow等在线讨论交流内容。众所周知,扩大预训练语料库的规模可以提高模型性能,并与扩大模型规模相辅相成,这一现象被称为规模定律(scaling law),在(Hoffmann等,2022a)中对此进行了深入分析。如今LLM的预训练语料库规模可达数千亿到数万亿词元(Touvron等,2023b;Penedo等,2023)。

微调[8]目标是使经预训练的LLM适应下游任务,通过使用现有的监督信息来更新权重,通常这些信息组成的数据集比用于预训练的数据集要小数个数量级(Devlin等,2018)。T5(Raffel等,2020)是最早将微调纳入文本到文本统一框架中的模型之一,其中每个任务由自然语言指令描述。

指令微调:后来通过在多个任务上进行训练来扩展微调范围(Wei等,2021a;Aribandi等,2021),其中每个任务都用自然语言指令描述。由于指导微调能够显著提高LLM的零样本性能(包括在训练期间未见过的新任务上的表现),因此迅速受到了欢迎。

标准的指令微调与多任务监督微调(通常称为SFT)可能仍无法产生符合人类意图、安全、道德且无害的模型,并且可以通过人类反馈的强化学习(RLHF)进一步改进(Ouyang等,2022b):人类标注员对微调模型的输出打分,然后再次使用强化学习对模型进行微调(Ouyang等,2022b)。最近的研究表明,人类反馈可以由LLM的反馈替代,这一过程称为从AI反馈中强化学习(RLAIF)(Bai等,2022b)。直接偏好优化(DPO)绕过了RLHF中需要将奖励模型拟合到人类偏好的需求,直接使用交叉熵目标对策略进行微调,从而更有效地使LLM与人类偏好对齐。

部分研究在构建多任务指令微调数据集时,注重质量而非数量:Lima(Zhou等,2023a)仅利用1000个示例对Llama-65B进行微调,结果超越了GPT-3,而Alpagasus(Chen等,2023c)通过清洗其指令微调数据集,将示例数量从52000减少到9000,从而改进了Alpaca(Taori等,2023)的性能。

持续预训练:指的是使用通常比第一阶段更少的数据量,对经过预训练的语言大模型(LLM)进行又一轮预训练。这一过程可用于快速适应新领域或引出LLM的新特性。例如,在Lemur(Xu等,2023d)中使用持续预训练来改进编码和推理能力,在Llama-2-long(Xiong等,2023)中用于扩展上下文窗口。

推理:有几种方法可替代使用LLM进行自回归解码的序列生成,这些方法在输出的随机性和多样性程度上存在差异。在采样过程中增加温度参数(temperature)可以使输出更加多样化,而将温度设为0则回归到贪婪解码(greedy decoding),当需要确定性输出时可能是必要的。采样方法top-k (Fan等,2018)和top-p (Holtzman等,2019) 在每个解码步骤中限定了可供采样的词元池。

有几种技术用于提高推理速度,尤其是在较长的序列长度下,由于注意力复杂度随输入长度呈二次增长而变得棘手。FlashAttention (Dao等,2022) 通过优化GPU内存层级之间的读/写操作,加速了训练和推理。FlashDecoding (Dao等,2023) 并行加载注意力机制中的键-值(KV)缓存,使端到端速度提高至8倍。推测性解码(Speculative decoding ) (Leviathan等,2023;Chen等,2023b) 使用额外的小型语言模型来近似从LLM中获得下一个词元的分布,从而在加速解码的同时保持性能。vLLM (Kwon等,2023) 利用PagedAttention算法(一种优化注意力键和值内存使用的算法)加速LLM推理和服务。

2.2 任务领域及评估

由于需要进行多样化和广泛的评估,因此对LLM的能力进行恰当评估仍是一个活跃的研究领域。问答数据集(Joshi等,2017;Kwiatkowski等,2019;Lin等,2022)是非常流行的评估基准,但最近也出现了专为LLM评估量身定制的新基准(Dubois等,2023;Beeching等,2023;Zheng等,2023)。

3

开源LLM vs. ChatGPT

在章节中,我们将探索LLM在六个主要领域的能力:泛化能力、代理能力、逻辑推理(包括数学和编码能力)、长文本建模、特定应用(如问答或摘要)以及可信度。限于内容篇幅,感兴趣的读者可详细阅读原论文第3节内容(https://arxiv.org/pdf/2311.16989.pdf),本部分重要结论在第4节中已经给出。

4

讨论

4.1 LLM的发展趋势

自Brown等人(2020年)展示了GPT-3模型在各种任务上能取得惊人的零样本和少样本性能后,人们开始将大量精力投入到语言大模型(LLM)的开发和推进上。其中一项研究方向集中在扩大模型参数规模上,包括Gopher(Rae等人,2021年),GLaM(Du等人,2022年),LaMDA(Thoppilan等人,2022年),MT-NLG(Smith等人,2022年)和PaLM(Chowdhery等人,2022年),最终模型规模达到了5400亿参数。尽管这些模型展现出了卓越的能力,但由于是闭源模型,这限制了它们的广泛应用,因此人们逐渐对开源LLM的开发越来越感兴趣(Zhang等人,2022年;Workshop等人,2022年)。

与扩大模型规模不同,另一条研究路线探索了更好的策略或目标以预训练较小的模型如Chinchilla(Hoffmann等人,2022年b)和UL2(Tay等人,2022年)。在预训练之外,人们还致力于研究语言模型的指令微调,如FLAN(Wei等人,2021b)、T0(Sanh等人,2021)和Flan-T5(Chung等人,2022)等。

一年前,OpenAI推出的ChatGPT极大地改变了自然语言处理(NLP)社区的研究重点(Qin等人,2023a)。为了迎头赶上OpenAI,Google和Anthropic分别推出了Bard和Claude。尽管在许多任务中,它们的性能都能与ChatGPT媲美,但与最新的OpenAI模型GPT-4(OpenAI,2023b)之间仍然存在性能差距。由于这些模型的成功主要来自于人类反馈的强化学习(RLHF)(Schulman等人,2017b;Ouyang等人,2022a),所以研究人员探索了各种RLHF的改进方法(Yuan等人,2023;Rafailov等人,2023b;Lee等人,2023b)。

为推动开源语言大模型的研究,Meta发布了LLaMA系列模型(Touvron等人,2023a,b)。自此以后,基于LLaMA的开源模型迅速涌现。其中一个代表性的研究方向是利用指令数据对LLaMA进行微调,包括Alpaca(Taori等人,2023)、Vicuna(Chiang等,2023)、Lima(Zhou等,2023b)和WizardLM(Xu等,2023a)。当前的研究还探索了改进基于LLaMA的开源LLM的智能体(Xu等,2023d;Zeng等人,2023;Patil等,2023;Qin等,2023b)、逻辑推理(Roziere等,2023;Luo等人,2023a,c)和长上下文建模(Tworkowski等,2023;Xiong等,2023;Xu等,2023b)能力。此外,与其基于LLaMA开发LLM,许多工作致力于从头开始训练强大的LLM,例如MPT(Team,2023)、Falcon(Almazrouei等,2023)、XGen(Nijkamp等,2023)、Phi(Gunasekar等,2023;Li等,2023e)、Baichuan(Yang等,2023a)、Mistral(Jiang等,2023a)、Grok(xAI,2023)和Yi(01ai,2023)。我们相信,开发更强大、更高效的开源LLM,以实现闭源LLM能力的普及化,是一个很有发展前景的未来研究方向。

4.2 总结

就综合能力而言,Llama-2-chat-70B(Touvron等人,2023b)在某些基准测试中的表现优于GPT-3.5-turbo,但在大多数其他任务中的表现仍然落后。通过蒸馏直接偏好优化,Zephir-7B(Tunstall等人,2023)趋近于70B LLM的性能。WizardLM-70B(Xu等人,2023a)和GodziLLa-70B(Philippines,2023)能够实现与GPT-3.5-turbo相当的性能,表明这是一个有发展前景的研究方向。

在一些领域中,开源LLM的性能超越了GPT-3.5-turbo。对于基于LLM的智能体,通过更广泛和特定于任务的预训练和微调,开源LLM能够在一些任务上超越GPT-3.5-turbo。例如,Lemur-70B-chat(Xu等人,2023d)在探索环境和遵循编码任务反馈方面的表现更好。AgentTuning(Zeng等人,2023)在未知智能体任务上取得了提升。

ToolLLama(Qin等人,2023b)能够更好地使用工具。Gorilla(Patil等人,2023)相比GPT-4更擅长编写API调用。

在逻辑推理方面,WizardCoder(Luo等人,2023c)和WizardMath(Luo等人,2023a)通过增强的指令微调提高了推理能力。Lemur(Xu等人,2023d)和Phi(Gunasekar等人,2023;Li等人,2023e)通过在更高质量的数据上预训练,取得了更强的能力。

对于建模长上下文,Llama-2-long(Xiong等人,2023)使用了更长的词元和更大的上下文窗口进行预训练,从而在选定的基准测试中提升了性能。Xu等人(2023b)通过将上下文窗口扩展与位置插值和检索增强相结合,提高了7个长上下文任务的性能。对于特定应用能力,InstructRetro(Wang等人,2023a)通过使用检索和指令微调进行预训练,在开放式问答方面取得了性能提升。通过特定于任务的微调,MentaLlama-chat-13B(Yang等人,2023c)在心理健康分析数据集上超过了GPT-3.5-turbo的性能表现。Radiology-Llama2(Liu等人,2023)能够提高放射学报告的性能。Stru-Bench(Tang等人,2023b)是一个经过微调的7B模型,相对于GPT-3.5-turbo,它能够改善结构化响应生成,这是支持智能体任务的核心能力。Shepherd(Wang等人,2023c)只有7B参数,能够在生成模型反馈和评价方面取得与GPT-3.5-turbo相当或更好的性能。对于可信赖的人工智能,可以通过使用更高质量的微调数据来减少幻觉(Lee等人,2023a)、上下文感知解码技术(Dhuliawala等人,2023)、外部知识增强,如Li等人(2023c);Yu等人(2023b);Peng等人(2023);Feng等人(2023),或多代理对话(Cohen等人,2023;Du等人,2023)。

在人工智能安全等领域,GPT-3.5-turbo和GPT-4仍然是无法超越的存在。由于GPT模型涉及大规模的RLHF(Bai等人,2022a),人们普遍认为它们的行为更安全、更符合伦理。这对于商业LLM而言可能比开源LLM更重要。然而,随着RLHF过程的平民化(Bai等人,2022b;Rafailov等人,2023a),开源LLM在安全性方面将取得更多性能提升。

4.3 最佳开源LLM的秘诀

语言大模型的训练涉及复杂实践且需要大量资源,包括数据收集、预处理、模型设计以及训练。尽管开源LLM的发布日益增长,但不幸的是,领先模型的详细实践通常被保密。以下是一些广受社区认可的最佳实践。

数据:预训练涉及数万亿个来自公开可访问来源的数据词元的使用。从伦理角度来看,剔除所有包含私人信息的数据至关重要(Touvron等人,2023b)。与预训练数据不同,微调数据的数量较少,但质量更高。使用高质量数据进行微调的LLM已经在特定领域中表现出了更好的性能(Philippines,2023;Zeng等人,2023;Xu等人,2023d,a)。

模型架构:尽管大多数LLM使用的都是仅解码器的Transformer架构,但同时它们还使用了不同的技术来优化效率。Llama-2采用Ghost attention以改善多轮对话控制(Touvron等人,2023b)。Mistral(Jiang等人,2023b)使用滑动窗口注意力来处理扩展的上下文长度。

训练:使用指令微调数据进行监督微调(SFT)的过程至关重要。为获得高质量结果,需要数万个SFT注释,比如Llama-2使用了27540个注释(Touvron等人,2023b)。数据的多样性和质量至关重要(Xu等人,2023a)。在RLHF阶段,人们通常会首选近端策略优化(PPO)(Schulman等人,2017a)算法,以更好地对齐模型行为与人类偏好和指令,因此近端策略优化在增强LLM安全性方面起到了关键性作用。直接偏好优化(DPO)是PPO的替代方法(Rafailov等人,2023a)。例如,Zephyr-7B(Tunstall等人,2023)采用了蒸馏DPO,并在各种通用基准测试中显示出与70B-LLM相当的性能,甚至在AlpacaEval上超过了GPT-3.5-turbo。

4.4 漏洞和潜在问题

预训练期间的数据污染问题:这一问题变得越来越突出了,尤其是在没有公开预训练语料库来源的基础模型的发布后。这种透明度的缺乏可能使人们对语言大模型(LLM)真正的泛化能力产生偏见。除基准数据被人工专家或更大型的模型注释,并手动集成到训练集之外,数据污染问题的根本原因在于,基准数据的收集源已被包含在了预训练语料库之中。虽然这些模型并非有意使用监督数据进行预训练,但它们仍然可以获取确切知识。因此,解决LLM预训练语料库的检测问题(Shi等,2023),探索现有基准和广泛使用的预训练语料库之间的重叠,并评估基准测试的过拟合(Wei等,2023)十分关键,这对于提高LLM的忠诚度和可靠性至关重要。展望未来,以后的方向可能涉及建立公开预训练语料库细节的标准化实践,并开发在整个模型开发生命周期中减轻数据污染的方法。

闭源的对齐开发:在社区内,使用通用偏好数据用于对齐的RLHF应用受到了越来越多关注。然而,由于高质量、公开可用的偏好数据集和预训练奖励模型的稀缺性,只有少数开源LLM应用了RLHF,增强了对齐。人们提出了一些倡议(Bai等人,2022a;Wu等人,2023;Cui等人,2023)试图为开源社区做贡献。然而,在复杂的推理、编程和安全场景中,我们仍面临着缺乏多样性、高质量和可扩展的偏好数据的挑战。

持续提升模型基本能力的困难:本文所概述的基本能力突破揭示了一些有挑战性的问题:(1) 在预训练期间,已经投入了大量努力来探索改进的数据组合,以提高构建更强大的基础模型的平衡性和鲁棒性。然而,这种尝试的相关成本较高,在实际应用中不太现实。(2) 性能上超越GPT-3.5-turbo或GPT-4的模型,主要利用了从闭源模型进行的知识蒸馏和额外的专家注释。这种方法虽然高效,但对知识蒸馏的过度依赖可能会掩盖将这些方法扩展到教师模型时可能出现的问题。

此外,人们期望LLM能够充当智能体并提供合理的解释以支持决策,然而,为使LLM适用于现实世界情景,对智能体式数据进行标注同样昂贵且耗时。实质上,仅通过知识蒸馏或专家标注进行优化无法持续改进LLM的基本能力,而且很可能接近上限。未来的研究方向可能涉及探索新的方法论,如无监督或自监督学习范式,以在缓解相关挑战和成本的同时,实现基本LLM能力的持续进步。

5

总结

在这篇报告中,我们系统审查了ChatGPT发布一年后,在各种任务中超越或迎头赶上ChatGPT的高性能开源LLM(第3节)。此外,我们对开源语言大模型进行了深入洞察和分析,并探讨了潜在问题(第4节)。我们相信,这份调查有助于探索开源LLM的未来发展方向,并将激发该领域的进一步研究和发展,能帮助缩小开源模型和闭源模型之间的差距。


DeepCache 和 OneDiff 将 SDXL 迭代速度提高 3 倍

近期,DeepCache为加速扩散模型提供了一种新的免训练、几乎无损的范式。现在,OneDiff 引入了一个名为 ModuleDeepCacheSpeedup的新ComfyUI Node(已编译的DeepCache模块), 让SDXL在RTX 3090上的迭代速度提升3.5倍,在A100上提升3倍

示例:https://github.com/Oneflow-Inc/onediff/pull/426
使用指南:https://github.com/Oneflow-Inc/onediff/tree/main/onediff_comfy_nodes#installation-guide

770cda693a0c0fc2bdffb7de69aa2d1b.png

其他人都在看

  • 语言大模型的推理技巧

  • LoRA微调语言大模型的实用技巧

  • ChatGPT规模化服务的经验与教训

  • 机器学习硬件十年:性能变迁与趋势

  • 开源语言大模型演进史:向LLaMA 2看齐

  • 语言大模型的分布式训练与高效微调指南

  • 迈向百倍加速:全栈Transformer推理优化

试用OneFlow: github.com/Oneflow-Inc/oneflow/icon-default.png?t=N7T8http://github.com/Oneflow-Inc/oneflow/

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

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

相关文章

听GPT 讲Rust源代码--src/tools(18)

File: rust/src/tools/rust-analyzer/crates/ide-ssr/src/from_comment.rs 在Rust源代码中的from_comment.rs文件位于Rust分析器(rust-analyzer)工具的ide-ssr库中,它的作用是将注释转换为Rust代码。 具体来说,该文件实现了从注…

数据库学习日常案例20231221-oracle libray cache lock分析

1 问题概述: 阻塞的源头为两个ddl操作导致大量的libray cache lock 其中1133为gis sde的create table as语句。 其中697为alter index语句。

微软官方出品:GPT大模型编排工具,支持C#、Python等多个语言版本

随着ChatGPT的火热,基于大模型开发应用已经成为新的风口。虽然目前的大型模型已经具备相当高的智能水平,但它们仍然无法完全实现业务流程的自动化,从而达到用户的目标。 微软官方开源的Semantic Kernel的AI编排工具,就可以很好的…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成

一、插件 Settings... 1.1 File -- Settings 1.2 Settings -- Plugins 1.2.1 搜索框,也可以直接搜索 1.3 Plugins -- 【输入 & 搜索】mybatis 1.3.1 插件不同功能介绍 1.3.2 翻译如下 1.4 选中 Update,更新下 1.4.1 更新中 1.4.2 Restart IDE 1…

Java数据结构-模拟ArrayList集合思想,手写底层源码(1),底层数据结构是数组,编写add添加方法,正序打印和倒叙打印

package com.atguigu.structure; public class Demo02_arrayList {public static void main(String[] args) {MyGenericArrayListV1 arrayListV1 new MyGenericArrayListV1();//arr.add(element:100,index:1);下标越界,无法插入//初始化(第一次添加&…

selenium 报错

selenium 报错 开始学自动化测试,,环境配了一天TAT 安装好selenium之后 运行python脚本 # codingutf-8 from selenium import webdriver import timedriver webdriver.Chrome() driver.get("https://www.baidu.com") time.sleep(3) driver.…

HTML5的完整学习笔记

HTML 什么是HTML: 作为前端三件套之一,HTML的全称是超文本标记语言(Hypertext Markup Language)。HTML是一种标记语言,用于创建网页。它由一系列标签组成,这些标签用于定义网页的结构和内容。HTML标签告诉…

DIV+CSS页面布局

1.页面布局设计 现在所有的主流的、大型的 IT 企业的网站布局几乎都采用 DIV、CSS技术,有些甚至采用 DIV、CSS、表格混合进行页面布局。此类页面布局能够实现页面内容与表现的分离,提高网站访问速度、节省宽带、改善用户的体验。DIVCSS组合技术完全有别…

【Docker】基于华为 openEuler 应用 Docker 镜像体积压缩

书接 openEuler 系列文章(可以翻看测试系列),本次跟大家说说如何将 Java 包轻量化地构建到 openEuler 镜像中且保持镜像内操作系统是全补丁状态。 之前我们都是使用现成的 jdk 镜像进行构建的,如下图: FROM ibm-seme…

力扣每日一题day36[112.路径总和]

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指没有子节点…

云原生系列3-Kubernetes

1、Kubernetes概述 k8s缩写是因为k和s之间有八个字符。k8s是基于容器技术的分布式架构方案。官网:https://kubernetes.io/zh-cn/ Google在 2014年开源了Kubernetes项目,Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的…

three.js实战模拟VR全景视图

文章中使用到的案例图片都来源于&#xff1a;Humus - Textures 里面有很多免费的资源&#xff0c;可以直接下载&#xff0c;每个资源里面都提供6个不同方位的图片&#xff0c;我们通过threejs稍微处理一下&#xff0c;就能实现以下3D效果的场景了。 <template><div …

aws-waf-cdn 基于规则组的永黑解决方案

1. 新建waf 规则组 2. 为规则组添加规则 根据需求创建不同的规则 3. waf中附加规则组 &#xff08;此时规则组所有规则都会附加到waf中&#xff0c;但是不会永黑&#xff09; 此刻&#xff0c;可以选择测试下规则是否生效&#xff0c;测试前确认保护资源绑定无误 4. 创建堆…

【Docker-5】镜像编排

Dockerfile语法 制作apache镜像 httpd.service 文件路径&#xff1a;/lib/systemd/system/httpd.service [rootdocker-0002 ~]# mkdir apache [rootdocker-0002 ~]# cd apache拷贝动态页面到docker-0002的/root/apache/ [rootecs-proxy ~]# scp /root/5/public/info.php 192.…

智慧工地一体化云平台APP源码:监管端、工地端、危大工程、智慧大屏、物联网、塔机、吊钩、升降机

智慧工地管理平台是依托物联网、互联网建立的大数据管理平台&#xff0c;是一种全新的管理模式&#xff0c;能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。 智慧工地源码技术说明 1.微服务架构JavaSpring Cloud UniApp MySql 2.支持多端展示&#xff08;PC端、手…

网络爬虫 动态数据采集

动态数据采集 规则 有时候我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能和在浏览器中看到的不一样&#xff0c;在浏览器中可以看到正常显示的页面教据&#xff0c;但是使用 requests 得到的结果并没有&#xff0c;这是因为requests 获取的都是原始的 HTML 文档…

C#合并多个Word文档(微软官方免费openxml接口)

g /// <summary>/// 合并多个word文档&#xff08;合并到第一文件&#xff09;/// </summary>/// <param name"as_word_paths">word文档完整路径</param>/// <param name"breakNewPage">true(默认值)&#xff0c;合并下一个…

CSS3过渡与动画,2D与3D

背景和边框 1. border-image 该属性用于定义元素边框的背景图像 语法&#xff1a;border-image:none | url(img) imagesection [/imagewidth] imaghandling 其中imagesection定义用于边框不同部分的图像部分。imagesection值可以由图像上的4条分隔线组成&#xff0c;每条线以…

华为配置BGP的基本示例

组网需求 如图1所示&#xff0c;需要在所有Switch间运行BGP协议&#xff0c;SwitchA、SwitchB之间建立EBGP连接&#xff0c;SwitchB、SwitchC和SwitchD之间建立IBGP全连接。 说明 请确保该场景下互联接口的STP处于未使能状态。因为在使能STP的环形网络中&#xff0c;如果用交…

Docker部署 flowable-ui 进行流程建模

Docker部署 flowable-ui 进行流程建模 简介 安装Docker Desktop,本篇无安装步骤安装正常打开运行后&#xff0c;正式开始部署flowable-uicmd执行拉取镜像操作docker pull flowable/flowable-uicmd启动镜像docker run -d --name flowable -p 8081:8080 flowable/flowable-ui修…