用多张GPU 显示卡 加速TensorFlow Object Detection API 模型训练的过程

本文介绍如何使用多张GPU显示卡加速TensorFlow Object Detection API模型的训练过程。通过修改配置文件,调整batch size和optimizer参数,利用多GPU卡进行并行计算,提高训练效率。文中详细讲解了指令设置和GPU使用情况的监测。

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

本篇记录如何使用多张GPU 显示卡,加速TensorFlow Object Detection API 模型训练的过程。

虽然TensorFlow Object Detection API 已经有支援多张GPU 卡平行计算的功能,但是缺乏说明文件,所以我自己也不是非常确定该怎么用,以下只是我目前尝试出来的方式,仅供参考。


这里我们接续之前的TensorFlow Object Detection API自行训练模型教学,将Oxford-IIIT Pet Dataset的范例改成多GPU的版本。

 

使用多GPU卡时,会把每个batch的资料分散至每张GPU卡,也就是可以让batch size变大,所以在train_configbatch_size要自己修改一下,要让资料可以平均分散至每张GPU卡,最简单的修改方式就是看自己有多少张GPU卡,就乘以多少。

在预设的设定值中,batch_size的值是1,现在我打算用3张GPU卡,所以就改成3


 
  1. train_config: {
  2. batch_size: 3
  3. optimizer {
  4. # [略]
  5. }
  6. # [略]
  7. }

由于batch size变大了,收敛的速度应该也会变快,所以optimizer内的参数应该也是要改的,不过要怎么改就要看实际情况而定,这个部分就自己看着办。

改好设定档之后,接着就可以使用多张GPU 卡平行运算,使用的指令几乎没有变,只是加上两个参数:

  • --num_clones:指定GPU 卡的数量。
  • --ps_tasks:指定参数伺服器的数量。

另外再以CUDA_VISIBLE_DEVICES指定要使用哪几张GPU卡,完整的指令搞如下:


 
  1. #设定档路径
  2. PIPELINE_CONFIG = " object_detection/data/faster_rcnn_resnet101_pets.config "
  3. #训练结果放置路径
  4. MY_MODEL_DIR = " my_model "
  5. #使用前三张GPU卡进行训练
  6. CUDA_VISIBLE_DEVICES = 0 , 1 , 2 python object_detection/train.py \
  7. --logtostderr \
  8. --pipeline_config_path= ${ PIPELINE_CONFIG } \
  9. --train_dir= ${ MY_MODEL_DIR } /train \
  10. --num_clones =3 --ps_tasks=1
  11. #使用第四张GPU卡进行验证
  12. CUDA_VISIBLE_DEVICES = 3 python object_detection/ eval .py \
  13. --logtostderr \
  14. --pipeline_config_path= ${ PIPELINE_CONFIG } \
  15. --checkpoint_dir= ${ MY_MODEL_DIR } /train \
  16. --eval_dir= ${ MY_MODEL_DIR } / eval

指令执行之后,我们可以使用nvidia-smi来查看每一张GPU卡的使用情况,看看是不是真的有同时用到三张GPU卡训练:

nvidia-smi
 
<span style="color:#111111">Tue Dec 26 15:35:34 2017       
+------------------------------------------------- ----------------------------+
| NVIDIA-SMI 384.81 Driver Version: 384.81 |
|-------------------------------+----------------- -----+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+================= =====+======================|
| 0 TITAN Xp Off | 00000000:02:00.0 Off | N/A |
| 44% 72C P2 186W / 250W | 11763MiB / 12189MiB | 84% Default |
+-------------------------------+----------------- -----+----------------------+
| 1 TITAN Xp Off | 00000000:03:00.0 Off | N/A |
| 47% 76C P2 124W / 250W | 11763MiB / 12189MiB | 76% Default |
+-------------------------------+----------------- -----+----------------------+
| 2 TITAN Xp Off | 00000000:83:00.0 Off | N/A |
| 42% 70C P2 131W / 250W | 11763MiB / 12189MiB | 72% Default |
+-------------------------------+----------------- -----+----------------------+
| 3 TITAN Xp Off | 00000000:84:00.0 Off | N/A |
| 23% 41C P2 72W / 250W | 11761MiB / 12189MiB | 51% Default |
+-------------------------------+----------------- -----+----------------------+
                                                                               
+------------------------------------------------- ----------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|================================================= ============================|
| 0 22192 C python 11751MiB |
| 1 22192 C python 11751MiB |
| 2 22192 C python 11751MiB |
| 3 29266 C python 11751MiB |
+------------------------------------------------- ----------------------------+</span>

在训练的过程中,如果仔细观察每步的计算速度,应该会发现使用一张GPU 卡的速度会跟使用多张GPU 卡差不多。这是单张GPU 卡的速度:

单张GPU 卡计算速度

这是同时使用三张GPU 卡的计算速度:

三张GPU 卡计算速度

速度会差不多是正常的(理论上多张GPU 卡运算的速度会变慢一点点),因为两边的batch size 不同,若每步的计算时间差不多,就表示实际的计算速度有增加。

 

原文:https://blog.gtwang.org/programming/tensorflow-object-detection-api-multiple-gpu-parallel-training/

 

<think>我们正在处理用户关于YOLOv8训练代码示例的请求。用户希望获得一个使用YOLOv8训练模型以识别图片的代码示例。根据引用[1],我们知道YOLO系列需要特定的边界框标注工具,但用户现在关注的是训练代码。 由于用户要求的是YOLOv8,而引用中提到了YOLOv3(引用[1])和RetinaNet(引用[3]),但并没有直接关于YOLOv8的引用。因此,我们将基于YOLOv8的官方文档和常见用法来提供示例。 注意:YOLOv8是由Ultralytics公司维护的,因此我们将使用他们的库。 步骤: 1. 安装必要的库(主要是ultralytics) 2. 准备数据集(YOLO格式) 3. 编写训练代码 4. 进行训练 我们将提供一个简单的训练代码示例,并解释每一步。 注意:由于用户要求的是图像识别(Image Recognition),但YOLO系列通常用于目标检测(Object Detection)。如果用户确实是指目标检测,那么以下代码适用。如果用户真的指的是图像分类(即识别整张图片的类别),那么YOLOv8也支持分类任务,但需要调整数据集和模型。 由于用户问题中写的是“识别图片”,可能包括目标检测和图像分类,但根据YOLO的常见用途,我们假设是目标检测。 代码示例将包括: - 安装ultralytics - 加载预训练模型 - 训练模型 同时,我们会提供数据准备的简要说明。 由于我们无法访问用户的实际数据集,因此示例将使用一个假设的数据集结构。 开始回答:</think>### YOLOv8 训练代码示例(目标检测) 以下是使用 YOLOv8 训练自定义目标检测模型的完整代码示例,基于 Ultralytics 官方实现: #### 1. 安装依赖 ```bash pip install ultralytics ``` #### 2. 数据集准备 数据集目录结构(YOLO格式): ``` datasets/ └── custom/ ├── images/ │ ├── train/ # 训练图片 │ └── val/ # 验证图片 └── labels/ ├── train/ # 训练标签(.txt文件) └── val/ # 验证标签 ``` 标签格式示例(`label.txt`): ``` <class_id> <x_center> <y_center> <width> <height> 0 0.45 0.64 0.32 0.42 ``` #### 3. 创建数据集配置文件(`custom.yaml`) ```yaml path: ./datasets/custom train: images/train val: images/val # 类别列表 names: 0: cat 1: dog 2: car ``` #### 4. 训练代码 ```python from ultralytics import YOLO # 加载预训练模型 model = YOLO('yolov8n.pt') # 可选: yolov8s.pt, yolov8m.pt 等 # 训练配置 results = model.train( data='custom.yaml', # 数据集配置文件 epochs=100, # 训练轮数 batch=16, # 批次大小 imgsz=640, # 输入图像尺寸 device='0', # 使用GPU (单卡) optimizer='AdamW', # 优化器 lr0=0.01, # 初始学习率 weight_decay=0.0005, # 权重衰减 patience=10, # 早停轮数 project='yolo_train', # 输出目录 name='exp1' # 实验名称 ) ``` #### 5. 关键训练参数说明 - **模型选择**:`yolov8n`(小)、`yolov8s`(中)、`yolov8m`(大)、`yolov8l`(加大) - **数据增强**:默认启用(Mosaic, MixUp等)[^1] - **验证指标**:自动计算mAP@0.5, mAP@0.5:0.95 - **输出结果**:保存在`yolo_train/exp1`目录: - `weights/best.pt`:最佳模型 - `results.csv`:训练指标 - `confusion_matrix.png`:混淆矩阵 #### 6. 推理测试 ```python model = YOLO('yolo_train/exp1/weights/best.pt') results = model.predict('test.jpg', conf=0.5) # 置信度阈值 results[0].show() # 显示检测结果 ``` > 注:实际训练前需使用标注工具(如引用[1]提到的[yolo-boundingbox-labeler-GUI](https://github.com/Cartucho/yolo-boundingbox-labeler-GUI))生成标签文件[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值