深度学习系列72:torch-tensorrt入门

1. 安装

坑非常多,清华源阿里源都不行。使用官网源下载,这里的121可以改成你需要的东西:

python -m pip install torch torch-tensorrt tensorrt --extra-index-url https://download.pytorch.org/whl/cu121

2. 原理

我们来看一个实例:这是一个用于支持 torchscript 到 TensorRT 转换的项目。上面的代码用于将 addmm 运算展开成数个算子,方便后续映射 TensorRT 算子。

复制代码
void UnpackAddMM(std::shared_ptr<torch::jit::Graph>& graph) {
  // TensorRT implicitly adds a flatten layer in front of FC layers if necessary
  // 用于匹配的模式
  std::string addmm_pattern = R"IR(
    graph(%b, %x, %w, %beta, %alpha):
      %out: Tensor = aten::addmm(%b, %x, %w, %beta, %alpha)
      return (%out))IR";
  // 用于替换的模式
  std::string mm_add_pattern = R"IR(
    graph(%b, %x, %w, %beta, %alpha):
      %mm: Tensor = aten::matmul(%x, %w)
      %bias: Tensor = aten::mul(%b, %beta)
      %out: Tensor = aten::add(%bias, %mm, %alpha)
      return (%out))IR";

  // 创建子图重写器并注册匹配模式和替换模式
  torch::jit::SubgraphRewriter unpack_addmm;
  unpack_addmm.RegisterRewritePattern(addmm_pattern, mm_add_pattern);
  // 遍历graph,完成重写
  unpack_addmm.runOnGraph(graph);
  LOG_GRAPH("Post unpack addmm: " << *graph);
}

3. 简单例子

复制代码
import torch
def origin_func(x):
    x = x**2
    x = x**3
    return x

x = torch.rand(1, 2, 3, 4)
jit_model = torch.jit.trace(origin_func, x)
print(jit_model.graph)

# 匹配用的子图定义,注意常量必须为[value=2]属性
pattern = """
    graph(%x):
        %const_2 = prim::Constant[value=2]()
        %out = aten::pow(%x, %const_2)
        return (%out)
"""
# 替换用的子图定义
replacement = """
    graph(%x):
        %out = aten::mul(%x, %x)
        return (%out)
"""
torch._C._jit_pass_custom_pattern_based_rewrite_graph(pattern, replacement,jit_model.graph)
print(jit_model.graph)
相关推荐
嘉图明6 分钟前
《从数据殖民到算法正义:破解AI垄断的伦理与技术路径》
人工智能·算法
shadowtalon19 分钟前
基于CNN的猫狗图像分类系统
人工智能·深度学习·神经网络·机器学习·计算机视觉·分类·cnn
蹦蹦跳跳真可爱58923 分钟前
Python----神经网络(《Deep Residual Learning for Image Recognition》论文和ResNet网络结构)
人工智能·python·深度学习·神经网络
极术社区35 分钟前
【“星睿O6”评测】Armv9.2a、KLEIDIAI及vulkan加速llamacpp部署本地AI
大数据·人工智能
森哥的歌35 分钟前
2024年AI发展趋势全面解析:从多模态到AGI的突破
人工智能·agi
豆芽8191 小时前
Vision Transformer(ViT)
人工智能·深度学习·目标检测·计算机视觉·transformer
Oliverro1 小时前
嵌入式音视频通话EasyRTC基于WebRTC技术驱动智能带屏音箱:开启智能交互新体验
人工智能·音视频
終不似少年遊*2 小时前
MindSpore框架学习项目-ResNet药物分类-模型优化
人工智能·深度学习·机器学习·计算机视觉·分类·数据挖掘·华为云
GpuGeek2 小时前
一文走进GpuGeek | conda常用命令
人工智能·conda·gpu算力·云平台
Code_流苏2 小时前
《Python星球日记》 第55天:迁移学习与预训练模型
python·深度学习·微调·resnet·迁移学习·预训练模型·超参数优化