发布者发布算法有两种发布形式,分别是容器式发布和本地式发布。

容器式发布,适用于不需要GPU,环境安装较为简单的项目,可以在配置中将依赖填写完全,容器会将依赖环境一起打包后将算法进行部署,且可以随时调度容器到其他的机器上运行。

本地式发布,是为了解决带GPU环境,以及环境依赖较为复杂的情况。在这种情况下,本地如果存在可以跑通算法函数的环境,可以直接本地发布,调用vsource生成的本地运行脚本,连接集群的服务来完成一样的效果。

本节介绍算法本地式发布。

3.2.1 流程

首先安装最新版本的vsource:

  1. pip uninstall vsource -y
  2. pip install vsource -i https://pypi.python.org/simple

整合算法工程文件夹,并且抽出一个新的Python文件用来承载算法函数,如:

  1. import 依赖库
  2. model = 依赖库.get_model()
  3. def face_similarity(face_path1, face_path2):
  4. score = 计算逻辑
  5. return score

接下来编写配置文件(Python文件,配置以Python字典形式存在):

  1. algorithm_config = {
  2. # 算法定义的名字
  3. 'algorithm-name': 'new_algorithm',
  4. # 算法的版本号
  5. 'version': '1.0.1',
  6. # 算法的作者,可以是邮箱的形式
  7. 'author': 'xcy',
  8. # 算法工程文件夹的路径
  9. 'service-dir': '/Users/ecohnoch/Desktop/VSOURCE_PLATFORM/algorithm_api/new_algorithm',
  10. # 算法函数的所处的Python文件名
  11. 'service-filename': 'test_function.py',
  12. # 算法的函数的标识符
  13. 'service-interface': 'random_number',
  14. # 算法所依赖的Python库及版本
  15. 'requirements': [
  16. 'numpy==1.19.0',
  17. 'opencv-python',
  18. 'requests'
  19. ],
  20. # 算法所依赖的非Python的软件,以Ubuntu的安装方式为标准
  21. 'pre-command': [
  22. 'apt install -y libgl1-mesa-glx'
  23. ],
  24. # 算法函数的所有入参,要【严格指定类型type】,类型包含float, int, str, path四种。
  25. 'input-params': {
  26. 'lower': {
  27. 'type': 'float',
  28. 'describe': 'lower limit for thin function'
  29. },
  30. 'upper': {
  31. 'type': 'float',
  32. 'describe': 'upper limit for thin function'
  33. },
  34. },
  35. # 算法函数的所有出参,算法函数的返回必须是一个字典,key是字符串的形式
  36. # 算法函数的出参也要【严格指定类型type】也即是返回字典的每个key对应的value的type
  37. # 有四种type,分别是float, int, str, path
  38. 'output-params': {
  39. 'result': {
  40. 'type': 'float',
  41. 'describe': 'calculated result'
  42. }
  43. }
  44. }

编写完配置后,通过vsource.parsealgorithm(config=algorithm_config)来生成一系列的配置与启动脚本。生成后,对应目录的下发会出现若干vsource开头的文件。

到这一步为止,是和算法容器式发布完全一致的流程,但接下来启动脚本的形式会发生不同。

发布用户选择本地式启动的话,首先要进入对应的虚拟环境,确保当前的系统环境可以跑起来该算法,然后用户无需安装任何其他的依赖,直接调用:

  1. # 启动容器
  2. bash vsource_local_start.sh

调用结束后后台会挂起服务,用户可以通过查看vsource.log文件查看输出日志:

  1. # 查看运行日志
  2. cat vsource.logs

发布用户如果想停止服务,需要从后台进程中选择进程并且kill该进程,查看所有vsource_service的进程号的命令为:

  1. # 查看所有运行的vsource_service的进程号的命令
  2. ps -a | grep vsource_service
  3. # 杀死进程号为xxx的进程
  4. kill -9 xxx

发布用户在本地启动后,可以联系集群管理员,将上述的配置字典发送给管理员在集群进行注册,管理员注册后会更新vsource库提供新的接口。

当前集群管理员邮箱:542305306@qq.com

3.2.2 示例

以简单的随机数生成为例,发布用户希望发布随机数生成的算法,如下列代码所示:

  1. import numpy as np
  2. def random_number(lower, upper):
  3. out = {
  4. 'result': np.random.randint(lower, upper)
  5. }
  6. return out

上述代码依赖numpy,保存在random.number.py这个文件中。用户可以在同目录下,新建configs.py,输入下述的配置,并且进行脚本的生成:

  1. import vsource
  2. if __name__ == '__main__':
  3. algorithm_config = {
  4. # 算法定义的名字
  5. 'algorithm-name': 'random_number',
  6. # 算法的版本号
  7. 'version': '1.0.2',
  8. # 算法的作者
  9. 'author': 'xcy',
  10. # 算法工程文件夹的路径
  11. 'service-dir': './',
  12. # 算法函数的所处的Python文件名
  13. 'service-filename': 'random_number.py',
  14. # 算法的函数的标识符
  15. 'service-interface': 'random_number',
  16. # 算法所依赖的Python库及版本
  17. 'requirements': [
  18. 'numpy==1.19.0',
  19. ],
  20. # 算法所依赖的非Python的软件,以Ubuntu的安装方式为标准
  21. 'pre-command': [
  22. # 不需要任何的前置软件依赖
  23. # 'apt install -y libgl1-mesa-glx'
  24. ],
  25. 'input-params': {
  26. 'lower': {
  27. 'type': 'float',
  28. 'describe': 'lower limit for thin function'
  29. },
  30. 'upper': {
  31. 'type': 'float',
  32. 'describe': 'upper limit for thin function'
  33. },
  34. },
  35. 'output-params': {
  36. 'result': {
  37. 'type': 'float',
  38. 'describe': 'calculated result'
  39. }
  40. }
  41. }
  42. vsource.parse_algorithm(algorithm_config)

运行上述的configs.py后,./的目录下会出现如下所示的一批文件:
image.png
如果是本地式部署算法,用户进入对应虚拟环境后,直接运行bash vsource_local_start.sh后,服务会自动挂起。