From e1f143736ed00ea540ea5b48f57688cb680e6c25 Mon Sep 17 00:00:00 2001 From: deng Date: Tue, 18 Apr 2023 17:13:15 +0800 Subject: [PATCH] update service data --- .../artifacts/code/train.py | 98 ++++++++++++++++++ service/backend.db | Bin 180224 -> 184320 bytes 2 files changed, 98 insertions(+) create mode 100644 service/artifacts/3/f1b7b9a5ba934f158c07975a8a332de5/artifacts/code/train.py diff --git a/service/artifacts/3/f1b7b9a5ba934f158c07975a8a332de5/artifacts/code/train.py b/service/artifacts/3/f1b7b9a5ba934f158c07975a8a332de5/artifacts/code/train.py new file mode 100644 index 0000000..efa0f3b --- /dev/null +++ b/service/artifacts/3/f1b7b9a5ba934f158c07975a8a332de5/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:5001') + 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/service/backend.db b/service/backend.db index 911cccfbd95b7aa0e8f20bfe8e94673129e8bbd7..cf2904399f914ef5c3226e1aa7d314e79a7de356 100644 GIT binary patch delta 7278 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 ZV@uRt2