Merge pull request #146 from optuna/dockerfile

Distribute an official Docker image
This commit is contained in:
Masashi Shibata
2021-11-22 23:33:40 +09:00
committed by GitHub
6 changed files with 152 additions and 1 deletions
+1 -1
View File
@@ -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:
+13
View File
@@ -29,6 +29,19 @@ $ npm run build:prd
</details>
### Building a Docker image
```
$ 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.
You can use the Docker image like below:
```
$ docker run -it --rm -p 8080:8080 cbata/optuna-dashboard sqlite:///db.sqlite3
```
### Running dashboard server
```
+32
View File
@@ -0,0 +1,32 @@
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-buster AS python-builder
WORKDIR /usr/src
RUN pip install --upgrade pip setuptools
RUN pip install --progress-bar off PyMySQL[rsa] 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 --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"]
+44
View File
@@ -0,0 +1,44 @@
#!/bin/sh
DIR=$(cd $(dirname $0); pwd)
OPTUNA_DASHBOARD_IMAGE=${OPTUNA_DASHBOARD_IMAGE:-cbata/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
+43
View File
@@ -0,0 +1,43 @@
#!/bin/sh
DIR=$(cd $(dirname $0); pwd)
OPTUNA_DASHBOARD_IMAGE=${OPTUNA_DASHBOARD_IMAGE:-cbata/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
+19
View File
@@ -0,0 +1,19 @@
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)