首页 文章 精选 留言 我的

精选列表

搜索[策略引擎],共10000篇文章
优秀的个人博客,低调大师

引擎盖下的 Linux

宝马、雪佛兰、本田、梅赛德斯和特斯拉有一个共同点:它们的汽车都运行 Linux。汽车成为了一个软件平台,而这个平台上运行的是 Linux,它的主要竞争对手黑莓的 QNX 和微软的 IoT Connected Vehicles 都在失去领地。 Linux 基金会与福特、本田、马自达、尼桑、梅赛德斯、铃木,以及最大汽车公司丰田等组建了 Automotive Grade Linux (AGL),创建基于 Linux 的汽车解决方案。特斯拉公司则使用自己的基于 Ubuntu 的方案,它最近释出了 8.1 更新 (17.24.30),将 Linux 内核版本从古老的 2.6.36 升级到了 4.4.35。 AGL 不是唯一一个将 Linux 整合到汽车中的工作组,福特、丰田、马自达和铃木等组建了 SmartDeviceLink (SDL)联盟,开发基于 Linux 开源方案将智能手机和汽车无缝整合在一起。Google 则开发了 Android Auto。打车软件公司 Lyft 广泛使用 Ubuntu,其中包括在自动驾驶汽车使用 Ubuntu。

优秀的个人博客,低调大师

理解Docker——深入引擎室

点击关注异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 本文大概 3301 字 读完共需 9 分钟 本文主要内容 Docker的架构 在用户的宿主机上追溯Docker的内部结构 使用Docker Hub查找和下载镜像 设置自己的Docker注册中心(registry) 实现容器间的相互通信 掌握Docker的架构是更全面地理解Docker的关键。在本文中,读者将在自己的主机和网络上对Docker的主要组件进行大致了解,并学习一些有助于增进这种理解的技巧。 在这个过程中,将学习一些有助于更有效地使用Docker(及Linux)的小窍门。后续的更高级的很多技巧都是基于这里所见的部分,因此请特别留意以下内容。 1.1 Docker的架构 图1-1展示了Docker的架构,这将是本文的核心内容。我们将从高层次视角入手,然后聚焦到每个部分,使用设计好的技巧来巩固理解。 宿主机上的Docker(在编写本文时)分成两个部分:一个具有REST风格API的守护进程,以及一个与守护进程通信的客户端。图1-1展示的是运行着Docker客户端和守护进程的宿主机。 REST风格 一个REST风格API是指使用标准HTTP请求类型,如GET、POST、DELETE等,来执行通常符合HTTP设计者预想的功能的API。 调用Docker客户端可以从守护进程获取信息或给它发送指令。守护进程是一个服务器,它使用HTTP协议接收来自客户端的请求并返回响应。相应地,它会向其他服务发起请求来发送和接收镜像,使用的同样是HTTP协议。该服务器将接收来自命令行客户端或被授权连接的任何人的请求。守护进程还负责在幕后处理用户的镜像和容器,而客户端充当的是用户与REST风格API之间的媒介。 图1-1 Docker架构概览 私有Docker注册中心是存储Docker镜像的一项服务,可以从任何有相应权限的Docker守护进程向其发送请求。这个注册中心处于内部网络中,不能公开访问,因此被视为是私有的。 宿主机一般坐落在一个私有网络上。在收到请求时,Docker守护进程将连接互联网来获取镜像。 Docker Hub是由Docker公司运营的一个公共的注册中心。互联网上也存在其他公共的注册中心,且Docker守护进程可与之进行交互。 在前文中我们说可以将Docker容器分发到任何能运行Docker的地方——这并不完全正确。实际上,只有当守护进程可以被安装到机器上时,容器才能在这台机器上运行。最明显的事实是,Docker客户端可以运行在Windows上,但守护进程(还)不行。 理解这张图的关键在于,当用户在自己的机器上运行Docker时,与其进行交互的可能是自己机器上的另一个进程,或者甚至是运行在内部网络或互联网上的服务。 现在,对Docker的结构有了大致的印象,我们来介绍几个与图中不同部分有关的技巧。 1.2 Docker守护进程 Docker守护进程(见图1-2)是用户与Docker交互的枢纽,因而它是理解所有相关部分的最佳切入点。它控制着用户机器上的Docker访问权限,管理着容器与镜像的状态,同时代理着与外界的交互。 图1-2 Docker守护进程 守护进程与服务器 守护进程是运行在后台的一个进程,不在用户的直接控制之下。服务器是负责接受客户端请求,并执行用于满足该请求所需的操作的一个进程。守护进程通常也是服务器,接收来自客户端的请求,为其执行操作。docker命令是一个客户端,而Docker守护进程则作为服务器对Docker容器和镜像进行操作。 我们来看几个技巧,这些技巧用于展示Docker作为守护进程高效运行,同时使用docker命令与其进行的交互被限制为执行操作的简单请求,就像与Web服务器进行交互一样。第一个技巧允许其他人连接你的Docker守护进程,并执行与你在宿主机上所能执行的相同操作,第二个技巧说明的是Docker容器是由守护进程管理的,而不是你的shell会话。 1.3 Docker客户端 Docker客户端(见图1-3)是Docker架构中最简单的部件。在主机上输入docker run或docker pull这类命令时运行的便是它。它的任务是通过HTTP请求与Docker守护进程进行通信。 图1-3 Docker客户端 在本节中,读者将看到如何监听Docker客户端与服务器之间的信息,还将看到一些与端口映射有关的基本技巧,这是向本文后续的编排章节迈进的一小步,也是使用浏览器作为Docker客户端的一种方式。 本文摘自《Docker实践》 《Docker实践》 艾丹 • 霍布森 • 塞耶斯(Aidan Hobson Sayers),【美】伊恩 • 米尔(Ian Miell) 点击封面购买纸书 本文由浅入深地讲解了Docker,涵盖从开发环境到DevOps流水线再一路到生产环境的整个落地过程。书中介绍Docker的核心概念和架构,以及将Docker和开发环境有机、高效地结合起来的方法,包括用作轻量级的虚拟机以及与构建和宿主机编排、配置管理、精简镜像等。本文还通过“问题/解决方案/讨论”的形式,将等一系列难题拆解成101个相关的实用技巧,为读者提供解决方案以及一些实践经验。 延伸推荐 2018年2月新书 2018年1月重磅新书 小学生开始学Python,最接近AI的编程语言:安利一波Python书单 政策升温:大家都在学大数据,一大波好书推荐 一本基于Python语言的Selenium自动化测试书 8本新书,送出一本你喜欢的 AI经典书单| 入门人工智能该读哪些书? 点击关键词阅读更多新书: Python|机器学习|Kotlin|Java|移动开发|机器人|有奖活动|Web前端|书单 长按二维码,可以关注我们哟 每天与你分享IT好文。 在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程;推荐朋友关注根据提示获取赠书链接,免费得异步图书一本。赶紧来参加哦! 扫一扫上方二维码,回复“关注”参与活动! 点击阅读原文购买《Docker实践》 阅读原文

优秀的个人博客,低调大师

LoRA:语言模型微调的计算资源优化策略

编者按:随着数据量和计算能力的增加,大模型的参数量也在不断增加,同时进行大模型微调的成本也变得越来越高。全参数微调需要大量的计算资源和时间,且在进行切换下游任务时代价高昂。 本文作者介绍了一种新方法LoRA,可以在保持模型性能的同时大幅减少微调的参数量和所需资源。 LoRA通过引入两个低秩适配矩阵,用矩阵乘法的方法替换大部分参数。实验证明,LoRA在多项NLP任务上的表现与许多微调方法(如Adapter和PreLayer等)相当或更好。与全参数微调相比,LoRA降低了可训练参数数量10,000倍,GPU内存需求减少3倍,存储需求减少10,000倍,训练速度提高25%。 LoRA 为大语言模型的高效多任务微调提供了一种有效途径。作者认为LoRA可以推广到更多模型结构,有望加深我们对模型微调机制的理解。 作者 | ArxivDives 编译|岳扬 🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~ 一、 背景知识 Paper:https://arxiv.org/abs/2106.09685 Published:October16th,2021,byMicrosoftandCMU 这篇文章涉及的数学内容较多,但幸运的是,涉及的线性代数内容仅涉及基础的加法和乘法运算,我相信我们都能够理解。 首先,我将简要概述相关的数学原理及其原因,接下来,我们将深入探讨论文的细节,以及它们如何应用于GPT-2和GPT-3等transformers模型。 最重要的一点是:LoRA减少了可训练参数(trainableparameters)的数量,从而减少了训练时间和GPU内存的使用量,同时保持了输出的质量。 LLM(顾名思义)的规模非常大。用于微调的数据集(fine-tuningdatasets)通常比模型的预训练数据集小得多。当数据集比较小的时候,LoRA只需更新较少的权重,这即是LoRA的优势所在。 二、LoRA的工作原理 如果你熟悉矩阵乘法,那么应该知道AxM矩阵和MxB矩阵相乘得到的结果是一个AxB矩阵。 https://www.youtube.com/watch?app=desktop&v=2spTnAiQg4M 假设在神经网络中有一个MxM的预训练密集层(pre-traineddenselayer)(权重矩阵)W。 例如,这个Keras模型有3个size 为512x512的密集层(denselayers): 然后再初始化两个密集层A和B,它们的shapes 分别为MxR和RxM。 R(秩)远远小于M。研究表明,R的取值在1和4之间效果较好。 所以,举个例子,假设密集层拥有512x512=262,144个参数。 因此,可以有一个size为512x4和一个size为4x512的矩阵,每个矩阵只有2048个参数,总共4096个参数。 密集层的原始方程式为: Y=Wx+b LoRA将其修改为: Y=Wx+b+BAx 其中,x是一个512x1的向量,是神经网络的输入,b是一个512x1的偏置向量。 矩阵乘法的数学公式如下: Dimensionsofeachvariable: W=512x512 x=512x1 b=1x512 B=512x4(Newparams) A=4x512(Newparams) Dimensionsfullylaidout: Y= (512x512) * (512x1) + (1x512) + (512x4) * (4x512) * (512x1) 但在这种情况下,我们只训练A和B两个矩阵,每个矩阵只有2048个参数。因此,通过使用LoRA方法,可将可训练参数的数量从262,144减少到4,096个。 三、可以优化神经网络的哪些部分? 在训练/运行神经网络时,我们需要考虑哪些部分可以进行优化? 1. 总体模型大小(Totalmodelsize) ●模型的磁盘占用空间,使用serverless时,通过网络传输模型所需的模型大小,需要占用的RAM大小,需要占用的GPU 大小,需要占用的CPU大小 2. 推理时的batchsize(Inferencebatchsize) ●batchsize,序列长度(sequencelength),datasize 3. 训练所需的内存 ●所有模型参数+可训练参数的梯度 如果你还记得反向传播算法(backpropagation)的工作原理,你需要计算每个偏导数并将它们存储在内存中,以便进行反向传播。这意味着对于传统的全参数微调,所需的内存使用量将增加一倍。 https://soumya997.github.io/2022-03-20-pytorch-params/ LoRA只训练秩分解矩阵(rankdecompositionmatrices)(A和B),从而减少了总体训练所需的内存。 这些少量的适配器(adapter)权重可以合并到实际模型本身中,因此它们不会影响推理过程或总体模型的大小。 五、为什么没有额外的推理时间? LoRA的原始方程为: Y=Wx+b+BAx 由于加法的传递性质,我们可以将其重新表达为: Y=Wx+BAx+b 或者将x因数合并为 Y=(W+BA)x+b 也就是说,我们可以简单地将(W+BA)替换为新的W1,然后恢复原来的线性方程。 W1=(W+BA) 我们用一组新的权重恢复到原来的方程: Y=W1*x+b 这就意味着,如果我们将原始模型和适配器(adapter)的权重合并,我们所进行的计算基本上与原始模型相同! 五、深入探究这篇论文 目前自然语言处理的范式是先在大量通用数据上进行预训练,然后再对一项或多项特定任务进行微调。对于大模型来说,全面微调所有参数的成本变得过高。 以GPT-3为例,其拥有175B个参数,这意味着现在需要加倍存储所有梯度来进行训练,更不用说如果要存储多个微调后的模型,还需要将每个模型的全套参数保存下来。 LoRA可以将可训练参数的数量减少10,000倍,GPU内存的需求减少3倍。 在实际应用中,内存使用量的减少程度取决于模型的大小。 https://keras.io/examples/nlp/parameter_efficient_finetuning_of_gpt2_with_lora/?ref=blog.oxen.ai 虽然LoRA具有更高的训练吞吐量,而且没有额外的推理延迟,但其性能与微调(fine-tuning)相当,甚至更好。 5.1Introduction 自然语言处理中的许多应用依赖于将一个大参数量的通用模型适应于多个下游应用。 例如,可能有一个通用模型,可以用最常见的nextwords 完成大量的英语句子。人类语言的一个问题在于对于同一个句子可能有多种有效的延续方式。 想想人们对不同的话题有多少不同的看法。其中很多观点都基于他们的过去经验,人们在讨论和交流观点时经常会产生分歧和辩论。 例如,你希望下游模型能够用你的声音总结文本,或者能够将自然语言翻译成SQL查询语句,或者让微调后的模型比基础模型更有趣,这些都可以通过微调来实现。 对整个模型进行端到端(endtoend)微调的一个缺点是,新模型包含的参数和旧模型一样多。如果要进行N次微调,这就意味着每个新模型的存储占用空间和内存都要线性增加。 一些人通过为新任务学习外部模块或在模型中添加新层来解决了这个问题,但这会增加推理延迟。 https://pyimagesearch.com/2019/06/03/fine-tuning-with-keras-and-deep-learning/?ref=blog.oxen.ai 5.2LoRA中的“Rank”指的是什么? 他们强调了一个事实,即过参数化(over-parameterized)模型(参数量远超训练数据量的模型)实际上具有相对简单的内在空间维度,并假设在模型适应或调整过程中,权重的变化具有“低内在秩(lowinstrinsicrank)”(译者注:即其权重调整过程可能并不需要在所有这些维度上进行。实际上,有效的权重调整可能仅仅发生在一个相对较小的子空间内)。 矩阵的“秩(rank)”是指其中线性无关的列或行的数量。 我们可以将神经网络中的线性无关性(linearindependence)理解为“每组权重对决策的影响有多大”。 秩为零的矩阵将是一个全零矩阵。 如果你有一个看起来像这样的矩阵: 1234 2468 5397 我们可以看到这个矩阵前两行其实是彼此的倍数,所以它们会继续指向相同的方向。但是,第三行则带我们走向完全不同的方向。 在下图中,秩为2的矩阵将形成一个二维平面,因为所有向量都在同一平面上,而秩为3的矩阵则更像一个立方体,因为每个向量指向不同的方向。 https://peterbloem.nl/blog/pca-4?ref=blog.oxen.ai 神经网络的维度通常非常高,而我们的大脑很难想象或理解这么高维度的空间。 即使原始数据的维度非常高(高达12,228),使用低秩(甚至是1或2)也能够有效地表示数据。 这种技术的优势包括: ●可以共享同一个预训练模型,也可以为不同的任务构建许多更小的LoRA模型。 ●LoRA提高了训练效率,降低了硬件门槛。 ●简单的线性设计允许权重可合并,不会带来推理延迟。 ●LoRA可应用于许多模型架构和先前的方法,因为它是一个简单的密集层(denselayer)。 在本例中将LoRA应用于Transformer架构。因此,下一节一起来了解有哪些变量,分别代表着什么。 5.3现有解决方案还不够好吗? 论文承认,这绝不是一个新问题。迁移学习(Transferlearning)有多种方法提高模型自适应(ModelAdaptation)的效率,包括参数和计算的效率。。 论文作者特别关注了在模型自适应(ModelAdaptation)过程中使用 adapterlayers以及优化输入层(inputlayers)或prompts 的方法。 adapterlayers 虽然体积小,但必须按顺序处理,而不是并行处理,因此会增加额外的延迟。 他们对A从高斯分布中随机选择初始值来初始化矩阵中的元素,并将矩阵B初始化为零,这样在训练开始时,矩阵B乘以矩阵A的结果为零。 论文指出,LoRA可以进行全参数微调,因为一旦将LoRA的秩设为预训练权重矩阵的秩,LoRA会逐渐收敛到与原始模型相似的状态,从而实现对原始模型的训练。 当模型部署到生产环境中时,可以进行W=W+BA的计算并将结果存储下来,然后像往常一样进行推理。当需要将微调后的模型切换到另一个任务时,可以通过简单的数学操作来恢复原始的模型权重W,而且不会占用太多额外的内存空间。 5.4将LoRA应用于Transformers 论文只将LoRA应用于注意力机制(attentionmechanism)中的查询(Query)、键(Key)和值(Value)权重矩阵,而不将其应用于其他密集层(denselayers)。 本文还将LoRA应用于Transformer 的其他部分留作“未来的工作”。 5.5实际优势PracticalBenefits LoRA带来的最显著好处是内存和存储空间的减少。 对于GPT-3175B,该技术将VRAM消耗从1.2TB减少到350GB。这是相当惊人的,训练GPT-3需要如此大量的VRAM。 由于r=4且仅调整Q和V矩阵,微调(fine-tuning)过程中生成的 checkpoint 大小约为35MB,而不是350GB......因此减少了10,000倍。 请注意,在模型的部署过程中仍然需要350GB存储空间,但存储100个微调后的模型仅需要350GB+35MB*100≈354GB,而不是100*350GB≈35TB。 这样就可以创建许多定制模型,并且可以在存储预训练权重(pre-trainedweights)的机器上随时切换模型。 论文作者还观察到,与全参数微调相比,训练速度提高了25%,因为不需要为绝大多数参数计算梯度。 5.6根据经验和实验证明 论文评估了LoRA在RoBERTa、DeBERTa和GPT-2上的下游任务性能,然后将其扩展到了GPT-3。 论文在多个基准测试上进行了评估: ●GLUE(GeneralLanguageUnderstandingEvaluation),这个基准测试包含许多子任务。 ●WikiSQL ●SAMsum(conversationsummarization) ●Baselines 我们不会对所有adapters 进行比较,但我们可以看到,在RoBERTa上使用LoRA时,LoRA甚至比许多adapters 更有竞争力。 即使可训练参数的数量要小得多,但是当应用于GPT-2时,性能超过了许多Adapter和PreLayer方法。 在上述任务中,GPT-3也是如此。GPT-3的运行成本要高得多,所以作者会更加谨慎地选择对GPT-3进行评估的基准测试,以避免过高的运行成本。 5.7什么是promptengineering? 他们承认promptengineering 可以用来最大限度地提高通用模型在特定任务中的性能,并指出微调GPT-3与promptengineering进行比较并不十分科学,因此在prompting 和微调之间还没有进行过很多比较。 此外,David在谈话中提到,promptengineering 比全参数微调更不稳健,更容易受到提示语注入攻击(promptinjectionhacks)的影响。 5.8使用多少秩(Rank)以及应用于哪些权重(weights)? 在评估过程中,较低秩的模型表现优于较高秩的模型,这可能令人感到惊讶。 5.9SubspaceSimilarity (译者注:"SubspaceSimilarity"指的是在线性代数中,两个向量空间之间的相似性。)他们使用奇异值分解来研究模型中不同子空间之间的相似性。他们发现,在观察模型中的不同子空间时,直到维度为1时,这些子空间之间的相似性仍然很高。这可能对于理解为什么较低秩的模型表现更好具有重要意义。 下面是对列向量之间子空间相似性的另一个可视化图示。可以看到,很多列向量的值都接近于零,这意味着它们非常相似,只有那些topranks 的列向量才会显示出差异。(译者注:"topranks"可能指的是奇异值分解中最大的奇异值对应的向量。) 这些关于权重的研究提出了一个问题:如果有如此多的参数是线性相关的,那么一般来说,大语言模型到底需要多少参数呢? 六、结论和未来展望 对大语言模型进行微调的成本过高,尤其是在需要切换不同任务时。 LoRA有助于降低训练成本,并实现快速任务切换。 由于LoRA是一种与模型架构无关的技术,因此可以与许多其他方法和模型结合使用。 微调或LoRA背后的机制尚不清楚,他们认为通过研究矩阵的秩,可以更容易地理解 LoRA的工作机制,相较于全参数微调的方法。 他们认为模型的许多其他部分也可以应用LoRA,而且他们的许多设置都是基于启发式方法(heuristics)选择的。 作者在微调Llama时使用LoRA不会增加硬件要求,同时我们也看到很多人将其应用于 stablediffusion(用于图像生成),我认为很多云服务可能也都在使用Lora来提高不同任务的准确性。 本文经原作者授权,由Baihai IDP编译。如需转载译文,请联系获取授权。 原文链接: https://blog.oxen.ai/arxiv-dives-how-lora-fine-tuning-works/

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册