FPGA具有低功耗,低延时,高性能的特点,在深度学习计算领域有很广阔的应用前景。FPGA从2013年开始就应用在许多典型的深度学习模型中,如DNN,RNN,CNN,LSTM等,涵盖了语音识别,自然语言处理,推荐算法,图像识别等广泛的应用领域。
FPGA云服务器提供了基于FPGA的深度卷积神经网络加速服务,单卡提供约3TOPs的定点计算能力,支持典型深度卷积网络算子,如卷积、逆卷积、池化、拼接、切割等。有效加速典型网络结构如VggNet、GoogLeNet、ResNet等。
我们基于FPGA的深度学习硬件,定制优化了主流深度学习平台,如caffe等,您可以直接将深度学习业务切换到FPGA平台,而无需考虑底层硬件细节。
通过使用预先训练好的ResNet-50进行图像分类性能的对比测试,在CPU、GPU和FPGA三类设备的物理机上的测试结果如下:
其中:
CPU为Intel Xeon CPU E5-2650 v3,使用OpenBLAS占用4核进行测试
GPU为Nvidia Tesla K40m
测试结果可以明显看到FPGA在时延上跟GPU差不多,比CPU快了超过12倍,在吞吐上FPGA更是比GPU超出1.5倍和比CPU超出近7倍。
CNN图像分类API接口
设备管理接口
查询FPGA设备通道数量
定义:int get_fpga_tunnel_num()
功能:获取FPGA设备通道数量
参数:无
返回:当前主机FPGA设备上独立通道数量
初始化FPGA设备句柄
定义:init_fpga_handle(FpgaHandle& fh, const FpgaHandle::Mode mode = FpgaHandle::FPGA_MODE, const int tunnel = 0)
功能:初始化FPGA设备句柄
参数:
参数说明
fh FPGA设备句柄
mode 计算模式,取值范围FPGA_MODE或者CPU_MODE,默认FPGA模式
tunnel 使用设备通道,机器上FPGA设备有两个可以并行的独立计算通道,默认使用0号通道
返回:成功返回0,失败返回-1
释放FPGA设备句柄
定义:int free_fpga_handle(FpgaHandle& fh)
功能:释放FPGA设备句柄
参数:
参数说明
fh FPGA设备句柄
返回:成功返回0,失败返回-1
图像分类相关接口
加载训练好的CNN模型
定义:int cnn_fpga_load(FpgaHandle& fh, const std::string& cnn_proto, const std::string& cnn_model, const std::string& cnn_means, const std::string& cnn_labels)
功能:加载训练好的CNN模型
参数:
参数说明
fh FPGA设备句柄
cnn_proto CNN模型定义prototxt文件路径
cnn_model CNN模型caffemodel权值文件路径
cnn_means 图像均值文件路径
cnn_labels 图像标签文件路径
返回:成功返回0,失败返回-1
使用CNN模型分类图像
定义:int cnn_fpga_classify(FpgaHandle& fh, const cv::Mat& image, const int topk, std::vector& scores, std::vector& labels)
功能:使用CNN模型分类图像
参数:
参数说明
fh FPGA设备句柄
image 输入图像
topk 概率最大的k个结果
scores 分类概率
labels 分类标签
返回:成功返回0,失败返回-1
释放CNN模型使用资源
定义:int cnn_fpga_free(FpgaHandle& fh)
功能:释放CNN模型使用资源
参数:
参数说明
fh FPGA设备句柄
返回:成功返回0,失败返回-1
CNN图像分类DEMO说明
目录结构如下:
fpga-cnn
|----demo
>
|----env.sh
|----fpga_demo.cpp
|----Makefile
|----run_fpga.sh
|----run.sh
|----models
>
|----ResNet-50
>
|----ResNet-50.caffemodel
|----ResNet-50.labels
|----ResNet-50.means.binaryproto
|----ResNet-50.prototxt
|----ResNet-50.test.jpg
|----dependency/
|----include/
|----lib/
编译方法
在fpga-cnn/demo目录下运行:make clean && make
运行方法
1.脚本用CPU模式运行ResNet-50分类
在fpga-cnn/demo目录下运行:sh run.sh
2.脚本用FPGA模式运行ResNet-50分类
在fpga-cnn/demo目录下运行:sh run_fpga.sh
3.通过fpga_demo运行
./fpga_demo mode case
其中,mode参数可以是cpu或者fpga,case参数为模型目录和文件名称
CNN图像分类DEMO
为了便于用户开发,FPGA 云服务器包装了CNN图像分类demo:
目录结构
fpga-cnn
|----demo
|----env.sh
|----fpga_demo.cpp
|----Makefile
|----run_fpga.sh
|----run.sh
|----models
|----ResNet-50
|----ResNet-50.caffemodel
|----ResNet-50.labels
|----ResNet-50.means.binaryproto
|----ResNet-50.prototxt
|----ResNet-50.test.jpg
|----dependency/
|----include/
|----lib/
编译方法
在fpga-cnn/demo目录下运行:make clean && make
运行方法
脚本用CPU模式运行ResNet-50分类
在fpga-cnn/demo目录下运行:sh run.sh
脚本用FPGA模式运行ResNet-50分类
在fpga-cnn/demo目录下运行:sh run_fpga.sh
通过fpga_demo运行 ./fpga_demo mode case
其中,mode参数可以是cpu或者fpga,case参数为模型目录和文件名称
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)