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

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

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

本节介绍算法容器式发布。

3.1.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开头的文件。

发布用户选择容器式启动的话,首先需要在机器上安装docker以及docker-compose,安装后进入对应的工程目录,调用:

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

等待片刻即可发现容器已经挂起。如果希望继续查看容器的日志,以及停止容器,可以直接调用目录下另外两个控制脚本:

# 查看容器日志(尾查看,不会退出,需要手动ctrl+C后才会退出日志查看。
bash vsource_logs.sh
# 停止当前容器
bash vsource_stop.sh

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

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

3.1.2 示例

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

import numpy as np

def random_number(lower, upper):
    out = {
        'result': np.random.randint(lower, upper)
    }
    return out

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

import vsource

if __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后,./的目录下会出现如下所示的一批文件:
image.png
如果是容器式部署算法,用户在安装docker以及docker-compose后,直接运行bash vsource_start.sh后即可。