Skip to main content

The package provides an interface for working with the https://jointml.ru/ platform.

Project description

Joint-ml

Данный пакет помогает реализовать удобный интрерфейс для использования вашей модели в федеративном обучении на нашей платформе.

Установка

Устанавливаем joint-ml с помощью pip:

pip install jointml-client

Создание клиента

Требования

Для установки и запуска проекта, необходим Python>=3.8.0

Шаг 1: Создаем модуль

Создайте python файл, который называется "client_methods.py" в корневом каталоге вашего git репозитория:

client_methods.py

Шаг 2: В файле client_methods.py необходимо реализовать методы: load_model, get_dataset, train, test:

Метод 1: load_model:

Метод для генерации модели.
На вход будут подаваться параметры, указанные на сервисе как Init Parameters. Обязательные параметры, которые необходимо учитывать разработчику ML:
init_parameters - параметры, которые разработчик ML указывает на сайте в разделе Init Parameters
Возвращает: (nn.Module) - модель.

def load_model(n_features, hidden_dim) -> nn.Module:
    model = Net(n_features, hidden_dim)
    return model

Метод 2: get_dataset:

Метод для чтения, предобработки и разбития датасета(with_split=True).
На вход будут подаваться dataset_path, with_split, а также параметры, которые разработчик ML укажет в коде как необходимые(специфические для каждого отдельного пользователя) Тут описывается вся логика предобработки датасета. Обязательные параметры, которые необходимо учитывать разработчику ML:

  • dataset_path(str) - путь до csv-файла с датасетом;
  • with_split(bool) - булева переменная, говорящая о необходимости разбития датасета на выборки(train, valid, test). Если True, тогда следует после предобработки данных разбить их на одну из следующих выборок - (train, test), (train, valid, test). Если False, тогда требуется лишь предобработка данных и возвращение лишь подготовленного датасета ( в дальнейшем будет использоваться для получения предсказаний модели на данных пользователя).

Возвращает один из следующих кортежей:

  • (torch.utils.data.Dataset, torch.utils.data.Dataset, torch.utils.data.Dataset) - возвращается при with_split=True. В будущем используется как train_set, valid_set и test_set
  • (torch.utils.data.Dataset, torch.utils.data.Dataset) - возвращается при with_split=True. В будущем используется как train_set и test_set
  • (torch.utils.data.Dataset) - возвращается при with_split=False. В будущем используется как test_set(выборка для тестирования модели на весах)
def get_dataset(dataset_path: str, with_split: bool, test_size: float, shuffle: bool) -> Union[
    Tuple[torch.utils.data.Dataset, torch.utils.data.Dataset, torch.utils.data.Dataset],
    Tuple[torch.utils.data.Dataset, torch.utils.data.Dataset], Tuple[torch.utils.data.Dataset]]:
    transactions, labels = load_dataset(dataset_path)
    if with_split:
        x_train, x_test, y_train, y_test = train_test_split(transactions, labels, test_size=test_size, shuffle=shuffle)
        x_train, x_test = preprocess_data(x_train, x_test)

        train_set = TransactionsDataset(x_train, y_train)
        test_set = TransactionsDataset(x_test, y_test)

        return train_set, test_set
    else:
        x_test = preprocess_set(transactions)
        test_set = TransactionsDataset(x_test, labels)
        return test_set

Метод 3: train:

Метод для тренировки модели, полученной из метода load_model.
На вход будут подаваться: модель, сгенерированная методом load_model, train_set полученный из метода get_dataset, valid_set(опционально) полученный из метода get_dataset(если возврат выборки предусмотрен разработчиком ML в методе get_dataset), а также параметры, которые разработчик ML укажет в коде как необходимые(специфические для каждого отдельного пользователя).
Обязательные параметры, которые необходимо учитывать разработчику ML:

  • model(nn.Module) - модель, полученная из метода load_model;
  • train_set(torch.utils.data.Dataset) - тренировочная выборка, полученная из метода get_dataset;
  • valid_set(torch.utils.data.Dataset) - валидационная выборка, полученная из метода get_dataset; Подается на вход только если в методе
  • get_dataset предусмотрено получение валидационной выборки и ее возврата;
  • train_parameters - параметры, которые разработчик ML указывает на сайте в разделе Train Parameters.

Возвращает (List[Metric], nn.Module) - кортеж состоящий из:
1. Список метрик полученных в ходе обучения;
2. Обученной модели.

def get_dataset(dataset_path: str, with_split: bool, test_size: float, shuffle: bool) -> Union[
    Tuple[torch.utils.data.Dataset, torch.utils.data.Dataset, torch.utils.data.Dataset],
    Tuple[torch.utils.data.Dataset, torch.utils.data.Dataset], Tuple[torch.utils.data.Dataset]]:
    transactions, labels = load_dataset(dataset_path)
    if with_split:
        x_train, x_test, y_train, y_test = train_test_split(transactions, labels, test_size=test_size, shuffle=shuffle)
        x_train, x_test = preprocess_data(x_train, x_test)

        train_set = TransactionsDataset(x_train, y_train)
        test_set = TransactionsDataset(x_test, y_test)

        return train_set, test_set
    else:
        x_test = preprocess_set(transactions)
        test_set = TransactionsDataset(x_test, labels)
        return test_set

Метод 4: test:

Метод для тестирования модели на данных.
На вход подается model, полученная из load_model; return_output и булева переменная, говорящая о необходимости возврата выхода из модели на данных; test_set - тестировочная выборка, полученная из get_dataset, а также параметры, которые разработчик ML укажет в коде как необходимые(специфические для каждого отдельного пользователя). Обязательные параметры, которые необходимо учитывать разработчику ML:

  • model(nn.Module) - модель, полученный из метода load_model
  • test_set(torch.utils.data.Dataset) - тестировочная выборка, полученная из метода get_dataset
  • return_output(bool) - булева переменная, говорящая о необходимости возвращать ответы модели
  • test_parameters - параметры, которые разработчик ML указывает на сайте в разделе Test Parameters

Возвращает один из следующих кортежей:

  • (List[Metric]) - метрики полученные в ходе тестирования модели на данных;
  • (List[Metric], list) - метрики и ответы модели полученные в ходе тестирования модели на данных(только если return_output=True).
def test(model: torch.nn.Module, test_set: torch.utils.data.Dataset, return_output: bool) -> Union[
    Tuple[List[Metric]], Tuple[List[Metric], list]]:
    test_loss = 0.0
    model.eval()
    loss_fn = BCELoss()

    test_dataloader = DataLoader(test_set)

    outputs = []
    labels = np.array([])

    for i, data in enumerate(test_dataloader):
        transactions, label = data['transaction'], data['label']

        transactions = transactions.reshape(transactions.shape[0], 1, transactions.shape[1])
        output = model(transactions)

        loss = loss_fn(output, label)

        test_loss += loss.item()

        outputs.append(output.cpu().detach().numpy().reshape(-1))
        labels = np.hstack([labels, label.cpu().reshape(-1)])

    test_loss /= len(test_dataloader)

    test_loss_metric = Metric(name="test_loss")
    test_loss_metric.log_value(test_loss)

    test_roc_auc_score = roc_auc_score(labels, np.array(outputs))

    test_roc_auc_score_metric = Metric(name="test_roc_auc_score")
    test_roc_auc_score_metric.log_value(test_roc_auc_score)


    if return_output:
        return ([test_loss_metric, test_roc_auc_score_metric], outputs)
    else:
        return ([test_loss_metric, test_roc_auc_score_metric])

Выкладываем код с реализованным классом Сlient в GitHub

Необходимо выложить готовый клиент в открытый GitHub репозиторий в ветку с именем master

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jointml_client-0.1.7.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

jointml_client-0.1.7-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

Details for the file jointml_client-0.1.7.tar.gz.

File metadata

  • Download URL: jointml_client-0.1.7.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.11 Linux/6.4.2-060402-generic

File hashes

Hashes for jointml_client-0.1.7.tar.gz
Algorithm Hash digest
SHA256 91b985bd341e936bc3d7065a89b62e34096e776988f3e3b02318b19994e86bb7
MD5 c390d4b5a29ca24256ed735e8c4a6de7
BLAKE2b-256 f472c78a2d9dd1f1f56c7b1f24c2c23681da75e9baef6ff6182103cc1c1ecafd

See more details on using hashes here.

File details

Details for the file jointml_client-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: jointml_client-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.11 Linux/6.4.2-060402-generic

File hashes

Hashes for jointml_client-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 768fe9d896f2502654209c69e69625dbaf9c1edcb1775de5f9604f745dcc9b4c
MD5 199fea8835d9c40c9a15def2f0be6530
BLAKE2b-256 53ed288fa43988b25b6a60a4515443dcafe19f5667fd553667dd67e08d18d017

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page