嵌入式硬件篇---CPUGPUTPU

embedded/2025/2/3 0:35:07/

文章目录

  • 第一部分:处理器
    • 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. 使用优化器
  • 总结


以上就是今天要讲的内容,本文仅仅介绍了CPUGPUTPU


第一部分:处理器

CPU_15">CPU(中央处理器)

CPU,即Central Processing Unit,是计算机的核心组件,负责执行计算机程序中的指令,处理数据,控制硬件。以下是CPU的一些特点:

1.通用性

通用性:CPU设计为能够处理各种不同的任务,从简单的计算到复杂的逻辑操作

2.核心数

核心数:现代CPU通常有多个核心,可以并行处理多个任务

3.缓存

缓存:CPU内部有不同级别的缓存,用于快速访问常用数据

4.指令集

指令集:CPU支持复杂的指令集,可以执行多种类型的操作

5.功耗和发热

功耗和发热:CPU执行复杂任务时功耗较高,发热也相对较大

GPU_28">GPU(图形处理器)

GPU,即Graphics Processing Unit,最初是为图形渲染设计的,但现在在科学计算、机器学习等领域也广泛应用

1.并行处理

并行处理:GPU包含大量的计算单元,擅长并行处理任务,如同时处理成千上万的像素数据。

2.核心数量

核心数量:GPU核心数量远超CPU,但每个核心相对简单,适合执行简单的重复任务

3.内存带宽

内存带宽:GPU通常具有高内存带宽,以支持大量的数据传输。

4.专门的应用

专门的应用:除了图形渲染GPU深度学习其他需要大规模并行计算的场景中表现出色。

TPU_39">TPU(张量处理单元)

TPU,即Tensor Processing Unit,是Google专门为深度学习计算设计的ASIC(Application-Specific Integrated Circuit)。

1.为深度学习定制

为深度学习定制:TPU针对深度学习中的矩阵乘法和卷积运算进行了优化。

2.低精度计算

低精度计算:TPU在**低精度(如16位或8位)**计算上表现出色,这有助于提高能效和速度。

3.固定的功能

固定的功能:与CPUGPU的通用性不同,TPU的功能更固定,专注于加速深度学习推断和训练

4.内存和存储

内存和存储:TPU具有大量的内存和存储,以支持大规模的神经网络计算。

总结

CPU:适用于通用计算,能够处理各种复杂的任务和指令
GPU:适用于需要大量并行处理的任务,如图形渲染和深度学习
TPU:专门为深度学习设计,提供了针对特定类型计算的优化
这三种处理器在现代计算系统中通常协同工作,以提供最佳的性能和效率。

TPU_57">第二部分:在Google Colab中使用TPU

TPU_58">启动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'

TPU_65">安装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_71">初始化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()

TPUTPU_100">在Google Cloud TPU中使用TPU

TPU_101">创建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_117">连接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_146">第三部分: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)

TPU_183">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操作都是需要根据具体情况调整的重要参数。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了CPUGPUTPU


http://www.ppmy.cn/embedded/159046.html

相关文章

SpringBoot 中的测试jar包knife4j(实现效果非常简单)

1、效果图 非常快的可以看见你实现的接口 路径http://localhost:8080/doc.html#/home 端口必须是自己的 2、实现效果 2.1、导入jar包 <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-jakarta-spring-boot-star…

【leetcode】T541 (两点反思)

解题反思 闷着头往&#xff0c;往往会写成一团浆糊&#xff0c;还推倒重来&#xff0c;谋划好全局思路再开始很重要。 熟悉C的工具库很重要&#xff0c;一开始看到反转就还想着用stack来着&#xff0c;后面突然想起来用reverse函数刚好可以用哇&#xff0c;这题也就迎刃而解了…

python小知识-typing注解你的程序

python小知识-typing注解你的程序 1. Typing的简介 typing 是 Python 的一个标准库&#xff0c;它提供了类型注解的支持&#xff0c;但并不会强制类型检查。类型注解在 Python 3.5 中引入&#xff0c;并在后续版本中得到了增强和扩展。typing 库允许开发者为变量、函数参数和…

受限玻尔兹曼机:原理、实现、与神经网络对比及应用

本文要点 受限玻尔兹曼机&#xff08;Restricted Boltzmann Machine, RBM&#xff09;是一种强大的生成式随机神经网络&#xff0c;在机器学习和深度学习领域有着广泛的应用。本文将深入探讨受限玻尔兹曼机的原理&#xff0c;详细介绍其与玻尔兹曼分布的关系、“受限”的含义以…

【C语言】static关键字的三种用法

【C语言】static关键字的三种用法 C语言中的static关键字是一个存储类说明符&#xff0c;它可以用来修饰变量和函数。static关键字的主要作用是控制变量或函数的生命周期和可见性。以下是static关键字的一些主要用法和含义&#xff1a; 局部静态变量&#xff1a; 当static修饰…

页高速缓存与缓冲区缓存的应用差异

页高速缓存&#xff08;Page Cache&#xff09;与缓冲区缓存&#xff08;Buffer Cache&#xff09;是计算机系统中用于提高数据访问性能的两种不同类型的缓存机制&#xff0c;它们的差异主要体现在以下几个方面&#xff1a; 缓存目的 页高速缓存&#xff1a;主要用于加速对磁…

Electron使用WebAassembly实现CRC-8 MAXIM校验

Electron使用WebAssembly实现CRC-8 MAXIM校验 将C/C语言代码&#xff0c;经由WebAssembly编译为库函数&#xff0c;可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-8 MAXIM格式校验的方式。 CRC-8 MAXIM校验函数WebAssebly源文件 C语言实现CR…

记录一次Sqoop从MySQL导入数据到Hive问题的排查经过

个人博客地址:记录一次Sqoop从MySQL导入数据到Hive问题的排查经过 | 一张假钞的真实世界 问题描述 MySQL中原始数据有790W+的记录数,在Sqoop抽取作业成功的情况下在Hive中只有500W左右的记录数。 排查过程 数据导入脚本Log 通过Log可以发现以下信息: 该Sqoop任务被分解…