Development Guide
Project Overview
The document Submarine Quickstart shows how to deploy the Submarine service to your Kubernetes cluster. The Submarine service consists mainly of nine components, and you can check them with the following command:
kubectl get pods -n ${your_namespace}
A brief introduction about these components:
- tf-operator: Enable users to run TensorFlow jobs distributedly
- pytorch-operator: Enable users to run PyTorch jobs distributedly
- notebook-controller: Jupyter Notebook controller
- submarine-istio: Kubernetes Ingress controller
- submarine-database: A MySQL database to store metadata
- submarine-minio: An object store for machine learning artifacts
- submarine-mlflow: A platform for model management
- submarine-tensorboard: A visualization tool for distributed training experiments
- submarine-server: Handle API requests, and submit distributed training experiments to Kubernetes.
Submarine Development
Videoβ
- From this Video, you will know how to deal with the configuration of Submarine and be able to contribute to it via Github.
Develop serverβ
Prerequisitesβ
- JDK 1.8
- Maven 3.3 or later ( < 3.8.1 )
- Docker
Setting up checkstyle in IDEβ
Checkstyle plugin may help to detect violations directly from the IDE.
- Install Checkstyle+IDEA plugin from
Preference
->Plugins
- Open
Preference
->Tools
->Checkstyle
- Set Checkstyle version:
- Checkstyle version: 8.0
- Add (+) a new Configuration File
- Description: Submarine
- Use a local checkstyle
${SUBMARINE_HOME}/dev-support/maven-config/checkstyle.xml
- Set Checkstyle version:
- Open the Checkstyle Tool Window, select the Submarine rule and execute the check
Testingβ
Unit Test
For each class, there is a corresponding testClass. For example,
SubmarineServerTest
is used for testingSubmarineServer
. Whenever you add a funtion in classes, you must write a unit test to test it.Integration Test: IntegrationTestK8s.md
Build from sourceβ
Before building
- We assume the developer use minikube as a local kubernetes cluster.
- Make sure you have installed the submarine helm-chart in the cluster.
Package the Submarine server into a new jar file
mvn install -DskipTests
Build the new server docker image in minikube
# switch to minikube docker daemon to build image directly in minikube
eval $(minikube docker-env)
# run docker build
./dev-support/docker-images/submarine/build.sh
# exit minikube docker daemon
eval $(minikube docker-env -u)Delete the server deployment and the operator will create a new one using the new image
kubectl delete deployment submarine-server
Develop workbenchβ
Deploy the Submarine
Follow Getting Started/Quickstart, and make sure you can connect to
http://localhost:32080
in the browser.Install the dependencies
cd submarine-workbench/workbench-web
npm installRun the workbench based on proxy server
npm run start
- The request sent to
http://localhost:4200
will be redirected tohttp://localhost:32080
. - Open
http://localhost:4200
in browser to see the real-time change of workbench.
- The request sent to
Frontend E2E test: IntegrationTestE2E.md
Develop databaseβ
Build the docker image
# switch to minikube docker daemon to build image directly in minikube
eval $(minikube docker-env)
# run docker build
./dev-support/docker-images/database/build.sh
# exit minikube docker daemon
eval $(minikube docker-env -u)Deploy new pods in the cluster
helm upgrade --set submarine.database.dev=true submarine ./helm-charts/submarine
Develop operatorβ
For details, please check out the README and Developer Guide on GitHub.
Develop Submarine Websiteβ
Submarine website is built using Docusaurus 2, a modern static website generator.
We store all the website content in markdown format in the submarine/website/docs
. When committing a new patch to the submarine
repo, Docusaurus will help us generate the html
and javascript
files and push them to https://github.com/apache/submarine-site/tree/asf-site.
To update the website, click βEdit this pageβ on the website.
Add a new pageβ
If you want to add a new page to the website, make sure to add the file path to sidebars.js.
Installationβ
We use the yarn package manager to install all dependencies for the website
yarn install
Buildβ
Make sure you can successfully build the website before creating a pull request.
yarn build
Local Developmentβ
This command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server.
yarn start