<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[欢迎订阅 -- 小源笔迹]]></title><description><![CDATA[小源笔迹]]></description><link>https://blog.youkuaiyun.com/sb985</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sb985]]></copyright><item><title><![CDATA[数据表示与运算]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/147338185</link><guid>https://blog.youkuaiyun.com/sb985/article/details/147338185</guid><author>sb985</author><pubDate>Fri, 18 Apr 2025 18:29:34 +0800</pubDate><description><![CDATA[在计算机中，数据需要按照一定的规则表示、存储和计算，常见的数据表示方法包括二进制表示、八进制表示和十六进制表示。编程语言中支持的数据类型也很多，一般分为基本数据类型和引用数据类型。其中基本数据类型是直接存储数值的，包括字符型char、布尔值、整型（signed，unsigned int，short，long）和浮点类型（float、double）。引用类型则一般存储对应的地址如数组、字符串、结构体和对象等。一些高级编程语言还支持空类型和函数类型等数据类型。]]></description><category></category></item><item><title><![CDATA[TVM计算图分割--Collage]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/147315439</link><guid>https://blog.youkuaiyun.com/sb985/article/details/147315439</guid><author>sb985</author><pubDate>Fri, 18 Apr 2025 16:40:46 +0800</pubDate><description><![CDATA[准确的指定执行平台对于发挥后端全部能力至关重要。后端模板（backend pattern）定义了一组算子和可以直接部署在各个后端的算子组合。然后Collage提供了一个两阶段的抽象，对于简单的pattern，直接列举出全部支持的算子pattern。对于复杂情况，用户可以指定pattern创建规则，如指定简单算子类型和复杂算子融合规则。当融合规则给定，整个计算图上的满足条件的模板都会被保存在后端模板注册表中。]]></description><category></category></item><item><title><![CDATA[TVM计算图分割--BYOC框架]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/143669577</link><guid>https://blog.youkuaiyun.com/sb985/article/details/143669577</guid><author>sb985</author><pubDate>Mon, 11 Nov 2024 00:41:58 +0800</pubDate><description><![CDATA[随着后端设备数量激增，为达到较高的效果在这些设备上，对应的知识要求也同步增加。为缓解这些压力，硬件厂商会提供算子库如OneDNN、cuDNN或者推理引擎TensorRT以指定的方式描述模型以达到较高性能，但是这种方式需要用户学习新的编程接口。BYOC框架提供了方法使硬件厂商较为容易的实现自己的codegen并注册为Relay后端编译器支持自己的硬件或者算子库。自己的ASIC加速器必须有自己的编译流，一般分为两类：其一，生成一个图表示然后投喂到图执行引擎中。]]></description><category></category></item><item><title><![CDATA[TVM计算图分割--分割方式]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/143616119</link><guid>https://blog.youkuaiyun.com/sb985/article/details/143616119</guid><author>sb985</author><pubDate>Fri, 08 Nov 2024 23:28:34 +0800</pubDate><description><![CDATA[计算图分割是指将计算图按照所属执行平台划分为若干个子图，每个子图分别执行在对应硬件上，以最大化值执行效率。1. Partition Pass 2. dataflow_pattern3. 内置图分割接口4. Pipeline Executor5. BYOC框架6. Collage7. UMA]]></description><category></category></item><item><title><![CDATA[TVM计算图分割--LayerGroup]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/143527756</link><guid>https://blog.youkuaiyun.com/sb985/article/details/143527756</guid><author>sb985</author><pubDate>Tue, 05 Nov 2024 21:19:35 +0800</pubDate><description><![CDATA[Layergroup目前没找到严格、明确的定义，因为不同厂家的框架考虑的因素不同，但是基本逻辑是差不多的。一般来说，Layergroup是一种计算图优化方法，旨在根据约束条件将若干层(算子)组合起来形成一个复合算子以满足后端需要。而计算图分割是针对异构执行环境的计算图优化操作，与Layergroup没有绝对的关系。一般由于专属硬件的资源受限，所以会执行layergroup操作。这里需要解释以下算子融合和Layergroup的区别。这两者很多时候是被混用的，所以说layergroup没有明确的定义。]]></description><category></category></item><item><title><![CDATA[Tiling与流水线技术小结]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/143465719</link><guid>https://blog.youkuaiyun.com/sb985/article/details/143465719</guid><author>sb985</author><pubDate>Sun, 03 Nov 2024 15:16:15 +0800</pubDate><description><![CDATA[当j=11时，由于cache中没有B[11]，所以需要从内存中读入，同时按照最久未访问策略将B[1]移除缓存，但是当外层循环加一即i=2时，内层循环重新遍历，此时j=1,但是此时cache中并没有B[1]，未命中，需要再次从内存中读入。假设切分的大小为T，则之前的循环改写如下。由于Ai core的Local Memory的存储容量无法完整的容纳下算子的输入与输出，因此需要先搬运一部分输入进行计算然后搬出，再搬运下一部分输入进行计算，直到得到完整的最终结果，这个数据切分、分块计算的过程称之为Tiling。]]></description><category></category></item><item><title><![CDATA[TVM前端研究--Pass]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/143442673</link><guid>https://blog.youkuaiyun.com/sb985/article/details/143442673</guid><author>sb985</author><pubDate>Fri, 01 Nov 2024 23:32:53 +0800</pubDate><description><![CDATA[在 TVM 中，Pass 根据 IR 类型的不同分为 Relay 上的优化和 TIR 上的优化。因此，Relay 上的 Pass 包括通用的 pass，在 tvm.relay.transform 目录下，还有一些 Pass 包含系统信息或后端信息，在其他目录下如 AnnotateUsedMemory Pass 等。是包含了一个 Pass 所需的基本信息如 name 是 pass 名称，opt_level 表示将在哪个优化级别启用 pass，required 表示执行某个 pass 所需的 pass。]]></description><category></category></item><item><title><![CDATA[TVM前端研究--Relay]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/143316951</link><guid>https://blog.youkuaiyun.com/sb985/article/details/143316951</guid><author>sb985</author><pubDate>Tue, 29 Oct 2024 22:16:01 +0800</pubDate><description><![CDATA[TVM前端之前用的NNVM，现在用的Relay，后面会往Relax和Unity方向转。先简单介绍一下。Relay的解释比较杂乱，按照论文和官方文档的解释它算是一个编译器框架或着IR(Intermediate Representation)。说是编译器框架有些大，说是IR他不单单可以做算子表示，还可以支持函数、类型等编程逻辑。]]></description><category></category></item><item><title><![CDATA[TVM初识]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/143134912</link><guid>https://blog.youkuaiyun.com/sb985/article/details/143134912</guid><author>sb985</author><pubDate>Mon, 21 Oct 2024 22:19:55 +0800</pubDate><description><![CDATA[TVM编译、TVMC工具使用以及TVM中计算图分割的调研。]]></description><category></category></item><item><title><![CDATA[AI编译器与TVM]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/143116833</link><guid>https://blog.youkuaiyun.com/sb985/article/details/143116833</guid><author>sb985</author><pubDate>Mon, 21 Oct 2024 16:58:14 +0800</pubDate><description><![CDATA[由于AI芯片的特殊性和高度定制化，为了兼容硬件的多样性，AI模型必须能被高效地映射到各种AI芯片上。AI编译器将深度学习框架描述的AI模型作为输入，将为各种AI芯片生成的优化代码作为输出。AI编译器的目标是通过编译优化的方法将深度学习框架产生的AI模型转化为与特定架构的AI芯片适配的可执行机器码。主流的AI硬件厂商都提供了高度优化的算子库或者推理引擎来实现高效计算，但是依赖算子库的缺点是算子库覆盖的硬件范围有限，而且库函数的更新落后于模型的发展速度，无法充分发挥AI芯片算力。]]></description><category></category></item><item><title><![CDATA[模型压缩与量化]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/143114776</link><guid>https://blog.youkuaiyun.com/sb985/article/details/143114776</guid><author>sb985</author><pubDate>Mon, 21 Oct 2024 16:08:00 +0800</pubDate><description><![CDATA[如今，庞大的参数量和推理过程中巨大的运算量阻碍着模型落地部署，成为深度学习的技术瓶颈之一。为解决这些问题，深度学习和硬件设计的专家学者针对深度神经网络压缩与加速方法展开了大量的研究。目前，较为有效地降低深度神经网络模型的空间和时间复杂度，达到模型压缩和推理速度的方法包括模型剪枝、知识蒸馏、神经网络结构搜索、张良分解和模型量化(Quantization)等。**模型剪枝：**通过去除模型中对性能影响较小的部分，从而解决模型过参数问题。根据剪枝粒度可以分为结构化剪枝和非结构化剪枝。]]></description><category></category></item><item><title><![CDATA[RuntimeError: Exporting the operator grid_sampler to ONNX opset version 11 is not support]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/132764152</link><guid>https://blog.youkuaiyun.com/sb985/article/details/132764152</guid><author>sb985</author><pubDate>Fri, 08 Sep 2023 17:08:29 +0800</pubDate><description><![CDATA[grid_sampler是比较经典的算子不支持问题，在pytorch1.12之后已经支持了，而我这里要求的版本是torch=1.8.0，该了torch版本后，之后的推理平台又会有版本限制所以不能改。然后用mmcv库中的bilinear_grid_sample()来替换grid_sample函数。二者是等价的，可以去torch官网看具体的api。具体做法就是定位到你出错的代码位置，一般就是grid_sample函数的定义位置。如果还是报错则重新写bilinear_grid_sample函数，具体代码如下。]]></description><category></category></item><item><title><![CDATA[RuntimeError:CUDA error: no kernel image is available for execution on the device]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/132763953</link><guid>https://blog.youkuaiyun.com/sb985/article/details/132763953</guid><author>sb985</author><pubDate>Fri, 08 Sep 2023 16:57:26 +0800</pubDate><description><![CDATA[根据网上所说，检查是否有cpuonly包，删除即可，但是我没有，网上说先下载后卸载就可以，可我这直接就无法安装，conda和pip都安装不了。我的conda默认还是安装的cpu版本的torch。用pip指定版本可以安装并且是支持gpu的版本，但是还是报之前不兼容的错误，不指定版本的话竟然安装的是1.0.2的版本，没有最新的软件包。发现我要的torch1.8.0还没有对应版本，1.8.1的版本只有cpu的对应版本。检索发现我的本机没有cuda10.1的版本，我的cuda是11.4的版本。]]></description><category></category></item><item><title><![CDATA[硬件名词--单片机，开发板和芯片]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/132492010</link><guid>https://blog.youkuaiyun.com/sb985/article/details/132492010</guid><author>sb985</author><pubDate>Fri, 25 Aug 2023 11:28:09 +0800</pubDate><description><![CDATA[初学硬件，一脸懵逼。整理了半天还是没太懂。只能说我不学习，我是知识点的搬运工。1.半导体（semiconductor）指常温下导电性能介于导体与绝缘体之间的材料，常见材料有硅，锗、砷化镓等。2.芯片（chip）又称微电路或者集成电路(integrated circuit)，是指内含继承电路的硅片，常作为电子设备的一部分，通常是在半导体晶圆的表面制造。芯片是在半导体芯片表面制造电路的集成电路又称薄膜集成电路。]]></description><category></category></item><item><title><![CDATA[设计模式之结构型模式]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/127184351</link><guid>https://blog.youkuaiyun.com/sb985/article/details/127184351</guid><author>sb985</author><pubDate>Thu, 06 Oct 2022 16:13:12 +0800</pubDate><description><![CDATA[一般具有相同内部状态的享元对象存储在享元池中，通常由一个享元工厂(工厂模式)来维护，享元模式的核心就在于这个享元工厂类，当用户需要对象时，先在享元池中找，如果没有则创建新对象并加入享元池。外观模式中，外部与一个子系统的通信必须通过一个统一的外观对象进行，为子系统中的一组接口提供一个一致的界面。具体实现类(ConcreteImplementor)实现了实现类接口并且具体实现它，在不同的具体实现类中提供基本操作的不同实现，在程序运行时，具体实现类对象将替换其父类对象，提供给客户端具体的业务操作方法。]]></description><category></category></item><item><title><![CDATA[设计模式之行为型模式]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/127184111</link><guid>https://blog.youkuaiyun.com/sb985/article/details/127184111</guid><author>sb985</author><pubDate>Thu, 06 Oct 2022 16:01:09 +0800</pubDate><description><![CDATA[为了减少对象两两之间复杂的引用关系，使之成为一个松耦合的系统，我们引入中介者模式，用一个中介对象来封装一系列的对象交互，中介者使各对象不需要显式地相互引用，从而使其耦合松散，而且可以独立地改变它们之间的交互。状态模式的关键是引入了一个抽象类来专门表示对象的状态，对象的每一种具体状态类都继承了该类，不同的具体状态类实现了不同状态的行为。状态与行为一一对应。具体状态类是抽象状态类的子类，每一个子类实现一个与环境类的一个状态相关的行为，每一个具体状态类对应环境的一个具体状态，不同的具体状态类其行为有所不同。]]></description><category></category></item><item><title><![CDATA[设计模式之创建型模式]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/127060836</link><guid>https://blog.youkuaiyun.com/sb985/article/details/127060836</guid><author>sb985</author><pubDate>Mon, 26 Sep 2022 21:02:52 +0800</pubDate><description><![CDATA[工厂模式是在具体实现上做了抽象得到工厂类，抽象工厂模式是在工厂类之上做了进一步抽象(工厂模式是先定义工厂，由工厂生产对象；抽象工厂模式是先定义抽象工厂，由抽象工厂生成具体工厂，再由具体工厂生成对象)。即抽象工厂模式是工厂的工厂。抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口，而无需指定它们具体的类。相较于工厂模式，抽象工厂可以提供多个产品对象而非单一对象。产品等级结构：即产品的继承结构。一个抽象类是电视，子类是具体品牌，则父类与子类构成了产品等级结构。]]></description><category></category></item><item><title><![CDATA[机器学习面经--常见问题]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/127028501</link><guid>https://blog.youkuaiyun.com/sb985/article/details/127028501</guid><author>sb985</author><pubDate>Sat, 24 Sep 2022 17:52:14 +0800</pubDate><description><![CDATA[要计算这两个指标需在一个集合范围内才可行，所以这就要求必须指定一个神经元组成的集合，利用这个集合里每个神经元的激活值来统计出所需的均值和方差，这样才能达到预定的规范化目标。机器学习中常见的Normalization方法分为两种类型，一种是特征标准化，是对输入的数据进行预处理，是对数据的不同特征分别进行处理，常见有max-min normalizaiton，z-score normalization等；不论哪种标准化方法，其规范化目标都是一样的，就是将其激活值调整为均值为0，方差为1的正态分布。]]></description><category></category></item><item><title><![CDATA[社区发现算法总结]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/126696927</link><guid>https://blog.youkuaiyun.com/sb985/article/details/126696927</guid><author>sb985</author><pubDate>Mon, 05 Sep 2022 00:20:00 +0800</pubDate><description><![CDATA[Kernighan-Lin算法先以任意方式将网络顶点按指定规模划分为两个群组，然后，对于任意一对不属于同一分组的节点对，交换两个节点，计算交换前后两个群组割集规模的变化量。在所有节点对中找到使割集规模减少最多的顶点对。如果没有使割集规模减少的定点对，在选择使割集规模增加最小的节点对，然后交换两个节点。重复该过程，被交换过的节点不再参与交换，直到没有可以交换的顶点为止。记录所有交换后的状态，选择割集规模最小的状态。]]></description><category></category></item><item><title><![CDATA[节点中心性]]></title><link>https://blog.youkuaiyun.com/sb985/article/details/124101131</link><guid>https://blog.youkuaiyun.com/sb985/article/details/124101131</guid><author>sb985</author><pubDate>Sun, 31 Jul 2022 19:56:04 +0800</pubDate><description><![CDATA[度中心性，介数中心性，Katz中心性，紧邻中心性，PageRank]]></description><category></category></item></channel></rss>