TensorRT python API 文档翻译

本文档详细介绍了如何使用TensorRT的Python API进行模型导入、Engine创建与序列化,以及如何执行推断过程。涵盖了从模型导入到推断的完整流程,包括使用不同格式如Caffe、TensorFlow和ONNX的模型导入,以及如何调整Engine参数以优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

近期需要研究如何使用TensorRT的python API,翻译了部分文档,做我个人的笔记,大家也可分享交流,如有错误,感谢勘误.
参考网址:Using The Python API

Using The Python API

1 导入TRT

import tensorrt as tf
TRT_LOGGER = trt.Logger(trt.Logger.WARNING)

启动一个logging界面,以输出TRT的errors,warnings和信息化的信息(informational messages), 在以上代码中,我们已经抑制了信息化信息输出,仅仅报告warning和errors.

2.创建python定义的网络

在部署TensorRT推断时第一步是根据你的模型创建TRT网络。

最简单的方式是使用TRT解析库(TRT parser library),支持使用以下格式序列化模型:

  • Caffe(both BVLC and NVCaffe)
  • Supports ONNX releases up to ONNX 1.6, and ONNX opsets 7 to 11, and
  • UFF (used for TensorFlow)

一个可替代方案是直接使用TensorRT Network API定义模型,需要你去创建一小部分API来被调用,
以定义网络图中的每一层和实现你自己训练参数的导入机制.

2.1 使用Python API逐层搭建

目前未用到,不做翻译.

2.2 使用Python解析器导入模型

主要分为3个步骤:

  1. 创建 TRT builder 和 network
  2. 为特定的格式创建TRT 解析器
  3. 使用解析器解析输入的模型和populate网络

builder必须在network前创建,因为它对于network来讲是个factory.不同的parser有不同的机制来mark网络的输出.

2.3 从Caffe中导入模型

目前未用到,不做翻译

2.4 从Tensorflow中导入

  • Step1. import tensorrt as tf
  • Step2. 为tensorflow模型创建一个frozen TensorFlow模型. 如何将Tensorflow模型freez进一个stream可以见Freezing A TensorFlow Graph
  • Step3. 使用UFF converter来讲一个frozen tensorflow模型转为UFF文件,代码为:
convert-to-uff frozen_inference_graph.pb

若使用以上命令,可以使用代码python -c “import uff; print(uff.\__path__)” 找到UFF位置

  • Step4. 定义模型的位置,例如,对例子而言
model_file = '/data/mnist/mnist.uff'
  • Step5. 创建一个builder,network和parser:
with trt.Builder(TRT_LOGGER) as builder, builder.create_network() as network, trt.UffParser() as parser:
         parser.register_input("Placeholder", (1,28,28))
         parser.register_output("fc2/Relu")
         parser.parse(model_file, network)

3.使用Python创建一个Engine

builder中函数的作用之一是搜索CUDA kernels的catalog,以最快速部署.因此需要在building时需要使用同一个GPU,engine优化将在其上运行.
有两个重要的参数: maximun batch sizemaximum workspace size

  • maximum batch size指定TRT优化的batch size,在运行时,必须选用更小的batch size
  • Layer需要临时的workspace,参数限制了network中所有曾可用的最大的工作空间大小,如果给的空间不充足,TRT针对给定的layer可能无法找到implementation.

流程:

  • step1. 使用build对象创建engine
 with trt.Builder(TRT_LOGGER) as builder, builder.create_builder_config() as config:
   config.max_workspace_size = 1 << 20 # This determines the amount of memory available to the builder when building an optimized engine and should generally be set as high as possible.
   with builder.build_engine(network, config) as engine:

 #Do inference here

当engine创建时,TRT复制权重.
- Step2.进行推断.

4. 使用Python序列化(serialize)一个模型

到第三步,可用序列化engine,也可以直接使用engine进行推断.序列化和反序列化是可选的.
序列化模型后,可用转换engine为存储的格式,可用在以后进行推断.使用这个序列化后的文件做推断,仅仅需要简单的反序列化engine.
序列化和反序列化是可选的,因为序列化是极其小耗时间的,序列化可用每次避免重复创建engine.
Notes:序列化的engines不是扩平台或者跨TRT版本的.engine对特定的用来创建它们的GPU模型是定制的.

  • Step1. 序列化模型
  serialized_engine = engine.serialize()
  • Step2.反序列化来执行推断,反序列化需要创建一个runtime对象
    with trt.Runtime(TRT_LOGGER) as runtime: engine = runtime.deserialize_cuda_engine(serialized_engine)

同样可以指定序列化为一个文件,然后从文件中读回它
step1. 序列化并写入文件

   with open(“sample.engine”, “wb”) as f:
		f.write(engine.serialize())
  • Step2. 从文件中读取engine并反序列化
 with open(“sample.engine”, “rb”) as f, trt.Runtime(TRT_LOGGER) as runtime:
      engine = runtime.deserialize_cuda_engine(f.read())

5. 使用Python执行推断

  • Step1. 为输入输出分配一些host和device buffers
   # Determine dimensions and create page-locked memory buffers (i.e. won't be swapped to disk) to hold host inputs/outputs.
   	h_input = cuda.pagelocked_empty(trt.volume(engine.get_binding_shape(0)), dtype=np.float32)
   	h_output = cuda.pagelocked_empty(trt.volume(engine.get_binding_shape(1)), dtype=np.float32)
   	# Allocate device memory for inputs and outputs.
   	d_input = cuda.mem_alloc(h_input.nbytes)
   	d_output = cuda.mem_alloc(h_output.nbytes)
   	# Create a stream in which to copy inputs/outputs and run inference.
   	stream = cuda.Stream()
  • Step2. 创建一些空间来保存中间激活值,因为engine包含network定义和训练参数,因此需要额外的空间.
    with engine.create_execution_context() as context:
		# Transfer input data to the GPU.
		cuda.memcpy_htod_async(d_input, h_input, stream)
		# Run inference.
		context.execute_async(bindings=[int(d_input), int(d_output)], stream_handle=stream.handle)
		# Transfer predictions back from the GPU.
		cuda.memcpy_dtoh_async(h_output, d_output, stream)
		# Synchronize the stream
		stream.synchronize()
		# Return the host output.
<think>好的,我现在需要帮助用户了解如何在Windows系统上下载和使用Hugging Face模型。首先,我得回忆一下Hugging Face的生态系统,他们主要提供Transformers库,还有模型仓库。用户可能对Python和深度学习有一定的了解,但可能不熟悉具体步骤,所以需要分步骤讲解。 首先,用户需要在Windows环境下安装必要的库。Hugging Face的Transformers库是核心,但可能还需要其他依赖,比如PyTorch或TensorFlow,因为Transformers支持这两个框架。我应该建议用户根据他们的需求选择安装其中一个。同时,datasets库如果用户需要加载数据集的话也会用到,但可能用户现在只需要基础功能,所以先提Transformers和PyTorch/TensorFlow。 然后是安装步骤,用户可能需要用pip或者conda安装。考虑到用户可能使用的是pip,所以给出pip install transformers命令。另外,PyTorch的安装可能需要去官网获取正确的命令,特别是Windows版本,所以建议用户查看PyTorch官网的命令,避免直接给出可能过时的指令。 接下来是下载模型的部分。Hugging Face的模型可以通过from_pretrained方法自动下载,但用户可能需要预先下载到本地,比如网络问题或者离线使用的情况。这时候可以使用snapshot_download函数,或者直接使用git lfs,不过这可能对新手有点复杂。需要详细说明两种方式:在线自动下载和手动下载到本地后加载。 然后,使用模型的步骤。用户可能想了解如何加载模型和分词器,进行推理任务,比如文本分类、生成等。需要给出示例代码,比如使用pipeline API,这样最简单,适合快速上手。另外,对于更自定义的使用,展示如何显式地加载模型和分词器,进行编码和预测。 另外,注意事项方面,需要提到模型的文件大小,尤其是大模型可能需要较长时间下载。还有选择适合任务的模型,比如BERT适合文本分类,GPT-2适合生成等。另外,缓存路径的问题,用户可能需要更改缓存目录,可以通过环境变量设置。 用户还可能遇到的问题包括网络连接问题,特别是国内用户可能访问Hugging Face较慢,可能需要镜像源或者代理。这时候可以建议设置镜像,比如修改环境变量HF_ENDPOINT。另外,硬盘空间的问题,模型可能占用几个GB,需要提醒用户注意空间。 最后,给出一个总结,让用户清楚整个流程:安装环境、下载模型、使用模型。同时提供示例代码,让用户可以直接复制和测试,比如用BERT做文本分类的例子。 需要检查是否有遗漏的步骤,比如是否需要先注册Hugging Face账号?大部分模型是公开的,不需要登录,但私有模型可能需要,但用户可能只是使用公开模型,所以可能不需要提到。另外,是否需要使用虚拟环境?虽然建议,但对于新手可能暂时不提,避免复杂化。 现在整理这些思路,分步骤写出,并确保示例代码正确,特别是Windows下的路径处理,比如反斜杠可能需要双反斜杠或者原始字符串。此外,确保代码中的模型名称是存在的,比如bert-base-uncased,确保用户运行时不会出错。</think>以下是在Windows系统上下载和使用Hugging Face模型的详细指南: --- ### **1. 环境准备** #### 安装必要库 ```bash # 安装Transformers库(核心工具) pip install transformers # 可选:安装PyTorch(根据需求选择CPU/GPU版本) # 从PyTorch官网获取安装命令:https://pytorch.org/ # 示例(CPU版本): pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu # 可选:安装TensorFlow(二选一) pip install tensorflow ``` --- ### **2. 下载模型** #### 方式1:自动下载(在线) 直接在代码中调用模型,Hugging Face会自动下载并缓存: ```python from transformers import AutoModel, AutoTokenizer model_name = "bert-base-uncased" # 示例模型 model = AutoModel.from_pretrained(model_name) tokenizer = AutoTokenizer.from_pretrained(model_name) ``` #### 方式2:手动下载(离线) - **通过Hugging Face官网**: 1. 访问 [Hugging Face Hub](https://huggingface.co/models),搜索模型(如`bert-base-uncased`)。 2. 进入模型页面 → 点击“Files and versions” → 下载所有文件到本地目录(如 `./models/bert-base-uncased`)。 - **通过代码下载**: ```python from huggingface_hub import snapshot_download snapshot_download(repo_id="bert-base-uncased", local_dir="./models/bert-base-uncased") ``` --- ### **3. 使用模型** #### 示例1:快速推理(使用Pipeline) ```python from transformers import pipeline # 文本分类示例 classifier = pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english") result = classifier("I love using Hugging Face models!") print(result) # 输出:标签和置信度 ``` #### 示例2:自定义加载本地模型 ```python from transformers import AutoModel, AutoTokenizer # 加载本地已下载的模型 model_path = "./models/bert-base-uncased" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModel.from_pretrained(model_path) # 编码文本并推理 inputs = tokenizer("Hello, world!", return_tensors="pt") outputs = model(**inputs) print(outputs.last_hidden_state.shape) # 输出特征维度 ``` --- ### **4. 注意事项** 1. **网络问题**: - 国内用户可通过设置镜像加速下载: ```python import os os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" # 镜像源 ``` - 或使用代理(需配置`HTTP_PROXY`环境变量)。 2. **模型缓存路径**: - 默认缓存目录:`C:\Users\<用户名>\.cache\huggingface\hub`。 - 自定义路径:设置环境变量`HF_HOME`。 3. **硬件要求**: - 大模型(如GPT-2/3)需较高显存,若显存不足可尝试小规模模型(如`distilbert`)。 --- ### **5. 进阶使用** - **微调模型**:使用`Trainer`类结合自有数据集。 - **模型导出**:将模型转换为ONNX/TensorRT格式提升推理速度。 - **更多任务**:文本生成、翻译、问答等,参考[Hugging Face文档](https://huggingface.co/docs/transformers/index)。 --- 通过以上步骤,你可以轻松在Windows系统中下载并使用Hugging Face模型。遇到问题时,可查阅官方文档或社区论坛(如GitHub Issues)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值