机器学习:怎样在FPGA上调用已经训练好的模型

泻药。对机器学习不了解,对于题主的问题我不是很懂,我就先按照个人理解说说我的看法。
1. 首先机器学习是一个大类,具体不同算法原理不一样,不知道题主说的是哪种算法。关于算法的分类,可以参照以下链接。
机器学习十大算法都是何方神圣?看完你就懂了 | 雷锋网或者是以下图片(来源:Categories of algorithms(non exhaustive))
机器学习:怎样在FPGA上调用已经训练好的模型

2. 其次,关于你提到的把训练好的模型放在FPGA里跑的问题。据我所知,包括FPGA、GPU 在内的加速器在运用到机器学习中时,常常时用来提高训练效率缩短训练时间的。由于训练需要多次迭代,在CPU中运行可能时间会很长,这个时候使用FPGA加速优势就非常明显了。如果模型已经训练好,要根据已有模型给出计算结果计算量相对会小很多,这时候就要考虑用FPGA跑的必要性。
3. 再次,假设训练好的模型有必要在FPGA上跑(比如k-means做clustering的时候需要对每个点都进行多次计算),那么题主的问题是指如何设计FPGA内部逻辑,以及怎么读取给定的文件。关于怎么设计FPGA内部逻辑的问题,这个和一般FPGA加速设计类似,在这里就先不展开。有一点小经验就是如果要作出效率比较高的设计,就需要结合算法以及所运行的系统结构,比如算法的访存模式,FPGA的访存延迟,FPGA和CPU/Memory的通信,FPGA内部加速引擎如何并行,FPGA和CPU之间的workload分配,设计前先估计好所需要的资源等等。关于如何用FPGA读取你所需要的文件问题,如果你是单纯指怎么从内存/硬盘中都这个文件,那这个其实时比较简单的,主要看你用的什么架构。题主既然回GPU,那FPGA的方法和GPU是很像的。传统的方法就是CPU/host端把所需要的文件从硬盘读到内存,然后把这部分内存里的数据拷贝到内存的设备区,然后将设备区的地址(指针)、文件大小,类型等数据传给FPGA,FPGA拿到这些数据后就可以根据地址和大小把文件读过来,这些都是有函数的,编译器回帮你完成。至于你是怎么读这个文件(分段读,一次性读,随机读,读过来存在哪里)就是下一个问题了。如果你说的高效读取是指这个,那么问题特别复杂,需要对算法很了解,据我了解机器学习大部分应用应该是计算密集型的,计算是主要开销,在这个前提下,题主只需要关注第一个问题就好了,如果访存是问题,欢迎继续讨论。现在比较新的异构接口比如说OpenCAPI(IBM等组成的openpower开源社区提供),那么调用会更加简单高效。『插播广告:最近在合作完成一个OpenCAPI paradigm(这个咋翻译:模型?模式?)的开发,欢迎大家提需求啊,你们都需要什么样的访存?』
【机器学习:怎样在FPGA上调用已经训练好的模型】 刚开始学习,求大神们指出错误。

■网友
自己用Verilog或者VHDL写testing的代码,哪有直接调用这么好的事情啊?一个新手写出来的testing说不定都没有GPU跑得快
■网友
。。虽然被邀请了。但是机器学习宝宝真的不会。。主要做的图像处理方面的。。等着大牛来回答。来学习一下。


    推荐阅读