大模型浪潮下的平台、框架、AI编译器和芯片架构丨2023智源大会精彩回顾

您所在的位置:网站首页 编译器技术 大模型浪潮下的平台、框架、AI编译器和芯片架构丨2023智源大会精彩回顾

大模型浪潮下的平台、框架、AI编译器和芯片架构丨2023智源大会精彩回顾

2023-11-12 07:23| 来源: 网络整理| 查看: 265

导读

在大模型时代,应该如何组织

A

I

系统使其能力与市场需求对齐,是底层的

A

I

工程师需要不断思考和探讨的话题。围绕这一问题,在

2

023

智源大会

A

I

系统分论坛上,从事

A

I

框架开发、芯片研发和

A

I

编译器优化的专

家汇聚在一起,共同探讨如何为打造更具魅力的人工智能系统赋能。

与会嘉宾

Albert Cohen丨Research Scientist, Google

吴芃

丨Engineering Manager, PyTorch, Meta

Michael Gschwind

丨Director,Meta platforms

Jun Gong

丨ML Tech Lead,Anyscale

白童心

丨智源研究院AI编译器负责人

郭崎

丨中国科学院计算技术研究所研究员

田燕

丨智源研究院AI系统平台研发负责人

赖俊杰

丨NVIDIA中国区工程和解决方案高级总监

Making the Most of ML Hardware

Albert Cohen丨Research Scientist, Google

在大模型时代,如果期望获得优异的性能必须要考虑到矢量化的缓存和优化。机器学习的工作负担,使得并行化无处不在。如果合理地引导有效的资源灵活地适配复杂的任务,是一个至关重要的问题。

模型必须依靠特定的算子优化,才能在合适的硬件上发挥应有的性能。编译器的作用是将模型和数据的潜力翻译到硬件上,以获得最佳的性能表达。可以想见,如果没有编译器,那么即使进行非常简单的运算,都需要考虑底层,这是非常低效的。编译器的作用,就是解放AI工程师不再从事底层的低级别优化,而是专注于算法的开发迭代。

AI编译器的开发涉及到内存接口的调用。设计者需要考虑如何避免数据在内存之间的往返,或者设备和主机之间的跨越,才能实现计算和运行效率的最大化。机器学习算法的编译工作,需要引入并使用越来越多的机器学习计算,来帮助底层逻辑寻优。

BLIS方法本质上是勾勒出矩阵乘法在任何加速器上的实现方式。开发者需要将计算分解到几个切片上,调用规则循环和矢量指令的微内核,再慢慢增加封闭循环,以反映内存层次结构。

Cohen表示,他参与智源大会的原因也是希望在全球范围内寻求合作,期待与志同道合的朋友们一起,将世界上最为先进的机器学习技术嵌入到人工智能编译器中。

PyTorch 2.0

吴芃丨Engineering Manager, PyTorch, Meta

作为一个开源框架,PyTorch关注的是硬件厂商如何将PyTorch集成到各自的硬件上的问题。让PyTorch2.0更多地关注硬件不是出于商业思维,而是为了加速模型的训练和推理。因此在发布之初,创作团队就急切地希望得到用户体验,从而提高PyTorch在编译器层面上的优化水平。

在研发之初,团队将这套框架的易用性放在第一位,其理念就是机器学习需要迎合人类的需要。PyTorch是极少数的采用非图形模式的代表,通过与供应商的密切合作,在性能方面进行补偿,PyTorch在整个AI模型的开发中取得了巨大的成功。由于PyTorch的灵活性,使得其难以编译和引入图模式,研究人员将其引入以后,极大地提升了开发者的编译效率。

2.0版本的发布,是基于真正的技术创新,是属于TorchDynamo的时刻。这是一个开箱即用的图像捕获器,它的出现意味着这项繁重的工作可以从人类的双手中解放出来。

吴芃表示,自从2.0版本发布以来,已经有很多供应商主动寻求合作,几乎所有的后端编译器都在尝试集成。最后,对于大家关心的引入图以后是否会牺牲后端编译器性能这一问题,吴芃也透露,基于补偿和融合优化,PyTorch在基准测试中有了广泛的性能提升。

PyTorch 2.0

custom-built for the era of Generative AI

Michael Gschwind Director,Meta platforms

当前,AIGC在视觉、语言和语音等领域大放异彩。其中,最常见的AI大模型是大语言模型,能够生成类似人类的文本反应,其在理解人类自然语言方面展现了难以置信的能力。

大模型的训练是极其消耗分布式计算基础设施的,一个合理的编译器可以极大地加速模型的落地速度。PyTorch以其灵巧的设计,吸引着开发者在其之上进行创作。但是,灵活性是以牺牲性能为代价的,通过加速路径架构推理,捕捉常见的推理模式,可以极大地加速Torch在硬件端侧的运行效率。Meta近些年来,一直致力于从算法侧的角度开发利用更为节省计算资源的常见深度学习算子。

由Meta开发的灵活通用组件集成于PyTorch中,提供广泛的选项和灵活性。这些组件既为了提升训练效率,也为了提升内存效率,为研究人员提供高速的迭代工具。在必要时,它们可以使用自己的cuda内核,而在其它情况下则派遣给开源社区中的BLIS等库。

开源框架的优势是即插即用,可以吸引来自全世界的同行共同维护和创作。FAIR的巴黎实验室致力于开发实现高效内存通信的框架,进一步加速大模型的优化速度。在实际的大语言模型训练速度测试中,Torch的编译大大降低了训练时间。

最后,Gschwind表示,2.0版本的PyTorch提供了可移植的接口服务,允许模型利用新的改进,在未来的设备上持续迭代。

Ray: Distributed Compute Framework 

For Scalable AI

Jun Gong  ML Tech Lead,Anyscale

机器学习的负载正在以指数形式上升,这意味着需要更好的端侧优化方法为深度学习的训练助力。强化学习的本质是在模拟的物理世界中随机探索,Anyscale的强化学习库是建议在Ray之上的。后来,有用户发现,这个框架似乎不仅对强化学习有用,也同样适用于其他的分布式计算。

在实际的模型训练中,传统的框架往往会将数据一次性地加载进内存,这是一种显著的资源浪费。Ray框架的不同之处在于,在数据集和计算资源之间寻求一个平衡,根据这个平衡将数据按比例加载到硬件中,这就是分布式的意义。

Ray的效率大约是Spark集群的3倍,这背后的根源在于Spark在Python和Java之间反复切换,拉低了效率。因此,当试图将多个步骤融合在一起的时候,就会触及GPU的瓶颈,连同CPU的执行效率也会被降低。

最后,Jun Gong表示Ray是完全开源的,欢迎所有人参与到开源社区的贡献中。

面向多种异构算力的AI编译器技术初探

白童心丨智源研究院AI编译器负责人

目前,国产GPU面向上游主流深度学习框架的适配能力偏弱,因此开发一款合适的编译器丝滑地连接二者至关重要。国内的痛点主要集中在:多框架接入堵塞、编译器兼容和面向后端的优化能力。

厂商对于前端适配存在一定的顾虑,对编译器的泛化能力有着很高的要求,而后端编译器的开发又是极富挑战的。面向迁移性和拓展性,主要的技术挑战是如何设计更好的硬件抽象。在科技部的支持下,智源计划在三年以内构建出统一中立的AI编译器设施,使之成为AI产品落地的平台并为大模型的开发赋能。

智源设计的编译器框架面向PyTorch 2.0,前端部分与多个AI框架相适配。

FlagIR的技术路线是轻量级、层次式和模块化的IR设计,BSIL借鉴MLIR的层次式和模块化特征,单个OP通过Payload嵌套不同层次的操作,BSIL的主体由一组张量模式构成,其抽象层次低于Aten,TOSA,Stable HLO,略高于LinAlg.general,张量模式在计算复杂性和IO复杂性上有明显代表性,因此保留张量模式对代码生成时性能优化的指导意义。

最后,白童心博士表示,AI编译器的探索还处于初步阶段,未来希望与业内同行一道,共同合作打造产业生态,也进一步探讨这一领域的发展方向。

面向大模型的算子自动调优技术

郭崎丨中国科学院计算技术研究所研究员

在当下纷繁复杂的大模型竞相涌现之际,如何充分发挥专用

AI架构的

计算

潜力是

AI系统面临的关键挑战之一。高性能算子库是连接算法模型和底层硬件算力的重要桥梁,决定了

算法

模型

是否能高效运行。现在的高性能算子库主要依赖专家手工的优化,

要求开发人员对上层算法

编程模型、底层硬件架构都

深刻的理解。这导致了算子库的开发周期和难度非常大,难以满足目前深度学习应用快速部署的实际需求。

目前

大模型的

算子

自动调优技术

面临

一些

挑战,尤其是在一些领域专用架构上还有很大的调优空间。郭崎团队发现,

由于

领域

专用

架构

存在大量的约束

导致

搜索空间质量

很差,

其中

有效解

比例非常低

针对该问题

,通过

预定

的规则对程序进行分析,自动生成带有精确约束的搜索空间

。此外,大模型的算子自动调优还面临编译

时间过长

的问题。针对该问题,

团队通过

基于主动学习的

预训练

方式

高效

构建出

代价模型,在编译搜索过程中利用其对

调优策略

表现进行

准确

预测

,加速搜索过程

最后,郭崎表示,算子调优技术是

提升高性能算子库开发与

运行

效率的

有效

手段。随着深度学习大模型与领域专用硬件的快速发展,

如何提升

面向大模型

的算子调优

性能和速度

是十分值得业内同行们关注的方向。

九鼎:支撑大模型训练及芯片架构多样性

田燕丨智源研究院AI系统平台研发负责人

人工智能发展史上出现的三次浪潮,每一次都是数据算法和算力的共同发展。数据和算力的发展支撑了模型算法的发展,同时也决定了模型算法能力的天花板。他们相互促进也彼此制约。

智源希望打造的AI基础设施可以支撑大模型的各种任务,极致优化算力资源的使用效率,推高模型算法能力的天花板,同时,基础平台要能支撑大模型新的开发范式,提升大模型研发和应用的效率。

构建支撑大模型新开发范式的AI基础平台,要用发展的眼光看问题,保持快速灵活地迭代的能力,根据业务需求因地制宜解决问题。在构建过程中,要重视模型、训练任务、数据、生产环境间的血缘关系,能支撑大模型的反复评测对比和训练任务调整。

训练效率优化本身涉及到资源管理和任务调度与AI框架、模型算法的协同、并行优化方法、算子优化、存储网络优化等等,智源的九鼎平台构建了训练性能的采样和可视化分析能力,同时集成了自动并行优化方案,可以对硬件环境和模型训练任务采样,自动搜索生成并行训练策略,二者可以有效地支撑训练效率持续优化。

此外,九鼎平台也支持在不同类型的异构芯片(昆仑芯、寒武纪等)上运行模型训练推理任务。在异构芯片方面,智源联合多家硬件和框架团队,共建面向芯片的开源评测软件FlagPerf,该开源项目是 FlagOpen 大模型开源体系的一部分。

最后,田燕总结,基础设施和上层业务场景是个相互促进螺旋上升演进的关系,所以做基础设施,要关注的新的训练方法,新的模型结构和新的应用场景,会对底层带来什么样的影响和挑战,从这里出发,来思考底层如何支撑上层探索能力边界和提升效率。从基础设施的技术视角看,我们需要关注和思考这里每个象限会向哪个方向发展,如何协同支撑上层。这是System for AI的部分。最后,AI for AI system也会反过来给这些领域赋能,同样也是值得关注的。

基于NVIDIA Megatron

更高效地构建大语言模型训练系统

赖俊杰丨NVIDIA中国区工程和解决方案高级总监

大模型时代一次模型训练往往需要消耗大量的

GPU

计算资源,在工业界中稳定的大模型训练对于成本控制至关重要。然而,大模型训练往往涉及到复杂的技术能力栈,训练过程中一旦架构、通讯、存储、数据、算法等等任一方面出现问题,都会导致无效训练以及资源的浪费。

NVIDIA

开发的基于

PyTorch

的训练框架

- Megatron

NeMo Framework

的开创性技术,能够提高训练速度且可扩展性强,使得大模型的训练更加稳定,部署更加容易,具有更短的时间成本和更快的结果,大大提升了模型的开发效率。

底层硬件是基石,为了开发者把硬件用起来并真正解决问题,需要软件的协同。NVIDIA NeMo Framework的优化方法,包括其高效的并行策略、内存优化技术等。其中高效的模型并行技术是大模型时代模型训练不可或缺的选择,最新的NeMo Framework还集成序列并行与选择性激活值重新计算等技术,帮助解决显存限制等问题,从而降低大模型训练的成本,提升效率。

- 点击“查看原文” ,观看完整大会视频回放 -

具身智能与强化学习前沿进展丨2023智源大会精彩回顾

大模型与人类的未来丨基于认知神经科学的大模型论坛精彩回顾

.rich_media_content{color:#000000e5;font-size:17px;font-size:var(--articleFontsize);overflow:hidden;text-align:justify}.rich_media_content{color:#ffffffa6;color:var(--weui-FG-HALF)}.rich_media_content{position:relative;z-index:0}.data_color_scheme_dark{--weui-ORANGERED: #ff6146;--weui-BG-0: #111;--weui-BG-1: #1e1e1e;--weui-BG-2: #191919;--weui-BG-3: #202020;--weui-BG-4: #404040;--weui-BG-5: #2c2c2c;--weui-FG-0: rgba(255, 255, 255, .8);--weui-FG-HALF: rgba(255, 255, 255, .6);--weui-FG-1: rgba(255, 255, 255, .5);--weui-FG-2: rgba(255, 255, 255, .3);--weui-FG-3: rgba(255, 255, 255, .1);--weui-FG-4: rgba(255, 255, 255, .15);--weui-FG-5: rgba(255, 255, 255, .1);--weui-RED: #fa5151;--weui-REDORANGE: #ff6146;--weui-ORANGE: #c87d2f;--weui-YELLOW: #cc9c00;--weui-GREEN: #74a800;--weui-LIGHTGREEN: #3eb575;--weui-BRAND: #07c160;--weui-BLUE: #10aeff;--weui-INDIGO: #1196ff;--weui-PURPLE: #8183ff;--weui-WHITE: rgba(255, 255, 255, .8);--weui-LINK: #7d90a9;--weui-TEXTGREEN: #259c5c;--weui-FG: #fff;--weui-BG: #000;--weui-TAG-TEXT-RED: rgba(250, 81, 81, .6);--weui-TAG-BACKGROUND-RED: rgba(250, 81, 81, .1);--weui-TAG-TEXT-ORANGE: rgba(250, 157, 59, .6);--weui-TAG-BACKGROUND-ORANGE: rgba(250, 157, 59, .1);--weui-TAG-TEXT-GREEN: rgba(6, 174, 86, .6);--weui-TAG-BACKGROUND-GREEN: rgba(6, 174, 86, .1);--weui-TAG-TEXT-BLUE: rgba(16, 174, 255, .6);--weui-TAG-BACKGROUND-BLUE: rgba(16, 174, 255, .1);--weui-TAG-TEXT-BLACK: rgba(255, 255, 255, .5);--weui-TAG-BACKGROUND-BLACK: rgba(255, 255, 255, .05)}.data_color_scheme_dark{--weui-BTN-ACTIVE-MASK: rgba(255, 255, 255, .1)}.data_color_scheme_dark{--weui-BTN-DEFAULT-ACTIVE-BG: rgba(255, 255, 255, .126)}.data_color_scheme_dark{--weui-DIALOG-LINE-COLOR: rgba(255, 255, 255, .1)}.data_color_scheme_dark{--weui-BG-COLOR-ACTIVE: #373737}.data_color_scheme_dark{--weui-BG-6: rgba(255, 255, 255, .1);--weui-ACTIVE-MASK: rgba(255, 255, 255, .1)}.wxw-img{vertical-align:bottom}.h5_image_link{position:relative;display:inline-block;vertical-align:bottom;-webkit-user-select:none;-ms-user-select:none;user-select:none}.h5_image_link:before,.h5_image_link:after{content:"";position:absolute;top:8px;right:8px;width:20px;height:20px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;z-index:1}.h5_image_link:before{background:#5f5f5f80;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:100%}.h5_image_link:after{-webkit-mask:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2Jz4gIDxnIGZpbGw9JyM1NzZCOTUnPiAgICA8cGF0aCBkPSdNOC41NjYgNy40MzRsLTEuOTgtMS45OC0uNzU0Ljc1NSAxLjI1NyAxLjI1N0gyLjMzM3YxLjA2N0g3LjA5TDUuODMyIDkuNzlsLjc1NC43NTUgMS45OC0xLjk4YS44LjggMCAwIDAgMC0xLjEzMnonLz4gICAgPHBhdGggZD0nTTQuMzMzIDExLjhIMy4yNjd2MS4wNjdhLjguOCAwIDAgMCAuNzk3LjhoNy44MDVhLjguOCAwIDAgMCAuNzk4LS43OThWMy4xMzFhLjc5OS43OTkgMCAwIDAtLjc5OC0uNzk4SDQuMDY0YS44LjggMCAwIDAtLjc5Ny44VjQuMmgxLjA2NnYtLjhIMTEuNnY5LjJINC4zMzN2LS44eicvPiAgPC9nPjwvc3ZnPg==) no-repeat 50% 50%;mask:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2Jz4gIDxnIGZpbGw9JyM1NzZCOTUnPiAgICA8cGF0aCBkPSdNOC41NjYgNy40MzRsLTEuOTgtMS45OC0uNzU0Ljc1NSAxLjI1NyAxLjI1N0gyLjMzM3YxLjA2N0g3LjA5TDUuODMyIDkuNzlsLjc1NC43NTUgMS45OC0xLjk4YS44LjggMCAwIDAgMC0xLjEzMnonLz4gICAgPHBhdGggZD0nTTQuMzMzIDExLjhIMy4yNjd2MS4wNjdhLjguOCAwIDAgMCAuNzk3LjhoNy44MDVhLjguOCAwIDAgMCAuNzk4LS43OThWMy4xMzFhLjc5OS43OTkgMCAwIDAtLjc5OC0uNzk4SDQuMDY0YS44LjggMCAwIDAtLjc5Ny44VjQuMmgxLjA2NnYtLjhIMTEuNnY5LjJINC4zMzN2LS44eicvPiAgPC9nPjwvc3ZnPg==) no-repeat 50% 50%;-webkit-mask-size:14px;mask-size:14px;background:#fff}.h5_image_link:empty{display:none}body,.wx-root,page{--weui-BTN-HEIGHT: 48;--weui-BTN-HEIGHT-MEDIUM: 40;--weui-BTN-HEIGHT-SMALL: 32}.wx-root,body{--weui-BTN-ACTIVE-MASK: rgba(0, 0, 0, .1)}.wx-root,body{--weui-BTN-DEFAULT-ACTIVE-BG: #e6e6e6}.wx-root,body{--weui-DIALOG-LINE-COLOR: rgba(0, 0, 0, .1)}.wx-root,body{--weui-BG-COLOR-ACTIVE: #ececec}body,.wx-root{--weui-FG-1: rgba(0, 0, 0, .55);--weui-ORANGERED: #ff6146;--weui-BG-0: #ededed;--weui-BG-1: #f7f7f7;--weui-BG-2: #fff;--weui-BG-3: #f7f7f7;--weui-BG-4: #4c4c4c;--weui-BG-5: #fff;--weui-FG-0: rgba(0, 0, 0, .9);--weui-FG-HALF: rgba(0, 0, 0, .9);--weui-FG-1: rgba(0, 0, 0, .5);--weui-FG-2: rgba(0, 0, 0, .3);--weui-FG-3: rgba(0, 0, 0, .1);--weui-FG-4: rgba(0, 0, 0, .15);--weui-FG-5: rgba(0, 0, 0, .05);--weui-RED: #fa5151;--weui-REDORANGE: #ff6146;--weui-ORANGE: #fa9d3b;--weui-YELLOW: #ffc300;--weui-GREEN: #91d300;--weui-LIGHTGREEN: #95ec69;--weui-BRAND: #07c160;--weui-BLUE: #10aeff;--weui-INDIGO: #1485ee;--weui-PURPLE: #6467f0;--weui-WHITE: #fff;--weui-LINK: #576b95;--weui-TEXTGREEN: #06ae56;--weui-FG: #000;--weui-BG: #fff;--weui-TAG-TEXT-RED: rgba(250, 81, 81, .6);--weui-TAG-BACKGROUND-RED: rgba(250, 81, 81, .1);--weui-TAG-TEXT-ORANGE: #fa9d3b;--weui-TAG-BACKGROUND-ORANGE: rgba(250, 157, 59, .1);--weui-TAG-TEXT-GREEN: #06ae56;--weui-TAG-BACKGROUND-GREEN: rgba(6, 174, 86, .1);--weui-TAG-TEXT-BLUE: #10aeff;--weui-TAG-BACKGROUND-BLUE: rgba(16, 174, 255, .1);--weui-TAG-TEXT-BLACK: rgba(0, 0, 0, .5);--weui-TAG-BACKGROUND-BLACK: rgba(0, 0, 0, .05)}body,.wx-root{--weui-BG-6: rgba(0, 0, 0, .05);--weui-ACTIVE-MASK: rgba(0, 0, 0, .05)}@media(prefers-color-scheme:dark){.wx-root:not([data-weui-theme=light]),body:not([data-weui-theme=light]){--weui-ORANGERED: #ff6146;--weui-BG-0: #111;--weui-BG-1: #1e1e1e;--weui-BG-2: #191919;--weui-BG-3: #202020;--weui-BG-4: #404040;--weui-BG-5: #2c2c2c;--weui-FG-0: rgba(255, 255, 255, .8);--weui-FG-HALF: rgba(255, 255, 255, .6);--weui-FG-1: rgba(255, 255, 255, .5);--weui-FG-2: rgba(255, 255, 255, .3);--weui-FG-3: rgba(255, 255, 255, .1);--weui-FG-4: rgba(255, 255, 255, .15);--weui-FG-5: rgba(255, 255, 255, .1);--weui-RED: #fa5151;--weui-REDORANGE: #ff6146;--weui-ORANGE: #c87d2f;--weui-YELLOW: #cc9c00;--weui-GREEN: #74a800;--weui-LIGHTGREEN: #3eb575;--weui-BRAND: #07c160;--weui-BLUE: #10aeff;--weui-INDIGO: #1196ff;--weui-PURPLE: #8183ff;--weui-WHITE: rgba(255, 255, 255, .8);--weui-LINK: #7d90a9;--weui-TEXTGREEN: #259c5c;--weui-FG: #fff;--weui-BG: #000;--weui-TAG-TEXT-RED: rgba(250, 81, 81, .6);--weui-TAG-BACKGROUND-RED: rgba(250, 81, 81, .1);--weui-TAG-TEXT-ORANGE: rgba(250, 157, 59, .6);--weui-TAG-BACKGROUND-ORANGE: rgba(250, 157, 59, .1);--weui-TAG-TEXT-GREEN: rgba(6, 174, 86, .6);--weui-TAG-BACKGROUND-GREEN: rgba(6, 174, 86, .1);--weui-TAG-TEXT-BLUE: rgba(16, 174, 255, .6);--weui-TAG-BACKGROUND-BLUE: rgba(16, 174, 255, .1);--weui-TAG-TEXT-BLACK: rgba(255, 255, 255, .5);--weui-TAG-BACKGROUND-BLACK: rgba(255, 255, 255, .05)}}@media(prefers-color-scheme:dark){.wx-root:not([data-weui-theme=light]),body:not([data-weui-theme=light]){--weui-BTN-ACTIVE-MASK: rgba(255, 255, 255, .1)}}@media(prefers-color-scheme:dark){.wx-root:not([data-weui-theme=light]),body:not([data-weui-theme=light]){--weui-BTN-DEFAULT-ACTIVE-BG: rgba(255, 255, 255, .126)}}@media(prefers-color-scheme:dark){.wx-root:not([data-weui-theme=light]),body:not([data-weui-theme=light]){--weui-DIALOG-LINE-COLOR: rgba(255, 255, 255, .1)}}@media(prefers-color-scheme:dark){.wx-root:not([data-weui-theme=light]),body:not([data-weui-theme=light]){--weui-BG-COLOR-ACTIVE: #373737}}@media(prefers-color-scheme:dark){.wx-root:not([data-weui-theme=light]),body:not([data-weui-theme=light]){--weui-BG-6: rgba(255, 255, 255, .1);--weui-ACTIVE-MASK: rgba(255, 255, 255, .1)}}@media(prefers-color-scheme:dark){body:not([data-weui-theme=light]).appmsg_skin_default.rich_media_empty_extra{background-color:#191919}}@media(prefers-color-scheme:dark){body:not([data-weui-theme=light]).my_comment_empty_data{background-color:#111}}.rich_media_content p{clear:both;min-height:1em}td p{margin:0;padding:0}:root{--articleFontsize: 17px}:root{--sab: env(safe-area-inset-bottom)}:root{--wxBorderAvatarRatio: 3}:root{--discussPageGap: 16px}:root{--appmsgPageGap: 20px}@media(prefers-color-scheme:dark){body:not([data-weui-theme=light]) .rich_media_content img:not(.wx_img_placeholder){filter:brightness(.8)}}a{color:#576b95;text-decoration:none;-webkit-tap-highlight-color:#0000}a{color:#7d90a9;color:var(--weui-LINK)}a,button{cursor:pointer}*{margin:0;padding:0}.rich_media_content *{max-width:100%!important;box-sizing:border-box!important;-webkit-box-sizing:border-box!important;word-wrap:break-word!important}

div.autoTypeSetting24psection > p,div.autoTypeSetting24psection > section {margin-bottom: 24px;}



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3