{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"c0ff85b1-be43-44eb-b38d-d8448d3c180d","name":"Guardora VFL API (актуальная версия)","description":"> **Важно**: для корректного отображения документации убедитесь, что ваш браузер **не использует автоматический перевод текста** и команд на родной язык. \n  \n\n## 🧠Для чего Guardora VFL?\n\n**Guardora VFL** решает задачу вертикального федеративного обучения ML-моделей.\n\nПродукт ориентирован на работу с **табличными данными**.\n\nРеализовано обучение следующих архитектур моделей:\n\n- градиентный бустинг на решающих деревьях\n    \n- линейная регрессия\n    \n- логистическая регрессия\n    \n- softmax регрессия\n    \n\n## 🧩Основные определения и сущности\n\n**Вертикальное федеративное обучение (VFL)** - применяется, когда стороны располагают **разными признаками (фичами)** по совпадающим сущностям. Для обучения модели необходимо и достаточно наличие целевого признака (разметки) только у одной стороны обучения.\n\n**Активная сторона** - инициирует обучение/инференс модели и направляет запросы к другим сторонам. Единственная из всех сторон **обладает значением целевого признака** для сущностей (предсказание которого является целью модели).\n\n**Пассивная сторона** - принимает запросы на обучение/инференс модели от активной стороны, обучает модель на своих данных и передает результаты активной стороне. Пассивных сторон **может быть сколько угодно**. В продукте любая сторона может выполнять роль как активной стороны, так и пассивной.\n\n**Проект** - создается с целью формирования команды (участвующих сторон) и загрузки данных для обучения и валидации модели. В рамках проекта **роль активной стороны** выполняет участник, который **владеет датасетом с целевым признаком**. Другие стороны выполняют роль пассивной стороны. Проект может быть создан любой стороной.\n\n**Задача** - для обучения модели в рамках проекта необходимо создать задачу, выбрать тип модели и установить гиперпараметры. Запустить задачу **может только активная сторона** (как владелец целевого признака). Результатом выполнения задачи является обученная модель.\n\n**Инференс** - для применения ранее обученной модели участвующим сторонам необходимо отметить датасеты для инференса, при этом **набор фич в датасетах должен быть таким же**, как при обучении модели. Запустить инференс может любая сторона. Результатом выполнения инференса являются предсказания модели.\n\n## 📡 Порядок использования API\n\n<img src=\"https://content.pstmn.io/58b29120-590a-4c2b-a6f5-4775257aafb3/VkZMX0FQSV9jb2xvdXIucG5n\" width=\"700\" height=\"1817\">\n\n### Загрузка больших данных\n\nДля загрузки csv файлов размером **более 2 ГБ** используйте терминал и следующую команду:\n\n``` bash\ncurl -X POST \"https://<HOST>:7171/projects/<project_name>/uploads\" \\\n  -H \"accept: application/json\" \\\n  -H \"Content-Type: multipart/form-data\" \\\n  -F \"file=@/path/data.csv;type=text/csv\"\n\n ```\n\nпример команды для Linux:\n\n``` bash\ncurl -X POST \"http://81.11.111.11:7171/projects/big_data/uploads\" \\\n  -H \"accept: application/json\" \\\n  -H \"Content-Type: multipart/form-data\" \\\n  -F \"file=@/home/test_10e3x100.csv;type=text/csv\"\n\n ```\n\n### Результаты обучения модели\n\nМодели доступны для скачивания методом **Get Artefact**.\n\nМетрики качества моделей можно смотреть в\n\n- **MLflow:** `http://EXTERNAL_IP:5555`\n    \n- **TensorBoard:** `http://EXTERNAL_IP:6006`\n    \n\n## 🛠Порядок установки продукта\n\n> **Важно**: Минимальные требования к ресурсам: **2 vCPU, 6 ГБ RAM, 20ГБ SSD/HDD.** Фактические требования зависят от объема загружаемых данных и требований к скорости обучения моделей.  \nРазмер RAM стороны-участника зависит от максимального размера загруженного ею файла и числа ядер процессора. \n  \n\nНа **каждой участвующей стороне** необходимо выполнить:\n\n**(1) Склонировать репозиторий**\n\n`git clone` [<code>https://github.com/guardora-ai/guardora_vfl</code>](https://github.com/guardora-ai/guardora_vfl)\n\n**(2) Настроить среду**\n\nОтредактируйте файл .env, указав следующие переменные:\n\n- `GUARDORA_FOLDER`: пустая папка на хост-машине, где будут храниться все данные. Эта папка должна существовать, и у пользователя docker должны быть права на запись в нее.\n    \n- `EXTERNAL_IP`: IP-адрес, который будут прослушивать серверы.\n    \n- `NODE_NAME`: имя ноды. Ограничения: только латиница, цифры, пробелы.\n    \n- `COMPOSE_PROFILES`: список служб MLOps для запуска и использования. Доступные параметры: tensorboard, mlflow.\n    \n- `USE_GUARDORA_UI`: Установите значение «false».\n    \n- `GUARDORA_INSTALLATION_TOKEN`: Токен для первой аутентификации после установки. Используется для защиты ноды от несанкционированного первичного доступа. Значение может быть любым непустым набором символов. Этот же токен необходимо указать при первом входе.\n    \n\nПример допустимого содержимого файла `.env`:\n\n``` bash\nGUARDORA_FOLDER=\"/opt/guardora\"\nEXTERNAL_IP=127.0.0.1\nNODE_NAME=\"MySuperNode\"\nCOMPOSE_PROFILES=tensorboard\nUSE_GUARDORA_UI=false\nGUARDORA_INSTALLATION_TOKEN=92033f53-b5cb-4183-9036-b91c8977db70\n\n ```\n\n**(3) Собрать и запустить docker контейнеры**\n\n- Сборка: `sudo docker-compose build`\n    \n- Запуск: `sudo docker-compose up -d`\n    \n\n## 🌐Сетевая доступность\n\nВо внешнюю сеть должен быть опубликован только порт 7173, используемый для коммуникации по gRPC.\n\nПорты 7171, 5555 и 6006 не подлежат публикации во внешнюю сеть и должны быть доступны только из доверенного периметра:\n\n- из внутренней корпоративной сети;\n    \n- через корпоративный VPN;\n    \n- через иные утверждённые защищённые каналы доступа.\n    \n\nНазначение внутренних портов:\n\n- 7171 - Guardora VFL API;\n    \n- 5555 - интерфейс MLflow для отслеживания метрик качества моделей;\n    \n- 6006 - интерфейс TensorBoard для отслеживания метрик качества моделей.\n    \n\n## 🚀Первый вход\n\nПосле создания виртуальной машины API становится доступным автоматически.\n\nИнтерфейс Swagger доступен по адресу: `http://EXTERNAL_IP:7171/docs`\n\nЧтобы инициализировать ноду и назначить стороне имя, необходимо выполнить `POST /node`.  \nОграничения: только латиница, цифры, пробелы.\n\n## 📡Тестирование продукта в sandbox Guardora\n\nДля удобства тестирования продукт развернут на трех виртуальных машинах. Использование возможно с помощью:\n\n- Swagger. Перейти по URL:\n    \n    - [https://sandbox-a.guardora.ru/docs#/](https://sandbox-a.guardora.ru/docs#/)\n        \n    - [https://sandbox-b.guardora.ru/docs#/](https://sandbox-b.guardora.ru/docs#/uploads/upload_file_projects__project_name__uploads_post)\n        \n    - [https://sandbox-c.guardora.ru/docs#/](https://sandbox-c.guardora.ru/docs#/invites/accept_projects__project_name__accept_post)\n        \n- Postman:\n    \n    - Загрузить в Postman коллекцию.\n        \n    - Настроить environment на указанные baseUrl:\n        \n        - [https://sandbox-a.guardora.ru](https://sandbox-a.guardora.ru)\n            \n        - [https://sandbox-b.guardora.ru](https://sandbox-b.guardora.ru)\n            \n        - [https://sandbox-c.guardora.ru](https://sandbox-c.guardora.ru)\n            \n\nДанные для тестирования доступны по ссылке: [https://guardora.ru/apidoc/mvp3.zip](https://guardora.ru/apidoc/mvp3.zip).\n\nМетрики качества моделей можно смотреть:\n\n- В MLflow ([https://sandbox-a.guardora.ru/mlflow/](https://sandbox-a.guardora.ru/tensorboard/) и т.д.[);](http://external_ip:5555)\n    \n- В TensorBoard ([https://sandbox-a.guardora.ru/tensorboard/](https://sandbox-a.guardora.ru/tensorboard/) и т.д.[).](http://external_ip:6006)","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"45495669","team":20410484,"collectionId":"c0ff85b1-be43-44eb-b38d-d8448d3c180d","publishedId":"2sB2x3otYP","public":true,"publicUrl":"https://apidoc.guardora.ru","privateUrl":"https://go.postman.co/documentation/45495669-c0ff85b1-be43-44eb-b38d-d8448d3c180d","customColor":{"top-bar":"FFFFFF","right-sidebar":"ccc7eb","highlight":"776aca"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":"Продукт Guardora VFL на основе технологии федеративного обучения позволяет повысить точность ML-моделей за счет их обучения на ранее недоступных данных внешних компаний таким образом, что данные не покидают защищенного контура владельца данных. Продукт ориентирован на работу с табличными данными."},{"name":"title","value":"Guardora VFL - Вертикальное федеративное обучение ML-моделей"}],"appearance":{"default":"system_default","themes":[{"name":"dark","logo":"https://content.pstmn.io/6b520ea6-3fc6-4541-ab21-96d0e5ea6d62/R3VhcmRvcmFfbG9nb19tYWluLnBuZw==","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"776aca"}},{"name":"light","logo":"https://content.pstmn.io/6b520ea6-3fc6-4541-ab21-96d0e5ea6d62/R3VhcmRvcmFfbG9nb19tYWluLnBuZw==","colors":{"top-bar":"FFFFFF","right-sidebar":"ccc7eb","highlight":"776aca"}}]}},"version":"8.11.6","publishDate":"2025-06-16T06:58:14.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"Guardora VFL - Вертикальное федеративное обучение ML-моделей","description":"Продукт Guardora VFL на основе технологии федеративного обучения позволяет повысить точность ML-моделей за счет их обучения на ранее недоступных данных внешних компаний таким образом, что данные не покидают защищенного контура владельца данных. Продукт ориентирован на работу с табличными данными."},"logos":{"logoLight":"https://content.pstmn.io/6b520ea6-3fc6-4541-ab21-96d0e5ea6d62/R3VhcmRvcmFfbG9nb19tYWluLnBuZw==","logoDark":"https://content.pstmn.io/6b520ea6-3fc6-4541-ab21-96d0e5ea6d62/R3VhcmRvcmFfbG9nb19tYWluLnBuZw=="}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/7bd95d1d1dbab80b66b669831448112daa209fe748c07de7536de627dd385fd8","favicon":"https://guardora.ru/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://apidoc.guardora.ru/view/metadata/2sB2x3otYP"}