当前位置: 首页 > news >正文

mac m1芯片 pytorch安装及gpu性能测试

pytorch 使用mac的m1芯片进行模型训练。

#小结:在数据量小模型参数少batch_size小时,cpu训练更快(原因:每次训练时数据需要放入GPU中,由于batch_size小。数据放入gpu比模型计算时间还长)
数据量大(或者batch size大)或者模型参数多时,使用GPU训练优势明显
当模型参数大于100时,使用GPU比CPU开始有优势
注意mac gpu device是 mps ,不是cudn. device= torch.device(“mps”)

1 pytorch 安装及gpu验证

1.1 安装

mac需要安装 night 版本的pytorch
mac安装官网地址

conda install pytorch torchvision torchaudio -c pytorch-nightly
# 或者
pip3 install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu

1.2 gpu验证

主要是执行:torch.backends.mps.is_available()
以下代码输出: tensor([1.], device=‘mps:0’)

import torch
if torch.backends.mps.is_available():mps_device = torch.device("mps")x = torch.ones(1, device=mps_device)print (x)
else:print ("MPS device not found.")

2 mac m1芯片验证

实验1 :batch_size=32, 模型参数 parameter_num=476,720
  gpu 运行时长: 1min 36s
  cpu 运行时长: 37.5s
实验2 :batch_size=512, 模型参数 parameter_num=476,720
  gpu 运行时长: 16s
  cpu 运行时长: 13.3s
实验3 :batch_size=1024, 模型参数 parameter_num=476,720
  gpu 运行时长: 12.7s
  cpu 运行时长: 12.4s
实验4 :batch_size=1024, 模型参数 parameter_num=6,904,128
  gpu 运行时长: 13.9s
  cpu 运行时长: 23.8s
实验5 :batch_size=1024, 模型参数 parameter_num=23,685,440
  gpu 运行时长: 20.5s
  cpu 运行时长: 53.5s
实验6 :batch_size=1024, 模型参数 parameter_num=203,618,624
  gpu 运行时长: 4min 11s
  cpu 运行时长: 6min 49s

附录

测试代码

import torch
from torch.utils.data import DataLoader
from torchvision import datasets,transforms
from  torch import nn,optim
batch_size=1024
mnist_train=datasets.MNIST("mnist",True,transform=transforms.Compose([transforms.ToTensor()    ]),download=True)
mnist_train=DataLoader(mnist_train,batch_size=batch_size,shuffle=True)
minst_test=datasets.MNIST("mnist",False,transform=transforms.Compose([transforms.ToTensor()  ]),download=True)
minst_test=DataLoader(minst_test,batch_size=batch_size,shuffle=True)
x,lable=next(iter(mnist_train))
print(lable)
x.shapedevice=torch.device("mps")
autoencoder=AE().to(device)
critenon=nn.MSELoss()
optimizer=optim.Adam(autoencoder.parameters(),lr=1e-4)autoencoder2=AE()
critenon2=nn.MSELoss()
optimizer2=optim.Adam(autoencoder2.parameters(),lr=1e-4)# GPU 训练
#%%time
for epoch in range(5):for index,(x,_) in enumerate(mnist_train):x=x.to(device)x_hat=autoencoder(x)loss=critenon(x_hat,x)optimizer.zero_grad()loss.backward()optimizer.step()print(epoch,"loss: ",loss.item())# CPU训练
# %%time
for epoch in range(5):for index,(x,_) in enumerate(mnist_train):x=xx_hat=autoencoder2(x)loss=critenon2(x_hat,x)optimizer2.zero_grad()loss.backward()optimizer2.step()print(epoch,"loss: ",loss.item())total_params = sum(p.numel() for p in autoencoder2.parameters())
print("Total Parameters: {:,}".format(total_params))

实验1
在这里插入图片描述

实验3
在这里插入图片描述

实验4

在这里插入图片描述

相关文章:

mac m1芯片 pytorch安装及gpu性能测试

pytorch 使用mac的m1芯片进行模型训练。 #小结:在数据量小和模型参数少,batch_size小时,cpu训练更快(原因:每次训练时数据需要放入GPU中,由于batch_size小。数据放入gpu比模型计算时间还长) 在…...

go 使用 - sync.WaitGroup

使用 - sync.WaitGroup 简介使用注意点 简介 waitgroup 是等待一组并发操作完成得方法。Goroutines对Go来说是独一无二的(尽管其他一些语言有类似的并发原语)。它们不是操作系统线程,它们不完全是绿色的线程(由语言运行时管理的线程)&#x…...

Java Web Day07-08_Layui

1. Layui概念介绍 layui(谐音:类 UI) 是一套开源的 Web UI 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用。其风格简约轻盈,而组件优雅丰盈&#x…...

阿里云华北3(张家口)暂时无法办理经营性ICP许可证

阿里云服务器的华北 3(张家口)地域暂时无法办理经营性ICP许可证,如有经营性ICP业务请勿选择此地域。如果需要办理经营性ICP业务的用户,不需要选择华北3(张家口)地域,可以选择华北2(北…...

八种常见顺序存储的算法

目录 1、线性枚举 1)问题描述 2)动图演示 3)示例说明 4)算法描述 5)源码详解 2、前缀和差分 1)问题描述 2)动图演示 3)样例分析 4)算法描述 5)源码…...

Leetcod面试经典150题刷题记录 —— 栈篇

Leetcod面试经典150题刷题记录 —— 栈篇 1. 有效的括号2. 简化路径3. 最小栈4. 逆波兰表达式求值5. 基本计算器 1. 有效的括号 题目链接:有效的括号 - leetcode 题目描述: 给定一个只包括 ( ,),{,},[&…...

【Qt-QThread-QQueue】

Qt编程指南 ■ QThread■ 示例■ QQueue■■■ QThread ■ 示例 #include <QThread> class myThread : public QThread {Q_OBJECT signals...

电子握力器改造

toy_hand_game 介绍 消耗体力玩具&#xff0c;使用握力器(Grip Strengthener)控制舵机旋转。 开始设想是控制丝杆电机滑动&#xff0c;两套设备就可以控制两个丝杆电机进行“模拟拔河”&#xff0c;后续发现硬件设计错误&#xff0c;ULN2003不能控制两相四线电机&#xff0c;…...

3D展2D数学原理

今年早些时候&#xff0c;我为 MAKE 杂志写了一篇教程&#xff0c;介绍如何制作视频游戏角色的毛绒动物。 该技术采用给定的角色 3D 模型及其纹理&#xff0c;并以编程方式生成缝纫图案。 虽然我已经编写了一般摘要并将源代码上传到 GitHub&#xff0c;但我在这里编写了对使这一…...

MacOS+Homebrew+iTerm2+oh my zsh+powerlevel10k美化教程

MacOS终端 你是否已厌倦了MacOS终端的大黑屏&#xff1f; 你是否对这种美观的终端抱有兴趣&#xff1f; 那么&#xff0c;接下来我将会教你用最简单的方式来搭建一套自己的终端。 Homebrew的安装 官网地址&#xff1a;Homebrew — The Missing Package Manager for macOS (o…...

jenkins解决工具找不到的问题

--------------------------插件选择版本最好能跟服务器对上...

Android : 画布的使用 简单应用

示例图&#xff1a; MyView.java&#xff1a; package com.example.demo;import android.content.Context; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.Vi…...

紫光展锐5G扬帆出海 | 东南亚成为5G新热土

东南亚是一块充满活力和潜力的市场&#xff0c;这里人口基数大、年轻消费群体占比高&#xff0c;电子市场在过去几年显著增长。 增速“狂飙”的东南亚手游 近年来&#xff0c;东南亚手游下载量逐年增长&#xff0c;2023 年第一季度下载量突破 21 亿次&#xff0c;贡献了全球近…...

STM32 学习(一)新建工程

本课程使用的stm32型号 引脚定义&#xff0c;有FT能接5v&#xff0c;没有FT能接3.3v 启动配置 第二种启动模式中&#xff0c;系统存储器中存放了一部分Bootloader程序&#xff0c;该程序可以接收串口的数据&#xff0c;然后刷新到主闪存中&#xff0c;这样就可以使用串口下载程…...

ROBOGUIDE教程:FANUC机器人固定点焊焊接虚拟仿真

目录 概述 机器人系统创建 焊接工件模型创建 机器人抓手工具添加与工件安装 工作台添加与工件安装 固定点焊焊枪支架模型创建与组装 固定点焊焊枪添加与配置 机器人远程TCP标定(核心内容) 远程TCP手动测试 远程TCP指令介绍 机器人仿真程序编写 机器人示教编程 机…...

代码审计必要性探讨

1、背景 为了保证代码的质量&#xff0c;需要一系列的流程来进行保证&#xff1a; 今天要探讨的是代码审计的必要性。 2、代码审计 代码审计的做法多种多样&#xff0c;我理解必须解决以下问题 &#xff0c;才可能有效&#xff1a; 核心&#xff1a;审计的本质是对比&#…...

SpringBoot-Shiro

Apache Shiro&#xff1a;https://shiro.apache.org/ 依赖 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.1</version> </dependency>ShiroConfig.java Configuratio…...

认识Docker

大家好&#xff0c;这里是七七&#xff0c;今天起开起我们的Docker技术篇&#xff0c;本文是介绍Docker的&#xff0c;不介绍如何使用和安装Docker&#xff0c;只是单纯的介绍Docker。 目录 一、历史 二、Docker究竟是什么 三、Docker的结构与特性 1、Docker仓库 2、Dock…...

uniapp的分包使用记录

UniApp的分包是一种将应用代码划分为多个包的技术。分包的核心思想是将不同部分的代码划分为不同的包&#xff0c;按需加载&#xff0c;从而提高应用性能。使用UniApp的条件编译功能&#xff0c;开发人员可以根据需要将代码划分为多个包。每个包都包含一组页面和组件&#xff0…...

JSON.stringify()

一、定义 JSON.stringify() 是一个 JavaScript 内置函数&#xff0c;用于将 JavaScript 对象或值转换为 JSON 字符串 二、语法 JSON.stringify(value, replacer, space); value&#xff1a;要转换为 JSON 字符串的 JavaScript 对象或值。 eplacer&#xff08;可选&#xff0…...

MCUXpresso for VS Code集成J-Link脚本的三种工程化方法详解

1. 项目概述&#xff1a;为什么要在IDE里折腾脚本&#xff1f;如果你是一位使用NXP MCU的嵌入式开发者&#xff0c;大概率对MCUXpresso IDE和SEGGER J-Link调试器这对黄金搭档不陌生。在传统的MCUXpresso IDE&#xff08;基于Eclipse&#xff09;里&#xff0c;通过图形界面配置…...

PyTorch模型调优第一步:用TorchSummary分析参数量与计算开销(以CNN/Transformer为例)

PyTorch模型调优第一步&#xff1a;用TorchSummary分析参数量与计算开销&#xff08;以CNN/Transformer为例&#xff09; 在深度学习项目从实验阶段走向生产部署的过程中&#xff0c;模型效率往往成为决定成败的关键因素。当我们完成模型架构设计后&#xff0c;第一个需要回答的…...

犀牛开发者日记-犀牛论剑特辑 | 李江浩:一个 ROS 布道师的转身

熟悉ROS领域的朋友&#xff0c;对李江浩这个名字想必并不陌生。作为资深ROS布道师&#xff0c;他常年活跃在技术社区分享干货&#xff0c;面对同行提出的各类问题&#xff0c;总能给出快准狠的解决方案&#xff0c;精准直击技术痛点。熟悉他的人都有一个共同感受&#xff1a;李…...

如何用韭菜盒子打造你的VSCode投资信息中心:5大实用功能深度体验

如何用韭菜盒子打造你的VSCode投资信息中心&#xff1a;5大实用功能深度体验 【免费下载链接】leek-fund :chart_with_upwards_trend: 韭菜盒子VSCode插件&#xff0c;可以看股票、基金、期货等实时数据。 LeekFund turns your VS Code and Cursor into a real-time stock, fun…...

别只盯着SQL注入了!聊聊SRC挖掘中那些被忽视的‘低垂果实’:XSS与弱口令实战复盘

别只盯着SQL注入了&#xff01;聊聊SRC挖掘中那些被忽视的‘低垂果实’&#xff1a;XSS与弱口令实战复盘 在安全圈摸爬滚打几年后&#xff0c;我发现一个有趣的现象&#xff1a;80%的新手挖洞者会像发现新大陆一样扑向SQL注入&#xff0c;却对触手可得的XSS和弱口令视而不见。这…...

【算法】小白也能懂 · 第 11 节:动态规划入门

在前面 10 节中,我们学了递归、二叉树、图的 BFS/DFS 等基础数据结构与算法。今天,我们来认识一个让无数初学者又爱又恨的概念——动态规划(Dynamic Programming,简称 DP)。别怕,跟着节奏走,你会发现它其实没那么神秘。 1. 什么是动态规划 简单来说,动态规划的核心思…...

使用AI(龙虾)开发的经验总结

一、使用AI辅助开发的两个核心前提 1.先搞清楚再开口&#xff1a;明确问题边界与目标 在向AI描述问题之前&#xff0c;开发者必须自己先理清整个业务流程、技术上下文和预期目标。这包括&#xff1a; 代码需要改哪里&#xff1f; 明确具体的文件、类、方法或模块。改什么&#…...

盘点6款优质客户销售管理系统:全业务打通到垂直场景适配

前言在数字化转型的深水区&#xff0c;企业对于管理工具的需求已从单一的工具辅助转向全链路的业务协同。面对市场上纷繁复杂的SaaS产品&#xff0c;如何基于“客户信息管理、销售机会管理、表单流程、数据统计、移动端端支持、自动化、权限安全、系统集成”八大核心维度进行精…...

无王无帝定乾坤,来自田间第一人 海棠藏圣定山河

无王无帝定乾坤&#xff0c;来自田间第一人。 自古山河安定&#xff0c;世人皆归功于帝王镇守、朝堂统御&#xff0c; 仿佛万里乾坤唯有王权可镇、唯有霸业可安。 然则山河气运自有天道&#xff0c;世间安定自有公理&#xff0c; 强权只能维系一时疆域&#xff0c;正道方能稳固…...

突发!Gemini Ultra最新v1.5更新导致批量推理吞吐下降38%?我们48小时内完成全链路压测并定位CUDA内核缺陷

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Gemini Ultra性能测试的背景与挑战 随着多模态大模型能力边界持续拓展&#xff0c;Gemini Ultra作为Google最新发布的旗舰级AI模型&#xff0c;在推理深度、上下文理解与跨模态协同方面提出了前所未有的工程验…...