From 3c8580f0f41e31d258ddb4796193ce18f3466962 Mon Sep 17 00:00:00 2001 From: deng Date: Sun, 26 Feb 2023 05:10:58 +0800 Subject: [PATCH] update data storage --- .../artifacts/code/train.py | 98 ++++++++++++++++++ .../artifacts/model/MLmodel | 21 ++++ .../artifacts/model/conda.yaml | 11 ++ .../artifacts/model/data/model.pth | Bin 0 -> 3795 bytes .../model/data/pickle_module_info.txt | 1 + .../artifacts/model/python_env.yaml | 7 ++ .../artifacts/model/requirements.txt | 4 + mlflow.db | Bin 974848 -> 978944 bytes 8 files changed, 142 insertions(+) create mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/code/train.py create mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/MLmodel create mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/conda.yaml create mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/model.pth create mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/pickle_module_info.txt create mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/python_env.yaml create mode 100644 artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/requirements.txt diff --git a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/code/train.py b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/code/train.py new file mode 100644 index 0000000..b7f91d2 --- /dev/null +++ b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/code/train.py @@ -0,0 +1,98 @@ +# 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 new file mode 100644 index 0000000..dcbbfa2 --- /dev/null +++ b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/MLmodel @@ -0,0 +1,21 @@ +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 new file mode 100644 index 0000000..758a169 --- /dev/null +++ b/artifacts/3/128f833fc0a2426db86e5073db557a3e/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/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/model.pth b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..f72fedd565dadc882eb9de5b9754fd89bf2042e4 GIT binary patch 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~ literal 0 HcmV?d00001 diff --git a/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/pickle_module_info.txt b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/pickle_module_info.txt new file mode 100644 index 0000000..31b9e7e --- /dev/null +++ b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/data/pickle_module_info.txt @@ -0,0 +1 @@ +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 new file mode 100644 index 0000000..8080c14 --- /dev/null +++ b/artifacts/3/128f833fc0a2426db86e5073db557a3e/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/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/requirements.txt b/artifacts/3/128f833fc0a2426db86e5073db557a3e/artifacts/model/requirements.txt new file mode 100644 index 0000000..f5c794c --- /dev/null +++ b/artifacts/3/128f833fc0a2426db86e5073db557a3e/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/mlflow.db b/mlflow.db index ea1bef1d3c4e0eefe35540105490273decaabb48..89104ce2031ae1d481003f0e1285998a3f4c0263 100644 GIT binary patch delta 6343 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 delta 1345 zcmY*Ye{2**6rP#g+r8bLoxKvSB^Po3q)?ufBZVV?d1{=rlNu3JdQKy4i01vbuc3EIo~tvPr?w&J5>g&0mlcp$1K zHL8Z^?!f0K=#m*hX2dFHJ)&5h$s=d*MNGyMcyt<1h$FaWBTqHrylYp*YS}! zDPG$H>JZKmNsBeU=MgSfXuR%0x<{|lf23Ew8ciBCk@GGb(TK$pbaH1ZUdCNExu6hj z6ZAfCr9r<<{5m{kI%?=91JWD;n!b3ZFWU zT$ven=ci}yFJzfBIn8c>Z zzsj9*gOa5%C8WHiAJRY2m+ArCqdm~hY5RmZBail4w0#o!|M)BvMMxq%t~G$j!%q9I zWXNnF1J3bXetxmW$iT4b6Tviktl-`@<2Pv9O{$*!Hf=Lr^g|^&`!QJsBMu5c}MJ034x3i8in}_wHRK#So=`J)4^4&CByT@T40>nYksO+ zH;c_QElayYhiE4akqY&5?FQ-RTZ*;)D*i61ojnEL_WH>3p!th^1W4Fm}0XojQX%b#(1C&r4(# zl8MwObxMv@A0?sOQucwVJnf(UmeD7BmKrvtE_3HF^`+g7Kvk3WlV;vGhJRjpD>;yXQRCcM%(NSDlXwAsZJ`85IGI+*(?(l zZX#ZOpqUj)(7ld$VPln%4!0*MUS3wfntW6?OOdsNeaWa@f3