【极速前进】20240422:预训练RHO-1、合成数据CodecLM、网页到HTML数据集、MLLM消融实验MM1、Branch-Train-Mix

news2024/12/26 9:25:32

一、RHO-1:不是所有的token都是必须的

论文地址:https://arxiv.org/pdf/2404.07965.pdf
在这里插入图片描述

1. 不是所有token均相等:token损失值的训练动态

​ 使用来自OpenWebMath的15B token来持续预训练Tinyllama-1B,每1B token保存一个checkpoint。对于每个checkpoint都评估token级别的loss。通过分析token级别loss,发现token的损失值有4种模式:持续高损失值(H->H)、损失值增加(L->H)、损失值下降(H->L)、持续低损失值(L->L)。其中,H->L的token占26%;L->L的token占51%;H->H的token占11%;L->H的token占12%。L->L和H->H的token损失值在训练中方差高,可视化后发现其中包含很多噪音。

​ 综上,训练过程中token的损失值并不像总体损失值那边平滑减少,token损失值之间存在复杂动态。因此,训练过程中选择合适的token,可以稳定训练并提高训练效率

2. 选择性语言建模

​ 整体思路:a. 在高质量数据上训练reference模型;b. 使用该模型对预训练的token评估损失值;c. 选择性训练语言模型,专注在训练模型和reference模型之间高损失值的token。

reference建模。使用高质量数据训练reference模型(RM),训练方式采用标准的交叉熵。token x i x_i xi的损失值计算为:
L ref ( x i ) = − log ⁡ P ( x i ∣ x < i ) \mathcal{L}_{\text{ref}}(x_i)=-\log P(x_i|x_{<i}) \\ Lref(xi)=logP(xix<i)
通过损失值可以使语言模型专注在更具影响力的token上。

选择性预训练。自回归语言模型训练的损失函数为:
L CLM ( θ ) = − 1 N ∑ i = 1 N log ⁡ P ( x i ∣ x < i ; θ ) \mathcal{L}_{\text{CLM}}(\theta)=-\frac{1}{N}\sum_{i=1}^N\log P(x_i|x_{<i};\theta) \\ LCLM(θ)=N1i=1NlogP(xix<i;θ)
其中 θ \theta θ是模型参数, N N N是序列长度, x i x_i xi是序列中第i个token, x < i x_{<i} x<i表示第i个token前的所有token。选择性语言建模重点关注那些与reference模型相比具有高损失值的token。超额损失值 L Δ \mathcal{L}_{\Delta} LΔ的定义为:
L Δ ( x i ) = L θ ( x i ) − L ref ( x i ) \mathcal{L}_{\Delta}(x_i)=\mathcal{L}_{\theta}(x_i)-\mathcal{L}_{\text{ref}}(x_i) \\ LΔ(xi)=Lθ(xi)Lref(xi)
这里引入一个选择比例k%,用于根据超额损失值来确定包含token的比例。选择性token的交叉熵损失值为:
L SLM ( θ ) = − 1 N × k % ∑ i = 1 N I k % ( x i ) ⋅ log ⁡ P ( x i ∣ x < i ; θ ) \mathcal{L}_{\text{SLM}}(\theta)=-\frac{1}{N\times k\%}\sum_{i=1}^N I_{k\%}(x_i)\cdot\log P(x_i|x_{<i};\theta) \\ LSLM(θ)=N×k%1i=1NIk%(xi)logP(xix<i;θ)
其中 N × k % N\times k\% N×k%表示超额损失值落在前k%的token数量。指示函数 I k % ( x i ) I_{k\%}(x_i) Ik%(xi)定义为
I k % ( x i ) = { 1 若 x i 的 L Δ 位于前 k % 0 否则 I_{k\%}(x_i)=\begin{cases} 1&若x_i的\mathcal{L}_{\Delta}位于前k\% \\ 0&否则\\ \end{cases} \\ Ik%(xi)={10xiLΔ位于前k%否则
这可以确定语言建模更多关注最有用的token。

3. 实验结果

Few-shot CoT推理结果。相比直接继续预训练,RHO-1-Math在1B和7B模型上实现16.5%和10.4%的平均few-shot准确率改善。多训练几个epoch能够持续增加few-shot准确率。DeepSeekMath-7B在500Btoken上预训练和RHO-1-7B在15Btoken上的效果相当。

工具集成推理结果。RHO-1-1B和RHO-1-7B在MATH数据集实现了SOTA。

通用预训练结果。相比于直接继续预训练,选择性语言建模(SLM)在15个基准上平均改善幅度为6.8%,这种改善在代码和数学中尤其明显。

二、CodecLM:使用定制合成数据对齐LM

论文地址:https://arxiv.org/pdf/2404.05875.pdf
在这里插入图片描述

1. LLM用作指令编解码器

LLM作为指令元数据编码器。这里编码器的作用是将种子指令 D s = { I i } i = 1 n \mathcal{D}_s=\{I_i\}_{i=1}^n Ds={Ii}i=1n编码为指令元数据。具体来说,元数据包含两个关键因素:用例(use case)和技能(skills)。用例描述了预期的任务(例如:问答或者创意写作),技能则是LLM成功回答指令所需要的知识。通常,每个指令包含单个用例和多个技能。对于每个指令 I i I_i Ii,使用LLM编码器 f s f_s fs抽取对应的用例 u i u_i ui和一组技能 s i s_i si,这样就能拥有一组元数据 M = { ( u i , s i ) } i = 1 n \mathcal{M}=\{(u_i,\textbf{s}_i)\}_{i=1}^n M={(ui,si)}i=1n

LLM作为指令生成解码器。给定元数据 M \mathcal{M} M,通过一种生成和合成范式将其解码为合成指令。

2. 通过Self-Rubrics进行指令合成

​ 研究表明更复杂的指令能够改善对齐效果。常用的方法是人类专家来撰写复杂指令的指导信息,例如添加推理步骤或约束。但是,这种方式无法满足多样化指令的要求,需要为不同的任务量身定制指导信息。

​ Self-Rubrics指导LLM生成用于评估指令复杂度的元评价准则,然后基于这些准则生成一组增强复杂度的动作。对于元数据 ( u i , s i ) (u_i,\textbf{s}_i) (ui,si),对应的生成动作集合为 a i \textbf{a}_i ai。例如,当用例是"商业计划制定"且技能是"市场研究和规划",通用准则"添加推理步骤"就有些不合适。Self-Rubrics则会生成类似于"添加SWOT分析"和"包含市场竞争对手的比较"这样的动作。

​ 在获得动作 { a i } i = 1 n \{\textbf{a}_i\}_{i=1}^n {ai}i=1n后,就可以利用 f s f_s fs将指令复杂化。

3. 通过对比过滤进行指令选择

​ 对比过滤的目标是为LLM f t f_t ft选择更有效的指令。设 N \mathcal{N} N是所有自然语言序列的空间,强LLM为 f s : N → N f_s:\mathcal{N}\rightarrow\mathcal{N} fs:NN,目标LLM为 f t : N → N f_t:\mathcal{N}\rightarrow\mathcal{N} ft:NN,评估函数为 S : N → R S:\mathcal{N}\rightarrow\mathbb{R} S:NR。评估函数使用 f s f_s fs来实现。

​ 给定一个指令 I ∈ N I\in\mathcal{N} IN,获得两个LLM的响应 f s ( I ) f_s(I) fs(I) f t ( I ) f_t(I) ft(I),定义质量差距为 G ( I ) = S ( f s ( I ) ) − S ( f t ( I ) ) G(I)=S(f_s(I))-S(f_t(I)) G(I)=S(fs(I))S(ft(I))。当 ∣ G ( I ) ∣ > θ |G(I)|>\theta G(I)>θ时,要么 f s f_s fs生成的质量高,则将 ( I , f s ( I ) ) (I,f_s(I)) (I,fs(I))添加至最终数据集 D g \mathcal{D}_g Dg;要么 f t f_t ft生成的质量高,则将 ( I , f t ( I ) ) (I,f_t(I)) (I,ft(I))添加至 D g \mathcal{D}_g Dg。若 ∣ G ( I ) ∣ < θ |G(I)|<\theta G(I)<θ,则不使用该数据。

4.实验结果
在这里插入图片描述

三、WebSight数据集:网页截图到HTML转换

论文地址:https://arxiv.org/pdf/2403.09029.pdf

1. 目标

​ 构建一个网页截图到HTML代码的数据集,从而提高VLM将图片转换为网页源代码的能力。

2. 构造过程

​ (1) 生成多样化的网站概念:利用Mistral-7B-Instruct生成数百万个唯一的网站概念和设计。

​ (2) 使用Tailwind CSS而不是传统CSS。

​ (3) 使用代码LLM生成HTML代码:利用Deepseek-Coder-33b-instruct来生成HTML代码。此外,为了解决HTML代码中没有图片的问题,使用了一种基于关键词生成图片的api。经过过滤后,大约留下2百万网页。

​ (4) 截图捕获:使用Playwright来可视化和捕获生成的HTML网页。

3. 使用WebSight微调基础VLM

​ 将网页截图转换为HTML代码的模型需要的能力包括:(1) 描述图像中文本的OCR能力;(2) 对网页中元素排列的空间理解能力;(3) 目标检测能。

​ 模型使用基于Mistral-7B和SigLIP-SO400M构造的基础模型。

4.结果

​ 对于简单的网页转换来说效果还可以并且有一定的泛化能力。

​ 但是,在处理复杂网页布局、过多文本内容或者设计与训练数据有很大不同时,效果会比较差。这也表明该模型并没有完全掌握HTML+Tailwind CSS语法。

四、MM1:来自多模态LLM预训练的方法、分析和洞见

论文地址:https://arxiv.org/pdf/2403.09611.pdf

​ 本文的目标是探索模型架构、数据和训练过程对于多模态LLM(MLLM)的影响。通过对不同组件的消融来验证效果,包括:图像编码器、视觉-语言连接器、预训练数据和语言模型。使用zero-shot和few-shot在各种captioning和VQA任务上进行测试。

1. 模型架构消融

图像编码器消融

​ 大多数MLLM使用CLIP的图像编码器,也有一些工作使用纯视觉自监督模型,例如DINOv2。总的来说,视觉编码器的选择对下游的结果有显著的影响。这里主要是对图像分辨率和图像编码器目标函数进行消融。

​ 视觉编码器的消融结果:图像分辨率影响最大,其次才是模型尺寸和训练数据。此外,对比损失函数的效果往往高于重构的损失函数。

视觉-语言连接器。该组件的目标是将视觉表示转换至LLM空间,消融的组件包括:Average Pooling、Attention Pooling和Convolutional Mapping。

​ 视觉-语言连接器的消融结果:视觉token的数量和图像分辨率最重要,VL连接器类型几乎没有影响。

2. 预训练数据消融

​ 有两种类型的数据常用于训练MLLM:一种是成对文本和图像的captioning数据,另一种是来自于网络的交错图像文本数据。captioning数据中的文本往往与图像高度相关,而交错数据更长但相关度低。

​ 消融结果1:交错数据能改善few-shot和纯文本的能力,captioning数据有益于zero-shot的能力。

​ 消融结果2:纯文本数据有助于few-shot和纯文本的效果。

​ 消融结果3:仔细混合图像和文本数据能够产生最佳的多模态效果且保持文本的性能。

​ 消融结果4:合成数据有助于few-shot的学习。

3. 最终模型

​ 图像编码器:由于分辨率的重要性,使用分辨率为378*378的ViT-H。

​ 视觉-语言连接器:使用144个token的连接器,实际架构选择了C-Abstractor。

​ 数据:45%的交叉图文数据、45%的成对图文数据、10%的纯文本数据。
在这里插入图片描述

4. 监督微调

​ SFT数据遵循LLaVA-1.5和LLaVA-NeXT,并从各个数据集收集了1.45M的SFT样本。

​ 为了支持更高的分辨率,使用了两种方法:(1) 位置插值;(2) 子图分解。

与SOTA相比。MM1-3B-Chat和MM1-7B-Chat超越了所有同尺寸模型。MoE模型都比稠密模型效果好。MM1-30B-Chat在一些任务上优于Emu2-Chat-37B和CogVLM-30B。全面优于LLaVA-NeXT。

分辨率的影响。提升分辨率能够提高效果。

预训练的影响。预训练可以显著改善效果。

SFT后few-shot CoT推理。归功于交错数据,MM1具有few-shot的能力。

五、Branch-Train-MiX

论文地址:https://arxiv.org/pdf/2403.07816.pdf

​ 给定现有的LLM M \mathcal{M} M,目标是提高其在 N N N个专业领域的表现。具体的方式是通过在N个不同的数据集上进行继续预训练 D : = { D 1 , … , D N } \mathcal{D}:=\{D_1,\dots,D_N\} D:={D1,,DN}

1. Branch&Train:并行专家训练

​ 使用种子模型 M \mathcal{M} M进行训练,得到N个专家LLM { M 1 , … , M N } \{\mathcal{M}_1,\dots,\mathcal{M}_N\} {M1,,MN},每个模型 M i \mathcal{M}_i Mi都在对应数据集 D i D_i Di上用相同方法进行预训练。因此,每个专家都是独立于其他专家进行训练的,所以可以进行N路并行训练。

​ 早期的Branch-Train-Merge方法在推理时通过确定领域来选择专家,通常多个专家被选择且最终的输出分布是next token的简单平均。本文的BTX方法会将领域专家合并为单个LLM,然后进一步微调

2. Mix:将独立专家合并为MoE

​ 这里利用MoE的方法合并领域专家模型 M i \mathcal{M}_i Mi。然而,相比于经典方法来混合 M i \mathcal{M}_i Mi的最终输出,这里对Transformer每层都进行一个细粒度的混合。令 FF i l ( x ) \text{FF}_i^l(x) FFil(x)表示第i个专家 M i \mathcal{M}_i Mi的第l层的前馈子层,那么合并后MoE层的计算为:
FF MoE l ( x ) = ∑ i = 1 N g i ( W l x ) FF i l ( x ) \text{FF}_{\text{MoE}}^l(x)=\sum_{i=1}^Ng_i(W_lx)\text{FF}_i^l(x) \\ FFMoEl(x)=i=1Ngi(Wlx)FFil(x)
W l W_l Wl是线性变换层, g g g是路由函数,其通常是稀疏输出并仅连通部分专家。若对应的路由输出为0,可以跳过 FF i l ( x ) \text{FF}_i^l(x) FFil(x)的计算,因此 FF MoE l ( x ) \text{FF}_{\text{MoE}}^l(x) FFMoEl(x)计算要比计算所有领域专家效率高。在本文中,使用Top-K路由,即 g ( W l x ) = SoftMax ( TopK ( W l x ) ) g(W_lx)=\text{SoftMax}(\text{TopK}(W_lx)) g(Wlx)=SoftMax(TopK(Wlx))

​ 对于自注意力子层,通过简单平均权重来合并不同的专业。这种做的原因是自注意力层相比FFN层更不专业化。对于embedding层等也使用权重平均的方式。

​ 这里引入的新参数仅包括路由变换参数 W l W_l Wl,其在整个网络中可以忽略不计。但是,这些参数需要微调。

3. 变体

负载均衡。MoE模型常见的问题是dead experts,即路由永远不激活该专家。这里通过一个额外的损失项来鼓励平等利用。具体来说,
L LB = α N ∑ i = 1 N u i p i 其中 u i = 1 ∣ β ∣ ∑ x ∈ β g i ( W l x ) 且 p i = 1 ∣ β ∣ ∑ x ∈ β Softmax i ( W l x ) \mathcal{L}_{\text{LB}}=\alpha N\sum_{i=1}^N u_i p_i\quad其中u_i=\frac{1}{|\beta|}\sum_{x\in\beta}g_i(W_lx)且p_i=\frac{1}{|\beta|}\sum_{x\in\beta}\text{Softmax}_i(W_lx) \\ LLB=αNi=1Nuipi其中ui=β1xβgi(Wlx)pi=β1xβSoftmaxi(Wlx)
其中 β \beta β是当前数据的batch, α \alpha α是超参数。

路由方法。Switch、Soft routing、Sample Top-1。

拆分专家。MoE层的模块数量与训练的领域数量相当,每个模块对于一个领域。通过简单的将每个领域的FF子层划分为更多的块就能增加专家的数量。给定 N N N个领域,FF的激活尺寸为 d FF d_{\text{FF}} dFF,将FF层划分为 C C C块,每块的维度 d FF / C d_{\text{FF}}/C dFF/C。这样,最终MoE层将有MC个模块。

4. 实验结果

领域专家在特定任务上表现卓越。在代码和数学领域表现明显,其数学专家也能够帮助提升代码能力。但在其他任务上效果下降。

BTX改进了专家擅长的所有任务。BTX训练的模型在所有专家领域都有所改进,且对其他领域效果没有影响。

划分为 C C C块,每块的维度 d FF / C d_{\text{FF}}/C dFF/C。这样,最终MoE层将有MC个模块。

4. 实验结果

领域专家在特定任务上表现卓越。在代码和数学领域表现明显,其数学专家也能够帮助提升代码能力。但在其他任务上效果下降。

BTX改进了专家擅长的所有任务。BTX训练的模型在所有专家领域都有所改进,且对其他领域效果没有影响。

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

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

相关文章

配置nodejs的俩小脚本

介绍&#xff1a;共两个脚本。 脚本1&#xff0c;用来配置环境变量&#xff0c;生成环境变量所需的配置信息&#xff0c;然后自己添加到系统环境变量里去 特别注意&#xff1a;该脚本需要放到nodejs目录下面&#xff0c;如果不是&#xff0c;则无法生成环境变量配置文本内容 另…

【STL概念】

STL STL&#xff08;Standard Template Library),即标准模板库从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件&#xff0…

找不到msvcp140dll,无法继续执行代码的详细解决方法

在我们日常使用计算机进行各类工作任务的过程中&#xff0c;时常会遭遇一些突发的技术问题。比如&#xff0c;有时在运行某个重要程序或应用软件时&#xff0c;系统会突然弹出一个令人困扰的错误提示&#xff1a;“电脑提示找不到msvcp140.dll文件&#xff0c;因此无法继续执行…

Linux CPU 占用率 100% 排查

其他层面要考虑到的地方 mysql&#xff0c;有执行时间特别长的sql、死锁redis雪崩等相关问题并发导出数据量大Java定时器服务业务复杂&#xff0c;比如像每天要更新电商的统计表&#xff0c;每天发送优惠券等业务需要提前计算才能保证业务使用时的流畅性&#xff0c;我这个原因…

【快速上手ESP32(基于ESP-IDFVSCode)】09-Flash存储

ESP32中的Flash 关于ESP32中的Flash&#xff0c;我们需要再回顾一下命名规则。 我用的是立创开发板设计的板子&#xff0c;芯片型号是ESP32S3R8N8&#xff0c;因此可以知道我这块板子有8MB的Flash&#xff0c;大家可以参照着命名规则看看自己有多大的Flash容量。 操作Flash …

学习STM32第十七天

备份域详解 一、简介 在参考手册的电源控制章节&#xff0c;提到了备份域&#xff0c;BKPR是在RTC外设中用到&#xff0c;包含20个备份数据寄存器&#xff08;80字节&#xff09;&#xff0c;备份域包括4KB的备份SRAM&#xff0c;以32位、16位或8位模式寻址&#xff0c;在VBAT…

0.什么是C++(专栏前言)

目录 1.什么是C 2.C的发展史 3.C的重要性 应用&#xff1a; 4.如何学习C 5.关于本专栏 1.什么是C 20世纪80年代&#xff0c;计算机界提出oop(object oriented programming:面向对象&#xff09;思想&#xff0c;支持面向对象的程序设计应运而生。 1982年&#xff0c;本…

去雾笔记-知识蒸馏

知识蒸馏&#xff08;Knowledge distillation&#xff09;是一种模型压缩技术&#xff0c;旨在将一个复杂的模型&#xff08;通常称为“教师模型”&#xff09;的知识转移给一个较简单的模型&#xff08;通常称为“学生模型”&#xff09;&#xff0c;以降低模型的计算复杂度和…

针对窗口数量多导致窗口大小显示受限制的问题,使用滚动条控制窗口

建议&#xff1a;首先观察结果展示&#xff0c;判断是否可以满足你的需求。 目录 1. 问题分析 2. 解决方案 2.1 界面设计 2.2 生成代码 2.3 源码实现 3. 结果展示 1. 问题分析 项目需要显示的窗口数量颇多&#xff0c;主界面中&#xff0c;如果一次性显示全部窗口&#x…

财务管理困扰外贸公司?软件解决方案大揭秘!

本文将探讨外贸公司在财务管理中遇到的难题&#xff0c;提出可能性的解决方案&#xff0c;并概述理想的外贸财务管理软件应具备哪些必备功能。 一、外贸公司财务管理难题 1、交易币种多样化 如何准确记录不同货币的财务活动&#xff0c;是外贸公司必须面对的问题。外贸公司的…

密钥密码学(一)

原文&#xff1a;annas-archive.org/md5/b5abcf9a07e32fc6f42b907f001224a1 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 序言 从秘密解码环到政府政策声明&#xff0c;隐藏和发现信息的挑战长期以来一直吸引着智慧。密码学是一个引人入胜的主题&#xff0c;…

HMAC: Introduction, History, and Applications

title: HMAC&#xff1a;Introduction History and Applications date: 2024/4/22 18:46:28 updated: 2024/4/22 18:46:28 tags: HMAC哈希消息认证安全协议数据完整性身份验证密钥管理 第一章&#xff1a;介绍 1. 什么是Hash-based Message Authentication Code (HMAC)&#…

出海不出局 | 小游戏引爆高线市场,新竞争态势下的应用出海攻略

出海小游戏&#xff0c;出息了&#xff01; 根据 Sensor Tower 近期发布的“2024 年 3 月中国手游收入 TOP30”榜单&#xff0c;出海小游戏在榜单中成了亮眼的存在。 其中&#xff0c;《菇勇者传说》3 月海外收入环比增长 63%&#xff0c;斩获出海手游收入增长冠军&#xff0c…

LMDeploy 量化部署 LLM-VLM 实践——作业

LMDeploy 量化部署 LLM-VLM 实践——作业 一、 基础作业1.1、配置 LMDeploy 运行环境1.2、以命令行方式与 InternLM2-Chat-1.8B 模型对话 二、进阶作业2.1、设置 KV Cache 最大占用比例为0.4&#xff0c;开启 W4A16 量化&#xff0c;以命令行方式与模型对话2.1.1、初始显存占用…

交通公路气象站:监测公路沿线气象

TH-GQX8交通公路气象站是一种专门用于监测公路沿线气象状况的设备系统。它通常由分布在公路沿线的若干个自动气象站联网组成&#xff0c;主要任务是实时监测和记录多种气象数据&#xff0c;为交通管理部门和驾驶员提供准确的路况信息。这些气象数据包括气温、湿度、风速、风向、…

【Linux】权限(shell运行原理、概念,Linux权限)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12625432.html 目录 shell命令以及运行原理 创建和删除用户 创建新普通用户 删除用户 Linux权…

毕设学习:联邦学习梯度聚合加密算法

原本的加密算法大致思路&#xff1a;各个客户端上传梯度时进行加密&#xff0c;服务端直接用有扰乱的梯度当成真梯度来计算&#xff0c;这样一来谁也不知道谁是真梯度 为了避免原本的算法的一些问题&#xff0c;本文提出了加密-解密结构&#xff0c;并证明了这种结构带来的误差…

视频编码芯片软硬件实现的一些总结(1)

C-Model硬件架构设计的算法模型 视频编码芯片硬件实现时一般都会重新设计一个C-Model&#xff0c;接下来简单介绍下什么是C-Model&#xff0c;怎么设计硬件友好的C_Model。 实现视频编码的软件编码器&#xff08;比如x264/x265&#xff09;,其主要目的是提升CPU执行效率&#x…

java中多线程的创建方式及常用的方法

目录 概述 继承Thread类&#xff1a; 实现Runnable接口&#xff1a; 实现Callable接口&#xff1a; 示例代码 继承Thread类示例 实现Runnable接口示例 实现Callable接口示例 调用三种线程测试示例 线程常用的成员方法 概述 常见的创建线程的方式包括&#xff1a;继承…

vue整合Echarts

首先打开网址https://echarts.apache.org/examples/zh/index.html 进入Echars官网找到自己想要的图形我这里选择的是柱形图 点开完整代码直接cv大法 下载Echars的npm npm install echarts 在vue里面挂在个div 导入相关包 写个方法 就是cv过来的 然后改成后端传过来的值…