notes/article/dotnet/Multi-programing.md

95 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 可能需要授权