Golang 客户端

Golang的gRPC客户端代码需要我们自己实现,通过TensorFlow Serving提供的model.proto、predict.proto和prediction_service.proto来生成protobuf和gRPC文件,而它还依赖TensorFlow项目中的TensorProto等proto定义,我们在deep_recommend_system项目中也提供了一个Shell脚本来生成。

用户需要根据不同模型的输入格式,生成对应的TensorProto对象,也就是inference时需要的多维数组格式,目前我们已经支持稠密的Tensor输入和稀疏的SparseTensor输入,基本涵盖了大部分深度学习模型。对于用户自定义的模型,可以通过exporter指定输入和输出op,不需要修改Serving源码就可以直接加载,gRPC接口和数据交换格式都是通用的,只需要在构建inference数据时传入不同的shape和预测数据即可。

目前代码已经开放到 ,感谢小米网Golang团队和Github用户 @sparklxb 高质量的pull-request。如果你的业务正在使用Golang,同时也在使用TensorFlow和深度学习模型,对golang predict client有任何反馈欢迎在Github上交流。

Golang binding

TensorFlow对Golang的支持远不止提供gRPC client,如果你想在graph中对某个tensor进行保存和加载,可以参考 ,最新的tensorflow package已经可以在godoc中找到 。

总结

最后总结回答一个问题,使用Golang能否玩转TensorFlow和深度学习模型?答案是Yes,但目前直接使用Golang binding去训练深度学习模型还有很多不足(构建graph的灵活性和数值计算op数量还远不如Python),但通过我们提供的golang predict client,Golang应用也可以非常灵活并且轻易地访问预训练好的TensorFlow模型了。

deep_recommend_system是一个TensorFlow模板应用,已经支持通用的CSV稠密数据和LIBSVM稀疏数据的模型训练,实现了LR、MLP、CNN和Wide and deep模型,支持checkpoint、tensorboard、dropout、learning rate decay和batch normalization等特性,还有Python、Java、Scala、Spark和Golang等客户端实例,欢迎继续关注和star 。

热门文章推荐