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

5f8008e3ab3ca6ad2cbcfb61b1c5becf.jpeg

2022年11月30日,OpenAI发布ChatGPT,以很多人未曾预料的速度迅速走红。与此同时,由于短时间内用户量的暴涨,导致服务器过载,迫使OpenAI停止新用户的注册。

ChatGPT发布这一年,同样的情景发生了好几次。在最近的OpenAI开发日之后,使用量再度激增,随后OpenAI宣布暂停新用户使用其付费服务。

这背后体现了大模型提供规模化服务时运维的重要性。Evan Morikawa是OpenAI的工程团队经理,目前他主要负责将ChatGPT API等工程产品和设计安全地推向全世界。在近期的一次演讲中,他分享了OpenAI在ChatGPT发布过程中面临的工程、产品和组织方面经历的挑战以及从中学到的经验和教训。

(以下内容由OneFlow编译发布,转载请联系授权。原文:https://www.youtube.com/watch?v=PeKMEXUrlq4&t=109s)

来源 | LeadDev

OneFlow编译

翻译|杨婷、宛子琳

2022年11月30日,我们发布了ChatGPT。当时,OpenAI团队对ChatGPT发布后的前景持不同看法。

这是我们第一次允许公众无需预约即可自由访问模型,这让一些同事感到紧张。在团队内部,我们已经感受到ChatGPT的有趣之处,并且认为在它发布以后很可能迅速走红。此外,我们的GPU资源有限,可能会出现访问资源上的供不应求。过去,我们对聊天应用一直持保守态度,尽管ChatGPT更安全,对齐程度更高,安全系统更加完善,但仍面临着被滥用的风险。

同时,团队中有人对此并不太担心,因为人们已经可以通过开发者平台免费使用ChatGPT,并且ChatGPT也不一定会走红。此外,这只是几个月前发布的GPT-3.5的微调版本,并不是下一代模型GPT-4,而微调版本的模型更加安全。最后,我们没有媒体发布会,只是发布了一篇博客和一条推文,因此,似乎不会出什么问题。

在完成最后一次负载测试后,我们发布了ChatGPT。随后,平台流量开始上涨,并逐渐稳定,实际上,发布后的流量低于我们的预期。我们一直密切关注发布后的情况,在当天的Hacker News上,我们的最高热度甚至没有进入前五,但我们还是感到比较满意。

在内部,我们将这种情况称为“低调的研究预览(low key research preview)”,现在这一术语已经带上了一些负面色彩,但当时,我们的发布会确实是一个相对低调的研究预览,因此,当天大家都能在11月30日晚上正常休息。


第二天早上凌晨4点,我们收到了值班室的警报。出于某种原因,日本的用户访问量激增,因为日本是最早醒来的地区。之后,消息在Twitter上传开,Elon Musk也发布了一篇关于ChatGPT的推文,导致热度进一步高涨。

这时候我们遇到了一点麻烦,为处理突增的流量,团队实施了一个容量控制措施,这种方法类似于俱乐部门卫,即一旦达到容量限制,我们将不允许新用户注册,直到有用户离开。

我们认为,相比传统的预约等待列表,这种方式能让更多人有机会体验ChatGPT。然而,在内部,我们将这称之为“失败鲸(fail whale)”。当时,我们已经达到了容量上限,没有更多GPU可用了,但“失败鲸”数量一直在上涨。网站常常崩溃,网页经常显示“容量已达上限”,实际上,我们已经尽了最大努力提供最大容量。

在ChatGPT发布后的几个月里,网站流量越涨越多,越涨越快,因此,我们团队一直在努力使网站保持稳定,以满足人们的需求。

在ChatGPT的发布过程中,我们学到了很多经验教训,在这里,我主要强调三点:第一,GPU和大规模运行语言大模型的能力;第二,打造一个理智且不断学习成长的团队;第三,学习应对模型可能面临的滥用问题和安全挑战

1

ChatGPT与GPU

首先,我想讨论一下GPU以及ChatGPT如何更好地利用GPU。GPU对ChatGPT及其构建的API至关重要,由于GPU供应极为有限,其特性和成本决定了我们的运营和扩展方式。

为ChatGPT提供动力的计算机拥有大量GPU,每个节点有8块A100 GPU,每个GPU都配备了特殊的高带宽内存(HPM),并且需要在所有GPU之间进行通信。为实现这一点,我们采用了NVIDIA提供的特殊NVLink互联技术,并通过板上的开关将多个GPU紧密连接起来,使它们能够高速交换数据。同时,系统的每张GPU卡还通过以太网和InfiniBand技术连接到外界,该技术为每张GPU提供了200Gb/s或将提升到400Gb/s的网络带宽。对于ChatGPT等大模型,每一点额外的计算能力或带宽的提升都直接影响模型的用户体验和我们所能提供的服务质量。

GPU有许多值得关注的方面,但今天我主要专注以下几个方面:GPU内存和KV缓存、批处理大小、算子、数据传输量与浮点运算数量(Bytes and arithmetic intensity)、任务调度以及自动扩展等。

GPU内存和KV缓存

为了更好地介绍这些内容,先简要带大家复习一下AI模型的工作原理。

c20014922c5cfd4feecc98236358a3af.png

当我们向ChatGPT提问时,模型首先接收文本,将其切分成词元(tokens),然后将每个词元转换为一组数字向量,再通过数百亿个模型权重进行乘法运算。这些模型权重通过梯度下降逐渐微调,方法是预测互联网上所有单词的下一个单词来进行训练,然后,我们会计算出下一个最可能出现的词元的概率。通过不断重复这个步骤,ChatGPT会最终生成相应的内容。

在这种架构中,每个词元都能感知到其他单个词元,这就是自注意机制。文本或上下文越长,我们需要进行的数学运算就越多。不幸的是,自注意机制的复杂度是二次的,文本越长,所需的数学运算也会呈二次增长。此外,我们还需要昂贵的投影操作来用不同维度来映射事物,这听起来可能不太具有优势,但我们需要关注几个相关的属性。

首先,我们可以在先前的所有词元上进行数学计算并进行缓存,这就是KV缓存,K、V指的是在注意力机制中使用的主要矩阵的名称。需要注意的是,第三个矩阵Q的数值每次都会变化,并且无法被缓存,实际上这只是一种命名约定。最关键的是,我们需要将这个缓存存储在GPU中,这是一种特殊的HBM3内存。之所以选择使用HBM3内存,是因为通过PCIe总线传输数据的速度比HBM3内存慢两个数量级,而HBM3内存的传输速度达到3TB/s,对于处理大量数据非常重要。由于HBM3内存与GPU相连,因此具有极高的并行数据吞吐量。

由于GPU HBM内存价格昂贵且容量有限,因此主要用于存储模型权重。一旦这些内存空间用完,系统将按照“最旧的先过期”原则来管理内存。如果发生缓存未命中,即需要的数据不在缓存中,我们就需要重新计算整个聊天对话。此外,由于我们在所有用户之间共享GPU内存,如果某个对话在一段时间内没有操作,它可能会被移出内存。

上述情况意味着:首先,GPU内存实际上成为我们最宝贵的资源之一,它常常代表着某些运算瓶颈,而不仅仅是计算量本身。其次,缓存未命中会对GPU的工作量产生显著的非线性影响,因为我们突然需要重新计算所有内容。

因此,在扩展ChatGPT时,我们不能只简单考虑CPU利用率指标,还需要关注KV缓存,尽可能充分利用所有GPU内存。

批处理大小

批处理大小是另一个指标,大致表示在同一时间发送到GPU的并行请求数量。在H100 GPU中,最多可以在内存寄存器中移动3.35TB/s的RAM,并且在这一秒内,我们可以执行1.98千万亿次8位浮点数的乘法运算。

这意味着,在移动一个字节的时间可以执行591次浮点运算,在行业中,这被称为591:1的运算比率。换句话说,如果要花一定时间移动整个千兆字节的数据,就应该至少执行5910亿次浮点运算,否则会浪费GPU和潜在计算能力。但如果超过这一比率,就需等待内存带宽将数据传输到内存中。

在ChatGPT模型中,需要移动的内存量基本是固定的,大致等于模型权重大小。这意味着,通过改变批处理大小,可以控制可执行的数学运算量。

因此,在扩展ChatGPT时,我们还需要监视批处理大小,以确保GPU得到充分利用。

总体而言,批处理大小和KV缓存的结合是我们确定服务器负载程度的主要指标,我们花了一些时间才确定这一结论。最初,我们使用类似于标准CPU利用率指标的简化GPU利用率指标,但结果证明这一指标具有误导性。

简单的利用率指标只能告诉我们在某个时间段内GPU是否在进行数学计算,而不能告知我们计算强度是否已经饱和,或者我们是否正在耗尽KV缓存。

数据传输量与计算强度

虽然在这里我只讨论了KV缓存和批处理大小,但实际上瓶颈也可能来自内存带宽、网络带宽、GPU以及节点等各种因素。此外,这些瓶颈的位置在模型大小、架构和使用模式上也差异巨大。例如,相比让ChatGPT写文章,它在总结文章方面的性能特性有着天壤之别。

实际上,对于OpenAI和芯片制造商来说,由于上述差异,要设计出完美平衡的芯片十分困难。例如,尽管下一代H100相比A100计算性能提高了6倍,但内存带宽只增加了2倍,我们与其他语言大模型公司发现,很容易碰到内存限制,这实际上限制了新GPU的增益价值。而且,由于H100设计方案几年前就已经确定,NVIDIA本身无法预知这一点。

未来的机器学习架构和规模对于我们和其他人来说都难以预测,但总体而言,我们需要不断调整数学计算,使其与模型的演进相匹配。

其次,我们面临的挑战是GPU的供应问题。OpenAI和整个AI领域的发展速度远远超过了NVIDIA或整个台积电供应链能够生产的速度。由于半导体和数据中心供应链的复杂性,我们会遭遇各种瓶颈。因此,摆脱这一困境的方式之一就是尽可能地获取GPU,而选择合适的地理位置可能会缓解GPU紧张的问题。

51a082ad519addcbd6113747fa80f47d.png

因此,我们的业务范围很快就覆盖了全球多个地区。需要注意的是,上图实际上是Azure公共区域的地图,我们是基于Microsoft Azure进行部署的,但仅限于图中所示的部分地区。为应对业务范围的扩展,团队不得不迅速熟悉Terraform和集群管理,以便快速创建和管理这些部署。尽管从一开始就实现多区域和多集群的部署极具挑战,但由于GPU资源紧缺,这是不可避免的。

此外,需要注意的是,响应时间主要由GPU逐个输出词元的时间所决定。因此,为提高整体响应速度,关键是增加服务器集群的容量并优化,而不是单纯追求服务器与用户离得近(以减少网络延迟)

最后一个主要挑战是,无法迅速扩展服务器集群,没有更多GPU资源可供自动扩展。这意味着,当ChatGPT显示“已满载”页面时,团队无法手动或自动地增加服务器来应对增加的用户流量。这也导致由于GPU容量不足,我们不得不推迟一些发布计划和产品功能的推出。

我认为,人们可能没有充分意识到,如果GPU不受限地供应,ChatGPT所取得的增长可能会更大、更快。

因此,在解决GPU带来的挑战时,我们学到了一些关键教训。

首先,我们需要明确这是一个系统工程挑战,而不仅仅是纯粹的研究项目,这至关重要。我们优化键值(KV)缓存、全球数据中心战略以及产品需求的能力非常重要,团队能够跨越整个技术栈也是关键所在。

其次,适应性地考虑系统的约束条件十分关键。在OpenAI之前,我习惯于观察只有80%的CPU利用率指标就自动扩展到一个无限大的云平台,并优先考虑边缘计算,但在这里,这一切都不适用。此外,每当模型架构发生变化、提出新的推理想法或产品决策发生变化时,我们都需要灵活适应并重新运行这些计算。

最后,深入研究的重要性。对于我们而言,最底层的实现细节至关重要。尽管我愿意将其视为一个黑匣子,接收文本输入,然后在另一端输出更智能的文本,但实际上,更多人深入研究这个“匣子”的细节,我们就能取得更大进步。随着GPT-5、微调、代码执行和更大规模等问题不断升级,这些挑战只会变得更加复杂。尽管我谈论这些问题时是以ChatGPT为背景,但我预计这些经验在未来仍将继续发挥作用。

2

团队建设

我想讨论的第二个经验教训是,在努力保持灵活性和快速推进的同时扩大团队。

在ChatGPT项目发布时,应用工程团队包括我在内总共大约有30人。现在,10个月后,团队规模已增长到近100人。众所周知,OpenAI在团队规模增长方面一直存在着高度的紧张关系。我们的首席执行官Sam Altman一直坚信高人才密度,并致力于以尽可能小的团队完成尽可能多的工作。因此,我们一直在努力保持团队的小规模,以保持快速迭代、充满朝气的实干文化。

然而,随着产品规模的扩大,我意识到扩大团队规模的迫切性。在其他地方可能需要数百人的部门,在我们团队却只有几个人在支撑,而且有时甚至有人在度假。我认为,我们做过的最有影响力的事情之一就是将自己组织起来,以捕捉高度整合、快速发展的初创企业最初阶段的本质。

2d73e809b8a8c3db564464f54cd9a4c0.png

ChatGPT背后的团队看起来像一家刚成立10个月的初创公司。在ChatGPT项目刚开始时,团队有意识地选择了一个全新的代码仓库、新的集群和轻量级的安全控制。我们还确保研究团队与产品开发周期紧密结合,对我们来说,DERP(设计、工程、研究和产品)应该集中在一个团队中。

如今,团队的运行节奏、流程状况、沟通效率以及每个人的责任水平都更加贴近我们对成立一年的初创公司的预期。此外,OpenAI还有一点与众不同,当初大家都在同一个办公室里共同努力,实际上,这在混乱的初创时期起到了一定作用。

实际上,ChatGPT并非OpenAI第一次采用这种合作模式的项目。大约三年前,当应用团队研究API时,我们也做了类似的事。因此,在整个组织中,尽管ChatGPT项目感觉像是一个嵌套在有三年历史初创公司中的10个月大的创业项目,但这些都嵌套在有八年历史的OpenAI研究实验室中。随着新的产品类别不断涌现,我们预计将尝试并继续采用这种分形初创公司模式(fractal startup pattern)。


如今,这一策略要取得成功确实存在一定挑战,我们承担了部分技术债务和重复的情况,现在开始加大对泛工程平台团队的投资,以提前应对其中的部分挑战。

我们还存在人才扩张的严重倾向,因为OpenAI一直推崇小团队理念,希望充分利用其优势,但我们也开始面临规模和安全相关问题,这些问题需要定制化程度更高和更高效的解决方案。

实际上,我们确实需要一个极具抱负的团队和一个非常坚定的使命来帮助保持每个人都朝着同一个方向前进。


OpenAI的首要使命是实现一个安全且对齐的通用人工智能(AGI),这使得我们需要权衡许多不同的愿景。我们的确会扪心自问,这是否使我们更接近实现安全且对齐的AGI,以指导未来的发展。

与此同时,像这样的小型初创公司具有巨大的优势。当拥有高度的所有权、低依赖性和简化的流程时,工作更容易完成。初创公司更能保持一种斗志旺盛的环境,我们的迭代周期可以非常短。

同时,在这一领域中,产品问题与研究问题密切相关。我们可以深入思考一下,使创业公司保持高效率的因素,并观察如何在结构上融入这些因素。这并非毫无代价,但我们认为,当高效率成为我们的关键优势之一时,这种权衡是值得的。

3

滥用问题和安全挑战

最后,系统滥用和即将到来的人工智能安全问题是我们面临的主要挑战。在OpenAI,AI安全、API滥用和产品是密不可分的。防止AI用于大规模的虚假信息宣传、放大互联网上最糟糕的部分或导致其他形式的伤害是我们的核心使命。确保采取适当的安全措施一直是项目发布和其他行动的主要阻碍因素。

尽管OpenAI采取了一系列的安全措施来防止系统滥用,但是,滥用者往往能够迅速适应并找到新的方式来滥用系统。特别是当滥用行为可以带来经济利益时,这种适应性尤为明显。

我想给大家分享一个故事,关于一群人对ChatGPT的API进行逆向工程,以及我们对此所采取的措施。一位工程师发现我们的端点上出现了一些与标准客户端签名不完全匹配的流量。当时,相比API流量,ChatGPT应用程序在某种程度上拥有特权。因此,通过ChatGPT获取访问权限的滥用者可以比普通API做更多的事。如果我们直接封锁这些攻击者,他们会立即察觉,并做出调整。

31f6322ba8517770799deb41a2a6a393.png

团队中的一位成员提出了一个想法,我们采纳了该想法,并立即采取了相应行动。事实证明,我们的安全团队一直在积极监控这些滥用者的活动。他们加入了滥用行为发生的Discord社区,以便能够从滥用者的角度观察和了解情况。

攻击者很快就察觉到了异常,他们的山寨API不再有任何意义。但他们很快弄清了状况,不仅如此,甚至给了我们下次更新的建议。随着时间推移,我们发现了更多试图滥用API的人,尽管他们的能力不及ChatGPT。

因此,虽然ChatGPT可能只是今天一个有趣的例子,但随着模型变得更加强大,如果落入错误的人手中,可能造成更大的危害。我们需要以指数级速度增加对滥用行为的警惕性。尽管如此,仅靠团队成员、研究人员和红队成员是不可能识别所有可能的滥用和误用途径。这就是为什么我们相信逐步与现实世界进行有限的接触是识别和解决安全问题最重要的方式之一。

与真实用户进行早期和频繁的迭代是产品开发中一种常见的做法。在开发ChatGPT时,我们也采用了这种理念。不过,我需要指出的是,一次性向所有人发布ChatGPT,是因为我们花了数年时间在更受控制的环境中逐渐适应了这些模型。而对于较新、风险较高的产品,我们将在识别和缓解风险的过程中经历几个阶段后才会推出。

此外,我们还相信随着风险的增加,需要根据情况调整这一策略。波音公司之所以不像Facebook那样快速地发布产品,是有其原因的,而我们今天的关注点与明天的关注点将会有很大不同。

4

结语

ChatGPT的故事只是刚刚开始,我预计今天我谈到的这三个挑战将以新的形式持续存在。虽然随着芯片供应链的迎头赶上,GPU可能会变得更加丰富,但随着消耗越来越大的预算,更加高效地利用GPU的需求也将不断增长。

GPT-5和其他产品的发布,对计算资源的需求将变得更加紧迫。这个层面会考虑到不同的扩展因素,因为GPU的RAM和高带宽互连与每秒能够进行多少次乘法运算同等重要。

保持团队中初创企业的本质一直是我们保持灵活性的唯一方式。虽然这涉及到权衡,但我们已经多次重复这样的努力。随着我们的成长,这将变得更加具有挑战性。同时,随着新的挑战出现,OpenAI在企业文化方面的努力也必须不断调整,以延续这种精神。

最后,OpenAI一直面临一些意想不到的挑战,尤其是那些精明滥用者的挑战。虽然这些挑战并不总是令人愉快,但有时我们也能从中有所收获。因此,尽管前文提到的CatGPT可以缓解先前的滥用问题,但在未来,滥用安全和对齐挑战将更加严峻,如果这些问题变得更为复杂,我们将需要投入更多努力。安全任务是一个核心问题,我们将持续重点关注这一领域。

关于ChatGPT的幕后故事还有很多,至少和那些为实现这一切作出贡献的人一样多。即使这些故事的一小部分,也代表了数十位工作人员的辛勤努力。非常有幸与你分享他们的工作。

其他人都在看

  • GPU架构与计算入门指南

  • 为什么开源大模型终将胜出

  • 可复现的语言大模型推理性能指标

  • OpenAI:“驾驭”超级智能的四年计划

  • 语言大模型推理性能工程:最佳实践

  • OpenAI首席科学家:直面AGI的可能性

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

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

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

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

相关文章

opencv-图像金字塔

图像金字塔是一种图像处理技术,它通过不断降低图像的分辨率,形成一系列图像。金字塔分为两种类型:高斯金字塔和拉普拉斯金字塔。 高斯金字塔(Gaussian Pyramid): 高斯金字塔是通过使用高斯滤波和降采样&a…

专业远程控制如何塑造安全体系?向日葵“全流程安全闭环”解析

安全是远程控制的重中之重,作为国民级远程控制品牌,向日葵远程控制就极为注重安全远控服务的塑造。近期向日葵发布了以安全和核心的新版“向日葵15”以及同步发布《贝锐向日葵远控安全标准白皮书》(下简称《白皮书》),…

逸学java【初级菜鸟篇】9.3 Stream流

hi,我是逸尘,一起学java吧 得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念(就是都基本使用lambda的形式)。 流处理 我们首先理解什么是流处理,它类似于sql语句,可以执行非常复…

【开源】基于Vue和SpringBoot的智能教学资源库系统

项目编号: S 050 ,文末获取源码。 \color{red}{项目编号:S050,文末获取源码。} 项目编号:S050,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课…

原理Redis-SkipList

SkipList ZipList和QuickList的共同特点是节省内存。在遍历元素时,只能从头到尾或从尾到头,所以在查找头尾元素性能还是不错的,但是中间元素查询的性能就会差。 **SkipList(跳表)**首先是链表,但与传统链表…

【算法】链表-20231123

这里写目录标题 一、19. 删除链表的倒数第 N 个结点二、21. 合并两个有序链表三、24. 两两交换链表中的节点 一、19. 删除链表的倒数第 N 个结点 提示 中等 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 输入:head [1,…

在PyCharm中正确设置Python项目

大家好,在Mac和Linux都支持Python,但许多开发者发现正确设置Python项目很困难。本文汇总了多平台中运行Python的方法,提高编程的效率,如下所示: 使用命令行运行Python。 在PyCharm(免费社区版)…

【技巧】PDF文件如何编辑?

日常办公中我们经常会用到PDF文件,PDF具备很好的兼容性、稳定性及安全性,但却不容易编辑,那PDF要如何编辑呢? 如果打开PDF文件就只是只读的性质,说明文件是在线打开,或者通过PDF阅读器打开的,这…

Navmesh 寻路

用cocos2dx引擎简单实现了一下navmesh的多边形划分,然后基于划分多边形的a*寻路。以及路径拐点优化算法 用cocos主要是方便使用一些渲染接口和定时器。重点是实现的原理。 首先画了一个带有孔洞的多边形 //多边形的顶点数据Vec2(100, 100),Vec2(300, 200),Vec2(50…

高防服务器的工作原理

在当今互联网时代,网络安全问题日益突出,各种网络攻击层出不穷。为了保护企业的网络安全,高防服务器应运而生。那么,你是否了解高防服务器的工作原理呢?下面就让我们一起来探索一下。 高防服务器是一种能够有效抵御各种…

语音识别入门——常用软件及python运用

工具以及使用到的库 ffmpegsoxaudacitypydubscipylibrosapyAudioAnalysisplotly 本文分为两个部分: P1:如何使用ffmpeg和sox处理音频文件 P2:如何编程处理音频文件并执行基本处理 P1 处理语音数据——命令行方式 格式转换 ffmpeg -i video…

shell 脚本循环语句

目录 循环 echo 命令 for 循环次数 for 第二种格式 命令举例 while 脚本举例 双重循环及跳出循环 脚本举例 更改文件和目录的后缀名的脚本 画三角形的脚本 乘法口诀表的脚本 面试例题 补充命令 let 命令 循环 —— 一定要有跳出循环的条件 已知循环的次数 未知…

英语六级范文模板

目录 现象解释 观点选择 问题解决 六级只考议论文,我们将从现象解释,观点选择,问题解决三个角度给出范文: 多次使用的句子,就可以作为模板记下来~~ 现象解释 In the contemporary world, the ability to meet cha…

SQLite3

数据库简介 常用的数据库 大型数据库:Oracle 中型数据库:Server 是微软开发的数据库产品,主要支持 windows 平台。 小型数据库:mySQL 是一个小型关系型数据库管理系统,开放源码 。(嵌入式不需要存储太多数据。) SQL…

Seaborn画图颜色和给定的RGB hex code不一致

使用以下代码画图: import seaborn as sns import matplotlib.pyplot as plt plt.figure(dpi150) x [A,B,C,D] y [164, 86, 126, 53] sns.barplot(xx, yy, color#3a923a) 得到的颜色如下图所示: 这是因为seaborn默认降低了颜色的饱和度,即…

UDP中connect的作用

udpclientNoConnect.c里边的内容如下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<arpa/inet.h> #include<sys/socket.h> #include <errno.h> #include <syslog.h…

基于 Flink CDC 打造企业级实时数据集成方案

本文整理自Flink数据通道的Flink负责人、Flink CDC开源社区的负责人、Apache Flink社区的PMC成员徐榜江在云栖大会开源大数据专场的分享。本篇内容主要分为四部分&#xff1a; CDC 数据实时集成的挑战Flink CDC 核心技术解读基于 Flink CDC 的企业级实时数据集成方案实时数据集…

独立版求职招聘平台小程序开发

小程序招聘系统开发 我们开发了一款高效、便捷的互联网招聘平台。在这里&#xff0c;可以轻松实现企业入驻、职位发布、在线求职、精准匹配职位和人才&#xff0c;以及参与招聘会等功能。目标是为求职者和企业搭建一个连接彼此的桥梁&#xff0c;帮助您更快地找到满意的工作&…

SpringMVC(五)SpringMVC的视图

SpringMVC中的视图是View接口&#xff0c;视图的作用渲染数据&#xff0c;将模型Model中的数据展示给用户 SpringMVC视图的种类很多&#xff0c;默认有转发视图(InternalResourceView)和重定向视图(RedirectView) 当工程引入jstl的依赖&#xff0c;转发视图会自动转换为JstlV…

深度学习 loss 是nan的可能原因

1 loss 损失值非常大&#xff0c;超过了浮点数的范围&#xff0c;所以表示为overflow 状态下的男。 解决办法&#xff1a; 减小学习率&#xff0c;观察loss值是不是还是nan 在将数据输入模型前&#xff0c;进行恰当的归一化 缩放 2 loss 的计算中存在除以0&#xff0c; log(0…