加载中…
个人资料
梁喜健
梁喜健
  • 博客等级:
  • 博客积分:0
  • 博客访问:357,685
  • 关注人气:73
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
博文
标签:

tensorflow

serving

分类: IT那点事儿说起来却也又臭又长
       Tensorflow Serving是为训练好的模型提供对外rpc调用的接口服务器,它能够检测模型的最新版本并自动加载,使得模型到生产环境的部署更为便利。不得不说这个是一个非常好的工具,既免去了模型服务化的开发工作,又保证了迭代训练的模型能够快速上线。记得本博主去年还专门做过一段时间caffe模型的服务化,封装人脸识别和物体识别的http接口,一开始写起来还是挺麻烦的。最近团队内部NLP的模型训练切换到了Tensorflow, 于是乎便简单体验了一下Tensorflow Serving,这里做个简单的总结。

       安装Tensorflow Serving。目前,Tensorflow Serving只能通过编译方式来安装,具体方法和依赖在官方安装文档上说的很清楚,就不赘述了。这里只列一下本博主在编译时遇到的一个错
标签:

kubernetes

docker

centos6.5

分类: IT那点事儿说起来却也又臭又长
       最近在看Tensorflow分布式集群的东西,于是就想学着用Kubernetes来简化集群管理。无奈目前手头上只有几个CentOS 6.5的云主机可以用,又不能随便换成CentOS 7,所以只好凑合着用了。折腾了一天总算把k8s跑起来了,这里记录下整个安装部署过程,虽然可能对别人没什么参考价值

1、升级CentOS 6.5内核版本
因为CentOS 6.5的内核版本比较低,导致无法安装docker的较新版本,所以先把内核版本升级一下,安装新版内核方法如下:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-lt -y

标签:

mongodb

ismaster命令

分类: IT那点事儿说起来却也又臭又长
       最近本博主在阅读MongoDB的Golang版本驱动mgo的源代码,一来是想通过阅读一些优秀的Golang项目代码进一步学习Golang的高级用法,二来是因为目前公司的一些项目都在使用mgo作为MongoDB的驱动,理解其内部实现有助于更好地使用它,三来则是想通过阅读驱动代码迫使自己更加细致地去了解MongoDB的通信协议,从另一个角度加深对MongoDB自身功能的了解。

       在mgo中所有对MongoDB服务器的读写操作均通过Session来完成,无论Session连接的是MongoDB单点、复制集还是分片集群中的mongos。当Session首次被创建去连接参数给定的MongoDB服务器种子节点的时候,Session本身需要去识别它要连接的MongoDB服务器到底是单点、复制集还是mongos。如果连接的是MongoDB复制集,在参数没有提供全部节点列表的时候,Session需要主动去发现列表中未给出的节点。另外,因为复制集在发生Failover时可能会发生Primary节点切换导致复制集内部节点角色的变化,所以Session内部也需要有一个定期同
标签:

golang

core文件

gotraceback

分类: IT那点事儿说起来却也又臭又长
       前段时间本博主一直在做Golang和C语言的混合编程,期间在通过cgo调用C语言库时会出现程序崩溃的情况,于是就希望能够生成core文件来查看程序崩溃时的堆栈信息。那么Golang程序如何在崩溃后生成core文件呢?答案就是GOTRACEBACK这个环境变量。

       关于GOTRACEBACK环境变量的详细说明,可以参考官方文档在runtime一节的链接,这里仅列出文档中较为核心的说明如下(Golang版本为1.6)。根据文档的说明我们可以知道GOTRACEBACK的可选值为:none、single、all、system和crash,其中关于crash的说明就指出了在Unix系
标签:

golang

cgo

pkg-config

分类: IT那点事儿说起来却也又臭又长
       为了能够重用已有的C语言库,我们在使用Golang开发项目或系统的时候难免会遇到Go和C语言混合编程,这时很多人都会选择使用cgo。话说cgo这个东西可算得上是让人又爱又恨,好处在于它可以让你快速重用已有的C语言库,无需再用Golang重造一遍轮子,而坏处就在于它会在一定程度上削弱你的系统性能。关于cgo的种种劣迹,Dave Cheney大神在他的博客上有一篇专门的文章《cgo is not Go》,感兴趣的同学可以看一看。但话说回来,有时候为了快速开发满足项目需求,使用cgo也实在是不得已而为之。

       在Golang中使用cgo调用C库的时候,如果需要引用很多不同的第三方库,那么使用#cgo CFLAGS:和#cgo LDFLAGS:的方式会引入很多行代码。首先这会导致代码很丑陋,最重要的是如果引用的不是标准库,头文件路径和库文件路径写死的话就会很麻烦。一旦第三方库的安装路径变化了,Golang的代码也要跟着变化,所以使用p
标签:

redis

cluster

命令处理

分类: IT那点事儿说起来却也又臭又长
    在上一篇博文中,本博主介绍了Redis Cluster的搭建方法,从中可以看出其使用方法与单机版Redis确实存在着不小的差异。实际上,除了搭建配置方法以外,Redis Cluster还具有一些其他方面的不同,譬如它不支持多个数据库,不支持select命令等等,但其中最大的不同还是Redis Cluster不支持复杂的多主键操作。关于这一点,Redis Cluster的官方文档有这样一段描述,现摘录如下:Commands performing complex multi key operations like Set type unions or intersections are not implemented, and in general all the operations where in theory keys are not available in the same node are not implemented。由这段描述可知,在Redis Cluster中任何跨节点的命令都是不允许的,但是落实到具体的系统实现中,Redis Cluster又是如何去处理这些命令的呢?我们不妨通过两种典型的命令来验证一下,其中一种是MULTI/EXEC事务命令,该命令可以将多条Redis命令一次执行,所以这类命令可能同时操作多个主键,另外一种是本身就支持多主键的命令如mset和mget等。下面,本博主就在之前搭建的Redis Cluster上,分别尝试了以上两类命令的不同执行场景,以此来感性地认识Redis Cl
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有