In this walkthrough you will learn to serve a multi-part PyTorch model with Seldon. +* +*
s2i build . seldonio/seldon-core-s2i-python3:0.10 kubeflow/tts_encoder
docker run --name "EncoderServe" --rm -p 5000:5000 kubeflow/tts_encoder
| """ Use torchMoji to predict emojis from a single text input | |
| """ | |
| from __future__ import print_function, division, unicode_literals | |
| import examples.example_helper | |
| import json | |
| import csv | |
| import argparse | |
| import numpy as np |
| !allennlp train babi_train_meta.jsonnet -s /tmp/serialization_dir --include-package allennlp.training.metatrainer |
| class AttendDiagnose(nn.Module): | |
| def __init__(self, number_measurements, filter_number): | |
| super().__init__() | |
| self.d_model = filter_number*number_measurements | |
| self.embedding_conv = nn.Conv1d(number_measurements, filter_number*number_measurements, 1) | |
| self.pe = PositionalEncoding(filter_number*number_measurements) | |
| # embed_dim and attention_heads | |
| self.masked_attn = nn.modules.activation.MultiheadAttention(filter_number*number_measurements, 8) | |
| self.norm = nn.modules.normalization.LayerNorm(self.d_model) | |
| self.final_layer = nn.Linear(self.d_model, 1) |
| class SimpleTransformer(torch.nn.Module): | |
| def __init__(self, n_time_series, seq_len, d_model=128): | |
| super().__init__() | |
| self.dense_shape = torch.nn.Linear(n_time_series, d_model) | |
| self.pe = SimplePositionalEncoding(d_model) | |
| self.transformer = Transformer(d_model, nhead=8) | |
| self.final_layer = torch.nn.Linear(d_model, 1) | |
| self.sequence_size = seq_len | |
| def forward(self, x, t, tgt_mask, src_mask=None): | |
| if src_mask: |
| # ML Core | |
| scikit-learn==0.22.1 | |
| pandas==1.01 | |
| torch==1.40 | |
| tb-nightly==2.2.0 | |
| # Graphs and param management | |
| seaborn==0.10.0 | |
| future==0.18.2 | |
| wandb==0.8.25 | |
| # GCP dependencies |
| @TrainerBase.register('metatrainer') | |
| class MetaTrainer(Trainer): | |
| def __init__(self, | |
| model: Model, | |
| meta_model: MetaModel, | |
| optimizer: torch.optim.Optimizer, | |
| iterator: DataIterator, | |
| train_datasets: List[Iterable[Instance]], | |
| validation_datasets: Optional[Iterable[Instance]] = None, |
| FROM pytorch/pytorch:1.4-cuda10.1-cudnn7-devel | |
| COPY requirements.txt /tmp/ | |
| RUN pip install -r /tmp/requirements.txt | |
| ARG url | |
| RUN git clone -n https://github.com/example/example_repo | |
| RUN git checkout 543231 |
| def train_epoch_loop(data_loader:DataLoader, opt:torch.optim, model:PyTorchForecast, takes_target:bool, forward_params={}) | |
| i = 0 | |
| running_loss = 0.0 | |
| for src, trg in data_loader: | |
| opt.zero_grad() | |
| # Convert to CPU/GPU/TPU | |
| src = src.to(model.device) | |
| trg = trg.to(model.device) | |
| # TODO figure how to avoid | |
| if takes_target: |
| label = ade_eval | |
| model_type = spert | |
| model_path = data/models/ade | |
| tokenizer_path = data/models/ade | |
| dataset_path = data/datasets/conll04/conll04_test.json | |
| types_path = data/datasets/conll04/conll04_types.json | |
| eval_batch_size = 1 | |
| rel_filter_threshold = 0.4 | |
| size_embedding = 25 | |
| prop_drop = 0.1 |