Загрузка файлов

Для обучения моделей пользователю необходимо:

  1. Загрузить данные для обучения в объектное хранилище S3.

  2. Переместить данные в горячее хранилище NFS на кластере Christofari.

  3. После окончания обучения выгрузить данные из NFS на S3.

Процесс загрузки данных в хранилище S3 описан в разделе Загрузка и хранение данных.

Перемещение данных между объектным хранилищем S3 и NFS осуществляется через:

  1. Интерфейс Файлового менеджера.

  2. Правило переноса в Data transfer service.

  3. Средства библиотеки client_lib.

Подробная информация о перемещении данных на NFS приведена в разделе Управление данными.

Выгрузка данных с S3 на NFS осуществляется посредством Data transfer service или средствами библиотеки client_lib.

Работа с архивами

Данные на NFS могут храниться в виде архива. Работа с такими архивами имеет ряд особенностей, которые обусловлены ограничениями архитектуры NFS на количество файлов и длину их имен. Данные ограничения могут приводить к ошибке со стороны файловой системы при попытке распаковать архив: «Cannot open. File too large». Ошибка возникает, когда в процессе распаковки в одной папке одновременно появляется много файлов с длинными именами.

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

  1. Реорганизовать структуру данных. По возможности сгруппировать файлы и переместить их в поддиректории.

  2. Выбрать оптимальную длину имени файла. Эксперименты показали, что максимальное количество файлов, после которого проявляется ограничение файловой системы, линейно зависит от средней длины имени файла. Например, для создания в одной директории 1 млн файлов средняя длина имени файла должна составлять не более 80–85 символов.

  3. По возможности использовать данные в архивах без предварительной разархивации. Таким образом, устраняется ограничение файловой системы на количество файлов, а также повышается ее производительность. Увеличение производительности особенно заметно на медленных файловых системах, к которым относятся сетевые FS, в частности, NFS. В PyTorch это реализуется с помощью собственного класса для загрузки датасета, унаследованного от класса torch.utils.data.Dataset. Пример кода такого класса для датасета можно посмотреть в реализации класса torchvision.dataset.folder.DatasetFolder.