详情页标题前

腾讯云计算加速套件TACO KitPytorch 模型优化

详情页1

模型准备

TACO Infer 支持对 Pytorch TorchScript 和 torch.nn.Module 两种模型格式进行优化。通常在生产环境中,性能最优的方式是导出 TorchScript 模型后进行部署。TorchScript 模型也是 TACO Infer 支持最完善的模型格式,推荐您优先使用 TorchScript 模型格式。在优化前,您需要准备好导出后的 TorchScript 模型。模型导出示例代码如下:

import pathlib
import torchfrom torchvision.models.resnet import Bottleneck, ResNet
from taco.utils.network import wget_url

class ImageClassifier(ResNet): def __init__(self): super(ImageClassifier, self).__init__(Bottleneck, [3, 8, 36, 3]) self.ckpt_url = "https://taco-1251783334.cos.ap-shanghai.myqcloud.com/model/pytorch/checkpoints/resnet152/resnet152-b121ed2d.pth"

def gen_model(work_dir: str) -> torch.nn.Module: model = ImageClassifier() model_path = pathlib.Path(work_dir) / "model.pth" wget_url(model.ckpt_url, model_path, disable_bar=False) model.load_state_dict(torch.load(model_path)) return model

model = gen_model(".")script_model = torch.jit.script(model)scirpt_model_path = "./model.pt"torch.jit.save(script_model, scirpt_model_path)

导入TACO Infer

使用TACO Infer优化模型首先需要导入python模块:

from taco import optimize_gpu, OptimizeConfig, ModelConfig

调用优化接口

配置好输入模型,输出模型目录,测试数据,优化配置,模型配置之后,调用 optimize_gpu 即可对模型进行优化。关于优化接口参数的详细信息,请参见 TACO Infer 接口。

report = optimize_gpu(    input_model,    output_model_dir,    test_data = test_data,    optimize_config = optimize_config,    model_config = model_config)

模型优化结束后,会产出一个保存在您指定的目录中的优化后的模型,以及一个包括硬件信息,软件信息及优化过程相关指标的优化报告。优化报告的详细信息如以下样例所示:

{    "hardware": {        "device": "NVIDIA A10, driver: 470.82.01",        "driver": "470.82.01",        "num_gpus": "1",        "cpu": "AMD EPYC 7K83 64-Core Processor, family '25', model '1'"    },    "software": {        "taco version": "0.2.10",        "framework": "pytorch",        "framework version": "1.12.0+cu113",        "torch device": "NVIDIA A10"    },    "summary": {        "working directory": "/root/resnet152",        "input model": "ImageClassifier",        "output model folder": "optimized_dir",        "input model format": "torch.nn.Module memory object",        "status": "satisfactory",        "baseline latency": "20ms 102us",        "accelerated latency": "5ms 418us",        "speedup": "3.71",        "optimization time": "1min 2s 542ms",        "env": "{}"    }}

关于优化报告的详细字段说明,请参见 TACO Infer 接口。完整的优化示例代码如下:

import torch
from taco.optimizer.optimize import optimize_gpufrom taco import ModelConfigfrom taco import OptimizeConfig

def gen_test_data(batch_size: int = 1) -> torch.Tensor: IMAGE_SIZE=224 return torch.rand(batch_size, 3, IMAGE_SIZE, IMAGE_SIZE)

# the path of torchscript model exported in previous chaptersscirpt_model_path = "./model.pt"test_data = gen_test_data(batch_size=1)optim_cfg = OptimizeConfig()model_cfg = ModelConfig()
report = optimize_gpu(input_model=scirpt_model_path, output_model_dir="optimized_dir", test_data=test_data, optimize_config=optim_cfg, model_config=model_cfg)

优化完成后,在配置好的模型输出目录,可以看到产出的优化模型:

[root@60abf692a8a1 /root/resnet152]#ll optimized_dir/total 454Mdrwxr-xr-x 3 root root 4.0K Jan  5 15:30 ../drwxr-xr-x 2 root root 4.0K Jan  5 15:30 ./-rw-r--r-- 1 root root 454M Jan  5 15:30 optimized_recursive_script_module.pt

可以看到,TACO 优化模型后会产出 TorchScript 格式的模型文件供您进行部署。

模型验证

经过以上步骤,得到优化后的模型文件之后,您可以使用 torch.jit.load 接口加载该模型,验证其性能和正确性。加载模型运行的代码如下所示:

import torchimport taco

def gen_test_data(batch_size: int = 1) -> torch.Tensor: IMAGE_SIZE=224 return torch.rand(batch_size, 3, IMAGE_SIZE, IMAGE_SIZE)

optimized_model = torch.jit.load("optimized_dir/optimized_recursive_script_module.pt")test_data = gen_test_data(batch_size=1).cuda()
with torch.no_grad(): output = optimized_model(test_data) print(output.shape)

需要注意的是,由于优化后的模型包含经过高度优化的 TACO Kit 自定义算子,因此运行模型之前,需要执行import taco加载包含自定义算子的动态链接库。您根据自己的输出模型目录调整好相关参数之后,运行以上代码,即可加载优化后的模型进行推理计算。输出日志如下:

[root@a2c4f3d901e6 /root/resnet152]#python infer.pytorch.Size([1, 1000])

可以看到,模型正常运行并且输出了计算结果。
官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/146423.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 阿里云负载均衡包年包月-云淘科技

    传统型负载均衡CLB支持包年包月计费模式,且包年包月CLB的公网计费方式只支持按固定带宽计费。 说明 CLB实例按照实例规格分为性能保障型实例和性能共享型实例,性能共享型实例已不支持新购。本文介绍的实例均指性能保障型实例。 包年包月说明 特性 说明 计费说明 包年包月是一种先付费后使用的计费方式,也称为预付费。包年包月,可以帮助您提前预留资源。 适用场景 包…

    阿里云负载均衡 2023年12月10日
  • 阿里云RDS数据库便宜易用-云淘科技

    云数据库RDS便宜易用,具有灵活计费、按需变配、即开即用等优点。 灵活计费 RDS提供灵活的计费方式,帮您节省使用成本。 对于短期需求,您可以创建按量付费(按小时计费)的实例,用完可立即释放实例,节省费用。 对于长期需求,您可以创建包年包月的实例,价格更实惠,且购买时长越长,折扣越多。 更多信息,请参见计费方式。 按需变配 在业务初期,您可以购买小规格的RD…

    阿里云数据库 2023年12月9日
  • 腾讯云云点播购买指引

    注册腾讯云 使用云点播服务前,您需要 注册腾讯云 账号。 申请云点播服务 1. 访问 云点播介绍页 ,单击页面中的免费开通,您将跳转至“开发者资质信息认证”页面。2. 单击前往认证,跳转至官网资质认证信息页面,请正确填写该页面所需信息,通过 实名认证 后,即可访问控制台。 购买云点播服务 云点播目前支持的计费方式有按量计费(后付费)和资源包(预付费)。按量计…

    腾讯云 2023年12月9日
  • 腾讯云Serverless HTTP 服务快速部署 Koa 框架

    操作场景 本文将为您指导如何通过 Web Function,将您的本地 Koa 项目快速部署到云端。说明本文档主要介绍控制台部署方案,您也可以通过命令行完成部署,详情请参见 通过命令行完成框架部署。 前提条件 在使用腾讯云云函数服务之前,您需要 注册腾讯云账号 并完成 实名认证。 操作步骤 模板部署:一键部署 Koa 项目 1. 登录 Serverless …

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云Serverless应用中心部署 Vue + Express + PostgreSQL 全栈网站-同尘科技

    操作场景 该模板可以快速部署一个基于 Vue + Express + PostgreSQL 的全栈 Serverless 应用。主要包含以下组件:Serverless RESTful API:通过云函数和 API 网关构建的 Express 框架实现 RESTful API。Serverless 静态网站:前端通过托管 Vue.js 静态页面到 COS 对象…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。