photon-sdk 0.3.0
Photon is a pipeline platform for ML
Requires Python: >=3.5,<4
Keywords: photon,pipeline,workflow,machine learning

# Photon

## About
Photon 自定位为“懂行的 AI Pipeline”，目的是利用 pipeline 的形式提供 machine learning 的最佳实践。

Photon 的最佳实践包括文档描述类的知识整理，也包括为特定场景开发的 pipeline 和可重用的 pipepipe component，以期在构建新场景的 pipeline 时，帮助算法科学家和工程师提高工作效率和效果。

### Use Cases:
1. 试验环境快速研发
2. 线上环境持续部署

### Features:
1. 懂行
   * 内置供应链、工艺参数优化等行业场景的最佳实践
2. 提高研发效率
   * 积木式工作流设计交互（PhotonUI/Cli）
   * 丰富的可重用工作流、组件和算法(Photon Store)
   * CI/CD
3. 可扩展
   * K8S部署，算力可扩展
   * 平台共享，应用可扩展

### Photon 与其他系统的关系
* Photon: 工作流
* AIOT: 数据互联和 Serving 服务
* Phoenix: AutoML
* Orca: 资源编排

### 商业模式思考
1. 一次性平台费用
2. 应用研发费用
3. Photon Store

## Architecture
### Photon Modules
![photon 模块设计](./docs/img/photon%20架构.png)
Photon 各模块介绍

Photon UI
1. 创建 pipeline
  * 数据分析
  * 算法实验
  * 模型评估
  * CI/CD
2. 运行监控
3. 成果展示
  * 数据分析结果
  * 模型效果
4. Store 入口

Photon Cli
* 命令行方式创建、监控 pipeline

Photon SDK
* 以 python library 的形式提供组件或者创建组件的工具

Photon Store
* 工作流、组件的市场

本项目为整体架构中的 Photon SDK。

### photon + orion
为了photon和orion更长远的发展，经讨论后认为有必要将photon和orion结合，在orion的资源管理(orca)和用户界面（phoenix）的基础上增加photon的工作流。

调整后的系统逻辑架构如下图。
![photon+orion](./docs/img/photon+orion.png)

最主要的变动有两点：
1. 原Photon UI的职责移入Phoenix；
2. 增加orca对组件运行的资源管理。

### Photon SDK逻辑架构
![photon sdk 设计](./docs/img/photon_sdk_design.png)

Photon SDK 提供可重用的机器学习最佳实践，Photon SDK 的设计体现了可重用性的三个粒度，从大到小依次为：Business、Photon SDK、Photon Core。

Business 定义了某个通用业务场景的 pipeline，比如销量预测项目提炼出来的 pipeline。基于此业务 pipeline 可以加速新项目开发。

Photon SDK 可重用级别包含了业务场景无关的通用 pipeline 和 component，也包含一些辅助创建 pipeline 的工具。

Photon SDK 可重用级别定义的 pipeline 与业务场景无关，这个级别可以包含一系列不同场景的预置 pipeline，比如针对线上阶段算法模型持续迭代更新的 pipeline，比如针对实验阶段，着重于数据分析、特征工程和算法实验的 pipeline 等等。

Photon SDK 可重用级别包含数量众多的针对特定任务的 component，涉及数据接入、数据预处理（如格式转换、分割等），数据分析（如相关性、异常检查等）、特征工程、算法训练(特征工程、Tensorflow 训练等）、模型解释，以及 CI/CD 类（如模型验证，模型推送等）。

更多 component 可参见[component mindmap](https://gitlab.ainnovation.com/photon/docs/blob/master/base/Readme.md)

## Photon 部署
[Photon Deploy](https://gitlab.ainnovation.com/photon/photon-deploy) 提供分别在 k8s 集群和一体机部署 Photon 的操作说明。

内部公用地址：
https://photon.ainnovation.com/

<img src="./docs/img/photon_screenshot.png" alt="内部photon" width="800x"/>

## Photon 使用说明
### Photon 资源检索
Photon 的资源的存储和检索计划由 *Photon Store* 实现，在 Photon Store 可用之前，Photon 的资源放在 git repo 管理。

[python 库](https://photon.ainnovation.com/docs)
[可复用组件 yaml 库](https://gitlab.ainnovation.com/photon/photon-components)

### 使用 photon sdk 的 pipeline
参见[Kubeflow pipeline quickstart](https://www.kubeflow.org/docs/pipelines/pipelines-quickstart/)

### 使用 photon sdk 的 component
可重用的 Component 以 yaml 文件的形式输出，component 可以作为单节点的 pipeline 使用，更多的时候我们利用可重用的component 定义新场景的 pipeline。

## Photon 开发说明
【待更新】[Photon Template](https://gitlab.ainnovation.com/photon/photon-template) 提供了利用 Photon SDK 开发组件的示例。

### 构建可重用的 component
Photon 提供以`@photon_component`， `photon_interface`, `PhotonComponentCtx`为核心的自定义组件的方法体系。

例如：
```
@photon_interface
def preprocessor(src: InputPath, dst: OutputPath):
   pass

@photon_component(interface=preprocessor, version="0.1.0")
def a_preprocessor(src: InputPath, dst: OutputPath, param1: str):
    a_func(params)

def a_fun(param: str):
   ...
```
### 构建 pipeline
在构建 pipeline 时，可重用 component 通过 yaml 文件加载，若没有 component 可重用，先利用 @photon_component 定义 component。