1.IDE是修复修复什么?
2.在 Nvidia Docker 容器编译构建显存优化加速组件 xFormers
3.源码游戏和组件游戏的区别
4.外部组件发生异常
5.提高生产力的 8 个必备 VSCode 扩展
6.什么是hutool?
IDE是什么?
IDE是集成开发环境(Integrated Development Environment)的缩写。它是源码源码一种软件应用程序,提供了一系列开发工具和功能,组件方便程序员编写、教程调试和管理软件代码。修复修复一个IDE通常包含以下主要组件:
代码编辑器:用于编写和编辑源代码。源码源码招生工具源码
编译器/解释器:将源代码转换为可执行文件或解释执行代码。组件
调试器:用于在运行时检查和修复代码中的教程错误和问题。
自动完成和语法高亮:帮助程序员提高代码编写的修复修复效率和准确性。
版本控制系统集成:与代码版本控制工具(如Git)集成,源码源码方便团队协作和代码管理。组件
构建工具:自动化构建、教程测试和部署代码的修复修复工具。
文档生成工具:用于生成代码文档或API文档。源码源码
其他辅助工具:例如性能分析器、组件单元测试工具等。
通过使用IDE,开发者可以在一个集成的环境中进行软件开发,减少了切换工具和界面的时间,提高了开发效率和代码质量。常见的IDE包括Visual Studio(针对多种编程语言)、Eclipse(Java开发)和PyCharm(Python开发)等。
在 Nvidia Docker 容器编译构建显存优化加速组件 xFormers
本篇文章,聊聊如何在新版本 PyTorch 和 CUDA 容器环境中完成 xFormers 的编译构建。
让你的模型应用能够跑的更快。
写在前面
xFormers[1] 是 FaceBook Research (Meta)开源的使用率非常高的 Transformers 加速选型,当我们使用大模型的时候,如果启用 xFormers 组件,能够获得非常明显的性能提升。
因为 xFormers 对于 Pytorch 和 CUDA 新版本支持一般会晚很久。所以,时不时的我们能够看到社区提出不能在新版本 CUDA 中构建的问题( #[2]或 #[3]),以及各种各样的编译失败的问题。
另外,xFormers 的安装还有一个问题,会在安装的时候调整当前环境已经安装好的 PyTorch 和 Numpy 版本,比如我们使用的是已经被验证过的环境,比如 Nvidia 的月度发布的容器环境,这显然是我们不乐见的事情。
下面,网络导航源码我们就来解决这两个问题,让 xFormers 能够在新的 CUDA 环境中完成编译,以及让 xFormers 的安装不需要变动我们已经安装好的 Pytorch 或者 Numpy。
环境准备
环境的准备一共有两步,下载容器和 xFormers 源代码。
Nvidia 容器环境
在之前的 许多文章[4]中,我提过很多次为了高效运行模型,我推荐使用 Nvidia 官方的容器镜像( nvcr.io/nvidia/pytorch:.-py3[5])。
下载镜像很简单,一条命令就行:
完成镜像下载后,准备工作就完成了一半。
准备好镜像后,我们可以检查下镜像中的具体组件环境,使用docker run 启动镜像:
然后,使用python -m torch.utils.collect_env 来获取当前环境的信息,方便后续完成安装后确认原始环境稳定:
获取 xFormers
下载 xFormers 的源代码,并且记得使用--recursive 确保所有依赖都下载完毕:
xFormers 的源码包含三个核心组件cutlass、flash-attention、sputnik,除去最后一个开源软件在 xFormers 项目 sputnik 因为 Google 不再更新,被固定了代码版本,其他两个组件的版本分别为:cutlass@3.2 和 flash-attention@2.3.6。
Dao-AILab/flash-attention[6]目前最新的版本是 v2.4.2,不过更新的主干版本包含了更多错误的修复,推荐直接升级到最新版本。在 v2.4.2 版本中,它依赖的 cutlass 版本为 3.3.0,所以我们需要升级 cutlass 到合适的版本。
Nvidia/cutlass[7] 在 3.1+ 的版本对性能提升明显。
不过如果直接更新 3.2 到目前最新的 3.4flash-attention 找不到合适的版本,会发生编译不通过的问题,所以我们将版本切换到 v3.3.0 即可。
另外,在前文中提到了在安装 xFormers 的时候,会连带更新本地已经安装好的依赖。想要保护本地已经安装好的环境不被覆盖,尤其是 Nvidia 容器中的依赖不被影响,我们需要将xformers/requirements.txt 内容清空。
好了,内容商城源码到这里准备工作就结束了。
完成容器中的 xFormers 的安装
想要顺利完成 xFormers 的构建,还有一些小细节需要注意。为了让我们能够从源码进行构建,我们需要关闭我们下载 xFormers 路径的 Git 安全路径检查:
为了让构建速度有所提升,我们需要安装一个能够让我们加速完成构建的工具ninja:
当上面的工具都完成后,我们就可以执行命令,开始构建安装了:
需要注意的是,默认情况下安装程序会根据你的 CPU 核心数来设置构建进程数,不过过高的工作进程,会消耗非常多的内存。如果你的 CPU 核心数非常多,那么默认情况下直接执行上面的命令,会得到非常多的Killed 的编译错误。
想要解决这个问题,我们需要设置合理的MAX_JOBS 参数。如果你的硬件资源有限,可以设置 MAX_JOBS=1,如果你资源较多,可以适当增加数值。我的构建设备有 G 内存,我一般会选择设置 MAX_JOBS=3 来使用大概最多 GB 的内存,来完成构建过程,MAX_JOBS 的构建内存消耗并不是完全严格按照线性增加的,当我们设置为 1 的时候,GB 的设备就能够完成构建、当我们设置为 2 的时候,使用 GB 的设备构建会比较稳妥,当设置到 4 的时候,构建需要的内存就需要 GB 以上了。
构建的过程非常漫长,过程中我们可以去干点别的事情。
当然,为了我们后续使用镜像方便,最好的方案是编写一个 Dockerfile,然后将构建的产物保存在镜像中,以方便后续各种场景使用:
在构建的时候,我们可以使用类似下面的命令,来搞定既使用了最新的redhat源码镜像 Nvidia 镜像,包含最新的 Pytorch 和 CUDA 版本,又包含 xFormers 加速组件的容器环境。
如果你是在本机上进行构建,没有使用 Docker,那么构建成功,你将看到类似下面的日志:
等待漫长的构建结束,我们可以使用下面的命令,来启动一个包含构建产物的容器,来测试下构建是否成功:
当我们进入容器的交互式命令行之后,我们可以执行python -m xformers.info,来验证 xFromers 是否构建正常:
以及,使用python -m torch.utils.collect_env 再次确认下环境是否一致:
最后
好了,这篇文章就先写到这里啦。
源码游戏和组件游戏的区别
源码,是指可以直接更改游戏布局、功能的游戏源代码。它是由程序员用他们的工作语言编写的,而这个工作语言就是“源码”。
组件:是源码经过编译后的程序,也就是说可以封装重用。
外部组件发生异常
外部组件发生异常的原因可能是代码应用错误,比如一个 User Control 后台代码中的引用写成了:using System.Windows.Forms。这样该 UserControl 的页面基类就变成了 System.Windows.Forms.UserControl。从引用了该用户控件的页面角度而言的,对他来说这个用户控件就是“外部组件”。 代码就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。代码设计的原则包括唯一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。 源代码是代码的分支,某种意义上来说,源代码相当于代码。现代程序语言中,源代码可以书籍或磁带形式出现,但最为常用格式是街机 棋牌 源码文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码最终目的是将人类可读文本翻译成为计算机可执行的二进制指令,这种过程叫编译,它由通过编译器完成。提高生产力的 8 个必备 VSCode 扩展
Visual Studio Code(简称VSCode)是一个开源、轻量级且功能强大的源代码编辑器,被世界各地的开发人员广泛使用。其丰富的扩展生态系统不仅增强了用户在多种语言编码、高效调试的能力,还为编码过程引入了乐趣。本文旨在深入探讨并推荐个必备的VSCode扩展,它们将彻底改变您的编码体验并大幅提升生产力。无论是经验丰富的开发者还是新手,本文提供的扩展将帮助您探索市场上最优秀的VSCode扩展,以提升工作效率。
VSCode扩展是什么?
简言之,VSCode扩展是由第三方开发者提供的附加插件或组件,旨在增强Visual Studio Code编辑器的功能。这些扩展覆盖了从语言支持、调试工具到代码linter、主题设计等几乎所有开发者需求。
VSCode扩展的重要性
VSCode中的扩展在提高开发人员的工作效率方面发挥着关键作用。它们提供了管理和浏览代码的便利性,允许自动执行重复性任务、检测和修复错误、编写更清晰高效的代码,并加速整个编码过程。此外,扩展还能根据个人喜好个性化工作空间,提供舒适愉快的编码环境。
以下是8个必备的VSCode扩展,它们将有助于提高您的工作效率。
一、Console Ninja
调试通常是耗时的任务,而Console Ninja在这方面表现出色。它通过直接在VSCode编辑器中显示输出和运行时错误,显著节省了在代码编辑器和浏览器控制台之间切换的时间。Console Ninja逐行显示输出,帮助开发者详细检查代码执行流程,兼容流行JavaScript框架和库,是满足调试需求的必备工具。
二、Indent Rainbow
Indent Rainbow旨在增强代码可读性。它通过颜色编码代码中的缩进级别,使开发者能够更好地理解和管理代码结构。使用此扩展,开发者只需跟随颜色就能轻松跟踪代码块的开始和结束位置,从而显著提高编码效率。
三、Rainglow
对于长时间编码的开发者,一个美观的界面能产生重大影响。Rainglow是VSCode的集合,包含多个优雅且赏心悦目的主题,让开发者根据个人喜好个性化编码环境。通过在不同主题之间轻松切换,开发者可以根据心情或时间调整编辑器配色方案,为编码环境增添美学元素,减少视觉疲劳,使编码更加愉快。
四、Snippet Creator
Snippet Creator是一个方便的VSCode扩展,用于创建自定义代码片段。代码段是可重用的代码块,只需敲击几下键盘即可插入代码中。使用此扩展,开发者可以快速创建自定义代码段,避免重复编码任务,提高编码效率。
五、VSCode Pets
VSCode并非完全严肃编码,它也有乐趣的一面!VSCode Pets扩展是一个轻松有趣的附加组件,允许开发者将各种动画宠物添加到工作区。通过选择宠物、给它们起名并与它们互动,为编码过程增添乐趣。虽然看起来有些不寻常,但这种乐趣和放松的元素经常激发创造力。
六、Toggle Quotes
Toggle Quotes是一个简单而强大的扩展,允许开发者快速在不同类型的字符串引号之间切换。在处理包含变量的字符串时,这一点特别有用。无论使用单引号、双引号还是反引号,Toggle Quotes都能轻松实现转换,避免语法错误,提高编码效率。
七、Random Everything
在进行测试时,生成随机数据可能是一项繁琐任务。输入Random Everything,一个旨在为开发者生成随机数据的扩展程序。无论需要随机数字、姓名、电子邮件还是国家/地区,此扩展都能满足需求,简化测试过程。
八、Image Preview
对于Web开发者,处理图像通常是一项挑战,尤其是处理大量图像文件时。Image Preview是一个扩展程序,它通过直接在编辑器中提供图像预览来解决这一问题。使用此扩展,开发者无需离开编码环境即可查看图像文件的小预览,提高处理图像时的工作效率。
结论
VSCode的灵活性和可扩展性使其成为满足开发人员各种需求的强大工具。本文提到的扩展——Console Ninja、Rainglow、VSCode Pets、Random Everything、Indent Rainbow、Snippet Creator、Image Preview和Toggle Quotes——只是其中的一部分,它们体现了VSCode生态系统丰富性和多样性,并证明了它们如何提升编码体验和生产力。
什么是hutool?
详解Hutool路径遍历漏洞CVE--
Hutool是一个广泛使用的Java工具库,提供了丰富的功能以简化开发者在Java应用中的日常任务。其ZipUtil组件在处理压缩文件时,存在路径遍历漏洞CVE--。本文将深入分析该漏洞的细节、利用条件、影响范围以及修复方法。组件使用场景与漏洞概述
Hutool-core组件包括了Bean操作、日期处理、多种实用工具等功能,尤其在压缩文件和解压文件等操作中,ZipUtil类起到了关键作用。该组件的unzip函数在默认情况下未对压缩文件内的文件名进行充分检测,导致在解压过程中可能存在路径穿越的危险。漏洞细节与利用条件
该漏洞允许攻击者利用Hutool的unzip函数,通过未经校验的压缩文件内数据,实现任意文件覆盖效果。具体来说,攻击者可以通过构造恶意压缩文件,其中包含指向敏感文件路径的文件名(如/etc/passwd或ssh连接私钥文件),进而实现服务器被远程控制或远程命令执行。漏洞利用条件包括使用Hutool默认的unzip函数且未对压缩文件内的文件数据进行有效校验。影响版本与漏洞分析
CVE--影响了Hutool的所有版本小于4.1.。该漏洞本质上是一个标准的Zip Slip漏洞,其核心在于ZipUtil类在创建File对象时直接从zipEntry获取压缩文件的文件名,未对文件名进行过滤。这一过程可能导致目录穿越,进而引发安全问题。漏洞复现与修复策略
为了复现实验,可以使用Python脚本创建一个包含恶意文件名的压缩文件。通过Hutool的unzip函数对这个压缩文件进行解压操作,观察结果。结果通常会显示敏感文件被覆盖的情况。针对这一漏洞,有三种主要的修复策略:1. **升级至4.1.版本**:Hutool的修复版本引入了`FileUtil`替代了原始的`File`对象,通过`checkSlip`函数进行安全性检查,确保文件在指定的父目录下,防止路径遍历攻击。这种修复方法可以通过修改包管理文件(如`pom.xml`或`build.gradle`),重新构建项目来实现。
2. **手动修改源码**:开发者可以下载Hutool组件的源码,自行实现相应的安全校验逻辑,以替换原始的解压流程,避免漏洞的产生。
3. **权限控制**:以较低权限的用户执行解压操作,限制对敏感目录和文件的访问权限,以此来防范Zip Slip攻击。
通过这些修复措施,可以有效防止Hutool路径遍历漏洞的利用,保障应用安全。
[VSCode TS官方文档]在Visual Studio Code中使用TypeScript的教程
在本教程中,我们探索如何在Visual Studio Code中利用TypeScript进行编程。TypeScript,作为JavaScript的超集,提供了类、模块和接口等特性,有助于构建健壮的组件。
为了在Visual Studio Code中使用TypeScript,首先需要安装TypeScript编译器。虽然VS Code提供语言支持,但不包含编译器。您可以通过Node.js包管理器npm在全局或工作区中进行安装。安装完成后,可以通过在集成终端输入`tsc`命令来测试安装。
让我们从一个简单的Hello World Node.js示例开始。首先,在文件夹`HelloWorld`中创建一个新文件,并启动VS Code。在文件资源管理器中,新建一个名为`helloworld.ts`的文件。添加以下TypeScript代码,注意TypeScript的关键字`let`和`string`类型的声明。执行`tsc helloworld.ts`命令编译代码,生成`helloworld.js`文件。执行`node helloworld.js`以运行代码。
通过VS Code的IntelliSense功能,您可以获得语法高亮、括号匹配等语言特性。键入时,IntelliSense提供智能代码补全和建议。例如,选择console方法后,将获得参数帮助和悬停信息。
为了进一步自定义TypeScript编译器选项,可以创建`tsconfig.json`文件。该文件定义项目设置,如编译器选项和应包含的文件。默认情况下,TypeScript会包含当前文件夹和子文件夹中的所有`.ts`文件。可以通过添加`outDir`属性指定编译器输出目录,以保持生成的JavaScript文件与TypeScript源代码的组织性。
在大型项目中,错误检查功能尤为重要,TypeScript可以帮助避免常见的编程错误。通过强大的类型检查,如尝试将数字赋值给字符串,TypeScript编译器会发出警告。在VS Code中,您可以在编辑器或问题面板中查看这些类型检查错误。
快速修复功能允许您在代码中快速解决常见的编码问题,如无法访问的代码或错误的引用。当鼠标悬停在源代码行上或光标位于该行时,会显示悬停解释和快速修复灯泡。单击灯泡或使用`Ctrl+.`命令以执行修复。
VS Code内置支持TypeScript调试。通过在`tsconfig.json`中设置`"sourceMap": true`来创建源映射,以便调试器在原始TypeScript源代码和运行中的JavaScript之间进行映射。运行`tsc`命令进行重建,生成的`.js.map`文件将与`.js`文件位于同一目录。在VS Code中打开`helloworld.ts`文件,按`F5`开始调试,您将在调试控制台面板中看到`Hello World`消息。通过设置断点并在`Run and Debug`视图中查看变量值和调用堆栈等调试信息。