嵌入式硬件篇---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。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67714.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67714.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67714.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

03-機器學習-數據獲取

一、流行機器學習數據集 主流機器學習數據集匯總 數據集名稱描述來源MNIST手寫數字圖像數據集,由美國人口普查局員工書寫。MNIST官網ImageNet包含數百萬張圖像,用于圖像分類和目標檢測。ImageNet官網AudioSet包含YouTube音頻片段,用于聲音分…

doris:STRUCT

STRUCT<field_name:field_type [COMMENT comment_string], ... > 表示由多個 Field 組成的結構體&#xff0c;也可被理解為多個列的集合。 不能作為 Key 使用&#xff0c;目前 STRUCT 僅支持在 Duplicate 模型的表中使用。一個 Struct 中的 Field 的名字和數量固定&…

一次端口監聽正常,tcpdump無法監聽到指定端口報文問題分析

tcpdump命令&#xff1a; sudo tcpdump -i ens2f0 port 6471 -XXnnvvv 下面是各個部分的詳細解釋&#xff1a; 1.tcpdump: 這是用于捕獲和分析網絡數據包的命令行工具。 2.-i ens2f0: 指定監聽的網絡接口。ens2f0 表示本地網卡&#xff09;&#xff0c;即計算機該指定網絡接口捕…

“新月智能武器系統”CIWS,開啟智能武器的新紀元

新月人物傳記&#xff1a;人物傳記之新月篇-CSDN博客 相關文章鏈接&#xff1a;星際戰爭模擬系統&#xff1a;新月的編程之道-CSDN博客 新月智能護甲系統CMIA--未來戰場的守護者-CSDN博客 “新月之智”智能戰術頭盔系統&#xff08;CITHS&#xff09;-CSDN博客 目錄 智能武…

實驗六 項目二 簡易信號發生器的設計與實現 (HEU)

聲明&#xff1a;代碼部分使用了AI工具 實驗六 綜合考核 Quartus 18.0 FPGA 5CSXFC6D6F31C6N 1. 實驗項目 要求利用硬件描述語言Verilog&#xff08;或VHDL&#xff09;、圖形描述方式、IP核&#xff0c;結合數字系統設計方法&#xff0c;在Quartus開發環境下&#xff…

SCRM系統如何提升客戶管理及業務協同的效率與價值

內容概要 在當今商業環境中&#xff0c;SCRM系統&#xff08;社交客戶關系管理系統&#xff09;正逐漸受到越來越多企業的關注和重視。隨著科技的發展&#xff0c;傳統的客戶管理方式已經無法滿足快速變化的市場需求&#xff0c;SCRM系統通過整合客戶數據和社交網絡信息&#…

[免費]微信小程序智能商城系統(uniapp+Springboot后端+vue管理端)【論文+源碼+SQL腳本】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的微信小程序智能商城系統(uniappSpringboot后端vue管理端)&#xff0c;分享下哈。 項目視頻演示 【免費】微信小程序智能商城系統(uniappSpringboot后端vue管理端) Java畢業設計_嗶哩嗶哩_bilibili 項目介紹…

PID算法的數學實現和參數確定方法

目錄 概述 1 算法描述 1.1 PID算法模型 1.2 PID離散化的圖形描述 1.3 PID算法的特點 2 離散化的PID算法 2.1 位置式PID算法 2.2 增量式PID算法 2.3 位置式PID與增量式PID比較 3 控制器參數整定 3.1 PID參數確定方法 3.1.1 湊試法 3.1.2 臨界比例法 3.1.3 經驗法…

《DeepSeek R1:大模型最簡安裝秘籍》

DeepSeek R1&#xff1a;AI 大模型界的新起之秀 在人工智能的璀璨星空中&#xff0c;大模型如繁星般閃耀&#xff0c;而 DeepSeek R1 無疑是其中一顆冉冉升起的新星&#xff0c;自問世以來便吸引了全球的目光&#xff0c;在人工智能領域占據了重要的一席之地。 從性能表現上看…

【論文閱讀】RAG-Reward: Optimizing RAG with Reward Modeling and RLHF

研究背景 研究問題&#xff1a;這篇文章要解決的問題是如何優化檢索增強生成&#xff08;RAG&#xff09;系統&#xff0c;特別是通過獎勵建模和人類反饋強化學習&#xff08;RLHF&#xff09;來提高大型語言模型&#xff08;LLMs&#xff09;在RAG任務中的效果。研究難點&…

【數據結構】(3)包裝類和泛型

一、包裝類 1、什么是包裝類 將基礎類型包裝成的類就是包裝類。由于基礎類型不是繼承 Object 類的類&#xff0c;所以在泛型不能直接支持基礎類型&#xff0c;為了解決這個問題&#xff0c;就需要把基礎類型轉換為對應的包裝類。 基礎類型對應的包裝類 基礎類型包裝類byteByte…

DBUtils中QueryRunner(空參,傳數據源)構造方法的區別及應用場景

關于學習Spring框架時重構DAO層時&#xff0c;遇到的QueryRunner構造方法的問題&#xff0c;回憶MySQL中DBUtils部分 1. 空參構造方法 new QueryRunner() 特點&#xff1a; 不綁定數據源&#xff1a;QueryRunner 實例內部沒有 DataSource&#xff0c;因此無法自動獲取連接。 …

C++11線程

C11提供了線程庫&#xff0c;下面我們來看一下如何使用。 線程的創建 頭文件 要創建一個線程需要包一個線程頭文件:#include <thread> 我們先來看看thread支持的構造方式。 支持默認構造&#xff0c;直接使用thread創建一個空的線程對象。 也支持帶參的構造&#x…

梯度提升用于高效的分類與回歸

人工智能例子匯總:AI常見的算法和例子-CSDN博客 使用 決策樹(Decision Tree) 實現 梯度提升(Gradient Boosting) 主要是模擬 GBDT(Gradient Boosting Decision Trees) 的原理,即: 第一棵樹擬合原始數據計算殘差(負梯度方向)用新的樹去擬合殘差累加所有樹的預測值重…

Golang 并發機制-3:通道(channels)機制詳解

并發編程是一種創建性能優化且響應迅速的軟件的強大方法。Golang&#xff08;也稱為 Go&#xff09;通過通道&#xff08;channels&#xff09;這一特性&#xff0c;能夠可靠且優雅地實現并發通信。本文將揭示通道的概念&#xff0c;解釋其在并發編程中的作用&#xff0c;并提供…

Unity開發游戲使用XLua的基礎

Unity使用Xlua的常用編碼方式&#xff0c;做一下記錄 1、C#調用lua 1、Lua解析器 private LuaEnv env new LuaEnv();//保持它的唯一性void Start(){env.DoString("print(你好lua)");//env.DoString("require(Main)"); 默認在resources文件夾下面//幫助…

筆記:使用ST-LINK燒錄STM32程序怎么樣最方便?

一般板子在插件上&#xff0c; 8腳 3.3V;9腳 CLK;10腳 DIO;4腳GND ST_Link 19腳 3.3V;9腳 CLK;7腳 DIO;20腳 GND 燒錄軟件&#xff1a;ST-LINK Utility&#xff0c;Keil_5; ST_Link 接口針腳定義&#xff1a; 按定義連接ST_Link與電路板&#xff1b; 打開STM32 ST-LINK Uti…

網絡測試工具

工具介紹&#xff1a; 這是一個功能完整的網絡測速工具&#xff0c;可以測試網絡的下載速度、上傳速度和延遲。 功能特點&#xff1a; 1. 速度測試 - 下載速度測試 - 上傳速度測試 - Ping延遲測試 - 自動選擇最佳服務器 2. 實時顯示 - 進度條顯示測試進度 - 實時顯示測試狀…

java每日精進1.31(SpringSecurity)

在所有的開發的系統中&#xff0c;都必須做認證(authentication)和授權(authorization)&#xff0c;以保證系統的安全性。 一、基礎使用 1.依賴 <dependencies><!-- 實現對 Spring MVC 的自動化配置 --><dependency><groupId>org.springframework.bo…

簡單的SQL語句的快速復習

語法的執行順序 select 4 字段列表 from 1 表名列表 where 2 條件列表 group by 3 分組前過濾 having 分組后過濾 order by 5 排序字段列表 limit 6 分頁參數 聚合函數 count 統計數量 max 最大值 min 最小值 avg 平均 sum 總和 分組查詢使…