Работа со скриптами
Для корректной работы со скриптами в cleanroom и получения возможности использования скриптов в cleanroom необходимо выполнить следующие требования:
1) В рамках скрипта корректно реализовать получение датасета скриптом и передачи результатов исполнения скрипта;
2) Скрипт должен быть помещен в локальный репозиторий подключенный к ADCP.
Вся работа по написанию скриптов обработки данных и внесения в них правок осуществляется на VM.
Создание и редактирование скриптов
Для реализации возможности хранения и совместной работы над скриптами к ADCP подключается VCS, по умолчанию платформа поставляется с интегрированным Gitlab, доступным из VM.
Вся работа над скриптами подразумевается именно на VM, поскольку доступ к данным сматченного датасета имеется только с VM.
В общих чертах алгоритм работы над скриптом выглядит следующим образом:
- Пользователь переходит на VM в которую уже выгружен сматченный датасет;
- Пользователь открывает GitLab в браузере на VM, по его локальному адресу (адрес будет передан компаниям отдельно для каждого инстанса) , затем:
- Создает новый проект;
- Находит уже существующий проект;
- Клонирует на VM репозиторий с кодом;
- Пользователь осуществляет написание скриптов обучения модели, первичную отладку скрипта, обучение модели на VM;
- Пользователь формирует скрипт запуска обученной модели;
- Пушит изменения в GitLab;
- Переходит в интерфейс ADCP, создает модель из запушенного скрипта и производит дебаг запуск.
При установленной в скрипте настройке "Применить расширенную выгрузку данных" также должен быть приложен readme файл для провайдера, где подробно описывается, какие его данные используются, какие его данные преобразовываются и какие его данные в исходном, преобразованном виде выбираются в результат исполнения скрипта.
Требования к скрипту
Для корректной работы скрипта необходимо чтобы он соответствовал ряду требований, обусловленных особенностями конфиденциальной среды вычислений, а именно:
Скрипт должен корректно получать сматченный датасет;
Скрипт должен корректно отдавать результаты исполнения;
По результату исполнения, скрипт должен отдавать в качестве результата файл в формате .tsv;
В результате исполнения скрипта, скрипт должен передать идентификатор клиента, из сматченного датасета = столбец
client
и скор балл = столбецscore
(при установленной в скрипте настройке "Применить расширенную выгрузку данных" могут передаться дополнительные столбцы);Скрипт должен корректно исполняться с помощью Python 3.7.
Скрипт должен быть оптимизирован по потреблению памяти, чтобы итоговый запуск в Cleanroom требовал не более 64ГБ оперативной памяти.
Далее представлен пример простого скрипта, наглядно демонстрирующий получение датасета, обработку данных датасета и передачу результата обработки:
import csv
import os
# environment variable declaration
file_path = os.environ['DATA_DIR'] + '/' + os.environ['DATASET_PATH']
result_path = os.environ['RESULT_DIR'] + '/' + os.environ['RESULT_PATH']
res = []
# open .tsv file
with open(file_path) as file:
tsv_file = csv.DictReader(file, delimiter="\t")
# parse data line by line
line_count = 0
for line in tsv_file:
line_count = line_count + 1
row = {}
row['client'] = line['client']
row['score'] = 1
res.append(row)
print("lines processed: " + str(line_count))
# write result data
header = res[0].keys()
with open(result_path, 'wt') as output_file:
dict_writer = csv.DictWriter(output_file, header, delimiter='\t')
dict_writer.writeheader()
dict_writer.writerows(res)
Работа с входным и результирующими файлами
В представленном скрипте, объявлены переменные file_path
и result_path
file_path
- эта переменная которая объявляет по какому пути будет находится файл со сматченным датасетом для дальнейшей обработки.
result_path
- эта переменная, которая объявляет по какому пути необходимо будет разместить результат исполнения скрипта. Обратите внимание, что запись результатов обработки данных необходимо записывать в .tsv файл с /t
в качестве разделителя.
Формирование результирующего файла
Обработка данных из файла может происходить в любом удобном формате, основной критерий успешного запуска - это формирование корректного результирующего файла, в примере используется простой перебор.
Как показано в примере, в качестве идентификатора пользователя использовано поле client
которое гарантированно приходит в сматченном датасете. Значение этого поля используется для идентификации пользователей при выгрузке результатов исполнения скрипта, поэтому необходимо при обработке данных использовать в качестве идентификатора именно это значение.
Результаты скоринга, после исполнения модели доступны только для пользователей давших своё согласие и которые имеют положительное согласие в базовом датасете. В случае, если вы ошибетесь и передадите в результирующем файле неоригинальные значения поля client, в результате будут получены некорректные результаты скоринга, несоответствующие исходным значениям.
Второе поле передающееся в результате, это поле score
. В этом поле необходимо передавать результат исполнения скрипта в виде скор балла. Значением этого поля может быть float
или int
.
При установленной в скрипте настройке "Применить расширенную выгрузку данных" в результат исполнения скрипта могут передаваться дополнительные поля. Значением полей, название которых начинается на score (примеры: score2, score_2), может быть float
или int
. Значением иных полей должно быть string
.
Логирование исполнения скрипта
При дебаге скрипта в cleanroom вы можете логировать те или иные действия скрипта. По завершению работы скрипта, в интерфейсе платформы вы можете получить несколько последних строк лога. Лог, доступный в интерфейсе, по факту является выводом последних строк stdout, поэтому для логирования вы можете использовать любые доступные средства, которые пишут в stdout, в примере скрипта для этого используется оператор print
.
Пример работы с PKL
Ниже представлен сценарий использования результата обучения модели - PKL файла.
В архиве ниже представлено 5 файлов, для примера сценарий предполагается следующий:
- Датасаентист готовит модель, пример в файле
Data_Labs_Model.ipynb
и в результате обучения модели получает файлcat_model.pkl
- Датасаентист пишет файл запуска
.pkl
файла, может написать в тетради jupyterCleanroom_Model.ipynb
, чтобы проверить, что отрабатывает и потом перевести его в .py файл, в примереCleanroom_Model.py
или может сразу написать в.py
. То есть должен быть описан файл для запуска pkl. - Датасаентист заменяет в
Cleanroom_Model.py
ссылки на локальные (те что на VM) файлы cо сматченным датасетом, результирующим фалом на переменные окружения, объявив переменные окружения согласно примеру. - Датасаентист пушит все 3/4 файла в Гитлаб.
- Датасаентист создает модель в интерфейсе согласно инструкции и запускает в дебаг режиме, проверяет что модель отрабатывает
- Если запуск не проходит, то необходимо перейти на VM, внести правки в скрипты/модели и пушит изменения в Гитлаб. Если параметры запускаемых файлов изменились, то необходимо изменить параметры модели в интерфейсе. Если нет, то можно просто выполнить повторный запуск модели в режиме дебаг.
В архиве лежит файл requirements.txt, в нем список библиотек которые поддерживаются в анклаве
Обучение модели выполняется на виртуальной машине.
Список доступных библиотек для запуска в анклаве
catboost==1.0.4
scipy==1.7.3
scikit-learn==0.24.1
lightgbm==3.2.1
appdirs==1.4.4
async-generator==1.10
attrs==21.2.0
backcall==0.2.0
backports.entry-points-selectable==1.1.1
beautifulsoup4==4.10.0
bleach==4.1.0
matplotlib==3.3.4
statsmodels==0.13.1
scorecardpy==0.1.9.2
openpyxl==3.0.9
xgboost==1.5.2
feature-engine==1.2.0
psutil==5.9.0
chardet==3.0.4
idna==2.8
jsonschema==3.2.0
kiwisolver==1.3.2
click==8.0.3
threadpoolctl==3.1.0
widgetsnbextension==3.5.2