Перейти к основному содержимому
Версия: 1.1.0

Работа со скриптами

Для корректной работы со скриптами в cleanroom и получения возможности использования скриптов в cleanroom необходимо выполнить следующие требования:

1) В рамках скрипта корректно реализовать получение датасета скриптом и передачи результатов исполнения скрипта;

2) Скрипт должен быть помещен в локальный репозиторий подключенный к ADCP.

Вся работа по написанию скриптов обработки данных и внесения в них правок осуществляется на VM.

Создание и редактирование скриптов

Для реализации возможности хранения и совместной работы над скриптами к ADCP подключается VCS, по умолчанию платформа поставляется с интегрированным Gitlab, доступным из VM.

Вся работа над скриптами подразумевается именно на VM, поскольку доступ к данным сматченного датасета имеется только с VM.

В общих чертах алгоритм работы над скриптом выглядит следующим образом:

  1. Пользователь переходит на VM в которую уже выгружен сматченный датасет;
  2. Пользователь открывает GitLab в браузере на VM, по его локальному адресу (адрес будет передан компаниям отдельно для каждого инстанса) , затем:
    1. Создает новый проект;
    2. Находит уже существующий проект;
  3. Клонирует на VM репозиторий с кодом;
  4. Пользователь осуществляет написание скриптов обучения модели, первичную отладку скрипта, обучение модели на VM;
  5. Пользователь формирует скрипт запуска обученной модели;
  6. Пушит изменения в GitLab;
  7. Переходит в интерфейс ADCP, создает модель из запушенного скрипта и производит дебаг запуск.
caution

При установленной в скрипте настройке "Применить расширенную выгрузку данных" также должен быть приложен readme файл для провайдера, где подробно описывается, какие его данные используются, какие его данные преобразовываются и какие его данные в исходном, преобразованном виде выбираются в результат исполнения скрипта.

Требования к скрипту

Для корректной работы скрипта необходимо чтобы он соответствовал ряду требований, обусловленных особенностями конфиденциальной среды вычислений, а именно:

  1. Скрипт должен корректно получать сматченный датасет;

  2. Скрипт должен корректно отдавать результаты исполнения;

  3. По результату исполнения, скрипт должен отдавать в качестве результата файл в формате .tsv;

  4. В результате исполнения скрипта, скрипт должен передать идентификатор клиента, из сматченного датасета = столбец client и скор балл = столбец score (при установленной в скрипте настройке "Применить расширенную выгрузку данных" могут передаться дополнительные столбцы);

  5. Скрипт должен корректно исполняться с помощью Python 3.7.

  6. Скрипт должен быть оптимизирован по потреблению памяти, чтобы итоговый запуск в 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.

note

При установленной в скрипте настройке "Применить расширенную выгрузку данных" в результат исполнения скрипта могут передаваться дополнительные поля. Значением полей, название которых начинается на score (примеры: score2, score_2), может быть float или int. Значением иных полей должно быть string.

Логирование исполнения скрипта

При дебаге скрипта в cleanroom вы можете логировать те или иные действия скрипта. По завершению работы скрипта, в интерфейсе платформы вы можете получить несколько последних строк лога. Лог, доступный в интерфейсе, по факту является выводом последних строк stdout, поэтому для логирования вы можете использовать любые доступные средства, которые пишут в stdout, в примере скрипта для этого используется оператор print.

Пример работы с PKL

Ниже представлен сценарий использования результата обучения модели - PKL файла.

В архиве ниже представлено 5 файлов, для примера сценарий предполагается следующий:

  1. Датасаентист готовит модель, пример в файле Data_Labs_Model.ipynb и в результате обучения модели получает файл cat_model.pkl
  2. Датасаентист пишет файл запуска .pkl файла, может написать в тетради jupyter Cleanroom_Model.ipynb, чтобы проверить, что отрабатывает и потом перевести его в .py файл, в примере Cleanroom_Model.py или может сразу написать в .py. То есть должен быть описан файл для запуска pkl.
  3. Датасаентист заменяет в  Cleanroom_Model.py ссылки на локальные (те что на VM) файлы cо сматченным датасетом, результирующим фалом на переменные окружения, объявив переменные окружения согласно примеру.
  4. Датасаентист пушит все 3/4 файла в Гитлаб.
  5. Датасаентист создает модель в интерфейсе согласно инструкции и запускает в дебаг режиме, проверяет что модель отрабатывает
  6. Если запуск не проходит, то необходимо перейти на VM, внести правки в скрипты/модели и пушит изменения в Гитлаб. Если параметры запускаемых файлов изменились, то необходимо изменить параметры модели в интерфейсе. Если нет, то можно просто выполнить повторный запуск модели в режиме дебаг.

cleanroom_template-main.zip

caution

В архиве лежит файл requirements.txt, в нем список библиотек которые поддерживаются в анклаве

note

Обучение модели выполняется на виртуальной машине.

Список доступных библиотек для запуска в анклаве

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