【PyTorch基础】将pytorch模型转换为script模型

摘要:
操作步骤:1.将PyTorch模型转换为Torch脚本;1) 通过火炬转换为火炬脚本。吉特。查出2) 通过火炬转换为火炬脚本。吉特。剧本2.将脚本模型序列化为文件;3.在c++中加载脚本模块;安装并使用LibTorch;4.在c++中执行脚本模块;code#-*-编码:utf-8-*-#@时间:2021.07.2716:00#@作者:xx

操作步骤:

1. 将PyTorch模型转换为Torch脚本;

1)通过torch.jit.trace转换为torch脚本;

2)通过torch.jit.script转换为torch脚本;

2. 将脚本模型序列化为文件;

3. 在c++中加载脚本模块;

安装使用LibTorch;

4. 在c++中执行脚本模块;

code

# -*- coding: utf-8 -*-
# @Time  : 2021.07.27 16:00
# @Author: xxx
# @Email : 
# @File  : torch2script.py
"""
Transform torch model to Script module.
"""
import torch
from unet import UNet
from config import UNetConfig

cfg = UNetConfig()
model_path = './checkpoints/epoch_500.pth'
# model
model = UNet(cfg)
model.load_state_dict(torch.load(model_path), strict=True)
model.eval()
# an example input.
example = torch.rand(5, 3, 625, 620)  # NCHW.
# Trace to Torch script.
# Use torch.jit.trace to generate a troch.jit.scriptmodule via tracing.
# 将 PyTorch 模型通过跟踪转换为 Torch 脚本,必须将模型的实例以及示例输入传递给torch.jit.trace函数。
# 这将产生一个torch.jit.ScriptModule对象,并将模型评估的轨迹嵌入到模块的forward方法中.
traced_script_module = torch.jit.trace(model, example)
output = traced_script_module(example)
output1= model(example)
traced_script_module.save('./unet_trace_module.pt')
# print('output:  ', output)
# print('output1: ', output1)
print('traced_script_module graph: 
', traced_script_module.graph)
print('traced_script_module code : 
', traced_script_module.code )

# ERROR!!!!!
# # Script module
# model_script = UNet(cfg)
# sm = torch.jit.script(model_script)
# output2 = sm(example)
#
# # Serialize model.
# sm.save('./unet_script_module.pt')

 注意,执行脚本模型文件进行测试的输入大小必须和生成脚本模型的输入大小一致,否则执行的时候会出错;

error

/home/xxx/lib/python3.8/site-packages/torch/nn/modules/module.py(704): _slow_forward
/home/xxx/lib/python3.8/site-packages/torch/nn/modules/module.py(720): _call_impl
/home/xxx/lib/python3.8/site-packages/torch/jit/__init__.py(1109): trace_module
/home/xxx/lib/python3.8/site-packages/torch/jit/__init__.py(953): trace
torch2script.py(25): <module>
RuntimeError: Sizes of tensors must match except in dimension 1. Got 78 and 79 in dimension 3 (The offending index is 1)

Aborted (core dumped)

 5. CUDA相关函数

  std::cout <<"torch::cuda::is_available():" << torch::cuda::is_available() << std::endl;
  std::cout <<"torch::cuda::cudnn_is_available():" << torch::cuda::cudnn_is_available() << std::endl;
  std::cout <<"torch::cuda::device_count():" << torch::cuda::device_count() << std::endl;

6. GPU/CPU模式

torch::DeviceType device_type = at::kCPU; // 定义设备类型
if (torch::cuda::is_available())
    device_type = at::kCUDA;
model.to(device_type);
std::vector<torch::jit::IValue> inputs;
inputs.push_back(torch::ones({ 1, 3, 224, 224 }).to(device_type));

 device

    torch::DeviceType device_type;
    device_type = torch::kCUDA;
    torch::Device device(device_type);
    torch::jit::script::Module module = torch::jit::load(model_path, device);

参考

1. 在 C++ 中加载 TorchScript 模型

2. 基于C++的PyTorch模型部署

3. torch.jit.trace

4. torch.jit.script

5. 使用C++调用并部署pytorch模型

6. libtorch c++部署-使用GPU

免责声明:文章转载自《【PyTorch基础】将pytorch模型转换为script模型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇蜗牛星际黑群晖硬盘休眠的设置转:ORACLE的JDBC连接方式:OCI和THIN下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

airtest之脚本批量运行

项目目录      根目录:D:workspaceairtestsuite   脚本:douyin.air,dy.air   日志目录:log     日志目录由custom_launcher.py自动生成,custom_launcher.py目录:D:workspaceairtestsuitecustom_launcher.py,即在根目录下      ...

一文梳理同源策略与跨域技术

1.同源策略 同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。 1.1何谓同源? 如果两个 URL 的 protocol、port (如果有指定的话)和 host 都相同的话,则这两个 URL 是同源。这个方案也被称为“协议/主机/端口元组”,或者直接...

使用zabbix监控oracle数据库

使用zabbix监控oracle数据库  一、概述 zabbix是一款非常强大,同时也是应用最为广泛的开源监控软件,本文将给大家介绍如何利用zabbix+python监控oracle数据库。 二、环境介绍 以下是我安装的环境,实际部署时并不需要跟我的环境一样。 1. 监控机 Redhat Linux 6.5 + Zabbix server 3.4.10...

toad 快捷键大全

现在在企业中,操作oracle数据库的客户端,除了PL/SQL外,使用的较多的就是TOAD了!toad记得F9执行全部sql和Ctrl + Enter执行选中sql就行了,有啥需要的再查吧。快捷设置在View -- Option -- Toolbars/Menus -- Shotcuts,toad管快捷键叫shotcut,一开始找key这样的字眼没找到。...

网页制作技巧:iframe自适应高度

转自:http://www.enet.com.cn/article/2012/0620/A20120620126237.shtml 通过Google搜索iframe 自适应高度,结果5W多条,搜索iframe 高度自适应,结果2W多条。 我翻了前面的几十条,刨去大量的转载,有那么三五篇是原创的。而这几篇原创里面,基本上只谈到如何自适应静的东西,就是没有考虑...

torch_geometric安装

因为需要跑一些别人的GCN的任务,所以就要安装相关的包; 首先要注意cuda版本和pytorch中的对应关系,必须严格对应,比如我的机器上,cuda版本是10.1; pytorch的cuda版本也是10.1,之前其实是10.2,又重装了一遍; pytorch版本是1.4; python版本是3.6;然后在这个网页上 https://pytorch-ge...