Работа в среде nix¶
Предварительная настройка¶
Установите nix в режиме Single-user install версии 2.8 или более новый.
- Добавьте конфигурационный файл
~/.config/nix/nix.conf: experimental-features = nix-command flakes extra-substituters = https://is2.isa.ru:5002/semvectors trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= semvectors:5YozS85voLSajjzsSlT9Y6pDyiVnjm7kFlRWmPx6l5k= bash-prompt-prefix = dev_
Установка библиотеки¶
Установки библиотеки и всех зависимостей:
$ nix shell git+https://gitlab.com/semvectors/doc_enc
Эта команда скачает и при необходимости соберет все зависимости и создаст окружение, в котором доступны утилиты командной строки, поставляемые с библиотекой.
В случае если, планируется запускать обучение модели, нужно установить зависимости для обучения.
$ nix shell git+https://gitlab.com/semvectors/doc_enc#train
Использование GPU¶
Чтобы библиотека могла использовать GPU необходимо выставить переменную окружения с путем к директории, в которой лежит libcuda.so (разделяемая библиотека, поставляемая вместе с драйвером к GPU).
В ОС Debian эта библиотека обычно находится в директории /usr/lib/x86_64-linux-gnu/nvidia/current/.
Найти библиотеку можно с помощью команды find /usr/lib /lib -wholename "*64*libcuda.so" или find /usr/lib /lib -name "libcuda.so".
Если было найдено несколько библиотек, то необходимо выбрать библиотеку,
соответствующую архитектуре платформы (посмотреть архитектуры платформы можно с помощью команды arch).
Чтобы избежать ошибки:
UserWarning: User provided device_type of 'cuda', but CUDA is not available
Необходимо каждый раз после старта nix shell выполнять команду:
$ export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/nvidia/current/libcuda.so
Заменив на актуальный путь до libcuda.so.
Либо можно выкачать репозиторий и в нем выполнить команду
nix develop.
Тогда значение LD_LIBRARY_PATH будет изменяться автоматически.
Изменить значение пути можно в файле flake.nix в директиве shellHook.
Работа с библиотекой в командной строке¶
Преобразование документов из файловой системы¶
Все тексты должны быть предварительно сегментированы.
Предполагается, что пути к текстам для преобразования собраны в файле files.txt.
Для старта преобразования выполните следующую команду:
$ docenccli docs -i files.txt -o vecs -m models.def.pt
где models.def.pt одна из предобученных моделей. Формат результатов преобразования
Запуск обучения¶
Требуется выкачать конфигурацию для обучения из репозитория conf. Необходимо подготовить персональный конфигурационный файл по аналогии с файлом. В нем прописать локальные пути для модели токенизатора, датасета с предложениями / документами. Для тестирования удобно использовать сэмплы датасетов:
Запустить обучение можно с помощью команды:
$ run_training --config-path $(pwd)/conf +personal/dvzubarev=tsa06
указав свой персональный конфиг.
Для обучения требуется наличие GPU.
Модели и логи будут сохранены в папку train/outputs, в которой будет создаваться рабочая директория для каждого запуска обучения.
Оценка качества
Для запуска оценки качества обученных моделей нужно подготовить конфигурацию и данные.
Необходимо подготовить персональный конфигурационный файл по аналогии с файлом. В нем прописать локальные пути для модели и тестовых данных. Команда запуска обучения:
$ run_eval --config-path $(pwd)/conf +personal/dvzubarev=tsa06-quick
указав свой персональный конфиг.
Запуск настройки¶
Для запуска нужно подготовить данные и конфигурацию.
Необходимо подготовить персональный конфигурационный файл по аналогии с файлом. В нем прописать локальные пути для модели и обучающих данных. Команда запуска обучения:
$ fine_tune_classif --config-path $(pwd)/conf +personal/dvzubarev=classif_tsa06
указав свой персональный конфиг.
Использование API библиотеки¶
Для того чтобы использовать API библиотеки, необходимо выкачать репозиторий и выполнить команду nix develop.
Создайте файл enc.py, использующий API.
$ python enc.py
Создание нового проекта с зависимостью doc_enc¶
Для создания нового проекта необходимо выполнить:
$ git init proj
$ vim proj/flake.nix
$ cd proj
$ git add flake.nix
$ nix develop
Содержимое flake.nix:
{
description = "Description";
inputs.doc_enc.url = "git+https://gitlab.com/semvectors/doc_enc";
inputs.nixpkgs.follows = "doc_enc/nixpkgs";
outputs = { self, nixpkgs, doc_enc }:
let
pkgs = import nixpkgs {
system = "x86_64-linux";
overlays = [ doc_enc.overlays.default ];
config = {allowUnfree = true;};
};
pypkgs = pkgs.python.pkgs;
py-env = pkgs.python.buildEnv.override{
extraLibs = [
pypkgs.doc_enc
];
};
in {
devShells.x86_64-linux = {
default = pkgs.mkShell {
buildInputs = [
py-env
pkgs.nodePackages.pyright
pypkgs.pylint
pypkgs.black
];
shellHook=''
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/nvidia/current/
'';
};
};
};
}
После этого в новом проекте можно создавать скрипты, использующие doc_enc, например enc.py.
$ python enc.py
Среда разработки библиотеки¶
Для того, чтобы попасть в окружение с установленными зависимостями и инструментами разработки нужно выкачать проект и в корневой папке проекта выполнить nix develop.
Настройка инструментов разработки (pyright, pylint) осуществляется с помощью direnv
(можно поставить с помощью nix-env -f '<nixpkgs>' -iA direnv) и nix-direnv ( Установка ).
При условии что в вашем редакторе есть интеграция с direnv, библиотека и зависимости должны быть обнаружены.