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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file jointml_client-0.2.1.tar.gz
.
File metadata
- Download URL: jointml_client-0.2.1.tar.gz
- Upload date:
- Size: 9.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.2 CPython/3.10.6 Linux/6.2.0-36-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2dafdfd18da0888b46441dacf1dfe3430031ecd3edee111d44d739209d55bf1b |
|
MD5 | 034c480f5e623b7a4321cff10fc90aa7 |
|
BLAKE2b-256 | 2f59db366fd522ae60e3480b2ffa87d84b29794d13b576ad0b0dc3cb7010f099 |
File details
Details for the file jointml_client-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: jointml_client-0.2.1-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.2 CPython/3.10.6 Linux/6.2.0-36-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e3a4840d27cfacd61d10c548e88a964b17b09e51516f5358576c23fed85127b1 |
|
MD5 | 0e30afa7e6eca77435904e1cf6bb4de4 |
|
BLAKE2b-256 | c24d7f5af985373cfa2933c254c7cd723c126d83f1571387f4842975c27ec654 |