Skip to content

Commit 7250b7f

Browse files
Merge pull request #27 from jacquelinegarrahan/main
Final syncs before v0.1 release
2 parents 34b4638 + 18f3758 commit 7250b7f

File tree

23 files changed

+2161
-497
lines changed

23 files changed

+2161
-497
lines changed

docs/config.md

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,6 @@ Configuration of the job environment must respect hostnames available to their o
3737
## Overriding configuration values
3838

3939

40-
```yaml
41-
model:
42-
author: Jaqueline Garrhan
43-
laboratory: SLAC
44-
facility: LCLS
45-
beampath: cu_hxr
46-
description: Example model
47-
48-
49-
deployment:
50-
version: v0.0
51-
source: https://github.com/jacquelinegarrahan/my-model-repo
52-
variables: my-model-repo/my_model_repo/files/variables.yaml
53-
flow_name: example_cu_hxr_0.0
54-
```
55-
5640
```yaml
5741
input_variables:
5842
input_variable_1:

docs/demo.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
# Demo
22

33
This demo walks through the creation of a model compatible with [LUME-services](https://slaclab.github.io/lume-services/) tooling. You will:
4-
1. Create a GitHub repository for the demo model.
4+
1. Create a GitHub repository for the demo model
55
2. Build a templated project using [`lume-services-model-template`](https://github.com/slaclab/lume-services-model-template)
6-
3. Register your model using the LUME-services API to Prefect orchestration tools, the MySQL model registry, and store results in a MongoDB service
6+
3. Register your model using the LUME-services API and store deployment information into a MySQL database
7+
4. Run your model, storing results in MongoDB database
8+
5. Retrieve model results using LUME-services
79

810

9-
prerequisites:
10-
- dockerhub or stanford container registry
11+
Requirements:
12+
* [Docker desktop](https://www.docker.com/products/docker-desktop/) for launching the development environment
13+
* [Conda installation](https://docs.conda.io/en/latest/miniconda.html) for the management of Python environments
14+
* Either a [DockerHub](https://hub.docker.com/) account or Stanford account to use the [Stanford Container Registry](https://itcommunity.stanford.edu/unconference/sessions/2018/introducing-scr-stanford-container-registry) provided by the [code.stanford.edu](https://code.stanford.edu/SiteDocs/faq) effort.
1115

1216

1317
## Package a model
@@ -20,7 +24,7 @@ Using your GitHub account, create an repository named `my-model` (feel free to s
2024

2125
Clone `lume-model-services-template` and navigate to repository:
2226
```
23-
git clone https://github.com/jacquelinegarrahan/lume-services-model-template
27+
git clone https://github.com/slaclab/lume-services-model-template
2428
cd lume-services-model-template
2529
```
2630

@@ -57,7 +61,7 @@ Select container_registry:
5761
2 - Stanford Container Registry
5862
Choose from 1, 2 [1]:
5963
```
60-
If you plan to use the Stanford Container Registry, enter `2`. Otherwise, enter `1` for DockerHub.
64+
If you plan to use the Stanford Container Registry, enter `2`. Otherwise, enter `1` for DockerHub. Now, enter the username you use for the contaner registry:
6165

6266
```
6367
container_username: YOUR REGISTRY USERNAME
@@ -304,7 +308,7 @@ The release will trigger a GitHub action workflow for your project, which you ca
304308
The below steps mimic a production deployment workflow.
305309

306310

307-
### 14. Start services with docker-compose
311+
### 12. Start services with docker-compose
308312

309313
LUME-services is packaged with a command line utility for launching the development environment, a docker-compose application with all services packaged and configurable via environment variables.
310314

@@ -327,9 +331,12 @@ Once the console logs a message about passed health checks, you've started all s
327331

328332
And access the UI using your browser at http://localhost:8080.
329333

334+
## 13. Pull image (Stanford Container Registry)
335+
If using the Stanford Container Registry, you'll have to pull the image before kicking off workflows so that Docker can find the image.
330336

331337

332-
### 15. Run the notebook and register your model
338+
339+
### 14. Run the notebook and register your model
333340

334341
Create a new console window. Activate lume-services-dev and configure the environment variables:
335342
```

docs/developer/todo.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
- [x] Remove tests in pip installation
77
- [ ] Docs!
88
- [ ] Set up all loggers
9+
- [ ] Set collection at the system level.
910
- [ ] Move environments, flows, tasks, and results under model directory
1011
- [ ] Fix the workflow tests to use templated repos with docker build
1112
- [x] Fix image issue... Build a designated image in deployment using a lume-services base image

docs/examples/Demo.ipynb

Lines changed: 1890 additions & 274 deletions
Large diffs are not rendered by default.

docs/examples/test_file.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
[![Issues][issues-shield]][issues-url]
1111
[![Issues Closed][issues-closed-shield]][issues-closed-url]
1212
[![Tests][tests-workflow]][tests-workflow-url]
13-
![Coverage][coverage]
13+
[![Coverage]][coverage]
1414
[![Docs][docs-workflow]][docs-workflow-url]
1515
</div>
1616
<br />

lume_services/docker/files/docker-compose.yml

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -144,35 +144,32 @@ services:
144144

145145
# agent
146146
agent:
147-
image: prefecthq/prefect:1.2.3-python3.10
147+
image: prefecthq/prefect:1.4.0-python3.10
148148
# The environment variables are passed from agent to job pods
149149
# This configures access to services
150150
command: >
151151
bash -c "prefect server create-tenant --name default --slug default &>/dev/null ;
152-
prefect agent docker start --label lume-services --agent-address http://localhost:5000/ --show-flow-logs --log-level DEBUG --network service-net
153-
--env LUME_BACKEND=$LUME_BACKEND
154-
--env LUME_MOUNTED_FILESYSTEM__IDENTIFIER=$LUME_MOUNTED_FILESYSTEM__IDENTIFIER
155-
--env LUME_MOUNTED_FILESYSTEM__MOUNT_PATH=$LUME_MOUNTED_FILESYSTEM__MOUNT_PATH
156-
--env LUME_MOUNTED_FILESYSTEM__MOUNT_ALIAS=$LUME_MOUNTED_FILESYSTEM__MOUNT_ALIAS
157-
--env LUME_MOUNTED_FILESYSTEM__MOUNT_TYPE=$LUME_MOUNTED_FILESYSTEM__MOUNT_TYPE
158-
--env LUME_ENVIRONMENT__LOCAL_PIP_REPOSITORY=$LUME_ENVIRONMENT__LOCAL_PIP_REPOSITORY
159-
--env LUME_ENVIRONMENT__LOCAL_CONDA_CHANNEL_DIRECTORY=$LUME_ENVIRONMENT__LOCAL_CONDA_CHANNEL_DIRECTORY
160-
--env LUME_MODEL_DB__HOST=$LUME_MODEL_DB__HOST
161-
--env LUME_MODEL_DB__PORT=$LUME_MODEL_DB__PORT
162-
--env LUME_MODEL_DB__USER=$LUME_MODEL_DB__USER
163-
--env LUME_MODEL_DB__PASSWORD=$LUME_MODEL_DB__PASSWORD
164-
--env LUME_MODEL_DB__DATABASE=$LUME_MODEL_DB__DATABASE
165-
--env LUME_RESULTS_DB__USERNAME=$LUME_RESULTS_DB__USERNAME
166-
--env LUME_RESULTS_DB__PASSWORD=$LUME_RESULTS_DB__PASSWORD
167-
--env LUME_RESULTS_DB__PORT=$LUME_RESULTS_DB__PORT
168-
--env LUME_RESULTS_DB__HOST=$LUME_RESULTS_DB__HOST
169-
--env LUME_RESULTS_DB__DATABASE=$LUME_RESULTS_DB__DATABASE
170-
--env LUME_PREFECT__SERVER__HOST=$LUME_PREFECT__SERVER__HOST
171-
--env LUME_PREFECT__SERVER__HOST_PORT=$LUME_PREFECT__SERVER__HOST_PORT
172-
--env LUME_PREFECT__HOME_DIR=$LUME_PREFECT__HOME_DIR
173-
--env LUME_PREFECT__DEBUG=$LUME_PREFECT__DEBUG
174-
--env LUME_PREFECT__BACKEND=$LUME_PREFECT__BACKEND
175-
--volume ${LUME_MOUNTED_FILESYSTEM__MOUNT_PATH:-PWD}:${LUME_MOUNTED_FILESYSTEM__MOUNT_ALIAS:-/lume-services/data}"
152+
prefect agent docker start --label lume-services --agent-address http://localhost:5000/ --show-flow-logs --log-level DEBUG --network service-net --env LUME_BACKEND=$LUME_BACKEND
153+
--env LUME_MOUNTED_FILESYSTEM__IDENTIFIER=${LUME_MOUNTED_FILESYSTEM__IDENTIFIER:-mounted}
154+
--env LUME_MOUNTED_FILESYSTEM__MOUNT_PATH=${LUME_MOUNTED_FILESYSTEM__MOUNT_PATH}
155+
--env LUME_MOUNTED_FILESYSTEM__MOUNT_ALIAS=${LUME_MOUNTED_FILESYSTEM__MOUNT_ALIAS:-/lume-services/data}
156+
--env LUME_MOUNTED_FILESYSTEM__MOUNT_TYPE=${LUME_MOUNTED_FILESYSTEM__MOUNT_TYPE:-DirectoryOrCreate}
157+
--env LUME_MODEL_DB__HOST=mysql
158+
--env LUME_MODEL_DB__PORT=3306
159+
--env LUME_MODEL_DB__USER=${LUME_MODEL_DB__USER:-root}
160+
--env LUME_MODEL_DB__PASSWORD=${LUME_MODEL_DB__PASSWORD:-password}
161+
--env LUME_MODEL_DB__DATABASE=${LUME_MODEL_DB__DATABASE:-lume_services_models}
162+
--env LUME_RESULTS_DB__USERNAME=${LUME_RESULTS_DB__USERNAME:-root}
163+
--env LUME_RESULTS_DB__PASSWORD=${LUME_RESULTS_DB__PASSWORD:-password}
164+
--env LUME_RESULTS_DB__PORT=27017
165+
--env LUME_RESULTS_DB__HOST=mongodb
166+
--env LUME_RESULTS_DB__DATABASE=${LUME_RESULTS_DB__DATABASE:-lume_services_results}
167+
--env LUME_PREFECT__SERVER__HOST=http://apollo
168+
--env LUME_PREFECT__SERVER__HOST_PORT=4200
169+
--env LUME_PREFECT__HOME_DIR=~/.prefect
170+
--env LUME_PREFECT__DEBUG=${LUME_PREFECT__DEBUG:-false}
171+
--env LUME_PREFECT__BACKEND=server
172+
--volume ${LUME_MOUNTED_FILESYSTEM__MOUNT_PATH}:${LUME_MOUNTED_FILESYSTEM__MOUNT_ALIAS:-/lume-services/data}"
176173
volumes:
177174
- type: bind
178175
source: ./config.toml
@@ -183,25 +180,22 @@ services:
183180
target: /var/run/docker.sock
184181
read_only: true
185182
- type: bind
186-
source: ${LUME_MOUNTED_FILESYSTEM__MOUNT_PATH:-PWD}
183+
source: ${LUME_MOUNTED_FILESYSTEM__MOUNT_PATH}
187184
target: ${LUME_MOUNTED_FILESYSTEM__MOUNT_ALIAS:-/lume-services/data}
188185
read_only: false
189186
environment:
190187
LUME_MOUNTED_FILESYSTEM__IDENTIFIER: ${LUME_MOUNTED_FILESYSTEM__IDENTIFIER:-mounted}
191-
LUME_MOUNTED_FILESYSTEM__MOUNT_PATH: ${LUME_MOUNTED_FILESYSTEM__MOUNT_PATH:-PWD}
188+
LUME_MOUNTED_FILESYSTEM__MOUNT_PATH: ${LUME_MOUNTED_FILESYSTEM__MOUNT_PATH}
192189
LUME_MOUNTED_FILESYSTEM__MOUNT_ALIAS: ${LUME_MOUNTED_FILESYSTEM__MOUNT_ALIAS:-/lume-services/data}
193190
LUME_MOUNTED_FILESYSTEM__MOUNT_TYPE: ${LUME_MOUNTED_FILESYSTEM__MOUNT_TYPE:-DirectoryOrCreate}
194-
LOCAL_CHANNEL_ONLY: ${LUME_PREFECT__ISOLATED:-false}
195-
LUME_ENVIRONMENT__LOCAL_PIP_REPOSITORY: ${LUME_EVIRONMENT__LOCAL_PIP_REPOSITORY}
196-
LUME_ENVIRONMENT__LOCAL_CONDA_CHANNEL_DIRECTORY: ${LUME_EVIRONMENT__LOCAL_CONDA_CHANNEL_DIRECTORY}
197-
LUME_MODEL_DB__HOST: http://mysql
191+
LUME_MODEL_DB__HOST: mysql
198192
LUME_MODEL_DB__PORT: 3306
199193
LUME_MODEL_DB__USER: ${LUME_MODEL_DB__USER:-root}
200194
LUME_MODEL_DB__PASSWORD: ${LUME_MODEL_DB__PASSWORD:-password}
201195
LUME_MODEL_DB__DATABASE: ${LUME_MODEL_DB__DATABASE:-lume_services_models}
202-
LUME_RESULTS_DB__DATABASE: ${LUME_MODEL_DB__DATABASE:-results}
196+
LUME_RESULTS_DB__DATABASE: ${LUME_MODEL_DB__DATABASE:-lume_service_results}
203197
LUME_RESULTS_DB__USERNAME: ${LUME_RESULTS_DB__USERNAME:-root}
204-
LUME_RESULTS_DB__HOST: http://mongodb
198+
LUME_RESULTS_DB__HOST: mongodb
205199
LUME_RESULTS_DB__PASSWORD: ${LUME_RESULTS_DB__PASSWORD:-password}
206200
LUME_RESULTS_DB__PORT: 27017
207201
LUME_PREFECT__SERVER__HOST: http://apollo

lume_services/docker/files/model-db-init.sql

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,28 @@
22
CREATE TABLE model (
33
model_id INTEGER NOT NULL AUTO_INCREMENT,
44
created DATETIME DEFAULT now(),
5-
author VARCHAR(255) NOT NULL,
6-
laboratory VARCHAR(255) NOT NULL,
7-
facility VARCHAR(255) NOT NULL,
8-
beampath VARCHAR(255) NOT NULL,
5+
author VARCHAR(50) NOT NULL,
6+
laboratory VARCHAR(50) NOT NULL,
7+
facility VARCHAR(50) NOT NULL,
8+
beampath VARCHAR(50) NOT NULL,
99
description VARCHAR(255) NOT NULL,
10-
PRIMARY KEY (model_id)
10+
PRIMARY KEY (model_id),
11+
CONSTRAINT _model_entry UNIQUE (author, laboratory, facility, beampath, description)
1112
);
1213
CREATE TABLE project (
13-
project_name VARCHAR(255) NOT NULL,
14+
project_name VARCHAR(50) NOT NULL,
1415
description VARCHAR(255) NOT NULL,
1516
PRIMARY KEY (project_name)
1617
);
1718
CREATE TABLE deployment (
1819
deployment_id INTEGER NOT NULL AUTO_INCREMENT,
19-
version VARCHAR(255) NOT NULL,
20+
version VARCHAR(10) NOT NULL,
2021
deploy_date DATETIME DEFAULT now(),
21-
package_import_name VARCHAR(255) NOT NULL,
22+
package_import_name VARCHAR(50) NOT NULL,
2223
asset_dir VARCHAR(255),
2324
source VARCHAR(255) NOT NULL,
24-
sha256 VARCHAR(255) NOT NULL,
25-
image VARCHAR(255),
25+
sha256 VARCHAR(64) NOT NULL,
26+
image VARCHAR(100),
2627
is_live BOOL NOT NULL,
2728
model_id INTEGER NOT NULL,
2829
PRIMARY KEY (deployment_id),
@@ -31,8 +32,8 @@ CREATE TABLE deployment (
3132
);
3233
CREATE TABLE flow (
3334
flow_id VARCHAR(255) NOT NULL,
34-
flow_name VARCHAR(255) NOT NULL,
35-
project_name VARCHAR(255) NOT NULL,
35+
flow_name VARCHAR(50) NOT NULL,
36+
project_name VARCHAR(50) NOT NULL,
3637
deployment_id INTEGER NOT NULL,
3738
PRIMARY KEY (flow_id),
3839
FOREIGN KEY(project_name) REFERENCES project (project_name),

lume_services/errors.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,27 @@ def __init__(self):
292292
super().__init__("CONDA_PREFIX environment variabe is not set.")
293293

294294

295-
class NoFlowFoundError(Exception):
296-
295+
class NoFlowFoundInPackageError(Exception):
297296
def __init__(self, source_path):
298297
self.source_path = source_path
299298
self.message = "No flow entrypoint found for the distribution at %s"
300299
super().__init__(self.message, self.source_path)
300+
301+
302+
class PathNotInMount(Exception):
303+
def __init__(
304+
self, filesystem_identifier: str, path: str, mount_path: str, mount_alias: str
305+
):
306+
self.filesystem_identifier = filesystem_identifier
307+
self.path = (path,)
308+
self.mount_path = mount_path
309+
self.mount_alias = mount_alias
310+
self.message = "Path %s not in mount for mounted filesystem identifier: %s, \
311+
Mount path: %s, Mount alias: %s"
312+
super().__init__(
313+
self.message,
314+
self.path,
315+
self.filesystem_identifier,
316+
self.mount_path,
317+
self.mount_alias,
318+
)

lume_services/flows/flow.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
from datetime import datetime, timedelta
2-
from pydantic import BaseModel, validator, Field, root_validator
2+
from pydantic import BaseModel, validator, Field
33
from prefect import Parameter
44
from prefect.run_configs import RunConfig
55
from typing import List, Optional, Dict, Literal, Any
66
from prefect import Flow as PrefectFlow
77
from dependency_injector.wiring import Provide, inject
88
from lume_services.config import Context
9-
from lume_services.utils import get_callable_from_string
109

1110
from lume_services.services.scheduling import SchedulingService
1211
from lume_services.services.scheduling.backends.local import LocalBackend
@@ -252,7 +251,7 @@ def run_and_return(
252251
if self.prefect_flow is None:
253252
self.load_flow()
254253

255-
scheduling_service.run_and_return(
254+
return scheduling_service.run_and_return(
256255
parameters=parameters,
257256
flow=self.prefect_flow,
258257
task_name=task_name,
@@ -261,7 +260,7 @@ def run_and_return(
261260
)
262261

263262
elif isinstance(scheduling_service.backend, (ServerBackend,)):
264-
scheduling_service.run_and_return(
263+
return scheduling_service.run_and_return(
265264
parameters=parameters,
266265
flow_id=self.flow_id,
267266
task_name=task_name,

0 commit comments

Comments
 (0)