嵌入式硬件篇---CPUGPUTPU
文章目录
- 第一部分:处理器
- CPU(中央处理器)
- 1.通用性
- 2.核心数
- 3.缓存
- 4.指令集
- 5.功耗和发热
- GPU(图形处理器)
- 1.并行处理
- 2.核心数量
- 3.内存带宽
- 4.专门的应用
- TPU(张量处理单元)
- 1.为深度学习定制
- 2.低精度计算
- 3.固定的功能
- 4.内存和存储
- 总结
- 第二部分:在Google Colab中使用TPU
- 启动TPU支持
- 安装TensorFlow with TPU支持
- 初始化TPU
- 编写模型和数据加载代码
- 在Google Cloud TPU中使用TPU
- 创建TPU资源
- 设置环境
- 安装TensorFlow
- 连接TPU
- 编写并运行代码
- 第三部分:TPU处理数据
- 1. 使用tf.data API
- a. 创建数据集
- b. 预处理数据
- c. 批处理和预取
- 2. 使用TPU分布式策略
- 3. 使用交错读取(Interleave)
- 4. 使用缓存
- 5. 使用重复数据集
- 6. 使用优化器
- 总结
以上就是今天要讲的内容,本文仅仅介绍了CPU、GPU、TPU。
第一部分:处理器
CPU(中央处理器)
CPU,即Central Processing Unit,是计算机的核心组件,负责执行计算机程序中的指令,处理数据,控制硬件。以下是CPU的一些特点:
1.通用性
通用性:CPU设计为能够处理各种不同的任务,从简单的计算到复杂的逻辑操作。
2.核心数
核心数:现代CPU通常有多个核心,可以并行处理多个任务。
3.缓存
缓存:CPU内部有不同级别的缓存,用于快速访问常用数据。
4.指令集
指令集:CPU支持复杂的指令集,可以执行多种类型的操作。
5.功耗和发热
功耗和发热:CPU在执行复杂任务时功耗较高,发热也相对较大。
GPU(图形处理器)
GPU,即Graphics Processing Unit,最初是为图形渲染设计的,但现在在科学计算、机器学习等领域也广泛应用。
1.并行处理
并行处理:GPU包含大量的计算单元,擅长并行处理任务,如同时处理成千上万的像素数据。
2.核心数量
核心数量:GPU的核心数量远超CPU,但每个核心相对简单,适合执行简单的重复任务。
3.内存带宽
内存带宽:GPU通常具有高内存带宽,以支持大量的数据传输。
4.专门的应用
专门的应用:除了图形渲染,GPU在深度学习和其他需要大规模并行计算的场景中表现出色。
TPU(张量处理单元)
TPU,即Tensor Processing Unit,是Google专门为深度学习计算设计的ASIC(Application-Specific Integrated Circuit)。
1.为深度学习定制
为深度学习定制:TPU针对深度学习中的矩阵乘法和卷积运算进行了优化。
2.低精度计算
低精度计算:TPU在**低精度(如16位或8位)**计算上表现出色,这有助于提高能效和速度。
3.固定的功能
固定的功能:与CPU和GPU的通用性不同,TPU的功能更固定,专注于加速深度学习推断和训练。
4.内存和存储
内存和存储:TPU具有大量的内存和存储,以支持大规模的神经网络计算。
总结
CPU:适用于通用计算,能够处理各种复杂的任务和指令。
GPU:适用于需要大量并行处理的任务,如图形渲染和深度学习。
TPU:专门为深度学习设计,提供了针对特定类型计算的优化。
这三种处理器在现代计算系统中通常协同工作,以提供最佳的性能和效率。
第二部分:在Google Colab中使用TPU
启动TPU支持
启用TPU支持: 在Google Colab笔记本中,首先需要确保TPU已经连接。可以使用以下命令来连接TPU:
import os
assert os.environ['COLAB_TPU_ADDR'], 'Make sure to select TPU from Edit > Notebook settings > Hardware accelerator'
安装TensorFlow with TPU支持
安装TensorFlow with TPU支持: 使用以下命令安装与TPU兼容的TensorFlow版本:
!pip install cloud-tpu-client==0.10 https://storage.googleapis.com/tpu-pytorch/wheels/torch_xla-1.7-cp36-cp36m-linux_x86_64.whl
初始化TPU
初始化TPU: 使用以下代码来初始化TPU:
import torch_xla
import torch_xla.core.xla_model as xmdevice = xm.xla_device()
编写模型和数据加载代码
编写模型和数据加载代码: 与使用GPU类似,你需要编写模型定义、损失函数、优化器以及数据加载的代码。确保模型和数据被移动到TPU设备上。
训练模型: 在训练循环中,确保使用TPU兼容的方式来进行前向和后向传播。例如:
model = MyModel().to(device)
loss_fn = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)for epoch in range(num_epochs):for batch, (data, target) in enumerate(train_loader):data, target = data.to(device), target.to(device)optimizer.zero_grad()output = model(data)loss = loss_fn(output, target)loss.backward()optimizer.step()
在Google Cloud TPU中使用TPU
创建TPU资源
创建TPU资源: 在Google Cloud Console中创建一个TPU节点。
设置环境
设置环境: 在你的虚拟机中设置TPU相关的环境变量,例如:
export TPU_NAME=[your-tpu-name]
export TPU_ZONE=[your-tpu-zone]
export TPU_PROJECT=[your-gcp-project-id]
安装TensorFlow
安装TensorFlow: 确保安装了与TPU兼容的TensorFlow版本:
pip install tensorflow==[version]
连接TPU
连接到TPU: 在你的Python代码中,使用以下代码来连接到TPU:
import tensorflow as tftpu = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='')
tf.config.experimental_connect_to_cluster(tpu)
tf.tpu.experimental.initialize_tpu_system(tpu)
strategy = tf.distribute.experimental.TPUStrategy(tpu)
编写并运行代码
编写并运行模型: 使用strategy.scope()来确保你的模型和训练代码在TPU上运行:
with strategy.scope():# Define your model, loss, and optimizermodel = ...loss_fn = ...optimizer = ...# Train your modelfor epoch in range(num_epochs):for batch in train_dataset:# Training steps
请注意,TPU的使用可能需要一些特定的代码调整,以确保你的模型和数据管道与TPU兼容。在使用TPU时,还需要注意资源管理和成本控制。
第三部分:TPU处理数据
1. 使用tf.data API
TensorFlow的tf.data API可以高效地加载、预处理和批处理数据。
a. 创建数据集
import tensorflow as tf
#假设train_images和train_labels是已经加载的数据
train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels))
b. 预处理数据
def preprocess(image, label):# 对图像和标签进行预处理image = tf.image.resize(image, [224, 224])image = tf.cast(image, tf.float32) / 255.0return image, labeltrain_dataset = train_dataset.map(preprocess)
c. 批处理和预取
train_dataset = train_dataset.batch(128) # TPU通常使用较大的批量大小
train_dataset = train_dataset.prefetch(tf.data.experimental.AUTOTUNE)
2. 使用TPU分布式策略
当使用TPU时,应确保数据集与TPU的分布式策略兼容。
resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='')
tf.config.experimental_connect_to_cluster(resolver)
tf.tpu.experimental.initialize_tpu_system(resolver)
strategy = tf.distribute.experimental.TPUStrategy(resolver)
#使用策略的scope来创建模型和数据集
with strategy.scope():train_dataset = strategy.experimental_distribute_dataset(train_dataset)
3. 使用交错读取(Interleave)
交错读取可以同时从多个文件中读取数据,这可以显著提高I/O效率。
def parse_function(proto):# 解析TFRecord文件中的示例return tf.io.parse_single_example(proto, features)#假设file_pattern是TFRecord文件的通配符
files = tf.data.Dataset.list_files(file_pattern)
dataset = files.interleave(lambda filename: tf.data.TFRecordDataset(filename).map(parse_function),cycle_length=4, # 并行读取的文件数block_length=16 # 每个文件读取的记录数
)
4. 使用缓存
如果数据集可以放入内存,可以在预处理后缓存数据集,以避免在每次epoch时重新读取数据。
train_dataset = train_dataset.cache()
5. 使用重复数据集
为了进行多次迭代,可以使用repeat方法。
train_dataset = train_dataset.repeat()
6. 使用优化器
使用tf.data API的优化器来自动调整数据加载的性能。
options = tf.data.Options()
options.experimental_optimization.autotune = True
train_dataset = train_dataset.with_options(options)
总结
在TPU上训练时,数据处理的关键是确保数据加载和预处理不会成为瓶颈。使用tf.data API的上述技术可以帮助你有效地利用TPU的计算能力,从而加速模型的训练过程。记住,批量大小、数据预处理和I/O操作都是需要根据具体情况调整的重要参数。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了CPU、GPU、TPU。
相关文章:
嵌入式硬件篇---CPUGPUTPU
文章目录 第一部分:处理器CPU(中央处理器)1.通用性2.核心数3.缓存4.指令集5.功耗和发热 GPU(图形处理器)1.并行处理2.核心数量3.内存带宽4.专门的应用 TPU(张量处理单元)1.为深度学习定制2.低精…...
pytorch图神经网络处理图结构数据
人工智能例子汇总:AI常见的算法和例子-CSDN博客 图神经网络(Graph Neural Networks,GNNs)是一类能够处理图结构数据的深度学习模型。图结构数据由节点(vertices)和边(edges)组成&a…...
海外问卷调查,最常用到的渠道查有什么特殊之处
市场调研,包含市场调查和市场研究两个步骤,是企业和机构根据经营方向而做出的决策问题,最终通过海外问卷调查中的渠道查,来系统地设计、收集、记录、整理、分析、研究市场反馈的工作流程。 市场调研的工作流程包括:确…...
【Uniapp-Vue3】解决uni-popup弹窗在安全区显示透明问题
我们在使用uni-popup时,如果想要给弹出内容添加一个背景颜色,我们会发现在安全区域是不显示该背景颜色的。 首先根据如下的目录结构找到uni-popup.vue文件 在该文件中找到bottom配置,将红箭头所指代码注释掉 下面的安全区域就没有了ÿ…...
什么是麦克斯韦方程
飞书链接,格式更好,⭐⭐⭐:长尾 - 什么是麦克斯韦方程 基于作者的内容,做了一些扩展(问了 DeepSeek) 最美的公式:你也能懂的麦克斯韦方程组(积分篇) 04通量的引入 用一个…...
webrtc peerconnection_client peerconnection_server 连接失败问题解决 win10 win11
0 常见问题 (1) webrtc peerconnection_client 连接 peerconnection_server 无连接列表 (2)连接导致崩溃debug状态下因为这个断言 RTC_DCHECK_RUN_ON(&capture_checker_); 1 在 peerconnection\client\main.cc 当中 定义类 class CustomSock…...
项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser
文章目录 一、情景说明二、解决办法 一、情景说明 在重写若依后端服务的过程中 使用了Redis存放LoginUser对象数据 那么,有存就有取 在取值的时候,报错 二、解决办法 方法1、在TokenService中修改如下 getLoginUser 方法中:LoginUser u…...
2025年2月1日(Keep calm and code Python)
“Keep calm and code Python” 的意思是 “保持冷静,编写 Python 代码”。 这句话来源于 “Keep Calm and Carry On”(保持冷静,继续前进),这是二战时期英国政府的宣传口号。后来,这种句式被广泛模仿&…...
核心集:DeepCore: A Comprehensive Library for CoresetSelection in Deep Learning
目录 一、TL;DR 二、为什么研究核心集? 三、问题定义和如何做 3.1 问题定义 3.2 业界方法 3.2.1 基于几何的方法 3.2.2 基于不确定性的方法 3.2.3 基于误差/损失的方法 3.2.5 GraNd 和 EL2N 分数 3.2.6 重要性采样 3.2.7 基于决策边界的办法 …...
Hot100之矩阵
73矩阵置零 题目 思路解析 收集0位置所在的行和列 然后该行全部初始化为0 该列全部初始化为0 代码 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length;int n matrix[0].length;List<Integer> list1 new ArrayList<>();List<…...
可视化相机pose colmap形式的相机内参外参
目录 内参外参转换 可视化相机pose colmap形式的相机内参外参 内参外参转换 def visualize_cameras(cameras, images):fig plt.figure()ax fig.add_subplot(111, projection3d)for image_id, image_data in images.items():qvec image_data[qvec]tvec image_data[tvec]#…...
第十二章 I 开头的术语
文章目录 第十二章 I 开头的术语以 I 开头的术语被识别 (identified by)识别关系 (identifying relationship)身份 (identity)idkey隐式全局引用 (implicit global reference)隐含命名空间 (implied namespace)包含文件 (include file)传入锁 (incoming lock) 索引 (index)索引…...
C# 类与对象详解
.NET学习资料 .NET学习资料 .NET学习资料 在 C# 编程中,类与对象是面向对象编程的核心概念。它们让开发者能够将数据和操作数据的方法封装在一起,从而构建出模块化、可维护且易于扩展的程序。下面将详细介绍 C# 中类与对象的相关知识。 一、类的定义 …...
Windsurf cursor vscode+cline 与Python快速开发指南
Windsurf简介 Windsurf是由Codeium推出的全球首个基于AI Flow范式的智能IDE,它通过强大的AI助手功能,显著提升开发效率。Windsurf集成了先进的代码补全、智能重构、代码生成等功能,特别适合Python开发者使用。 Python环境配置 1. Conda安装…...
深度解析:网站快速收录与服务器性能的关系
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/37.html 网站快速收录与服务器性能之间存在着密切的关系。服务器作为网站运行的基础设施,其性能直接影响到搜索引擎对网站的抓取效率和收录速度。以下是对这一关系的深度解析&am…...
Linux tr 命令使用详解
简介 tr (translate)命令用于在 Linux 中翻译或删除输入流(通常是 stdin )中的字符。它主要用于文本操作,并且可以作为转换或删除文本文件或流中的特定字符的方便工具。 基本语法 tr [OPTION] [SET1] [SET2]SET1&am…...
数据库内存与Buffer Pool
数据库内存与Buffer Pool 文章目录 数据库内存与Buffer Pool一:MySQL内存结构1:MySQL工作组件2:工作线程的本地内存3:共享内存区域4:存储引擎缓冲区 二:InnoDB的核心:Buffer Pool1:数…...
程序员学英文之At the Airport Customs
Dialogue-1 Making Airline Reservation预定机票 My cousin works for Xiamen Airlines. 我表哥在厦航上班。I’d like to book an air ticket. 我想预定一张机票。Don’t judge a book by its cover. 不要以貌取人。I’d like to book / re-serve a table for 10. 我想预定一…...
Redis代金卷(优惠卷)秒杀案例-单应用版
优惠卷表:优惠卷基本信息,优惠金额,使用规则 包含普通优惠卷和特价优惠卷(秒杀卷) 优惠卷的库存表:优惠卷的库存,开始抢购时间,结束抢购时间.只有特价优惠卷(秒杀卷)才需要填写这些信息 优惠卷订单表 卷的表里已经有一条普通优惠卷记录 下面首先新增一条秒杀优惠卷记录 { &quo…...
51单片机 01 LED
一、点亮一个LED 在STC-ISP中单片机型号选择 STC89C52RC/LE52RC;如果没有找到hex文件(在objects文件夹下),在keil中options for target-output- 勾选 create hex file。 如果要修改编程 :重新编译-下载/编程-单片机重…...
MusicFree-开源的第三方音乐在线播放和下载工具, 支持歌单导入[对标落雪音乐]
MusicFree 链接:https://pan.xunlei.com/s/VOI0RrVLTTWE9kkpt0U7ofGBA1?pwd4ei6#...
消息队列篇--原理篇--常见消息队列总结(RabbitMQ,Kafka,ActiveMQ,RocketMQ,Pulsar)
1、RabbitMQ 特点: AMQP协议:RabbitMQ是基于AMQP(高级消息队列协议)构建的,支持多种消息传递模式,如发布/订阅、路由、RPC等。多语言支持:支持多种编程语言的客户端库,包括Java、P…...
nacos 配置管理、 配置热更新、 动态路由
文章目录 配置管理引入jar包添加 bootstrap.yaml 文件配置在application.yaml 中添加自定义信息nacos 配置信息 配置热更新采用第一种配置根据服务名确定配置文件根据后缀确定配置文件 动态路由DynamicRouteLoaderNacosConfigManagerRouteDefinitionWriter 路由配置 配置管理 …...
程序代码篇---Numpyassert迭代器
文章目录 前言第一部分:Numpy1. 创建数组2. 数组索引和切片3. 数组形状操作4. 数组运算5. 数学函数6. 随机数生成7. 数组排序 第二部分:assert基本语法1.condition2.error_message 示例注意事项断言的用途 第三部分:迭代器迭代器协议1.__iter…...
(笔记+作业)书生大模型实战营春节卷王班---L0G2000 Python 基础知识
学员闯关手册:https://aicarrier.feishu.cn/wiki/QtJnweAW1iFl8LkoMKGcsUS9nld 课程视频:https://www.bilibili.com/video/BV13U1VYmEUr/ 课程文档:https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python 关卡作业:htt…...
分布式微服务系统架构第90集:现代化金融核心系统
#1.1 深化数字化转型,核心面临新挑战 1、架构侧:无法敏捷协同数字金融经营模式转型。 2、需求侧:业务需求传导低效始终困扰金融机构。 3、开发侧:创新产品上市速度低于期望。 4、运维侧:传统面向资源型监控体系难以支撑…...
浅谈Linux 权限、压缩、进程与服务
概述 放假回家,对Linux系统的一些知识进行重新的整理,做到温故而知新,对用户权限管理、文件赋权、压缩文件、进程与服务的知识进行了一次梳理和总结。 权限管理 Linux最基础的权限是用户和文件,先了解基础的用户权限和文件权限…...
SpringBoot中Excel表的导入、导出功能的实现
文章目录 一、easyExcel简介二、Excel表的导出2.1 添加 Maven 依赖2.2 创建导出数据的实体类4. 编写导出接口5. 前端代码6. 实现效果 三、excel表的导出1. Excel表导入的整体流程1.1 配置文件存储路径 2. 前端实现2.1 文件上传组件 2.2 文件上传逻辑3. 后端实现3.1 文件上传接口…...
JavaScript前后端交互-AJAX/fetch
摘自千峰教育kerwin的js教程 AJAX 1、AJAX 的优势 不需要插件的支持,原生 js 就可以使用用户体验好(不需要刷新页面就可以更新数据)减轻服务端和带宽的负担缺点: 搜索引擎的支持度不够,因为数据都不在页面上…...
动态规划DP 背包问题 完全背包问题(题目分析+C++完整代码)
概览检索 动态规划DP 概览(点击链接跳转) 动态规划DP 背包问题 概览(点击链接跳转) 完全背包问题 原题链接 AcWiing 3. 完全背包问题 题目描述 有 N种物品和一个容量是 V的背包,每种物品都有无限件可用。 第 i种物…...
