「解析」cache训练模型增强性能

实验采用的模型是 YOLOv5-7.0版本,m模型配置,便于实验测试,以 coco2012 val 数据集为例,

可以看出来,通过 ram 方式的训练并没有很明显的提升,分析原因可能是 硬盘本身的读取速度较快,可以满足显卡的吞吐,但是通过 ram形式训练占用内存比较大,如果内存足够的小伙伴可以尝试使用 ram形式进行训练,如果内存较小的情况,可以考虑更换速度较快的固态硬盘用作数据盘。

此外对于系统开设较多进程的情况,会降占用CPU的性能以及硬盘的读取速度,从而降低 GPU的数据读取,影响运算性能,故还是建议使用ram形式进行训练。

""" 博主的主机配置 """

CPU		: 	Intel 13700k
GPU		:	Nvidia 4090 
硬盘	:	致钛TiPro7000
内存	:	金士顿 FURY D5 6000 EXPO 16G x 4
主板	:  华硕 ROG STRIX Z690-G
实验batch size内存占用训练时长
ram1628.7GB28:29
disk167.2GB28:17
ramauto29.5GB20:24
diskauto8.3GB20:29

将 Data 移至 ram

实验结果

batch size 为16,YOLOv5-7.0 m 模型
# From ram
Transferred 481/481 items from yolov5m.pt
AMP: checks passed 
optimizer: SGD(lr=0.01) with parameter groups 79 weight(decay=0.0), 82 weight(decay=0.0005), 82 bias
albumentations: Blur(p=0.01, blur_limit=(3, 7)), MedianBlur(p=0.01, blur_limit=(3, 7)), ToGray(p=0.01), 
				CLAHE(p=0.01, clip_limit=(1, 4.0), tile_grid_size=(8, 8))
train: Scanning G:\coco2017\labels\train2017.cache... 117266 images, 1021 backgrounds, 0 corrupt: 100%|██████████| 118287/118287 00:00
train: 95.1GB RAM required, 42.9/63.7GB available, not caching images 
val: Scanning G:\coco2017\labels\val2017.cache... 4952 images, 48 backgrounds, 0 corrupt: 100%|██████████| 5000/5000 00:00
val: Caching images (4.1GB ram): 100%|██████████| 5000/5000 00:01

AutoAnchor: 4.45 anchors/target, 0.995 Best Possible Recall (BPR). Current anchors are a good fit to dataset 
Plotting labels to runs\train\exp5\labels.jpg... 
Image sizes 640 train, 640 val
Using 2 dataloader workers
Logging results to runs\train\exp5
Starting training for 100 epochs...

      Epoch    GPU_mem   box_loss   obj_loss   cls_loss  Instances       Size
       0/99      5.72G    0.03863    0.05964    0.01552        206        640: 100%|██████████| 7393/7393 28:29
                 Class     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 157/157 00:28
                   all       5000      36335       0.69      0.562      0.606      0.415


#---------------------------------------------------------------------------------------------------------------------------------

# From Disk
Transferred 481/481 items from yolov5m.pt
AMP: checks passed 
optimizer: SGD(lr=0.01) with parameter groups 79 weight(decay=0.0), 82 weight(decay=0.0005), 82 bias
albumentations: Blur(p=0.01, blur_limit=(3, 7)), MedianBlur(p=0.01, blur_limit=(3, 7)), ToGray(p=0.01), 
				CLAHE(p=0.01, clip_limit=(1, 4.0), tile_grid_size=(8, 8))
train: Scanning G:\coco2017\labels\train2017.cache... 117266 images, 1021 backgrounds, 0 corrupt: 100%|██████████| 118287/118287 00:00
val: Scanning G:\coco2017\labels\val2017.cache... 4952 images, 48 backgrounds, 0 corrupt: 100%|██████████| 5000/5000 00:00

AutoAnchor: 4.45 anchors/target, 0.995 Best Possible Recall (BPR). Current anchors are a good fit to dataset 
Plotting labels to runs\train\exp4\labels.jpg... 
Image sizes 640 train, 640 val
Using 2 dataloader workers
Logging results to runs\train\exp4
Starting training for 100 epochs...

      Epoch    GPU_mem   box_loss   obj_loss   cls_loss  Instances       Size
       0/99      5.72G    0.03863    0.05964    0.01552        206        640: 100%|██████████| 7393/7393 28:17
                 Class     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 157/157 00:27
                   all       5000      36335       0.69      0.562      0.606      0.415

1、AutoBatch From ram

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、From ram

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

From Disk Autobatch
在这里插入图片描述


2、From Disk

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

### TensorRT 模型工作原理及实现机制 #### 1. TensorRT 的核心功能概述 TensorRT 是 NVIDIA 提供的一个高性能深度学习推理库,专注于加速神经网络模型的推理过程。它通过对模型进行优化、降低精度(FP32 到 FP16 或 INT8)、融合层操作等方式提升性能[^1]。 #### 2. 权重生成与加载 在 TensorRT-LLM 框架中,模型权重的生成和加载是一个关键环节。通过定义特定的数据结构和接口,开发者能够将预训练模型的权重导入到 TensorRT 中,并确保其正确性。这一过程涉及多个步骤,包括但不限于权重文件解析、张量映射以及内存分配。 #### 3. 引擎构建流程 当使用 TensorRT 构建推理引擎时,主要分为以下几个方面: - **图优化**:TensorRT 对输入的计算图进行分析,移除冗余节点并合并可组合的操作。 - **核函数选择**:基于目标硬件特性,TensorRT 自动挑选最高效的 CUDA 核函数。 - **量化支持**:为了进一步提高吞吐量和减少延迟,TensorRT 支持多种低精度模式(如 FP16 和 INT8)。这种技术能够在保持较高准确性的同时显著减小模型大小和运算复杂度[^2]。 #### 4. KV Cache 在 LLM 推理中的作用 对于大型语言模型 (LLMs),KV Cache 技术尤为重要。由于自回归解码的特点,在每一步生成新 token 时都需要重复利用之前步长产生的 key-value 向量。如果每次都重新计算这些向量,则会造成巨大的资源浪费。因此,引入 kv cache 可以有效缓解此问题——即只保留必要的历史信息而不必反复求值[^4]。 #### 5. Triton 集成与服务化部署 Triton Inference Server 能够很好地配合 TensorRT 工作,提供灵活的服务端解决方案。具体来说,它可以接收来自客户端的各种请求并将它们分发至对应的 TensorRT 执行实例;最终再把结果封装回传给调用方。这种方式不仅简化了开发者的负担,而且增强了系统的扩展性和兼容性。 #### 6. 挑战与注意事项 尽管 TensorRT 功能强大,但在实际应用过程中仍存在不少挑战。例如,不同框架之间的差异可能导致直接迁移困难重重;另外还需要注意算子替换规则、动静态形状切换等问题。这就要求相关人员不仅要熟悉底层架构设计原则,还要具备丰富的实战经验[^3]。 ```python import tensorrt as trt def build_engine(onnx_file_path, engine_file_path): TRT_LOGGER = trt.Logger(trt.Logger.WARNING) with trt.Builder(TRT_LOGGER) as builder, \ builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)) as network, \ trt.OnnxParser(network, TRT_LOGGER) as parser: config = builder.create_builder_config() config.max_workspace_size = 1 << 30 with open(onnx_file_path, 'rb') as model: if not parser.parse(model.read()): print('Failed to parse the ONNX file.') for error in range(parser.num_errors): print(parser.get_error(error)) return None engine = builder.build_serialized_network(network, config) with open(engine_file_path, "wb") as f: f.write(engine) build_engine("model.onnx", "model.engine") ``` 上述代码展示了如何从 ONNX 文件创建一个 TensorRT Engine 并保存下来以便后续使用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ViatorSun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值