huggingface 笔记:查看GPU占用情况

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导致的(不确定)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Markdown魔法手册:解锁高效写作的新技能

边使用边更新0.0... 文章目录 一、如何在Markdown中插入表情?二、文字样式设置1.文本颜色设置2.文本字号设置3.文本字体设置4. 实战演练5.黄色高亮 一、如何在Markdown中插入表情? 在Markdown中插入表情(emoji)的方法取决于你使用…

02.并发编程基础概念

在正式学习 Java 的并发编程之前,我们需要熟悉和学习几个并发编程的基础概念。 1 进程和线程 1.1 进程 我们常说的是应用程序,也就是 app,由指令和数据组成。但是当我们不运行一个具体的 app 时,这些应用程序就是放在磁盘(也包括…

安装pip install xmind2image失败,4种安装pip install xmind2image在temunx高级终端的失败,却又意外发现

~ $ ~ $ ![在这里插入图片描述](https://img-blog.csdnimg.cn/b59cbb49c3e14a3bbec5675164a14009.png)#!/bin/bash # 创建一个新的空白XMind文件 xmind_dir ( m k t e m p − d ) x m i n d f i l e n a m e ′ t e s t . x m i n d ′ x m i n d p a t h " (mktemp -d…

生命在于学习——Python人工智能原理(1.2)

一、人工智能的基本知识 6、新一代人工智能驱动因素 (1)数据量爆发性增长。 (2)计算能力大幅提升 (3)深度学习等算法发展 (4)移动AI创新应用牵引 7、人工智能关键技术 &#x…

Value-Based Reinforcement Learning(1)

Action-Value Functions Discounted Return(未来的reward,由于未来存在不确定性,所以未来的reward 要乘以进行打折) 这里的依赖actions ,和states 这里 Policy Function : ,表达了action的随机性 S…

压缩能力登顶 小丸工具箱 V1.0 绿色便携版

平常录制视频或下载保存的视频时长往往都很长,很多时候都想要裁剪、 截取出一些“精华片段”保留下来,而不必保存一整个大型视频那么浪费硬盘空间… 但如今手机或电脑上大多数的视频剪辑软件,切割视频一般都要等待很长时间导出或转换&#…

【Text2SQL】Spider 数据集

论文:Spider: A Large-Scale Human-Labeled Dataset for Complex and Cross-Domain Semantic Parsing and Text-to-SQL Task ⭐⭐⭐⭐⭐ EMNLP 2018, arXiv:1809.08887 Dataset: spider GitHub: github.com/taoyds/spider 一、论文速读 本文提出了 Text2SQL 方向的…

Linux更改系统中的root密码

Linux里面的root密码忘记了怎么办? 1 更改系统中的 root 密码 (1)键盘 CtrlAltT 快捷键打开终端。 (2)在终端窗口中输入以下代码: sudo passwd root (3)输入锁屏密码 &#xf…

C#同花顺下单 模拟操作版接口实现

C#同花顺下单 模拟操作版接口的实现 采用C#编程语言实现,对同花顺下单界面自动控制,将实现方法封装为DLL可以任意使用,支持几乎所有券商,不需要更换特定的券商。 比如当下最流行的QMT量化软件,仍然受限于特定的券商&a…

化学中的不确定性。

化学中的不确定性TOC 基于元素分析的无机化学的理论大厦应该说早已落成了,但是却仍然存在着一些列的难解甚至是无解问题,这些大多是在使用理论解释现象时遇到的困难,有些则是在生产实践中生产工艺和生产工序设计和优化中发现的问题。于是&…

MT3040 矩形覆盖

代码&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long ll; const int N 3e5 10; int n, ans, d, w; stack<int> s; // 单调栈 // 如果楼高度类似121&#xff08;凸&#xff0c;两边相等&#xff0c;中间比两边的大&#xff09;&…

一个月速刷leetcodeHOT100 day11 链表完全解析 以及链表5道easy题

链表 表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点&#xff08;链表中每一个元素称为结点&#xff09;组成&#xff0c;结点可以在运行时动态生成。每个结点包活两个部分&#xff1a;一…

SQL Server2019安装步骤教程(图文)_最新教程

一、下载SQL Server2019 1.到微软官网下载SQL Server Developer版本&#xff0c;官网当前的2019版本下载需要注册账号。 不想注册的朋友&#xff0c;可以选择从网盘下载&#xff1a;点击此处直接下载 2.下载之后先解压&#xff0c;解压后执行exe安装程序。打开之后的界面如下…

元组推导式

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 使用元组推导式可以快速生成一个元组&#xff0c;它的表现形式和列表推导式类似&#xff0c;只是将列表推导式中的“[]”修改为“()”。例如&#xf…

基础6 探索JAVA图形编程桌面:集合组件详解

我们的团队历经了数不胜数的日夜&#xff0c;全力以赴地进行研发与精心调试&#xff0c;最终成功地推出了一款具有革命性意义的“图形化编程桌面”产品。这款产品的诞生&#xff0c;不仅极为彻底地打破了传统代码开发那长久以来的固有模式&#xff0c;更是把焦点聚集于解决长期…

第12章-ADC采集电压和显示 基于STM32的ADC—电压采集(详细讲解+HAL库)

我们的智能小车用到了ADC测量电池电压的功能&#xff0c;这章节我们做一下。 我们的一篇在这里 第一篇 什么是ADC 百度百科介绍&#xff1a; 我们知道万用表 电压表可以测量电池&#xff0c;或者电路电压。那么我们是否可以通过单片机获得电压&#xff0c;方便我 们监控电池状…

Midjourney Describe API 使用文档

Midjourney Describe API 使用文档 Midjourney Describe API 的主要功能是通过上传图片&#xff0c;获取对图片的描述。使用该 API&#xff0c;只需要传递图片文件&#xff0c;API 会返回图片的详细描述。无需繁琐的参数设置&#xff0c;即可获得高质量的图片描述。 支持多种图…

第86天:代码审计-PHP项目TP框架安全写法1day利用0day分析

案例一&#xff1a; 利用框架漏洞-TP3框架-SQL注入&Demo&YxtCMF 首先先查询thinkphp的版本 去寻找版本漏洞: Thinkphp3.2.3及以下版本漏洞整理_thinkphp3.2.3漏洞-CSDN博客 去查这个exp注入 这里的利用条件是必须有find方法&#xff0c;并且where后面的参数是数组 …

网络模型-BFD与网络协议联动

一、BFD:双向转发检测 双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况。 1、BFD优点: 对相邻转发引擎之间的通道提供轻负荷、快速故障检测。这些故障包括接口数据链路&#…

【全开源】赛事报名系统源码(Fastadmin+ThinkPHP和Uniapp)

基于FastadminThinkPHP和Uniapp开发的赛事报名系统&#xff0c;包含个人报名和团队报名、成绩查询、成绩证书等。 构建高效便捷的赛事参与平台 一、引言&#xff1a;赛事报名系统的重要性 在举办各类赛事时&#xff0c;一个高效便捷的报名系统对于组织者和参与者来说都至关重…