Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for Argo backend #19

Merged
merged 60 commits into from
Dec 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
47eda1c
add: subparser for argoize
Nilabhra Nov 10, 2022
828e6d5
add: Nikhil's changes.
Nilabhra Nov 10, 2022
5c72277
feat: generating workflow name using output file name.
Nilabhra Nov 10, 2022
c394308
feat: function to create Argo template from node.
Nilabhra Nov 10, 2022
09f1c1c
chore: added docstring.
Nilabhra Nov 10, 2022
e42223c
chore: added comments.
Nilabhra Nov 10, 2022
35cb1be
feat: setting the env vars before generation of the argo yaml.
Nilabhra Nov 10, 2022
0b35916
feat: function to generate NFS volume specs for K8s.
Nilabhra Nov 10, 2022
c1ff95a
feat: added support for mounting NFS volumes.
Nilabhra Nov 10, 2022
d579f24
fix: using absolute path for the NFS mount paths.
Nilabhra Nov 10, 2022
64396a3
fix: typo.
Nilabhra Nov 10, 2022
1a7c0a9
feat: function for generating Argo templates for PIRlib Graph objects.
Nilabhra Nov 10, 2022
b901d3b
chore: added comments.
Nilabhra Nov 10, 2022
6052ae4
feat: enabled creation of DAG tasks.
Nilabhra Nov 10, 2022
fcc6768
chore: added Argo specific refactoring.
Nilabhra Nov 10, 2022
6316c87
chore: refactored argo task names.
Nilabhra Nov 10, 2022
8a9b5fd
fix: files cannot be mounted as volumes in Argo/K8s.
Nilabhra Nov 10, 2022
95fd3dd
chore: removed redundant module.
Nilabhra Nov 10, 2022
d339da2
chore: debugging code.
Nilabhra Nov 10, 2022
1bc1cea
chore: optimized docker image generation.
Nilabhra Nov 10, 2022
99912ef
add: dockerignore file to prevent copying of unnecessary files.
Nilabhra Nov 10, 2022
d552227
fix: missing volume mount.
Nilabhra Nov 10, 2022
a1c26c9
chore: reverted to original formatting.
Nilabhra Nov 11, 2022
46b3ca1
chore: removed spurious code.
Nilabhra Nov 11, 2022
ee19634
chore: increased black linelength to 100.
Nilabhra Nov 11, 2022
31c542a
Multistep pipeline support for Argo (#1)
Nilabhra Nov 14, 2022
2a60ba2
fix: type annotation.
Nilabhra Nov 16, 2022
49d1000
add: WIP files for one step execution of the wiki_parse pipeline.
Nilabhra Nov 16, 2022
01d33ff
fix: type annotation.
Nilabhra Nov 17, 2022
557d82b
add: WIP files for one step execution of the wiki_parse pipeline.
Nilabhra Nov 16, 2022
332f345
feat: wiki_parse example running as a single step.
Nilabhra Nov 18, 2022
cd51aab
fix: merge conflicts.
Nilabhra Nov 18, 2022
5045d4d
feat: PIRlib pipeline for parsing the sample Wikipedia data.
Nilabhra Nov 22, 2022
8995742
chore: renamed input directory.
Nilabhra Nov 22, 2022
2b8c8f6
add: input files.
Nilabhra Nov 22, 2022
d695521
add: shell file to download the full dbpedia dump.
Nilabhra Nov 22, 2022
9ad7382
add: scripts to run the PIRlib pipeline on the entire dbpedia dump.
Nilabhra Nov 22, 2022
c9fce68
chore: code cleanup.
Nilabhra Nov 22, 2022
ead051c
chore: removed unneeded imports.
Nilabhra Nov 22, 2022
367330a
feat: enabled parallel downloading of Wikipedia dumps.
Nilabhra Nov 23, 2022
355d6c1
add: readme containing usage instructions.
Nilabhra Nov 23, 2022
4e64fa4
Merge pull request #2 from Nilabhra/forte-wiki-parser
Nilabhra Nov 23, 2022
f082adb
Revert "Forte `wiki_parser`"
Nilabhra Nov 23, 2022
7fa241f
Merge pull request #3 from Nilabhra/revert-2-forte-wiki-parser
Nilabhra Nov 23, 2022
66dea30
Merge pull request #4 from Nilabhra/forte
Nilabhra Nov 24, 2022
ce78767
Revert "add: `wiki_parser` example from Forte"
Nilabhra Nov 24, 2022
793c048
Merge pull request #5 from Nilabhra/revert-4-forte
Nilabhra Nov 24, 2022
f584c95
feat: raising exception if required env vars are not defined.
Nilabhra Nov 29, 2022
6dbb27a
chore: refactored inp_name to inp_id.
Nilabhra Nov 29, 2022
2f00467
chore: reformatted shell command.
Nilabhra Nov 29, 2022
333b4d2
chore: reverted to inclusion of setting PYTHONPATH in the image.
Nilabhra Dec 5, 2022
c17156a
feat: prepending env of python to .
Nilabhra Dec 5, 2022
1ad74fe
feat: changed base image to continuumio/miniconda3.
Nilabhra Dec 5, 2022
535fa13
add: generated YAML files.
Nilabhra Dec 5, 2022
c4510c8
chore: incoporated PR feedback.
Nilabhra Dec 5, 2022
d23ca89
fix: conflicts.
Nilabhra Dec 5, 2022
2d65765
add: Usage instructions.
Nilabhra Dec 5, 2022
679bbf1
Merge branch 'argo-multistep'
Nilabhra Dec 5, 2022
bc9d923
chore: added Argo example to the main README.rst.
Nilabhra Dec 7, 2022
99386f6
chore: updated documentation.
Nilabhra Dec 7, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*
!example/yaml
!example/*py
!bin
!pirlib
28 changes: 28 additions & 0 deletions docs/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,34 @@ workflow.
Open up ``example/run_docker.sh``, ``example/package_docker.yml``, and
``example/docker-compose.yml`` and see what's inside.

Running as an Argo Workflow
^^^^^^^^^^^^^^^^^^^^^^^^^^^
The following steps require and existing installations of Docker, Kubernetes and Argo.


In order for Argo to have access to the docker images, a docker registry needs to be configured. Currently the `dockerize` module uses Docker Hub as the docker registry and only supports public repositories. Follow the following steps to configure Docker Hub:

::

$ docker login
$ export DOCKER_USER=<username>
$ export PIRLIB_REPO=<reponame>

Please ensure that the repository already exists under the user name in Docker Hub


Follow the instructions `here <https://argoproj.github.io/argo-workflows/quick-start/>`_ and navigate your browser to ``https://127.0.0.1:2746``.

Finally, execute the example.
::

bash example/run_argo.sh


You should be able to see the live execution of the different steps of the pipeline in the browser.
Open up ``example/package_argo.yml``, ``argo-train.yml`` and see what's inside.


.. include-end-before

TODOs
Expand Down
206 changes: 206 additions & 0 deletions example/argo-train.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: argo-train-
spec:
entrypoint: DAG-train-pipeline
templates:
- name: clean-template
container:
image: nilabhra/pirlib
command:
- python
- -m
- pirlib.backends.argo_batch
- node
- gASVOQIAAAAAAACMCnBpcmxpYi5waXKUjAROb2RllJOUKYGUfZQojAJpZJSMBWNsZWFulIwLZW50cnlwb2ludHOUfZSMBG1haW6UaACMCkVudHJ5cG9pbnSUk5QpgZR9lCiMB3ZlcnNpb26UjAJ2MZSMB2hhbmRsZXKUjBVleGFtcGxlLmV4YW1wbGU6Y2xlYW6UjAdydW50aW1llIwKcHl0aG9uOjMuOJSMB2NvZGV1cmyUTowFaW1hZ2WUjA9uaWxhYmhyYS9waXJsaWKUdWJzjAlmcmFtZXdvcmuUTowGY29uZmlnlH2UjAZpbnB1dHOUXZRoAIwFSW5wdXSUk5QpgZR9lChoBYwHZGF0YXNldJSMBmlvdHlwZZSMCURJUkVDVE9SWZSMBnNvdXJjZZRoAIwKRGF0YVNvdXJjZZSTlCmBlH2UKIwHbm9kZV9pZJROjAtzdWJncmFwaF9pZJROjAlvdXRwdXRfaWSUTowOZ3JhcGhfaW5wdXRfaWSUjA10cmFpbl9kYXRhc2V0lHVijARtZXRhlGgAjAhNZXRhZGF0YZSTlCmBlH2UKIwEbmFtZZSMB2RhdGFzZXSUjAthbm5vdGF0aW9uc5ROdWJ1YmGMB291dHB1dHOUXZRoAIwGT3V0cHV0lJOUKYGUfZQoaAWMBnJldHVybpRoIYwJRElSRUNUT1JZlGgtaC8pgZR9lChoMowGcmV0dXJulGg0TnVidWJhaC1oLymBlH2UKGgyjAVjbGVhbpRoNE51YnViLg==
- gASVJAEAAAAAAABdlCiMCnBpcmxpYi5waXKUjApHcmFwaElucHV0lJOUKYGUfZQojAJpZJSMDXRyYWluX2RhdGFzZXSUjAZpb3R5cGWUjAlESVJFQ1RPUlmUjARtZXRhlGgBjAhNZXRhZGF0YZSTlCmBlH2UKIwEbmFtZZSMDXRyYWluX2RhdGFzZXSUjAthbm5vdGF0aW9uc5ROdWJ1YmgDKYGUfZQoaAaMD3RyYW5zbGF0ZV9tb2RlbJRoCIwERklMRZRoCmgMKYGUfZQoaA+MD3RyYW5zbGF0ZV9tb2RlbJRoEU51YnViaAMpgZR9lChoBowJc2VudGVuY2VzlGgIjAlESVJFQ1RPUlmUaApoDCmBlH2UKGgPjAlzZW50ZW5jZXOUaBFOdWJ1YmUu
volumeMounts:
- name: node-outputs
mountPath: /mnt/node_outputs
- name: train-dataset
mountPath: /mnt/graph_inputs/train_dataset
volumes:
- name: node-outputs
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/outputs
readOnly: no
- name: train-dataset
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/inputs/train_dataset
readOnly: yes
- name: train-template
container:
image: nilabhra/pirlib
command:
- python
- -m
- pirlib.backends.argo_batch
- node
- gASVkQIAAAAAAACMCnBpcmxpYi5waXKUjAROb2RllJOUKYGUfZQojAJpZJSMBXRyYWlulIwLZW50cnlwb2ludHOUfZSMBG1haW6UaACMCkVudHJ5cG9pbnSUk5QpgZR9lCiMB3ZlcnNpb26UjAJ2MZSMB2hhbmRsZXKUjBVleGFtcGxlLmV4YW1wbGU6dHJhaW6UjAdydW50aW1llIwKcHl0aG9uOjMuOJSMB2NvZGV1cmyUTowFaW1hZ2WUjA9uaWxhYmhyYS9waXJsaWKUdWJzjAlmcmFtZXdvcmuUaACMCUZyYW1ld29ya5STlCmBlH2UKIwEbmFtZZSMB2FkYXB0ZGyUaA5OjAZjb25maWeUTnViaB59lCiMFGFkYXB0ZGwvbWluX3JlcGxpY2FzlEsBjBRhZGFwdGRsL21heF9yZXBsaWNhc5RLBHWMBmlucHV0c5RdlGgAjAVJbnB1dJSTlCmBlH2UKGgFjAdkYXRhc2V0lIwGaW90eXBllIwJRElSRUNUT1JZlIwGc291cmNllGgAjApEYXRhU291cmNllJOUKYGUfZQojAdub2RlX2lklIwFY2xlYW6UjAtzdWJncmFwaF9pZJROjAlvdXRwdXRfaWSUjAZyZXR1cm6UjA5ncmFwaF9pbnB1dF9pZJROdWKMBG1ldGGUaACMCE1ldGFkYXRhlJOUKYGUfZQoaByMB2RhdGFzZXSUjAthbm5vdGF0aW9uc5ROdWJ1YmGMB291dHB1dHOUXZRoAIwGT3V0cHV0lJOUKYGUfZQoaAWMBnJldHVybpRoKYwERklMRZRoNmg4KYGUfZQoaByMBnJldHVybpRoPE51YnViYWg2aDgpgZR9lChoHIwFdHJhaW6UaDxOdWJ1Yi4=
- gASVJAEAAAAAAABdlCiMCnBpcmxpYi5waXKUjApHcmFwaElucHV0lJOUKYGUfZQojAJpZJSMDXRyYWluX2RhdGFzZXSUjAZpb3R5cGWUjAlESVJFQ1RPUlmUjARtZXRhlGgBjAhNZXRhZGF0YZSTlCmBlH2UKIwEbmFtZZSMDXRyYWluX2RhdGFzZXSUjAthbm5vdGF0aW9uc5ROdWJ1YmgDKYGUfZQoaAaMD3RyYW5zbGF0ZV9tb2RlbJRoCIwERklMRZRoCmgMKYGUfZQoaA+MD3RyYW5zbGF0ZV9tb2RlbJRoEU51YnViaAMpgZR9lChoBowJc2VudGVuY2VzlGgIjAlESVJFQ1RPUlmUaApoDCmBlH2UKGgPjAlzZW50ZW5jZXOUaBFOdWJ1YmUu
volumeMounts:
- name: node-outputs
mountPath: /mnt/node_outputs
volumes:
- name: node-outputs
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/outputs
readOnly: no
- name: evaluate-template
container:
image: nilabhra/pirlib
command:
- python
- -m
- pirlib.backends.argo_batch
- node
- gASV5gIAAAAAAACMCnBpcmxpYi5waXKUjAROb2RllJOUKYGUfZQojAJpZJSMCGV2YWx1YXRllIwLZW50cnlwb2ludHOUfZSMBG1haW6UaACMCkVudHJ5cG9pbnSUk5QpgZR9lCiMB3ZlcnNpb26UjAJ2MZSMB2hhbmRsZXKUjBhleGFtcGxlLmV4YW1wbGU6ZXZhbHVhdGWUjAdydW50aW1llIwKcHl0aG9uOjMuOJSMB2NvZGV1cmyUTowFaW1hZ2WUjA9uaWxhYmhyYS9waXJsaWKUdWJzjAlmcmFtZXdvcmuUTowGY29uZmlnlH2UjAZpbnB1dHOUXZQoaACMBUlucHV0lJOUKYGUfZQoaAWME2t3YXJncy50ZXN0X2RhdGFzZXSUjAZpb3R5cGWUjAlESVJFQ1RPUlmUjAZzb3VyY2WUaACMCkRhdGFTb3VyY2WUk5QpgZR9lCiMB25vZGVfaWSUTowLc3ViZ3JhcGhfaWSUTowJb3V0cHV0X2lklE6MDmdyYXBoX2lucHV0X2lklIwJc2VudGVuY2VzlHVijARtZXRhlGgAjAhNZXRhZGF0YZSTlCmBlH2UKIwEbmFtZZSME2t3YXJncy50ZXN0X2RhdGFzZXSUjAthbm5vdGF0aW9uc5ROdWJ1YmgdKYGUfZQoaAWMEmt3YXJncy5wcmVkaWN0aW9uc5RoIYwJRElSRUNUT1JZlGgjaCUpgZR9lChoKIwYaW5mZXJfcGlwZWxpbmUuc2VudGltZW50lGgpTmgqjAZyZXR1cm6UaCtOdWJoLWgvKYGUfZQoaDKMEmt3YXJncy5wcmVkaWN0aW9uc5RoNE51YnViZYwHb3V0cHV0c5RdlGgAjAZPdXRwdXSUk5QpgZR9lChoBYwGcmV0dXJulGghjAlEQVRBRlJBTUWUaC1oLymBlH2UKGgyjAZyZXR1cm6UaDROdWJ1YmFoLWgvKYGUfZQoaDKMCGV2YWx1YXRllGg0TnVidWIu
- gASVJAEAAAAAAABdlCiMCnBpcmxpYi5waXKUjApHcmFwaElucHV0lJOUKYGUfZQojAJpZJSMDXRyYWluX2RhdGFzZXSUjAZpb3R5cGWUjAlESVJFQ1RPUlmUjARtZXRhlGgBjAhNZXRhZGF0YZSTlCmBlH2UKIwEbmFtZZSMDXRyYWluX2RhdGFzZXSUjAthbm5vdGF0aW9uc5ROdWJ1YmgDKYGUfZQoaAaMD3RyYW5zbGF0ZV9tb2RlbJRoCIwERklMRZRoCmgMKYGUfZQoaA+MD3RyYW5zbGF0ZV9tb2RlbJRoEU51YnViaAMpgZR9lChoBowJc2VudGVuY2VzlGgIjAlESVJFQ1RPUlmUaApoDCmBlH2UKGgPjAlzZW50ZW5jZXOUaBFOdWJ1YmUu
volumeMounts:
- name: node-outputs
mountPath: /mnt/node_outputs
- name: sentences
mountPath: /mnt/graph_inputs/sentences
volumes:
- name: node-outputs
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/outputs
readOnly: no
- name: sentences
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/inputs/sentences
readOnly: yes
- name: infer-pipeline-translate-1-template
container:
image: nilabhra/pirlib
command:
- python
- -m
- pirlib.backends.argo_batch
- node
- gASVwwIAAAAAAACMCnBpcmxpYi5waXKUjAROb2RllJOUKYGUfZQojAJpZJSMGmluZmVyX3BpcGVsaW5lLnRyYW5zbGF0ZV8xlIwLZW50cnlwb2ludHOUfZSMBG1haW6UaACMCkVudHJ5cG9pbnSUk5QpgZR9lCiMB3ZlcnNpb26UjAJ2MZSMB2hhbmRsZXKUjBlleGFtcGxlLmV4YW1wbGU6dHJhbnNsYXRllIwHcnVudGltZZSMCnB5dGhvbjozLjiUjAdjb2RldXJslE6MBWltYWdllIwPbmlsYWJocmEvcGlybGlilHVic4wJZnJhbWV3b3JrlE6MBmNvbmZpZ5R9lIwDa2V5lIwFdmFsdWWUc4wGaW5wdXRzlF2UKGgAjAVJbnB1dJSTlCmBlH2UKGgFjAZhcmdzLjCUjAZpb3R5cGWUjARGSUxFlIwGc291cmNllGgAjApEYXRhU291cmNllJOUKYGUfZQojAdub2RlX2lklE6MC3N1YmdyYXBoX2lklE6MCW91dHB1dF9pZJROjA5ncmFwaF9pbnB1dF9pZJSMD3RyYW5zbGF0ZV9tb2RlbJR1YowEbWV0YZRoAIwITWV0YWRhdGGUk5QpgZR9lCiMBG5hbWWUjAZhcmdzLjCUjAthbm5vdGF0aW9uc5ROdWJ1YmgfKYGUfZQoaAWMBmFyZ3MuMZRoI4wJRElSRUNUT1JZlGglaCcpgZR9lChoKk5oK05oLE5oLYwJc2VudGVuY2VzlHViaC9oMSmBlH2UKGg0jAZhcmdzLjGUaDZOdWJ1YmWMB291dHB1dHOUXZRoAIwGT3V0cHV0lJOUKYGUfZQoaAWMBnJldHVybpRoI4wJRElSRUNUT1JZlGgvaDEpgZR9lChoNIwGcmV0dXJulGg2TnVidWJhaC9oMSmBlH2UKGg0jAt0cmFuc2xhdGVfMZRoNk51YnViLg==
- gASVJAEAAAAAAABdlCiMCnBpcmxpYi5waXKUjApHcmFwaElucHV0lJOUKYGUfZQojAJpZJSMDXRyYWluX2RhdGFzZXSUjAZpb3R5cGWUjAlESVJFQ1RPUlmUjARtZXRhlGgBjAhNZXRhZGF0YZSTlCmBlH2UKIwEbmFtZZSMDXRyYWluX2RhdGFzZXSUjAthbm5vdGF0aW9uc5ROdWJ1YmgDKYGUfZQoaAaMD3RyYW5zbGF0ZV9tb2RlbJRoCIwERklMRZRoCmgMKYGUfZQoaA+MD3RyYW5zbGF0ZV9tb2RlbJRoEU51YnViaAMpgZR9lChoBowJc2VudGVuY2VzlGgIjAlESVJFQ1RPUlmUaApoDCmBlH2UKGgPjAlzZW50ZW5jZXOUaBFOdWJ1YmUu
volumeMounts:
- name: node-outputs
mountPath: /mnt/node_outputs
- name: translate-model
mountPath: /mnt/graph_inputs/translate_model
- name: sentences
mountPath: /mnt/graph_inputs/sentences
volumes:
- name: node-outputs
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/outputs
readOnly: no
- name: translate-model
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/inputs/
readOnly: yes
- name: sentences
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/inputs/sentences
readOnly: yes
- name: infer-pipeline-sentiment-template
container:
image: nilabhra/pirlib
command:
- python
- -m
- pirlib.backends.argo_batch
- node
- gASVywIAAAAAAACMCnBpcmxpYi5waXKUjAROb2RllJOUKYGUfZQojAJpZJSMGGluZmVyX3BpcGVsaW5lLnNlbnRpbWVudJSMC2VudHJ5cG9pbnRzlH2UjARtYWlulGgAjApFbnRyeXBvaW50lJOUKYGUfZQojAd2ZXJzaW9ulIwCdjGUjAdoYW5kbGVylIwZZXhhbXBsZS5leGFtcGxlOnNlbnRpbWVudJSMB3J1bnRpbWWUjApweXRob246My44lIwHY29kZXVybJROjAVpbWFnZZSMD25pbGFiaHJhL3BpcmxpYpR1YnOMCWZyYW1ld29ya5ROjAZjb25maWeUfZSMBmlucHV0c5RdlChoAIwFSW5wdXSUk5QpgZR9lChoBYwFbW9kZWyUjAZpb3R5cGWUjARGSUxFlIwGc291cmNllGgAjApEYXRhU291cmNllJOUKYGUfZQojAdub2RlX2lklIwFdHJhaW6UjAtzdWJncmFwaF9pZJROjAlvdXRwdXRfaWSUjAZyZXR1cm6UjA5ncmFwaF9pbnB1dF9pZJROdWKMBG1ldGGUaACMCE1ldGFkYXRhlJOUKYGUfZQojARuYW1llIwFbW9kZWyUjAthbm5vdGF0aW9uc5ROdWJ1YmgdKYGUfZQoaAWMCXNlbnRlbmNlc5RoIYwJRElSRUNUT1JZlGgjaCUpgZR9lChoKIwaaW5mZXJfcGlwZWxpbmUudHJhbnNsYXRlXzGUaCpOaCuMBnJldHVybpRoLU51YmguaDApgZR9lChoM4wJc2VudGVuY2VzlGg1TnVidWJljAdvdXRwdXRzlF2UaACMBk91dHB1dJSTlCmBlH2UKGgFjAZyZXR1cm6UaCGMCURJUkVDVE9SWZRoLmgwKYGUfZQoaDOMBnJldHVybpRoNU51YnViYWguaDApgZR9lChoM4wJc2VudGltZW50lGg1TnVidWIu
- gASVJAEAAAAAAABdlCiMCnBpcmxpYi5waXKUjApHcmFwaElucHV0lJOUKYGUfZQojAJpZJSMDXRyYWluX2RhdGFzZXSUjAZpb3R5cGWUjAlESVJFQ1RPUlmUjARtZXRhlGgBjAhNZXRhZGF0YZSTlCmBlH2UKIwEbmFtZZSMDXRyYWluX2RhdGFzZXSUjAthbm5vdGF0aW9uc5ROdWJ1YmgDKYGUfZQoaAaMD3RyYW5zbGF0ZV9tb2RlbJRoCIwERklMRZRoCmgMKYGUfZQoaA+MD3RyYW5zbGF0ZV9tb2RlbJRoEU51YnViaAMpgZR9lChoBowJc2VudGVuY2VzlGgIjAlESVJFQ1RPUlmUaApoDCmBlH2UKGgPjAlzZW50ZW5jZXOUaBFOdWJ1YmUu
volumeMounts:
- name: node-outputs
mountPath: /mnt/node_outputs
volumes:
- name: node-outputs
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/outputs
readOnly: no
- name: train-pipeline-template
container:
image: nilabhra/pirlib
command:
- python
- -m
- pirlib.backends.argo_batch
- graph
- gASVXgEAAAAAAABdlCiMCnBpcmxpYi5waXKUjAtHcmFwaE91dHB1dJSTlCmBlH2UKIwCaWSUjAhyZXR1cm4uMJSMBmlvdHlwZZSMBEZJTEWUjAZzb3VyY2WUaAGMCkRhdGFTb3VyY2WUk5QpgZR9lCiMB25vZGVfaWSUjAV0cmFpbpSMC3N1YmdyYXBoX2lklE6MCW91dHB1dF9pZJSMBnJldHVybpSMDmdyYXBoX2lucHV0X2lklE51YowEbWV0YZRoAYwITWV0YWRhdGGUk5QpgZR9lCiMBG5hbWWUjAhyZXR1cm4uMJSMC2Fubm90YXRpb25zlE51YnViaAMpgZR9lChoBowIcmV0dXJuLjGUaAiMCURBVEFGUkFNRZRoCmgMKYGUfZQoaA+MCGV2YWx1YXRllGgRTmgSjAZyZXR1cm6UaBROdWJoFWgXKYGUfZQoaBqMCHJldHVybi4xlGgcTnVidWJlLg==
volumeMounts:
- name: node-outputs
mountPath: /mnt/node_outputs
- name: train-dataset
mountPath: /mnt/graph_inputs/train_dataset
- name: translate-model
mountPath: /mnt/graph_inputs/translate_model
- name: sentences
mountPath: /mnt/graph_inputs/sentences
- name: graph-outputs
mountPath: /mnt/graph_outputs
volumes:
- name: node-outputs
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/outputs
readOnly: no
- name: train-dataset
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/inputs/train_dataset
readOnly: yes
- name: translate-model
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/inputs/
readOnly: yes
- name: sentences
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/inputs/sentences
readOnly: yes
- name: graph-outputs
nfs:
server: k8s-master.cm.cluster
path: /home/xxxx/pirlib/example/outputs
readOnly: no
- name: DAG-train-pipeline
dag:
tasks:
- name: clean
template: clean-template
dependencies: []
- name: train
template: train-template
dependencies:
- clean
- name: evaluate
template: evaluate-template
dependencies:
- infer-pipeline-sentiment
- name: infer-pipeline-translate-1
template: infer-pipeline-translate-1-template
dependencies: []
- name: infer-pipeline-sentiment
template: infer-pipeline-sentiment-template
dependencies:
- train
- infer-pipeline-translate-1
- name: train-pipeline
template: train-pipeline-template
dependencies:
- clean
- train
- evaluate
- infer-pipeline-translate-1
- infer-pipeline-sentiment
33 changes: 16 additions & 17 deletions example/example.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import pandas
import tempfile
import yaml
from dataclasses import asdict
from typing import Tuple, TypedDict

import pandas
import yaml

from pirlib.frameworks.adaptdl import AdaptDL
from pirlib.iotypes import DirectoryPath, FilePath
from pirlib.task import task
from pirlib.pipeline import pipeline
from pirlib.task import task


@task
Expand Down Expand Up @@ -48,14 +49,13 @@ def evaluate(kwargs: EvaluateInput) -> pandas.DataFrame:

@task
def translate(args: Tuple[FilePath, DirectoryPath]) -> DirectoryPath:
model, sentences = args
model_dir, sentences = args
task_ctx = task.context()
with open(model) as f, open(sentences / "file.txt") as g:
with open(model_dir / "translate_model.txt") as f, open(sentences / "file.txt") as g:
print(
"translate({}, {}, config={})".format(
f.read().strip(),
g.read().strip(),
task_ctx.config)
f.read().strip(), g.read().strip(), task_ctx.config
)
)
outdir = task_ctx.output
with open(outdir / "file.txt", "w") as f:
Expand All @@ -74,19 +74,18 @@ def sentiment(model: FilePath, sentences: DirectoryPath) -> DirectoryPath:


@pipeline
def infer_pipeline(translate_model: FilePath,
sentiment_model: FilePath,
sentences: DirectoryPath) -> DirectoryPath:
def infer_pipeline(
translate_model: FilePath, sentiment_model: FilePath, sentences: DirectoryPath
) -> DirectoryPath:
translate_1 = translate.instance("translate_1")
translate_1.config["key"] = "value"
return sentiment(sentiment_model, translate_1((translate_model, sentences)))


@pipeline
def train_pipeline(
train_dataset: DirectoryPath,
translate_model: FilePath,
sentences: DirectoryPath) -> Tuple[FilePath, pandas.DataFrame]:
train_dataset: DirectoryPath, translate_model: FilePath, sentences: DirectoryPath
) -> Tuple[FilePath, pandas.DataFrame]:
sentiment_model = train(clean(train_dataset))
sentiment = infer_pipeline(translate_model, sentiment_model, sentences)
eval_input = {"test_dataset": sentences, "predictions": sentiment}
Expand All @@ -107,9 +106,9 @@ def train_pipeline(
with open(f"{dir_3.name}/file.txt", "w") as f:
f.write("sentences")
# Test calling end-to-end pipeline.
model_path, metrics = train_pipeline(DirectoryPath(dir_1.name),
FilePath(file_2.name),
DirectoryPath(dir_3.name))
model_path, metrics = train_pipeline(
DirectoryPath(dir_1.name), FilePath(file_2.name), DirectoryPath(dir_3.name)
)
with open(model_path) as f:
print("pipeline model: {}".format(f.read().strip()))
print("pipeline metrics: {}".format(metrics.to_records()))
Expand Down
Loading