Docker入门整理

对开发和管理人员来说,docker是一个用容器开发、发布、运行应用程序的平台。Docker主要包含两个概念,镜像(Image)、容器(container)、Docker Registry:

JNI开发整理

在进行JNI开发之前,我们必须要了解下面一些东西,首先JNI开发的流程,再然后我们需要了解一下Native和Java中类型映射关系,以及JVM中已经为我们提供的一些常用JNI函数,最后再了解一下C/C++开发的一些注意事项。

Python module加载机制剖析

之前实现了python module多版本动态加载,但是在最近一次一个小哥上传的模型中居然有对.so文件的import,十万只草泥马,Python居然还有这种操作,所以再一次对Python的import流程做了一次梳理。

记一次Python服务实例静默退出排查

这段时间发现一个python的服务实例经常静默退出,从应用日志里未找到任何异常现场,一切都很正常。

怎么办呢,首先想到的就是完善日志,应用启动入口try住,捕获BaseException异常进行输出,打包上线。

什么,又退出了,看看解释器层面有没有日志,Oh no,这不是JVM,没找到Python解释器层面有任何日志记录,鄙视Python。

基于全文检索引擎的语义向量编码和相似度检索

我们都知道Lucene只能解决文本层面的检索与相似度计算(TFIDF,BM25),无法解决语义层面的检索。尤其在当前机器学习如此火热的情况下,我们已经有很多方式对一个文本转为向量进行语义表征,所以在很多场景下我们会遇到向量检索的问题。

Skip List(跳跃表)

Skip List是一个基于链表的概率数据结构,是平衡树的简单且有效的替代品。为什么说是概率数据结构,这体现在skip list的创建和search上。
传统的链表很难快速跳转至某一个节点,所以查找也是很耗时的(即使这是一个有序的链表),skip list则解决这些问题,并且查找的时间复杂度是O(log n),所以skip list在lucene中也是一大利器。

Python多版本多module动态加载

这里有一个Python服务,它提供机器学习模型在线服务,用户只要将模型文件和加载、使用模型的的代码文件打包上传,该服务就可以将该模型上线。
无论是那种机器学习模型,要进行使用,肯定逃不了这两个套路:

  • 模型的加载(初始化)
  • 模型的调用(预测)
    也就是说我们可以在平台层面进行一定的约束,基于我们的规范实现,然后我们提供对应的服务。