SUNNY BHAVEEN CHANDRA commited on
Commit
1775293
0 Parent(s):

Initial commit

Browse files
.github/workflows/ci-cd.yml ADDED
@@ -0,0 +1 @@
 
 
1
+ # add ci-cd steps here
.gitignore ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ # Usually these files are written by a python script from a template
32
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
33
+ *.manifest
34
+ *.spec
35
+
36
+ # Installer logs
37
+ pip-log.txt
38
+ pip-delete-this-directory.txt
39
+
40
+ # Unit test / coverage reports
41
+ htmlcov/
42
+ .tox/
43
+ .nox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ *.py,cover
51
+ .hypothesis/
52
+ .pytest_cache/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ target/
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+
80
+ # IPython
81
+ profile_default/
82
+ ipython_config.py
83
+
84
+ # pyenv
85
+ .python-version
86
+
87
+ # pipenv
88
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
90
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
91
+ # install all needed dependencies.
92
+ #Pipfile.lock
93
+
94
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95
+ __pypackages__/
96
+
97
+ # Celery stuff
98
+ celerybeat-schedule
99
+ celerybeat.pid
100
+
101
+ # SageMath parsed files
102
+ *.sage.py
103
+
104
+ # Environments
105
+ .env
106
+ .venv
107
+ env/
108
+ venv/
109
+ ENV/
110
+ env.bak/
111
+ venv.bak/
112
+
113
+ # Spyder project settings
114
+ .spyderproject
115
+ .spyproject
116
+
117
+ # Rope project settings
118
+ .ropeproject
119
+
120
+ # mkdocs documentation
121
+ /site
122
+
123
+ # mypy
124
+ .mypy_cache/
125
+ .dmypy.json
126
+ dmypy.json
127
+
128
+ # Pyre type checker
129
+ .pyre/
130
+
131
+ # if using pycharm
132
+ .idea
133
+
134
+ # if using VScode
135
+ .vscode
136
+
137
+ # add secret keys or API keys here
138
+ configs/secrets.yaml
139
+
140
+ # add your env folder here if its there
141
+ mlruns/
142
+
143
+
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2021 SUNNY BHAVEEN CHANDRA
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
MLproject ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ name: MLflow-app
2
+
3
+ conda_env: conda.yaml
4
+
5
+ entry_points:
6
+ main:
7
+ command: "python main.py"
README.md ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MLflow-project-template
2
+ MLflow project template
3
+
4
+ ## STEPS -
5
+
6
+ ### STEP 01- Create a repository by using template repository
7
+
8
+ ### STEP 02- Clone the new repository
9
+
10
+ ### STEP 03- Create a conda environment after opening the repository in VSCODE
11
+
12
+ ```bash
13
+ conda create --prefix ./env python=3.7 -y
14
+ ```
15
+
16
+ ```bash
17
+ conda activate ./env
18
+ ```
19
+ OR
20
+ ```bash
21
+ source activate ./env
22
+ ```
23
+
24
+ ### STEP 04- install the requirements
25
+ ```bash
26
+ pip install -r requirements.txt
27
+ ```
28
+
29
+ ### STEP 05 - Create conda.yaml file -
30
+ ```bash
31
+ conda env export > conda.yaml
32
+ ```
33
+
34
+ ### STEP 06- commit and push the changes to the remote repository
configs/config.yaml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # It contains all the configs required in the project
2
+
3
+ artifacts:
4
+ ARTIFACTS_DIR: artifacts
5
+ TRAINED_MODEL_DIR: model
6
+ BASE_MODEL_DIR: base_model
7
+ BASE_MODEL_NAME: base_model.h5
8
+ UPDATED_BASE_MODEL_NAME: updated_base_model.h5
9
+ CHECKPOINT_DIR: checkpoints
10
+ BASE_LOG_DIR: base_model_dir
11
+ TENSORBOARD_ROOT_LOG_DIR: tensorboard_log_dir
12
+ CALLBACKS_DIR: callbacks
13
+
14
+ source_download_dirs:
15
+ - path_to_data_1
16
+ - path_to_data_1
17
+
18
+ local_data_dirs:
19
+ - path_to_local_data_1
20
+ - path_to_local_data_2
init_setup.sh ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ echo [$(date)]: "START"
2
+ export _VERSION_=3.7
3
+ echo [$(date)]: "creating environment with python ${_VERSION_}"
4
+ conda create --prefix ./env python=${_VERSION_} -y
5
+ echo [$(date)]: "activate environment"
6
+ source activate ./env
7
+ echo [$(date)]: "install requirements"
8
+ pip install -r requirements.txt
9
+ echo [$(date)]: "export conda environment"
10
+ conda env export > conda.yaml
11
+ echo [$(date)]: "END"
12
+
13
+ # to remove everything -
14
+ # rm -rf env/ .gitignore conda.yaml README.md .git/
15
+
logs/running_logs.log ADDED
File without changes
params.yaml ADDED
@@ -0,0 +1 @@
 
 
1
+ # This contains params to be used by the stages to train or predict
requirements.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ ### dependency
2
+ tqdm
3
+ mlflow
4
+ pandas
5
+ numpy
6
+ PyYAML
7
+
8
+ ### local packages -
9
+ # -e . # << uncomment this to install from setup.py
setup.py ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from setuptools import setup
2
+
3
+ with open("README.md", "r", encoding="utf-8") as f:
4
+ long_description = f.read()
5
+
6
+ ## edit below variables as per your requirements -
7
+ REPO_NAME = "MLflow-project-template"
8
+ AUTHOR_USER_NAME = "c17hawke"
9
+ SRC_REPO = "src"
10
+ LIST_OF_REQUIREMENTS = []
11
+
12
+
13
+ setup(
14
+ name=SRC_REPO,
15
+ version="0.0.1",
16
+ author=AUTHOR_USER_NAME,
17
+ description="A small package for MLflow app",
18
+ long_description=long_description,
19
+ long_description_content_type="text/markdown",
20
+ url=f"https://github.com/{AUTHOR_USER_NAME}/{REPO_NAME}",
21
+ author_email="[email protected]",
22
+ packages=[SRC_REPO],
23
+ license="MIT",
24
+ python_requires=">=3.6",
25
+ install_requires=LIST_OF_REQUIREMENTS
26
+ )
src/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+
src/stage_00_template.py ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import os
3
+ import shutil
4
+ from tqdm import tqdm
5
+ import logging
6
+ from src.utils.common import read_yaml, create_directories
7
+ import random
8
+
9
+
10
+ STAGE = "STAGE_NAME" ## <<< change stage name
11
+
12
+ logging.basicConfig(
13
+ filename=os.path.join("logs", 'running_logs.log'),
14
+ level=logging.INFO,
15
+ format="[%(asctime)s: %(levelname)s: %(module)s]: %(message)s",
16
+ filemode="a"
17
+ )
18
+
19
+
20
+ def main(config_path, params_path):
21
+ ## read config files
22
+ config = read_yaml(config_path)
23
+ params = read_yaml(params_path)
24
+ pass
25
+
26
+
27
+ if __name__ == '__main__':
28
+ args = argparse.ArgumentParser()
29
+ args.add_argument("--config", "-c", default="configs/config.yaml")
30
+ args.add_argument("--params", "-p", default="params.yaml")
31
+ parsed_args = args.parse_args()
32
+
33
+ try:
34
+ logging.info("\n********************")
35
+ logging.info(f">>>>> stage {STAGE} started <<<<<")
36
+ main(config_path=parsed_args.config, params_path=parsed_args.params)
37
+ logging.info(f">>>>> stage {STAGE} completed!<<<<<\n")
38
+ except Exception as e:
39
+ logging.exception(e)
40
+ raise e
src/utils/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+
src/utils/common.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import yaml
3
+ import logging
4
+ import time
5
+ import pandas as pd
6
+ import json
7
+
8
+ def read_yaml(path_to_yaml: str) -> dict:
9
+ with open(path_to_yaml) as yaml_file:
10
+ content = yaml.safe_load(yaml_file)
11
+ logging.info(f"yaml file: {path_to_yaml} loaded successfully")
12
+ return content
13
+
14
+ def create_directories(path_to_directories: list) -> None:
15
+ for path in path_to_directories:
16
+ os.makedirs(path, exist_ok=True)
17
+ logging.info(f"created directory at: {path}")
18
+
19
+
20
+ def save_json(path: str, data: dict) -> None:
21
+ with open(path, "w") as f:
22
+ json.dump(data, f, indent=4)
23
+
24
+ logging.info(f"json file saved at: {path}")