From 48615ecbf5ea2b247a803311b8b1ce346b4af677 Mon Sep 17 00:00:00 2001 From: c-bata Date: Tue, 26 Oct 2021 17:21:28 +0900 Subject: [PATCH 1/7] Add Dockerfile --- DEVELOPMENT.md | 13 +++++++++++++ Dockerfile | 27 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 Dockerfile diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 17b38c56..84fa7fb6 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -29,6 +29,19 @@ $ npm run build:prd +### Building a Docker image + +``` +$ docker build -t . +``` + +When failed above command due to the out of heap memory error (Exit code: 137), please check "Resources" tab on your Docker engine's preference since it requires a lot of memory to compile TypeScript files. +You can use the Docker image like below: + +``` +$ docker run -it --rm -p 8080:8080 sqlite:///db.sqlite3 +``` + ### Running dashboard server ``` diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..100e55f9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +FROM node:14 AS front-builder +WORKDIR /usr/src + +ADD ./package.json /usr/src/package.json +ADD ./package-lock.json /usr/src/package-lock.json +RUN npm install + +ADD ./tsconfig.json /usr/src/tsconfig.json +ADD ./webpack.config.js /usr/src/webpack.config.js +ADD ./optuna_dashboard/static/ /usr/src/optuna_dashboard/static +RUN mkdir -p /usr/src/optuna_dashboard/public +RUN npm run build:prd + +FROM python:3.8 + +WORKDIR /usr/src +RUN pip install --upgrade pip setuptools +RUN pip install --no-cache-dir --progress-bar off PyMySQL cryptography psycopg2-binary + +ADD ./setup.cfg /usr/src/setup.cfg +ADD ./setup.py /usr/src/setup.py +ADD ./optuna_dashboard /usr/src/optuna_dashboard +COPY --from=front-builder /usr/src/optuna_dashboard/public/ /usr/src/optuna_dashboard/public/ +RUN pip install --no-cache-dir --progress-bar off . + +EXPOSE 8080 +ENTRYPOINT ["optuna-dashboard", "--port", "8080", "--host", "0.0.0.0"] From d81e6ee18360a85a0b4bf8abbdc9508681714608 Mon Sep 17 00:00:00 2001 From: c-bata Date: Tue, 26 Oct 2021 18:58:02 +0900 Subject: [PATCH 2/7] Use 3.8-slim-buster --- Dockerfile | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 100e55f9..e243de14 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,17 +11,22 @@ ADD ./optuna_dashboard/static/ /usr/src/optuna_dashboard/static RUN mkdir -p /usr/src/optuna_dashboard/public RUN npm run build:prd -FROM python:3.8 +FROM python:3.8-buster AS python-builder WORKDIR /usr/src RUN pip install --upgrade pip setuptools -RUN pip install --no-cache-dir --progress-bar off PyMySQL cryptography psycopg2-binary +RUN pip install --progress-bar off PyMySQL cryptography psycopg2-binary ADD ./setup.cfg /usr/src/setup.cfg ADD ./setup.py /usr/src/setup.py ADD ./optuna_dashboard /usr/src/optuna_dashboard COPY --from=front-builder /usr/src/optuna_dashboard/public/ /usr/src/optuna_dashboard/public/ -RUN pip install --no-cache-dir --progress-bar off . +RUN pip install --progress-bar off . + +FROM python:3.8-slim-buster as runner + +COPY --from=python-builder /usr/local/lib/python3.8/site-packages /usr/local/lib/python3.8/site-packages +COPY --from=python-builder /usr/local/bin/optuna-dashboard /usr/local/bin/optuna-dashboard EXPOSE 8080 ENTRYPOINT ["optuna-dashboard", "--port", "8080", "--host", "0.0.0.0"] From f6a07fe2c039435b078b9de9f1083c38e8053182 Mon Sep 17 00:00:00 2001 From: c-bata Date: Mon, 22 Nov 2021 21:05:43 +0900 Subject: [PATCH 3/7] Add a script to check MySQL --- Dockerfile | 2 +- docker/check_mysql.sh | 44 ++++++++++++++++++++++++++++++++++++++++ docker/optuna_example.py | 18 ++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100755 docker/check_mysql.sh create mode 100644 docker/optuna_example.py diff --git a/Dockerfile b/Dockerfile index e243de14..4cd28c4d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ FROM python:3.8-buster AS python-builder WORKDIR /usr/src RUN pip install --upgrade pip setuptools -RUN pip install --progress-bar off PyMySQL cryptography psycopg2-binary +RUN pip install --progress-bar off PyMySQL[rsa] psycopg2-binary ADD ./setup.cfg /usr/src/setup.cfg ADD ./setup.py /usr/src/setup.py diff --git a/docker/check_mysql.sh b/docker/check_mysql.sh new file mode 100755 index 00000000..efd8f53f --- /dev/null +++ b/docker/check_mysql.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +DIR=$(cd $(dirname $0); pwd) +OPTUNA_DASHBOARD_IMAGE=${OPTUNA_DASHBOARD_IMAGE:-optuna-dashboard} + +echo "" +echo "1. Prepare MYSQL 8.0 Server using Docker." +echo "" + +set -e +docker run \ + -d \ + --rm \ + -p 3306:3306 \ + -e MYSQL_USER=optuna \ + -e MYSQL_DATABASE=optuna \ + -e MYSQL_PASSWORD=password \ + -e MYSQL_ALLOW_EMPTY_PASSWORD=yes \ + --name optuna-mysql \ + mysql:8 + +echo "Wait ready for MySQL" +sleep 20 + + +echo "" +echo "2. Run an Optuna example." +echo "" + +python ${DIR}/optuna_example.py "mysql+pymysql://optuna:password@127.0.0.1:3306/optuna" + +set +e + +echo "" +echo "3. Open Web Dashboard" +echo "" + +docker run -it --rm -p 8080:8080 --link=optuna-mysql $OPTUNA_DASHBOARD_IMAGE "mysql+pymysql://optuna:password@optuna-mysql:3306/optuna" + +echo "" +echo "4. Stop MYSQL Server" +echo "" + +docker stop optuna-mysql diff --git a/docker/optuna_example.py b/docker/optuna_example.py new file mode 100644 index 00000000..cf74e8ca --- /dev/null +++ b/docker/optuna_example.py @@ -0,0 +1,18 @@ +import sys +import optuna + + +def objective(trial): + x = trial.suggest_float("x", -100, 100) + y = trial.suggest_categorical("y", [-1, 0, 1]) + return x ** 2 + y + + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("Invalid args") + sys.exit(1) + + db_url = sys.argv[1] + study = optuna.create_study(storage=db_url, study_name="example-study") + study.optimize(objective, n_trials=10) From a671c1410a2b7aac176da49fc904d9fd50a12f75 Mon Sep 17 00:00:00 2001 From: c-bata Date: Mon, 22 Nov 2021 22:09:54 +0900 Subject: [PATCH 4/7] Add a script to check PostgreSQL --- docker/check_postgres.sh | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100755 docker/check_postgres.sh diff --git a/docker/check_postgres.sh b/docker/check_postgres.sh new file mode 100755 index 00000000..21f1afa7 --- /dev/null +++ b/docker/check_postgres.sh @@ -0,0 +1,43 @@ +#!/bin/sh + +DIR=$(cd $(dirname $0); pwd) +OPTUNA_DASHBOARD_IMAGE=${OPTUNA_DASHBOARD_IMAGE:-optuna-dashboard} + +echo "" +echo "1. Run PostgreSQL Server using Docker." +echo "" + +set -e +docker run \ + -d \ + --rm \ + -p 5432:5432 \ + -e POSTGRES_USER=optuna \ + -e POSTGRES_DB=optuna \ + -e POSTGRES_PASSWORD=password \ + --name optuna-postgres \ + postgres:10.1-alpine + +echo "Wait ready for PostgreSQL" +sleep 20 + + +echo "" +echo "2. Run an Optuna example." +echo "" + +python ${DIR}/optuna_example.py "postgresql+psycopg2://optuna:password@127.0.0.1:5432/optuna" + +set +e + +echo "" +echo "3. Open Web Dashboard" +echo "" + +docker run -it --rm -p 8080:8080 --link=optuna-postgres $OPTUNA_DASHBOARD_IMAGE "postgresql+psycopg2://optuna:password@optuna-postgres:5432/optuna" + +echo "" +echo "4. Stop MYSQL Server" +echo "" + +docker stop optuna-postgres From d79a6852555d9733846736d879f232076070b213 Mon Sep 17 00:00:00 2001 From: c-bata Date: Mon, 22 Nov 2021 22:36:20 +0900 Subject: [PATCH 5/7] Refer cbata/optuna-dashboard --- DEVELOPMENT.md | 2 +- docker/optuna_example.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 84fa7fb6..68bd3dac 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -39,7 +39,7 @@ When failed above command due to the out of heap memory error (Exit code: 137), You can use the Docker image like below: ``` -$ docker run -it --rm -p 8080:8080 sqlite:///db.sqlite3 +$ docker run -it --rm -p 8080:8080 cbata/optuna-dashboard sqlite:///db.sqlite3 ``` ### Running dashboard server diff --git a/docker/optuna_example.py b/docker/optuna_example.py index cf74e8ca..3b75e90c 100644 --- a/docker/optuna_example.py +++ b/docker/optuna_example.py @@ -1,4 +1,5 @@ import sys + import optuna From 3f4db242d6212217efc7b3650af5732d1063ae95 Mon Sep 17 00:00:00 2001 From: c-bata Date: Mon, 22 Nov 2021 23:03:06 +0900 Subject: [PATCH 6/7] Fix github action errors --- .github/workflows/python-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index d87bdf50..1107398b 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -24,7 +24,7 @@ jobs: - run: flake8 . --show-source - run: black --check --diff . - run: isort --check --diff . - - run: mypy . + - run: mypy optuna_dashboard python_tests test: runs-on: ubuntu-latest strategy: From 5449b40a403ed81c0f466a0cc7bb389adb130f44 Mon Sep 17 00:00:00 2001 From: c-bata Date: Mon, 22 Nov 2021 23:04:43 +0900 Subject: [PATCH 7/7] Update Docker image name --- DEVELOPMENT.md | 2 +- docker/check_mysql.sh | 2 +- docker/check_postgres.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 68bd3dac..b334fd5d 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -32,7 +32,7 @@ $ npm run build:prd ### Building a Docker image ``` -$ docker build -t . +$ docker build -t cbata/optuna-dashboard . ``` When failed above command due to the out of heap memory error (Exit code: 137), please check "Resources" tab on your Docker engine's preference since it requires a lot of memory to compile TypeScript files. diff --git a/docker/check_mysql.sh b/docker/check_mysql.sh index efd8f53f..d4a7906b 100755 --- a/docker/check_mysql.sh +++ b/docker/check_mysql.sh @@ -1,7 +1,7 @@ #!/bin/sh DIR=$(cd $(dirname $0); pwd) -OPTUNA_DASHBOARD_IMAGE=${OPTUNA_DASHBOARD_IMAGE:-optuna-dashboard} +OPTUNA_DASHBOARD_IMAGE=${OPTUNA_DASHBOARD_IMAGE:-cbata/optuna-dashboard} echo "" echo "1. Prepare MYSQL 8.0 Server using Docker." diff --git a/docker/check_postgres.sh b/docker/check_postgres.sh index 21f1afa7..8a7d60e7 100755 --- a/docker/check_postgres.sh +++ b/docker/check_postgres.sh @@ -1,7 +1,7 @@ #!/bin/sh DIR=$(cd $(dirname $0); pwd) -OPTUNA_DASHBOARD_IMAGE=${OPTUNA_DASHBOARD_IMAGE:-optuna-dashboard} +OPTUNA_DASHBOARD_IMAGE=${OPTUNA_DASHBOARD_IMAGE:-cbata/optuna-dashboard} echo "" echo "1. Run PostgreSQL Server using Docker."