发布者发布算法有两种发布形式,分别是容器式发布和本地式发布。
容器式发布,适用于不需要GPU,环境安装较为简单的项目,可以在配置中将依赖填写完全,容器会将依赖环境一起打包后将算法进行部署,且可以随时调度容器到其他的机器上运行。
本地式发布,是为了解决带GPU环境,以及环境依赖较为复杂的情况。在这种情况下,本地如果存在可以跑通算法函数的环境,可以直接本地发布,调用vsource生成的本地运行脚本,连接集群的服务来完成一样的效果。
3.2.1 流程
首先安装最新版本的vsource:
pip uninstall vsource -ypip install vsource -i https://pypi.python.org/simple
整合算法工程文件夹,并且抽出一个新的Python文件用来承载算法函数,如:
import 依赖库model = 依赖库.get_model()def face_similarity(face_path1, face_path2):score = 计算逻辑return score
接下来编写配置文件(Python文件,配置以Python字典形式存在):
algorithm_config = {# 算法定义的名字'algorithm-name': 'new_algorithm',# 算法的版本号'version': '1.0.1',# 算法的作者,可以是邮箱的形式'author': 'xcy',# 算法工程文件夹的路径'service-dir': '/Users/ecohnoch/Desktop/VSOURCE_PLATFORM/algorithm_api/new_algorithm',# 算法函数的所处的Python文件名'service-filename': 'test_function.py',# 算法的函数的标识符'service-interface': 'random_number',# 算法所依赖的Python库及版本'requirements': ['numpy==1.19.0','opencv-python','requests'],# 算法所依赖的非Python的软件,以Ubuntu的安装方式为标准'pre-command': ['apt install -y libgl1-mesa-glx'],# 算法函数的所有入参,要【严格指定类型type】,类型包含float, int, str, path四种。'input-params': {'lower': {'type': 'float','describe': 'lower limit for thin function'},'upper': {'type': 'float','describe': 'upper limit for thin function'},},# 算法函数的所有出参,算法函数的返回必须是一个字典,key是字符串的形式# 算法函数的出参也要【严格指定类型type】也即是返回字典的每个key对应的value的type# 有四种type,分别是float, int, str, path'output-params': {'result': {'type': 'float','describe': 'calculated result'}}}
编写完配置后,通过vsource.parsealgorithm(config=algorithm_config)来生成一系列的配置与启动脚本。生成后,对应目录的下发会出现若干vsource开头的文件。
到这一步为止,是和算法容器式发布完全一致的流程,但接下来启动脚本的形式会发生不同。
发布用户选择本地式启动的话,首先要进入对应的虚拟环境,确保当前的系统环境可以跑起来该算法,然后用户无需安装任何其他的依赖,直接调用:
# 启动容器bash vsource_local_start.sh
调用结束后后台会挂起服务,用户可以通过查看vsource.log文件查看输出日志:
# 查看运行日志cat vsource.logs
发布用户如果想停止服务,需要从后台进程中选择进程并且kill该进程,查看所有vsource_service的进程号的命令为:
# 查看所有运行的vsource_service的进程号的命令ps -a | grep vsource_service# 杀死进程号为xxx的进程kill -9 xxx
发布用户在本地启动后,可以联系集群管理员,将上述的配置字典发送给管理员在集群进行注册,管理员注册后会更新vsource库提供新的接口。
3.2.2 示例
以简单的随机数生成为例,发布用户希望发布随机数生成的算法,如下列代码所示:
import numpy as npdef random_number(lower, upper):out = {'result': np.random.randint(lower, upper)}return out
上述代码依赖numpy,保存在random.number.py这个文件中。用户可以在同目录下,新建configs.py,输入下述的配置,并且进行脚本的生成:
import vsourceif __name__ == '__main__':algorithm_config = {# 算法定义的名字'algorithm-name': 'random_number',# 算法的版本号'version': '1.0.2',# 算法的作者'author': 'xcy',# 算法工程文件夹的路径'service-dir': './',# 算法函数的所处的Python文件名'service-filename': 'random_number.py',# 算法的函数的标识符'service-interface': 'random_number',# 算法所依赖的Python库及版本'requirements': ['numpy==1.19.0',],# 算法所依赖的非Python的软件,以Ubuntu的安装方式为标准'pre-command': [# 不需要任何的前置软件依赖# 'apt install -y libgl1-mesa-glx'],'input-params': {'lower': {'type': 'float','describe': 'lower limit for thin function'},'upper': {'type': 'float','describe': 'upper limit for thin function'},},'output-params': {'result': {'type': 'float','describe': 'calculated result'}}}vsource.parse_algorithm(algorithm_config)
运行上述的configs.py后,./的目录下会出现如下所示的一批文件:
如果是本地式部署算法,用户进入对应虚拟环境后,直接运行bash vsource_local_start.sh后,服务会自动挂起。
