本文将通过比较libjpeg, Guetzli,webp的压缩率、压缩延时、压缩资源、解压性能,评估Guetzli可用性。 (此原理描述摘自文章《Guetzli:谷歌家的东西可能也没有想像的辣么美》) 压缩率 压缩率:描述压缩文件的效果名,是文件压缩后的大小与压缩前的大小之比 质量系数:图片压缩级别,质量系数1表示最低图像质量和最高的压缩 ,质量系数100表示最佳的图片质量和最低效的压缩。 下图是libjpg、Guetzli、webp不同质量系数下的压缩率,可以看出: 整体压缩效果:webp>Guetzli>libjpg guetzli比libjpg优12%-33%, webp比Guetzli 优20%左右 guetzli在高质量系数下,压缩率表现更好 图片肉眼观察质量 对于相同质量系数压缩的图片,各算法肉眼是看不出区别 压缩延时 模型:这里假设业务需要转5档图,这里压缩延时计算模型是一张图片转换成业务需要的五档图的总延时
{MYD,MYI} 3539537 116M -rw-r----- 1 mysql mysql 116M 3月 31 11:46 n1.MYD 3539536 1.4M -rw-r----- 1 mysql mysql 1.4M 3月 31 11:48 n1.MYI 对 MyISAM 表的压缩,MySQL 通过自带程序 myisampack 来压缩,仅仅压缩表数据,不对索引进行压缩。 {MYD,MYI} 3539542 31M -rw-r----- 1 mysql mysql 31M 3月 31 11:46 n1.MYD 3539536 1.4M -rw-r----- 1 mysql mysql 1.4M 3月 31 11:48 n1.MYI MyISAM 压缩表非常适合只读的场景! 压缩率大约为 50% root@ytt-pc:/var/lib/mysql/3304/ytt# ls -sihl 总用量 11M 3539513 11M -rw-r----- 1 mysql mysql
日志压缩可以保证Kafka总是最少保留单个主题分区的数据日志中的每个消息的key的最后的已知值。 让我们更详细的介绍这些情况,然后描述是如何压缩的: 到目前为止,我们仅描述了简单一些的数据保留方法,其中旧的日志数据在固定时间段或者当日志达到某个预定大小时被丢弃。
本期的关注焦点是【模型压缩】&【预训练】的7篇论文。点击文末“阅读原文”,获取正在接受盲审的论文列表。 模型压缩 Task-Agnostic and Adaptive-Size BERT Compression 本文的目标是通过压缩可以得到模型对不同大小和延迟的限制下的小模型;另外压缩后的模型是任务不可知 为了实现这个目标,本文使用的方法是基于NAS架构搜索的方法,由于待搜索的空间非常大,对于预训练任务难度较大,本文提供了3种策略来优化。 ? 解决预训练和精调的不匹配问题(精调时没有 MASK)。文中提出了两类策略,Disentangled Attention:增加计算 “位置-内容” 和 “内容-位置” 注意力。 在本文中,我们提出了K-PLUG,一种基于编解码转换器的知识注入的预训练语言模型,它既适用于自然语言理解任务,也适用于生成任务。
模型压缩 Task-Agnostic and Adaptive-Size BERT Compression 本文的目标是通过压缩可以得到模型对不同大小和延迟的限制下的小模型;另外压缩后的模型是任务不可知 为了实现这个目标,本文使用的方法是基于NAS架构搜索的方法,由于待搜索的空间非常大,对于预训练任务难度较大,本文提供了3种策略来优化。 ? 解决预训练和精调的不匹配问题(精调时没有 MASK)。文中提出了两类策略,Disentangled Attention:增加计算 “位置-内容” 和 “内容-位置” 注意力。 在本文中,我们提出了K-PLUG,一种基于编解码转换器的知识注入的预训练语言模型,它既适用于自然语言理解任务,也适用于生成任务。 具体来说,我们提出了五个具有知识意识的自我监督的预训练目标,以实现特定领域的知识学习。 ? 论文链接:https://openreview.net/forum?
同时NNCF不光支持CNN系列模型的压缩与量化,还支持大模型(包含LLM与VLM)压缩与量化转换。 训练后压缩量化支持以下算法: 从中可以看出,先把模型转换为OpenVINO的IR格式以后会比直接用ONNX格式模型获取更多压缩算法支持,比如:权重压缩支持。 训练后量化(PTQ)YOLO系列INT8 这里以YOLO11为例,实现自定义YOLO11对象检测模型的训练后量化,通过PTQ在维持精度的同时大幅提升推理速度。 模型权重压缩 OpenVINO、Pytorch格式支持直接读取然后转换为INT8权重压缩格式实现模型量化,从而加速推理性能,权重压缩量化支持对称与非对称模式,支持INT8与INT4模式。 还是以YOLO11为例, 权重压缩INT8对称模式: 权重压缩INT8非对称模式 运行对比 CPU 酷睿i7 11th 直接同步推理模式下: 使用FP32的流水线异步推理 使用INT8量化版本的YOLO11
3、碰上压缩文件中有太大的文件的话,内存申请肯定会有问题,因为程序是把压缩数据、解压后数据直接存储在内存中的。 4、如果压缩文件中有超过2G的,会溢出Long类型,文件读取也会出问题 第2个问题是因为Huffman树的节点使用的是类模块,在内存释放上有点问题,目前没找到原因。
在Android 11中,引入了IORap,这是一个新功能,可大大缩短应用程序的启动时间。我们观察到,各种设备上的应用平均启动速度(冷启动)快5%以上。有的用例显示启动时间快20%以上。 步骤2:产生预取清单 基于从先前步骤获得的pagecache missing event,IORap在设备的空闲时间期间生成预取文件列表。 然后,数据将存储在文件的预取列表中(protobuf) 步骤3:I / O预取 生成预取列表之后,IORap可以为应用程序的后续运行预取相应的数据。用户和开发人员无需执行任何操作。 当用户点击图标或通过Intent请求图标的应用程序间接点击图标时,执行预取操作。 步骤4:淘汰预取清单 预取列表不会永远存在。预取列表可能会过时。下面的情况将会更新预取列表。 首先,更频繁地预取。如果可以在分析期间完成预取,那将对应用程序启动会有很大的帮助。然后,可以通过提供预构建的预取列表来消除在生成预取列表之前的一些性能差距。
BERT 是首个在大批句子层面和 token 层面任务中取得当前最优性能的基于微调的表征模型,其性能超越许多使用任务特定架构的系统,刷新了 11 项 NLP 任务的当前最优性能记录。 这篇刷新了 11 项 NLP 任务的论文不久之前已经上线,让我们一睹为快: 研究证明语言模型预训练可以有效改进许多自然语言处理任务,包括自然语言推断、复述(paraphrasing)等句子层面的任务, BERT 刷新了 11 项 NLP 任务的当前最优性能记录。本论文还报告了 BERT 的模型简化测试(ablation study),证明该模型的双向特性是最重要的一项新贡献。 它刷新了 11 个 NLP 任务的当前最优结果,包括将 GLUE 基准提升至 80.4%(7.6% 的绝对改进)、将 MultiNLI 的准确率提高到 86.7%(5.6% 的绝对改进),以及将 SQuAD 实验 这部分,我们将展示 BERT 在 11 个 NLP 任务上的微调结果。 ? 图 3:我们的任务特定模型是由向 BERT 添加了一个额外的输出层而形成的,因此一小部分参数需要从头开始学习。
BERT 是首个在大批句子层面和 token 层面任务中取得当前最优性能的基于微调的表征模型,其性能超越许多使用任务特定架构的系统,刷新了 11 项 NLP 任务的当前最优性能记录。 这篇刷新了 11 项 NLP 任务的论文不久之前已经上线,让我们一睹为快: 研究证明语言模型预训练可以有效改进许多自然语言处理任务,包括自然语言推断、复述(paraphrasing)等句子层面的任务,以及命名实体识别 BERT 刷新了 11 项 NLP 任务的当前最优性能记录。本论文还报告了 BERT 的模型简化测试(ablation study),证明该模型的双向特性是最重要的一项新贡献。 它刷新了 11 个 NLP 任务的当前最优结果,包括将 GLUE 基准提升至 80.4%(7.6% 的绝对改进)、将 MultiNLI 的准确率提高到 86.7%(5.6% 的绝对改进),以及将 SQuAD 实验 这部分,我们将展示 BERT 在 11 个 NLP 任务上的微调结果。 ? 图 3:我们的任务特定模型是由向 BERT 添加了一个额外的输出层而形成的,因此一小部分参数需要从头开始学习。
3 量化压缩在PLM中的问题 将以前在BERT上取得成功的量化压缩方法应用到预训练语言模型(PLM)上,会存在比较明显的效果下降。 下图是之前的PACT、LSQ等量化压缩方法随着压缩后的bit减少困惑度的变化。可以看到压缩到2-bit时出现非常明显的效果折损。 为什么之前的量化压缩方法应用到预训练语言模型上效果会这么差的? 这些问题在预训练语言模型这种单向结构中更加严重,因为单向的学习会导致量化误差累计问题。 6 总结 本文以ACL 2022杰出论文——量化压缩预训练语言模型为出发点,首先介绍了经典的量化压缩方法,包括BinaryConnect、PACT等,又进一步介绍了在BERT上的量化压缩工作。 通过以上工作在预训语言模型上应用的不足,带大家理解了本文面临的难点和核心解法。
1、网络压缩原理 网络压缩的原理是消耗CPU资源,减少文件在公网传输的大小,提高响应速度。 二、网络压缩 此部分所有的压缩内容在浏览器端都会还原,特别需要指出的是图片,图片在网络间是压缩状态传输的,到达浏览器后是会被还原的。 技术实现依托gzip压缩,仅仅在服务器与客户端网络传输时对静态资源进程压缩,文件的大小在压缩前与还原后保持不变。 图片压缩分为两类:一是等比压缩;二是固定宽高压缩。根据应用场景的不同也分为两类:一是固定参数;二是动态参数。 此部分图片压缩后到达浏览器不会被还原。 (一)等比压缩 使用关键词resize实现等比压缩,指定宽度或者高度即可在原尺寸图片的基础上等比率压缩图片。如果同时指定宽度和高度,只有一个参数生效。
在固定 GPU 内存预算下,DFloat11 支持的上下文长度是未压缩模型的 5.3–13.17 倍。 算法 1 是将 DFloat11 解压缩为 BFloat16 的 GPU 内核过程。 实验 研究人员评估了 DF11 压缩方法在 GPU 上的有效性及推理效率,将多个主流大语言模型(包括 LLaMA、Qwen、Gemma 等)从 BFloat16 压缩为 DF11 格式,并报告其压缩比和性能表现 实验结果 DF11 压缩比:DF11 将大语言模型压缩至原始大小的约 70%(等效位宽为 11 位)。 表 2 展示了 DF11 在 LLaMA、Qwen、Gemma 等模型上的压缩效果。 所有模型的线性投影层参数均被压缩为 DF11 格式,压缩比稳定在 70%。
1.预解析的相关概念 JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。 JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析和代码执行。 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义。 代码执行: 从上到下执行JS语句。 预解析会把变量和函数的声明在代码执行之前执行完成。 2. 变量预解析 预解析也叫做变量、函数提升。 变量提升(变量预解析): 变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。 函数预解析 函数提升: 函数的声明会被提升到当前作用域的最上面,但是不会调用函数。
一、预解析示例分析一 1、要分析的代码 要分析的 代码示例 : <! ); var num = 888; } </script> </head> <body> </body> </html> 执行结果如下 : 2、代码预解析分析 console.log(num); var num = 888; } 分析上述代码 的 预解析过程 : 全局作用域 的 var num = 666; 变量 , 进行 预解析 , 提升该变量 到 全局作用域 顶部 , 提升后的效果如下 : // ★ 本步骤要点 var num; num = 666; fun(); function fun() { console.log(num); var num = 888; } 全局作用域 的 fun 函数 预解析
预解析 1.预解析的相关概念 JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。 JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析和代码执行。 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义。 代码执行: 从上到下执行JS语句。 预解析会把变量和函数的声明在代码执行之前执行完成。 2. 变量预解析 预解析也叫做变量、函数提升。 变量提升(变量预解析): 变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。 结果:undefined 注意:**变量提升只提升声明,不提升赋值** 3.函数预解析 函数提升: 函数的声明会被提升到当前作用域的最上面,但是不会调用函数。
一、JavaScript 预解析 JavaScript 代码 是 由 浏览器 的 JavaScript 解析器 执行的 , 执行过程分如下两步 : 预解析 正式执行代码 JavaScript 的 " 预解析 的位置在哪里 , 解析器 在 预解析 阶段 都会把它们提升到它们各 自的作用域的最顶部 ; 二、变量预解析 1、变量预解析 - 变量提升 变量预解析 又称为 " 变量提升 " , 就是 把 所有的 变量声明 1、函数预解析 - 函数提升 函数预解析 又称为 " 函数提升 " , 与 变量提升类似 , 使用 function 关键字 的 函数声明 也会被提升到它们所在的作用域的顶部 , 因此可以 在函数声明之前 hello(); 2、代码示例 - 函数预解析 代码示例 : <! 1、函数表达式预解析 函数表达式 的 本质是一个 变量 , 只是将 函数 赋值给了 变量 ; 由于 变量预解析 时 , 只是将 var 关键字的 变量声明 提升到了 作用域的最顶端 , 变量的 初始化
Linux 压缩解压命令 zip/unzip,文件后缀名为zip 压缩: zip 123.zip *.txt # 将所有的txt文件压缩成123.zip文件 zip -r test.zip 压缩: bzip2 1.txt # 将1.txt压缩成1.txt.bz2 解压: bunzip2 1.txt.bz2 bzip2 -d 1.txt.bz2 bzip2 -dk -z: 调用gzip/gunzip进行压缩解压操作,后缀名是.tar.gz -j: 调用bzip2/bunzip2进行压缩解压操作,后缀名是.tar.bz2 -C: 指定解压位置 Copy 注意:tar 只是用来打包和解包的工具,它本身是没有压缩和解压缩的功能。但是,通过添加参数,可以调用gzip或者bzip2进行压缩解压操作。 tar -z: 使用 gzip方式打包并压缩文件,后缀名为 .tar.gz,可以简写为 .tgz tar -j: 使用 bzip2 方式打包并压缩文件,后缀名为 .tar.bzip2,可以简写为
为什么会讲到这个预解析呢,个人认为工作了很多年的前端可能都不一定搞清楚这个机制,所以还是将这个记录下来作为自己的学习笔记,同时也分享给广大的其他爱学习的前端开发者们。 这就牵扯到JS的预解析,首先Javascript会预解析代码中所有的变量和函数,因此在执行sum(2, 10)函数前已经将sum函数进行解析了,所以在调用sum函数的时候能正常输出。 我们来看下预解析后的情况吧 function sum(a, b){ return a+b; } sum(2, 10); 。。。。。。 -------------------------------------------------------------------------------------- c 让我们来还原一下代码的预解析过程
这里主要是因为JS的预解析造成的 js引擎运行分为两步:预解析和代码执行 预解析 js引擎会把js里面所有的var 还有function 提升到当前作用域的最前面 预解析分为变量预解析(变量提升 )和函数预解析(函数提升) 变量预解析:把所有的var变量提升到当前作用域的最前面,这里只提升变量声明,不提升赋值操作 这里我们就可以解释情景二出现undefined的情况 由于变量提升情景二的代码其实最后是这样执行的 把所有的函数声明提升到当前作用域的最前面 这也解释了情景三的执行是没有异常的 代码执行 按照代码顺序从上到下执行 预解析案例 下面代码执行的结果是什么?