基于矩阵乘法的GPU烤机python代码(pytorch版)

news2024/10/6 6:05:45

前言

测试gpu前需要安装Anaconda、pytorch、tmux、nvitop。

单gpu

代码

import numpy as np
from tqdm import tqdm
'''
@Project :gpu-test
@File    :gpu_stress.py
@Author  :xxx
@Date    :2024/4/20 16:13
'''
import argparse
import time
import torch

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='One gpu test')
    parser.add_argument('--size', type=int, required=False, default=10, help='矩阵的大小')
    parser.add_argument('--gpu', type=int, required=False, default=0, help='gpu的编号')
    parser.add_argument('--minu', type=int, required=False, default=1, help='运行时长:分')
    parser.add_argument('--verbose', type=int, required=False, default=10, help='进度条:运行时长的10%更新进度条')
    args = parser.parse_args()
    # 设置要运行的时长(分钟)
    duration_mins = args.minu
    verbose = args.verbose
    torch.cuda.set_device(args.gpu)
    size = args.size

    # 测试 GPU 计算耗时

    A = torch.ones(size, size).to('cuda')
    B = torch.ones(size, size).to('cuda')

    start_time = time.time()
    current_time = start_time
    #创建一个进度条
    ratio = verbose/100  #计算当前进度
    with tqdm(total=100) as pbar:
        pbar.set_description("Processing")
        while (current_time - start_time) / 60 < duration_mins:
            C = torch.inner(A, B)
            current_time = time.time()
            if np.round(((current_time - start_time)/60)/duration_mins,1) ==  np.round(ratio,1):
                pbar.update(verbose)#更新进度条
                ratio += verbose/100

    total_duration_seconds = current_time - start_time
    total_duration_hours = total_duration_seconds / 3600
    print(f"GPU RUN TIME: {total_duration_hours:.2f} 小时")

file
file

运行命令

python gpu.py --gpu 0 --size 44000 --minu 6000 
python gpu.py --gpu 1 --size 44000 --minu 6000 

参数说明:

  • gpu:显卡编号
  • size:矩阵大小,如果双卡32G显存,可以设置参数为44000,其他情况慢慢试
  • minu:运行时长,单位-分钟

多gpu并行

代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@Project :gpu-test
@File    :gpus_stress.py
@Author  :xxx
@Date    :2024/4/20 16:13
'''
import argparse
import time

import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
from torch.utils.data import DataLoader, TensorDataset
from tqdm import tqdm


def train_model(duration_mins, num_gpus,verbose):
    duration_secs = duration_mins * 60
    size = args.size
    data = torch.ones(size, size).to('cuda')

    class MyModel(nn.Module):
        def __init__(self):
            super(MyModel, self).__init__()
            self.fc1 = nn.Linear(size, size)

        def forward(self, x):
            return self.fc1(x)

    model = MyModel().to('cuda')
    model = nn.DataParallel(model, device_ids=list(range(num_gpus)))
    optimizer = optim.SGD(model.parameters(), lr=0.001)
    criterion = nn.MSELoss()

    start_time = time.time()
    current_time = start_time
    # 创建一个进度条
    ratio = verbose / 100  # 计算当前进度
    with tqdm(total=100) as pbar:
        pbar.set_description("Processing")
        while (current_time - start_time) < duration_secs:
            optimizer.zero_grad()
            outputs = model(data)
            loss = criterion(outputs, data)
            loss.backward()
            optimizer.step()
            current_time = time.time()
            if np.round(((current_time - start_time) / 60) / duration_mins, 1) == np.round(ratio, 1):
                pbar.update(verbose)  # 更新进度条
                ratio += verbose / 100

    total_duration_hours = (current_time - start_time) / 3600
    print(f"GPU RUN TIME: {total_duration_hours:.2f} hours")


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Multi-GPU Training')
    parser.add_argument('--minu', type=int, default=1, help='Duration in minutes')
    parser.add_argument('--gpus', type=int, default=1, help='Number of GPUs to use')
    parser.add_argument('--size', type=int, required=False, default=1, help='size')
    parser.add_argument('--verbose', type=int, required=False, default=10, help='进度条:运行时长的10%更新进度条')
    args = parser.parse_args()

    train_model(args.minu, args.gpus, args.verbose)

file
file

运行命令

32g显存的显卡执行以下命令

python gpus.py --gpus 2 --size 30000 --minu 6000

参数说明:

  • gpus:可用显卡数量
  • size:矩阵大小,如果双卡32G显存,可以设置参数为30000,其他情况慢慢试
  • minu:运行时长,单位-分钟

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

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

相关文章

力扣153. 寻找旋转排序数组中的最小值

Problem: 153. 寻找旋转排序数组中的最小值 文章目录 题目描述思路复杂度Code 题目描述 思路 1.初始化左右指针left和right&#xff0c;指向数组的头和尾&#xff1b; 2.开始二分查找&#xff1a; 2.1.定义退出条件&#xff1a;当left right时退出循环&#xff1b; 2.2.当nums…

Java新手必看:快速上手FileOutPutStream类

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

怎么给word文件名批量替换部分文字?word设置批量替换文字教程

批量替换Word文件名中的几个字&#xff0c;对于经常处理大量文件的人来说&#xff0c;是一项非常实用的技能。以下是一个详细的步骤指南&#xff0c;帮助你快速完成这项任务。 首先&#xff0c;你需要准备一个可以批量重命名文件的工具。市面上有很多这样的工具可供选择&#x…

虚拟化界的强强联手:VirtIO与GPU虚拟化的完美结合

近距离了解 VirtIO 和 GPU 虚拟化 这是一篇 Linaro 开发团队项目组的科普文章。我们在处理器虚拟化项目中&#xff0c;经常会遇到 VirtIO 相关的问题&#xff1b;比如运行 Andriod 系统的时候需要运行 VirtIO 组件。‍‍‍随着 Cassini 项目和 SOAFEE&#xff08;嵌入式边缘可扩…

电源管理芯片该如何测试?

电源管理芯片作为电子产品的重要组成部分&#xff0c;其性能测试必不可少。通过各项指标测试&#xff0c;评估电源管理芯片是否符合设计规范&#xff0c;及其稳定性和可靠性。 可通过检测以下指标参数来评估电源芯片的性能&#xff1a; 输入/出电压范围、输出纹波、电压调整率、…

Java openrasp记录-02

主要分析以下四个部分&#xff1a; 1.openrasp agent 这里主要进行插桩的定义&#xff0c;其pom.xml中定义了能够当类重新load时重定义以及重新转换 这里定义了两种插桩方式对应之前安装时的独立web的jar的attach或者修改启动脚本添加rasp的jar的方式 其中init操作则需要将ras…

贪吃蛇项目(小白保姆级教程)

游戏介绍 游戏背景&#xff1a; 贪吃蛇游戏是经典的游戏项目之一&#xff0c;也是很简单的小游戏 实现背景&#xff1a; 这里我们是基于32位的Win32_API进行实现的 需要的知识点&#xff1a; C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32_API等 适合人群&a…

【学习AI-相关路程-工具使用-自我学习-cudavisco-开发工具尝试-基础样例 (2)】

【学习AI-相关路程-工具使用-自我学习-cuda&visco-开发工具尝试-基础样例 &#xff08;2&#xff09;】 1、前言2、环境说明3、总结说明4、工具安装0、验证cuda1、软件下载2、插件安装 5、软件设置与编程练习1、创建目录2、编译软件进入目录&创建两个文件3、编写配置文…

OpenNJet评测,探寻云原生之美

在信息时代的大海上&#xff0c;云原生应用引擎如一艘航行于波涛之间的帆船&#xff0c;承载着创新的梦想和数字化的未来。本文将带领您登上这艘船&#xff0c;聚焦其中之一的OpenNJet&#xff0c;一同探寻其中的奥秘和精妙&#xff0c;领略其独特之美。 OpenNJet 内容浅析 O…

【0day】湖南建研工程质量检测系统InstrumentUsageRecordExport接口处存在任意文件读取漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

Flink窗口理论到实践 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

P1873 [COCI 2011/2012 #5] EKO / 砍树

原题链接&#xff1a;[COCI 2011/2012 #5] EKO / 砍树 - 洛谷 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二分答案。 根据题目中的“帮助 Mirko 找到伐木机锯片的最大的整数高度 H&#xff0c;使得他能得到的木材至少为 M 米。换句话说&#xf…

【redis】redis持久化分析

目录 持久化Redis持久化redis持久化的方式持久化策略的设置1. RDB&#xff08;快照&#xff09;fork(多进程)RDB配置触发RDB备份自动备份手动执行命令备份&#xff08;save | bgsave&#xff09;flushall命令主从同步触发动态停止RDB RDB 文件恢复验证 RDB 文件是否被加载 RDB …

【毕业设计】基于SSM的运动用品商城的设计与实现

1.项目介绍 在这个日益数字化和信息化的时代&#xff0c;随着人们购物习惯的转变&#xff0c;传统的实体商店已经无法满足人们日益增长的在线购物需求。因此&#xff0c;基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的运动用品商城项目应运而生&#xff0…

基于YOLOv8+PyQt5复杂场景下船舶目标检测系统

1. 应用场景 复杂场景下船舶目标检测系统的应用场景包括&#xff1a; 港口管理和安全&#xff1a;监控港口区域&#xff0c;确保船舶安全地进出港口&#xff0c;预防相撞事故的发生。 海洋交通监控&#xff1a;实时追踪海上交通流&#xff0c;并识别违规或异常航行行为&#x…

基于Java.Web框架React、Vue.js技术开发的一套(C#医院体检系统成品源码、支持二开)

医院体检系统是一种专为体检中心/医院体检科等体检机构开发的全流程管理系统。该系统通过软件实现检测仪器数据的自动提取&#xff0c;内置多级医生工作台&#xff0c;细化工作并将体检检查结果汇总&#xff0c;生成体检报告登记到计算机系统中。此外&#xff0c;该系统还能进行…

对XYctf的一些总结

对XYctf的一些总结 WEB 1.http请求头字段 此次比赛中出现的&#xff1a; X-Forwarded-For/Client-ip&#xff1a;修改来源ip via&#xff1a;修改代理服务器 还有一些常见的字段&#xff1a; GET&#xff1a;此方法用于请求指定的资源。GET请求应该安全且幂等&#xff0c…

C++学习笔记——仿函数

文章目录 仿函数——思维导图仿函数是什么仿函数的优势理解仿函数仿函数的原理举例 仿函数——思维导图 仿函数是什么 使用对象名调用operator&#xff08;&#xff09;函数看起来像是在使用函数一样&#xff0c;因此便有了仿函数的称呼&#xff1b;仿函数存在的意义是&#x…

揭秘!如何利用自动化工具提升抖音推广效果

亲爱的读者朋友们&#xff0c;你是否在为抖音的推广效果而苦恼&#xff1f;看着别人家的视频轻松获得大量曝光&#xff0c;你是否也心生羡慕&#xff1f;今天&#xff0c;我们就来分享一个秘密武器&#xff0c;让你轻松提升抖音推广效果&#xff01; 首先&#xff0c;让我们来了…

Maria DB 安装(含客户端),看这一篇就够了

文章目录 一 安装前准备1 版本与Win平台对应2 推荐安装 二 安装步骤1 安装主体程序2 添加系统路径Path 三 客户端 一 安装前准备 1 版本与Win平台对应 版本对应关系可参考&#xff1a; https://www.codebye.com/mariadb-deprecated-package-platforms.html。 2 推荐安装 经…