huggingface 笔记:查看GPU占用情况

news2024/12/28 3:43:43

0 准备部分

0.1 创建虚拟数据

import numpy as np

from datasets import Dataset

seq_len, dataset_size = 512, 512
dummy_data = {
    "input_ids": np.random.randint(100, 30000, (dataset_size, seq_len)),
    "labels": np.random.randint(0, 1, (dataset_size)),
}
dummy_data
'''
使用 np.random.randint 函数生成一个形状为 (dataset_size, seq_len),即 512x512 的数组。
数组中的每个元素是一个随机整数,范围从 100 到 30000。


使用 np.random.randint 函数生成一个形状为 (dataset_size,) 的数组,其中的元素是 0 或 1
表示每个样本的标签
'''
'''
{'input_ids': array([[11687,  1246,  6661, ..., 20173,  3772, 29152],
        [  720, 25945, 11963, ..., 11675, 27842,  3553],
        [22100, 26587, 19452, ...,  1836, 24395, 22849],
        ...,
        [11610, 24425,  1026, ...,  6237, 28503,  2775],
        [10266, 22622, 14079, ..., 24491, 26029, 17796],
        [11500,  7688, 13780, ...,  4839, 13967, 18493]]),
 'labels': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0])}
'''
ds = Dataset.from_dict(dummy_data)
ds.set_format("pt")
#将它们存储在一个带有PyTorch格式的数据集中
ds
'''
Dataset({
    features: ['input_ids', 'labels'],
    num_rows: 512
})
'''

0.2 辅助函数

为了打印GPU利用率和使用Trainer进行训练运行的摘要统计信息,定义了两个辅助函数

0.2.1 打印GPU内存使用情况

from pynvml import *

def print_gpu_utilization(device_id=1):
    nvmlInit()#初始化 NVML 库
    
    handle = nvmlDeviceGetHandleByIndex(device_id)
    #获取索引为 device_id 的 GPU 设备的句柄。
    
    info = nvmlDeviceGetMemoryInfo(handle)
    '''
    使用前面获取的句柄,查询该 GPU 的内存信息。
    返回的对象包含了 GPU 内存的总量、已使用的量和空闲的量。
    '''
    
    print(f"GPU内存占用:{info.used // 1024 ** 2} MB。")
    '''
    打印 GPU 当前已使用的内存量,单位为 MB。
    这里通过将字节单位的值除以 1024 的平方来转换为 MB
print_gpu_utilization()
#GPU内存占用:270 MB。

0.2.2 打印训练过程的信息

def print_summary(result):
    print(f"时间:{result.metrics['train_runtime']:.2f}")
    '''
    打印训练过程的运行时间
    从 result 对象中的 metrics 字典获取 'train_runtime' 键的值
    格式化为两位小数。
    '''
    
    print(f"样本/秒:{result.metrics['train_samples_per_second']:.2f}")
    '''
    打印训练速度,即每秒处理的样本数
    从 result 对象中的 metrics 字典获取 'train_samples_per_second' 键的值
    格式化为两位小数。
    '''
    
    print_gpu_utilization()
    #调用 print_gpu_utilization() 函数来打印 GPU 的内存使用情况

1 加载模型,查看GPU空间占用情况

print_gpu_utilization(1)
#print_gpu_utilization(1)


from transformers import AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-large-uncased").to("cuda:1")
print_gpu_utilization(1)
#GPU内存占用:1866 MB。

2  训练模型时的GPU占用情况

default_args = {
    "output_dir": "tmp",
    "eval_strategy": "steps",
    "num_train_epochs": 1,
    "log_level": "error",
    "report_to": "none",
}
'''
output_dir: 指定输出目录,这里设置为 "tmp"。
eval_strategy: 设置评估策略为 "steps",意味着在训练过程中会按照步骤进行模型评估。
num_train_epochs: 设置训练周期为 1,即整个训练集只会被训练一遍。
log_level: 设置日志级别为 "error",这样只有错误信息会被记录。
report_to: 设置报告输出目标为 "none",这表示不将训练进度报告输出到任何外部服务或控制台。
'''
from transformers import TrainingArguments, Trainer, logging

logging.set_verbosity_error()
#让 transformers 库只输出错误级别的日志。


training_args = TrainingArguments(per_device_train_batch_size=1,
                                  **default_args)
'''
TrainingArguments: 创建一个训练参数对象,设置每个设备的训练批量大小为 1
并将前面定义的默认参数集成进来。
'''
trainer = Trainer(model=model, args=training_args, train_dataset=ds)
#Trainer: 初始化训练器,传入模型、训练参数和训练数据集。
result = trainer.train()
#使用 trainer.train() 启动训练过程,并将结果存储在 result 变量中
print_summary(result)

在我这边的GPU上跑不起来:可能是不同版本的cuda、pytorch导致的(不确定)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1700282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP+Lucky+Baby母婴用品网站的设计与实现75554-计算机毕业设计项目选题推荐(附源码)

摘 要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用。简单的流程、便捷可靠的支付方式、快捷畅通的物流快递、安全的信息保护都使得电子商务越来越赢得网民们的青睐。现…

中国低调海外巨头,实力超乎想象!

在全球化的浪潮中,中国公司正以前所未有的速度和规模走向世界。他们或许低调,但却实力非凡,在国际市场上掀起了一股不可小觑的“中国风暴”。今天,就让我们揭开那些在国外牛逼到爆炸的中国公司的神秘面纱,深度解析他们…

IP编址、进制转换、IP地址分类、变长子网掩码VLSM、无类域间路由CIDR

前言 网络层位于数据链路层与传输层之间。网络层中包含了许多协议,其中最为重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外,还必须理解IP编址以及如何合理地使用IP地址来设计网络。 IP编址 每个网段上都有两…

滤波电路应用笔记

滤波器 什么是滤波器? 滤波器是一种使某些频率或频带上的电信号通过而阻止其他信号通过的装置。 滤波电路的作用是尽可能减少脉动直流电压中的交流分量,保持其直流分量,降低输出电压的纹波系数,并使波形相对平滑。整流电路的输出…

商标注册申请名称的概率,多想名称选通过率好的!

近日给深圳客户申请的商标初审下来了,两个类别都下的初审,和当初的判断基本一致,普推知产老杨当时沟通说需要做担保申请注册也可以,后面选择了管家注册,最近大量的帮客户检索商标名称,分享下经验。 两个字基…

PC端应用订阅SDK接入攻略

本文档介绍了联想应用联运sdk接入操作指南,您可在了解文档内容后,自行接入应用联运sdk。 1. 接入前准备 1. 请先与联想商务达成合作意向。 2. 联系联想运营,提供应用和公司信息,并获取商户id、app id、key(公私钥、…

【设计模式深度剖析】【4】【结构型】【组合模式】| 以文件系统为例加深理解

👈️上一篇:适配器模式 设计模式深度剖析-专栏👈️ 目 录 组合模式定义英文原话直译如何理解? 3个角色UML类图代码示例 组合模式的优点组合模式的使用场景示例解析:文件系统 组合模式 组合模式(Composite Pattern&a…

【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档

这篇发表于2020 WWW 上的会议论文,提出一种MNS方式的负样本采样方法。众所周知,MF方法难以解决冷启动问题,于是进化出双塔模型,但是以双塔模型为基础的召回模型的好坏十分依赖负样本的选取。为了解决Batch内负样本带来的选择性偏差…

IT廉连看——UniApp——条件渲染

IT廉连看——UniApp——条件渲染 什么是条件渲染? 顾名思义,满足一定的条件他才会进行渲染。 这是我们上节事件绑定保留的代码。 一、现在我有这样一个需求: 增加一个按钮,当我点击这个按钮,这里的文本&#xff0…

ICML 2024 | 即插即用!无需训练!基于球面高斯约束引导的条件扩散模型

©PaperWeekly 原创 作者 | 杨凌霄 单位 | 上海科技大学信息学院 论文标题: Guidance with Spherical Gaussian Constraint for Conditional Diffusion 论文作者: 杨凌霄、丁枢桐、蔡逸凡、虞晶怡、汪婧雅、石野 通讯作者: 石野 论文链接…

【数据结构】二叉树-堆(上)

个人主页~ 二叉树-堆 一、树的概念及结构1、概念2、相关概念3、树的表示4、树的实际应用 二、二叉树的概念和结构1、概念2、特殊二叉树3、二叉树的性质4、二叉树的存储结构(1)顺序存储(2)链式存储 三、二叉树的顺序结构以及实现1、…

【Linux-时间管理和内核定时器】

Linux-时间管理和内核定时器 ■ 设置系统节拍率■ 高节拍率和低节拍率的优缺点:■ jiffies 系统节拍数■ get_jiffies_64 这个函数可以获取 jiffies_64 的值■ 处理绕回■ 使用 jiffies 判断超时 ■ jiffies 和 ms、 us、 ns 之间的转换函数在这里插入代码片■ 内核…

pytest:指定测试用例执行顺序

在自动化测试中,测试用例的执行顺序有时对测试结果具有重要影响。本文将介绍如何在pytest框架中使用pytest-ordering插件以及Collection hooks来控制测试用例的执行顺序。 方式1: 使用pytest-ordering插件控制执行顺序 1.1 安装pytest-ordering插件 首…

Android Studio开发之路(十三)主题影响Button颜色问题解决及button自定义样式

一、问题描述 在开发过程中发现安卓的默认主题色是紫色,并且会导致button也是紫色,有时直接在xml布局文件中直接设置button的背景色或者设置背景图片不起效果 方案一、如果是app,可以直接设置主题颜色 比如,将主题设置为白色&a…

【STM32】 独立看门狗配置方法

什么是看门狗 看门狗(watchdog)指的是一种监控系统或程序,用于定期检测和监控其他系统或程序的运行状态,并在出现问题或故障时采取相应的措施。它可以是硬件设备,也可以是软件程序。 在计算机领域中,看门狗…

Java Swing + MySQL图书借阅管理系统

系列文章目录 Java Swing MySQL 图书管理系统 Java Swing MySQL 图书借阅管理系统 文章目录 系列文章目录前言一、项目展示二、部分代码1.Book2.BookDao3.DBUtil4.BookAddInternalFrame5.Login 三、配置 前言 项目是使用Java swing开发,界面设计比较简洁、适合作…

Taipy快速打造数据驱动的Web应用

Taipy: 用Taipy,让数据洞察与应用开发无缝对接- 精选真开源,释放新价值。 概览 Taipy快速打造数据驱动的 Web 应用。这是一个基于 Python 和 Flask 的项目,结合了 React 等前端技术,为开发者提供了一个简洁、高效的开…

【计算机毕业设计】基于SSM+Vue的新能源汽车在线租赁管理系统【源码+lw+部署文档】

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,新能源汽车在线租赁当然也不能排除在外。新能源汽车在线租赁是以实际运用为开发背景,运用软件工程开发方法&…

docker安装Elasticsearch(ES)详细教程

使用Docker来安装Elasticsearch(简称ES)的详细教程如下: 1. 前提条件 确保你的系统已经安装了Docker,并且Docker服务正在运行。如果你使用的是Windows系统,还需要确保已经启用了Hyper-V和容器功能。 2. 拉取Elastic…

AOP、注解、EL表达、若依权限,Security原理综合分析

AOP、注解、EL表达、若依权限,Security原理综合分析 案例一:更新、创建增强 需求产生 每个表中均有创建时间、创建人、修改时间、修改人等字段。 在操作时候手动赋值,就会导致编码相对冗余、繁琐,那能不能对于这些公共字段在某…