From e1c2b82109beedfa87a4746656effe68c0116e8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A8=B1=E7=99=BB=E5=82=91?= Date: Tue, 21 Feb 2023 14:15:39 +0800 Subject: [PATCH] init --- .../artifacts/model/MLmodel | 16 ++ .../artifacts/model/conda.yaml | 11 ++ .../artifacts/model/data/model.pth | Bin 0 -> 3987 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 0 -> 3923 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 0 -> 3923 bytes .../models/data/pickle_module_info.txt | 1 + .../artifacts/models/python_env.yaml | 7 + .../artifacts/models/requirements.txt | 3 + .../artifacts/cls_model/MLmodel | 16 ++ .../artifacts/cls_model/conda.yaml | 10 ++ .../artifacts/cls_model/data/model.pth | Bin 0 -> 3923 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 0 -> 3923 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 0 -> 3923 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 0 -> 3923 bytes .../models/data/pickle_module_info.txt | 1 + .../artifacts/models/python_env.yaml | 7 + .../artifacts/models/requirements.txt | 3 + .../artifacts/cls_model/MLmodel | 16 ++ .../artifacts/cls_model/conda.yaml | 10 ++ .../artifacts/cls_model/data/model.pth | Bin 0 -> 3923 bytes .../cls_model/data/pickle_module_info.txt | 1 + .../artifacts/cls_model/python_env.yaml | 7 + .../artifacts/cls_model/requirements.txt | 3 + env.yaml | 141 ++++++++++++++++++ mlflow.db | Bin 0 -> 417792 bytes predict.py | 21 +++ start_mlflow_server.sh | 7 + train.py | 79 ++++++++++ 53 files changed, 546 insertions(+) create mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/MLmodel create mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/conda.yaml create mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/model.pth create mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/pickle_module_info.txt create mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/python_env.yaml create mode 100644 artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/requirements.txt create mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/MLmodel create mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/conda.yaml create mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/data/model.pth create mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/data/pickle_module_info.txt create mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/python_env.yaml create mode 100644 artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/requirements.txt create mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/MLmodel create mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/conda.yaml create mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/data/model.pth create mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/data/pickle_module_info.txt create mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/python_env.yaml create mode 100644 artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/requirements.txt create mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/MLmodel create mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/conda.yaml create mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/data/model.pth create mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/data/pickle_module_info.txt create mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/python_env.yaml create mode 100644 artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/requirements.txt create mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/MLmodel create mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/conda.yaml create mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/data/model.pth create mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/data/pickle_module_info.txt create mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/python_env.yaml create mode 100644 artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/requirements.txt create mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/MLmodel create mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/conda.yaml create mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/data/model.pth create mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/data/pickle_module_info.txt create mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/python_env.yaml create mode 100644 artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/requirements.txt create mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/MLmodel create mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/conda.yaml create mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/model.pth create mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/pickle_module_info.txt create mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/python_env.yaml create mode 100644 artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/requirements.txt create mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/MLmodel create mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/conda.yaml create mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/data/model.pth create mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/data/pickle_module_info.txt create mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/python_env.yaml create mode 100644 artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/requirements.txt create mode 100644 env.yaml create mode 100644 mlflow.db create mode 100644 predict.py create mode 100644 start_mlflow_server.sh create mode 100644 train.py diff --git a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/MLmodel b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/MLmodel new file mode 100644 index 0000000..485433f --- /dev/null +++ b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/MLmodel @@ -0,0 +1,16 @@ +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 new file mode 100644 index 0000000..758a169 --- /dev/null +++ b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/conda.yaml @@ -0,0 +1,11 @@ +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 new file mode 100644 index 0000000000000000000000000000000000000000..6fd0894419065de9229e86c8419ca28e6661b2f6 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/pickle_module_info.txt b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/pickle_module_info.txt new file mode 100644 index 0000000..31b9e7e --- /dev/null +++ b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/data/pickle_module_info.txt @@ -0,0 +1 @@ +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 new file mode 100644 index 0000000..8080c14 --- /dev/null +++ b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/python_env.yaml @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..f5c794c --- /dev/null +++ b/artifacts/0/24469fc083d6470a9cad7f17a6eeeea0/artifacts/model/requirements.txt @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..d6e755a --- /dev/null +++ b/artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/MLmodel @@ -0,0 +1,16 @@ +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 new file mode 100644 index 0000000..5b6a717 --- /dev/null +++ b/artifacts/0/2820b379bfc945358bfd516e5577846c/artifacts/cls_model/conda.yaml @@ -0,0 +1,10 @@ +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 new file mode 100644 index 0000000000000000000000000000000000000000..ba660cc47e252e22b7f0c1e156aef1776472cf70 GIT binary patch literal 3923 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 Cezji! literal 0 HcmV?d00001 diff --git a/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/data/pickle_module_info.txt b/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/data/pickle_module_info.txt new file mode 100644 index 0000000..31b9e7e --- /dev/null +++ b/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/data/pickle_module_info.txt @@ -0,0 +1 @@ +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 new file mode 100644 index 0000000..8080c14 --- /dev/null +++ b/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/python_env.yaml @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..4bb0870 --- /dev/null +++ b/artifacts/0/3ef01a1e3e3d4ba2be705da789bbb8e1/artifacts/models/requirements.txt @@ -0,0 +1,3 @@ +mlflow +cloudpickle==2.2.1 +torch==1.13.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 new file mode 100644 index 0000000..906ebf2 --- /dev/null +++ b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/MLmodel @@ -0,0 +1,16 @@ +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 new file mode 100644 index 0000000..5b6a717 --- /dev/null +++ b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/conda.yaml @@ -0,0 +1,10 @@ +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 new file mode 100644 index 0000000000000000000000000000000000000000..f9d21af9413989459ee92dc32b95e94d79bb0b89 GIT binary patch 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 literal 0 HcmV?d00001 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 new file mode 100644 index 0000000..31b9e7e --- /dev/null +++ b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/data/pickle_module_info.txt @@ -0,0 +1 @@ +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 new file mode 100644 index 0000000..8080c14 --- /dev/null +++ b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/python_env.yaml @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..4bb0870 --- /dev/null +++ b/artifacts/0/63c7363339e042f4848d9041ba8deb82/artifacts/cls_model/requirements.txt @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..136582e --- /dev/null +++ b/artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/MLmodel @@ -0,0 +1,16 @@ +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 new file mode 100644 index 0000000..5b6a717 --- /dev/null +++ b/artifacts/0/6845ef0d54024cb3bdb32050f6a46fea/artifacts/models/conda.yaml @@ -0,0 +1,10 @@ +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 new file mode 100644 index 0000000000000000000000000000000000000000..2973f376095b4af45b9482bb6d34678a47572ead GIT binary patch literal 3923 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 F{{VO}xorRd literal 0 HcmV?d00001 diff --git a/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/data/pickle_module_info.txt b/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/data/pickle_module_info.txt new file mode 100644 index 0000000..31b9e7e --- /dev/null +++ b/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/data/pickle_module_info.txt @@ -0,0 +1 @@ +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 new file mode 100644 index 0000000..8080c14 --- /dev/null +++ b/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/python_env.yaml @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..4bb0870 --- /dev/null +++ b/artifacts/0/68e8a3cbbafa46538ebb8a60d80f185d/artifacts/models/requirements.txt @@ -0,0 +1,3 @@ +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 new file mode 100644 index 0000000..2870be5 --- /dev/null +++ b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/MLmodel @@ -0,0 +1,16 @@ +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 new file mode 100644 index 0000000..5b6a717 --- /dev/null +++ b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/conda.yaml @@ -0,0 +1,10 @@ +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 new file mode 100644 index 0000000000000000000000000000000000000000..c77aaa4b863dfbcc3c08e2bddd3d0be88a50601f GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/pickle_module_info.txt b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/pickle_module_info.txt new file mode 100644 index 0000000..31b9e7e --- /dev/null +++ b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/data/pickle_module_info.txt @@ -0,0 +1 @@ +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 new file mode 100644 index 0000000..8080c14 --- /dev/null +++ b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/python_env.yaml @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..4bb0870 --- /dev/null +++ b/artifacts/0/8ba27f225a7442be8816977c2077c510/artifacts/models/requirements.txt @@ -0,0 +1,3 @@ +mlflow +cloudpickle==2.2.1 +torch==1.13.1 \ No newline at end of file diff --git a/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/MLmodel b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/MLmodel new file mode 100644 index 0000000..8f35ba0 --- /dev/null +++ b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/MLmodel @@ -0,0 +1,16 @@ +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: aaa800b217da4dd0b8f17e8dbfdc5c45 +run_id: f1320882f24c4f489cbf85159627eaf8 +utc_time_created: '2023-02-21 05:34:08.242864' diff --git a/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/conda.yaml b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/conda.yaml new file mode 100644 index 0000000..5b6a717 --- /dev/null +++ b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/conda.yaml @@ -0,0 +1,10 @@ +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/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/data/model.pth b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/data/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..b93925fe9bf66eb55a858323181a40ef7ec7eac3 GIT binary patch literal 3923 zcmb7HZEzLU8NPdy8{$GDL<9=>5lhQWg?#c+G`lB;WfAl?PH{>Qv zoMDrld(S!V`=0YY&-0#hZkJq98H-g{$F6y5V>4rYu3_3uhEDaye6QWvF+J8j;n@|> zW^LCu@>aIjHXF;ni&~%FYieGvX`9q_w5+Xro(QpIR?{-RWmC)1G?DJen<5Bm163Oi#XyW=Cr;v>gnLX1|79IG@016%Q(F)b0c z<3>f;t}||ON<%BFyn3Gf!IPCd(vjCqVaZ;nkvF$i8 zm-{_nIi_BKd7RQ*wgu)#-&)}o3b(2#x0q+zIk+u=+to$bYTE3X1+QtlrMsG8Iz3JK z9hA6E6E!`m_1QVw?Qfz5t%EL0#_godO#m5=82Y_Hy9B3EBXN8CAjA8X%vmCT%FvyMfi-cP3|r-=*P?90;~ zTGq5}5f(Qn&=^1yg=Pg>CUcB5H7bQNS+$auBD57@Ns`=&xK85>24AddLy^e9mhp&qO?3*`SK!sQLW_zz5Rxn(|wz={uSvcXj$J~X)fa_+}d!lJmKzi z1Qyn_=NA|j?UQ8_2|ENJMZ^Fk1?~ypOX_SEv1~`sJUe!b3~}YspfM5hHvwlPv_feVD9BlaM!Zcbc@P3F4^{#P4flJy}iG2cRpE z@eqnELV-4F4I@MIY?m@EF|>^>VERSK4L}dtG&~NZ2v#!0lvSJM^uX4^kfgj`Krf1A z3ccB^YuhH@#XNC+!7vM^vC7IKAvVgtFRZDIpUW|8hpl%js2$8 zLnsVJAvB*_wkK)@lbtPwc9l>O_D*7g9C>a*+tw<=H^a8r>Ln ziZH~5-waRj4L_Ur;c2;*!u}0dbO~7;fN$a%A`HNRy?mhuDSS(TX9juW&>nbJf#-NR zWh~u;!(=bPX~{kkhHZgwlc(hbg(Ey%0ME-p0N)8ieV4*f1-=)CI<^OnEAV}vgxY(7 zxF>pW zQWp7c>iTr7^OT(MGvpS+m^od9m&=%WB}oP+WYr2k53_oeWhKao0r&+wW(VN4Ftalh zeyPCOFtgY9z^@cIM2r>=C>g> z7Xx@(flCoK?~GydZiLP6B5dA^u(=#z^ZN*!_sK~)K~BknpYi=nW0yRo`u+n=3vb3d z8hg7Yy<|>{wUk{lo0>a27GHD4oN(hD-`pjvD5aiTBVD?Dp!C=G_LZzFFQl$ipOI#q zs7qb^WS#V9?QH53S}(13ACo@5v~~EAmFI^4GH<#xv^y_#o;;HJ+u@+pa(=h8RvVOF zURPI2e>hu;&;D@uOz#Eh;nV5T&{Oj8>vN{IPknVxNw!X>&YWG_{;!Ysm1-}nlN#Q& zO4_DflKgh6^!K_uO8={#oqDEXpERphm-aRcNhe-=Qo8TZp?3Md3rl~pc9rV4RZ6GM zA1%Q}b5swLHK7P01Hu8osh& zsPyqaf^!W=7IQ5AkXiG=br8#~5ar?Vq< zoe7Uazq`9lWN5#Cv}ZHBM6!~QnP_Qp)Ps9Nm?vfMSyb8UTeQ5iC9;L6R literal 0 HcmV?d00001 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 new file mode 100644 index 0000000..31b9e7e --- /dev/null +++ b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/data/pickle_module_info.txt @@ -0,0 +1 @@ +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 new file mode 100644 index 0000000..8080c14 --- /dev/null +++ b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/python_env.yaml @@ -0,0 +1,7 @@ +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 new file mode 100644 index 0000000..4bb0870 --- /dev/null +++ b/artifacts/0/f1320882f24c4f489cbf85159627eaf8/artifacts/cls_model/requirements.txt @@ -0,0 +1,3 @@ +mlflow +cloudpickle==2.2.1 +torch==1.13.1 \ No newline at end of file diff --git a/env.yaml b/env.yaml new file mode 100644 index 0000000..2cd7e7f --- /dev/null +++ b/env.yaml @@ -0,0 +1,141 @@ +name: torch +channels: + - pytorch + - conda-forge +dependencies: + - alembic=1.9.4 + - aom=3.5.0 + - appdirs=1.4.4 + - bcrypt=3.2.2 + - blinker=1.5 + - brotlipy=0.7.0 + - bzip2=1.0.8 + - ca-certificates=2022.12.7 + - certifi=2022.12.7 + - cffi=1.15.1 + - charset-normalizer=2.1.1 + - click=8.1.3 + - cloudpickle=2.2.1 + - colorama=0.4.6 + - configparser=5.3.0 + - cryptography=39.0.1 + - databricks-cli=0.17.4 + - docker-py=6.0.0 + - entrypoints=0.4 + - expat=2.5.0 + - ffmpeg=5.1.2 + - flask=2.2.3 + - font-ttf-dejavu-sans-mono=2.37 + - font-ttf-inconsolata=3.000 + - font-ttf-source-code-pro=2.038 + - font-ttf-ubuntu=0.83 + - fontconfig=2.14.2 + - fonts-conda-ecosystem=1 + - fonts-conda-forge=1 + - freetype=2.12.1 + - gettext=0.21.1 + - gitdb=4.0.10 + - gitpython=3.1.31 + - gmp=6.2.1 + - gnutls=3.7.8 + - greenlet=2.0.2 + - gunicorn=20.1.0 + - icu=70.1 + - idna=3.4 + - importlib-metadata=5.2.0 + - importlib_resources=5.12.0 + - itsdangerous=2.1.2 + - jinja2=3.1.2 + - jpeg=9e + - lame=3.100 + - lcms2=2.14 + - lerc=4.0.0 + - libblas=3.9.0 + - libcblas=3.9.0 + - libcxx=14.0.6 + - libdeflate=1.17 + - libffi=3.4.2 + - libgfortran=5.0.0 + - libgfortran5=11.3.0 + - libiconv=1.17 + - libidn2=2.3.4 + - liblapack=3.9.0 + - libopenblas=0.3.21 + - libopus=1.3.1 + - libpng=1.6.39 + - libprotobuf=3.21.12 + - libsodium=1.0.18 + - libsqlite=3.40.0 + - libtasn1=4.19.0 + - libtiff=4.5.0 + - libunistring=0.9.10 + - libvpx=1.11.0 + - libwebp-base=1.2.4 + - libxcb=1.13 + - libxml2=2.10.3 + - libzlib=1.2.13 + - llvm-openmp=15.0.7 + - mako=1.2.4 + - markupsafe=2.1.2 + - mlflow=1.30.0 + - ncurses=6.3 + - nettle=3.8.1 + - numpy=1.24.2 + - oauthlib=3.2.2 + - openh264=2.3.1 + - openjpeg=2.5.0 + - openssl=3.0.8 + - p11-kit=0.24.1 + - packaging=21.3 + - pandas=1.5.3 + - paramiko=3.0.0 + - pillow=9.4.0 + - pip=23.0.1 + - pooch=1.6.0 + - prometheus_client=0.16.0 + - prometheus_flask_exporter=0.22.0 + - protobuf=4.21.12 + - pthread-stubs=0.4 + - pycparser=2.21 + - pyjwt=2.6.0 + - pynacl=1.5.0 + - pyopenssl=23.0.0 + - pyparsing=3.0.9 + - pysocks=1.7.1 + - python=3.10.9 + - python-dateutil=2.8.2 + - python_abi=3.10 + - pytorch=1.13.1 + - pytz=2022.7.1 + - pywin32-on-windows=0.1.0 + - pyyaml=6.0 + - querystring_parser=1.2.4 + - readline=8.1.2 + - requests=2.28.2 + - scipy=1.10.0 + - setuptools=67.3.2 + - six=1.16.0 + - smmap=3.0.5 + - sqlalchemy=1.4.46 + - sqlparse=0.4.3 + - svt-av1=1.4.1 + - tabulate=0.9.0 + - tk=8.6.12 + - torchaudio=0.13.1 + - torchvision=0.14.1 + - tqdm=4.64.1 + - typing_extensions=4.4.0 + - tzdata=2022g + - urllib3=1.26.14 + - websocket-client=1.5.1 + - werkzeug=2.2.3 + - wheel=0.38.4 + - x264=1!164.3095 + - x265=3.5 + - xorg-libxau=1.0.9 + - xorg-libxdmcp=1.1.3 + - xz=5.2.6 + - yaml=0.2.5 + - zipp=3.14.0 + - zstd=1.5.2 +prefix: /Users/xiao_deng/miniforge3/envs/torch diff --git a/mlflow.db b/mlflow.db new file mode 100644 index 0000000000000000000000000000000000000000..91119ac1885be75f7c5eb457c0443d1455e54132 GIT binary patch literal 417792 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 literal 0 HcmV?d00001 diff --git a/predict.py b/predict.py new file mode 100644 index 0000000..cfd8b35 --- /dev/null +++ b/predict.py @@ -0,0 +1,21 @@ +# predict.py +# +# author: deng +# date : 20230221 + +import torch +import mlflow + + +if __name__ == '__main__': + + # set MLflow server + mlflow.set_tracking_uri('http://127.0.0.1:5000') + + # load production model + model = mlflow.pytorch.load_model('models:/cls_model/production') + + # predict + fake_data = torch.randn(10) + output = model(fake_data) + print(output) \ No newline at end of file diff --git a/start_mlflow_server.sh b/start_mlflow_server.sh new file mode 100644 index 0000000..f3377f5 --- /dev/null +++ b/start_mlflow_server.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# start_mlflow_server.sh +# +# author: deng +# date : 20230221 + +mlflow server --backend-store-uri sqlite:///mlflow.db --default-artifact-root ./artifacts \ No newline at end of file diff --git a/train.py b/train.py new file mode 100644 index 0000000..9ad05b7 --- /dev/null +++ b/train.py @@ -0,0 +1,79 @@ +# 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') + + print('Completed.') \ No newline at end of file