除了芯片性能外,GPU 相对于 FPGA 还有一个优势就是内存接口。GPU 的内存接口(传统的 GDDR5,最近更是用上了 HBM 和 HBM2)的带宽远好于 FPGA 的传统 DDR 接口(大约带宽高 4-5 倍),而众所周知服务器端机器学习算法需要频繁访问内存,因此内存接口的带宽可以决定机器学习应用的性能。
传统显卡用的 GDDR 标准带宽比 FPGA 使用的 DDR4 大 4-5 倍(上图),而高端显卡更是用上了带宽更大的 HBM 接口的(中图),而即使高端 FPGA(如 Xilinx Ultrascale)的内存接口仍然是普通的 DDR4(下图) 但是从灵活性来说,FPGA 远好于 GPU。FPGA 可以根据特定的应用去编程硬件(例如如果应用里面的加法运算非常多就可以把大量的逻辑资源去实现加法器),但是 GPU 一旦设计完那就没法改动了,没法根据应用去调整硬件资源。目前机器学习大多数适合使用 SIMD 架构(即只需一条指令可以平行处理大量数据),因此用 GPU 很适合。但是有些应用是 MISD(即单一数据需要用许多条指令平行处理,微软在 2014 年 ISCA paper 里面就举了一个 MISD 用于并行提取 feature 的例子),这种情况下用 FPGA 做一个 MISD 的架构就会比 GPU 有优势。不过 FPGA 的编程对于程序员来说并不容易,所以为了能让机器学习程序员能方便地使用 FPGA 往往还需要在 FPGA 公司提供的编译器基础上进行二次开发,这些都是只有大公司才能做。
微软在 2014 年 ISCA paper 里面就 MISD 用于并行提取 feature 的例子 从上面两条我们可以看出,FPGA 实现的机器学习加速器在架构上可以根据特定应用优化所以比 GPU 有优势,但是 GPU 的运行速度(>1GHz) 相比 FPGA 有优势 (~200MHz)。所以,对于平均性能,看的就是 FPGA 加速器架构上的优势是否能弥补运行速度上的劣势。如果 FPGA 上的架构优化可以带来相比 GPU 架构两到三个数量级的优势,那么 FPGA 在平均性能上会好于 GPU。例如,百度在 HotChips 上发布的 paper 显示,GPU 的平均性能相比 FPGA 在矩阵运算等标准 batch data SIMD bench 上远好于 FPGA;但是在处理服务器端的少量多次处理请求(即频繁请求但每次请求的数据量和计算量都不大)的场合下,平均性能会比 GPU 更好。
Baidu 的研究显示,对于矩阵运算 bench GPU 远好于 FPGA,但是当处理小计算量大批次的实际计算时 FPGA 性能优于 GPU 功耗方面,虽然 GPU 的功耗(200W)远大于 FPGA 的功耗(10W),但是如果要比较功耗应该比较在执行效率相同时需要的功耗。如果 FPGA 的架构优化能做到很好以致于一块 FPGA 的平均性能能接近一块 GPU,那么 FPGA 方案的总功耗远小于 GPU,散热问题可以大大减轻。反之,如果需要二十块 FPGA 才能实现一块 GPU 的平均性能,那么 FPGA 在功耗方面并没有优势。能效比的比较也是类似,能效指的是完成程序执行消耗的能量,而能量消耗等于功耗乘以程序执行的时间。虽然 GPU 的功耗远大于 FPGA 的功耗,但是如果 FPGA 执行相同程序需要的时间比 GPU 长几十倍,那 FPGA 在能效比上就没有优势了;反之如果 FPGA 上实现的硬件架构优化得很适合特定的机器学习应用,执行算法所需的时间仅仅是 GPU 的几倍或甚至于接近 GPU,那么 FPGA 的能效比就会比 GPU 强。 结语 (责任编辑:本港台直播) |