From 0327ebf1f453a61e0de1c392ce8d85b38f67e3ab Mon Sep 17 00:00:00 2001 From: deng Date: Wed, 1 Mar 2023 14:55:51 +0800 Subject: [PATCH] mod service file structure --- .../artifacts/model/MLmodel | 16 --- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3987 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/cls_model/MLmodel | 16 --- .../artifacts/cls_model/conda.yaml | 10 -- .../artifacts/cls_model/data/model.pth | Bin 3923 -> 0 bytes .../cls_model/data/pickle_module_info.txt | 1 - .../artifacts/cls_model/python_env.yaml | 7 -- .../artifacts/cls_model/requirements.txt | 3 - .../artifacts/models/MLmodel | 16 --- .../artifacts/models/conda.yaml | 10 -- .../artifacts/models/data/model.pth | Bin 3923 -> 0 bytes .../models/data/pickle_module_info.txt | 1 - .../artifacts/models/python_env.yaml | 7 -- .../artifacts/models/requirements.txt | 3 - .../artifacts/code/train.py | 82 --------------- .../artifacts/model/MLmodel | 16 --- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3987 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/cls_model/MLmodel | 16 --- .../artifacts/cls_model/conda.yaml | 10 -- .../artifacts/cls_model/data/model.pth | Bin 3923 -> 0 bytes .../cls_model/data/pickle_module_info.txt | 1 - .../artifacts/cls_model/python_env.yaml | 7 -- .../artifacts/cls_model/requirements.txt | 3 - .../artifacts/models/MLmodel | 16 --- .../artifacts/models/conda.yaml | 10 -- .../artifacts/models/data/model.pth | Bin 3923 -> 0 bytes .../models/data/pickle_module_info.txt | 1 - .../artifacts/models/python_env.yaml | 7 -- .../artifacts/models/requirements.txt | 3 - .../artifacts/models/MLmodel | 16 --- .../artifacts/models/conda.yaml | 10 -- .../artifacts/models/data/model.pth | Bin 3923 -> 0 bytes .../models/data/pickle_module_info.txt | 1 - .../artifacts/models/python_env.yaml | 7 -- .../artifacts/models/requirements.txt | 3 - .../artifacts/models/MLmodel | 16 --- .../artifacts/models/conda.yaml | 10 -- .../artifacts/models/data/model.pth | Bin 3923 -> 0 bytes .../models/data/pickle_module_info.txt | 1 - .../artifacts/models/python_env.yaml | 7 -- .../artifacts/models/requirements.txt | 3 - .../artifacts/model/MLmodel | 16 --- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3987 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/train.py | 82 --------------- .../artifacts/cls_model/MLmodel | 16 --- .../artifacts/cls_model/conda.yaml | 10 -- .../artifacts/cls_model/data/model.pth | Bin 3923 -> 0 bytes .../cls_model/data/pickle_module_info.txt | 1 - .../artifacts/cls_model/python_env.yaml | 7 -- .../artifacts/cls_model/requirements.txt | 3 - .../artifacts/code/train.py | 83 --------------- .../artifacts/model/MLmodel | 16 --- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3987 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 83 --------------- .../artifacts/model/MLmodel | 16 --- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3987 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 83 --------------- .../artifacts/model/MLmodel | 16 --- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3987 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 83 --------------- .../artifacts/model/MLmodel | 16 --- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3987 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 83 --------------- .../artifacts/model/MLmodel | 16 --- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3987 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 98 ------------------ .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 83 --------------- .../artifacts/model/MLmodel | 16 --- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3987 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 98 ------------------ .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 98 ------------------ .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 96 ----------------- .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 83 --------------- .../artifacts/model/MLmodel | 16 --- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3987 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 96 ----------------- .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 96 ----------------- .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 96 ----------------- .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 96 ----------------- .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 98 ------------------ .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 96 ----------------- .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - .../artifacts/code/train.py | 96 ----------------- .../artifacts/model/MLmodel | 21 ---- .../artifacts/model/conda.yaml | 11 -- .../artifacts/model/data/model.pth | Bin 3795 -> 0 bytes .../model/data/pickle_module_info.txt | 1 - .../artifacts/model/python_env.yaml | 7 -- .../artifacts/model/requirements.txt | 4 - mlflow.db | Bin 978944 -> 0 bytes service/backend.db | Bin 0 -> 135168 bytes service/registry.db | Bin 0 -> 118784 bytes start_mlflow_server.sh | 2 +- 192 files changed, 1 insertion(+), 2943 deletions(-) delete mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/MLmodel delete mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/conda.yaml delete mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/model.pth delete mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/python_env.yaml delete mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/requirements.txt delete mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/MLmodel delete mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/conda.yaml delete mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/data/model.pth delete mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/data/pickle_module_info.txt delete mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/python_env.yaml delete mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/requirements.txt delete mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/MLmodel delete mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/conda.yaml delete mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/data/model.pth delete mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/data/pickle_module_info.txt delete mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/python_env.yaml delete mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/requirements.txt delete mode 100644 artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/code/train.py delete mode 100644 artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/MLmodel delete mode 100644 artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/conda.yaml delete mode 100644 artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/data/model.pth delete mode 100644 artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/python_env.yaml delete mode 100644 artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/requirements.txt delete mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/MLmodel delete mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/conda.yaml delete mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/data/model.pth delete mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/data/pickle_module_info.txt delete mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/python_env.yaml delete mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/requirements.txt delete mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/MLmodel delete mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/conda.yaml delete mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/data/model.pth delete mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/data/pickle_module_info.txt delete mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/python_env.yaml delete mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/requirements.txt delete mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/MLmodel delete mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/conda.yaml delete mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/data/model.pth delete mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/data/pickle_module_info.txt delete mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/python_env.yaml delete mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/requirements.txt delete mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/MLmodel delete mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/conda.yaml delete mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/model.pth delete mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/pickle_module_info.txt delete mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/python_env.yaml delete mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/requirements.txt delete mode 100644 artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/MLmodel delete mode 100644 artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/conda.yaml delete mode 100644 artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/data/model.pth delete mode 100644 artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/python_env.yaml delete mode 100644 artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/requirements.txt delete mode 100644 artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/train.py delete mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/MLmodel delete mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/conda.yaml delete mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/data/model.pth delete mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/data/pickle_module_info.txt delete mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/python_env.yaml delete mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/requirements.txt delete mode 100644 artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/code/train.py delete mode 100644 artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/MLmodel delete mode 100644 artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/conda.yaml delete mode 100644 artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/data/model.pth delete mode 100644 artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/python_env.yaml delete mode 100644 artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/requirements.txt delete mode 100644 artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/code/train.py delete mode 100644 artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/MLmodel delete mode 100644 artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/conda.yaml delete mode 100644 artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/data/model.pth delete mode 100644 artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/python_env.yaml delete mode 100644 artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/requirements.txt delete mode 100644 artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/code/train.py delete mode 100644 artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/MLmodel delete mode 100644 artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/conda.yaml delete mode 100644 artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/data/model.pth delete mode 100644 artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/python_env.yaml delete mode 100644 artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/requirements.txt delete mode 100644 artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/code/train.py delete mode 100644 artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/MLmodel delete mode 100644 artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/conda.yaml delete mode 100644 artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/data/model.pth delete mode 100644 artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/python_env.yaml delete mode 100644 artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/requirements.txt delete mode 100644 artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/code/train.py delete mode 100644 artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/MLmodel delete mode 100644 artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/conda.yaml delete mode 100644 artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/data/model.pth delete mode 100644 artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/requirements.txt delete mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/code/train.py delete mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/MLmodel delete mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/conda.yaml delete mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/model.pth delete mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/requirements.txt delete mode 100644 artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/code/train.py delete mode 100644 artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/MLmodel delete mode 100644 artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/conda.yaml delete mode 100644 artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/data/model.pth delete mode 100644 artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/requirements.txt delete mode 100644 artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/code/train.py delete mode 100644 artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/MLmodel delete mode 100644 artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/conda.yaml delete mode 100644 artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/data/model.pth delete mode 100644 artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/requirements.txt delete mode 100644 artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/code/train.py delete mode 100644 artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/MLmodel delete mode 100644 artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/conda.yaml delete mode 100644 artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/data/model.pth delete mode 100644 artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/requirements.txt delete mode 100644 artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/code/train.py delete mode 100644 artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/MLmodel delete mode 100644 artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/conda.yaml delete mode 100644 artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/data/model.pth delete mode 100644 artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/requirements.txt delete mode 100644 artifacts/3/80447ac20c814d10a470208e303ea0ec/artifacts/code/train.py delete mode 100644 artifacts/3/80447ac20c814d10a470208e303ea0ec/artifacts/model/MLmodel delete mode 100644 artifacts/3/80447ac20c814d10a470208e303ea0ec/artifacts/model/conda.yaml delete mode 100644 artifacts/3/80447ac20c814d10a470208e303ea0ec/artifacts/model/data/model.pth delete mode 100644 artifacts/3/80447ac20c814d10a470208e303ea0ec/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/80447ac20c814d10a470208e303ea0ec/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/80447ac20c814d10a470208e303ea0ec/artifacts/model/requirements.txt delete mode 100644 artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/code/train.py delete mode 100644 artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/MLmodel delete mode 100644 artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/conda.yaml delete mode 100644 artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/data/model.pth delete mode 100644 artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/requirements.txt delete mode 100644 artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/code/train.py delete mode 100644 artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/MLmodel delete mode 100644 artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/conda.yaml delete mode 100644 artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/data/model.pth delete mode 100644 artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/requirements.txt delete mode 100644 artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/code/train.py delete mode 100644 artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/MLmodel delete mode 100644 artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/conda.yaml delete mode 100644 artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/data/model.pth delete mode 100644 artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/requirements.txt delete mode 100644 artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/code/train.py delete mode 100644 artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/MLmodel delete mode 100644 artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/conda.yaml delete mode 100644 artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/data/model.pth delete mode 100644 artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/requirements.txt delete mode 100644 artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/code/train.py delete mode 100644 artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/MLmodel delete mode 100644 artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/conda.yaml delete mode 100644 artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/data/model.pth delete mode 100644 artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/requirements.txt delete mode 100644 artifacts/3/c362618cffca44f69a4afabcd45defd7/artifacts/code/train.py delete mode 100644 artifacts/3/c362618cffca44f69a4afabcd45defd7/artifacts/model/MLmodel delete mode 100644 artifacts/3/c362618cffca44f69a4afabcd45defd7/artifacts/model/conda.yaml delete mode 100644 artifacts/3/c362618cffca44f69a4afabcd45defd7/artifacts/model/data/model.pth delete mode 100644 artifacts/3/c362618cffca44f69a4afabcd45defd7/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/c362618cffca44f69a4afabcd45defd7/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/c362618cffca44f69a4afabcd45defd7/artifacts/model/requirements.txt delete mode 100644 artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/code/train.py delete mode 100644 artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/MLmodel delete mode 100644 artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/conda.yaml delete mode 100644 artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/data/model.pth delete mode 100644 artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/data/pickle_module_info.txt delete mode 100644 artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/python_env.yaml delete mode 100644 artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/requirements.txt delete mode 100644 mlflow.db create mode 100644 service/backend.db create mode 100644 service/registry.db diff --git a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/MLmodel b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/MLmodel deleted file mode 100644 index 485433f..0000000 --- a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 2382b7a39c064e7b9b1465cfd84140a3 -run_id: 24469fc083d6470a9cad7f17a6eeeea0 -utc_time_created: '2023-02-21 05:57:41.973454' diff --git a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/conda.yaml b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/model.pth b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/model.pth deleted file mode 100644 index 6fd0894419065de9229e86c8419ca28e6661b2f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3987 zcmbtXeUKEz72nxo?_huf5hQ|vLx?O2_q7LtuxmWbkz{l^2G9{gCbKiM*Xz#B?Az(# zxX1=kb^(I{6Gc%`2$%#yfS7<7?l$ohf@mO6YRP}8e3VtGN~}tyl4#|RyzZIf_KrHL zsPxvQas3f=3gv0Ar%0 zn$##Y+^^waTrgI-1ABFbna z!>u7eGVR$q%{aCQMHbN^yaEnrn zx|W8?ZGy=q_<{_#Mw5~#MI?d3l&BKHY1hk{d6-JVWSkPlzHP&8T<-w{P0Pa9aD$QBYS!2AL%h?04T>lnUZ@H8t};oW=)ORQd11Hvs-#&IdlwjHE3 zQp?4aFDk%2N-dwrb|H~9&!TL6aWXJkF}5VhDu9el1^{9CyI!8fA0IA)fXsf-2_hEZ zUKzezg!`1q%xA?0qPkux*aM(-9V`uebXZPGv)GF6FThu#$Rd&4Hmo^ReK1#4m!n{nvQkAq6c@xD2VoB@^Z4~iL1N2fh9aQt4Y0BV ztH?|uNfXf>EXRV9m)IgYF_A1_NX)%ZKV(4rLT#fScP-1Ox@eC&!_1q;{TUr| z(uu6M{mMys=`@pe2ph~PQ<-}k4-VWc+>A?2o8q~_Wf<)N2Av}~B0_#0xJ95ccs{dJ zSg$OfDsh~w3+uV%F69#n6^>@wnj;I8?m_FwkY2cyUa`np|CwLp?Wl9xuTjk*^y$XR}(72 zQ^Sa0j$9|Nu5T9MyU{4GC>JS@TPE!ARm3(7jjr?uMR=O?z7f91_jx_%!A_}}!mbrq zcM(Y}!83St2qpObcD~RbPFtx+Ob^Z?*|uBs--D zg_pRwBD^dKMcC_`dWFKPGVJqB?cWMNl;MC!eC{12K#)qW72!uR{FwN(`3c#OBt8)i z5kKRHiJ#k_5lK;#MU-qG5>+$&(vRu{i%O6pB{<1W*Al$pM|O(Bn=<^$kL>hT=#in948Kt{m=p?bCd@E%8bGohwdx z-LY8ty*V}IiMyrpEHhg^F#F|1Z!2 zy}RtWz5jY^Px-*1qvgFHZc0pjeRCrG$EV9@KVMy*cJ_nb+drIDe(c2~@i*5-6Gu;c z+|zlerhH^eG0p(gFP_?T4tE*$To1rRC4fzBt@r#N08XCq?CB{p{@(lVe=bgp?uf@f z`pYH0mfht&2Pfh>*mJ$LG*_;rxvjPS2G?@u$#)YU=m*Ou59i`d)z2k9{k$f@uz35- zxxF{+KX&8(OHNOj`MYvv)dhAvWzX>Ojt$)x#JipyYL4C38o$AShmbiYGVhmO=~&Hf z((GxM1on6Jo365~*tKqOG`%nxuu{$?5Hr*~oxOg>cF?nD1fA5*n$N&HU diff --git a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/pickle_module_info.txt b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/python_env.yaml b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/requirements.txt b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/MLmodel b/artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/MLmodel deleted file mode 100644 index d6e755a..0000000 --- a/artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: cls_model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: e40643f3e1b9481896e1ae6ed30e8654 -run_id: 2820b379bfc945358bfd516e5577846c -utc_time_created: '2023-02-21 05:33:10.779919' diff --git a/artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/conda.yaml b/artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/conda.yaml deleted file mode 100644 index 5b6a717..0000000 --- a/artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/conda.yaml +++ /dev/null @@ -1,10 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 -name: mlflow-env diff --git a/artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/data/model.pth b/artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/data/model.pth deleted file mode 100644 index ba660cc47e252e22b7f0c1e156aef1776472cf70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3923 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 Cezji! diff --git a/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/data/pickle_module_info.txt b/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/python_env.yaml b/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/requirements.txt b/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/requirements.txt deleted file mode 100644 index 4bb0870..0000000 --- a/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 \ No newline at end of file diff --git a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/code/train.py b/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/code/train.py deleted file mode 100644 index bab8b6b..0000000 --- a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/code/train.py +++ /dev/null @@ -1,82 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -from tqdm import tqdm -import mlflow - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(10, 5) - self.fc2 = nn.Linear(5, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=i) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(10), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=10) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - - # start the MLflow run - with mlflow.start_run(): - - # train the model and log the loss - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - - # log trained model - mlflow.pytorch.log_model(model, 'model') - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/MLmodel b/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/MLmodel deleted file mode 100644 index 59094e8..0000000 --- a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 18b69aa38c064c579c9b465d7a826081 -run_id: 410d85525e5f4cfe9839a432d35f9ad2 -utc_time_created: '2023-02-22 00:42:48.668457' diff --git a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/conda.yaml b/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/data/model.pth b/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/data/model.pth deleted file mode 100644 index 40c18c59bb65a840d6de62aaadfd0a24b8246e33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3987 zcmbtXeUKEz6`$GT4jh3)KEwdRA(1Qr_HOS3PGA@BAVZqd9TT?sT{XY8r-tTqyB;}e3f-q^4a7mjg%oKX;jA1rrbgD-Rd9$l?nsE1+wmXzg zo3@)NTFT9tG-qj=M0XSn2}HF9{U;0x zp)|FNX%exl2s(F7!wLSS+jv)knlel%L9HsGhNk&Kng(?$ivb68W)~(pY6JFfYHiMD z^p(*SZMxp7XWHAF+V!^9XmmwXZ!`4vHkg#4aFqhmcu{Cs-Jz1dc+D}WLv@M^zM4oS zm>ec`WTHBe`_0%G7fewXW3M4&WOJ6$pf@y@tD3hiTk|K*RJh%urxvSQcdgf1*4=u1RZY zoK8EEVX+qpW~pr$0~M&aQy6+MG;}01bW{)pS~GNHLPpGBFSJw8YW;pFQ{(sRGQvgy zu2t($*VHk&QJCEi*D3Ica6*>kT3MtpC#=@uwBr_xBFrTrQm=-vZ&@&p>)nc==|#An zvmu*~!u;T^85U4zP?4#EW0+Z3ScV(aW!P)n>=;F-u`j3FTE?)t8w)!qv8_gGI8^H~ zv!>nKNQ+2`NMQ#oBK2}TnZ;dA6{m{RMffDaMc$~uV)ZJtrUiM{;8SG?FQKqRflrrU zX;{6Q&ldD_Uhg(ASIZJX?kv5B^_L?LeEwx~CL4&5MQ$Q7ewuh~7(E5LLrWW`DM2Ip zYAQpNLbC!b<0%Go9Hv4QBU?#J3EE1qB21Peu9NwK!PU)Rg)8|GmRLm70>ZVc^;}A~ zEE{Q!)N*j;HyCSJx_yV$E2Ga!>`VS;56;$;$&Yvgsvn=mdAOX7&I zQye-fmP9IIZ3ORZyk_`a#7el8G3z!35{WY09wzfS^SN_Kav~QE(}g<-5?dh)RS|9X z!Nz{rL>3WQo{8=lpCpm}CWx?^nY&YgyOtm=RRumzmL?LocipYPJ*1V~Q-XU-u!ZGb zCM!8oEY-vDY$cdgjjT?Piy0%a1VL2qBZ#6-lBA0y%aBqa?I0i-2FMha56v-c$|%GD zH?~05EkSob5ENLl2XZCY7WQFfMV7O=AwTHnsh}58i(++xnNHiLY4FXy_nGBetD)U^}@IZB4cQ!O%LT7Yh6`z~<}-Hg5;m z{3^iaodBD20XFXj*qkTN$+hHpS#(pbn~EgmiIY~;ul@Z7yw$NMIqtP|vaq)5TH4su z)w%kTOX-+9>gBrsIPg}bZTgAW*+YHtyQUrXlH_`?XTisnzi1@>?0bXWpMUe;%BsFX zW%-5u@yNXP_`)Y2UNhywb(P5LAI1K2dPe-!LTBvn``3B%Hd^ryc0E(MP+SwAd;e3h z1KXy@53kxAf35X*vA*-iPu={-ld;B4HSvy#yJN>b^kTCHw|WQPzt=myXREj5#*p_{ zdH(4q_MP+wHz=_?UlQV{{=F!^_>IHfY4WJoITZ3b&NQug{Nr<#a^0?YeZIq!b~T^6 zW%CxV{*hN=Ctn1Q0r>vef4*=AcNz9v4#0RdfYGkbRsRQoAABf#zg{uJJ9b~WvhC3M z%Gtjq<7_S4QU@l@#C5Rea%*X>UQ2UVXXFak^4_`|PCqdFA@8Gqy}f22dC>dAxf9&K zT6uHM75i_wa{n(sy{p3FeP{iKrR;jjp7G&>`BTZ`@8r}S6x=@S~t4!PmzmXcw=>|8O3gtBkeF2>4w{EycBE#9T8 zG^1lRt1~xRGlShK&E~P1)j1fg`KQsEEn_vS@nhGXk+uoDzRw_INx80WSuj7pX8A=) n_T9tU@V~}xblA=Z_E3*~C<;+_=f=jSlX5K=uR|>+@5}xVO4!Y? diff --git a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/data/pickle_module_info.txt b/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/python_env.yaml b/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/requirements.txt b/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/0/410d85525e5f4cfe9839a432d35f9ad2/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/MLmodel b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/MLmodel deleted file mode 100644 index 906ebf2..0000000 --- a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: cls_model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: a0ecc970cadb47a9b839283e9514732d -run_id: 63c7363339e042f4848d9041ba8deb82 -utc_time_created: '2023-02-21 05:37:55.904472' diff --git a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/conda.yaml b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/conda.yaml deleted file mode 100644 index 5b6a717..0000000 --- a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/conda.yaml +++ /dev/null @@ -1,10 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 -name: mlflow-env diff --git a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/data/model.pth b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/data/model.pth deleted file mode 100644 index f9d21af9413989459ee92dc32b95e94d79bb0b89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3923 zcmb7He{>Yp6`t8m0*oXeptQ)(8t6tL$!>@UB-uATUB5)wbufr=Iqo9{y@iPtU16{iFB2nUGC5 z@f;?Zv-{q=_r7<(@4N54?UBP(f-rTeaMe>M%n|yXlxa1kbgDOI`>f86nZniy&w-F( zSdN#2;eqcAl=VVVNcWLaow-KCPhc+EAbOLdA1zK%$F zm>wZDWJ)k^#?DZjw|25X0UT-1HfYANC8&!`ZaRvOkIoD}#X98TK12&<7T|gXW<_LC z7VuA$tK_hu88~dXl4-Lq63kXxF?}jfai1`9C^T{^G%_TJ0u7Ixs!E9|Y=!m-TD9K} zrNVx@CM9eXV2)aYzLt&*Md5}b+^E3ZNJ5t6YFVW4nTT4A!>*S#bMRRbBDHD=+qMn! zxZj41ZR$C=iBp<3qA)-B7J~&87OE&W!8NTkEGocabvd@0Ho0cbZQ7I39W7wykB@&a<#075lXX#$e zFfB`h6%7hB7NChjvjWk{90N^_N})nlF%r!~OCDB6$gPO$biQElbSqe4EAPTOY1Fhp zaJQ*5xRq|(4r&vn<>Ja$<>7XtmpKN?ibKmfV&j9+w+R>rJ~ZTvV_u3Za~kapo`Q+2$oEU zmrMwiybd)~j}}xIImK$^RA`?#GQ|G#ycy`vI#ZOyDiQ8u!8R$dxdFwwMFEvGBoep{-LJq_ z5+hsluq_W?W(w#ctsEmp_-H2E339uGtWFT0H?lTC+7blu)Cl6YlXR2yq`LsR0!bI4 zFc1o~QEM3)nrk_fX^Eko+770dhjbBo(Wc=bkUV4}KBlbNGIlTQ8uUrZ>N)hHSf;F`d>3=2?p(^unW;N71`=YS{QLcyN_y!uv$hHAbkv*J^fn#?xNEo>mzp-kQ-Iqr z{X=%#senBaz;?(Lz*T_y5>H~`GBP#dIDIa7Jo0Y!Mix2aYH821v~e~tknn3Dz%Fpy z!yWgkvzX)PP!>h*$9;egKd4^MhWU1{r7*i-bRQqhtMk~X<>;wOld&NCx!FU0+E9pH8ceauE{<14)LP=w6C`Y^Qk?kf44tOQ?0+6s9nM#!!~(#QP{NBG`2U}ky= zg~1?%=FyDhN?OijXG==ELZ}2sCNV*dTqmdPj!AGd65-|KqUv$)gok|>sS{J98~siR z9^t}ohDZ5^Z)81qOpa0b+PzqG)v{EC$MFmii*W1+U+8fPUsvE8gS>I#Fnm*iCwMs} zGr9{;k|PACB@YunY!tpl9+Rsne4B?Wz*DkVfT#UX-=T0)f$#dEP926J1)lMUuf6Y) zEI}zfTY%>j_&)Jv^E??y5MKyCAU@+S5TDx@iBH}SiBHZj@%cE-D*-PTX;Y`TC%W*G zEb-mc@#t9R8M)d^k_Ch@^Ku?usbJ=8gbYr|Dh99mS-r-x66NY5yv~l<@Fv6Nr+$Qs6h;(y%a8E(VfdK>KOe>B7d|%c z6yRM2-V3n#Tvkr$2Z^| zjlDgSUNWZ((TYoEQ*&p>imR@e6KCyA6Zr@e<+g&Tm!_uE@xQ;va5#F<$!-EuS6Q z9lv~fsQuCZ&A$*|McVhby&7*REjyoh?R4qlHamWZ$mPG32g~KQw$ifSSFIiHm>b_| z9W005?k;Qp>W+tvH{0uvoh+|EbG+QM;obJjxdWwbRej~Ie?L+FXv>NAOKm&WPMJ|( ze*8$PT}VDx`tt*I@z~-}{H4)^tWzpkr>+VpX}YlF464mkwx}#=K91@gN@hu?wZ}&wv9q+#^?W^BVMG_P*`^ E0cKvZ5dZ)H diff --git a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/data/pickle_module_info.txt b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/python_env.yaml b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/requirements.txt b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/requirements.txt deleted file mode 100644 index 4bb0870..0000000 --- a/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 \ No newline at end of file diff --git a/artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/MLmodel b/artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/MLmodel deleted file mode 100644 index 136582e..0000000 --- a/artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: models -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 4ebe94bd0249452a90b3497d3b00a1c3 -run_id: 6845ef0d54024cb3bdb32050f6a46fea -utc_time_created: '2023-02-21 05:25:14.020335' diff --git a/artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/conda.yaml b/artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/conda.yaml deleted file mode 100644 index 5b6a717..0000000 --- a/artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/conda.yaml +++ /dev/null @@ -1,10 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 -name: mlflow-env diff --git a/artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/data/model.pth b/artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/data/model.pth deleted file mode 100644 index 2973f376095b4af45b9482bb6d34678a47572ead..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3923 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 F{{VO}xorRd diff --git a/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/data/pickle_module_info.txt b/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/python_env.yaml b/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/requirements.txt b/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/requirements.txt deleted file mode 100644 index 4bb0870..0000000 --- a/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 \ No newline at end of file diff --git a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/MLmodel b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/MLmodel deleted file mode 100644 index 2870be5..0000000 --- a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: models -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: dd1b1e3a6b5f4274a5690a8843751ff3 -run_id: 8ba27f225a7442be8816977c2077c510 -utc_time_created: '2023-02-21 05:05:04.660670' diff --git a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/conda.yaml b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/conda.yaml deleted file mode 100644 index 5b6a717..0000000 --- a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/conda.yaml +++ /dev/null @@ -1,10 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 -name: mlflow-env diff --git a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/model.pth b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/model.pth deleted file mode 100644 index c77aaa4b863dfbcc3c08e2bddd3d0be88a50601f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3923 zcmb7HeUKEz72nsc433+X4h4nxdqftUXRzV|C(~RQcj-lKBTUgJ#0#uZsvIteOfEtS82`LIx%ghHHP?=qrX3IBXKa8YPacXI@X$A)zlViYfHB_Wm=#nNnyGK!c<-;8P%qOw|T|ZsZCXi8@`4J zMVJvG)nuB#Zr03FT(@>ALp~fC$JA)nG6e`nrWPH;$3v%%FR=z=u?f+FnI)Jd!R&|_ z6a)Ad6f4CFP0?^#vjyE`9|Bw}x1swqK!dviqx(XmL!r^*fnb1Ej1E<%gK6xAb_J9w zuOCWRc>U^hU}FI0$knK8s2HIb%pHJv63mYzMM10*gA_g&k*jdpcJg`wt|K8*D~GUe zny`TD-JdmewEzowNHbat>iw@~xSqly8R-_Vbt3~el;B3W8GDVJZM|SO_GMK|N$X~J zV}2(kmf1*kn<_m<#;|(JzoYq`u$a_}HRM{pU^o~K&JMy7f?K^wf~E3ww5j+ZQ(##M zKHos$W(guiXo$$y@Y%eo<SJPA8*02|3-vQDh^={hqg1S^BEi5c50!515loL`baCJo6X7Najq zu!S^}Ek)Q`gl&ug>qr~Nhy{GilkEg!`xSC~l6Y|=cP2@Dk|3T6LHr&h8^}FmLkUy~ zQZ_=NArvSh*Ro(Jwqa4mC5Co-JLpakG6T?!G7bGeija+Xm=>^>X3cJRXwVB%UM-*& z#bkw?rdfue^IB#L8wzQ?pr`N7Y8Vg$>EGk!RLaR@n6ydQpd~M4%bR!@VC}H8Hq}jv zX91UC{D=I6vjIm0fbCEyfh_^`D4xQ^Wx-U4W#w#exaA%4JZ3p-D;dWylnFA>oAh$P z$Ie&m^{t=zbemS)4b>_Y4pyY-Nk2%@&Yz%SZcalWZcLjTx_@J z_7!3lRyS|4JzTEe!)z=!_VU4f5mJBUk!bK5D|n?=fJZTGr6LSO$U}o9$MyC{cx~*} zv)zQkpl?EPXx6X=rJ%DDCaqi!r~n715WyJPRzca(EWpOSF*rsJiB%N7#m$xA+hVW;&v>T3L*ZEop7Tr%?T6zMoN$Q8 zz3-AdK`Nar!S^J1o_Mr*f%GPcM}+SaFXE?&7uy$!7rfKN3(gOS7mpwEOu#EfMpr4; zL>tbC0omqq5s5i&T*t7dq`^XgURRZy%NfS<6#b^w0r zdG<33uSxK_=h++k;j9G1WHL4_FoIU_gm$@=68xNDbI!AHp2DaEZ+aGfu^--&;KCR- zzx1%VSb|?k@M|BNx5u&hjgQT5eQe(GvAN`9^RAE0d*qB*MP3qvPRemo(JpaXP1{F{ z{<{!wYV7Hn@~Sx_u)OT5+1S+Caq|@y%}MvpvF?lJk;LKt=SR-GzpnkwRaa#!4R#H}Cha~ED*)_xq~iF=n{h%>OF=k>K0v7)f&v%pG}gB9!Sxa0o? zYYeoq_ufxO+NU>OiigARj=aC@qv2C?ce`vad(P4D9NY(cK5H+{<$G!F?1*0FUh;4J zVPwN2e`|kj{$q(9_3?Or>J-OfckJAsu6q5Jt6zWp#(utD_?D(^>}JZIsr{`DtoHrg z!45FX?CgkNrNd>|v(FZRq5a;o-J97Znmt`&ki9PdCM!=Nc9)yj@U$rVg*I8YoKfr= zIo@)ZkmI_IO_Mdt<3CaJC|;n;G-H!B%Of{Yb18PqG@B=Dmd9YC=E;egEt56N@nct< z@iqs$-kN^Iy2R@075@C9id!#BvY$MxjlC6ieZ%&IZx8j@RWk629|JbsC023qYSd!# Hp6vesK`^nD diff --git a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/pickle_module_info.txt b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/python_env.yaml b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/requirements.txt b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/requirements.txt deleted file mode 100644 index 4bb0870..0000000 --- a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 \ No newline at end of file diff --git a/artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/MLmodel b/artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/MLmodel deleted file mode 100644 index 9224ce7..0000000 --- a/artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 957e2f6e4fd048c99aee3150c73c4078 -run_id: c4fd84a025e1474d87cdc2919874b88c -utc_time_created: '2023-02-22 00:41:33.282088' diff --git a/artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/conda.yaml b/artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/data/model.pth b/artifacts/0/c4fd84a025e1474d87cdc2919874b88c/artifacts/model/data/model.pth deleted file mode 100644 index 4356bc1b7641eb91e836f9620a4de98155769ae0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3987 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 diff --git a/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/data/pickle_module_info.txt b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/python_env.yaml b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/requirements.txt b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/requirements.txt deleted file mode 100644 index 4bb0870..0000000 --- a/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 \ No newline at end of file diff --git a/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/code/train.py b/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/code/train.py deleted file mode 100644 index cbc05f2..0000000 --- a/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/code/train.py +++ /dev/null @@ -1,83 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -from tqdm import tqdm -import mlflow - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(10, 5) - self.fc2 = nn.Linear(5, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=i) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(10), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=10) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('/mlflow_testing') - - # start the MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - - # log trained model - mlflow.pytorch.log_model(model, 'model') - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/MLmodel b/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/MLmodel deleted file mode 100644 index 0062f23..0000000 --- a/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: ff8b845d6a174ffabfc49a18673c6c04 -run_id: c248a4299f97423987a9496a2241ab1a -utc_time_created: '2023-02-22 01:10:55.971443' diff --git a/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/conda.yaml b/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/data/model.pth b/artifacts/1/c248a4299f97423987a9496a2241ab1a/artifacts/model/data/model.pth deleted file mode 100644 index 544e00528ca65d2528de550e2d66c180eafd8f3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3987 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 diff --git a/artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/data/pickle_module_info.txt b/artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/python_env.yaml b/artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/requirements.txt b/artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/2/b7d7395b6b53404497f7656b07b71bf8/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/code/train.py b/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/code/train.py deleted file mode 100644 index d13857d..0000000 --- a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/code/train.py +++ /dev/null @@ -1,83 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -from tqdm import tqdm -import mlflow - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(10, 5) - self.fc2 = nn.Linear(5, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=i) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(10), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=10) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('mlflow_testing') - - # start the MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - - # log trained model - mlflow.pytorch.log_model(model, 'model') - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/MLmodel b/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/MLmodel deleted file mode 100644 index 1843ee7..0000000 --- a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 2625ea164ff248c194686ed5afb9a510 -run_id: c293e8294f4f46adacd21465be08c608 -utc_time_created: '2023-02-22 01:11:28.646127' diff --git a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/conda.yaml b/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/data/model.pth b/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/data/model.pth deleted file mode 100644 index 3d8e55d35e82005370a08d4c4877f90ecb05ce3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3987 zcmbtXeUKDK72nyrJz(H~5WWnNY=S0>f%}FNa2Ghj0Zy`62G9wJ!|cxN^?GwN`*wOb z4%rBXT@EB*L=w#h9BL9tG(-%b!cE8}B={A9f3Qj_r6pyVKP*eDQfm1}eBCq0?HzSg zQTEoaumitk*TF)#W?Q_O{8PjU(F5a3*8g zuAa|jI!&Xl;$2j`v`#~HIt|mHwxwoF&2dBs#WJdzc5^1pS*j}1p1dJ~pj4s%q(LE^ zp>`od>MW}cox7&t1pneAyemRg395?_QAE^GRbNO|p+;db;DE;L!Wc)1Vqa@XYuV<7 z3yjv5mX-#+HEn2mLqlup!t|o%bd%l+W0Mrd$smpvg__kID*B689fLYlqqyMlL@dID z7^xv+lrh||Zev_ftK5&hsBUC)mJ!vWPOd9&8d1w|3z~_4wA(IpMmelem>4WMXXPmB zP8w|u0g_qQ%Fvu`i7+`fy67OZKCpLi7b`H0>k(*}Qi3~Wm>QD=DTF^ks+OuUY6hn> zj%ZlyMTBX}0*rx%sIVh6@I-i^FFbH8B!p3qX)R1GCS-7_Z_bKzRSHHnA3QqmDoMx-KVRh8!dnmE3dTKaS?J~2b z-Ca)$NQt_956mHxq)B8NcQsL%C`=LHQv?_JX<U#-TMe$g>I$lpr>j!dw|XQ-lX& z%6LAT*D{@2hk?18mke@eX*OFPk&jKpmOmCX=J5iPwhFm8U&w#xPA0>d{w2 z2^uLh$1N}6=AV5kxz7XBat=Nq-=aiGB8>(_PHdh08*O_0K)Qj+yaX~K3W6;nf;&> zL@dEl8J3k`xiW+Ktk^(Q$4v)&0JLp}6@iZq(@tw9ThT*BSQ$eWiRA84y`c>(LAyXj zXy+Lk++JW+30BLn#&yf^`Lf)=%Q$Nny0wB15}6z$SSDd!CSj>cT7kTY;R3NF`a(N| zfn!2ZpaRxL@Xp4o2Hyp&gohck9+4rLEWx8OGMh7>JBJh}a=|cNSWA%DGPzd~(DpW1 zSBCXu4w0m(=#KG86xgp?fDO#t7i9S2T%@HU!(-&ZWD@tTjWTQ^Eo4&>zEp(GEcX&= z~9`k|ep2F%nM_M0E>66g83}?Icx#vM$ADmh`C~02e6saK-J)6s9;hl}DcYcE8G} zcPMwTX?{ScIz|`F7WwSs%3W;Mv^Bj_WXQB$nYRJUWCjd}}XX=phQ(O?>xN+o{`}@yq3~A&4KTdeFWW-{lquh2+xv( zQiQ^D+*}EsmxL0$;F~%^;iwFKzNuq-;CnKB-z7fxen5aAm0m2tOESDneA@hwY)cZK z2*-(^@mGkS+gFL7ydM!iIX@Oy7 zlOmj~$jnb;WbcTmn&1sTs#7c~L5h^&G&^0(aK?}9XB2)e!!P{E&hCM8GW3&?*ffKO zR`5uElUpgld4|nfzJ&n_Z_DtGZ{flocvpt^2C=#5WAn=r{7Qyj2iW{(2%Fyq*t{QL z^Sc0>O93{Q18lC46HQ;#ykY(B8J> zrc3FFJL;{vf9?CQ|IEy@ar?Pb{cE?M_KrKf-hZ9riTfTu6@MTSOr?}O{-<5knP#1Fr{)$^*8-dp?n`%nJqh4`j_ zAN0mulHz}lE%j!k=EVPS;obPlv#!RyI~%;zt1rf-(lT#Z-e?s0_g1d--mvrD#qB50zOt^azj*a2?=@M8 z_nhgCGXOsn7*jOJ;eDueoiPFqV{Z|j{PO!CH zd*`v2rs6u-bE~y9Rj#F}y{+yx*K%!oXzB8!PGZ-a|MH%0KObMb*uZYm>`6%i z`@8W?S6No9}__1rxP+N~(-)E4qlvGnQFPNWQHUEYr`|e?F@Ly#& fI&4=0d#J}g6hn>d&W(*tr=$oMuR$#)@5}xV1WVO{ diff --git a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/data/pickle_module_info.txt b/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/python_env.yaml b/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/requirements.txt b/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/2/c293e8294f4f46adacd21465be08c608/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/code/train.py b/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/code/train.py deleted file mode 100644 index d13857d..0000000 --- a/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/code/train.py +++ /dev/null @@ -1,83 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -from tqdm import tqdm -import mlflow - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(10, 5) - self.fc2 = nn.Linear(5, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=i) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(10), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=10) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('mlflow_testing') - - # start the MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - - # log trained model - mlflow.pytorch.log_model(model, 'model') - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/MLmodel b/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/MLmodel deleted file mode 100644 index e841ea5..0000000 --- a/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 2ee49fdb3ec647a58b1235498b186722 -run_id: d548729629634031a93a46d6dab8b7da -utc_time_created: '2023-02-22 01:11:33.149151' diff --git a/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/conda.yaml b/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/data/model.pth b/artifacts/2/d548729629634031a93a46d6dab8b7da/artifacts/model/data/model.pth deleted file mode 100644 index e265aa47f310e7089263e307e1ff31bda3ee2f5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3987 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 diff --git a/artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/data/pickle_module_info.txt b/artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/python_env.yaml b/artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/requirements.txt b/artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/3/0be79b1f3f7d480a9c7f497312887a37/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/code/train.py b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/code/train.py deleted file mode 100644 index b7f91d2..0000000 --- a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/code/train.py +++ /dev/null @@ -1,98 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -import mlflow -from mlflow.models.signature import ModelSignature -from mlflow.types.schema import Schema, ColSpec -from tqdm import tqdm - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(5, 3) - self.fc2 = nn.Linear(3, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for batch, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=epoch) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - batch_size = 10 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(5), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=batch_size) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('train_fortune_predict_model') - - # start a new MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - mlflow.log_param('batch_size', batch_size) - - # create a signature to record model input and output info - input_schema = Schema([ - ColSpec('float', 'age'), - ColSpec('float', 'mood level'), - ColSpec('float', 'health level'), - ColSpec('float', 'hungry level'), - ColSpec('float', 'sexy level') - ]) - output_schema = Schema([ColSpec('float', 'fortune')]) - signature = ModelSignature(inputs=input_schema, outputs=output_schema) - - # log trained model - mlflow.pytorch.log_model(model, 'model', signature=signature) - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/MLmodel b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/MLmodel deleted file mode 100644 index dcbbfa2..0000000 --- a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/MLmodel +++ /dev/null @@ -1,21 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 1e929c95d90347419e3e0a49d5d783fd -run_id: 128f833fc0a2426db86e5073db557a3e -signature: - inputs: '[{"name": "age", "type": "float"}, {"name": "mood level", "type": "float"}, - {"name": "health level", "type": "float"}, {"name": "hungry level", "type": "float"}, - {"name": "sexy level", "type": "float"}]' - outputs: '[{"name": "fortune", "type": "float"}]' -utc_time_created: '2023-02-23 01:38:39.421914' diff --git a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/conda.yaml b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/model.pth b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/model.pth deleted file mode 100644 index f72fedd565dadc882eb9de5b9754fd89bf2042e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3795 zcmbVPZFC$}8J^iq(spQ*v_i2^OR$O)X|vfR{eY5CQV8gjWtp}(f@PeYoy}c$GPCc_ zou;u}rIgvU6$A=eQLHWX15pYJsFfzx;J2W~b3py+Z;$@+9RK>>duNl)_H56wch8)e zd++;k-{*bad+%noWSb-{T`FDDI;E?n2|w?+sk}w4zH-SO8|{`JY-*1rY}@t2e7R_s zT&J($TQMiBl4AxX$91UhnYL>MfdZ0hn`SO7y0qw-rb4I6jsmigME@CwLc*qg#U_28 z*N4tS*9qdcaxd>Hkc^Vkg0CV<6_%@{gDf$Y zaKCvU^jJMXaiZ)xJ)RR*EEivN(yx?yIIKO;885l$6)Ea=wOT`r zWFhoyTJ${yy4BXAb!Y{!E4hmun8w`*G^~o?13Fx-YO*HbPuAMBq;1+bZ3l|uu@42V zF*acgRHE`hY3^`h?o?v#v?NP3Id`fpFXyqBI4GIzqMyhoMZY62?UG=%(Sf?Ig~?6B zwKe#l4r|nm)~+QrnZk9d(T>wWSavFKJxP!*BY}O-gSA|5CxT{G;6t1Z1v?Gv;;#X? zfkKagOqBx1Ex?TteAw84z0{t-sRXJ0MawtyjyIkvPf_A~De45&oNx=SKbfKxq(onN z3f7Y@Z6&#eyXurX4mjGPGvKc{br=5vaWsdUg1C6>e6ItN3i$vP;&u zgSpy}iF4;!6Rf`xc_8>#D7tK*kE{6B?ZuB$)_ef39>rZAwxU@OI# zj&&+DFmi|tR$)^WHmhVK;<}tK7(&a9SGa`_VTtvbW=y!PMi-Z|JkLj3Beeot`7Kqr z)#&6CrAZ{R6}ps-Z_C6+8^&(SunHh6GBH3{{y|t_@ej9(ASSa2dW0wu+^)m+2<|Yh zWj-4=5HkpK@g4x9dtpcHW8C#~mdjRjXBF;Jkwpqw+tM4_z!LN;RDm&`q5Ad$cSmrK z4xb3a8ho;*_wzC?_?1bkk_U}+s|3p=!OJ9p?A?L9QE`D-5~rkt^4w{;DpMJ2BmQRN z$@;g9m9UdB>s}o)nF#Jv$vVz_?i{k5$Q8#8;eLX|*2#^AjJEf~t{Utn>xrhVMt6)) zip+j(GVEdI9?;=ay+}(#hfkB6Ga1~w9@OC>GDIG#!e^?mm*rj~TR2iI)%AEDCYV)| zY|D`OjFI6CK~z6W5Jih*$r#B-kki2q5Rg0rWChEI8Mr=W6k>ood!Z0kVY~(e1$qxb zu?nA41+1*dirzSsj)**!tqN*UtWI!k+jm`uZ(f0NUnTEUocx_d8*?&&toKCa>SoB%cn_vzZAee zZh6vJ%`6uKvk zNBKgZq42B@Upc}%U!8^%I(&`SQm$wP@Ekct&@FkK2(xMUI(bq{Quqcp7s2zI9Kkn* zsgo4GrNb#<>hv_cpu?Gv2=0BG06{8!CxY+l@I4}E^CH=wA%Y0sCnDo75s}*;5Rtqe z5|NyjiO9!UUI};|DL59zZ83mXw06FU`XOByd{s+^IdTJGnfXx_e%z3m*Hm(}DXIZ@ zT}1T;i%Qm#HTVfTU2E`D5!ufuoYUdwBC#e2iQodm=9j|4 z9EG=Z_?58m>uLCn4!^Bq^E-jf?<4qw4u6cXd3ynycVcY*6l3$}7@LbRHt)vR{Dr)t zCCRIr9Ol9>*O%3nEPdlWL%thtb?nKuyp}GPZg04jruxT5w_S26ZMvggt~-6;(9GX1 zEE{>c_r%QE^}9ySz3}4j+tJyPWB>m9>|6iZHvFI67iP}A7M?$_uRPoR^6RrFSI^Fz z{>Sj_ndkmG%ND)nuI%yKu(H{6xkW3Di%yS?cEpQ*KYC)Myyo!i#jX;!_vqUHzQ@jP z_FT^1t&R2u#zr?^AqelA56||$wEfNQi)ThyJpS2#KJ$P3AG~t^=eHl{e&2b(eT-f2 z*wZ@h71AAX-22#};Co}E!&ex1Oo~B;Mg8u{@jdJ&%ATwyv)BB8qDES>YtiDyuk!Q% zkeYQH*}+gGnUmlIyS`f>yjJiCE5Q5*6MGQ-H5QQitV8u`=cd6oC7wU)!Mmu K2Wl~SA^SgI+;gq~ diff --git a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/pickle_module_info.txt b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/python_env.yaml b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/requirements.txt b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/code/train.py b/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/code/train.py deleted file mode 100644 index fb07727..0000000 --- a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/code/train.py +++ /dev/null @@ -1,83 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -from tqdm import tqdm -import mlflow - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(10, 5) - self.fc2 = nn.Linear(5, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=i) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(10), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=10) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('train_fortune_predict_model') - - # start the MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - - # log trained model - mlflow.pytorch.log_model(model, 'model') - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/MLmodel b/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/MLmodel deleted file mode 100644 index ebb3022..0000000 --- a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/MLmodel +++ /dev/null @@ -1,16 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 20196b21b65b400eac57135de7cb2bac -run_id: 2af28d45b569431ab10056469d63cf44 -utc_time_created: '2023-02-22 01:12:30.183766' diff --git a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/conda.yaml b/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/data/model.pth b/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/data/model.pth deleted file mode 100644 index 3b653c03f4967ec96550b7945ba477fb4c3b4a2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3987 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 diff --git a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/data/pickle_module_info.txt b/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/python_env.yaml b/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/requirements.txt b/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/3/2af28d45b569431ab10056469d63cf44/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/code/train.py b/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/code/train.py deleted file mode 100644 index 1538383..0000000 --- a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/code/train.py +++ /dev/null @@ -1,98 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -import mlflow -from mlflow.models.signature import ModelSignature -from mlflow.types.schema import Schema, ColSpec -from tqdm import tqdm - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(5, 3) - self.fc2 = nn.Linear(3, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=epoch) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - batch_size = 10 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(5), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=batch_size) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('train_fortune_predict_model') - - # start a new MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - mlflow.log_param('batch_size', batch_size) - - # create a signature to record model input and output - input_schema = Schema([ - ColSpec('float', 'age'), - ColSpec('float', 'mood level'), - ColSpec('float', 'health level'), - ColSpec('float', 'hungry level'), - ColSpec('float', 'sexy level') - ]) - output_schema = Schema([ColSpec('float', 'fortune')]) - signature = ModelSignature(inputs=input_schema, outputs=output_schema) - - # log trained model - mlflow.pytorch.log_model(model, 'model', signature=signature) - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/MLmodel b/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/MLmodel deleted file mode 100644 index 6b7d705..0000000 --- a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/MLmodel +++ /dev/null @@ -1,21 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 4dc69e8ee0404f70b0c17f8119986704 -run_id: 581cf34366f74ee7b90b18f0a606ddf8 -signature: - inputs: '[{"name": "age", "type": "float"}, {"name": "mood level", "type": "float"}, - {"name": "health level", "type": "float"}, {"name": "hungry level", "type": "float"}, - {"name": "sexy level", "type": "float"}]' - outputs: '[{"name": "fortune", "type": "float"}]' -utc_time_created: '2023-02-22 02:46:27.876394' diff --git a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/conda.yaml b/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/data/model.pth b/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/data/model.pth deleted file mode 100644 index 17390b591698adda3627a441c230126baae47c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3795 zcmbVPTX5V~8J2c!$5j(MN!t|KTwFqnLK5Fo*GZhVPU{wwZnjE8loTVhlGaD8EbYHK zies7$4e73(wvd*#gwk6=Xt|WqmP-gwn_wVN?%@H3;elaz-~}ESnBjq8;6LZc_S%`v z3^_X*>74Ul&j0=2f6m#gmTr)w=4R=V)*@XijfRfvcQ_Wc+KUB$XmGi7U{QNGW!ruj zJ4Mef_-=d6w_=W31=oxUuJ6(?Fm2z8A_XMXHqBh@`P2(cQ=#KUR{_~bqyLOcA!XCB zWRvzFXh-L3Rmf%)QiH*TM<>n;?2mV5w$2T_-dk*VW~=* z$P!}-_v?fh7c4Vw!Csr==Domev)UqWwCKBSfg6`BA76AVEEU=~tZmSeEZGY@in^`! z){r2Xj{}=}VW7ZrwZ7;qv;x=_+{I2z;{ymZtgOH_I$W!2vL@kA)*7_5ZQ3|(M~WM; z4+X9>wqOiYqVi#B=2&XxRBGn5Bug|sbE?6S9qgqJOJ<|!r<}CtH#yQC304_RsOwvp z+%CAj3h&V2ooYsF)Y6(v;Re-c#OWw5x+S=gq)4lg!hR6IYOc2nL9PFNY_49r>)DXw6LWY{Gjgpl+bBL5KI2VWVnX&1Z|2 zU9d)6%+;n$lDohfW&O>_1Hr$%=d*!!vOdma>ZggDg}?D`6L7)_po;G8NdZlC_-q+&N@9kxQ;0!~Fz_t&^J!8EqeeJym#stS6eb z3f(b2DKh&t$gr20`+yGnHXtnx9rlxrnGEh-2XuIl^pXe5@WC<+v)pT>k0ZrWJsZ!5 z2xiqJ+cIP>V`Lyh5Y-P8MA0HyGDNZ!$mw852#CV~S;q2VMt(>cg&5%OFy!Mhj8uW3 zz=osXmEj|*fRz=Q7mPq*Qsk*fCc9WjwnzXhNuEmhgdK>hxN+xX_7E3 zL~xK>9y3-k%U)#WW8XIy$iShDpnd{eqBzbKKWeOGinCKi5T8D5tYFjpfG{15 zE}1R!*(1gcY}OAgr&eU%$j7+Y!y@cU#6sN8gtMbu?&AWp+44BX2OmM2U3z@_d{b4# z-l{+a(^f6Rgh~pN#OHdGD&G>vTyKO>IG&g=W9s>lVwPNXq&VhWLKS$ljtJ%`3QOj} zZUr7wRbEjMQXaQVcwDF`Ll_#}BL)@t1m}Gxe3I|;b}@z%S}TPo?#H@IYmHTS5|0kK z3ZFX87y1;1r*(K{l6O8m0Vj3%46mh}XGQQVd6b}A@;DJ@yWq3rgqEi895+{i=QX(k zF9=gFQg}&+Q^M5g3HY22XJR6__jv*Ysq}IMUeVzTM9}7oj=xtn`QV~O=iBXlH-e_ z>V|KKsJ_XflC^Xd&a%_B3f~fuoulw=9lj$X`|bq1rNb0ij7<+rqZK@ozsIdq;5@_T z`@+Hug&*kfLt)`Z6L3L?AJ1a*6M@a!75J$RKTELr`8+niNU-^3g3YfIY<`_!b1}i@ zH{^9KP2SMtI2Xsc_N=y~`Q9^IPv3*LI`(AiUQ3rsx7S=tJ35C3w_S26U35piT=&&2 zyQZIg>Dcy-v@(6o`TtIxIr`YZU-$2ue!~0r)cJp$-Es87h3UWi_T=>B@b9Pl5BzZ| z`^tqK&h9_&cy0B?X}0L*yBp7K$I52U%ETV(u|HZ8 TBspNyS*?+aH=!1j7qb5Yt1NSu diff --git a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/data/pickle_module_info.txt b/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/python_env.yaml b/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/requirements.txt b/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/3/581cf34366f74ee7b90b18f0a606ddf8/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/code/train.py b/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/code/train.py deleted file mode 100644 index 1538383..0000000 --- a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/code/train.py +++ /dev/null @@ -1,98 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -import mlflow -from mlflow.models.signature import ModelSignature -from mlflow.types.schema import Schema, ColSpec -from tqdm import tqdm - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(5, 3) - self.fc2 = nn.Linear(3, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=epoch) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - batch_size = 10 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(5), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=batch_size) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('train_fortune_predict_model') - - # start a new MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - mlflow.log_param('batch_size', batch_size) - - # create a signature to record model input and output - input_schema = Schema([ - ColSpec('float', 'age'), - ColSpec('float', 'mood level'), - ColSpec('float', 'health level'), - ColSpec('float', 'hungry level'), - ColSpec('float', 'sexy level') - ]) - output_schema = Schema([ColSpec('float', 'fortune')]) - signature = ModelSignature(inputs=input_schema, outputs=output_schema) - - # log trained model - mlflow.pytorch.log_model(model, 'model', signature=signature) - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/MLmodel b/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/MLmodel deleted file mode 100644 index 88edd89..0000000 --- a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/MLmodel +++ /dev/null @@ -1,21 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 1334c03425a6454fafce1db8fa3a2428 -run_id: 5c8b249efc724568aca1b8a4d8750b43 -signature: - inputs: '[{"name": "age", "type": "float"}, {"name": "mood level", "type": "float"}, - {"name": "health level", "type": "float"}, {"name": "hungry level", "type": "float"}, - {"name": "sexy level", "type": "float"}]' - outputs: '[{"name": "fortune", "type": "float"}]' -utc_time_created: '2023-02-22 02:46:24.939018' diff --git a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/conda.yaml b/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/data/model.pth b/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/data/model.pth deleted file mode 100644 index 6d3534f2ebafa49f927444e67ca9df12cf80fd18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3795 zcmbVPdyo`I8K2p`J75BLfC(r;a*-J461cqwcOc{zIg%rBU|EKsW8!5pJ2QK|?%d3N zJ3SnyY#!q79Z5_~f}#<_;rkH*-;c-xb@$xe-cn1I z^w!i&cYlxme&6rw?#*h+7D-yZT)L*UOE*j7f#Z59$D&quspyRiua+KaXip?;+Y2J6 zRIrPl+g& zlWyPdM(2^|hVffDz`F`0tI$$`RzpDz(-cCc32g?80S7E*7nX%aC-(b$b_@&*I(fUd z&)Syn?a8@)*5Ho*+`ypg^bPD7faMtqD|AqrMPcTxkSb#FX6Vw8S`-(26HzL#QYCF< znX!!fbpnhFRvC9fzoI>W+v$#Xk>H!52mzUV|yE_QNQJE1*Za=|Z9)a_`t zh8W3wL17 z;5G`K1~OF&T`v!}SK(d87VM>tgl;)Z9V=LY>A3z_sx(PS;HRh?QghtPd%;ACmXQ+O zrAgRKI5d#a#zQRvd)t_s|(8aMITl4TdI zF&A^SB@^e)x5in2EAl|_FJJK3KsVVOWirjv#B0MHFVRWUc0Esl6#D9^LNA3r9r~Lo z#&n#gLLDQwk^Tw{RA5jgTM^fle8CV|UcAEXdzD! zft^M>pD0csk*&z1Yb`P?~VIg!h*7r`Nd#Ma5}hK#n4!QmP_NH!BqTZir# zpA?z>T4XrF%zZ$I4|X9f4IMs2?#^Uz?|Mjwhsieba0NbGfl-!wjcn&gu~g5;^9aGL znq*goEM$xfWeB4BC_xl0k|iS~TZNnsc8GvD43JeUA7>Q0F5kRDDX5K`Btcy4eRMtguI=Ln7{P#%S_3RH(kFgu6!%JONFASi}# zlv|!K)-lV4(9B1kXD*R}V;MpH7`Rw*k}H1HSj!aWr%K3kVfSNv`na)%P4ff7bTGPj zw!&v0Gd8eUFR+|?kwqhqbFn8x*w=^!xSa`SPjb1B3(V%r;{+f41k&u<gpzx_fSa(USwFb}Q(IMC1 zg_C@tFH$(A!>6Zt=QC4qT8Gc_TFMoy5I#qqBIuSpLxkC0c!@lxB`JKKo2$YZO|HTh zgsGP)oYi4Qm^wEFU)14C5fR+`G68~A`brhPs>9capv~9Gu?!JJ_y!Rf|0WT+{T30) zdxePPe4B`ToadE**O9zyQQQ_oxS+N2O*Dw;;^0Ls8Rf`rgk|PC75HvlX1=GAlMPYz z!S_W}KVVVGTCxT|WT$Hlek3CMF@>M#@KX`lt5fhZ9WIeZZ2Dmqt>BS-nOmvCYYdy8 z3k!1;exbuJg@r3q@GBjDJ&(=n0-N7d;kP>cF2?5fi`cvoWAld?n?J_b{3*uf%@~`j z50cq3>jCn+41eK%|80pblQJoXZmvW#O#4RBk8N_pG`mV%9WwhvlnJ(|DB(G z+}@L}-FH`-E&7hs=!$!=ve|RJMJx4-?j0F!ix+*gW5XrwFNby|FaPrrv-i^9&;FO4 z-R!xZy`A;;`bLHaZxDok-G4HD_Vupx)6QRqnEzLwf9w4J?Z5xV{qMVak;i>-_u2oj z>m7TV$GuA06UTj&9SVUzGCXvHfyboiS6I|-9*`w)nxWs_)k<%OLi?<+W1v| z;U7|?Zaq5~s*CM3l6+A&)zhe1&x56!`|&PXr`g-6S)akBnrD`3_BCqO=U}PkM(o!4 z>~GYp$B$hb7Tc)>%{XIOt*vcKJijTqbwQH-Z(wcyZL%8?wzaW6)MJ0NB#3jsrn6cr M7jHu?CNE_F2eJQhdjJ3c diff --git a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/data/pickle_module_info.txt b/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/python_env.yaml b/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/requirements.txt b/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/3/5c8b249efc724568aca1b8a4d8750b43/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/code/train.py b/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/code/train.py deleted file mode 100644 index 5e1ed6e..0000000 --- a/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/code/train.py +++ /dev/null @@ -1,96 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -import mlflow -from mlflow.models.signature import ModelSignature -from mlflow.types.schema import Schema, ColSpec -from tqdm import tqdm - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(5, 3) - self.fc2 = nn.Linear(3, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=epoch) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(5), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=10) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('train_fortune_predict_model') - - # start a new MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - - # create a signature to record model input and output - input_schema = Schema([ - ColSpec('float', 'age'), - ColSpec('float', 'mood level'), - ColSpec('float', 'health level'), - ColSpec('float', 'hungry level'), - ColSpec('float', 'sexy level') - ]) - output_schema = Schema([ColSpec('float', 'fortune')]) - signature = ModelSignature(inputs=input_schema, outputs=output_schema) - - # log trained model - mlflow.pytorch.log_model(model, 'model', signature=signature) - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/MLmodel b/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/MLmodel deleted file mode 100644 index 620ce39..0000000 --- a/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/MLmodel +++ /dev/null @@ -1,21 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 3f51fe9a1b40461d8c445f37695d72e2 -run_id: 7f0b13a30b10483589f7ca922050e721 -signature: - inputs: '[{"name": "age", "type": "float"}, {"name": "mood level", "type": "float"}, - {"name": "health level", "type": "float"}, {"name": "hungry level", "type": "float"}, - {"name": "sexy level", "type": "float"}]' - outputs: '[{"name": "fortune", "type": "float"}]' -utc_time_created: '2023-02-22 02:43:39.269378' diff --git a/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/conda.yaml b/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/data/model.pth b/artifacts/3/7f0b13a30b10483589f7ca922050e721/artifacts/model/data/model.pth deleted file mode 100644 index 83522b1dd24b82c908e0ed3b0436a13ea5cf7c7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3795 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 O(OS898)`9mA^SfvRB=K8 diff --git a/artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/data/pickle_module_info.txt b/artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/python_env.yaml b/artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/requirements.txt b/artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/3/936ba15a1bf74591a10e1711133f4be4/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/code/train.py b/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/code/train.py deleted file mode 100644 index 6848e44..0000000 --- a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/code/train.py +++ /dev/null @@ -1,96 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -import mlflow -from mlflow.models.signature import ModelSignature -from mlflow.types.schema import Schema, ColSpec -from tqdm import tqdm - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(5, 3) - self.fc2 = nn.Linear(3, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=i) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(5), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=10) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('train_fortune_predict_model') - - # start a new MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - - # create a signature to record model input and output - input_schema = Schema([ - ColSpec('float', 'age'), - ColSpec('float', 'mood level'), - ColSpec('float', 'health level'), - ColSpec('float', 'hungry level'), - ColSpec('float', 'sexy level') - ]) - output_schema = Schema([ColSpec('float', 'fortune')]) - signature = ModelSignature(inputs=input_schema, outputs=output_schema) - - # log trained model - mlflow.pytorch.log_model(model, 'model', signature=signature) - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/MLmodel b/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/MLmodel deleted file mode 100644 index 5eaec8b..0000000 --- a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/MLmodel +++ /dev/null @@ -1,21 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: eb6ac492a8a5426d815dce50de4d2545 -run_id: 9ea595f0043a477bb635754b7f77fa48 -signature: - inputs: '[{"name": "age", "type": "float"}, {"name": "mood level", "type": "float"}, - {"name": "health level", "type": "float"}, {"name": "hungry level", "type": "float"}, - {"name": "sexy level", "type": "float"}]' - outputs: '[{"name": "fortune", "type": "float"}]' -utc_time_created: '2023-02-22 02:26:27.043234' diff --git a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/conda.yaml b/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/data/model.pth b/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/data/model.pth deleted file mode 100644 index 97c3aff2d7ee9c8353a215e85e9858300e1dd750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3795 zcmbVP?UNKo8K2p`JIDm?;3Px=$pwTA25#^6UVso5bHqh6uv~_q6XH3}&dgq~J2$h> zP7lW^8-uue5R(vNOngDY8RL6QG|`yEta`q`#1N~jl$Pa(R!PT}wEGga?FErj zF4`r}?QQy2%n7UHnqkTHTpIYM?O9={fTY@{nU9JdE&8UZ(5bSkfNUhuf6k?luxU`S zNw4qsqVvde!}zTn;#~!jHE63syP=?lX$m3JgbstnfCCn@3(G>I2m5`y^MgBwhSOqUnju0V5PAYdp(X@DEe-X)e{yc%AVWfyHUmR@I@zsN~wp#+5?^Ol8b(kqHb5K zHN;33BHyOPz*k_E+FEoDS^?~8?qWZt@h$`!x@+(@9oDFttV#HjwKgqjn>J3{q2l`N zLxJmzA&h}aR6Z%qo=(hOOw7(mvP6@!7uy`!!CvB|WVVZb!bysLha(-4V6D-Cx}Jr} z?T72@@OB;Eq2{!9Evd;A)~QB2PKQz1t-yMcAYDcR`@RnwxZXho&8omVIU5RgKWvP@ z(r^QX9s`*wg|1hC8*8x1*p9u_(a^1gsS`yjFdf$)PnD-A3H%gwLuyWV1uvLP(F#(c zw>$-#Ntd>oT*qB?%AInz4DTYi$Spc-HLgKxW}IgeZmNO0jlwn^-d%;8RpVMdTej?y zHSS`rw&&v9`PKyM??4_1{uPQI8|WpQqg<|ans{xv6J2kPK8|s0za>*@3vO;0uPx^5PZlG+LjPmgw03&0tKlU;11$oP3E4sZ3?^TgS3fa)o8`{7U3@TKCEYHx~_5ufL z@ID>hA4PSzqptVyGA;y_Nvq<3Mpmf=%Ot_eB!TSRkGxTFfmjk3rIYgPj9itejI|Me zv+?BIw~Uo=kTL6!4!K+n4y$A%XFhihqnyYU*Nfmzg2dLzjfRZ2Pr#8n+(kAMOWNRaPK;%!#!k>+*5@QRbhQY_VT@qCzI zR!y=eN9Hp|_T~tp`VoRCT4a=D$!HDoI@los;xIr~vV54K7f?na2Dm#0g{TVSbs#9P z?GzNN@KII3%8IP$k3;E<$Wz&>pccjI1kbhu&vW_a6)J}-j$3h^+lw~lWCB_5i^|DI zg#wcf2pcRL>zR8W4-VWc!eU5WpW?Z}Wf<)N7M&wFqCjN~!WvK=BEjrD)+@`WNrIph z!f|eS(pbwZ7eliUd7imQ22SJz^<&^-#VM}%F{7I)&P|n(=fdvC`SeL+HJj!Kgy~>( z@obgP-fOI5vtD31%_0j%KEcKA6JcK_7T|U!oSouwpA?wQmB(p5_$j2><;SPTH&sRK ztqRmIZS^WltE6;>cwFy{%D2Qxw>VBHoQ+MG5iNS5Vpd#sq&Vh$LKV2bg$U*-3@YaF zv;v=2RbEjcQXaQVctEHqSqzOH5rYam$a&uf5Al88E=O=q>!R@Romh8Ct-TJP!J|X2 z!y{+;LO)C4Q5`;ahIbyDhR1dIJg=pE(F)-U33weTxE952F@$HdcD{)Q5nUL3R!c^Casy$R`Cb*i-;|l>RC0Dn zRB3o#MD+s}m8>P}@I!XG*5L&a*^el^sKZMlvX`gf$2z=1mSQsi4YYzs@=v&x8vK-D z^D|*#mcq|<_=T|W%W3$P4!@qm<~IVH-`3!FI{ZGy<_`uFrI2`8F()9k0)Qw9G*GUxb(Lu^VYpmM!&ErbLyY#Uh)5Ypt1h>)0vHL zyxF+p($m7Sq$GuXzEspy*I}`#xJF@pG1CL2Dps=W4zc7B3-9*_ls>$p%|DULtmh4)zxbds} z{6D0ny3Oohs4ld}k>m@yslKI}%{*AFc@XcSO`82nHJdZISo8d1&Gb^u<{T{6+<@IC zp94!ZoAG1UhK2U%yk?xSQLUq6dpy4}xno|E{cm7x?rpLg5w`Bw9_q0_S`x%LVAG>o NI~VUjEhaBy{|7AOZfO7j diff --git a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/data/pickle_module_info.txt b/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/python_env.yaml b/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/requirements.txt b/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/3/9ea595f0043a477bb635754b7f77fa48/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/code/train.py b/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/code/train.py deleted file mode 100644 index 6848e44..0000000 --- a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/code/train.py +++ /dev/null @@ -1,96 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -import mlflow -from mlflow.models.signature import ModelSignature -from mlflow.types.schema import Schema, ColSpec -from tqdm import tqdm - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(5, 3) - self.fc2 = nn.Linear(3, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=i) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(5), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=10) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('train_fortune_predict_model') - - # start a new MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - - # create a signature to record model input and output - input_schema = Schema([ - ColSpec('float', 'age'), - ColSpec('float', 'mood level'), - ColSpec('float', 'health level'), - ColSpec('float', 'hungry level'), - ColSpec('float', 'sexy level') - ]) - output_schema = Schema([ColSpec('float', 'fortune')]) - signature = ModelSignature(inputs=input_schema, outputs=output_schema) - - # log trained model - mlflow.pytorch.log_model(model, 'model', signature=signature) - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/MLmodel b/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/MLmodel deleted file mode 100644 index 85b1864..0000000 --- a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/MLmodel +++ /dev/null @@ -1,21 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: d240fe9348c24d1f871506e8d1155f56 -run_id: ab28ca803756454881d83e7e85945df0 -signature: - inputs: '[{"name": "age", "type": "float"}, {"name": "mood level", "type": "float"}, - {"name": "health level", "type": "float"}, {"name": "hungry level", "type": "float"}, - {"name": "sexy level", "type": "float"}]' - outputs: '[{"name": "fortune", "type": "float"}]' -utc_time_created: '2023-02-22 02:26:30.657849' diff --git a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/conda.yaml b/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/data/model.pth b/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/data/model.pth deleted file mode 100644 index 017488d9adfd6dee0197964542679b76c8505cf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3795 zcmbVP>v!Bn6_<8xCsh+W32j1~kZzhjWRiH-kJu*3y3{T%LCMBd8W1f(XeF&@Sy|e< z8pSqbLrd6oQUZmx&<7z+TH3Vb(ei%UwC0%>3gH7^d-za3aQMVO0C#3&d+nUfIb`$x=WP201=PytD`O*0=AJzDflQ=!vkR{_~bqW_#rAz{;?Vv{c4 z??UI1=Z5iHImo*TBx}%8g;qmB4bv1trU`8Zivb5LW*1h4Mhg2GXJF9jbu#$$_St>T zV7|{9?CBqH`v(iV3;BLnouhD_4ob5q%z_nCMJ(P7T^dr0;)1UyN)^_qq>ZdHR&l>h zfN{ZE;|}bl9Jf&P-ISFIixXwfP5EwAu{?ay$)Hk7aadE(9xu7*7b)s?G+RTAWFhix zS`2&z)~U@!7oZiuuIDaBFpc*k(6FHf@6q7~Rg*Odf3nu1C2iBjX**P0pM5BBqp=%f zpc0jjOYUfu>LOOf#6@E=&^w=vOUV>nx~1^hC5NF)28iuo&ss~m8n5Dg&rMxn<>V0T%bY& zBl}2i6?RvlUnRQ`*EM{>5LsTl!T~;nCDvt{G2sS{4lZT+et@(_YK6G+4^&}~(atAI zlSpJM@+ceMn~RM$jP1*@3LtB9F+f=UVN_x9XPZS3lUW2kM3frbrNaknaJR9E`E1xg z%rMHwdjJd{g^}3DxEJItkFDsQDtt&q7Aa&)Q*USkOE9QV1x9&>7Pc3-w+0{9VSg0W z;UjfD!^^l3R3@#80~%SU5-gJhFOvkacLaH(;sUWG&P&JT`3rJYrZUz>{LRLb3*RzU z!U4vtgF57LH8`Y_t(^JXIgD{4S6nZG`v?+SC)*4eZBN1BI^0jT6HVKQ?iimGnf+R1 zIKs?*RELjsA}tLaK2CPza=3Rrpu>Ztk33j~PgLP3%e_VhI8rRt3-NrCU{+1CH%AsT zMzT4AsD6qdiWV6oqhzcGc^&K!0dW{0Ygse?(D^VFtMF-6 zz{-lO=#N9`l*m)rs-PCd>IBcW1J85$<`pW3Dvn!moqLKl=41j{?~BUGM}-2D4hS18 z8=IMX9}f=PEW%<)U7zB)!DSfj0hXO3IHEx1D1+4c9^X_Iv9~Hv!?e|_ zFr$*vDdKUxQ!3vQC*9&Wp>R4jVMes*g^F2m*^%OyiwRZWktQOTqcEtL$9fd_qN?(W z3X$@-Wx^SuqKsl_^spFI;7gqM8Tc~a=k0O?k7^whzH%SdT~ceU!&mX>kn8Z+X}-|M zDLkRW*G}=y*Jt2K9iHN~lrLH#JWU=U=$4!z!fZD@Lmt(V6u!aD)!?iq*WjDN)Hw>z z>Tq6|x-bLJ>F|6+1oys0fFPA#sKJXmTqJ@vFOjJn5kz>Ih>X8NL~g%LMDo5vL~_1M zL_WU9D*>+~1=pguEr#%_*2*{0AfiiyuW89BPi`SBGvBYm4;nJ_LzSFf5mgWTNJRBx z7L}|e>+lnHy4K;RBC?-R__+?h5Rv_I27aZ(ELn+7FU+A8Jd%ISt<>OkhRqwo!aRlF z=mL8d99#4uZF6cLRyKRCwrHhs(cPoNZSkVtOk{^P?fKVS_MaDrn7xr#p6Xy{H+!yT zZ%?DWp3&j{YXsr!_S$UcV;AS%n0hPA{QvjF8TbG8-+S%;-yYh*;|9N{i(T*7(>(6A z(%o^~$Jn6|_@l$wYYaRlMX$o5zI<-{2)l{0XH1jXYwWN4xLot>a?PHVnvFSFuDJ!f4L*BUYBu7> zt_@4=iABvgV`Exd+s=4?YjW43B>UgM+QQppHzI5sVtc5^{%A=M=YUO*X{}tm4YioO Gko_MD&1tm& diff --git a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/data/pickle_module_info.txt b/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/python_env.yaml b/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/requirements.txt b/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/3/ab28ca803756454881d83e7e85945df0/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/code/train.py b/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/code/train.py deleted file mode 100644 index 23336bc..0000000 --- a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/code/train.py +++ /dev/null @@ -1,96 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -import mlflow -from mlflow.models.signature import ModelSignature -from mlflow.types.schema import Schema, ColSpec -from tqdm import tqdm - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(5, 3) - self.fc2 = nn.Linear(3, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=epoch) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-3 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(5), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=10) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('train_fortune_predict_model') - - # start a new MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - - # create a signature to record model input and output - input_schema = Schema([ - ColSpec('float', 'age'), - ColSpec('float', 'mood level'), - ColSpec('float', 'health level'), - ColSpec('float', 'hungry level'), - ColSpec('float', 'sexy level') - ]) - output_schema = Schema([ColSpec('float', 'fortune')]) - signature = ModelSignature(inputs=input_schema, outputs=output_schema) - - # log trained model - mlflow.pytorch.log_model(model, 'model', signature=signature) - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/MLmodel b/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/MLmodel deleted file mode 100644 index 0086e38..0000000 --- a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/MLmodel +++ /dev/null @@ -1,21 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 2d856775bf3840668e99c8a230c6c663 -run_id: ac13f624d0114ca494441db540b6629c -signature: - inputs: '[{"name": "age", "type": "float"}, {"name": "mood level", "type": "float"}, - {"name": "health level", "type": "float"}, {"name": "hungry level", "type": "float"}, - {"name": "sexy level", "type": "float"}]' - outputs: '[{"name": "fortune", "type": "float"}]' -utc_time_created: '2023-02-22 02:43:17.551796' diff --git a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/conda.yaml b/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/data/model.pth b/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/data/model.pth deleted file mode 100644 index 601cc6831f8c48748ecfe2af2dc6f756455fb238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3795 zcmbVPTXfvS8J2c!Cy2yOQV0doU`R`ql6ZYfa1z@Thc2`Vi&01sP@`%kt!G(T+Fu&Q zahol-?mD+ZX=$M4mXts*fd*(B2uYS=+7jp$-uu`-^sT24?P*{7&x~xZowGTonLRqv z%>0-6zyJGZW=FMjizF>wDxKHbrOTv=z;V5dV^OQCT=KFbE2MiDwTDu+?FF$@F4`r} z?P~Z|%n7UHno-I1TpIYM?O9QzfTY@{nU9MeE&8UZ(5bSkfNZ4Ef6k?lvS|?7q|5ia z(0S~+QSw%9=UoNTRcNU|tD&HVX$m3Jgf@f4fCCn@3rixS6Z^e(eoObjmOj^U2l}@- zwzb*mDLCDmdj=dg@AUV<(j0|LbWoZ_VHT{2Dq`_wCcQ7W)ZC2eGhv4s0| z0*nim8`op6({T$$-|e(IqvAx_b31)E4lNH~bTSA_ogCIqXit`0^otaAJDRN_L9!70 zHZ2Ce0xQ(!qO;HnU{`V%+cAxIA<(d@3ZKy7GF6i`34gNIqNQ!q#%ViJT%Ua?aJjJw zW1te1_ewL5re=<$W{yg-MAI`zS{&KIUTUvowu*krNsE4)Bkh!6wb6#Uo`uQnfh%h8 zNgb|Kb6TsG)?^A-sYWYKM{(H=;cAj19YzZKz7K1--VOxK3gJ_n4F$Ug)+S%Qa1Dh{ z1DPsCu2+C-t8ksM0ehKUksC&tJw+=p9oHYvl&2^O{0wy?YEF0sFPO~G5Gm1Bo`Q9x zLt9BM=dRl2c6pTypC-7-&**TyaS2*8lRTU7*(#{(DXiDwa}~HjH7@0|Wy>yE<1XfE zLoUgkZ%wfNM&yCuU!mx+fiAKx&gGh?iPwfZQKnO-?RuU98T8d%g&qpMI`lPDOz1dE zg$73UlfDXUs=#KIY(!j_@dZO{dC3ZI7MqWbqF*iy$Gh2zr<(Rk%rq&sX7Q;|k`p zVFNLvIG^kRFfs<)6CdMVkheUxqFXBP1r=GOkTp%cp$#m-AfyUpd4^`U7r3<3bQlTA>3PS)mdvlN2wL6tZ_a@+(-J!eHHjh1;$wJHF6_Iilursp8E-A)g;?; zWG-W5C`S<0uM$MjBBLZrMyrt5!Hy6RhXJyj<-?4;fHDd(z}+z@#1$B?0YQQF4@0p6 z52ylGR%Atg97_8{p2}8;S`@1jJlhUD&*hs}q}&lYZs2m6MMP1tuL3 zHdr>UX6}7FIB>IwiV<~visuHGVYCNWaE{=J0^t}$RiHY=g4ubjSC&tc1VJf+-Q4n| zv6@*fMrI-QJad5z?8yo0C%`3&Q(Wbsri0NXvlTx3 z4dW^{>jjq6C^B#4K`!=?2>U#-0Jk&Y>|rkVh`?;NJRaqP-$a_7e|&m;Q&q&?sz4Rf zR;$3YN=o~P$MyE9d`p~ki{pgC{=|eC)1ntCX6Ujb#WCj+s=$FJBABBn2+iHS3LI2b zUQrQJ9=A+5Bvh0vhDLXaK?T0WdEX6>@qOMd$MCq;LE+nXV%?>+)*3v4M~7U4@9gIb z{Vs(kb@<*s-Z?xCPwDV9ucds^is1X?0719p5D{j3;0NS!EluGWZmtT?YH}5x6Q-W0 z@PZCUgsG#`@IxJ5jEUghF#-gs^imaG*5OA)(B{WvPmTy8{Dg>%|CET_9w#DsuMm-( zSBc2S&v+%^b)?{06t~3)PH3%s6AfZIKlqxKj`QRi!ZP!E1>R`L%+FP_e^FGu@Cy;u zFIiNwmaf4`cDmN!O%d5!6i(^zwutQXG@Q}lELn_AAJowb9?9=;D^>Uv!{%LKVTQtc zI{aE#_{}u@R)_azu{kHO`Jf6P>hQY+o8Ql4^M?eRKPK4xDZ%E?2{s=k*nCV*Xle4A zCdc_W&UcM!OO|HW{bl@Cyw$O1wCS~UnRHXbwKUV69ocr?rF799^+Mg#uRk+*aQL?R zn}-j+ed58R^?yEavi?{4!tm*Tyi(s(`*`rmm(JDyZJ(?knjAaRdFqL?$KQB=xNr5- zL(lbpFw7SH;fqse2eGo*bD>2mjf?Kdjxz2^QCHPVt@ixxJ1m7n{E zv{<*19Sqg^_7swQUN_UdShJA_3pID(U9>^7XR&5u1{Z2RyHK-tv1Vfq7HY1+ZiCOh z#hQ)yv1`M8dvZ=Q$=ImY*0v#;Uz^@IC&~Udur~WP*^LO>s>B}Zu|HZ8BspNyqgpE$ LZ$m96FJ%7*&W3l` diff --git a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/data/pickle_module_info.txt b/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/python_env.yaml b/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/requirements.txt b/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/3/ac13f624d0114ca494441db540b6629c/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/code/train.py b/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/code/train.py deleted file mode 100644 index 1538383..0000000 --- a/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/code/train.py +++ /dev/null @@ -1,98 +0,0 @@ -# train.py -# -# author: deng -# date : 20230221 - -import torch -import torch.nn as nn -from torch.optim import SGD -import mlflow -from mlflow.models.signature import ModelSignature -from mlflow.types.schema import Schema, ColSpec -from tqdm import tqdm - - -class Net(nn.Module): - """ define a simple neural network model """ - def __init__(self): - super(Net, self).__init__() - self.fc1 = nn.Linear(5, 3) - self.fc2 = nn.Linear(3, 1) - - def forward(self, x): - x = self.fc1(x) - x = torch.relu(x) - x = self.fc2(x) - return x - - -def train(model, dataloader, criterion, optimizer, epochs): - """ define the training function """ - for epoch in tqdm(range(epochs), 'Epochs'): - - for i, (inputs, labels) in enumerate(dataloader): - - # forwarding - outputs = model(inputs) - loss = criterion(outputs, labels) - - # update gradient - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # log loss - mlflow.log_metric('train_loss', loss.item(), step=epoch) - - return loss - - -if __name__ == '__main__': - - # set hyper parameters - learning_rate = 1e-2 - batch_size = 10 - epochs = 20 - - # create a dataloader with fake data - dataloader = [(torch.randn(5), torch.randn(1)) for _ in range(100)] - dataloader = torch.utils.data.DataLoader(dataloader, batch_size=batch_size) - - # create the model, criterion, and optimizer - model = Net() - criterion = nn.MSELoss() - optimizer = SGD(model.parameters(), lr=learning_rate) - - # set the tracking URI to the model registry - mlflow.set_tracking_uri('http://127.0.0.1:5000') - mlflow.set_experiment('train_fortune_predict_model') - - # start a new MLflow run - with mlflow.start_run(): - - # train the model - loss = train(model, dataloader, criterion, optimizer, epochs) - - # log some additional metrics - mlflow.log_metric('final_loss', loss.item()) - mlflow.log_param('learning_rate', learning_rate) - mlflow.log_param('batch_size', batch_size) - - # create a signature to record model input and output - input_schema = Schema([ - ColSpec('float', 'age'), - ColSpec('float', 'mood level'), - ColSpec('float', 'health level'), - ColSpec('float', 'hungry level'), - ColSpec('float', 'sexy level') - ]) - output_schema = Schema([ColSpec('float', 'fortune')]) - signature = ModelSignature(inputs=input_schema, outputs=output_schema) - - # log trained model - mlflow.pytorch.log_model(model, 'model', signature=signature) - - # log training code - mlflow.log_artifact('./train.py', 'code') - - print('Completed.') \ No newline at end of file diff --git a/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/MLmodel b/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/MLmodel deleted file mode 100644 index e71b91f..0000000 --- a/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/MLmodel +++ /dev/null @@ -1,21 +0,0 @@ -artifact_path: model -flavors: - python_function: - data: data - env: conda.yaml - loader_module: mlflow.pytorch - pickle_module_name: mlflow.pytorch.pickle_module - python_version: 3.10.9 - pytorch: - code: null - model_data: data - pytorch_version: 1.13.1 -mlflow_version: 1.30.0 -model_uuid: 1b7647843b35448d915254eda4751ed8 -run_id: b2961f1b13a84398b7d7ee5be03ab0da -signature: - inputs: '[{"name": "age", "type": "float"}, {"name": "mood level", "type": "float"}, - {"name": "health level", "type": "float"}, {"name": "hungry level", "type": "float"}, - {"name": "sexy level", "type": "float"}]' - outputs: '[{"name": "fortune", "type": "float"}]' -utc_time_created: '2023-02-22 02:46:21.578911' diff --git a/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/conda.yaml b/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/conda.yaml deleted file mode 100644 index 758a169..0000000 --- a/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/conda.yaml +++ /dev/null @@ -1,11 +0,0 @@ -channels: -- conda-forge -dependencies: -- python=3.10.9 -- pip<=23.0.1 -- pip: - - mlflow - - cloudpickle==2.2.1 - - torch==1.13.1 - - tqdm==4.64.1 -name: mlflow-env diff --git a/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/data/model.pth b/artifacts/3/b2961f1b13a84398b7d7ee5be03ab0da/artifacts/model/data/model.pth deleted file mode 100644 index 688a91dc08b274d570d4d581c406d978fb0d7d4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3795 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 diff --git a/artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/data/pickle_module_info.txt b/artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/data/pickle_module_info.txt deleted file mode 100644 index 31b9e7e..0000000 --- a/artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/data/pickle_module_info.txt +++ /dev/null @@ -1 +0,0 @@ -mlflow.pytorch.pickle_module \ No newline at end of file diff --git a/artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/python_env.yaml b/artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/python_env.yaml deleted file mode 100644 index 8080c14..0000000 --- a/artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/python_env.yaml +++ /dev/null @@ -1,7 +0,0 @@ -python: 3.10.9 -build_dependencies: -- pip==23.0.1 -- setuptools==67.3.2 -- wheel==0.38.4 -dependencies: -- -r requirements.txt diff --git a/artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/requirements.txt b/artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/requirements.txt deleted file mode 100644 index f5c794c..0000000 --- a/artifacts/3/e8b7a070f5ff48c69c5b945d1fe2f392/artifacts/model/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlflow -cloudpickle==2.2.1 -torch==1.13.1 -tqdm==4.64.1 \ No newline at end of file diff --git a/mlflow.db b/mlflow.db deleted file mode 100644 index 89104ce2031ae1d481003f0e1285998a3f4c0263..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978944 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�Zp*8g)ixnFf> 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ξ%UA(nuiShwK�p7F- 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

-vp^#q%6Tb)E)LZHIRC?6kHPI1GUuWMY= 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 diff --git a/service/backend.db b/service/backend.db new file mode 100644 index 0000000000000000000000000000000000000000..1c803d3b3902a31e0a84a9100a7a69fb5adda85b GIT binary patch literal 135168 zcmeI)&2QW09l&wXjwM@; z=Ml;0^LyU-F!Ac$g5{XT=1ya)>KKc$lQB(;{nRjGvDmzLo)^zi@f;A(E8=-fJX;T~ z^`_73eC$dsHY74=<1b`3-FxZt4U!N*009ILKmY**5I_I{1Q0;rB@2A(+?d#-HvV-? z{N;fF0tg_000IagfB*srAb;DJ`n4%$o00IagfB*srAbE_|Brr*DIo#~Aba!fB(NW{`Z*p z%L4%f5I_I{1Q0*~0R#|0009IdB5*<*xOi=8X<@0lxir7|{SA53pX>jK1eanUfB*sr zAbxIIsksR5sZkg@Gg{$)^xzXNfHfm+IA|T4DN25w%MpC=dy712j1bFs?)UFXK}5yvEfu4OPt<~ z{H=U(O`e#!y%FBzpX&p&VOu-f?Vb1~sau<7?NP06R&1yGVMl4I4aeH7)|^VSVYR=y z&??TuU9%yMFG?d$TAV@dR<1m2Y?yV^F+0v9TPm)ul`|rnA<=j58+Xe2+nMtF#!Bve zW2O}dw`{?@b|rk4*|&4q6=Np6IbSqprp4J>56tOVW7R?VWPzom_UUbqw#k1f`6ZyPs8YfaUc%-WlI4m2>%9Md>qRs@5r^oV%GT=Ze|fsE22)7p{bfG3*%_}NH9xd$$83mpy|p76Rz>s{cB9+IV}V-KHH)lEQ}@kBQ|($LJJvwA z`=DBH?)OHb1NC~)K(8sg$H14Ay4UTv9es{_4zq^bsoO=U4bI)DwzKdaMQii&l#0gs zon<+=)T(x^x?v_$({IG}>t}maWjXj%((>m-=JmL~KG!p2$X9+Vyy?u|F+HKr&1p}U zx(2EvNcQQz0TRXP81zESwT4-B#8?s@Y3fy53>3Q?)h@mNhH2Lt)~@_oJLv7G_KRD1 zoM;DYy_mndp7Vns$Y1M6E^BKgEq|VR^2;;s1mWqT>m|3z=gEM|l-%S_5Dr&QTccUK ztbMvkaj0H3v$dO!+SyJB)KF2Qlz~+AsHgk&sQUwl+n6iq(1!87)G2rHc;*crq2$oV z69K`f%fSsEumkypnYt)wMxmWydCIa zN_>Jc?Pn|$zgc9q)d5djqZ(FY0}}=t~6TZ)WgkH zN%FC~e(&W>@j_j~)q%L4ztF35-9IzYGbkSh#lSi&2iLKo#n|}33-LPo+33$lN+YKe zpC&#S`f})Z$Nqe*IQXxD7ekxlpUIr==hVNjZUgGjaXer1p_={P2PO&m&!q7|tpWwKRxTWxVmb8aXEK0vtC#;rst;vJF#rBZnSNPb%{bQQ#5*I zQ-)ZtSiRax`;2D|dH7j(WkxQC%^L0n*sS3l(OW?A7B~EJkc%7hvqrjesiIZVz$%5< zsJ4b=>iT!$dMVW_l)+kDNe4fl-E%G^^i)dw_=4L%1yh5cUJHgfnD{cI?XC+dF;r_t zC~j&}ORHzSP=Xma`Cc(??eJB^Y^q<(ymbM8O-IbBf}hVl8#(XB>^HaFm<3aVpWX<@ zESTuVtp8NlKZn+mWS|LkpXZ9n@nJ7sdo9}5nvI5B8kJX<%CucwC2q&OwLmOmr>y^q zA<(N;f#u%?e;4i|qZmAFTRniftGcy)zvCE6eG0&K)F){y`T=jy$)9|k2+Q+ zI@d?CnbmA&IhRajjkx|^x>w^5o|ZfM1}l?$y*jyf@2!NMPHWG0IxCc$qjNvs4pgkp z^uu4L9=<~MjE5+AM@*CztNx+cPgP?SD6!~|gCUk0)aL^ga&zjb5Fthce2V?`={iv+~F%dmf$y z1Q0*~0R#|0009ILKmY**5Qu;P|NlP%L8J%>AbAbciM)(1%d literal 0 HcmV?d00001 diff --git a/service/registry.db b/service/registry.db new file mode 100644 index 0000000000000000000000000000000000000000..cbed633449584eaa572dfd8bd4c82dda24296469 GIT binary patch literal 118784 zcmeI)O>Y~=8NhL_EiEZZvK%|gMp1(=#4QTLvW>RKew7|tG`I9i6gj0QUwZ4QKrfxy7iwln%4$Rwi{fuUB6oIncJ}wo z&daXgt$U?r$FUzAwD;;A`+DMH!Y~p)vF$`6F(-cB7C+%XxjhkXh)+ZLKJ4pU;@w7K zQf8j}x6Jdp|1m5(=?EZz00IagfB*srAbERS?I;lmrRKWAbK5UPU!0tg_000IagfB*srAb`La1bF{H22_ef009ILKmY** z5I_I{1Q0+VW&*tbk6A#d4gv@ufB*srAbL7ps0tg_000IagfB*srATS02-v5sQl_C*9009ILKmY**5I_I{ z1Q3Xs0Pp`}77(g~00IagfB*srAbRw&8*&7$=c=0wq4#Sm6q-F)T4T<>-2WtSXo)g%4DUW z=B`~VZx=QSRqep_N_lI$nisnwXRRGRwC`4nKh0M^vo{N$*%_|}%WAIXu6L3X!TUy<sI*$*PecCSVFcASi0Q;TxT7=nHS^z-DuLT({egaUvh8_ zkDRvKJlO9Q9$aCo`M_yBZnT`5D;j9uRf;n=AJiM2TDRTo9l9D`=5gabZfCM`O7oKL z(KZ#v!n#%q%6h&ezwDGZ%au>d z^6TAd<>SKo_ENU*96oVayuam@yd~0Z@01F+NqWRXGqf-=v1e?;|7f4ls=MOeKHRMj=s0#Ax6y7M%ENlM zes7FXA{4D{-~BGD=G})o<>I}af}Qaa(%JlkY3*Da>J`1pS}uAfckICz;L`Nd*nfb<;k+W9VXq#&?UfNo-lL}oO*Co>zEb^Y zH>>Ol#_WN|ji$Sbg!aZc(<)vW7TV*QxwV|KabC;@QgTKxn|heId_I+!`+D}zv%i}8 zVEUiaQ|Z5_e>Y{O{+4phzogzZ-=Dl>PEY*td}?Cv408w$MIgokNB0+!RxW2eKk&LY zZ*-^yGdXWT(Vy}?t+VUj|LUD%3Yx1S<~N>n__tUA)mloe}AK z)fI@J= zSnm(`hxK-S&z0l8xAO2e7lZH=%eM7o*bmYCa!NzR_rX*V0k;n0)c91s>gM=y>tJo+xBzDMoLNh_N* zUVPsRlb%oCdP57FzVFm)|2w5hUOW#_o(afxqFBo99V&}OF}VykwY*JNEKm1sv7Raw z@?~vT7=hD-U#t76nnADt3C=Iq9xKas&RoJwKqWM6=395~L}u=fGyj8 zJMx$M{&Ry7wX9F(OzZl*;VO+nKE~_y1#;u!faaiOl5IgIC=Frh!bvMd@93QTJ@@p% ztoMxT*)^{T$TazLK?}Z2IdzW_u0DDzxlr>oce*&!uqcJae8+CSIAdBrUmJF7L>GR+ zI6N?U_UOmcNo#G*cz)S48<=Te;*6#`Fw3iFPiLMX4La{IbUC@{1NRcOF*Ul94p!i@ zVMZrIH`6EerP{*s2zU-pt!4HH*s+iHZ zuKLI}Jclwd(_H%+kv=t+6;a3DGc}_RQl@q9>ag4Sc*!5!$dQC8{{BD4i&CnF00Iag zfB*srAb1W7RnAbOy6aHtvr2q1s}0tg_0 z00IagfB*s`65#LuM+8YR2q1s}0tg_000IagfB*sr#8`m$|1k~@RYL#)1Q0*~0R#|0 N009ILKwv}y{{ge>`icMm literal 0 HcmV?d00001 diff --git a/start_mlflow_server.sh b/start_mlflow_server.sh index 138101f..564b436 100755 --- a/start_mlflow_server.sh +++ b/start_mlflow_server.sh @@ -4,4 +4,4 @@ # author: deng # date : 20230221 -mlflow server --backend-store-uri sqlite:///mlflow.db --default-artifact-root ./artifacts --port 5000 \ No newline at end of file +mlflow server --backend-store-uri sqlite:///service/backend.db --registry-store-uri sqlite:///service/registry.db --default-artifact-root ./service/artifacts --host 127.0.0.1 --port 5000 --serve-artifacts \ No newline at end of file