久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

張量處理單元

 金剛光 2023-08-05 發(fā)布于遼寧


張量處理單元( TPU )是專用集成電路( ASIC ),,它實(shí)現(xiàn)了針對(duì)計(jì)算要求而優(yōu)化的硬件電路深度神經(jīng)網(wǎng)絡(luò),。 TPU 基于復(fù)雜指令集計(jì)算機(jī)( CISC )指令集,,該指令集實(shí)現(xiàn)用于訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的復(fù)雜任務(wù)的高級(jí)指令,。 TPU 架構(gòu)的核心在于優(yōu)化矩陣運(yùn)算的脈動(dòng)數(shù)組。

The Architecture of TPUImage from: https://cloud.google.com/blog/big-data/2017/05/images/149454602921110/tpu-15.png

TensorFlow 提供了一個(gè)編譯器和軟件堆棧,,可將 API 調(diào)用從 TensorFlow 圖轉(zhuǎn)換為 TPU 指令,。以下框圖描述了在 TPU 堆棧頂部運(yùn)行的 TensorFlow 模型的體系結(jié)構(gòu):

Image from: https://cloud.google.com/blog/big-data/2017/05/images/149454602921110/tpu-2.pngFor more information on the TPU architecture, read the blog at the following link: https://cloud.google.com/blog/big-data/2017/05/an-in-depth-look-at-googles-first-tensor-processing-unit-tpu.

TPU 的 TensorFlow API 位于tf.contrib.tpu模塊中,。為了在 TPU 上構(gòu)建模型,使用以下三個(gè) TPU 特定的 TensorFlow 模塊:

  • tpu_configtpu_config模塊允許您創(chuàng)建配置對(duì)象,,其中包含有關(guān)將運(yùn)行模型的主機(jī)的信息,。
  • tpu_estimatortpu_estimator模塊將估計(jì)器封裝在[HTG2]類中。要在 TPU 上運(yùn)行估計(jì)器,,我們創(chuàng)建此類的對(duì)象,。
  • tpu_optimizertpu_optimizer模塊包裝優(yōu)化器。例如,,在下面的示例代碼中,,我們將tpu_optimizer類中的 SGD 優(yōu)化器包裝在tpu_optimizer類中。

例如,,以下代碼使用 TF Estimator API 為 TPU 上的 MNIST 數(shù)據(jù)集構(gòu)建 CNN 模型:

以下代碼改編自 https://github.com/tensorflow/tpu-demos/blob/master/cloud_tpu/models/mnist/mnist.py.

import tensorflow as tf

from tensorflow.contrib.tpu.python.tpu import tpu_config
from tensorflow.contrib.tpu.python.tpu import tpu_estimator
from tensorflow.contrib.tpu.python.tpu import tpu_optimizer

learning_rate = 0.01
batch_size = 128

def metric_fn(labels, logits):
    predictions = tf.argmax(logits, 1)
    return {
        "accuracy": tf.metrics.precision(
            labels=labels, predictions=predictions),
    }

def model_fn(features, labels, mode):
    if mode == tf.estimator.ModeKeys.PREDICT:
        raise RuntimeError("mode {} is not supported yet".format(mode))

    input_layer = tf.reshape(features, [-1, 28, 28, 1])
    conv1 = tf.layers.conv2d(
        inputs=input_layer,
        filters=32,
        kernel_size=[5, 5],
        padding="same",
        activation=tf.nn.relu)
    pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], 
                                    strides=2)
    conv2 = tf.layers.conv2d(
        inputs=pool1,
        filters=64,
        kernel_size=[5, 5],
        padding="same",
        activation=tf.nn.relu)
    pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2], 
                                    strides=2)
    pool2_flat = tf.reshape(pool2, [-1, 7 * 7 * 64])
    dense = tf.layers.dense(inputs=pool2_flat, units=128, 
                            activation=tf.nn.relu)
    dropout = tf.layers.dropout(
        inputs=dense, rate=0.4, 
        training=mode == tf.estimator.ModeKeys.TRAIN)
    logits = tf.layers.dense(inputs=dropout, units=10)
    onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32), depth=10)

    loss = tf.losses.softmax_cross_entropy(
        onehot_labels=onehot_labels, logits=logits)

    if mode == tf.estimator.ModeKeys.EVAL:
        return tpu_estimator.TPUEstimatorSpec(
            mode=mode,
            loss=loss,
            eval_metrics=(metric_fn, [labels, logits]))

    # Train.
  decaying_learning_rate = tf.train.exponential_decay(learning_rate,
                                               tf.train.get_global_step(),
                                               100000,0.96)

    optimizer = tpu_optimizer.CrossShardOptimizer(
            tf.train.GradientDescentOptimizer(
                learning_rate=decaying_learning_rate))

    train_op = optimizer.minimize(loss, 
            global_step=tf.train.get_global_step())
    return tpu_estimator.TPUEstimatorSpec(mode=mode, 
            loss=loss, train_op=train_op)

def get_input_fn(filename):
    def input_fn(params):
        batch_size = params["batch_size"]

        def parser(serialized_example):
            features = tf.parse_single_example(
                serialized_example,
                features={
                    "image_raw": tf.FixedLenFeature([], tf.string),
                    "label": tf.FixedLenFeature([], tf.int64),
                })
            image = tf.decode_raw(features["image_raw"], tf.uint8)
            image.set_shape([28 * 28])
            image = tf.cast(image, tf.float32) * (1\. / 255) - 0.5
  label = tf.cast(features["label"], tf.int32)
            return image, label

        dataset = tf.data.TFRecordDataset(
            filename, buffer_size=FLAGS.dataset_reader_buffer_size)
        dataset = dataset.map(parser).cache().repeat()
        dataset = dataset.apply(
            tf.contrib.data.batch_and_drop_remainder(batch_size))
        images, labels = dataset.make_one_shot_iterator().get_next()
        return images, labels
    return input_fn

# TPU config

master = 'local' #URL of the TPU instance
model_dir = '/home/armando/models/mnist'
n_iterations = 50 # number of iterations per TPU training loop
n_shards = 8 # number of TPU chips

run_config = tpu_config.RunConfig(
        master=master,
        evaluation_master=master,
        model_dir=model_dir,
        session_config=tf.ConfigProto(
            allow_soft_placement=True,
            log_device_placement=True
  ),
        tpu_config=tpu_config.TPUConfig(n_iterations,
                                        n_shards
        )
    )

estimator = tpu_estimator.TPUEstimator(
    model_fn=model_fn,
    use_tpu=True,
    train_batch_size=batch_size,
    eval_batch_size=batch_size,
    config=run_config)

train_file = '/home/armando/datasets/mnist/train' # input data file
train_steps = 1000 # number of steps to train for

estimator.train(input_fn=get_input_fn(train_file),
                max_steps=train_steps
                )

eval_file = '/home/armando/datasets/mnist/test' # test data file
eval_steps = 10

estimator.evaluate(input_fn=get_input_fn(eval_file),
                   steps=eval_steps
                   )

有關(guān)在 TPU 上構(gòu)建模型的更多示例,,請(qǐng)?jiān)L問以下鏈接:https://github.com/tensorflow/tpu-demos.

優(yōu)秀的 Verilog/FPGA開源項(xiàng)目介紹(二十)- 張量處理單元(TPU)

luoganttcc于 2022-12-07 17:38:20 發(fā)布849 收藏 14
分類專欄: 芯片 文章標(biāo)簽: fpga開發(fā) 開源

介紹

張量處理單元( Tensor Processing Unit, TPU ) 是谷歌專門為神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)開發(fā)的人工智能加速器 專用集成電路(ASIC) ,特別是使用谷歌自己的TensorFlow軟件,。谷歌于 2015 年開始在內(nèi)部使用 TPU,,并于 2018 年將它們作為其云基礎(chǔ)設(shè)施的一部分并通過提供較小版本的芯片出售給第三方使用。

張量處理單元于 2016 年 5 月在Google I/O上宣布:當(dāng)時(shí)該公司表示 TPU 已經(jīng)在其數(shù)據(jù)中心內(nèi)使用了一年多,。該芯片專為 Google 的TensorFlow框架設(shè)計(jì),,用于神經(jīng)網(wǎng)絡(luò)等機(jī)器學(xué)習(xí)應(yīng)用。

與圖形處理單元相比,,它設(shè)計(jì)用于大量低精度計(jì)算(例如低至8 位精度) ,,每焦耳有更多的輸入/輸出操作,無需用于光柵化/紋理映射的硬件,。根據(jù)Norman Jouppi的說法,, TPU ASIC安裝在散熱器組件中,該組件可以安裝在數(shù)據(jù)中心機(jī)架內(nèi)的硬盤驅(qū)動(dòng)器插槽中,。不同類型的處理器適合不同類型的機(jī)器學(xué)習(xí)模型,,TPU 非常適合CNN而 GPU 對(duì)一些全連接的神經(jīng)網(wǎng)絡(luò)有長處,而 CPU 對(duì)RNN有長處,。

經(jīng)過幾年的發(fā)展,,TPU已經(jīng)發(fā)布了四個(gè)版本,下面是其發(fā)展歷程:

詳細(xì)介紹:<【科普】什么是TPU?>

接下來介紹一些TPU項(xiàng)目,。

tinyTPU

?https://github.com/jofrfu/tinyTPU

該項(xiàng)目的目的是創(chuàng)建一個(gè)與谷歌的張量處理單元具有相似架構(gòu)的機(jī)器學(xué)習(xí)協(xié)處理器,。該實(shí)現(xiàn)的資源可定制,可以以不同的尺寸使用以適應(yīng)每種類型的 FPGA,。這允許在嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備中部署該協(xié)處理器,,但也可以擴(kuò)大規(guī)模以用于數(shù)據(jù)中心和高性能機(jī)器。AXI 接口允許以多種組合方式使用,。對(duì) Xilinx Zynq 7020 SoC 進(jìn)行了評(píng)估,。下面的鏈接中是使用vivado進(jìn)行使用的一個(gè)DEMO:

?https://github.com/jofrfu/tinyTPU/blob/master/getting_started.pdf

同時(shí),該項(xiàng)目也是一片論文的驗(yàn)證項(xiàng)目,,論文地址:

?https://reposit./bitstream/20.500.12738/8527/1/thesis.pdf

性能

使用 MNIST 數(shù)據(jù)集訓(xùn)練的樣本模型在不同大小的 MXU 上進(jìn)行了評(píng)估,,頻率為 177.77 MHz,理論性能高達(dá) 72.18 GOPS,。然后將實(shí)際時(shí)序測(cè)量與傳統(tǒng)處理器進(jìn)行比較:

177.77 MHz 的張量處理單元:

Matrix Width N

6

8

10

12

14

Instruction Count

431

326

261

216

186

Duration in us (N input vectors)

383

289

234

194

165

Duration per input vector in us

63

36

23

16

11

下面是其他處理器的對(duì)比結(jié)果:

Processor

Intel Core i5-5287U at 2.9 GHz

BCM2837 4x ARM Cortex-A53 at 1.2 GHz

Duration per input vector in us

62

763

Free-TPU

?https://github.com/embedeep/Free-TPU

編譯好的BOOTbin,,因?yàn)門PU和引腳沒關(guān)聯(lián),所以可以直接進(jìn)行使用驗(yàn)證,。

?https://github.com/embedeep/Free-TPU-OS

描述

Free TPU是用于深度學(xué)習(xí) EDGE 推理的商業(yè) TPU 設(shè)計(jì)的免費(fèi)版本,,可以部署在任何 FPGA 設(shè)備上,包括 Xilinx Zynq-7020 或 Kintex7-160T(這兩個(gè)都是生產(chǎn)的好選擇),。實(shí)際上,,不僅是 TPU 邏輯設(shè)計(jì), Free TPU還包括支持所有 caffe 層的 EEP 加速框架,,可以在任何 CPU 上運(yùn)行(如 Zynq-7020 的 ARM A9 或 INTEL/AMD),。TPU 和 CPU 在深度學(xué)習(xí)推理框架的計(jì)劃下相互協(xié)作(任何交替順序)。

系統(tǒng)結(jié)構(gòu)

對(duì)比

在用戶看來,,F(xiàn)ree-TPU和EEP-TPU功能相同,,但推理時(shí)間不同。

這是一個(gè)極其完整的項(xiàng)目,關(guān)于怎么運(yùn)行,,怎么調(diào)用都有很詳細(xì)的步驟,,這里就不再贅述了,更多詳情,,請(qǐng)?jiān)L問:

?https://www.

SimpleTPU

?https://github.com/cea-wind/SimpleTPU

張量處理單元旨在加速矩陣乘法,,特別是對(duì)于多層感知器和卷積神經(jīng)網(wǎng)絡(luò)。

此實(shí)現(xiàn)主要遵循 Google TPU Version 1,,該架構(gòu)在

?https:///ftp/arxiv/papers/1704/1704.04760.pdf

中有介紹,。

主要特點(diǎn)

Simple TPU 的主要特性包括

  • Int8 乘法和 Int32 累加器
  • 基于 VLIW 的并行指令
  • 基于向量架構(gòu)的數(shù)據(jù)并行

以下是 Simple TPU 可以支持的一些操作。

資源占用情況

雖然該工程比較完整,,后續(xù)也有DEMO演示,,但是該工程使用HLS制作的,詳細(xì)信息可以查看下面的網(wǎng)址

?https://www.cnblogs.com/sea-wind/p/10993958.html

tiny-tpu

?https://github.com/cameronshinn/tiny-tpu

谷歌的TPU架構(gòu):

Tiny TPU是基于 FPGA 的 Google張量處理單元的小規(guī)模實(shí)現(xiàn),。該項(xiàng)目的目標(biāo)是了解加速器設(shè)計(jì)從硬件到軟件的端到端技術(shù),,同時(shí)破譯谷歌專有技術(shù)的低層次復(fù)雜性。在此過程中,,我們探索了小規(guī)模,、低功耗 TPU 的可能性。

該項(xiàng)目在 Quartus 15.0 上綜合并編程到 Altera DE1-SoC FPGA 上,。

更多詳細(xì)信息:

?https://github.com/cameronshinn/tiny-tpu/blob/master/docs/report/report.pdf

TPU-Tensor-Processing-Unit

?https://github.com/leo47007/TPU-Tensor-Processing-Unit

介紹

在有兩個(gè)矩陣需要做矩陣乘法的場(chǎng)景下,,矩陣A(選擇權(quán)重矩陣)與矩陣B(選擇矩陣)相,每一個(gè)一個(gè)都是 32x32,。最后他們開始做每個(gè)矩陣的乘法,,每個(gè)矩陣的因素將首先轉(zhuǎn)換成一個(gè)順序輸入 TPU 中,輸入其特定的矩陣,,然后再將這些單元最多向連接的方向輸入,。在下一個(gè)周期中,每個(gè)單元將其權(quán)重和數(shù)據(jù)方向賦予下一個(gè)格,。從左到右,。

因?yàn)檫@個(gè)項(xiàng)目有中文的詳細(xì)介紹,所以就不過多贅述了,。

?https://.comzhihuzhuanlan./p/26522315

Systolic-array-implementation-in-RTL-for-TPU

?https://github.com/abdelazeem201/Systolic-array-implementation-in-RTL-for-TPU

如下圖所示,,在有兩個(gè)矩陣需要做矩陣乘法的場(chǎng)景下,矩陣A(命名權(quán)重矩陣)與矩陣B(命名數(shù)據(jù)矩陣)相乘,,每個(gè)矩陣為8x8,。一旦他們開始做矩陣乘法,兩個(gè)矩陣的這些系數(shù)將首先轉(zhuǎn)換成一個(gè)順序輸入到 TPU 中,,然后輸入到每個(gè)特定的隊(duì)列中,。然后這些隊(duì)列將最多向其連接的單元輸出 8 個(gè)數(shù)據(jù),這些單元將根據(jù)它接收到的權(quán)重和數(shù)據(jù)進(jìn)行乘法和加法。并且在下一個(gè)周期中,,每個(gè)單元格將其權(quán)重和數(shù)據(jù)轉(zhuǎn)發(fā)給下一個(gè)單元格,。權(quán)重從上到下,數(shù)據(jù)從左到右,。

該項(xiàng)目雖然完成了相關(guān)的目的,,但是只是完成了相關(guān)工作,,實(shí)際使用時(shí)需要進(jìn)行一些優(yōu)化,。

super_small_toy_tpu

?https://github.com/dldldlfma/super_small_toy_tpu

如果說上面幾個(gè)TPU比較復(fù)雜,那么這個(gè)就可以用“精簡”來形容了,。

整個(gè)代碼非常精簡,,適合入門想研究TPU的人。

AIC2021-TPU

?https://github.com/charley871103/TPU

?https://github.com/Oscarkai9139/AIC2021-TPU

?https://github.com/hsiehong/tpu

這個(gè)項(xiàng)目是AIC2021-TPU,,類似的項(xiàng)目有很多,,都是理論研究的項(xiàng)目,和上面的項(xiàng)目一樣都是非常非常適合入門研究的人員,,里面的理論都是極其詳細(xì)的,。

systolic-array

?https://github.com/Dazhuzhu-github/systolic-array

verilog實(shí)現(xiàn)TPU中的脈動(dòng)陣列計(jì)算卷積的module

data為實(shí)驗(yàn)數(shù)據(jù)

source為源碼

testbench 測(cè)試各個(gè)模塊用的testbench

data-preprocessing 原本是要寫將卷積操作用python預(yù)先imtocol操作的,但后來直接使用matlab生成數(shù)據(jù)進(jìn)行測(cè)試了

tpu_v2

?https://github.com/UT-LCA/tpu_v2

項(xiàng)目沒有多余的介紹,,整個(gè)項(xiàng)目是基于Altera-DE3設(shè)計(jì),,EDA工具是Quartus II。

google-coral-baseboard

?https://github.com/antmicro/google-coral-baseboard

NXP i.MX8X 和 Google 的 Edge TPU ML 推理 ASIC(也可作為Coral Edge TPU 開發(fā)板的一部分)的基板的開放硬件設(shè)計(jì)文件,。該板提供標(biāo)準(zhǔn) I/O 接口,,并允許用戶通過統(tǒng)一的柔性扁平電纜 (FFC) 連接器與兩個(gè)兼容 MIPI CSI-2 的視頻設(shè)備連接。

PCB 項(xiàng)目文件是在 Altium Designer 14.1 中準(zhǔn)備的,。

該項(xiàng)目是一個(gè)硬件方案,,谷歌Coral Edge TPU的硬件驗(yàn)證方案。

neural-engine

?https://github.com/hollance/neural-engine

大多數(shù)新的 iPhone 和 iPad 都有神經(jīng)引擎,,這是一種特殊的處理器,,可以讓機(jī)器學(xué)習(xí)模型變得非常快,,但對(duì)于這種處理器的實(shí)際工作原理,,公眾知之甚少。

Apple 神經(jīng)引擎(或 ANE)是NPU的一種,,代表神經(jīng)處理單元,。它就像 GPU,但 NPU 不是加速圖形,,而是加速卷積和矩陣乘法等神經(jīng)網(wǎng)絡(luò)操作,。

ANE 并不是唯一的 NPU——除了 Apple 之外,許多公司都在開發(fā)自己的 AI 加速器芯片。除了神經(jīng)引擎,,最著名的 NPU 是谷歌的 TPU(或 Tensor Processing Unit),。

這個(gè)項(xiàng)目并不是一個(gè)實(shí)現(xiàn)TPU的項(xiàng)目,但是是一個(gè)關(guān)于Apple 神經(jīng)引擎(或 ANE)介紹及相關(guān)文檔的集合的項(xiàng)目,。

總結(jié)

今天介紹了幾個(gè)TPU的項(xiàng)目,,因?yàn)樵趪鴥?nèi)TPU可能很多人都沒有聽說過,所以接下來我會(huì)出幾篇文章介紹一下,。同時(shí)這些項(xiàng)目前面幾個(gè)非常完整,,完全可以優(yōu)化后進(jìn)行商業(yè)推廣(注意開源協(xié)議),最后幾個(gè)項(xiàng)目是一些補(bǔ)充的知識(shí),,想要了解相關(guān)的知識(shí)的朋友可以查看一下,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多