notes/article/dotnet/Multi-programing.md

2.3 KiB
Raw Permalink Blame History

dotnet 调用算法方案

1. Python 开发算法内核

1.1 跨服务调用

方案说明

将 Python 算法封装为服务,提供 HTTP 接口dotnet 作为客户端调用服务。

优点 & 缺点

优点

  • 客户机不需要有较高的配置,也不需要安装 Python 环境,服务端可采用 Linux配置 cuda 等 GPU 计算环境,服务端一直处于热部署状态,性能较好;
  • 通过联网对客户有更好的控制;
  • 软件架构分为客户端和服务端,开发成本低,各端定位问题比较简单;
  • 保密性好

缺点

  • 架构较复杂,需要客户端联网才能使用;
  • 需要考虑服务端成本;

1.2 封装为动态链接库

方案说明

将 Python 功能封装为 dll 提供给 C# 调用

优点 & 缺点

优点

  • 客户端不需要联网,使用比较方便
  • Python 开发成本较低

缺点

  • Python 自带包里的方法封装为 dll 是可行的,但对于依赖大量通过 pip 安装的包来说,是否可行需要调研,相较于上一个方案,开发成本较高;
  • 客户端软件+硬件安装较复杂,需要安装 Python 环境,甚至需要安装 cuda 驱动、配置 GPU 计算环境;

1.3 不封装或者封装为可执行文件

方案说明

使用 Python 开发算法内核,将源文件放在 C# 工程中,客户端配置好 Python(or Anaconda) 环境,直接调用 Python 解释器执行脚本,或者将脚本封装为 exe 调用,参考 https://github.com/Nuitka/Nuitka 将 Python 源码编译为 exe 文件。

优点 & 缺点

优点

  • 开发成本低

缺点

  • 保密性不好,客户端有可能查看到算法源代码(待定,目前调研 Blender 是用 Nuitka 封装的)

2 C++/C# 开发算法内核

方案说明

使用 C++/C# 开发算法内核,并封装为 dll 提供给 C# 调用。已知一个 C++ 可用的分类代码库:https://github.com/dsteinberg/libcluster

优点 & 缺点

优点

  • 运行效率高
  • 难以被反编译

缺点

  • 开发成本较高
  • C++ GPU 编程需调研

3 Matlab 提供算法

方案说明

使用 Matlab 开发算法内核,封装为 dll 提供给 C# 调用。

优点 & 缺点

优点

  • 运行效率高
  • 难以被反编译
  • 开发成本可控

缺点

  • GPU 开发需要调研
  • 使用 Matlab 可能需要授权