当前位置: 首页 > news >正文

网站搭建修改收费依据两个男生如何做网站

网站搭建修改收费依据,两个男生如何做网站,如何注册一个自己的品牌,校园文化宣传主题网站的建设TVM_深度学习编译器 TVM所做的是要比传统compiler更偏上层的#xff0c;你可以把它理解成source-to-source compiler#xff0c;需要其他的后端(backend)来生成最后的指令。比如当编译的Target是Intel CPU时#xff0c;翻译的顺序是Relay IR - TVM IR/ Halide IR -…TVM_深度学习编译器 TVM所做的是要比传统compiler更偏上层的你可以把它理解成source-to-source compiler需要其他的后端(backend)来生成最后的指令。比如当编译的Target是Intel CPU时翻译的顺序是Relay IR - TVM IR/ Halide IR - LLVM IR之后交给LLVM生成最后的可执行程序。当编译的Target是NVIDIA GPU时这个顺序就变成了 Relay IR - TVM IR/Halide IR - CUDA program (比如生成一个文件, my_kernel.cu)然后调用cuda的runtime compiler来生成CUDA可执行文件。 细节上可能跟最新的不一样因为TVM大概在逐渐废弃Halide IRTVM IR也是每个版本都有改动。从前后端的角度上看vitis AI可以作为TVM的后端之一而且不久前TVM也支持了这个后端([RFC][BYOC] Vitis-AI integration)具体支持的如何我没有试过。TVM的核心优势在于从Halide等框架借鉴来的算子描述与调度分离TVM IR侧重于loop nest来做loop transformation。vitis从官网上看可以做剪枝量化这些之后把算子分派到具体的执行单元。 TVM vitis AI backend的话从RFC来看大概是先在TVM这一层做优化然后翻译到vitis的graph IR。但是我很好奇如果我做tiling这个tiling size在底层没有支持它怎么翻译还是说这个RFC所做的只是Relay graph optimization比如算子融合constant folding这类然后直接转换到vitis。 从你描述来看你的板子是定制的这个翻译过程应该会更麻烦一些大概需要对TVM的后端进行扩展或者写tensor intrinsic之类。我魔改TVM做的比较多写扩展的难度一般般不算太复杂。我觉得你可以先用vitis AI成功部署之后vitis支不支持自己设计的架构我也不知道, Orz…再考虑借助TVM做一些别的优化。你的板子是定制的从TVM入手的话感觉怎么都得回到后端生成的这个问题上来。 把你自己的代码生成TVM tvm.d2l.ai 笔记 tvm.schedule 自动 代码 生成 调度 tvm在线文档 在TVM中添加新设备Codegen tvm会议 课程资料 在android上安装和运行tvm TVM 使用示例 # 矩阵赋值import tvmA tvm.placeholder((10, 10)) B tvm.compute((10, 10), lambda i, j: A[i, j]) s tvm.create_schedule(B.op) # 调度 f tvm.build(s, [A, B], hello) # 编译生成代码 print(f.get_source()) # 打印生成的代码生成的代码 // hello tvm backend! void default_function( void* args, void* arg_type_ids, int32_t num_args, void* out_ret_value, void* out_ret_tcode) {// ......float* placeholder (float*)(((DLTensor*)arg0)[0].data);// ......float* compute (float*)(((DLTensor*)arg1)[0].data);// ......for (int32_t i 0; i 10; i) {for (int32_t j 0; j 10; j) {compute[((i * 10) j)] placeholder[((i * 10) j)]; // 矩阵赋值}} } 相关TVM API tvm.placeholder((n,), name‘a’) def placeholder(shape, dtypeNone, name“placeholder”)作用类似 tf.placeholder占位符后续可指定输入数据。 tvm.compute(A.shape, lambda i: A[i] B[i], name‘c’) def compute(shape, fcompute, name“compute”, tag“”, attrsNone)作用定义计算图。 fcompute 是 lambda function of indices- value,匿名函数。 tvm.create_schedule(C.op) def create_schedule(ops)作用为一系列Ops构建默认Schedule。 tvm.lower(s, [A, B, C], simple_modeTrue) * def lower(sch, args, name“default_function”, bindsNone, simple_modeFalse) 作用输入schedule对象和输入输出tensor list。如果 simple_mode 为True则输出simple and compact statement起始就是C语言形式的伪代码表示op操作具体过程。如果 simple_mode 为False我也不知道输出啥。 tvm.build(s, [A, B, C]) def build(inputs, argsNone, targetNone, target_hostNone, name“default_function”, bindsNone)通过输入Schedule等参数构建可运行的module。 mod.export_library(mod_fname) 与 tvm.module.load(mod_fname) def export_library(self, file_name, fcompileNone, **kwargs)def load(path, fmt“”)作用将 tvm.module.Module 导出为本地文件或将本地文件导入生成 tvm.module.Module 对象。 relay.frontend.from_mxnet(model, {‘data’: x.shape}) def from_mxnet(symbol, shapeNone, dtype“float32”, arg_paramsNone, aux_paramsNone)作用将MXNet模型转换为TVM Relay模型。 with relay.build_config(opt_level3) def build_config(opt_level2, fallback_device_nd.cpu(), required_passNone, disabled_passNone):作用为 relay.build 设置一些参数比如图优化等。 tvm.context(target) def context(dev_type, dev_id0)作用为给定的设备设置运行环境。 tvm.contrib.graph_runtime.create(graph, mod, ctx) def create(graph_json_str, libmod, ctx)作用通过 graph/module/ctx 创建实际可执行模块之后导入输入数据、获取模型预测结果都通过这个方法返回的对象。举例rt.set_input, rt.run, rt.get_output 等。 relay.save_param_dict(params) def save_param_dict(params)作用保存模型参数。 remote rpc.connect(‘172.31.0.149’, 9090) def connect(url, port, key“”, session_timeout0)作用建立远程rpc连接方便交叉编译等功能。该remote对象有很多功能remote.upload(mod_fname)上传文件remote.load_module(mod_fname)导入模块remote.cpu()建立远程context对象 tvm 调用分析 TVM代码走读九 计算和调度 import tvm from tvm import te import numpy as npA te.placeholder((m, n), nameA) B te.placeholder((m, n), nameB) C te.compute((m, n), lambda i, j: A[i, j] * B[i, j], nameC)compute python 接口 python/tvm/te/operation.py def compute(shape, fcompute, name“compute”, tag“”, attrsNone): 函数 def compute(shape, fcompute, namecompute, tag, attrsNone):Construct a new tensor by computing over the shape domain.The compute rule is result[axis] fcompute(axis)Parameters----------shape: Tuple of ExprThe shape of the tensorfcompute: lambda function of indices- valueSpecifies the input source expression计算函数name: str, optionalThe name hint of the tensortag: str, optionalAdditional tag information about the compute.attrs: dict, optionalThe additional auxiliary attributes about the compute.Returns-------tensor: TensorThe created tensorif isinstance(body, _tensor.TensorIntrinCall):for i, s in enumerate(shape[out_ndim:]):var_name ax str(i)dim_var.append(tvm.tir.IterVar((0, s), var_name, 4))op_node _ffi_api.TensorComputeOp(name,tag,dim_var,body.reduce_axis,out_ndim,body.intrin,body.tensors,body.regions,body.scalar_inputs)else:if not isinstance(body, (list, tuple)):body [body]body convert(body)op_node _ffi_api.ComputeOp(name, tag, attrs, dim_var, body)调用链 python/tvm/te/operation.py [def compute() 函数 ] — _ffi_api.TensorComputeOp() — src/te/operation/compute_op.cc ComputeOp::ComputeOp() ComputeOp::ComputeOp(std::string name, std::string tag, MapString, ObjectRef attrs,ArrayIterVar axis, ArrayPrimExpr body) {if (!attrs.defined()) {attrs MapString, ObjectRef();}auto n make_objectComputeOpNode();n-name std::move(name);n-tag std::move(tag);n-attrs std::move(attrs);n-axis std::move(axis);n-body std::move(body);if (n-body[0]-IsInstancetir::ReduceNode()) {const tir::ReduceNode* reduce n-body[0].astir::ReduceNode();n-reduce_axis reduce-axis;}VerifyComputeOp(n.get());data_ std::move(n); } te.compute可以总结为如下几步: 根据传入的fcompute,翻译成对应的表达式传入. 生成ComputeOpNode,记录计算节点. 根据计算节点,返回计算节点输出对应的Tensor.TVM 中 Relay 涉及到的 Pass 优化操作 Concept 一种 Pass 代表一种优化。比较多在 LLVM 中提到。 ModulePass是将整个程序视作一个单元处理的pass。 FunctionPass是以单个函数为作用域的pass, 每个函数间是相互独立的。 Pass high-level pass header file: include/tvm/relay/transforms.h src files: src/relay/pass python: python/tvm/relay/transform.py tensort level IR pass: header file include/tvm/tir/ir_pass.h src files: src/tir/pass python: python/tvm/tir/ir_pass.py 本文只涉及到 high-level pass。 tensort level IR pass 更多的是底层代码生成时做的优化如 VectorizeLoopUnrollLoopInjectPrefetchStorageRewrite 等。 ModulePass LambdaLift 将局部函数提升为全局函数。 在 src/relay/backend/vm/compiler.cc, src/relay/backend/vm/lambda_lift.cc。 RemoveUnusedFunctions 去掉 relay 的 IR 模块中未使用的函数。 Inline 将一个被 inline 标记的全局函数嵌入到 relay 的IR模块中。 EtaExpand 为构造函数添加抽象或者给一个函数添加全局变量。 如 square 被转化为 fn (%x: int32) - int32 { square(x) } See https://en.wikipedia.org/wiki/Lambda_calculus#%CE%B7-conversion PartialEval 在编译时评估静态的代码碎片尽可能多的做常量传播常量折叠代码嵌入等优化以减少运行时开销获得更多的融合优化。作为代价生成的code量会增加。 PrintIR 打印IR。通常作为一系列 pass 的结果用来debug。 PartitionGraph 将一个混合后端的relay程序分割到各自后端的计算区域。 ToANormalForm 将一个数据流图转化为行政范式 (Administrative Normal Form, A-Normal Form, ANF)。 将一个表达从隐式共享的图的形式转化为显式共享 也就是 ANF。 The scope of the root expression is the global scope. The scope of any non root expression is the least common ancestor of all it’s scope. Values are ordered by post-DFS order in each scope. FunctionPass DeadCodeElimination 去掉不影响程序结果的表达。将没有被索引到的 let bindings 去掉将被使用过一次的 let bindings 作为代码嵌入。 FoldConstant 折叠常量函数。 FuseOps 融合算子可以指定融合的优化级别 RewriteAnnotatedOps 重写被注释的算子 比如 on_device 会标记在哪一种设备上进行调度计算。帮助进行异构计算执行。 ToCPS 将一个表达转化为连续传递式样 (continuation passing style, CPS)。 CPS 意思是每一个函数将不会直接返回结果而是传递一个另外的函数作为参数然后将结果传到下一个续集。这样每一个函数调用时将会多一个参数表示其余的计算。每一个中间计算都会被传入一个续集。 ToGraphNormalForm 去除所有的 let binding, 并将所有的变量转化为直接的指针索引。返回的表达叫做 graph normal form。 SimplifyInference 在推理时简化一些特定的算子比如 batchnorm 会被代替为一些更加简单的算子。这部分 Efficient Deep Learning Inference on Edge Devices 有写。 FastMath 将非线性激活函数替换成近似计算的算子以获得更快的计算速度。一些情景下有损失计算精度的风险。 InferType 推理一个表达式的类别。获得的结果是一个有显式类别信息的新表达式以及它的返回类型。 EliminateCommonSubexpr 寻找并去掉共同的子表达式。比如有两个表达式被评估为等同则新建一个变量来替代它们两个。 CombineParallelConv2D 将并行运算的二维卷积合成为一个卷积如果合成的卷积的分支数大于某个最小值。 CombineParallelDense 将并行运算的稠密算子合并为批处理的矩阵乘法 (batch_matmul)如果合成的算子的分支数小于某个最小值。 BackwardFoldScaleAxis / ForwardFoldScaleAxis 将轴的缩放折叠进卷积或者稠密算子的weights中 https://github.com/apache/incubator-tvm/pull/2020 CanonicalizeOps 将一些深度学习的算子规范化为一系列简化的算子比如将 bias_add 规范化为先进行 expand_dims 然后做 broadcast_add AlterOpLayout 转换算子的布局或者将元算子替换为其他表达式。可以用来计算定制数据布局的卷积或者更加通用的weights的前置转换。 ConvertLayout 给定一个目标的数据布局将表达式大多数算子的数据布局转化为目的布局。在理想情况下只有两个起始和结束的布局需要转换。一般在relay转化别的框架时需要。主要使用 AlterOpLayout 和 InferCorrectLayout。 RFC - https://discuss.tvm.ai/t/layout-conversion-pass/4009 Legalize 将一个表达式转化为另一个表达式 (expr)可以基于算子的shapedtype或者 data layout 转化为另一个算子或者一系列算子。一般在target平台相关的优化中两个语等价的算子性能不一定会一样。 CanonicalizeCast 规范化 cast 表达式使得算子的融合更加方便。 MergeComposite 将多个模式相匹配的算子合并为一个复合算子。主要用在使用外部代码生成工具时多个算子map到同一个外部算子的情况。定义作为Wrapper使用。 在 src/relay/pass/annotate_target.cc AnnotateTarget 将表达式中的算子标注编译器或者部署平台使得算子被wrap为 compiler_beginsubgraph_start 和 compiler_end subgraph_end从而用做之后其他编译器的代码生成。定义作为Wrapper使用。 在 src/relay/pass/annotate_target.cc
http://www.pierceye.com/news/783990/

相关文章:

  • 写作网站哪个好用有没有必要给企业做网站
  • 长沙cms建站模板设计说明英文翻译
  • 做的差的网站河北网站制作公司地址
  • 网站的推广有哪些方式AWS免费套餐做网站可以吗
  • 如何建设公司网站 需要注意什么iis搭建多个网站
  • 青海住房与建设厅网站本地门户网站源码
  • 自己做付费网站网站版式有哪几种
  • 商丘市做1企业网站的公司贵阳网站建设是什么
  • 如何制作动漫网站模板下载定制网站制作广州
  • 西安网站策划我做的网站不知道网站怎么办啊
  • 商务类网站设计成都网站设计建设推荐
  • 网站建设浏览器不兼容阳信做网站
  • 站酷设计网站官网网址网站多国语言
  • 网站建设经费保障中国域名网官网
  • 网站备案如何查询在wordpress教程
  • 新准则中公司网站建设费用计入什么科目360网页入口
  • 公司要网站建设thinkphp商城源码
  • 网站的定义tomcat做公司网站
  • 小程序开发公司网站源码下载阿里云搭建公司网站
  • 网站营销方案设计公司凡科可以做视频网站吗
  • 网站seo优化费用wordpress 做商城
  • 宁波网站设计哪家公司好电子商务电商网站设计
  • 网站添加提醒租网站需要多少钱
  • 网站关键字优化地点如何用手机做网站吗
  • 中国建设银行网站签名通下载站长工具seo词语排名
  • 七牛云官网登录郑州优化网站收费标准
  • 三亚专业网站建设电商网站开发思路
  • app手机端电子商务网站功能提供网站建设课程
  • 福田皇岗社区做网站公司办公室布局效果图
  • 音乐播放网站怎么做北京终端区优化