From a974ba74ab73fd17e72195e93617b957cd0e20fd Mon Sep 17 00:00:00 2001 From: JieguangZhou Date: Thu, 18 Aug 2022 10:20:37 +0800 Subject: [PATCH] [Feature] New task plugin Pytorch (#11498) Co-authored-by: Eric Gao --- docs/configs/docsdev.js | 8 + docs/docs/en/guide/task/pytorch.md | 118 ++++++++ docs/docs/zh/guide/task/pytorch.md | 112 ++++++++ docs/img/tasks/demo/pytorch_en.png | Bin 0 -> 45966 bytes docs/img/tasks/demo/pytorch_note_en.png | Bin 0 -> 103456 bytes docs/img/tasks/icons/pytorch.png | Bin 0 -> 7782 bytes .../dolphinscheduler-task-all/pom.xml | 6 + .../dolphinscheduler-task-pytorch/pom.xml | 49 ++++ .../task/pytorch/GitProjectManager.java | 82 ++++++ .../plugin/task/pytorch/PythonEnvManager.java | 77 ++++++ .../task/pytorch/PytorchParameters.java | 96 +++++++ .../plugin/task/pytorch/PytorchTask.java | 132 +++++++++ .../task/pytorch/PytorchTaskChannel.java | 49 ++++ .../pytorch/PytorchTaskChannelFactory.java | 45 ++++ .../plugin/task/pytorch/PytorchTaskTest.java | 252 ++++++++++++++++++ dolphinscheduler-task-plugin/pom.xml | 1 + .../public/images/task-icons/pytorch.png | Bin 0 -> 7782 bytes .../images/task-icons/pytorch_hover.png | Bin 0 -> 92324 bytes .../src/locales/en_US/project.ts | 13 +- .../src/locales/zh_CN/project.ts | 13 +- .../task/components/node/fields/index.ts | 1 + .../components/node/fields/use-pytorch.ts | 138 ++++++++++ .../task/components/node/format-data.ts | 10 + .../task/components/node/tasks/index.ts | 4 +- .../task/components/node/tasks/use-pytorch.ts | 88 ++++++ .../projects/task/components/node/types.ts | 8 + .../projects/task/constants/task-type.ts | 5 + .../workflow/components/dag/dag.module.scss | 6 + 28 files changed, 1310 insertions(+), 3 deletions(-) create mode 100644 docs/docs/en/guide/task/pytorch.md create mode 100644 docs/docs/zh/guide/task/pytorch.md create mode 100644 docs/img/tasks/demo/pytorch_en.png create mode 100644 docs/img/tasks/demo/pytorch_note_en.png create mode 100644 docs/img/tasks/icons/pytorch.png create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/pom.xml create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/GitProjectManager.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PythonEnvManager.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchParameters.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTask.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskChannel.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskChannelFactory.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/test/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskTest.java create mode 100644 dolphinscheduler-ui/public/images/task-icons/pytorch.png create mode 100644 dolphinscheduler-ui/public/images/task-icons/pytorch_hover.png create mode 100644 dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-pytorch.ts create mode 100644 dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-pytorch.ts diff --git a/docs/configs/docsdev.js b/docs/configs/docsdev.js index fcb1eead67..b69a7f3354 100644 --- a/docs/configs/docsdev.js +++ b/docs/configs/docsdev.js @@ -189,6 +189,10 @@ export default { title: 'ChunJun', link: '/en-us/docs/dev/user_doc/guide/task/chunjun.html', }, + { + title: 'Pytorch', + link: '/en-us/docs/dev/user_doc/guide/task/pytorch.html', + }, ], }, { @@ -805,6 +809,10 @@ export default { title: 'ChunJun', link: '/zh-cn/docs/dev/user_doc/guide/task/chunjun.html', }, + { + title: 'Pytorch', + link: '/zh-cn/docs/dev/user_doc/guide/task/pytorch.html', + }, ], }, { diff --git a/docs/docs/en/guide/task/pytorch.md b/docs/docs/en/guide/task/pytorch.md new file mode 100644 index 0000000000..b4bb78008b --- /dev/null +++ b/docs/docs/en/guide/task/pytorch.md @@ -0,0 +1,118 @@ +# Pytorch Node (experimental) + +## Overview + +[Pytorch](https://pytorch.org) is a mainstream Python machine learning library. + +`Pytorch` task plugin enables users to run `Pytorch` projects in DolphinScheduler more conveniently. In addition, it supports handy Python environment management. + +`Pytorch task plugin` is more than `Python task plugin`, which allows users to **conveniently use existing Python environments or create new ones (using `Virtualenv` or `Conda`)**. **It supports running Python projects (native or Git projects)** instead of just Python scripts. + +## Create Task + +- Click `Project Management -> Project Name -> Workflow Definition`, and click the `Create Workflow` button to enter the DAG editing page. +- Drag from the toolbar to the canvas. + +## Task Example + +The task plugin picture is as follows + +![pytorch](../../../../img/tasks/demo/pytorch_en.png) + + +First, introduce some general parameters of DolphinScheduler: + +- **Node name**: The node name in a workflow definition is unique. +- **Run flag**: Identifies whether this node schedules normally, if it does not need to execute, select + the `prohibition execution`. +- **Descriptive information**: Describe the function of the node. +- **Task priority**: When the number of worker threads is insufficient, execute in the order of priority from high + to low, and tasks with the same priority will execute in a first-in first-out order. +- **Worker grouping**: Assign tasks to the machines of the worker group to execute. If `Default` is selected, + randomly select a worker machine for execution. +- **Environment Name**: Configure the environment name in which run the script. +- **Times of failed retry attempts**: The number of times the task failed to resubmit. +- **Failed retry interval**: The time interval (unit minute) for resubmitting the task after a failed task. +- **Delayed execution time**: The time (unit minute) that a task delays in execution. +- **Timeout alarm**: Check the timeout alarm and timeout failure. When the task runs exceed the "timeout", an alarm + email will send and the task execution will fail. +- **Resource**: Refers to the list of resource files that need to be called in the script, and the files uploaded or created in Resource Center - File Management. +- **User-defined parameters**: It is a user-defined parameter of Shell, which will replace the content with `${variable}` in the script. +- **Predecessor task**: Selecting a predecessor task for the current task, will set the selected predecessor task as + upstream of the current task. + + +Here are some specific parameters for the Pytorch plugin: + +#### Run time parameters + +- **Python Script** :Entry to the Python script file that you want to run. +- **Script Input Parameters** :Input parameters at run time. + +The preceding two parameters are used to minimize the running of the configuration. Additional configuration parameters are provided as follows. When you choose to expand more configurations, you can configure more parameters + +- **Project Path** :Set environment variable `PYTHONPATH` to load the Python package/project code at this path when running Python scripts。Support for local paths or Git URL. + - If it is a local path, it is used as environment variable `PYTHONPATH`. + - If the GIT URL (`git @ | https:// | http://` prefix), can download the project, and the path after downloading will be set as new `Project Path`, if need to run a folder under the project, you can add `#subdirectory` after GIT URL. + +#### Python environment parameters + +- **Create An Environment Or Not** :Whether to create a new Python environment to run the task. + +*no* + +- **Python Command Path** :Such as `/usr/bin/python`,The default value is ${PYTHON_HOME} in environment. + +*yes* + +- **Python Environment Manager Tool** :You can choose `virtualenv` or `conda`. + - if choose `virtualenv`,that may use `virtualenv` to create a new environment. Use command `virtualenv -p ${PYTHON_HOME} venv`. + - if choose `conda`, ,that may use `conda` to create a new environment,And you need to specify the Python version. +- **Requirement File** :The defualt is requirements.txt。 + + +We can use relative paths of `Python Script` and `Requirement File` if we set `Project Path` which contains the python script or required requirement file. + +#### Demo + +Now if we want to run the mnist subproject under `https://github.com/pytorch/examples`. + +We can run task like below: + +![pytorch_note](../../../../img/tasks/demo/pytorch_note_en.png) + + +In addition, if the code is stored in the `Resource`, you can use the `Resource` parameter to download the code, and write the related parameters into the path of the corresponding resource. + +## Environment configuration + +The environment configuration mainly depends on the choice of runtime Python environment. You need to configure the corresponding environment variables in the `Security` - `Environment Manage`. + +### Specifying a Python path + +It is applicable to the Python environment where the project has been run on the worker, so you can directly configure the `Python Command Path` as the corresponding Python environment in the component. If you do not know the environment address, you can use `which python` to obtain it. + +### Create a new environment using `Conda` + +It applies to a new environment to run the project. You need to create an environment in `Security` - `Environment Manage`. You can change the environment to the actual environment by referring to the following. + +```shell +# Add the directory for the conda command +export PATH=$HOME/anaconda3/bin:$PATH +``` + +### Create a new environment using `Virtualenv` + +It applies to a new environment to run the project. You need to create an environment in `Security` - `Environment Manage`. You can change the environment to the actual environment by referring to the following. + +```shell +# Add the directory for the virtualenv command +export PATH=/home/xxx/anaconda3/bin:$PATH +export PYTHON_HOME=/usr/local/bin/python3.7 +``` + +## Other + +This task plugin can also run XGBoost, LightGBM, SkLearn, TensorFlow, Keras and other projects. This task plugin is available as an upgrade to Python task plugin running machine learning tasks. + +If necessary, we can call this task plugin `PythonML`,which can run machine learning projects easily in DolphinScheduler. diff --git a/docs/docs/zh/guide/task/pytorch.md b/docs/docs/zh/guide/task/pytorch.md new file mode 100644 index 0000000000..4dcc6362e4 --- /dev/null +++ b/docs/docs/zh/guide/task/pytorch.md @@ -0,0 +1,112 @@ +# Pytorch 节点(试验版) + +## 综述 + +[Pytorch](https://pytorch.org) 是一个的主流Python机器学习库。 + +为了用户能够在DolphinScheduler中**更方便的运行Pytorch项目**,实现了Pytorch任务组件。主要提供**便捷的python环境管理**以及支持**运行python项目**。 + +与Python任务组件不同,该组件允许用户快速使用已有python环境或者创建新的python环境(使用virtualenv或者conda);支持运行Python项目(本地项目或者Git项目)而非只是python脚本。 + +## 创建任务 + +- 点击项目管理-项目名称-工作流定义,点击“创建工作流”按钮,进入 DAG 编辑页面; +- 拖动工具栏的 任务节点到画板中。 + + +## 任务样例 + +组件图示如下: + +![pytorch](../../../../img/tasks/demo/pytorch_en.png) + +### 首先介绍一些DS通用参数 + +- **节点名称** :设置任务的名称。一个工作流定义中的节点名称是唯一的。 +- **运行标志** :标识这个节点是否能正常调度,如果不需要执行,可以打开禁止执行开关。 +- **描述** :描述该节点的功能。 +- **任务优先级** :worker 线程数不足时,根据优先级从高到低依次执行,优先级一样时根据先进先出原则执行。 +- **Worker 分组** :任务分配给 worker 组的机器执行,选择 Default,会随机选择一台 worker 机执行。 +- **环境名称** :配置运行脚本的环境。 +- **失败重试次数** :任务失败重新提交的次数。 +- **失败重试间隔** :任务失败重新提交任务的时间间隔,以分钟为单位。 +- **延迟执行时间** :任务延迟执行的时间,以分钟为单位。 +- **资源**:是指脚本中需要调用的资源文件列表,资源中心-文件管理上传或创建的文件。 +- **自定义参数**:是 SHELL 局部的用户自定义参数,会替换脚本中以 `${变量}` 的内容。 +- **前置任务** :选择当前任务的前置任务,会将被选择的前置任务设置为当前任务的上游。 + + +### Pytorch组件独有的参数 + +#### 运行参数 + +- **python脚本** :需要运行的python脚本文件入口。 +- **脚本启动参数** :运行时的输入参数。 + +以上为两个最小化配置运行的参数,另外提供其他的一些配置参数如下可选,当选择展开更多配置时,可以配置更多参数。 + +- **python项目地址** :设置`PYTHONPATH`环境变量,设置后运行python脚本时可以加载该地址下的python包/项目代码。支持本地路径或者Git url + - 若为本地路径,作为`PYTHONPATH`环境变量。 + - 如果为Git URL (以`git@ | https:// | http:// `前缀),则会下载项目,并将下载后存放地址作为新的**python项目地址**,若需要运行子文件夹下的项目,可以添加 `#subdirectory` 来配置。 + +#### python环境参数 + +- **是否创建新环境** :是否创建新的python环境来运行该任务。 + +*否* + +- **python命令路径** :如`/usr/bin/python`,默认为DS环境配置中的`${PYTHON_HOME}`。 + +*是* + +- **python环境管理工具** :可以选择virtualenv或者conda。 + - 若选择`virtualenv`,则会用`virtualenv`创建一个新环境,使用命令 `virtualenv -p ${PYTHON_HOME} venv` 创建 + - 若选择`conda`, 则会使用`conda` 创建一个新环境,并需要指定创建的python版本。 +- **依赖文件** :默认为 requirements.txt。 + + +配置了`python项目地址`参数,那么`python脚本`和`依赖文件`参数允许输入相对路径 + +#### Demo + +如现在需要运行 https://github.com/pytorch/examples 项目下的mnist的子项目。 + +可以设置 + +![pytorch_note](../../../../img/tasks/demo/pytorch_note_en.png) + + +另外如果代码存放在资源中心,则可以使用`资源`参数下载代码,并将相关参数写成对应资源的路径即可。 + +## 环境配置 + +环境配置主要取决于运行时python环境的选择,需要在`安全中心`-`环境管理`中配置对应需要的环境变量即可。 + +### 指定python路径 + +适用于worker上已经有运行该项目的python环境,那么可以直接在组件中配置`pyhton命令路径`为对应的python环境即可,如果不知道该环境地址,可以使用`which python`获取。 + +### 使用Conda创建新环境 + +适用于新建环境运行该项目,需要在`安全中心`-`环境管理`中创建环境, 参考如下添加修改为实际环境即可。 +```shell +# conda命令对应的目录加入PATH中 +export PATH=$HOME/anaconda3/bin:$PATH +``` + +### 使用virtualenv创建新环境 + +适用于新建环境运行该项目,需要在`安全中心`-`环境管理`中创建环境, 参考如下添加修改为实际环境即可。 + +```shell +# virtualenv命令对应的目录加入PATH中 +export PATH=/home/lucky/anaconda3/bin:$PATH +export PYTHON_HOME=/usr/local/bin/python3.7 +``` + + +## 其他 + +本组件也可以运行xgboost, lightgbm, sklearn, tensorflow, keras 等项目。本组件可作为python组件运行机器学习任务的升级组件。 + +如果有需要,后续建议可以统一涵盖为PythonML组件,来运行机器学习项目。 \ No newline at end of file diff --git a/docs/img/tasks/demo/pytorch_en.png b/docs/img/tasks/demo/pytorch_en.png new file mode 100644 index 0000000000000000000000000000000000000000..46be1ec22394c67015015b9f84e8dc326e14b033 GIT binary patch literal 45966 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 SJ=}&dAT(5OsFWyKh5iq%C-67` literal 0 HcmV?d00001 diff --git a/docs/img/tasks/demo/pytorch_note_en.png b/docs/img/tasks/demo/pytorch_note_en.png new file mode 100644 index 0000000000000000000000000000000000000000..088beca3b1ca1df3b9c326b025d880e68436a4ad GIT binary patch literal 103456 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 N-yi*dt79a0{0}q4Y90Up literal 0 HcmV?d00001 diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml b/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml index 84ad0169ac..fd1111d658 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml @@ -195,6 +195,12 @@ dolphinscheduler-task-sagemaker ${project.version} + + + org.apache.dolphinscheduler + dolphinscheduler-task-pytorch + ${project.version} + \ No newline at end of file diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/pom.xml b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/pom.xml new file mode 100644 index 0000000000..0a0107d0e3 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/pom.xml @@ -0,0 +1,49 @@ + + + + + dolphinscheduler-task-plugin + org.apache.dolphinscheduler + dev-SNAPSHOT + + 4.0.0 + + dolphinscheduler-task-pytorch + jar + + + + org.apache.dolphinscheduler + dolphinscheduler-spi + provided + + + org.apache.dolphinscheduler + dolphinscheduler-task-api + provided + + + org.apache.dolphinscheduler + dolphinscheduler-common + provided + + + + diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/GitProjectManager.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/GitProjectManager.java new file mode 100644 index 0000000000..d65e5e1150 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/GitProjectManager.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.pytorch; + +import static org.apache.dolphinscheduler.plugin.task.api.AbstractShell.ExitCodeException; + +import org.apache.dolphinscheduler.plugin.task.api.TaskConstants; +import org.apache.dolphinscheduler.plugin.task.api.utils.OSUtils; + +import java.io.File; +import java.nio.file.Paths; +import java.util.regex.Pattern; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import lombok.Data; + +@Data +public class GitProjectManager { + public static final String GIT_PATH_LOCAL = "GIT_PROJECT"; + private static final Pattern GIT_CHECK_PATTERN = Pattern.compile("^(git@|https?://)"); + protected final Logger logger = LoggerFactory.getLogger(String.format(TaskConstants.TASK_LOG_LOGGER_NAME_FORMAT, getClass())); + private String path; + private String baseDir = "."; + + public static boolean isGitPath(String path) { + return GIT_CHECK_PATTERN.matcher(path).find(); + } + + public void prepareProject() throws Exception { + String savePath = Paths.get(baseDir, GIT_PATH_LOCAL).toString(); + + logger.info("clone project {} to {}", path, savePath); + String[] command = {"sh", "-c", String.format("git clone %s %s", getGitUrl(), savePath)}; + try { + OSUtils.exeShell(command); + } catch (ExitCodeException e) { + if (!new File(savePath).exists()) { + throw e; + } + } + logger.info("clone project done"); + } + + public String getGitUrl() { + String gitUrl; + if (path.contains("#")) { + gitUrl = path.split("#")[0]; + } else { + gitUrl = path; + } + return gitUrl; + + } + + public String getGitLocalPath() { + String gitLocalPath; + if (path.contains("#")) { + gitLocalPath = Paths.get(GIT_PATH_LOCAL, path.split("#")[1]).toString(); + } else { + gitLocalPath = GIT_PATH_LOCAL; + } + return Paths.get(baseDir, gitLocalPath).toString(); + + } +} diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PythonEnvManager.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PythonEnvManager.java new file mode 100644 index 0000000000..d13e234c33 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PythonEnvManager.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.pytorch; + +import lombok.Data; + +@Data +public class PythonEnvManager { + + public static final String ENV_TOOL_VENV = "virtualenv"; + + public static final String ENV_TOOL_CONDA = "conda"; + + private static final String PATTERN_ENVIRONMENT_PYTHON = "python[\\d\\.]*$"; + + private static final String PATTERN_ENVIRONMENT_REQUIREMENT = "\\.txt$"; + + private static final String CREATE_ENV_NAME = "./venv"; + + private static final String CONDA_SOURCE = "source activate %s"; + + private static final String CONDA_BUILD = "conda create -y python=%s -p %s"; + + private static final String VIRTUALENV_SOURCE = "source %s/bin/activate"; + + private static final String VIRTUALENV_BUILD = "virtualenv -p ${PYTHON_HOME} %s"; + + private static final String INSTALL_COMMAND = "python -m pip install -r %s"; + + private String pythonEnvTool = ENV_TOOL_VENV; + + private String condaPythonVersion = "3.9"; + + public String getBuildEnvCommand(String requirementPath) { + String buildCommand = ""; + String sourceCommand = getSourceEnvCommand(CREATE_ENV_NAME); + if (pythonEnvTool.equals(ENV_TOOL_VENV)) { + buildCommand = String.format(VIRTUALENV_BUILD, CREATE_ENV_NAME); + } else if (pythonEnvTool.equals(ENV_TOOL_CONDA)) { + buildCommand = String.format(CONDA_BUILD, condaPythonVersion, CREATE_ENV_NAME); + } + String installCommand = String.format(INSTALL_COMMAND, requirementPath); + + return buildCommand + " && " + sourceCommand + " && " + installCommand; + } + + private String getSourceEnvCommand(String envName) { + String command = ""; + if (pythonEnvTool.equals(ENV_TOOL_VENV)) { + command = String.format(VIRTUALENV_SOURCE, envName); + } else if (pythonEnvTool.equals(ENV_TOOL_CONDA)) { + command = String.format(CONDA_SOURCE, envName); + } + + return command; + } + + public String getPythonCommand() { + return String.format("%s/bin/python", CREATE_ENV_NAME); + } + +} diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchParameters.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchParameters.java new file mode 100644 index 0000000000..cbac9b548e --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchParameters.java @@ -0,0 +1,96 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.pytorch; + +import org.apache.dolphinscheduler.plugin.task.api.model.ResourceInfo; +import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters; + +import org.apache.commons.lang3.StringUtils; + +import java.io.File; +import java.nio.file.Paths; +import java.util.List; + +import lombok.Data; + +@Data +public class PytorchParameters extends AbstractParameters { + + private Boolean isCreateEnvironment = false; + private String pythonPath = "."; + private String script; + private String scriptParams; + private String pythonCommand = "${PYTHON_HOME}"; + private String pythonEnvTool = PythonEnvManager.ENV_TOOL_VENV; + private String requirements = "requirements.txt"; + private String condaPythonVersion = "3.9"; + /** + * resource list + */ + private List resourceList; + + @Override + public List getResourceFilesList() { + return resourceList; + } + + @Override + public boolean checkParameters() { + return true; + } + + + public String getRequirementPath() { + return getPossiblePath(requirements); + } + + public String getPythonCommand() { + String command; + if (pythonCommand.isEmpty()) { + command = "${PYTHON_HOME}"; + } else { + command = pythonCommand; + } + return command; + } + + + public String getScriptPath() { + return getPossiblePath(script); + } + + private String getPossiblePath(String filePath) { + String possiblePath = filePath; + File sourceFile = new File(possiblePath); + String newPath = Paths.get(pythonPath, possiblePath).toString(); + File newFile = new File(newPath); + if (newFile.exists() && !sourceFile.exists()) { + possiblePath = newPath; + } else if (resourceList != null) { + String newPathResource = StringUtils.removeStart(newPath, "./"); + for (ResourceInfo resourceInfo : resourceList) { + if (resourceInfo.getResourceName().equals("/" + newPathResource)) { + possiblePath = newPath; + break; + } + } + } + return possiblePath; + + } +} diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTask.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTask.java new file mode 100644 index 0000000000..b738194d4e --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTask.java @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.pytorch; + +import org.apache.dolphinscheduler.plugin.task.api.AbstractTaskExecutor; +import org.apache.dolphinscheduler.plugin.task.api.ShellCommandExecutor; +import org.apache.dolphinscheduler.plugin.task.api.TaskConstants; +import org.apache.dolphinscheduler.plugin.task.api.TaskException; +import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; +import org.apache.dolphinscheduler.plugin.task.api.model.Property; +import org.apache.dolphinscheduler.plugin.task.api.model.TaskResponse; +import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters; +import org.apache.dolphinscheduler.plugin.task.api.parser.ParamUtils; +import org.apache.dolphinscheduler.plugin.task.api.parser.ParameterUtils; +import org.apache.dolphinscheduler.spi.utils.JSONUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class PytorchTask extends AbstractTaskExecutor { + + private final ShellCommandExecutor shellCommandExecutor; + protected PytorchParameters pytorchParameters; + protected TaskExecutionContext taskExecutionContext; + private PythonEnvManager pythonEnvManager; + + public PytorchTask(TaskExecutionContext taskExecutionContext) { + super(taskExecutionContext); + this.taskExecutionContext = taskExecutionContext; + + this.shellCommandExecutor = new ShellCommandExecutor(this::logHandle, + taskExecutionContext, + logger); + } + + @Override + public void init() { + logger.info("python task params {}", taskExecutionContext.getTaskParams()); + + pytorchParameters = JSONUtils.parseObject(taskExecutionContext.getTaskParams(), PytorchParameters.class); + + if (!pytorchParameters.checkParameters()) { + throw new TaskException("python task params is not valid"); + } + + pythonEnvManager = new PythonEnvManager(); + pythonEnvManager.setPythonEnvTool(pytorchParameters.getPythonEnvTool()); + pythonEnvManager.setCondaPythonVersion(pytorchParameters.getCondaPythonVersion()); + } + + @Override + public void handle() throws Exception { + try { + String command = buildPythonExecuteCommand(); + TaskResponse taskResponse = shellCommandExecutor.run(command); + setExitStatusCode(taskResponse.getExitStatusCode()); + setAppIds(taskResponse.getAppIds()); + setProcessId(taskResponse.getProcessId()); + setVarPool(shellCommandExecutor.getVarPool()); + } catch (Exception e) { + setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE); + throw e; + } + } + + + public String buildPythonExecuteCommand() throws Exception { + List args = new ArrayList<>(); + + String pythonPath = pytorchParameters.getPythonPath(); + + if (GitProjectManager.isGitPath(pythonPath)) { + GitProjectManager gpm = new GitProjectManager(); + gpm.setPath(pythonPath); + gpm.setBaseDir(taskExecutionContext.getExecutePath()); + gpm.prepareProject(); + pytorchParameters.setPythonPath(gpm.getGitLocalPath()); + } + + args.add(String.format("export PYTHONPATH=%s", pytorchParameters.getPythonPath())); + + if (pytorchParameters.getIsCreateEnvironment()) { + String buildEnvCommand = pythonEnvManager.getBuildEnvCommand(pytorchParameters.getRequirementPath()); + args.add(buildEnvCommand); + } + + String scriptParams = pytorchParameters.getScriptParams(); + if (scriptParams != null && !scriptParams.isEmpty()) { + args.add(String.format("%s %s %s", getPythonCommand(), pytorchParameters.getScriptPath(), pytorchParameters.getScriptParams())); + } else { + args.add(String.format("%s %s", getPythonCommand(), pytorchParameters.getScriptPath())); + + } + + Map paramsMap = taskExecutionContext.getPrepareParamsMap(); + return ParameterUtils.convertParameterPlaceholders(String.join("\n", args), ParamUtils.convert(paramsMap)); + } + + private String getPythonCommand() { + String pythonCommand; + if (pytorchParameters.getIsCreateEnvironment()) { + pythonCommand = pythonEnvManager.getPythonCommand(); + } else { + pythonCommand = pytorchParameters.getPythonCommand(); + } + return pythonCommand; + + } + + + @Override + public AbstractParameters getParameters() { + return pytorchParameters; + } +} + diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskChannel.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskChannel.java new file mode 100644 index 0000000000..8e06173f4e --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskChannel.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.pytorch; + +import org.apache.dolphinscheduler.plugin.task.api.TaskChannel; +import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; +import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters; +import org.apache.dolphinscheduler.plugin.task.api.parameters.ParametersNode; +import org.apache.dolphinscheduler.plugin.task.api.parameters.resource.ResourceParametersHelper; +import org.apache.dolphinscheduler.spi.utils.JSONUtils; + +public class PytorchTaskChannel implements TaskChannel { + + @Override + public void cancelApplication(boolean status) { + + } + + @Override + public PytorchTask createTask(TaskExecutionContext taskRequest) { + return new PytorchTask(taskRequest); + } + + @Override + public AbstractParameters parseParameters(ParametersNode parametersNode) { + return JSONUtils.parseObject(parametersNode.getTaskParams(), PytorchParameters.class); + } + + @Override + public ResourceParametersHelper getResources(String parameters) { + return null; + } + +} diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskChannelFactory.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskChannelFactory.java new file mode 100644 index 0000000000..be7e3d6545 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/main/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskChannelFactory.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.pytorch; + +import org.apache.dolphinscheduler.plugin.task.api.TaskChannel; +import org.apache.dolphinscheduler.plugin.task.api.TaskChannelFactory; +import org.apache.dolphinscheduler.spi.params.base.PluginParams; + +import java.util.Collections; +import java.util.List; + +import com.google.auto.service.AutoService; + +@AutoService(TaskChannelFactory.class) +public class PytorchTaskChannelFactory implements TaskChannelFactory { + @Override + public TaskChannel create() { + return new PytorchTaskChannel(); + } + + @Override + public String getName() { + return "PYTORCH"; + } + + @Override + public List getParams() { + return Collections.emptyList(); + } +} diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/test/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskTest.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/test/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskTest.java new file mode 100644 index 0000000000..835d31fe72 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-pytorch/src/test/java/org/apache/dolphinscheduler/plugin/task/pytorch/PytorchTaskTest.java @@ -0,0 +1,252 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.task.pytorch; + +import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.RWXR_XR_X; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; +import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContextCacheManager; +import org.apache.dolphinscheduler.spi.utils.JSONUtils; +import org.apache.dolphinscheduler.spi.utils.PropertyUtils; + +import org.apache.commons.lang3.SystemUtils; + +import java.io.File; +import java.nio.file.FileAlreadyExistsException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.FileAttribute; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.Date; +import java.util.Set; +import java.util.UUID; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; +import org.powermock.modules.junit4.PowerMockRunner; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({JSONUtils.class, PropertyUtils.class,}) +@PowerMockIgnore({"javax.*"}) +@SuppressStaticInitializationFor("org.apache.dolphinscheduler.spi.utils.PropertyUtils") +public class PytorchTaskTest { + + private final String pythonPath = "."; + private final String requirementPath = "requirements.txt"; + + @Before + public void before() { + PowerMockito.mockStatic(PropertyUtils.class); + } + + @Test + public void testPythonEnvManager() { + PythonEnvManager envManager = new PythonEnvManager(); + + envManager.setPythonEnvTool(PythonEnvManager.ENV_TOOL_CONDA); + envManager.setCondaPythonVersion("3.9"); + String condaEnvCommand39 = envManager.getBuildEnvCommand(requirementPath); + Assert.assertEquals(condaEnvCommand39, "conda create -y python=3.9 -p ./venv && source activate ./venv && python -m pip install -r " + requirementPath); + + envManager.setCondaPythonVersion("3.8"); + String condaEnvCommand38 = envManager.getBuildEnvCommand(requirementPath); + Assert.assertEquals(condaEnvCommand38, "conda create -y python=3.8 -p ./venv && source activate ./venv && python -m pip install -r " + requirementPath); + + + envManager.setPythonEnvTool(PythonEnvManager.ENV_TOOL_VENV); + String venvEnvCommand = envManager.getBuildEnvCommand(requirementPath); + Assert.assertEquals(venvEnvCommand, "virtualenv -p ${PYTHON_HOME} ./venv && source ./venv/bin/activate && python -m pip install -r " + requirementPath); + + } + + @Test + public void testGitProject() { + + assertFalse(GitProjectManager.isGitPath("dolphinscheduler/test")); + assertFalse(GitProjectManager.isGitPath("/dolphinscheduler/test")); + assertTrue(GitProjectManager.isGitPath("https://github.com/apache/dolphinscheduler.git")); + assertTrue(GitProjectManager.isGitPath("git@github.com:apache/dolphinscheduler.git")); + assertTrue(GitProjectManager.isGitPath("git@github.com:apache/dolphinscheduler.git#doc")); + + GitProjectManager gpm1 = new GitProjectManager(); + gpm1.setPath("git@github.com:apache/dolphinscheduler.git#doc"); + Assert.assertEquals("git@github.com:apache/dolphinscheduler.git", gpm1.getGitUrl()); + Assert.assertEquals("./GIT_PROJECT/doc", gpm1.getGitLocalPath()); + + GitProjectManager gpm2 = new GitProjectManager(); + gpm2.setPath("git@github.com:apache/dolphinscheduler.git"); + Assert.assertEquals("git@github.com:apache/dolphinscheduler.git", gpm2.getGitUrl()); + Assert.assertEquals("./GIT_PROJECT", gpm2.getGitLocalPath()); + + } + + @Test + public void testBuildPythonCommandWithoutCreateEnvironment() throws Exception { + PytorchParameters parameters = new PytorchParameters(); + parameters.setScript("main.py"); + parameters.setScriptParams("--epochs=1 --dry-run"); + + PytorchTask task1 = initTask(parameters); + Assert.assertEquals(task1.buildPythonExecuteCommand(), + "export PYTHONPATH=.\n" + + "${PYTHON_HOME} main.py --epochs=1 --dry-run"); + + parameters.setPythonCommand(""); + PytorchTask task2 = initTask(parameters); + Assert.assertEquals(task2.buildPythonExecuteCommand(), + "export PYTHONPATH=.\n" + + "${PYTHON_HOME} main.py --epochs=1 --dry-run"); + + parameters.setPythonCommand("/usr/bin/python"); + PytorchTask task3 = initTask(parameters); + Assert.assertEquals(task3.buildPythonExecuteCommand(), + "export PYTHONPATH=.\n" + + "/usr/bin/python main.py --epochs=1 --dry-run"); + + } + + + @Test + public void testBuildPythonCommandWithCreateCondeEnv() throws Exception { + PytorchParameters parameters = new PytorchParameters(); + parameters.setPythonPath(pythonPath); + parameters.setIsCreateEnvironment(true); + parameters.setCondaPythonVersion("3.6"); + parameters.setPythonEnvTool(PythonEnvManager.ENV_TOOL_CONDA); + parameters.setRequirements("requirements.txt"); + parameters.setScript("main.py"); + parameters.setScriptParams("--epochs=1 --dry-run"); + + PytorchTask task = initTask(parameters); + Assert.assertEquals(task.buildPythonExecuteCommand(), + "export PYTHONPATH=.\n" + + "conda create -y python=3.6 -p ./venv && source activate ./venv && python -m pip install -r requirements.txt\n" + + "./venv/bin/python main.py --epochs=1 --dry-run"); + } + + @Test + public void testBuildPythonCommandWithCreateVenvEnv() throws Exception { + PytorchParameters parameters = new PytorchParameters(); + parameters.setPythonPath(pythonPath); + parameters.setIsCreateEnvironment(true); + parameters.setPythonEnvTool(PythonEnvManager.ENV_TOOL_VENV); + parameters.setRequirements("requirements.txt"); + parameters.setScript("main.py"); + parameters.setScriptParams("--epochs=1 --dry-run"); + + PytorchTask task = initTask(parameters); + Assert.assertEquals(task.buildPythonExecuteCommand(), + "export PYTHONPATH=.\n" + + "virtualenv -p ${PYTHON_HOME} ./venv && source ./venv/bin/activate && python -m pip install -r requirements.txt\n" + + "./venv/bin/python main.py --epochs=1 --dry-run"); + + } + + @Test + public void testGetPossiblePath() throws Exception { + String requirements = "requirements.txt"; + String script = "train.py"; + String pythonPath = Paths.get("/tmp", UUID.randomUUID().toString()).toString(); + + PytorchParameters parameters = new PytorchParameters(); + parameters.setRequirements(requirements); + parameters.setScript(script); + parameters.setPythonPath(pythonPath); + parameters.setIsCreateEnvironment(true); + parameters.setPythonEnvTool(PythonEnvManager.ENV_TOOL_VENV); + + PytorchTask task = initTask(parameters); + + String requirementFile = Paths.get(pythonPath, requirements).toString(); + String scriptFile = Paths.get(pythonPath, script).toString(); + createFile(requirementFile); + createFile(scriptFile); + + String expected = "export PYTHONPATH=%s\n" + + "virtualenv -p ${PYTHON_HOME} ./venv && source ./venv/bin/activate && python -m pip install -r %s\n" + + "./venv/bin/python %s"; + System.out.println(task.buildPythonExecuteCommand()); + Assert.assertEquals(String.format(expected, pythonPath, requirementFile, scriptFile), task.buildPythonExecuteCommand()); + + } + + + private PytorchTask initTask(PytorchParameters pytorchParameters) { + TaskExecutionContext taskExecutionContext = createContext(pytorchParameters); + PytorchTask task = new PytorchTask(taskExecutionContext); + task.init(); + return task; + } + + public TaskExecutionContext createContext(PytorchParameters pytorchParameters) { + String parameters = JSONUtils.toJsonString(pytorchParameters); + TaskExecutionContext taskExecutionContext = Mockito.mock(TaskExecutionContext.class); + Mockito.when(taskExecutionContext.getTaskLogName()).thenReturn("PytorchTest"); + String APP_ID = UUID.randomUUID().toString(); + String folder = String.format("/tmp/dolphinscheduler_PytorchTest_%s", APP_ID); + Mockito.when(taskExecutionContext.getExecutePath()).thenReturn(folder); + Mockito.when(taskExecutionContext.getTaskAppId()).thenReturn(APP_ID); + Mockito.when(taskExecutionContext.getTenantCode()).thenReturn("root"); + Mockito.when(taskExecutionContext.getStartTime()).thenReturn(new Date()); + Mockito.when(taskExecutionContext.getTaskTimeout()).thenReturn(10000); + Mockito.when(taskExecutionContext.getLogPath()).thenReturn(folder + "/log"); + Mockito.when(taskExecutionContext.getTaskParams()).thenReturn(parameters); + String envirementConfig = "export PATH=$HOME/anaconda3/bin:$PATH\n" + "export PYTHON_HOME=/bin/python"; + Mockito.when(taskExecutionContext.getEnvironmentConfig()).thenReturn(envirementConfig); + + String userName = System.getenv().get("USER"); + Mockito.when(taskExecutionContext.getTenantCode()).thenReturn(userName); + + TaskExecutionContextCacheManager.cacheTaskExecutionContext(taskExecutionContext); + return taskExecutionContext; + } + + private void createFile(String fileName) throws Exception { + File file = new File(fileName); + Path path = file.toPath(); + Set perms = PosixFilePermissions.fromString(RWXR_XR_X); + FileAttribute> attr = PosixFilePermissions.asFileAttribute(perms); + if (SystemUtils.IS_OS_WINDOWS) { + Files.createFile(path); + } else { + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + try { + Files.createFile(path, attr); + } catch (FileAlreadyExistsException ex) { + // this is expected + } + } + + } + +} + + diff --git a/dolphinscheduler-task-plugin/pom.xml b/dolphinscheduler-task-plugin/pom.xml index a432fc3fd1..35444c62ad 100644 --- a/dolphinscheduler-task-plugin/pom.xml +++ b/dolphinscheduler-task-plugin/pom.xml @@ -60,6 +60,7 @@ dolphinscheduler-task-sagemaker dolphinscheduler-task-chunjun dolphinscheduler-task-flink-stream + dolphinscheduler-task-pytorch diff --git a/dolphinscheduler-ui/public/images/task-icons/pytorch.png b/dolphinscheduler-ui/public/images/task-icons/pytorch.png new file mode 100644 index 0000000000000000000000000000000000000000..e455a134f179f3e08b8a4254fac475b730530d07 GIT binary patch literal 7782 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 N-yi*dt79a0{0}q4Y90Up literal 0 HcmV?d00001 diff --git a/dolphinscheduler-ui/public/images/task-icons/pytorch_hover.png b/dolphinscheduler-ui/public/images/task-icons/pytorch_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..c1832af6f44ecaf40b1635373a9657971615fdd9 GIT binary patch literal 92324 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�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 literal 0 HcmV?d00001 diff --git a/dolphinscheduler-ui/src/locales/en_US/project.ts b/dolphinscheduler-ui/src/locales/en_US/project.ts index a88bc44e12..f8751df123 100644 --- a/dolphinscheduler-ui/src/locales/en_US/project.ts +++ b/dolphinscheduler-ui/src/locales/en_US/project.ts @@ -753,6 +753,17 @@ export default { dinky_address_tips: 'Please enter the url of your dinky', dinky_task_id: 'Dinky task id', dinky_task_id_tips: 'Please enter the task id of your dinky', - dinky_online: 'Online task' + dinky_online: 'Online task', + pytorch_script: 'Python Script', + pytorch_script_params: 'Script Input Parameters', + pytorch_other_params: 'Show More Configurations', + pytorch_python_path: 'Project Path', + pytorch_is_create_environment: 'Create An Environment Or Not', + pytorch_python_command: 'Python Command Path', + pytorch_python_command_tips: 'If empty,will be set $PYTHON_HOME', + pytorch_python_env_tool: 'Python Environment Manager Tool', + pytorch_requirements: 'Requirement File', + pytorch_conda_python_version: 'Python Version', + pytorch_conda_python_version_tips: 'Please enter the version number, such as 3.6, 3.7, 3.x' } } diff --git a/dolphinscheduler-ui/src/locales/zh_CN/project.ts b/dolphinscheduler-ui/src/locales/zh_CN/project.ts index 48a01fc5a0..6f423786ba 100644 --- a/dolphinscheduler-ui/src/locales/zh_CN/project.ts +++ b/dolphinscheduler-ui/src/locales/zh_CN/project.ts @@ -738,6 +738,17 @@ export default { dinky_address_tips: '请输入 Dinky 地址', dinky_task_id: 'dinky 作业ID', dinky_task_id_tips: '请输入作业 ID', - dinky_online: '是否上线作业' + dinky_online: '是否上线作业', + pytorch_script: 'python脚本', + pytorch_script_params: '脚本启动参数', + pytorch_other_params: '展开更多配置', + pytorch_python_path: 'python项目地址', + pytorch_is_create_environment: '是否创建新环境', + pytorch_python_command: 'python命令路径', + pytorch_python_command_tips: '若为空,则使用$PYTHON_HOME', + pytorch_python_env_tool: 'python环境管理工具', + pytorch_requirements: '依赖文件', + pytorch_conda_python_version: 'python版本', + pytorch_conda_python_version_tips: '请输入版本号,如 3.6, 3.7, 3.x等' } } diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts index d1e2e2b3a2..74c721bbe1 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts @@ -76,3 +76,4 @@ export { useDinky } from './use-dinky' export { useSagemaker } from './use-sagemaker' export { useChunjun } from './use-chunjun' export { useChunjunDeployMode } from './use-chunjun-deploy-mode' +export { usePytorch } from './use-pytorch' diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-pytorch.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-pytorch.ts new file mode 100644 index 0000000000..a74e56f992 --- /dev/null +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-pytorch.ts @@ -0,0 +1,138 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { useI18n } from 'vue-i18n' +import type { IJsonItem } from '../types' +import { watch, ref } from 'vue' +import { useCustomParams, useResources } from '.' + +export function usePytorch(model: { [field: string]: any }): IJsonItem[] { + const { t } = useI18n() + + const isCreateEnvironmentSpan = ref(0) + const pythonPathSpan = ref(0) + const pythonEnvToolSpan = ref(0) + const pythonCommandSpan = ref(0) + const requirementsSpan = ref(0) + const condaPythonVersionSpan = ref(0) + + const setFlag = () => { + model.showCreateEnvironment = model.isCreateEnvironment && model.otherParams + model.showCreateConda = + model.showCreateEnvironment && model.pythonEnvTool === 'conda' + ? true + : false + model.showCreateEnv = + model.showCreateEnvironment && model.pythonEnvTool === 'virtualenv' + ? true + : false + } + + const resetSpan = () => { + isCreateEnvironmentSpan.value = model.otherParams ? 12 : 0 + pythonPathSpan.value = model.otherParams ? 24 : 0 + pythonEnvToolSpan.value = model.showCreateEnvironment ? 12 : 0 + pythonCommandSpan.value = ~model.showCreateEnvironment & model.otherParams ? 12 : 0 + requirementsSpan.value = model.showCreateEnvironment ? 24 : 0 + condaPythonVersionSpan.value = model.showCreateConda ? 24 : 0 + } + + watch( + () => [model.isCreateEnvironment, model.pythonEnvTool, model.otherParams], + () => { + setFlag() + resetSpan() + } + ) + + return [ + { + type: 'input', + field: 'script', + name: t('project.node.pytorch_script'), + span: 24 + }, + { + type: 'input', + field: 'scriptParams', + name: t('project.node.pytorch_script_params'), + span: 24 + }, + { + type: 'switch', + field: 'otherParams', + name: t('project.node.pytorch_other_params'), + span: 24 + }, + { + type: 'input', + field: 'pythonPath', + name: t('project.node.pytorch_python_path'), + span: pythonPathSpan + }, + { + type: 'switch', + field: 'isCreateEnvironment', + name: t('project.node.pytorch_is_create_environment'), + span: isCreateEnvironmentSpan + }, + { + type: 'input', + field: 'pythonCommand', + name: t('project.node.pytorch_python_command'), + span: pythonCommandSpan, + props: { + placeholder: t('project.node.pytorch_python_command_tips') + } + }, + { + type: 'select', + field: 'pythonEnvTool', + name: t('project.node.pytorch_python_env_tool'), + span: pythonEnvToolSpan, + options: PYTHON_ENV_TOOL + }, + { + type: 'input', + field: 'requirements', + name: t('project.node.pytorch_requirements'), + span: requirementsSpan + }, + { + type: 'input', + field: 'condaPythonVersion', + name: t('project.node.pytorch_conda_python_version'), + span: condaPythonVersionSpan, + props: { + placeholder: t('project.node.pytorch_conda_python_version_tips') + } + }, + useResources(), + ...useCustomParams({ model, field: 'localParams', isSimple: false }) + ] +} + +export const PYTHON_ENV_TOOL = [ + { + label: 'conda', + value: 'conda' + }, + { + label: 'virtualenv', + value: 'virtualenv' + } +] diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts index be2e1d0e17..becaafea85 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts @@ -386,6 +386,16 @@ export function formatParams(data: INodeData): { if (data.taskType === 'SAGEMAKER') { taskParams.sagemakerRequestJson = data.sagemakerRequestJson } + if (data.taskType === 'PYTORCH') { + taskParams.script = data.script + taskParams.scriptParams = data.scriptParams + taskParams.pythonPath = data.pythonPath + taskParams.isCreateEnvironment = data.isCreateEnvironment + taskParams.pythonCommand = data.pythonCommand + taskParams.pythonEnvTool = data.pythonEnvTool + taskParams.requirements = data.requirements + taskParams.condaPythonVersion = data.condaPythonVersion + } if (data.taskType === 'DINKY') { taskParams.address = data.address diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts index f2b0d148bb..0ac47ea9b4 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts @@ -43,6 +43,7 @@ import { useDvc } from './use-dvc' import { useDinky } from './use-dinky' import { userSagemaker } from './use-sagemaker' import { useChunjun } from './use-chunjun' +import { usePytorch } from './use-pytorch' export default { SHELL: useShell, @@ -72,5 +73,6 @@ export default { DINKY: useDinky, SAGEMAKER: userSagemaker, CHUNJUN: useChunjun, - FLINK_STREAM: useFlinkStream + FLINK_STREAM: useFlinkStream, + PYTORCH: usePytorch } diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-pytorch.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-pytorch.ts new file mode 100644 index 0000000000..7b24a07adf --- /dev/null +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-pytorch.ts @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { reactive } from 'vue' +import * as Fields from '../fields/index' +import type { IJsonItem, INodeData, ITaskData } from '../types' + +export function usePytorch({ + projectCode, + from = 0, + readonly, + data +}: { + projectCode: number + from?: number + readonly?: boolean + data?: ITaskData +}) { + const model = reactive({ + name: '', + taskType: 'PYTORCH', + flag: 'YES', + description: '', + timeoutFlag: false, + localParams: [], + environmentCode: null, + failRetryInterval: 1, + failRetryTimes: 0, + workerGroup: 'default', + delayTime: 0, + timeout: 30, + timeoutNotifyStrategy: ['WARN'], + pythonEnvTool: 'conda', + pythonCommand: '${PYTHON_HOME}', + condaPythonVersion: '3.7', + requirements: 'requirements.txt', + pythonPath: '.' + } as INodeData) + + let extra: IJsonItem[] = [] + if (from === 1) { + extra = [ + Fields.useTaskType(model, readonly), + Fields.useProcessName({ + model, + projectCode, + isCreate: !data?.id, + from, + processName: data?.processName + }) + ] + } + + return { + json: [ + Fields.useName(from), + ...extra, + Fields.useRunFlag(), + Fields.useDescription(), + Fields.useTaskPriority(), + Fields.useWorkerGroup(), + Fields.useEnvironmentName(model, !model.id), + ...Fields.useTaskGroup(model, projectCode), + ...Fields.useFailed(), + ...Fields.useResourceLimit(), + Fields.useDelayTime(model), + ...Fields.useTimeoutAlarm(model), + ...Fields.usePytorch(model), + Fields.usePreTasks() + ] as IJsonItem[], + model + } +} + diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts index bda369f6fd..6260be2140 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts @@ -364,6 +364,14 @@ interface ITaskParams { taskId?: string online?: boolean sagemakerRequestJson?: string + script?: string + scriptParams?: string + pythonPath?: string + isCreateEnvironment?: string + pythonCommand?: string + pythonEnvTool?: string + requirements?: string + condaPythonVersion?: string } interface INodeData diff --git a/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts b/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts index 3b42fc6fed..26505d6a39 100644 --- a/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts +++ b/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts @@ -43,6 +43,7 @@ export type TaskType = | 'SAGEMAKER' | 'CHUNJUN' | 'FLINK_STREAM' + | 'PYTORCH' export type TaskExecuteType = 'STREAM' | 'BATCH' @@ -146,6 +147,10 @@ export const TASK_TYPES_MAP = { alias: 'FLINK_STREAM', helperLinkDisable: true, taskExecuteType: 'STREAM' + }, + PYTORCH: { + alias: 'Pytorch', + helperLinkDisable: true } } as { [key in TaskType]: { diff --git a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss index 6b8d7e6de7..0549372ac0 100644 --- a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss +++ b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss @@ -183,6 +183,9 @@ $bgLight: #ffffff; &.icon-chunjun { background-image: url('/images/task-icons/chunjun.png'); } + &.icon-pytorch { + background-image: url('/images/task-icons/pytorch.png'); + } } &:hover { @@ -269,6 +272,9 @@ $bgLight: #ffffff; &.icon-chunjun { background-image: url('/images/task-icons/chunjun_hover.png'); } + &.icon-pytorch { + background-image: url('/images/task-icons/pytorch_hover.png'); + } } } }