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.6.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: jointml_client-0.1.6.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.6.tar.gz
Algorithm Hash digest
SHA256 617e05efc9750dc8a9b132e743568e6fc6aab1673de617c28944860d533e70b1
MD5 a63d081f34417f73c4636eae0276833d
BLAKE2b-256 a28ba66f63b41548d0f0a86d49637c02e793dba84e809bbb5f3f26bc4a7ccd94

See more details on using hashes here.

File details

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

File metadata

  • Download URL: jointml_client-0.1.6-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.6-py3-none-any.whl
Algorithm Hash digest
SHA256 96304cf6a02edcc11b17c3f06ef6aa7e90daf23b6c45e8b840976eb456f86655
MD5 8d54333f1aa28117a5a70cf483ed5a03
BLAKE2b-256 26615e165752fd6635aa759dc186da283fce675fe25a2f192655db0c89ee8aec

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