paddlepaddle 的 CPU 和 GPU

news/2024/9/18 12:21:37/

想记录一下一个 bug 改了一上午改到最后发现并没有 bug 的 bug。

总结:

  • 因为下午要跑很久,为了省 GPU 算力,我想上午先用 CPU 把数据处理部分跑出来(感觉数据处理部分不像网络训练那样涉及太多计算,所以感觉用 CPU 就可以了)。
  • 结果因为没用 GPU 导致计算量太大程序阻塞没有输出,用了一上午改了一个不是 bug 的 bug。

故事拉开序幕

当我运行:

# generate train data 
!python3.7 generate_feature.py -m train 
# generate validation data 
!python3.7 generate_feature.py -m valid

输出是这样的:

!!!! mode_type: train !!!!
idx_path:./index/fold0_train_idx.npy
fold_name: _fold0!!!! mode_type: valid !!!!
idx_path:./index/fold0_valid_idx.npy
fold_name: _fold0
=========>>mode:valid    JA finished!!! <<=========
=========>>mode:valid    J finished!!! <<=========
=========>>mode:valid    BA finished!!! <<=========
=========>>mode:valid    B finished!!! <<=========
=========>>mode:valid    JB finished!!! <<=========
=========>>mode:valid    JMj finished!!! <<=========
=========>>mode:valid    Mb finished!!! <<=========
  • 可以看到输出,只生成了 valid 的数据 JA,J,BA 等,没有生成 train 的数据?
  • 这两个 mode (train or valid)都是调用下面的这个 gen_train_valid 函数,是同一个函数呀,这是为什么呢?
def gen_train_valid(mode):data_path = '/home/aistudio/data/data118104/train_data.npy'labels_path = '/home/aistudio/data/data118104/train_label.npy'data = np.load(data_path)[:, 0:2, :, :, :].astype('float32')labels = np.load(labels_path)for idx in range(5):idx_path = './index/fold{}_{}_idx.npy'.format(idx, mode)print('idx_path:{}'.format(idx_path))  # 打印路径看看 mode 对不对fold_idx = np.load(idx_path)data_fold = data[fold_idx]labels_fold = labels[fold_idx]fold_name = '_fold{}'.format(idx)print('fold_name: {}'.format(fold_name))  # 打印 fold_nameJA = get_JA(data_fold, labels_fold, fold_name, mode)get_J(JA, fold_name, mode)get_BA(JA, fold_name, mode)B = get_B(JA, fold_name, mode)get_JB(JA, B, fold_name, mode)get_JMj(JA, fold_name, mode)get_Mb(B, fold_name, mode)

分析没有看到 train 相关的输出信息,可能的原因包括:

  • 输出信息被隐藏了;
  • 程序跑出了异常:检查程序是否报错,如果有错误信息请提供相关的报错信息以便进一步分析问题所在。
  • 训练集中没有数据:请您检查训练集中是否有数据,如果没有数据则会导致训练集特征无法生成。

可是再排查:

  • 输出信息没有被隐藏,因为 train文件夹中没有生成一个文件。
  • 于是我打印了 work/dataset/index/fold0_train_idx.npy 里的值,证明数据集中有数据;
  • 可是既然 valid 能正常输出,不是说明了程序没有问题吗?

没办法,我又检查了 generate_feature.py 脚本的源代码,然后把问题原因定位到 get_JA 函数,因为从这个函数开始 train 就没有输出了。

def get_JA(J, labels, fold_name, mode):N, C, T, V, M = J.shapesave_data_path = './{}/JA{}.npy'.format(mode, fold_name)if mode != 'test':save_label_path = './{}/fold{}_label.npy'.format(mode, fold_name[-1])l = [pairs_local, pairs_center1, pairs_center2, pairs_hands, pairs_elbows, pairs_knees, pairs_feet]res = np.zeros((N, len(l), T, V, M), dtype='float32')for i, pairs in enumerate(l):ans = get_single_angle(pairs, J)res[:, i, :, :, :] = ans.squeeze(1)JA = np.concatenate((J , res), axis=1).astype('float32')if mode == 'train':JA, labels = upsampling(JA, labels)

然后我在这个函数里添加了很多 print 语句,发现问题出现在这3行:

    for i, pairs in enumerate(l):ans = get_single_angle(pairs, J)res[:, i, :, :, :] = ans.squeeze(1)

我又把 get_single_angle 函数单独调出来运行发现是可以正常输出的,输出的结果通过打印形状,也是符合预期的,不过我还是给这个函数加上了异常捕获;

加入异常捕获代码之后,程序不会直接退出,而是会在遇到异常时输出错误信息并返回 None。

为了检查输出是否被遗漏,我在循环结束后再添加一行 print(‘i: {}’.format(i)) 进行检查:

 for i, pairs in enumerate(l):print('i_start: {}'.format(i))ans = get_single_angle(pairs, J)print(ans.shape) # (2337, 1, 2500, 25, 1)res[:, i, :, :, :] = ans.squeeze(1)print(res.shape) # (2337, 7, 2500, 25, 1)print('i_end: {}'.format(i)) i_start: 0

发现没有 i_end 的输出。

结合问题:在 valid 模式下可以正常输出,但在 train 模式下没有输出。

可能是因为训练集数据量较大,在执行 get_JA 函数时需要处理的数据量很大,导致在输出语句之前程序被阻塞,无法顺利输出。

解决办法

解决办法:增加硬件资源。如果计算机性能较低,可以尝试增加硬件资源,例如更换更高配置的 CPU 或 GPU,以提高计算速度。

果然用了 GPU V100 32GB,输出就正常了。

i_end 正常输出了:

i_start: 0
(2337, 1, 2500, 25, 1)
(2337, 7, 2500, 25, 1)
i_end: 0

在这里插入图片描述

终于 train 也输出文件了:

在这里插入图片描述


http://www.ppmy.cn/news/47974.html

相关文章

【定制功能】LVGL 邮件日志功能

更多源码分析请访问:LVGL 源码分析大全 目录 1、基本说明2、配置方法3、APIs3.1、xs_send_email_log1、基本说明 邮件日志功能是为了方便定位客户问题的方案。在使用此功能时,需要保证网络连接是正常的。 内存使用 日志功能使用的内存不超过 9K: 数据缓存(4096) + 消息缓存…

JDBC入门数据库连接

1. JDBC入门 JDBC&#xff08;Java Database Connectivity&#xff09;是Java程序与数据库进行交互的一种标准接口&#xff0c;它提供了一种简单的方式来连接和操作数据库。在使用JDBC之前&#xff0c;需要先了解以下几个概念&#xff1a; JDBC Driver&#xff1a;JDBC驱动程…

D. Marcin and Training Camp(思维 + 判断一个数二进制位是否是另一个数的子集)

Problem - D - Codeforces 马辛是他大学里的一名教练。有N个学生想参加训练营。马辛是个聪明的教练&#xff0c;所以他只想派那些能冷静合作的学生参加。 让我们关注一下这些学生。每个学生可以用两个整数ai和bi来描述&#xff1b;bi等于第i个学生的技能水平&#xff08;越高越…

十二、详解Kubernetes存储卷的技术原理

Kubernetes存储卷是Kubernetes中用于持久化存储数据的一种抽象概念。它们允许容器在不同的Pod之间共享数据,并且可以在Pod重新调度或迁移时保留数据。本文将详细介绍Kubernetes存储卷的原理。 1.存储卷的概念 Kubernetes存储卷是为了解决容器化环境下数据持久化的问题而引入…

linux_FIFO命名管道-mkfifo函数-进程通信

接上一篇&#xff1a;linux_管道学习-pipe函数-管道的读写-fpathconf函数 本次来分享FIFO命名管道&#xff0c;一些常识&#xff0c;开始上菜&#xff1a; 1.FIFO-mkfifo函数 FIFO常被称为命名管道&#xff0c;以区分管道(pipe)。管道(pipe)只能用于“有血缘关系”的进程间。…

第三章 法的渊源与法的分类

目录 第一节 法的渊源的分类 一、法的渊源释义二、法的渊源种类 第二节 正式法源 一、正式法源的含义二、当代中国的正式法源三、正式法源的一般效力原则 第三节 非正式法源 一、当代中国的非正式法源 第四节 法的分类 一、法的一般分类二、法的特殊分类 第一节 法的渊源的…

Spring AOP核心概念与操作示例

AOP 核心概念 还记得我们Spring有两个核心的概念嘛&#xff1f;一个是IOC/DI&#xff0c;另一个是AOP咯。 先来认识两个概念&#xff1a; AOP(Aspect Oriented Programming)面向切面编程&#xff1b;作用&#xff1a;在不惊动原始设计的基础上为其进行功能增强&#xff0c;类…

Spring Security 05 密码加密

目录 DelegatingPasswordEncoder 使用 PasswordEncoder 密码加密实战 密码自动升级 实际密码比较是由PasswordEncoder完成的&#xff0c;因此只需要使用PasswordEncoder 不同实现就可以实现不同方式加密。 public interface PasswordEncoder {// 进行明文加密String encod…

AI大模型加速RPAxAI时代到来,谁会是RPA领域的杀手级应用?

GPT等AI大模型震撼来袭&#xff0c;基于RPA的超级自动化仍是最佳落地载体 对话弘玑CPO贾岿&#xff0c;深入了解国产RPA厂商对AI大模型的探索与实践 文/王吉伟 关于RPA已死的说法&#xff0c;在中国RPA元年&#xff08;2019年&#xff09;投资机构疯狂抢项目之时就已经有了。…

西北乱跑娃 -- centos7安装python3.8最全教程

Centos7安装Python3.8详细教程 安装编译相关工具 yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum install …

java 内置锁

java 内置锁 1.java内置锁是一个互斥锁&#xff0c;也就说明最多只有一个线程能够获得该锁&#xff0c;当线程A获得锁时&#xff0c;线程B想要尝试获得锁的时候&#xff0c;必须等线程A释放锁&#xff0c;若线程A一直不释放锁&#xff0c;则线程B一直等待处于阻塞状态中。获取…

Java锁的区别:独占模式与共享模式

目录 前言&#xff1a; Java 独占模式的锁有哪些&#xff1f; 共享模式的锁有哪些&#xff1f; Java即是 独占模式又是共享模式的锁有哪些&#xff1f; 前言&#xff1a; 资源有两种共享模式&#xff0c;或者说两种同步⽅式&#xff1a; 独占模式&#xff08;Exclusive&am…

类图(类之间的关系)

一.概述 类图(Class diagram)是显示了模型的静态结构&#xff0c;特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。在软件工程中&#xff0c;类图是一种静态的结构图&#xff0c;描述了系统的类的集合…

MySQL调优笔记——慢SQL优化记录(2)

今天调优的原因是&#xff0c;有一个统计报表业务&#xff0c;查询的时间太慢&#xff1b;同时由于数据库的压力是随机性的&#xff0c;这个业务的执行下限和上限相差近20倍&#xff1b;快的时候可以达到600ms&#xff0c;慢的时候有9秒之多&#xff1b; 接下来详细介绍&#x…

SOFA Weekly|SOFARPC 5.10.0 版本发布、SOFA 五周年回顾、Layotto 社区会议回顾与预告...

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

水电设计院信息管理系统1.0

水电设计公司信息管理系统软件使用说明书 代码太多就不贴了&#xff0c;请在我的资源里下载&#xff0c;已部署在企业进行试运行。https://download.csdn.net/download/weixin_44735475/87704302 目录 1.引言 1 2.项目背景 1 3.系统功能 2 3.1系统功能 2 3.2系统性能 2 3.3系…

精通 TensorFlow 2.x 计算机视觉:第二部分

原文&#xff1a;Mastering Computer Vision with TensorFlow 2.x 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;…

【洛谷】P1631 序列合并

【洛谷】 P1631 序列合并 题目描述 有两个长度为 N N N 的单调不降序列 A , B A,B A,B&#xff0c;在 A , B A,B A,B 中各取一个数相加可以得到 N 2 N^2 N2 个和&#xff0c;求这 N 2 N^2 N2 个和中最小的 N N N 个。 输入格式 第一行一个正整数 N N N&#xff1b; 第二…

湫湫系列故事——减肥记Ⅰ

文章目录 湫湫系列故事——减肥记Ⅰ程序设计程序分析湫湫系列故事——减肥记Ⅰ 【问题描述】 对于吃货来说,过年最幸福的事就是吃了,没有之一! 但是对于女生来说,卡路里(热量)是天敌啊! 资深美女湫湫深谙“胖来如山倒,胖去如抽丝”的道理,所以她希望你能帮忙制定一个食…

Omniverse Replicator的“Hello World”

核心功能——Replicator的“Hello World” 学习目标 本教程的目的是介绍基本的 Omniverse Replicator 功能&#xff0c;例如使用一些预定义的 3D 资产创建一个简单的场景&#xff0c;应用随机化&#xff0c;然后将生成的图像写入磁盘以进行进一步处理。 使用复制器 API 要运…