为什么 TPU 运算速度比普通的 GPU、CPU 组合快 15-30 倍? 降低运算精度

我们找到了一些资料,希望能够解答为什么 TPU 运算速度比普通的 GPU、CPU 组合快 15-30 倍。同时,我们认为 Google 在 TPU 研发上的这些创新极有可能将成为 Intel、AMD 跟进同类硬件开发的标杆,并最终成为一种趋势。

为什么 TPU 运算速度比普通的 GPU、CPU 组合快 15-30 倍?

一、针对深度学习的定制化研发

TPU 是谷歌专门为加速深层神经网络运算能力而研发的一款芯片,其实也是一款 ASIC。

ASIC,指依照产品需求不同而定制化的特殊规格集成电路,由特定使用者要求和特定电子系统的需要而设计、制造。一般来说,ASIC 在特定功能上进行了专项强化,可以根据需要进行复杂的设计,但相对来说,实现更高处理速度和更低能耗。相对应的,ASIC 的生产成本也非常高。

一般公司很难承担为深度学习开发专门处理器 ASIC 芯片的成本和风险。首先为了性能必须使用最好的半导体制造工艺,而现在用最新的工艺制造芯片一次性成本就要几百万美元,非常贵。就算有钱,还需要拉一支队伍从头开始设计,设计时间往往要到一年以上,time to market 时间太长,风险很大。如果无法实现规模化的应用,就算开发成功也缺少实际使用价值。所以,企业一般倾向于采用通用性的芯片(如 CPU、GPU),或者半定制化芯片(FPGA)。

谷歌之所以敢自己做定制化研发,一方面自然是有钱任性,另一方面也由于谷歌提供的很多服务,包括谷歌图像搜索(Google ImageSearch)、谷歌照片(Google Photo)、谷歌云视觉 API(Google Cloud Vision API)、谷歌翻译等产品和服务都需要用到深度神经网络。基于谷歌自身庞大的体量,开发一种专门的芯片开始具备规模化应用(大量分摊研发成本)的可能。

假如存在这样一个场景,其中人们在 1 天中使用谷歌语音进行 3 分钟搜索,并且我们要在正使用的处理器中为语音识别系统运行深度神经网络,那么我们就不得不翻倍谷歌数据中心的数量。

我们的负载是用高级的 TensorFlow 框架编写的,并是用了生产级的神经网络应用(多层感知器、卷积神经网络和 LSTM),这些应用占到了我们的数据中心的神经网络推理计算需求的 95%。

为什么 TPU 运算速度比普通的 GPU、CPU 组合快 15-30 倍?

表 1:6 种神经网络应用(每种神经网络类型各 2 种)占据了 TPU 负载的 95%。表中的列依次是各种神经网络、代码的行数、神经网络中层的类型和数量(FC 是全连接层、Conv 是卷积层,Vector 是向量层,Pool 是池化层)以及 TPU 在 2016 年 7 月的应用普及程度。 

相对于 CPU 和 GPU 的随时间变化的优化方法(高速缓存、无序执行、多线程、多处理、预取……),这种 TPU 的确定性的执行模型(deterministic execution model)能更好地匹配我们的神经网络应用的 99% 的响应时间需求,因为 CPU 和 GPU 更多的是帮助对吞吐量(throughout)进行平均,而非确保延迟性能。这些特性的缺失有助于解释为什么尽管 TPU 有极大的 MAC 和大内存,但却相对小和低功耗。

为什么 TPU 运算速度比普通的 GPU、CPU 组合快 15-30 倍?

TPU 各模块的框图。主要计算部分是右上方的黄色矩阵乘法单元。其输入是蓝色的「权重 FIFO」和蓝色的统一缓存(Unified Buffer(UB));输出是蓝色的累加器(Accumulators(Acc))。黄色的激活(Activation)单元在 Acc 中执行流向 UB 的非线性函数。

二、大规模片上内存

TPU 在芯片上使用了高达 24MB 的局部内存,6MB 的累加器内存以及用于与主控处理器进行对接的内存,总共占芯片面积的 37%(图中蓝色部分)。

这表示 Google 充分意识到片外内存访问是 GPU 能效比低的罪魁祸首,因此不惜成本在芯片上放了巨大的内存。相比之下,Nvidia 同时期的 K80 只有 8MB 的片上内存,因此需要不断地去访问片外 DRAM。 

为什么 TPU 运算速度比普通的 GPU、CPU 组合快 15-30 倍?

TPU 芯片布局图。蓝色的数据缓存占芯片的 37%。黄色的计算是 30%。绿色的 I/O 是 10%。红色的控制只有 2%。CPU 或 GPU 中的控制部分则要大很多(并且非常难以设计)。

三、低精度 (8-bit) 计算

TPU 的高性能还来源于对于低运算精度的容忍。

研究结果表明低精度运算带来的算法准确率损失很小,但是在硬件实现上却可以带来巨大的便利,包括功耗更低速度更快占芯片面积更小的运算单元,更小的内存带宽需求等。

这次公布的信息显示,TPU 采用了 8-bit 的低精度运算。也就是说每一步操作 TPU 将会需要更少的晶体管。在晶体管总容量不变的情况下,每单位时间可以在这些晶体管上运行更多的操作,这样就能够以更快的速度通过使用更加复杂与强大的机器学习算法得到更加智能的结果。

在 Google 的测试中,使用 64 位浮点数学运算器的 18 核心运行在 2.3 GHz 的 Haswell XeonE5-2699 v3 处理器能够处理每秒 1.3 TOPS 的运算,并提供 51GB / 秒的内存带宽;Haswell 芯片功耗为 145 瓦,其系统(拥有 256 GB 内存)满载时消耗 455 瓦特。相比之下,TPU 使用 8 位整数数学运算器,拥有 256GB 的主机内存以及 32GB 的内存,能够实现 34GB / 秒的内存带宽,处理速度高达 92 TOPS ,这比 Haswell 提升了 71 倍,此外,TPU 服务器的热功率只有 384 瓦。

四、脉动式数据流

对于 GPU,从存储器中取指令与数据将耗费大量的时间。TPU 甚至没有取命令的动作,而是主处理器提供给它当前的指令,而 TPU 根据目前的指令做相应操作,这使得 TPU 能够实现更高的计算效率。

在矩阵乘法和卷积运算中,许多数据是可以复用的,同一个数据需要和许多不同的权重相乘并累加以获得最后结果。因此,在不同的时刻,数据输入中往往只有一两个新数据需要从外面取,其他的数据只是上一个时刻数据的移位。

在这种情况下,把片上内存的数据全部 Flush 再去取新的数据无疑是非常低效的。根据这个计算特性,TPU 加入了脉动式数据流的支持,每个时钟周期数据移位,并取回一个新数据。这样做可以最大化数据复用,并减小内存访问次数,在降低内存带宽压力的同时也减小了内存访问的能量消耗。

为什么 TPU 运算速度比普通的 GPU、CPU 组合快 15-30 倍?

五、散热功能强化

对于性能来说,限制处理器速度的最大两个因素是发热与逻辑门的延迟,其中发热是限制速度最主要的因素。现在的处理器大部分使用的是 CMOS 技术,每一个时钟周期都会产生能量耗散,所以速度越快,热量就越大。下面是一张 CPU 时钟频率与能量消耗的关系,可以看到,芯片能耗随运算速度变化呈现指数级增长。

 

为什么 TPU 运算速度比普通的 GPU、CPU 组合快 15-30 倍?

TPU 在降低功耗的同时,对于散热能力也做了进一步的优化。从 TPU 的外观图可以看出,其中间突出一块很大的金属片,这便是为了可以很好地对 TPU 高速运算是产生大量的热进行耗散。

 

为什么 TPU 运算速度比普通的 GPU、CPU 组合快 15-30 倍?

六、硬件、软件持续优化

谷歌认为现在的 TPU 仍在硬件和软件方面存在很大的优化空间,比如假定用上了 NVIDIA K80 GPU 中的 GDDR5 内存,那么 TPU 就可以发挥出更好的性能。

此外,谷歌工程师还为 TPU 开发了名为 CNN1 的软件,其可以让 TPU 的运行速度比普通 CPU 高出 70 多倍!

<think>嗯,用户之前问过音频采集和处理模块的相关内容,现在又接着问MFCC的使用方法。看来他们可能是在做一个音频处理相关的项目,比如语音识别或者声音分析之类的。需要确认MFCC是什么,以及它在实际应用中是怎么被使用的。 首先,MFCC的全称是梅尔频率倒谱系数,是语音信号处理中常用的特征提取方法。用户可能已经了解了一些音频处理的基础模块,现在想进一步了解特征提取的具体技术。需要解释清楚MFCC的步骤,以及每个步骤的作用,比如预加重、分帧、加窗、FFT、梅尔滤波器组等等。 然后,用户可能想知道如何在实际项目中应用MFCC,可能需要一些代码示例或者库的推荐。比如使用Python的librosa库,或者MATLAB的工具箱。这时候需要给出具体的代码片段,说明每一步的操作,这样用户可以直接参考使用。 另外,用户可能关心MFCC的应用场景,比如语音识别、说话人识别、音乐分类等,需要举一些例子,说明MFCC在这些领域中的具体作用。同时,可能还需要提到参数调优的注意事项,比如帧长、帧移、梅尔滤波器数量等参数的选择对结果的影响。 还要考虑用户可能遇到的常见问题,比如如何处理不同的采样率,噪声环境下的MFCC提取,或者计算效率的问题。这时候需要给出一些优化建议,比如预处理降噪,调整参数平衡计算量和特征质量。 最后,总结一下MFCC的使用流程,强调关键点,确保用户能够按照步骤正确应用,并推荐相关的工具和库,方便他们速实现。同时提醒注意事项,帮助用户避免常见的错误。</think>以下是梅尔频率倒谱系数(MFCC)的完整使用指南,包含数学原理、实现步骤和工程实践细节: --- ### 一、MFCC核心原理 MFCC通过模拟人耳听觉特性提取语音特征,流程包含: $$ \text{信号} \xrightarrow{\text{预处理}} \text{频谱} \xrightarrow{\text{梅尔滤波}} \text{对数能量} \xrightarrow{\text{DCT}} \text{倒谱} $$ 关键步骤数学表达: 1. **梅尔频率转换**: $$ m = 2595 \log_{10}\left(1 + \frac{f}{700}\right) $$ 2. **三角滤波器组能量计算**: $$ H_m(k) = \begin{cases} \frac{k - f_{m-1}}{f_m - f_{m-1}} & f_{m-1} \leq k < f_m \\ \frac{f_{m+1} - k}{f_{m+1} - f_m} & f_m \leq k < f_{m+1} \\ 0 & \text{其他} \end{cases} $$ 3. **离散余弦变换(DCT)**: $$ c_n = \sum_{m=1}^{M} \log(E_m) \cdot \cos\left[\frac{\pi n(m-0.5)}{M}\right] $$ --- ### 二、MFCC完整实现步骤(Python示例) ```python import librosa import numpy as np # 1. 参数设置 sr = 16000 # 采样率 n_fft = 512 # FFT点数 n_mfcc = 13 # MFCC系数数量 n_mels = 40 # 梅尔滤波器数量 # 2. 加载音频 y, sr = librosa.load('audio.wav', sr=sr) # 3. 预加重(一阶高通滤波) pre_emphasis = 0.97 y = np.append(y[0], y[1:] - pre_emphasis * y[:-1]) # 4. 分帧加窗 frame_length = int(0.025 * sr) # 25ms帧长 hop_length = int(0.01 * sr) # 10ms帧移 frames = librosa.util.frame(y, frame_length, hop_length) windows = frames * np.hamming(frame_length)[:, None] # 5. 计算功率谱 mag = np.abs(np.fft.rfft(windows, n=n_fft, axis=0)) power = (mag ** 2) / n_fft # 6. 梅尔滤波器组 mel_basis = librosa.filters.mel(sr, n_fft, n_mels=n_mels) mel_energy = np.dot(mel_basis, power) # 7. 取对数 log_mel = np.log(mel_energy + 1e-6) # 避免log(0) # 8. DCT变换 mfcc = librosa.core.dct(log_mel, axis=0, norm='ortho')[:n_mfcc] # 9. 动态特征扩展(可选) delta = librosa.feature.delta(mfcc) delta2 = librosa.feature.delta(mfcc, order=2) mfcc_full = np.vstack([mfcc, delta, delta2]) ``` --- ### 三、工程实践要点 #### 1. 参数优化建议 | 参数 | 语音识别推荐值 | 音乐分析推荐值 | |---------------|----------------|----------------| | 采样率 | 16 kHz | 44.1 kHz | | 帧长/帧移 | 25ms/10ms | 46ms/23ms | | 梅尔滤波器数 | 20-40 | 40-80 | | DCT保留系数 | 12-20 | 20-30 | #### 2. 常见预处理增强 - **噪声抑制**:谱减法 $$ |X_{\text{clean}}(k)| = |X_{\text{noisy}}(k)| - \alpha \cdot |N(k)| $$ - **声道归一化**:倒谱均值减(CMS) $$ \hat{c}_n = c_n - \frac{1}{T}\sum_{t=1}^{T} c_n(t) $$ #### 3. 硬件加速方案 - **嵌入式实现**:CMSIS-DSP库(ARM Cortex-M) ```c arm_dct4_init_f32(&S, &arm_cfft_sR_f32_len256, 0, 1); arm_dct4_f32(&S, log_mel_input, mfcc_output); ``` - **GPU加速**:CUDA实现DCT(速度提升5-10--- ### 四、典型应用场景 1. **语音识别(ASR)** - 输入:MFCC(13)+Δ+ΔΔ=39维特征 - 模型:HMM-GMM或端到端RNN 2. **说话人识别** - 特征增强:增加20-40维的IMFCC(改进MFCC) - 分类器:GMM-UBM或i-vector 3. **音乐分类** - 扩展特征:增加节奏特征(BPM)+ 色度特征 - 深度学习:CNN处理MFCC图谱 --- ### 五、性能优化技巧 1. **实时性优化** - 定点化处理:Q15格式保留精度 - 查表法:预计算梅尔滤波器系数 2. **内存优化** - 环形缓冲区:避免重复分帧 - 原位运算:复用内存空间 3. **精度提升** - 频域插值:改进低频分辨率 - 分频带归一化:提升鲁棒性 --- ### 六、工具库推荐 | 工具 | 优势领域 | 性能指标(1s音频) | |---------------|-----------------------|-------------------| | librosa | 算法原型开发 | 15ms (CPU) | | Kaldi | 工业级语音识别 | 2ms (GPU) | | MATLAB Audio | 滤波器设计验证 | 50ms | | TensorFlow | 端到端学习 | 10ms (TPU) | --- ### 注意事项 1. **采样对齐**:确保帧长是FFT点数的整数 2. **静音检测**:建议配合VAD算法提升效率 3. **环境适配**:不同场景需重新校准梅尔滤波器组 如果需要特定应用(如低功耗嵌入式语音唤醒)的MFCC实施方案,可提供具体硬件平台参数(CPU主频、内存限制等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值